Page 361 Res. Availability Lines, source in 29

Source29

src/Layers/W1/BaseApp/Projects/Resources/Analysis/ResAvailabilityLines.Page.al183 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.Resources.Analysis;

using Microsoft.Foundation.Enums;
using Microsoft.Foundation.Period;
using Microsoft.Projects.Resources.Resource;
using System.Utilities;

page 361 "Res. Availability Lines"
{
    Caption = 'Lines';
    DeleteAllowed = false;
    Editable = false;
    InsertAllowed = false;
    LinksAllowed = false;
    PageType = ListPart;
    SaveValues = true;
    SourceTable = "Res. Availability Buffer";
    SourceTableTemporary = true;

    layout
    {
        area(content)
        {
            repeater(Control1)
            {
                ShowCaption = false;
                field("Period Start"; Rec."Period Start")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Period Start';
                }
                field("Period Name"; Rec."Period Name")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Period Name';
                }
                field(Capacity; Rec.Capacity)
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Capacity';
                    DecimalPlaces = 0 : 5;
                }
#pragma warning disable AA0100
                field("Resource.""Qty. on Order (Job)"""; Rec."Qty. on Order (Job)")
#pragma warning restore AA0100
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Qty. on Order (Project)';
                    DecimalPlaces = 0 : 5;
                    ToolTip = 'Specifies the amount of measuring units allocated to projects with the status order.';
                }
                field(CapacityAfterOrders; Rec."Availability After Orders")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Availability After Orders';
                    DecimalPlaces = 0 : 5;
                }
#pragma warning disable AA0100
                field("Resource.""Qty. Quoted (Job)"""; Rec."Job Quotes Allocation")
#pragma warning restore AA0100
                {
                    ApplicationArea = Jobs;
                    Caption = 'Project Quotes Allocation';
                    DecimalPlaces = 0 : 5;
                    ToolTip = 'Specifies the amount of measuring units allocated to projects with the status quote.';
                }
                field(CapacityAfterQuotes; Rec."Availability After Quotes")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Availability After Quotes';
                    DecimalPlaces = 0 : 5;
                    ToolTip = 'Specifies capacity, minus quantity on order (Project), minus quantity on service order, minus project quotes allocation. ';
                }
                field(QtyOnAssemblyOrder; Rec."Qty. on Assembly Order")
                {
                    ApplicationArea = Assembly;
                    Caption = 'Qty. on Assembly Order';
                    DecimalPlaces = 0 : 5;
                }
                field(NetAvailability; Rec."Net Availability")
                {
                    ApplicationArea = Basic, Suite;
                    AutoFormatType = 1;
                    DecimalPlaces = 0 : 5;
                    Caption = 'Net Availability';
                }
            }
        }
    }

    actions
    {
    }

    trigger OnAfterGetRecord()
    begin
        if DateRec.Get(Rec."Period Type", Rec."Period Start") then;
        CalcLine();
    end;

    trigger OnFindRecord(Which: Text) FoundDate: Boolean
    var
        VariantRec: Variant;
    begin
        VariantRec := Rec;
        FoundDate := PeriodFormLinesMgt.FindDate(VariantRec, DateRec, Which, PeriodType.AsInteger());
        Rec := VariantRec;
    end;

    trigger OnNextRecord(Steps: Integer) ResultSteps: Integer
    var
        VariantRec: Variant;
    begin
        VariantRec := Rec;
        ResultSteps := PeriodFormLinesMgt.NextDate(VariantRec, DateRec, Steps, PeriodType.AsInteger());
        Rec := VariantRec;
    end;

    trigger OnOpenPage()
    begin
        Rec.Reset();
    end;

    var
        DateRec: Record Date;
        PeriodFormLinesMgt: Codeunit "Period Form Lines Mgt.";
        CapacityAfterOrders: Decimal;
        CapacityAfterQuotes: Decimal;
        NetAvailability: Decimal;
        PeriodType: Enum "Analysis Period Type";
        AmountType: Enum "Analysis Amount Type";

    protected var
        Resource: Record Resource;

    procedure SetLines(var NewRes: Record Resource; NewPeriodType: Enum "Analysis Period Type"; NewAmountType: Enum "Analysis Amount Type")
    begin
        Resource.Copy(NewRes);
        Rec.DeleteAll();
        PeriodType := NewPeriodType;
        AmountType := NewAmountType;
        CurrPage.Update(false);
    end;

    local procedure SetDateFilter()
    begin
        if AmountType = AmountType::"Net Change" then
            Resource.SetRange("Date Filter", Rec."Period Start", Rec."Period End")
        else
            Resource.SetRange("Date Filter", 0D, Rec."Period End");
    end;

    local procedure CalcLine()
    begin
        SetDateFilter();
        Resource.CalcFields(Capacity, "Qty. on Order (Job)", "Qty. Quoted (Job)", "Qty. on Assembly Order");

        Rec.Capacity := Resource.Capacity;
        Rec."Qty. on Order (Job)" := Resource."Qty. on Order (Job)";
        Rec."Availability After Orders" := Resource.Capacity - Resource."Qty. on Order (Job)";
        Rec."Job Quotes Allocation" := Resource."Qty. Quoted (Job)";
        Rec."Availability After Quotes" := Rec."Availability After Orders" - Resource."Qty. Quoted (Job)";
        Rec."Qty. on Assembly Order" := Resource."Qty. on Assembly Order";
        Rec."Net Availability" := Rec."Availability After Quotes" - Resource."Qty. on Assembly Order";

        CapacityAfterOrders := Resource.Capacity - Resource."Qty. on Order (Job)";
        CapacityAfterQuotes := CapacityAfterOrders - Resource."Qty. Quoted (Job)";
        NetAvailability := CapacityAfterQuotes - Resource."Qty. on Assembly Order";

        OnAfterCalcLine(Resource, CapacityAfterOrders, CapacityAfterQuotes, NetAvailability, Rec);
    end;

    [IntegrationEvent(true, false)]
    local procedure OnAfterCalcLine(var Resource: Record Resource; var CapacityAfterOrders: Decimal; var CapacityAfterQuotes: Decimal; var NetAvailability: Decimal; var ResAvailabilityBuffer: Record "Res. Availability Buffer")
    begin
    end;
}