This commit is contained in:
2021-02-16 21:42:27 +00:00
parent b34162c00d
commit 456e29969f

View File

@@ -268,89 +268,110 @@ namespace AyaNova.Biz
////////////////////////////////////////////////////////////////////////////////////////////////
//BIZ ACTIONS
//A PO can now be edited in any way user wishes at any time so this method is to fix up
//any changes they make in affected objects and inventory
//
private async Task BizActionsAsync(AyaEvent ayaEvent, PurchaseOrder proposedObj, PurchaseOrder currentObj, IDbContextTransaction transaction)
{
//TODO: BIZ ACTIONS TO FIXUP INVENTORY ON CHANGES ETC
//If received now less than before need to take out of inventory
//If received now more than before need to put into inventory
//MIGRATE_OUTSTANDING - woitempart request update
//if received on woitempartrequest then need to update woitempartrequest (notification separate not a concern here)
//if workorderitempartrequest item removed, need to fixup woitempartrequest
//BUT *only* if the woitempartrequest still exists and isn't completed already
PartInventoryBiz pib = new PartInventoryBiz(ct, UserId, UserTranslationId, CurrentUserRoles);
switch (ayaEvent)
{
case AyaEvent.Created:
//any received go into inventory
var inventoryAffectingItems = proposedObj.Items.Where(z => z.QuantityReceived > 0).ToList();
foreach (var poItem in inventoryAffectingItems)
{
//make inventory adjustment here
dtPOPartInventory i = new dtPOPartInventory();
i.PartId = poItem.PartId;
i.PartWarehouseId = poItem.PartWarehouseId;
i.Quantity = poItem.QuantityReceived;
i.SourceType = AyaType.PurchaseOrder;
i.SourceId = proposedObj.Id;
await pib.CreateAsync(i);
//MIGRATE_OUTSTANDING - update workorderitempart here if applicable
}
break;
case AyaEvent.Modified:
//any changes that will affect inventory get processed here
foreach (var propPOItem in proposedObj.Items)
{
//get the matching currentPoItem
var currentPOItem = currentObj.Items.FirstOrDefault(z => z.Id == propPOItem.Id);
//NEW ITEM?
if (currentPOItem == null && propPOItem.QuantityReceived > 0)
//any received go into inventory
var inventoryAffectingItems = proposedObj.Items.Where(z => z.QuantityReceived > 0).ToList();
foreach (var poItem in inventoryAffectingItems)
{
//It's a new receipt from before, add to inventory
//make inventory adjustment here
dtPOPartInventory i = new dtPOPartInventory();
i.PartId = propPOItem.PartId;
i.PartWarehouseId = propPOItem.PartWarehouseId;
i.Quantity = propPOItem.QuantityReceived;
i.PartId = poItem.PartId;
i.PartWarehouseId = poItem.PartWarehouseId;
i.Quantity = poItem.QuantityReceived;
i.SourceType = AyaType.PurchaseOrder;
i.SourceId = proposedObj.Id;
await pib.CreateAsync(i);
//MIGRATE_OUTSTANDING - update workorderitempart here if applicable
}
//UPDATED ITEM WITH NEW RECEIVED AMOUNT?
else if (currentPOItem.QuantityReceived != propPOItem.QuantityReceived)
}
break;
case AyaEvent.Modified:
{
//any changes that will affect inventory get processed here
foreach (var newItem in proposedObj.Items)
{
decimal netChange = 0;
if (currentPOItem.QuantityReceived < propPOItem.QuantityReceived)
//get the matching currentPoItem
var oldItem = currentObj.Items.FirstOrDefault(z => z.Id == newItem.Id);
//NEW ITEM?
if (oldItem == null && newItem.QuantityReceived > 0)
{
//More received
netChange = propPOItem.QuantityReceived - currentPOItem.QuantityReceived;
}
else
{
//less received
netChange = propPOItem.QuantityReceived - currentPOItem.QuantityReceived;
}
//It's a new receipt with received amounts - add to inventory
dtPOPartInventory i = new dtPOPartInventory();
i.PartId = newItem.PartId;
i.PartWarehouseId = newItem.PartWarehouseId;
i.Quantity = newItem.QuantityReceived;
i.SourceType = AyaType.PurchaseOrder;
i.SourceId = proposedObj.Id;
await pib.CreateAsync(i);
//MIGRATE_OUTSTANDING - update workorderitempart here if applicable
}
//UPDATED ITEM WITH NEW RECEIVED AMOUNT?
else if (oldItem.QuantityReceived != newItem.QuantityReceived)
{
decimal netChange = 0;
if (oldItem.QuantityReceived < newItem.QuantityReceived)
{
//More received
netChange = newItem.QuantityReceived - oldItem.QuantityReceived;
}
else
{
//less received
netChange = newItem.QuantityReceived - oldItem.QuantityReceived;
}
dtPOPartInventory i = new dtPOPartInventory();
i.PartId = newItem.PartId;
i.PartWarehouseId = newItem.PartWarehouseId;
i.Quantity = netChange;
i.SourceType = AyaType.PurchaseOrder;
i.SourceId = proposedObj.Id;
await pib.CreateAsync(i);
//MIGRATE_OUTSTANDING - update workorderitempart here if applicable
}
}
}
break;
case AyaEvent.Deleted:
{
//REVERSE ENTIRE PO
//any received remove from inventory
var inventoryAffectingItems = currentObj.Items.Where(z => z.QuantityReceived > 0).ToList();
foreach (var poItem in inventoryAffectingItems)
{
//make reversing inventory adjustment here
dtPOPartInventory i = new dtPOPartInventory();
i.PartId = poItem.PartId;
i.PartWarehouseId = poItem.PartWarehouseId;
i.Quantity = poItem.QuantityReceived *= -1;
i.SourceType = AyaType.PurchaseOrder;
i.SourceId = proposedObj.Id;
await pib.CreateAsync(i);
//MIGRATE_OUTSTANDING - update workorderitempart here if applicable
}
}
break;
}
}