Report 5708 Create Warehouse Shipment

App
Base Application
Namespace
Microsoft.Warehouse.Document
Versions
23-28

Procedures, 2Events, 1

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Warehouse/Document/CreateWarehouseShipment.Report.al164 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.Inventory.Location;
using Microsoft.Inventory.Tracking;
using Microsoft.Inventory.Transfer;
using Microsoft.Purchases.Document;
using Microsoft.Sales.Document;
using Microsoft.Warehouse.Request;

report 5708 "Create Warehouse Shipment"
{
    UsageCategory = Tasks;
    ApplicationArea = Warehouse;
    ProcessingOnly = true;
    Caption = 'Create Warehouse Shipment';

    dataset
    {
        dataitem("Warehouse Request"; "Warehouse Request")
        {
            DataItemTableView = sorting("Source Document", "Source No.") where(Type = const(Outbound), "Document Status" = const(Released));
            RequestFilterFields = "Source Document", "Source No.", "Location Code";

            trigger OnAfterGetRecord()
            var
                Location: Record Location;
            begin
                if not Location.RequireShipment("Location Code") then
                    CurrReport.Skip();

                case "Source Document" of
                    "Source Document"::"Purchase Return Order":
                        CreateWarehouseShipmentForPurchaseReturnOrder();
                    "Source Document"::"Sales Order":
                        CreateWarehouseShipmentForSalesOrder();
                    "Source Document"::"Outbound Transfer":
                        CreateWarehouseShipmentForTransferOrder();
                end;

                OnWarehouseRequestOnAfterGetRecord("Warehouse Request");

            end;
        }
    }

    requestpage
    {
        SaveValues = true;

        layout
        {
            area(content)
            {
                group(Options)
                {
                    Caption = 'Options';

                    field("Do Not Fill Qty. to Handle"; DoNotFillQtytoHandle)
                    {
                        Caption = 'Do not fill Qty. to Handle';
                        ToolTip = 'Specifies if the Quantity to Handle field in the warehouse document is prefilled according to the source document quantities.';
                    }
                    field("Reserved Stock Only"; ReservedFromStock)
                    {
                        Caption = 'Reserved stock only';
                        ToolTip = 'Specifies if you want to include only source document lines that are fully or partially reserved from current stock.';
                        ValuesAllowed = " ", "Full and Partial", Full;
                    }
                }
            }
        }

    }

    var
        DoNotFillQtytoHandle: Boolean;
        ReservedFromStock: Enum "Reservation From Stock";

    procedure InitializeRequest(NewDoNotFillQtyToHandle: Boolean; NewReservedFromStock: Enum "Reservation From Stock")
    begin
        DoNotFillQtytoHandle := NewDoNotFillQtyToHandle;
        ReservedFromStock := NewReservedFromStock;
    end;

    local procedure CreateWarehouseShipmentForSalesOrder()
    var
        SalesHeader: Record "Sales Header";
        WarehouseRequest: Record "Warehouse Request";
        GetSourceDocOutbound: Codeunit "Get Source Doc. Outbound";
    begin
        WarehouseRequest.Copy("Warehouse Request");

        SalesHeader.Get(SalesHeader."Document Type"::Order, WarehouseRequest."Source No.");
        if SalesHeader.Status <> SalesHeader.Status::Released then
            exit;

        if not SalesHeader.IsApprovedForPostingBatch() then
            exit;

        if SalesHeader.WhseShipmentConflict(SalesHeader."Document Type", SalesHeader."No.", SalesHeader."Shipping Advice") then
            exit;

        GetSourceDocOutbound.SetCalledFromCreateWarehouseShipmentReport(true);
        if GetSourceDocOutbound.CheckSalesHeader(SalesHeader, false) then
            exit;

        CreateWarehouseShipmentFromWhseRequest(WarehouseRequest);
    end;

    local procedure CreateWarehouseShipmentForPurchaseReturnOrder()
    var
        PurchaseHeader: Record "Purchase Header";
        WarehouseRequest: Record "Warehouse Request";
    begin
        WarehouseRequest.Copy("Warehouse Request");

        PurchaseHeader.Get(PurchaseHeader."Document Type"::"Return Order", WarehouseRequest."Source No.");
        if PurchaseHeader.Status <> PurchaseHeader.Status::Released then
            exit;

        CreateWarehouseShipmentFromWhseRequest(WarehouseRequest);
    end;

    local procedure CreateWarehouseShipmentForTransferOrder()
    var
        TransferHeader: Record "Transfer Header";
        WarehouseRequest: Record "Warehouse Request";
        GetSourceDocOutbound: Codeunit "Get Source Doc. Outbound";
    begin
        WarehouseRequest.Copy("Warehouse Request");

        TransferHeader.Get(WarehouseRequest."Source No.");
        if TransferHeader.Status <> TransferHeader.Status::Released then
            exit;

        if GetSourceDocOutbound.CheckTransferHeader(TransferHeader, false) then
            exit;

        CreateWarehouseShipmentFromWhseRequest(WarehouseRequest);
    end;

    procedure CreateWarehouseShipmentFromWhseRequest(var WarehouseRequest: Record "Warehouse Request")
    var
        GetSourceDocuments: Report "Get Source Documents";
    begin
        WarehouseRequest.SetRecFilter();
        GetSourceDocuments.SetDoNotFillQtytoHandle(DoNotFillQtytoHandle);
        GetSourceDocuments.SetReservedFromStock(ReservedFromStock);
        GetSourceDocuments.UseRequestPage(false);
        GetSourceDocuments.SetTableView(WarehouseRequest);
        GetSourceDocuments.SetHideDialog(true);
        GetSourceDocuments.RunModal();
    end;

    [IntegrationEvent(true, false)]
    local procedure OnWarehouseRequestOnAfterGetRecord(WarehouseRequest: Record "Warehouse Request")
    begin
    end;
}