Page 99000959 Order Promising Lines

App
Base Application
Namespace
Microsoft.Inventory.Availability
Versions
17-28
Source table
99000880

Procedures, 5Events, 2Obsolete, 4

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Inventory/Availability/OrderPromisingLines.Page.al259 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.Inventory.Availability;

using Microsoft.Inventory.Requisition;

page 99000959 "Order Promising Lines"
{
    Caption = 'Order Promising Lines';
    DataCaptionExpression = AvailabilityMgt.GetCaption();
    InsertAllowed = false;
    PageType = Worksheet;
    RefreshOnActivate = true;
    SourceTable = "Order Promising Line";
    SourceTableTemporary = true;
    SourceTableView = sorting("Requested Shipment Date");

    layout
    {
        area(content)
        {
            group(Control17)
            {
                ShowCaption = false;
                field(CrntSourceID; CrntSourceID)
                {
                    ApplicationArea = OrderPromising;
                    Caption = 'No.';
                    Editable = false;
                    ToolTip = 'Specifies the number of the item.';
                }
            }
            repeater(Control16)
            {
                Editable = true;
                ShowCaption = false;
                field("Item No."; Rec."Item No.")
                {
                    ApplicationArea = OrderPromising;
                    Editable = false;
                }
                field(Description; Rec.Description)
                {
                    ApplicationArea = OrderPromising;
                    Editable = false;
                }
                field("Requested Delivery Date"; Rec."Requested Delivery Date")
                {
                    ApplicationArea = OrderPromising;
                    Editable = false;
                }
                field("Requested Shipment Date"; Rec."Requested Shipment Date")
                {
                    ApplicationArea = OrderPromising;
                }
                field("Planned Delivery Date"; Rec."Planned Delivery Date")
                {
                    ApplicationArea = OrderPromising;
                }
                field("Original Shipment Date"; Rec."Original Shipment Date")
                {
                    ApplicationArea = OrderPromising;
                    Editable = false;
                }
                field("Earliest Shipment Date"; Rec."Earliest Shipment Date")
                {
                    ApplicationArea = OrderPromising;
                }
                field(Quantity; Rec.Quantity)
                {
                    ApplicationArea = OrderPromising;
                    Editable = false;
                }
                field("Required Quantity"; Rec."Required Quantity")
                {
                    ApplicationArea = OrderPromising;
                    Editable = false;
                }
                field(CalcAvailability; Rec.CalcAvailability())
                {
                    ApplicationArea = OrderPromising;
                    AutoFormatType = 0;
                    Caption = 'Availability';
                    DecimalPlaces = 0 : 5;
                    ToolTip = 'Specifies how many units of the item on the order promising line are available.';
                }
                field("Unavailability Date"; Rec."Unavailability Date")
                {
                    ApplicationArea = OrderPromising;
                    Editable = false;
                }
                field("Unavailable Quantity"; Rec."Unavailable Quantity")
                {
                    ApplicationArea = OrderPromising;
                    Editable = false;
                }
                field("Unit of Measure Code"; Rec."Unit of Measure Code")
                {
                    ApplicationArea = OrderPromising;
                    Editable = false;
                }
            }
        }
        area(factboxes)
        {
            systempart(Control1900383207; Links)
            {
                ApplicationArea = RecordLinks;
                Visible = false;
            }
            systempart(Control1905767507; Notes)
            {
                ApplicationArea = Notes;
                Visible = false;
            }
        }
    }

    actions
    {
        area(navigation)
        {
            group("&Calculate")
            {
                Caption = '&Calculate';
                Image = Calculate;
                action(AvailableToPromise)
                {
                    ApplicationArea = OrderPromising;
                    Caption = 'Available-to-Promise';
                    Image = AvailableToPromise;
                    ToolTip = 'Calculate the delivery date of the customer''s order because the items are available, either in inventory or on planned receipts, based on the reservation system. The function performs an availability check of the unreserved quantities in inventory with regard to planned production, purchases, transfers, and sales returns.';

                    trigger OnAction()
                    begin
                        CheckCalculationDone();
                        AvailabilityMgt.CalcAvailableToPromise(Rec);
                    end;
                }
                action(CapableToPromise)
                {
                    ApplicationArea = OrderPromising;
                    Caption = 'Capable-to-Promise';
                    Image = CapableToPromise;
                    ToolTip = 'Calculate the earliest date that the item can be available if it is to be produced, purchased, or transferred, assuming that the item is not in inventory and no orders are scheduled. This function is useful for "what if" scenarios.';

                    trigger OnAction()
                    begin
                        CheckCalculationDone();
                        AvailabilityMgt.CalcCapableToPromise(Rec, CrntSourceID);
                    end;
                }
            }
        }
        area(processing)
        {
            action(AcceptButton)
            {
                ApplicationArea = OrderPromising;
                Caption = '&Accept';
                Enabled = AcceptButtonEnable;
                Image = Approve;
                ToolTip = 'Accept the earliest shipment date available.';

                trigger OnAction()
                var
                    ReqLine: Record "Requisition Line";
                begin
                    Accepted := true;
                    AvailabilityMgt.UpdateSource(Rec);
                    ReqLine.SetCurrentKey("Order Promising ID", "Order Promising Line ID", "Order Promising Line No.");
                    ReqLine.SetRange("Order Promising ID", CrntSourceID);
                    ReqLine.ModifyAll("Accept Action Message", true);
                    OnAcceptButtonOnActionOnBeforeClosePage(Rec, CrntSourceType, CrntSourceID, OrderPromisingCalculationDone);
                    CurrPage.Close();
                end;
            }
        }
        area(Promoted)
        {
            group(Category_Process)
            {
                Caption = 'Process';

                actionref(AcceptButton_Promoted; AcceptButton)
                {
                }
                actionref(AvailableToPromise_Promoted; AvailableToPromise)
                {
                }
                actionref(CapableToPromise_Promoted; CapableToPromise)
                {
                }
            }
        }
    }

    trigger OnClosePage()
    var
        CapableToPromise2: Codeunit "Capable to Promise";
    begin
        if not Accepted then begin
            CapableToPromise2.RemoveReqLines(CrntSourceID, 0, 0, true);
            AvailabilityMgt.CancelReservations();
        end;
    end;

    trigger OnInit()
    begin
        AcceptButtonEnable := true;
    end;

    trigger OnOpenPage()
    begin
        OrderPromisingCalculationDone := false;
        Accepted := false;
        if Rec.GetFilter("Source ID") <> '' then
            OnOpenPageOnSetSource(Rec, CrntSourceType, CrntSourceID, AvailabilityMgt, AcceptButtonEnable);
    end;

    var
        AvailabilityMgt: Codeunit AvailabilityManagement;
        Accepted: Boolean;
        CrntSourceID: Code[20];
        CrntSourceType: Enum "Order Promising Line Source Type";
        AcceptButtonEnable: Boolean;
        OrderPromisingCalculationDone: Boolean;
#pragma warning disable AA0074
        Text000: Label 'The order promising lines are already calculated. You must close and open the window again to perform a new calculation.';
#pragma warning restore AA0074




    procedure SetSource(SourceType: Enum "Order Promising Line Source Type")
    begin
        CrntSourceType := SourceType;
    end;

    local procedure CheckCalculationDone()
    begin
        if OrderPromisingCalculationDone then
            Error(Text000);
        OrderPromisingCalculationDone := true;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAcceptButtonOnActionOnBeforeClosePage(var OrderPromisingLine: Record "Order Promising Line"; CrntSourceType: Enum "Order Promising Line Source Type"; CrntSourceID: Code[20]; OrderPromisingCalculationDone: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnOpenPageOnSetSource(var OrderPromisingLine: Record "Order Promising Line"; var CrntSourceType: Enum "Order Promising Line Source Type"; var CrntSourceID: Code[20]; var AvailabilityMgt: Codeunit AvailabilityManagement; var AcceptButtonEnable: Boolean)
    begin
    end;
}