Report extension 7305 Mfg. WhseSourceCreateDocument, source in 29

Source29

src/Layers/W1/BaseApp/Manufacturing/Warehouse/Request/MfgWhseSourceCreateDocument.ReportExt.al165 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.Request;

using Microsoft.Inventory.Item;
using Microsoft.Inventory.Location;
using Microsoft.Manufacturing.Document;
using Microsoft.Warehouse.Activity;
using Microsoft.Warehouse.Journal;

reportextension 7305 "Mfg. WhseSourceCreateDocument" extends "Whse.-Source - Create Document"
{
    dataset
    {
        addafter("Whse. Internal Put-away Line")
        {
            dataitem("Prod. Order Component"; "Prod. Order Component")
            {
                DataItemTableView = sorting(Status, "Prod. Order No.", "Prod. Order Line No.", "Line No.");

                trigger OnAfterGetRecord()
                var
                    Item: Record Item;
                    Location: Record Location;
                    WMSMgt: Codeunit "WMS Management";
                    QtyToPick: Decimal;
                    QtyToPickBase: Decimal;
                    GroupingNumber: Integer;
                    SkipProdOrderComp: Boolean;
                    EmptyGuid: Guid;
                begin
                    if "Prod. Order Component"."Location Code" <> '' then begin
                        Location.Get("Prod. Order Component"."Location Code");
                        if not (Location."Prod. Consump. Whse. Handling" in [Location."Prod. Consump. Whse. Handling"::"Warehouse Pick (mandatory)", Location."Prod. Consump. Whse. Handling"::"Warehouse Pick (optional)"]) then
                            CurrReport.Skip();
                    end;

                    FeatureTelemetry.LogUsage('0000KSZ', ProdAsmJobWhseHandlingTelemetryCategoryTok, ProdAsmJobWhseHandlingTelemetryTok);
                    if ("Flushing Method" = "Flushing Method"::"Pick + Forward") and ("Routing Link Code" = '') then
                        CurrReport.Skip();

                    Item.Get("Item No.");
                    if Item.IsNonInventoriableType() then
                        CurrReport.Skip();

                    if not CheckIfProdOrderCompMeetsReservedFromStockSetting("Remaining Qty. (Base)", ReservedFromStock) then
                        CurrReport.Skip();

                    WMSMgt.CheckInboundBlockedBin("Location Code", "Bin Code", "Item No.", "Variant Code", "Unit of Measure Code");

                    SkipProdOrderComp := false;
                    OnAfterGetRecordProdOrderComponent("Prod. Order Component", SkipProdOrderComp);
                    if SkipProdOrderComp then
                        CurrReport.Skip();

                    WhseWkshLine.SetRange("Source Line No.", "Prod. Order Line No.");
                    WhseWkshLine.SetRange("Source Subline No.", "Line No.");
                    if not WhseWkshLine.FindFirst() then begin
                        TestField("Qty. per Unit of Measure");
                        CalcFields("Pick Qty.");

                        QtyToPick := "Expected Quantity" - "Qty. Picked" - "Pick Qty.";
                        QtyToPickBase := UOMMgt.CalcBaseQty("Item No.", "Variant Code", "Unit of Measure Code", QtyToPick, "Qty. per Unit of Measure");

                        if QtyToPick > 0 then begin
                            GroupingNumber := 1;
                            OnAfterGetRecordProdOrderComponentOnBeforeSetCustomWhseSourceLine("Prod. Order Component", GroupingNumber);
                            CreatePick.SetCustomWhseSourceLine(
                                "Prod. Order Component", GroupingNumber,
                                Database::"Prod. Order Component", Status.AsInteger(), "Prod. Order No.", "Prod. Order Line No.", "Line No.");
                            CreatePick.SetTempWhseItemTrkgLine(
                                "Prod. Order No.", Database::"Prod. Order Component", '', "Prod. Order Line No.", "Line No.", "Location Code");
                            CreatePick.CreateTempLine(
                                "Location Code", "Item No.", "Variant Code", "Unit of Measure Code", '', "Bin Code", "Qty. per Unit of Measure",
                                "Qty. Rounding Precision", "Qty. Rounding Precision (Base)", QtyToPick, QtyToPickBase);
                        end
                        else
                            CreatePick.InsertSkippedLinesToCalculationSummary(Database::"Prod. Order Component", "Prod. Order No.", "Prod. Order Line No.", Status.AsInteger(), "Line No.", "Location Code", "Item No.", "Variant Code", "Unit of Measure Code", "Bin Code", QtyToPick, QtyToPickBase, EmptyGuid);
                    end else begin
                        WhseWkshLineFound := true;
                        CreatePick.InsertSkippedLinesToCalculationSummary(Database::"Prod. Order Component", "Prod. Order No.", "Prod. Order Line No.", Status.AsInteger(), "Line No.", "Location Code", "Item No.", "Variant Code", "Unit of Measure Code", "Bin Code", Quantity, "Quantity (Base)", WhseWkshLine.SystemId);
                    end;
                end;

                trigger OnPreDataItem()
                begin
                    if WhseDoc <> WhseDoc::Production then
                        CurrReport.Break();

                    WhseSetup.Get();

                    Clear(CreatePickParameters);
                    CreatePickParameters."Assigned ID" := AssignedID;
                    CreatePickParameters."Sorting Method" := SortActivity;
                    CreatePickParameters."Max No. of Lines" := 0;
                    CreatePickParameters."Max No. of Source Doc." := 0;
                    CreatePickParameters."Do Not Fill Qty. to Handle" := DoNotFillQtytoHandleReq;
                    CreatePickParameters."Breakbulk Filter" := BreakbulkFilter;
                    CreatePickParameters."Per Bin" := false;
                    CreatePickParameters."Per Zone" := false;
                    CreatePickParameters."Whse. Document" := CreatePickParameters."Whse. Document"::Production;
                    CreatePickParameters."Whse. Document Type" := CreatePickParameters."Whse. Document Type"::Pick;
                    CreatePick.SetParameters(CreatePickParameters);
                    CreatePick.SetSaveSummary(ShowSummary);

                    SetRange("Prod. Order No.", ProdOrderHeader."No.");
                    SetRange(Status, Status::Released);
                    SetFilter("Flushing Method", '%1|%2|%3',
                        "Flushing Method"::"Pick + Manual",
                        "Flushing Method"::"Pick + Forward",
                        "Flushing Method"::"Pick + Backward");
                    SetRange("Planning Level Code", 0);
                    SetFilter("Expected Qty. (Base)", '>0');

                    WhseWkshLine.SetCurrentKey("Source Type", "Source Subtype", "Source No.", "Source Line No.", "Source Subline No.");
                    WhseWkshLine.SetRange("Source Type", Database::"Prod. Order Component");
                    WhseWkshLine.SetRange("Source Subtype", ProdOrderHeader.Status);
                    WhseWkshLine.SetRange("Source No.", ProdOrderHeader."No.");
                    OnAfterProdOrderComponentOnPreDataItem("Prod. Order Component");
                end;
            }
        }
    }

    var
        ProdOrderHeader: Record "Production Order";

    procedure SetProdOrder(var ProdOrderHeader2: Record "Production Order")
    var
        SortingMethod: Option;
    begin
        ProdOrderHeader.Copy(ProdOrderHeader2);
        WhseDoc := WhseDoc::Production;
        SourceLocationCode := ProdOrderHeader."Location Code";
        SourceTableCaption := ProdOrderHeader.TableCaption();

        SortingMethod := SortActivity.AsInteger();
        OnAfterSetProdOrder(ProdOrderHeader, SortingMethod);
        SortActivity := "Whse. Activity Sorting Method".FromInteger(SortingMethod);
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterSetProdOrder(ProductionOrder: Record "Production Order"; var SortActivity: Option)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterProdOrderComponentOnPreDataItem(var ProdOrderComponent: Record "Prod. Order Component")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterGetRecordProdOrderComponent(var ProdOrderComponent: Record "Prod. Order Component"; var SkipProdOrderComp: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterGetRecordProdOrderComponentOnBeforeSetCustomWhseSourceLine(var ProdOrderComponent: Record "Prod. Order Component"; var GroupingNumber: Integer)
    begin
    end;

}