Report 87 Copy - General Posting Setup, source in 29

Source29

src/Layers/W1/BaseApp/Finance/GeneralLedger/Setup/CopyGeneralPostingSetup.Report.al250 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.Finance.GeneralLedger.Setup;

using System.Utilities;

/// <summary>
/// Copies selected sets of posting accounts from one General Posting Setup to another.
/// Supports copying Sales, Purchase, Inventory, and Manufacturing account mappings.
/// </summary>
report 87 "Copy - General Posting Setup"
{
    Caption = 'Copy - General Posting Setup';
    ProcessingOnly = true;

    dataset
    {
        dataitem("General Posting Setup"; "General Posting Setup")
        {
            DataItemTableView = sorting("Gen. Bus. Posting Group", "Gen. Prod. Posting Group");

            trigger OnAfterGetRecord()
            var
                ConfirmManagement: Codeunit "Confirm Management";
            begin
                GenPostingSetup.Find();
                if CopySales then begin
                    "Sales Account" := GenPostingSetup."Sales Account";
                    "Sales Credit Memo Account" := GenPostingSetup."Sales Credit Memo Account";
                    "Sales Line Disc. Account" := GenPostingSetup."Sales Line Disc. Account";
                    "Sales Inv. Disc. Account" := GenPostingSetup."Sales Inv. Disc. Account";
                    "Sales Pmt. Disc. Debit Acc." := GenPostingSetup."Sales Pmt. Disc. Debit Acc.";
                    "Sales Pmt. Disc. Credit Acc." := GenPostingSetup."Sales Pmt. Disc. Credit Acc.";
                    "Sales Pmt. Tol. Debit Acc." := GenPostingSetup."Sales Pmt. Tol. Debit Acc.";
                    "Sales Pmt. Tol. Credit Acc." := GenPostingSetup."Sales Pmt. Tol. Credit Acc.";
                    "Sales Prepayments Account" := GenPostingSetup."Sales Prepayments Account";
                end;

                if CopyPurchases then begin
                    "Purch. Account" := GenPostingSetup."Purch. Account";
                    "Purch. Credit Memo Account" := GenPostingSetup."Purch. Credit Memo Account";
                    "Purch. Line Disc. Account" := GenPostingSetup."Purch. Line Disc. Account";
                    "Purch. Inv. Disc. Account" := GenPostingSetup."Purch. Inv. Disc. Account";
                    "Purch. Pmt. Disc. Debit Acc." := GenPostingSetup."Purch. Pmt. Disc. Debit Acc.";
                    "Purch. Pmt. Disc. Credit Acc." := GenPostingSetup."Purch. Pmt. Disc. Credit Acc.";
                    "Purch. FA Disc. Account" := GenPostingSetup."Purch. FA Disc. Account";
                    "Purch. Pmt. Tol. Debit Acc." := GenPostingSetup."Purch. Pmt. Tol. Debit Acc.";
                    "Purch. Pmt. Tol. Credit Acc." := GenPostingSetup."Purch. Pmt. Tol. Credit Acc.";
                    "Purch. Prepayments Account" := GenPostingSetup."Purch. Prepayments Account";
                end;

                if CopyInventory then begin
                    "COGS Account" := GenPostingSetup."COGS Account";
                    "COGS Account (Interim)" := GenPostingSetup."COGS Account (Interim)";
                    "Inventory Adjmt. Account" := GenPostingSetup."Inventory Adjmt. Account";
                    "Invt. Accrual Acc. (Interim)" := GenPostingSetup."Invt. Accrual Acc. (Interim)";
                end;

                if CopyManufacturing then begin
                    "Direct Cost Applied Account" := GenPostingSetup."Direct Cost Applied Account";
                    "Overhead Applied Account" := GenPostingSetup."Overhead Applied Account";
                    "Purchase Variance Account" := GenPostingSetup."Purchase Variance Account";
                end;

                OnAfterCopyGenPostingSetup("General Posting Setup", GenPostingSetup, CopySales, CopyPurchases, CopyInventory, CopyManufacturing);

                if ConfirmManagement.GetResponseOrDefault(Text000, true) then begin
                    Modify();
                    OnAfterGetRecordOnAfterConfirmAndModify("General Posting Setup", GenPostingSetup);
                end;
            end;

            trigger OnPreDataItem()
            begin
                SetRange("Gen. Bus. Posting Group", UseGenPostingSetup."Gen. Bus. Posting Group");
                SetRange("Gen. Prod. Posting Group", UseGenPostingSetup."Gen. Prod. Posting Group");
            end;
        }
    }

    requestpage
    {
        SaveValues = true;

        layout
        {
            area(content)
            {
                group(Options)
                {
                    Caption = 'Options';
                    field(GenBusPostingGroup; GenPostingSetup."Gen. Bus. Posting Group")
                    {
                        ApplicationArea = Basic, Suite;
                        Caption = 'Gen. Bus. Posting Group';
                        TableRelation = "Gen. Business Posting Group";
                        ToolTip = 'Specifies the general business posting group to copy from.';
                    }
                    field(GenProdPostingGroup; GenPostingSetup."Gen. Prod. Posting Group")
                    {
                        ApplicationArea = Basic, Suite;
                        Caption = 'Gen. Prod. Posting Group';
                        TableRelation = "Gen. Product Posting Group";
                        ToolTip = 'Specifies general product posting group to copy from.';
                    }
                    field(Copy; Selection)
                    {
                        ApplicationArea = Basic, Suite;
                        Caption = 'Copy';
                        OptionCaption = 'All fields,Selected fields';
                        ToolTip = 'Specifies if all fields or only selected fields are copied.';

                        trigger OnValidate()
                        begin
                            if Selection = Selection::"All fields" then
                                AllFieldsSelectionOnValidate();
                        end;
                    }
                    field(SalesAccounts; CopySales)
                    {
                        ApplicationArea = Basic, Suite;
                        Caption = 'Sales Accounts';
                        ToolTip = 'Specifies if you want to copy sales accounts.';

                        trigger OnValidate()
                        begin
                            Selection := Selection::"Selected fields";
                        end;
                    }
                    field(PurchaseAccounts; CopyPurchases)
                    {
                        ApplicationArea = Basic, Suite;
                        Caption = 'Purchase Accounts';
                        ToolTip = 'Specifies if you want to copy purchase accounts.';

                        trigger OnValidate()
                        begin
                            Selection := Selection::"Selected fields";
                        end;
                    }
                    field(InventoryAccounts; CopyInventory)
                    {
                        ApplicationArea = Basic, Suite;
                        Caption = 'Inventory Accounts';
                        ToolTip = 'Specifies if you want to copy inventory accounts.';

                        trigger OnValidate()
                        begin
                            Selection := Selection::"Selected fields";
                        end;
                    }
                    field(ManufacturingAccounts; CopyManufacturing)
                    {
                        ApplicationArea = Basic, Suite;
                        Caption = 'Manufacturing Accounts';
                        ToolTip = 'Specifies if you want to copy manufacturing accounts.';

                        trigger OnValidate()
                        begin
                            Selection := Selection::"Selected fields";
                        end;
                    }
                }
            }
        }

        actions
        {
        }

        trigger OnOpenPage()
        begin
            if Selection = Selection::"All fields" then begin
                CopySales := true;
                CopyPurchases := true;
                CopyInventory := true;
                CopyManufacturing := true;
            end;
        end;
    }

    labels
    {
    }

    var
        UseGenPostingSetup: Record "General Posting Setup";
        GenPostingSetup: Record "General Posting Setup";
        CopySales: Boolean;
        CopyPurchases: Boolean;
        CopyInventory: Boolean;
        CopyManufacturing: Boolean;

#pragma warning disable AA0074
        Text000: Label 'Copy General Posting Setup?';
#pragma warning restore AA0074

    protected var
        Selection: Option "All fields","Selected fields";

    /// <summary>
    /// Sets the source General Posting Setup record to copy from.
    /// </summary>
    /// <param name="GenPostingSetup2">Source General Posting Setup</param>
    procedure SetGenPostingSetup(GenPostingSetup2: Record "General Posting Setup")
    begin
        UseGenPostingSetup := GenPostingSetup2;
    end;

    /// <summary>
    /// Integration event raised after copying fields from the source to the current General Posting Setup.
    /// </summary>
    /// <param name="ToGeneralPostingSetup">Target record being modified</param>
    /// <param name="FromGeneralPostingSetup">Source record</param>
    /// <param name="CopySales">True when copying sales accounts</param>
    /// <param name="CopyPurchases">True when copying purchase accounts</param>
    /// <param name="CopyInventory">True when copying inventory accounts</param>
    /// <param name="CopyManufacturing">True when copying manufacturing accounts</param>
    [IntegrationEvent(true, false)]
    local procedure OnAfterCopyGenPostingSetup(var ToGeneralPostingSetup: Record "General Posting Setup"; FromGeneralPostingSetup: Record "General Posting Setup"; var CopySales: Boolean; var CopyPurchases: Boolean; var CopyInventory: Boolean; var CopyManufacturing: Boolean)
    begin
    end;

    /// <summary>
    /// Raised after the target General Posting Setup is modified, once the user confirms the copy.
    /// </summary>
    /// <param name="ToGeneralPostingSetup">Target record that was modified</param>
    /// <param name="FromGeneralPostingSetup">Source record</param>
    [IntegrationEvent(true, false)]
    local procedure OnAfterGetRecordOnAfterConfirmAndModify(var ToGeneralPostingSetup: Record "General Posting Setup"; FromGeneralPostingSetup: Record "General Posting Setup")
    begin
    end;

    local procedure AllFieldsSelectionOnPush()
    begin
        CopySales := true;
        CopyPurchases := true;
        CopyInventory := true;
        CopyManufacturing := true;
    end;

    local procedure AllFieldsSelectionOnValidate()
    begin
        AllFieldsSelectionOnPush();
    end;
}