microsoft / ALAppExtensions

Repository for collaboration on Microsoft AL application add-on and localization extensions for Microsoft Dynamics 365 Business Central.
MIT License
767 stars 610 forks source link

[Event Request] - codeunit 900 "Assembly-Post" OnBeforeRestoreItemTrackingCreateSalesAssemblyReservationEntry #26259

Closed MatthewMcCarthy7 closed 4 months ago

MatthewMcCarthy7 commented 4 months ago

Describe the request

In Codeunit "Assembly-Post" can we add OnBeforeRestoreItemTrackingCreateSalesAssemblyReservationEntry in procedure RestoreItemTracking.

local procedure RestoreItemTracking(var ItemLedgEntry: Record "Item Ledger Entry"; OrderNo: Code[20]; OrderLineNo: Integer; SourceType: Integer; DocType: Option; RcptDate: Date; ShptDate: Date) var AsmHeader: Record "Assembly Header"; ReservEntry: Record "Reservation Entry"; ATOLink: Record "Assemble-to-Order Link"; SalesLine: Record "Sales Line"; FromTrackingSpecification: Record "Tracking Specification"; CreateReservEntry: Codeunit "Create Reserv. Entry"; IsATOHeader: Boolean; ReservStatus: Enum "Reservation Status"; IsHandled: Boolean; begin IsHandled := false; OnBeforeRestoreItemTracking(ItemLedgEntry, OrderNo, OrderLineNo, SourceType, DocType, RcptDate, ShptDate, IsHandled); if not IsHandled then with ItemLedgEntry do begin AsmHeader.Get(AsmHeader."Document Type"::Order, OrderNo); IsATOHeader := (OrderLineNo = 0) and AsmHeader.IsAsmToOrder();

            Reset();
            SetRange("Order Type", "Order Type"::Assembly);
            SetRange("Order No.", OrderNo);
            SetRange("Order Line No.", OrderLineNo);
            if FindSet() then
                repeat
                    if TrackingExists() then begin
                        CreateReservEntry.SetDates("Warranty Date", "Expiration Date");
                        CreateReservEntry.SetQtyToHandleAndInvoice(Quantity, Quantity);
                        CreateReservEntry.SetItemLedgEntryNo("Entry No.");
                        ReservEntry.CopyTrackingFromItemLedgEntry(ItemLedgEntry);
                        CreateReservEntry.CreateReservEntryFor(
                          SourceType, DocType, "Order No.", '', 0, "Order Line No.",
                          "Qty. per Unit of Measure", 0, Abs(Quantity), ReservEntry);

                        if IsATOHeader then begin

                            ATOLink.Get(AsmHeader."Document Type", AsmHeader."No.");
                            // NEW +
                            IsHandled := false;
                            OnBeforeRestoreItemTrackingCreateSalesAssemblyReservationEntry(ItemLedgEntry, AsmHeader, ATOLink, CreateReservEntry, FromTrackingSpecification, ReservStatus, IsHandled);
                            if not IsHandled then begin
                                // NEW -
                                ATOLink.TestField(Type, ATOLink.Type::Sale);
                                SalesLine.Get(ATOLink."Document Type", ATOLink."Document No.", ATOLink."Document Line No.");

                                CreateReservEntry.SetDisallowCancellation(true);
                                CreateReservEntry.SetBinding("Reservation Binding"::"Order-to-Order");

                                FromTrackingSpecification.InitFromSalesLine(SalesLine);
                                FromTrackingSpecification."Qty. per Unit of Measure" := "Qty. per Unit of Measure";
                                FromTrackingSpecification.CopyTrackingFromItemLedgEntry(ItemLedgEntry);
                                CreateReservEntry.CreateReservEntryFrom(FromTrackingSpecification);
                                ReservStatus := ReservStatus::Reservation;
                            end;
                        end else
                            ReservStatus := ReservStatus::Surplus;
                        CreateReservEntry.CreateEntry(
                          "Item No.", "Variant Code", "Location Code", '', RcptDate, ShptDate, 0, ReservStatus);
                    end;
                until Next() = 0;
            DeleteAll();
        end;
end;

// NEW +
[IntegrationEvent(false, false)]
local procedure OnBeforeRestoreItemTrackingCreateSalesAssemblyReservationEntry(var ItemLedgerEntry: Record "Item Ledger Entry"; AsmHeader: Record "Assembly Header"; var ATOLink: Record "Assemble-to-Order Link"; var CreateReservEntry: Codeunit "Create Reserv. Entry"; var FromTrackingSpecification: Record "Tracking Specification"; var ReservStatus: Enum "Reservation Status"; var IsHandled: Boolean)
begin
end;
// NEW +

Additional context

We are creating Assembly Order for Transfer Orders, and need that event to Post the Assembly Order for that Transfer Order with Item Tracking Lines Internal work item: AB#524728

JesperSchulz commented 4 months ago

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.

Build ID: 18666.