Codeunit 6307 PBI Aged Inventory Calc., source in 29

Source29

src/Layers/W1/BaseApp/Integration/PowerBI/ReportingData/PBIAgedInventoryCalc.Codeunit.al100 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.Integration.PowerBI;

using Microsoft.Inventory.Analysis;
using System.Environment;
using System.Visualization;

codeunit 6307 "PBI Aged Inventory Calc."
{

    trigger OnRun()
    begin
    end;

    var
        TempBusinessChartBuffer: Record "Business Chart Buffer" temporary;
        AgedInventoryChartMgt: Codeunit "Aged Inventory Chart Mgt.";

    [Scope('OnPrem')]
    procedure GetValues(var TempPowerBIChartBuffer: Record "Power BI Chart Buffer" temporary)
    var
        SelectedChartDefinition: Record "Chart Definition";
        ChartManagement: Codeunit "Chart Management";
        i: Integer;
        DummyInvtValue: array[5] of Decimal;
        PeriodStartDate: array[6] of Date;
    begin
        for i := 0 to 4 do begin
            Clear(DummyInvtValue);
            ChartManagement.SetPeriodLength(SelectedChartDefinition, TempBusinessChartBuffer, i, false);
            CalcPeriodStartDates(PeriodStartDate, AgedInventoryChartMgt.GetPeriodLengthInDays(TempBusinessChartBuffer));
            AgedInventoryChartMgt.CalcInventoryValuePerAge(DummyInvtValue, PeriodStartDate);
            InsertToBuffer(TempPowerBIChartBuffer, DummyInvtValue);
        end;
    end;

    local procedure CalcPeriodStartDates(var PeriodStartDate: array[6] of Date; PeriodLength: Integer)
    var
        LogInManagement: Codeunit LogInManagement;
        I: Integer;
    begin
        PeriodStartDate[6] := LogInManagement.GetDefaultWorkDate();
        PeriodStartDate[1] := 0D;
        for I := 2 to 5 do
            PeriodStartDate[I] := CalcDate('<-' + Format((6 - I) * PeriodLength) + 'D>', PeriodStartDate[6]);
    end;

    local procedure InsertToBuffer(var TempPowerBIChartBuffer: Record "Power BI Chart Buffer" temporary; pInvtValue: array[5] of Decimal)
    var
        i: Integer;
    begin
        for i := 1 to 5 do begin
            if TempPowerBIChartBuffer.FindLast() then
                TempPowerBIChartBuffer.ID += 1
            else
                TempPowerBIChartBuffer.ID := 1;
            TempPowerBIChartBuffer.Value := pInvtValue[i];
            TempPowerBIChartBuffer."Period Type" := TempBusinessChartBuffer."Period Length";
            TempPowerBIChartBuffer.Date := AddChartColumns(TempBusinessChartBuffer, -i);
            TempPowerBIChartBuffer."Period Type Sorting" := TempPowerBIChartBuffer."Period Type";
            TempPowerBIChartBuffer.Insert();
        end
    end;

    local procedure AddChartColumns(var BusChartBuf: Record "Business Chart Buffer"; I: Integer): Text[30]
    var
        AgedInventoryChartMgt: Codeunit "Aged Inventory Chart Mgt.";
        PeriodLengthOnXAxis: Integer;
        XAxisValueTxt: Text[30];
        LastXAxisValueTxt: Text[30];
        J: Integer;
        Value1: Integer;
        Value2: Integer;
    begin
        I := I + 5;

        PeriodLengthOnXAxis := AgedInventoryChartMgt.GetPeriodLengthInDays(BusChartBuf);
        if PeriodLengthOnXAxis = 365 then begin
            PeriodLengthOnXAxis := 1;
            XAxisValueTxt := AgedInventoryChartMgt.FromToYearsTxt();
            LastXAxisValueTxt := AgedInventoryChartMgt.OverYearsTxt();
        end else begin
            XAxisValueTxt := AgedInventoryChartMgt.FromToDaysTxt();
            LastXAxisValueTxt := AgedInventoryChartMgt.OverDaysTxt();
        end;
        if I < 4 then begin
            J := I + 1;
            Value1 := I * PeriodLengthOnXAxis;
            Value2 := J * PeriodLengthOnXAxis;
            exit(StrSubstNo(XAxisValueTxt, Value1, Value2));
            // X-Axis value
        end;
        exit(StrSubstNo(LastXAxisValueTxt, Format(4 * PeriodLengthOnXAxis)));  // X-Axis value
    end;
}