Last active
December 29, 2021 23:01
-
-
Save BrianMRO/e55c65e1b04ee0b51483565fc4a0cdfb to your computer and use it in GitHub Desktop.
Prepare Replenishment - Determine Qty (Modified)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class INReplenishmentCreate_Extension : PXGraphExtension<INReplenishmentCreate>... | |
public delegate void OnRoundQtyByVendorDelegate(INReplenishmentItem rec, decimal qty); | |
[PXOverride] | |
public virtual decimal OnRoundQtyByVendor(INReplenishmentItem rec, decimal qty, OnRoundQtyByVendorDelegate del) | |
{ | |
// DO NOT INVOKE BASE... THIS IS REPLACING TO FIX MULTIPLE OF LOT SIZE ORDERING OVER MAX | |
//return del.Invoke(rec, qty); | |
POVendorInventory vendorSettings = | |
FetchVendorSettings(Base, rec) ?? new POVendorInventory(); | |
if (rec.ReplenishmentMethod == INReplenishmentMethod.FixedReorder) | |
qty = vendorSettings.ERQ.GetValueOrDefault(); | |
else | |
{ | |
if (vendorSettings.LotSize > 0) | |
{ | |
Decimal size = vendorSettings.LotSize.GetValueOrDefault(); | |
// BEGIN MOD | |
//qty = decimal.Ceiling(qty / size) * size; | |
Decimal orderMult = Decimal.Truncate(qty / size); | |
qty = ((orderMult > 0) ? orderMult : 1) * size; | |
// END MOD | |
} | |
if (qty < vendorSettings.MinOrdQty.GetValueOrDefault()) | |
qty = vendorSettings.MinOrdQty.GetValueOrDefault(); | |
Decimal maxOrderQty = vendorSettings.MaxOrdQty ?? Decimal.Zero; //By default, in DB this value is 0, rather then null. So 0 is considered as "not set" for this value | |
if (maxOrderQty > 0 && qty > maxOrderQty) | |
qty = maxOrderQty; | |
} | |
return qty; | |
} | |
// Copy FetchVendorSettings from Base - Inaccessible due to being defined as private in the Base graph | |
private static POVendorInventory FetchVendorSettings(PXGraph graph, INReplenishmentItem r) | |
{ | |
var view = | |
new PXSelect<POVendorInventory, | |
Where<POVendorInventory.inventoryID, Equal<Required<POVendorInventory.inventoryID>>, | |
And<POVendorInventory.subItemID, Equal<Required<POVendorInventory.subItemID>>, | |
And<POVendorInventory.vendorID, Equal<Required<POVendorInventory.vendorID>>, | |
And<Where2<Where<Required<POVendorInventory.vendorLocationID>, IsNull, And<POVendorInventory.vendorLocationID, IsNull>>, | |
Or<POVendorInventory.vendorLocationID, Equal<Required<POVendorInventory.vendorLocationID>>>>>>>>>(graph); | |
return | |
(POVendorInventory)view.SelectWindowed(0, 1, r.InventoryID, r.SubItemID, r.PreferredVendorID, r.PreferredVendorLocationID, r.PreferredVendorLocationID) ?? | |
(POVendorInventory)view.SelectWindowed(0, 1, r.InventoryID, r.DefaultSubItemID, r.PreferredVendorID, r.PreferredVendorLocationID, r.PreferredVendorLocationID) ?? | |
(POVendorInventory)view.SelectWindowed(0, 1, r.InventoryID, r.SubItemID, r.PreferredVendorID, null, null) ?? | |
(POVendorInventory)view.SelectWindowed(0, 1, r.InventoryID, r.DefaultSubItemID, r.PreferredVendorID, null, null); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment