Codeunit 8365 DimPerspectiveCustom, source in 29

Source29

src/Layers/W1/BaseApp/Finance/FinancialReports/DimPerspectiveCustom.Codeunit.al109 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.FinancialReports;

using Microsoft.CashFlow.Forecast;
using Microsoft.Finance.Analysis;
using Microsoft.Finance.Dimension;
using Microsoft.Finance.GeneralLedger.Budget;
using Microsoft.Finance.GeneralLedger.Ledger;
using System.Utilities;

codeunit 8365 DimPerspectiveCustom implements IDimensionPerspective
{
    var
        DimPerspectiveMgt: Codeunit DimensionPerspectiveMgt;
        CustomTypeDescTxt: Label 'Custom totaling', MaxLength = 30;
        DeleteLinesQst: Label 'Changing away from perspective type custom will delete all lines for this dimension perspective. \Do you want to continue?';

    procedure PopulateLineBufferForReporting(DimPerspectiveName: Record "Dimension Perspective Name"; var TempDimPerspectiveLine: Record "Dimension Perspective Line")
    var
        DimPerspectiveLine: Record "Dimension Perspective Line";
    begin
        if not TempDimPerspectiveLine.IsTemporary() then
            exit;
        DimPerspectiveLine.SetRange(Name, DimPerspectiveName.Name);
        if DimPerspectiveLine.FindSet() then
            repeat
                TempDimPerspectiveLine := DimPerspectiveLine;
                TempDimPerspectiveLine.Insert();
            until DimPerspectiveLine.Next() = 0;
        OnAfterPopulateLineBufferForReporting(DimPerspectiveName, TempDimPerspectiveLine);
    end;

    procedure FilterGLEntryByPerspectiveTotaling(DimPerspectiveLine: Record "Dimension Perspective Line"; var GLEntry: Record "G/L Entry")
    begin
        DimPerspectiveMgt.FilterGLEntryByDimension(DimPerspectiveLine, GLEntry);
        DimPerspectiveMgt.FilterGLEntryByBusinessUnit(DimPerspectiveLine, GLEntry);
    end;

    procedure FilterGLBudgetEntryByPerspectiveTotaling(DimPerspectiveLine: Record "Dimension Perspective Line"; var GLBudgetEntry: Record "G/L Budget Entry")
    begin
        DimPerspectiveMgt.FilterGLBudgetEntryByDimension(DimPerspectiveLine, GLBudgetEntry);
        DimPerspectiveMgt.FilterGLBudgetEntryByBusinessUnit(DimPerspectiveLine, GLBudgetEntry);
    end;

    procedure FilterCFEntryByPerspectiveTotaling(DimPerspectiveLine: Record "Dimension Perspective Line"; var CFForecastEntry: Record "Cash Flow Forecast Entry")
    begin
        DimPerspectiveMgt.FilterCFEntryByDimension(DimPerspectiveLine, CFForecastEntry);
    end;

    procedure FilterAnalysisViewEntryByPerspectiveTotaling(DimPerspectiveLine: Record "Dimension Perspective Line"; var AnalysisViewEntry: Record "Analysis View Entry")
    begin
        DimPerspectiveMgt.FilterAnalysisViewEntryByDimension(DimPerspectiveLine, AnalysisViewEntry);
        DimPerspectiveMgt.FilterAnalysisViewEntryByBusinessUnit(DimPerspectiveLine, AnalysisViewEntry);
    end;

    procedure FilterAnalysisViewBudgetEntryByPerspectiveTotaling(DimPerspectiveLine: Record "Dimension Perspective Line"; var AnalysisViewBudgetEntry: Record "Analysis View Budget Entry")
    begin
        DimPerspectiveMgt.FilterAnalysisViewBudgetEntryByDimension(DimPerspectiveLine, AnalysisViewBudgetEntry);
        DimPerspectiveMgt.FilterAnalysisViewBudgetEntryByBusinessUnit(DimPerspectiveLine, AnalysisViewBudgetEntry);
    end;

    procedure PerspectiveTypeToText(DimPerspectiveName: Record "Dimension Perspective Name"; Type: Enum "Dimension Perspective Type"; var Text: Text): Boolean
    begin
        if Type = Type::Custom then begin
            Text := Format(Enum::"Dimension Perspective Type"::Custom);
            exit(true);
        end;
    end;

    procedure TextToPerspectiveType(DimPerspectiveName: Record "Dimension Perspective Name"; Text: Text; var Type: Enum "Dimension Perspective Type"): Boolean
    begin
        if Text = UpperCase(Format(Enum::"Dimension Perspective Type"::Custom)) then begin
            Type := Type::Custom;
            exit(true);
        end;
    end;

    procedure InsertBufferForPerspectiveTotalingLookup(DimPerspectiveName: Record "Dimension Perspective Name"; Type: Enum "Dimension Perspective Type"; var DimSelection: Page "Dimension Selection")
    begin
        DimSelection.InsertDimSelBuf(false, Format(Enum::"Dimension Perspective Type"::Custom), CustomTypeDescTxt);
    end;

    [EventSubscriber(ObjectType::Table, Database::"Dimension Perspective Name", OnAfterValidateEvent, "Perspective Type", false, false)]
    local procedure AfterValidatePerspectiveType(var Rec: Record "Dimension Perspective Name"; var xRec: Record "Dimension Perspective Name")
    var
        DimPerspectiveLine: Record "Dimension Perspective Line";
        ConfirmMgt: Codeunit "Confirm Management";
    begin
        if (xRec."Perspective Type" <> xRec."Perspective Type"::Custom) or (xRec."Perspective Type" = Rec."Perspective Type") then
            exit;

        DimPerspectiveLine.SetRange(Name, Rec.Name);
        if DimPerspectiveLine.IsEmpty() then
            exit;

        if not ConfirmMgt.GetResponseOrDefault(DeleteLinesQst, true) then
            Error('');

        DimPerspectiveLine.DeleteAll(true);
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterPopulateLineBufferForReporting(DimPerspectiveName: Record "Dimension Perspective Name"; var TempDimPerspectiveLine: Record "Dimension Perspective Line")
    begin
    end;
}