Codeunit 9003 Team Member Action Manager, source in 29

Source29

src/Layers/W1/BaseApp/RoleCenters/TeamMemberActionManager.Codeunit.al91 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.RoleCenters;

using Microsoft.Purchases.Document;
using Microsoft.Purchases.Posting;
using Microsoft.Sales.Document;
using Microsoft.Sales.Posting;
using System.Azure.Identity;

codeunit 9003 "Team Member Action Manager"
{

    trigger OnRun()
    begin
    end;

    var
        TeamMemberErr: Label 'You are logged in as a Team Member role, so you cannot complete this task.';

    [EventSubscriber(ObjectType::Table, Database::"Sales Header", 'OnBeforeInsertEvent', '', false, false)]
    local procedure OnBeforeSalesHeaderInsert(var Rec: Record "Sales Header"; RunTrigger: Boolean)
    begin
        CheckTeamMemberPermissionOnSalesHeaderTable(Rec);
    end;

    [EventSubscriber(ObjectType::Table, Database::"Sales Header", 'OnBeforeDeleteEvent', '', false, false)]
    local procedure OnBeforeSalesHeaderDelete(var Rec: Record "Sales Header"; RunTrigger: Boolean)
    begin
        CheckTeamMemberPermissionOnSalesHeaderTable(Rec);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post", 'OnBeforePostSalesDoc', '', false, false)]
    local procedure OnBeforeSalesDocPost(var Sender: Codeunit "Sales-Post"; var SalesHeader: Record "Sales Header"; CommitIsSuppressed: Boolean; PreviewMode: Boolean)
    begin
        // Team member is not allowed to invoice a sales document.
        if IsCurrentUserAssignedTeamMemberPlan() and SalesHeader.Invoice then
            Error(TeamMemberErr);
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Purch.-Post", 'OnBeforePostPurchaseDoc', '', false, false)]
    local procedure OnBeforePurchaseDocPost(var Sender: Codeunit "Purch.-Post"; var PurchaseHeader: Record "Purchase Header"; PreviewMode: Boolean; CommitIsSupressed: Boolean)
    begin
        // Team member is not allowed to invoice a purchase document.
        if IsCurrentUserAssignedTeamMemberPlan() and PurchaseHeader.Invoice then
            Error(TeamMemberErr);
    end;

    [EventSubscriber(ObjectType::Table, Database::"Purchase Header", 'OnBeforeInsertEvent', '', false, false)]
    local procedure OnBeforePurchaseHeaderInsert(var Rec: Record "Purchase Header"; RunTrigger: Boolean)
    begin
        CheckTeamMemberPermissionOnPurchaseHeaderTable(Rec);
    end;

    [EventSubscriber(ObjectType::Table, Database::"Purchase Header", 'OnBeforeDeleteEvent', '', false, false)]
    local procedure OnBeforePurchaseHeaderDelete(var Rec: Record "Purchase Header"; RunTrigger: Boolean)
    begin
        CheckTeamMemberPermissionOnPurchaseHeaderTable(Rec);
    end;

    local procedure CheckTeamMemberPermissionOnSalesHeaderTable(var SalesHeader: Record "Sales Header")
    begin
        if SalesHeader.IsTemporary() then
            exit;

        if IsCurrentUserAssignedTeamMemberPlan() and (SalesHeader."Document Type" <> SalesHeader."Document Type"::Quote) then
            Error(TeamMemberErr);
    end;

    local procedure CheckTeamMemberPermissionOnPurchaseHeaderTable(var PurchaseHeader: Record "Purchase Header")
    begin
        if PurchaseHeader.IsTemporary() then
            exit;

        if IsCurrentUserAssignedTeamMemberPlan() and (PurchaseHeader."Document Type" <> PurchaseHeader."Document Type"::Quote) then
            Error(TeamMemberErr);
    end;

    local procedure IsCurrentUserAssignedTeamMemberPlan(): Boolean
    var
        AzureADPlan: Codeunit "Azure AD Plan";
        PlanIds: Codeunit "Plan Ids";
    begin
        exit(AzureADPlan.IsPlanAssignedToUser(PlanIds.GetTeamMemberPlanId()) or
            AzureADPlan.IsPlanAssignedToUser(PlanIds.GetTeamMemberISVPlanId()));
    end;
}