Codeunit 303 Allocate Reserv Cust. Priority, source in 29
Source29
src/Layers/W1/BaseApp/Inventory/Tracking/AllocateReservCustPriority.Codeunit.al92 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.Inventory.Tracking;
codeunit 303 "Allocate Reserv Cust. Priority" implements "Allocate Reservation"
{
var
DescriptionTxt: Label 'Distribution based on Priority field in the customer card. The program will automatically fulfill all demands when the existing stock is sufficient. In cases of insufficient quantities, the system will prioritize supplying customers with the highest priority.';
procedure Allocate(var ReservationWkshLine: Record "Reservation Wksh. Line")
var
ReservWkshLine: Record "Reservation Wksh. Line";
IsHandled: Boolean;
begin
ReservWkshLine.Copy(ReservationWkshLine);
ReservWkshLine.FilterGroup := 2;
ReservWkshLine.SetFilter("Item No.", ReservationWkshLine.GetFilter("Item No."));
ReservWkshLine.SetFilter("Variant Code", ReservationWkshLine.GetFilter("Variant Code"));
ReservWkshLine.SetFilter("Location Code", ReservationWkshLine.GetFilter("Location Code"));
ReservWkshLine.FilterGroup := 0;
ReservWkshLine.SetCurrentKey("Journal Batch Name", "Item No.", "Variant Code", "Location Code", Priority);
ReservWkshLine.Ascending(false);
IsHandled := false;
OnAllocateOnAfterReservationWorksheetLinePrepare(ReservWkshLine, ReservationWkshLine, IsHandled);
if IsHandled then
exit;
if not ReservWkshLine.FindSet(true) then
exit;
repeat
ReservWkshLine.SetRange("Item No.", ReservWkshLine."Item No.");
ReservWkshLine.SetRange("Variant Code", ReservWkshLine."Variant Code");
ReservWkshLine.SetRange("Location Code", ReservWkshLine."Location Code");
ReservWkshLine.SetRange(Priority, ReservWkshLine.Priority);
ReservWkshLine.CalcSums("Qty. to Reserve (Base)", "Rem. Qty. to Reserve (Base)");
if ReservWkshLine."Qty. to Reserve (Base)" + ReservWkshLine."Avail. Qty. to Reserve (Base)" >= ReservWkshLine."Rem. Qty. to Reserve (Base)"
then begin
ReservWkshLine.FindSet(true);
repeat
if not ReservWkshLine.Accept then begin
ReservWkshLine.Validate("Qty. to Reserve", ReservWkshLine."Remaining Qty. to Reserve");
ReservWkshLine.Modify(true);
end;
until ReservWkshLine.Next() = 0;
end else begin
IsHandled := false;
OnContinueAllocationIfDemandNotFulfilled(ReservWkshLine, IsHandled);
if not IsHandled then
if ReservWkshLine."Rem. Qty. to Reserve (Base)" > 0 then
exit;
end;
ReservWkshLine.FindLast();
ReservWkshLine.SetRange("Item No.");
ReservWkshLine.SetRange("Variant Code");
ReservWkshLine.SetRange("Location Code");
ReservWkshLine.SetRange(Priority);
until ReservWkshLine.Next() = 0;
end;
procedure AllocationCompleted(var ReservationWkshLine: Record "Reservation Wksh. Line"): Boolean
var
ReservWkshLine: Record "Reservation Wksh. Line";
begin
ReservWkshLine.Copy(ReservationWkshLine);
ReservWkshLine.SetRange(Accept, false);
exit(ReservWkshLine.IsEmpty());
end;
procedure DeleteAllocation(var ReservationWkshLine: Record "Reservation Wksh. Line")
begin
end;
procedure GetDescription(): Text
begin
exit(DescriptionTxt);
end;
[IntegrationEvent(false, false)]
local procedure OnAllocateOnAfterReservationWorksheetLinePrepare(var ReservationWkshLine2: Record "Reservation Wksh. Line"; var ReservationWkshLine: Record "Reservation Wksh. Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnContinueAllocationIfDemandNotFulfilled(var ReservationWkshLine: Record "Reservation Wksh. Line"; var IsHandled: Boolean)
begin
end;
}