Skip to content

Instantly share code, notes, and snippets.

@BrianMRO
Last active December 29, 2021 23:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BrianMRO/e55c65e1b04ee0b51483565fc4a0cdfb to your computer and use it in GitHub Desktop.
Save BrianMRO/e55c65e1b04ee0b51483565fc4a0cdfb to your computer and use it in GitHub Desktop.
Prepare Replenishment - Determine Qty (Modified)
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