Report 1135 Copy G/L Budget to Cost Acctg., source in 29

Source29

src/Layers/W1/BaseApp/CostAccounting/Budget/CopyGLBudgettoCostAcctg.Report.al267 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.CostAccounting.Budget;

using Microsoft.CostAccounting.Account;
using Microsoft.CostAccounting.Setup;
using Microsoft.Finance.GeneralLedger.Account;
using Microsoft.Finance.GeneralLedger.Budget;

report 1135 "Copy G/L Budget to Cost Acctg."
{
    Caption = 'Copy G/L Budget to Cost Acctg.';
    ToolTip = 'Copy general ledger budget figures to the cost accounting budget. You can also enter budgets for the cost centers and cost objects in the general ledger.';
    ProcessingOnly = true;

    dataset
    {
        dataitem("G/L Budget Entry"; "G/L Budget Entry")
        {
            DataItemTableView = sorting("Budget Name", "G/L Account No.", Date);
            RequestFilterFields = "Budget Name", "G/L Account No.", Date, "Global Dimension 1 Code", "Global Dimension 2 Code", "Budget Dimension 1 Code", "Budget Dimension 2 Code", "Budget Dimension 3 Code", "Budget Dimension 4 Code";

            trigger OnAfterGetRecord()
            begin
                CostBudgetEntry.Init();
                CostBudgetEntry."Entry No." := NextEntryNo;

                CostBudgetEntry."Budget Name" := CostBudgetEntryTarget."Budget Name";

                if DateFormulaChange <> '' then
                    CostBudgetEntry.Date := CalcDate(DateFormula, Date)
                else
                    CostBudgetEntry.Date := Date;

                if CostBudgetEntryTarget."Cost Type No." <> '' then
                    CostBudgetEntry."Cost Type No." := CostBudgetEntryTarget."Cost Type No."
                else begin
                    if not GLAccount.Get("G/L Account No.") or (GLAccount."Cost Type No." = '') then begin
                        NoSkipped := NoSkipped + 1;
                        CurrReport.Skip();
                    end;
                    CostBudgetEntry."Cost Type No." := GLAccount."Cost Type No.";
                end;

                if CostBudgetEntryTarget."Cost Center Code" <> '' then
                    CostBudgetEntry."Cost Center Code" := CostBudgetEntryTarget."Cost Center Code"
                else begin
                    CostBudgetEntry."Cost Center Code" := CostAccMgt.GetCostCenterCodeFromDimSet("Dimension Set ID");
                    if not CostAccMgt.CostCenterExists(CostBudgetEntry."Cost Center Code") then
                        CostBudgetEntry."Cost Center Code" := '';
                end;

                if CostBudgetEntry."Cost Center Code" = '' then
                    if CostBudgetEntryTarget."Cost Object Code" <> '' then
                        CostBudgetEntry."Cost Object Code" := CostBudgetEntryTarget."Cost Object Code"
                    else begin
                        CostBudgetEntry."Cost Object Code" := CostAccMgt.GetCostObjectCodeFromDimSet("Dimension Set ID");
                        if not CostAccMgt.CostObjectExists(CostBudgetEntry."Cost Object Code") then
                            CostBudgetEntry."Cost Object Code" := '';
                    end;

                if (CostBudgetEntry."Cost Center Code" = '') and (CostBudgetEntry."Cost Object Code" = '') then begin
                    NoSkipped := NoSkipped + 1;
                    CurrReport.Skip();
                end;

                CostBudgetEntry.Amount := Amount;
                CostBudgetEntry.Description := Description;
                TotalAmount := TotalAmount + Amount;

                OnAfterGetRecordOnBeforeCostBudgetEntryInsert(CostBudgetEntry);
                CostBudgetEntry.Insert();
                NextEntryNo := NextEntryNo + 1;

                NoInserted := NoInserted + 1;
                if (NoInserted mod 100) = 0 then
                    Window.Update(2, NoInserted);
            end;

            trigger OnPostDataItem()
            begin
                LastGLBudgetEntryNo := "Entry No.";
                Window.Close();

                if NoInserted = 0 then begin
                    Message(Text006, NoSkipped);
                    Error('');
                end;

                if not Confirm(Text003, true, NoInserted, CostBudgetEntryTarget."Budget Name", NoSkipped) then
                    Error('');

                OnPostDataItemOnAfterConfirmCopyBudget(CostBudgetEntry, CostBudgetEntryTarget);

                LastCostBudgetEntryNo := NextEntryNo - 1;

                CostBudgetRegister.LockTable();
                if CostBudgetRegister.FindLast() then
                    LastRegisterNo := CostBudgetRegister."No.";

                CostBudgetRegister.Init();
                CostBudgetRegister."No." := LastRegisterNo + 1;
                CostBudgetRegister."Journal Batch Name" := '';
                CostBudgetRegister."Cost Budget Name" := CostBudgetEntryTarget."Budget Name";
                CostBudgetRegister.Source := CostBudgetRegister.Source::"Transfer from G/L Budget";
                CostBudgetRegister."From Budget Entry No." := FirstGLBudgetEntryNo;
                CostBudgetRegister."To Budget Entry No." := LastGLBudgetEntryNo;
                CostBudgetRegister."From Cost Budget Entry No." := FirstCostBudgetEntryNo;
                CostBudgetRegister."To Cost Budget Entry No." := LastCostBudgetEntryNo;
                CostBudgetRegister."No. of Entries" := NoInserted;
                CostBudgetRegister.Amount := TotalAmount;
                CostBudgetRegister."User ID" := CopyStr(UserId(), 1, MaxStrLen("User ID"));
                CostBudgetRegister."Processed Date" := Today;
                CostBudgetRegister.Insert();
            end;

            trigger OnPreDataItem()
            begin
                if GetFilter("Budget Name") = '' then
                    Error(Text004);

                if CostBudgetEntryTarget."Budget Name" = '' then
                    Error(Text005);

                if not Confirm(Text000, true, GetFilter("Budget Name"), CostBudgetEntryTarget."Budget Name") then
                    Error('');

                LockTable();

                NextEntryNo := CostBudgetEntry.GetLastEntryNo() + 1;

                Window.Open(Text002);

                Window.Update(1, Count);

                FirstCostBudgetEntryNo := NextEntryNo;
                FindFirst();
                FirstGLBudgetEntryNo := "Entry No.";
            end;
        }
    }

    requestpage
    {
        SaveValues = true;

        layout
        {
            area(content)
            {
                group(Options)
                {
                    Caption = 'Options';
                    group("Copy to...")
                    {
                        Caption = 'Copy to...';
                        field("Budget Name"; CostBudgetEntryTarget."Budget Name")
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Budget Name';
                            Lookup = true;
                            TableRelation = "Cost Budget Name";
                            ToolTip = 'Specifies the name of the budget.';
                        }
                        field("Cost Type No."; CostBudgetEntryTarget."Cost Type No.")
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Type No.';
                            Lookup = true;
                            TableRelation = "Cost Type";
                            ToolTip = 'Specifies the cost type number for the general ledger budget figure.';
                        }
                        field("Cost Center Code"; CostBudgetEntryTarget."Cost Center Code")
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Center Code';
                            Lookup = true;
                            TableRelation = "Cost Center";
                            ToolTip = 'Specifies the cost center code that applies.';
                        }
                        field("Cost Object Code"; CostBudgetEntryTarget."Cost Object Code")
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Object Code';
                            Lookup = true;
                            TableRelation = "Cost Object";
                            ToolTip = 'Specifies the code of the cost element.';
                        }
                    }
                    field("Date Change Formula"; DateFormulaChange)
                    {
                        ApplicationArea = CostAccounting;
                        Caption = 'Date Change Formula';
                        DateFormula = true;
                        ToolTip = 'Specifies how the dates on the entries that are copied will be changed. For example, to copy last week''s budget to this week, use the formula 1W, which is one week.';

                        trigger OnValidate()
                        begin
                            Evaluate(DateFormula, DateFormulaChange);
                        end;
                    }
                }
            }
        }

        actions
        {
        }

        trigger OnOpenPage()
        begin
            CostBudgetEntryTarget.Init();
        end;
    }

    labels
    {
    }

    protected var
        CostBudgetEntryTarget: Record "Cost Budget Entry";

    var
        CostBudgetEntry: Record "Cost Budget Entry";
        GLAccount: Record "G/L Account";
        CostBudgetRegister: Record "Cost Budget Register";
        CostAccMgt: Codeunit "Cost Account Mgt";
        DateFormula: DateFormula;
        Window: Dialog;
        DateFormulaChange: Code[10];
        NextEntryNo: Integer;
        NoInserted: Integer;
        NoSkipped: Integer;
        FirstGLBudgetEntryNo: Integer;
        LastGLBudgetEntryNo: Integer;
        FirstCostBudgetEntryNo: Integer;
        LastCostBudgetEntryNo: Integer;
        TotalAmount: Decimal;
        LastRegisterNo: Integer;

