microsoft / ALAppExtensions

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

[Event Request] Codeunit 900 - Assembly-Post - OnBeforeRestoreItemTracking #22539

Closed UIBKH closed 1 year ago

UIBKH commented 1 year ago

Dear Support,

We would like to add a new event OnBeforeRestoreItemTracking in the following function using the IsHandled pattern. This would allow us to further customize the code and migrate existing customizations.

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; //New Code --++
begin
    //New Code --
    IsHandled := false;
    OnBeforeRestoreItemTracking(ItemLedgEntry, OrderNo, OrderLineNo, SourceType, DocType, RcptDate, ShptDate, IsHandled);
    if not IsHandled then
    //New Code ++
        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.");
                            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 else
                            ReservStatus := ReservStatus::Surplus;
                        CreateReservEntry.CreateEntry(
                          "Item No.", "Variant Code", "Location Code", '', RcptDate, ShptDate, 0, ReservStatus);
                    end;
                until Next() = 0;
            DeleteAll();
        end;
end;

Event signature:

    [IntegrationEvent(false, false)]
    local procedure OnBeforeRestoreItemTracking(var ItemLedgEntry: Record "Item Ledger Entry"; OrderNo: Code[20]; OrderLineNo: Integer; SourceType: Integer; DocType: Option; RcptDate: Date; ShptDate: Date; var IsHandled: Boolean)
    begin
    end;
JesperSchulz commented 1 year 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: 10902.