microsoft / ALAppExtensions

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

Add event OnMakeConnectionOnBeforeCreateReservEntry into codeunit 99000845 "Reservation Management" #26601

Closed NBTPaolinoMattia closed 3 weeks ago

NBTPaolinoMattia commented 1 month ago

Describe the request

The code should be like this:

local procedure MakeConnection(var FromReservEntry: Record "Reservation Entry"; var ToReservEntry: Record "Reservation Entry"; Quantity: Decimal; ReservationStatus: Enum "Reservation Status"; AvailabilityDate: Date; Binding: Enum "Reservation Binding")
var
    FromTrackingSpecification: Record "Tracking Specification";
    Sign: Integer;
    IsHandled : Boolean;
begin
    if Quantity < 0 then
        ToReservEntry."Shipment Date" := AvailabilityDate
    else
        ToReservEntry."Expected Receipt Date" := AvailabilityDate;

    CreateReservEntry.SetBinding(Binding);

    if FromReservEntry."Planning Flexibility" <> FromReservEntry."Planning Flexibility"::Unlimited then
        CreateReservEntry.SetPlanningFlexibility(FromReservEntry."Planning Flexibility");

    IsHandled := false;
    OnMakeConnectionOnBeforeCreateReservEntry(FromReservEntry, ToReservEntry, Quantity, ReservationStatus, AvailabilityDate, Binding, FromTrackingSpecification, Sign, IsHandled);
    if not IsHandled then begin
      Sign := CreateReservEntry.SignFactor(FromReservEntry);
      CreateReservEntry.CreateReservEntryFor(
        FromReservEntry."Source Type", FromReservEntry."Source Subtype", FromReservEntry."Source ID",
        FromReservEntry."Source Batch Name", FromReservEntry."Source Prod. Order Line", FromReservEntry."Source Ref. No.",
        FromReservEntry."Qty. per Unit of Measure", 0, Sign * Quantity,
        FromReservEntry);

      FromTrackingSpecification.SetSourceFromReservEntry(ToReservEntry);
      FromTrackingSpecification."Qty. per Unit of Measure" := ToReservEntry."Qty. per Unit of Measure";
      FromTrackingSpecification.CopyTrackingFromReservEntry(ToReservEntry);
      CreateReservEntry.CreateReservEntryFrom(FromTrackingSpecification);
      CreateReservEntry.SetApplyFromEntryNo(FromReservEntry."Appl.-from Item Entry");
      CreateReservEntry.SetApplyToEntryNo(FromReservEntry."Appl.-to Item Entry");
      CreateReservEntry.SetUntrackedSurplus(ToReservEntry."Untracked Surplus");
    end;

    if IsSpecialOrderOrDropShipment(ToReservEntry) then begin
        if FromReservEntry."Source Type" = Database::"Purchase Line" then
            ToReservEntry."Shipment Date" := 0D;
        if FromReservEntry."Source Type" = Database::"Sales Line" then
            ToReservEntry."Expected Receipt Date" := 0D;
    end;
    CreateReservEntry.CreateEntry(
      FromReservEntry."Item No.", FromReservEntry."Variant Code", FromReservEntry."Location Code",
      FromReservEntry.Description, ToReservEntry."Expected Receipt Date", ToReservEntry."Shipment Date", 0, ReservationStatus);
end;
[IntegrationEvent(false, false)]
local procedure OnMakeConnectionOnBeforeCreateReservEntry(var FromReservEntry: Record "Reservation Entry"; var ToReservEntry: Record "Reservation Entry"; var Quantity: Decimal; ReservationStatus: Enum "Reservation Status"; var AvailabilityDate: Date; Binding: Enum "Reservation Binding"; var FromTrackingSpecification: Record "Tracking Specification"; var Sign: Integer; var IsHandled: Boolean)
begin
end;

Additional context

This code is usefull for anyone want to operate on records/variables or change program logic before create Reservation Entry. Internal work item: AB#537581

JesperSchulz commented 3 weeks 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: 20692.