#pragma warning disable AA0074
#pragma warning disable AA0470
        Text000: Label 'Do you want to copy the general ledger budget "%1" to cost budget "%2"?';
        Text002: Label 'Copying budget entries\No of entries #1#####\Copied        #2#####';
        Text003: Label '%1 entries generated in budget %2.\\%3 entries were skipped because there were either no corresponding G/L accounts defined or cost center and cost object were missing.\\Copy budget?', Comment = '%2=budget name;%3=integer value';
#pragma warning restore AA0470
        Text004: Label 'Define name of source budget.';
        Text005: Label 'Define name of target budget.';
#pragma warning disable AA0470
        Text006: Label 'No entries were copied. %1 entries were skipped because no corresponding general ledger accounts were defined or because cost center and cost object were missing.';
#pragma warning restore AA0470
#pragma warning restore AA0074

    [IntegrationEvent(false, false)]
    local procedure OnAfterGetRecordOnBeforeCostBudgetEntryInsert(var CostBudgetEntry: Record "Cost Budget Entry")
    begin
    end;

    [IntegrationEvent(true, false)]
    local procedure OnPostDataItemOnAfterConfirmCopyBudget(var CostBudgetEntry: Record "Cost Budget Entry"; CostBudgetEntryTarget: Record "Cost Budget Entry")
    begin
    end;
}