Codeunit 9095 Purch. by Vend.Grp. Chart Mgt., source in 29

Source29

src/Layers/W1/BaseApp/Purchases/Analysis/PurchbyVendGrpChartMgt.Codeunit.al127 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.Purchases.Analysis;

using Microsoft.Purchases.Vendor;
using System.Visualization;

codeunit 9095 "Purch. by Vend.Grp. Chart Mgt."
{
    InherentEntitlements = X;
    InherentPermissions = X;

    var
        PurchByVendGrpChartSetup: Record "Purch. by Vend.Grp.Chart Setup";
        TotalPurchLCYTxt: Label 'Total Purchases (LCY)';
        DateExpressionTok: Label '<1D>', Locked = true;

    /// <summary>
    /// Update the chart with the purchase by vendor group data.
    /// </summary>
    /// <param name="BusChartBuf">Return value: Business Chart Buffer record</param>
    procedure UpdateChart(var BusChartBuf: Record "Business Chart Buffer")
    var
        NoOfPeriods: Integer;
        ToDate: Date;
        FromDate: Date;
        PeriodNo: Integer;
    begin
        GetChartSetupForCurrentUser();

        NoOfPeriods := GetNumberOfPeriods();
        BusChartBuf.Initialize();
        BusChartBuf."Period Length" := PurchByVendGrpChartSetup."Period Length";
        BusChartBuf."Period Filter Start Date" := PurchByVendGrpChartSetup."Start Date";

        FromDate := BusChartBuf.CalcFromDate(BusChartBuf."Period Filter Start Date");
        for PeriodNo := 1 to NoOfPeriods do begin
            ToDate := BusChartBuf.CalcToDate(FromDate);
            FromDate := CalcDate(DateExpressionTok, ToDate);
        end;
        BusChartBuf."Period Filter End Date" := ToDate;

        BusChartBuf.SetPeriodXAxis();
        BusChartBuf.AddPeriods(BusChartBuf.CalcFromDate(BusChartBuf."Period Filter Start Date"), ToDate);

        CalcVendorPurchases(BusChartBuf, NoOfPeriods);
    end;

    /// <summary>
    /// Drill down to the vendor list page based on the selected vendor group.
    /// </summary>
    /// <param name="BusChartBuf">Return value: Business Chart Buffer record</param>
    procedure DrillDown(var BusChartBuf: Record "Business Chart Buffer")
    var
        Vendor: Record Vendor;
        ToDate: Date;
        FromDate: Date;
        MeasureValueString: Text;
    begin
        GetChartSetupForCurrentUser();

        BusChartBuf."Period Length" := PurchByVendGrpChartSetup."Period Length";
        ToDate := BusChartBuf.GetXValueAsDate(BusChartBuf."Drill-Down X Index");
        FromDate := BusChartBuf.CalcFromDate(ToDate);
        MeasureValueString := BusChartBuf.GetMeasureValueString(BusChartBuf."Drill-Down Measure Index");

        if MeasureValueString <> '' then
            Vendor.SetRange("Vendor Posting Group", MeasureValueString);
        Vendor.SetRange("Date Filter", FromDate, ToDate);
        Page.Run(Page::"Vendor List", Vendor);
    end;

    local procedure CalcVendorPurchases(var BusChartBuf: Record "Business Chart Buffer"; NoOfPeriods: Decimal)
    var
        PurchaseByVendorGroup: Query "Purchase by Vendor Group";
        TotalSalesValue: Decimal;
        FromDate: Date;
        ToDate: Date;
        PeriodNo: Integer;
    begin
        BusChartBuf.AddDecimalMeasure(TotalPurchLCYTxt, '', BusChartBuf."Chart Type"::Line);

        FromDate := BusChartBuf.CalcFromDate(BusChartBuf."Period Filter Start Date");
        for PeriodNo := 1 to NoOfPeriods do begin
            ToDate := BusChartBuf.CalcToDate(FromDate);
            TotalSalesValue := 0;

            PurchaseByVendorGroup.SetRange(Date_Filter, FromDate, ToDate);
            PurchaseByVendorGroup.Open();

            if PurchaseByVendorGroup.Read() then
                repeat
                    if PeriodNo = 1 then
                        BusChartBuf.AddDecimalMeasure(PurchaseByVendorGroup.Code, PurchaseByVendorGroup.Code, BusChartBuf."Chart Type"::Column);
                    BusChartBuf.SetValue(PurchaseByVendorGroup.Code, PeriodNo - 1, PurchaseByVendorGroup.Purchases__LCY_);

                    TotalSalesValue += PurchaseByVendorGroup.Purchases__LCY_;
                until not PurchaseByVendorGroup.Read()
            else begin
                BusChartBuf.Initialize();
                exit;
            end;

            BusChartBuf.SetValue(TotalPurchLCYTxt, PeriodNo - 1, TotalSalesValue);
            FromDate := CalcDate(DateExpressionTok, ToDate);
        end;
    end;

    local procedure GetChartSetupForCurrentUser()
    begin
        if PurchByVendGrpChartSetup.Get(UserId) then
            exit;
        PurchByVendGrpChartSetup.Init();
        PurchByVendGrpChartSetup."User ID" := UserId();
        PurchByVendGrpChartSetup."Start Date" := WorkDate();
        PurchByVendGrpChartSetup."Period Length" := PurchByVendGrpChartSetup."Period Length"::Week;
        PurchByVendGrpChartSetup.Insert(true);
    end;

    local procedure GetNumberOfPeriods(): Integer
    begin
        exit(5);
    end;

}