Page 9211 Resource Alloc. per Job Matrix, source in 29

Source29

src/Layers/W1/BaseApp/Projects/Project/Analysis/ResourceAllocperJobMatrix.Page.al642 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.Projects.Project.Analysis;

using Microsoft.Foundation.Enums;
using Microsoft.Foundation.UOM;
using Microsoft.Projects.Project.Job;
using Microsoft.Projects.Project.Planning;
using System.Utilities;

page 9211 "Resource Alloc. per Job Matrix"
{
    Caption = 'Resource Allocated per Project Matrix';
    DataCaptionExpression = '';
    Editable = false;
    LinksAllowed = false;
    PageType = List;
    SourceTable = Job;

    layout
    {
        area(content)
        {
            repeater(Control1)
            {
                ShowCaption = false;
                field("No."; Rec."No.")
                {
                    ApplicationArea = Jobs;
                    Editable = false;
                }
                field("Bill-to Name"; Rec."Bill-to Name")
                {
                    ApplicationArea = Jobs;
                }
                field(Col1; MatrixCellData[1])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[1];
                    DrillDown = true;
                    DrillDownPageID = "Job Planning Lines";
                    Editable = false;
                    Visible = Col1Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(1);
                    end;
                }
                field(Col2; MatrixCellData[2])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[2];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col2Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(2);
                    end;
                }
                field(Col3; MatrixCellData[3])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[3];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col3Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(3);
                    end;
                }
                field(Col4; MatrixCellData[4])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[4];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col4Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(4);
                    end;
                }
                field(Col5; MatrixCellData[5])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[5];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col5Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(5);
                    end;
                }
                field(Col6; MatrixCellData[6])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[6];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col6Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(6);
                    end;
                }
                field(Col7; MatrixCellData[7])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[7];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col7Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(7);
                    end;
                }
                field(Col8; MatrixCellData[8])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[8];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col8Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(8);
                    end;
                }
                field(Col9; MatrixCellData[9])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[9];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col9Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(9);
                    end;
                }
                field(Col10; MatrixCellData[10])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[10];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col10Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(10);
                    end;
                }
                field(Col11; MatrixCellData[11])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[11];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col11Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(11);
                    end;
                }
                field(Col12; MatrixCellData[12])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[12];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col12Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(12);
                    end;
                }
                field(Col13; MatrixCellData[13])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[13];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col13Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(13);
                    end;
                }
                field(Col14; MatrixCellData[14])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[14];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col14Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(14);
                    end;
                }
                field(Col15; MatrixCellData[15])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[15];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col15Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(15);
                    end;
                }
                field(Col16; MatrixCellData[16])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[16];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col16Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(16);
                    end;
                }
                field(Col17; MatrixCellData[17])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[17];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col17Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(17);
                    end;
                }
                field(Col18; MatrixCellData[18])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[18];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col18Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(18);
                    end;
                }
                field(Col19; MatrixCellData[19])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[19];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col19Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(19);
                    end;
                }
                field(Col20; MatrixCellData[20])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[20];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col20Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(20);
                    end;
                }
                field(Col21; MatrixCellData[21])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[21];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col21Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(21);
                    end;
                }
                field(Col22; MatrixCellData[22])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[22];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col22Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(22);
                    end;
                }
                field(Col23; MatrixCellData[23])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[23];
                    DrillDown = true;
                    Editable = false;
                    Visible = Col23Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(23);
                    end;
                }
                field(Col24; MatrixCellData[24])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[24];
                    Visible = Col24Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(24);
                    end;
                }
                field(Col25; MatrixCellData[25])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[25];
                    Visible = Col25Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(25);
                    end;
                }
                field(Col26; MatrixCellData[26])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[26];
                    Visible = Col26Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(26);
                    end;
                }
                field(Col27; MatrixCellData[27])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[27];
                    Visible = Col27Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(27);
                    end;
                }
                field(Col28; MatrixCellData[28])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[28];
                    Visible = Col28Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(28);
                    end;
                }
                field(Col29; MatrixCellData[29])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[29];
                    Visible = Col29Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(29);
                    end;
                }
                field(Col30; MatrixCellData[30])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[30];
                    Visible = Col30Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(30);
                    end;
                }
                field(Col31; MatrixCellData[31])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[31];
                    Visible = Col31Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(31);
                    end;
                }
                field(Col32; MatrixCellData[32])
                {
                    ApplicationArea = All;
                    CaptionClass = '3,' + MatrixColumnCaptions[32];
                    Visible = Col32Visible;

                    trigger OnDrillDown()
                    begin
                        MatrixOnDrillDown(32);
                    end;
                }
            }
        }
    }

    actions
    {
    }

    trigger OnAfterGetRecord()
    begin
        MatrixOnAfterGetRecord();
    end;

    trigger OnInit()
    begin
        Col32Visible := true;
        Col31Visible := true;
        Col30Visible := true;
        Col29Visible := true;
        Col28Visible := true;
        Col27Visible := true;
        Col26Visible := true;
        Col25Visible := true;
        Col24Visible := true;
        Col23Visible := true;
        Col22Visible := true;
        Col21Visible := true;
        Col20Visible := true;
        Col19Visible := true;
        Col18Visible := true;
        Col17Visible := true;
        Col16Visible := true;
        Col15Visible := true;
        Col14Visible := true;
        Col13Visible := true;
        Col12Visible := true;
        Col11Visible := true;
        Col10Visible := true;
        Col9Visible := true;
        Col8Visible := true;
        Col7Visible := true;
        Col6Visible := true;
        Col5Visible := true;
        Col4Visible := true;
        Col3Visible := true;
        Col2Visible := true;
        Col1Visible := true;
    end;

    var
        MatrixColumnDateFilters: array[32] of Record Date;
        MatrixRec: Record "Job Planning Line";
        UOMMgt: Codeunit "Unit of Measure Management";
        MatrixColumnCaptions: array[32] of Text[100];
        MatrixCellData: array[32] of Text[100];
        MatrixCellQuantity: Decimal;
        AmountType: Enum "Analysis Amount Type";
        Col1Visible: Boolean;
        Col2Visible: Boolean;
        Col3Visible: Boolean;
        Col4Visible: Boolean;
        Col5Visible: Boolean;
        Col6Visible: Boolean;
        Col7Visible: Boolean;
        Col8Visible: Boolean;
        Col9Visible: Boolean;
        Col10Visible: Boolean;
        Col11Visible: Boolean;
        Col12Visible: Boolean;
        Col13Visible: Boolean;
        Col14Visible: Boolean;
        Col15Visible: Boolean;
        Col16Visible: Boolean;
        Col17Visible: Boolean;
        Col18Visible: Boolean;
        Col19Visible: Boolean;
        Col20Visible: Boolean;
        Col21Visible: Boolean;
        Col22Visible: Boolean;
        Col23Visible: Boolean;
        Col24Visible: Boolean;
        Col25Visible: Boolean;
        Col26Visible: Boolean;
        Col27Visible: Boolean;
        Col28Visible: Boolean;
        Col29Visible: Boolean;
        Col30Visible: Boolean;
        Col31Visible: Boolean;
        Col32Visible: Boolean;

    procedure LoadMatrix(var NewVerticalRec: Record Job; var NewHorizontalRec: Record "Job Planning Line"; NewMatrixColumnCaptions: array[32] of Text[100]; var NewMatrixDateFilters: array[32] of Record Date; AmountType2: Enum "Analysis Amount Type")
    begin
        Rec.Copy(NewVerticalRec);
        MatrixRec.Copy(NewHorizontalRec);
        CopyArray(MatrixColumnCaptions, NewMatrixColumnCaptions, 1);
        CopyArray(MatrixColumnDateFilters, NewMatrixDateFilters, 1);
        AmountType := AmountType2;
    end;

    local procedure MatrixOnAfterGetRecord()
    var
        I: Integer;
    begin
        MatrixRec.Reset();
        MatrixRec.SetRange("Job No.", Rec."No.");
        MatrixRec.SetRange(Type, MatrixRec.Type::Resource);
        MatrixRec.SetRange("Schedule Line", true);
        if Rec.GetFilter("Resource Filter") <> '' then
            MatrixRec.SetFilter("No.", Rec.GetRangeMin("Resource Filter"), Rec.GetRangeMax("Resource Filter"));
        for I := 1 to ArrayLen(MatrixColumnDateFilters) do begin
            MatrixCellQuantity := 0;
            MatrixRec.SetRange(
              "Planning Date", GetStartDate(MatrixColumnDateFilters[I]."Period Start"), MatrixColumnDateFilters[I]."Period End");
            OnMatrixOnAfterGetRecordOnBeforeMatrixRecLoop(MatrixRec, MatrixCellQuantity);
            if MatrixRec.Find('-') then
                repeat
                    MatrixCellQuantity += Round(MatrixRec.Quantity * MatrixRec."Qty. per Unit of Measure", UOMMgt.QtyRndPrecision())
                until MatrixRec.Next() = 0;

            if MatrixCellQuantity <> 0 then
                MatrixCellData[I] := Format(MatrixCellQuantity)
            else
                MatrixCellData[I] := '';
        end;

        SetVisible();
    end;

    local procedure MatrixOnDrillDown(Column: Integer)
    var
        JobPlanningLine: Record "Job Planning Line";
        IsHandled: Boolean;
    begin
        JobPlanningLine.SetFilter("No.", Rec.GetRangeMin("Resource Filter"), Rec.GetRangeMax("Resource Filter"));
        JobPlanningLine.SetRange(
          "Planning Date", GetStartDate(MatrixColumnDateFilters[Column]."Period Start"),
          MatrixColumnDateFilters[Column]."Period End");
        JobPlanningLine.SetRange("Job No.", Rec."No.");
        JobPlanningLine.SetRange(Type, JobPlanningLine.Type::Resource);
        JobPlanningLine.SetRange("Schedule Line", true);
        IsHandled := false;
        OnAfterMatrixOnDrillDown(JobPlanningLine, IsHandled);
        if IsHandled then
            exit;

        PAGE.RunModal(PAGE::"Job Planning Lines", JobPlanningLine);
    end;

    procedure SetVisible()
    begin
        Col1Visible := MatrixColumnCaptions[1] <> '';
        Col2Visible := MatrixColumnCaptions[2] <> '';
        Col3Visible := MatrixColumnCaptions[3] <> '';
        Col4Visible := MatrixColumnCaptions[4] <> '';
        Col5Visible := MatrixColumnCaptions[5] <> '';
        Col6Visible := MatrixColumnCaptions[6] <> '';
        Col7Visible := MatrixColumnCaptions[7] <> '';
        Col8Visible := MatrixColumnCaptions[8] <> '';
        Col9Visible := MatrixColumnCaptions[9] <> '';
        Col10Visible := MatrixColumnCaptions[10] <> '';
        Col11Visible := MatrixColumnCaptions[11] <> '';
        Col12Visible := MatrixColumnCaptions[12] <> '';
        Col13Visible := MatrixColumnCaptions[13] <> '';
        Col14Visible := MatrixColumnCaptions[14] <> '';
        Col15Visible := MatrixColumnCaptions[15] <> '';
        Col16Visible := MatrixColumnCaptions[16] <> '';
        Col17Visible := MatrixColumnCaptions[17] <> '';
        Col18Visible := MatrixColumnCaptions[18] <> '';
        Col19Visible := MatrixColumnCaptions[19] <> '';
        Col20Visible := MatrixColumnCaptions[20] <> '';
        Col21Visible := MatrixColumnCaptions[21] <> '';
        Col22Visible := MatrixColumnCaptions[22] <> '';
        Col23Visible := MatrixColumnCaptions[23] <> '';
        Col24Visible := MatrixColumnCaptions[24] <> '';
        Col25Visible := MatrixColumnCaptions[25] <> '';
        Col26Visible := MatrixColumnCaptions[26] <> '';
        Col27Visible := MatrixColumnCaptions[27] <> '';
        Col28Visible := MatrixColumnCaptions[28] <> '';
        Col29Visible := MatrixColumnCaptions[29] <> '';
        Col30Visible := MatrixColumnCaptions[30] <> '';
        Col31Visible := MatrixColumnCaptions[31] <> '';
        Col32Visible := MatrixColumnCaptions[32] <> '';
    end;

    local procedure GetStartDate(PeriodStartDate: Date): Date
    begin
        case AmountType of
            AmountType::"Net Change":
                exit(PeriodStartDate);
            AmountType::"Balance at Date":
                exit(0D);
        end;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterMatrixOnDrillDown(var JobPlanningLine: Record "Job Planning Line"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnMatrixOnAfterGetRecordOnBeforeMatrixRecLoop(var JobPlanningLine: Record "Job Planning Line"; var MatrixCellQuantity: Decimal)
    begin
    end;
}