Page 5768 Warehouse Receipt, source in 29

Source29

src/Layers/W1/BaseApp/Warehouse/Document/WarehouseReceipt.Page.al504 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.Warehouse.Document;

using Microsoft.Warehouse.Activity;
using Microsoft.Warehouse.Comment;
using Microsoft.Warehouse.CrossDock;
using Microsoft.Warehouse.History;
using Microsoft.Warehouse.Journal;
using Microsoft.Warehouse.Request;
using Microsoft.Warehouse.Setup;

page 5768 "Warehouse Receipt"
{
    Caption = 'Warehouse Receipt';
    PageType = Document;
    PopulateAllFields = true;
    RefreshOnActivate = true;
    SourceTable = "Warehouse Receipt Header";

    layout
    {
        area(content)
        {
            group(General)
            {
                Caption = 'General';
                field("No."; Rec."No.")
                {
                    ApplicationArea = Warehouse;

                    trigger OnAssistEdit()
                    begin
                        if Rec.AssistEdit(xRec) then
                            CurrPage.Update();
                    end;
                }
                field("Location Code"; Rec."Location Code")
                {
                    ApplicationArea = Location;
                    ShowMandatory = true;

                    trigger OnLookup(var Text: Text): Boolean
                    begin
                        CurrPage.SaveRecord();
                        Rec.LookupLocation(Rec);
                        CurrPage.Update(true);
                        SetBinFieldsVisibility(true);
                    end;

                    trigger OnValidate()
                    begin
                        CurrPage.Update(true);
                        SetBinFieldsVisibility(true);
                    end;
                }
                group(BinFields)
                {
                    ShowCaption = false;
                    Visible = not HideBinFields;
                    field("Zone Code"; Rec."Zone Code")
                    {
                        ApplicationArea = Warehouse;
                    }
                    field("Bin Code"; Rec."Bin Code")
                    {
                        ApplicationArea = Warehouse;
                    }
                }
                field("Document Status"; Rec."Document Status")
                {
                    ApplicationArea = Warehouse;
                }
                field("Posting Date"; Rec."Posting Date")
                {
                    ApplicationArea = Warehouse;
                }
                field("Vendor Shipment No."; Rec."Vendor Shipment No.")
                {
                    ApplicationArea = Warehouse;
                }
                field("Assigned User ID"; Rec."Assigned User ID")
                {
                    ApplicationArea = Warehouse;
                }
                field("Assignment Date"; Rec."Assignment Date")
                {
                    ApplicationArea = Warehouse;
                    Editable = false;
                }
                field("Assignment Time"; Rec."Assignment Time")
                {
                    ApplicationArea = Warehouse;
                    Editable = false;
                }
                field("Sorting Method"; Rec."Sorting Method")
                {
                    ApplicationArea = Warehouse;

                    trigger OnValidate()
                    begin
                        SortingMethodOnAfterValidate();
                    end;
                }
            }
            part(WhseReceiptLines; "Whse. Receipt Subform")
            {
                ApplicationArea = Warehouse;
                Editable = IsReceiptLinesEditable;
                Enabled = IsReceiptLinesEditable;
                SubPageLink = "No." = field("No.");
                SubPageView = sorting("No.", "Sorting Sequence No.");
            }
        }
        area(factboxes)
        {
            part(Control1901796907; "Item Warehouse FactBox")
            {
                ApplicationArea = Warehouse;
                Provider = WhseReceiptLines;
                SubPageLink = "No." = field("Item No.");
                Visible = true;
            }
            systempart(Control1900383207; Links)
            {
                ApplicationArea = RecordLinks;
                Visible = false;
            }
            systempart(Control1905767507; Notes)
            {
                ApplicationArea = Notes;
                Visible = true;
            }
        }
    }

    actions
    {
        area(navigation)
        {
            group("&Receipt")
            {
                Caption = '&Receipt';
                Image = Receipt;
                action("Co&mments")
                {
                    ApplicationArea = Comments;
                    Caption = 'Co&mments';
                    Image = ViewComments;
                    RunObject = Page "Warehouse Comment Sheet";
                    RunPageLink = "Table Name" = const("Whse. Receipt"),
                                  Type = const(" "),
                                  "No." = field("No.");
                    ToolTip = 'View or add comments for the record.';
                }
                action("Posted &Whse. Receipts")
                {
                    ApplicationArea = Warehouse;
                    Caption = 'Posted &Whse. Receipts';
                    Image = PostedReceipts;
                    RunObject = Page "Posted Whse. Receipt List";
                    RunPageLink = "Whse. Receipt No." = field("No.");
                    RunPageView = sorting("Whse. Receipt No.");
                    ToolTip = 'View the quantity that has been posted as received.';
                }
            }
        }
        area(processing)
        {
            group("F&unctions")
            {
                Caption = 'F&unctions';
                Image = "Action";
                action("Use Filters to Get Src. Docs.")
                {
                    ApplicationArea = Warehouse;
                    Caption = 'Use Filters to Get Src. Docs.';
                    Ellipsis = true;
                    Image = UseFilters;
                    ToolTip = 'Retrieve the released source document lines that define which items to receive or ship.';

                    trigger OnAction()
                    var
                        GetSourceDocInbound: Codeunit "Get Source Doc. Inbound";
                    begin
                        GetSourceDocInbound.GetInboundDocs(Rec);
                    end;
                }
                action("Get Source Documents")
                {
                    ApplicationArea = Warehouse;
                    Caption = 'Get Source Documents';
                    Ellipsis = true;
                    Image = GetSourceDoc;
                    ShortCutKey = 'Shift+F11';
                    ToolTip = 'Open the list of released source documents, such as purchase orders, to select the document to receive items for. ';

                    trigger OnAction()
                    var
                        GetSourceDocInbound: Codeunit "Get Source Doc. Inbound";
                    begin
                        GetSourceDocInbound.GetSingleInboundDoc(Rec);
                    end;
                }
                separator(Action24)
                {
                    Caption = '';
                }
                action("Autofill Qty. to Receive")
                {
                    ApplicationArea = Warehouse;
                    Caption = 'Autofill Qty. to Receive';
                    Image = AutofillQtyToHandle;
                    ToolTip = 'Have the system enter the outstanding quantity in the Qty. to Receive field.';

                    trigger OnAction()
                    begin
                        AutofillQtyToReceive();
                    end;
                }
                action("Delete Qty. to Receive")
                {
                    ApplicationArea = Warehouse;
                    Caption = 'Delete Qty. to Receive';
                    Image = DeleteQtyToHandle;
                    ToolTip = 'Have the system clear the value in the Qty. To Receive field. ';

                    trigger OnAction()
                    begin
                        DeleteQtyToReceive();
                    end;
                }
                separator(Action40)
                {
                }
                action(CalculateCrossDock)
                {
                    ApplicationArea = Warehouse;
                    Caption = 'Calculate Cross-Dock';
                    Image = CalculateCrossDock;
                    ToolTip = 'Open the Cross-Dock Opportunities window to see details about the lines requesting the item, such as type of document, quantity requested, and due date. This information might help you to decide how much to cross-dock, where to place the items in the cross-dock area, or how to group them.';

                    trigger OnAction()
                    var
                        CrossDockOpp: Record "Whse. Cross-Dock Opportunity";
                        CrossDockMgt: Codeunit "Whse. Cross-Dock Management";
                    begin
                        CrossDockMgt.CalculateCrossDockLines(CrossDockOpp, '', Rec."No.", Rec."Location Code");
                    end;
                }
            }
            group("P&osting")
            {
                Caption = 'P&osting';
                Image = Post;
                action("Post Receipt")
                {
                    ApplicationArea = Warehouse;
                    Caption = 'P&ost Receipt';
                    Image = PostOrder;
                    ShortCutKey = 'F9';
                    ToolTip = 'Post the items as received. A put-away document is created automatically.';

                    trigger OnAction()
                    begin
                        WhsePostRcptYesNo();
                    end;
                }
                action(PreviewPosting)
                {
                    ApplicationArea = Warehouse;
                    Caption = 'Preview Posting';
                    Image = ViewPostedOrder;
                    ShortCutKey = 'Ctrl+Alt+F9';
                    ToolTip = 'Review the different types of entries that will be created when you post the document or journal.';

                    trigger OnAction()
                    begin
                        ShowPreview();
                    end;
                }
                action("Post and &Print")
                {
                    ApplicationArea = Warehouse;
                    Caption = 'Post and &Print';
                    Image = PostPrint;
                    ShortCutKey = 'Shift+F9';
                    ToolTip = 'Finalize and prepare to print the document or journal. The values and quantities are posted to the related accounts. A report request window where you can specify what to include on the print-out.';

                    trigger OnAction()
                    begin
                        WhsePostRcptPrintPostedRcpt();
                    end;
                }
                action("Post and Print P&ut-away")
                {
                    ApplicationArea = Warehouse;
                    Caption = 'Post and Print P&ut-away';
                    Image = PostPrint;
                    ShortCutKey = 'Shift+Ctrl+F9';
                    ToolTip = 'Post the items as received and print the put-away document.';

                    trigger OnAction()
                    begin
                        WhsePostRcptPrint();
                    end;
                }
            }
            action("&Print")
            {
                ApplicationArea = Warehouse;
                Caption = '&Print';
                Ellipsis = true;
                Image = Print;
                ToolTip = 'Prepare to print the document. A report request window for the document opens where you can specify what to include on the print-out.';

                trigger OnAction()
                begin
                    WhseDocPrint.PrintRcptHeader(Rec);
                end;
            }
        }
        area(Promoted)
        {
            group(Category_Process)
            {
                Caption = 'Process', Comment = 'Generated from the PromotedActionCategories property index 1.';

                group(Category_Category5)
                {
                    Caption = 'Posting', Comment = 'Generated from the PromotedActionCategories property index 4.';
                    ShowAs = SplitButton;

                    actionref("Post Receipt_Promoted"; "Post Receipt")
                    {
                    }
                    actionref(PreviewPosting_Promoted; PreviewPosting)
                    {
                    }
                    actionref("Post and &Print_Promoted"; "Post and &Print")
                    {
                    }
                    actionref("Post and Print P&ut-away_Promoted"; "Post and Print P&ut-away")
                    {
                    }
                }
                group("Category_Qty. to Receive")
                {
                    Caption = 'Qty. to Receive';
                    ShowAs = SplitButton;

                    actionref("Autofill Qty. to Receive_Promoted"; "Autofill Qty. to Receive")
                    {
                    }
                    actionref("Delete Qty. to Receive_Promoted"; "Delete Qty. to Receive")
                    {
                    }
                }
                actionref(CalculateCrossDock_Promoted; CalculateCrossDock)
                {
                }
            }
            group(Category_Category8)
            {
                Caption = 'Prepare', Comment = 'Generated from the PromotedActionCategories property index 7.';

                actionref("Get Source Documents_Promoted"; "Get Source Documents")
                {
                }
                actionref("Use Filters to Get Src. Docs._Promoted"; "Use Filters to Get Src. Docs.")
                {
                }
            }
            group(Category_Category4)
            {
                Caption = 'Print/Send', Comment = 'Generated from the PromotedActionCategories property index 3.';

                actionref("&Print_Promoted"; "&Print")
                {
                }
            }
            group(Category_Category6)
            {
                Caption = 'Receipt', Comment = 'Generated from the PromotedActionCategories property index 5.';

                actionref("Co&mments_Promoted"; "Co&mments")
                {
                }

                separator(Navigate_Separator)
                {
                }

                actionref("Posted &Whse. Receipts_Promoted"; "Posted &Whse. Receipts")
                {
                }
            }
            group(Category_Category7)
            {
                Caption = 'Navigate', Comment = 'Generated from the PromotedActionCategories property index 6.';
            }
            group(Category_Report)
            {
                Caption = 'Report', Comment = 'Generated from the PromotedActionCategories property index 2.';
            }
        }
    }

    trigger OnOpenPage()
    var
        WMSManagement: Codeunit "WMS Management";
    begin
        Rec.ErrorIfUserIsNotWhseEmployee();
        Rec.FilterGroup(2); // set group of filters user cannot change
        Rec.SetFilter("Location Code", WMSManagement.GetWarehouseEmployeeLocationFilter(UserId));
        Rec.FilterGroup(0); // set filter group back to standard

        ActivateControls();
        SetBinFieldsVisibility(false); // Don't allow procedure to update page since it's not even loaded yet
    end;

    trigger OnAfterGetCurrRecord()
    begin
        ActivateControls();
        SetBinFieldsVisibility(true);
    end;

    var
        WhseDocPrint: Codeunit "Warehouse Document-Print";
        IsReceiptLinesEditable: Boolean;
        HideBinFields: Boolean;
        LocationCodeWhenHideBinLastChecked: Code[20];

    local procedure SetBinFieldsVisibility(AllowSubFormUpdate: Boolean)
    var
        BinVisiblityNeedsUpdate: Boolean;
    begin
        BinVisiblityNeedsUpdate := CheckBinFieldsVisibility();
        CurrPage.WhseReceiptLines.Page.SetHideBinFields(HideBinFields);
        if not BinVisiblityNeedsUpdate or not AllowSubFormUpdate then
            exit;

        CurrPage.WhseReceiptLines.Page.Update(false); // Visibility on the subform must be updated via. page update, since fields are in repeater
    end;

    local procedure CheckBinFieldsVisibility() BinVisiblityNeedsUpdate: Boolean
    var
        HideBinFieldsLocal: Boolean;
    begin
        if (Rec."Location Code" = LocationCodeWhenHideBinLastChecked) then
            exit(false);

        if Rec."Location Code" <> '' then
            HideBinFieldsLocal := not Rec.BinCodeMandatory();

        LocationCodeWhenHideBinLastChecked := Rec."Location Code";
        BinVisiblityNeedsUpdate := HideBinFieldsLocal <> HideBinFields;
        HideBinFields := HideBinFieldsLocal; // Visibility on this page is automatically updated via. field group visibility
    end;

    local procedure ActivateControls()
    begin
        IsReceiptLinesEditable := Rec.ReceiptLinesEditable();
    end;

    local procedure AutofillQtyToReceive()
    begin
        CurrPage.WhseReceiptLines.PAGE.AutofillQtyToReceive();
    end;

    local procedure DeleteQtyToReceive()
    begin
        CurrPage.WhseReceiptLines.PAGE.DeleteQtyToReceive();
    end;

    local procedure WhsePostRcptYesNo()
    begin
        CurrPage.WhseReceiptLines.PAGE.WhsePostRcptYesNo();
    end;

    local procedure ShowPreview()
    begin
        CurrPage.WhseReceiptLines.Page.Preview();
    end;

    local procedure WhsePostRcptPrint()
    begin
        CurrPage.WhseReceiptLines.PAGE.WhsePostRcptPrint();
    end;

    local procedure WhsePostRcptPrintPostedRcpt()
    begin
        CurrPage.WhseReceiptLines.PAGE.WhsePostRcptPrintPostedRcpt();
    end;

    local procedure SortingMethodOnAfterValidate()
    begin
        CurrPage.Update();
    end;
}