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 //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) 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 //MIGRATE_OUTSTANDING - woitempart request update
//if received on woitempartrequest then need to update woitempartrequest (notification separate not a concern here) //if received on woitempartrequest then need to update woitempartrequest (notification separate not a concern here)
//if workorderitempartrequest item removed, need to fixup woitempartrequest //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); PartInventoryBiz pib = new PartInventoryBiz(ct, UserId, UserTranslationId, CurrentUserRoles);
switch (ayaEvent) switch (ayaEvent)
{ {
case AyaEvent.Created: 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 //any received go into inventory
dtPOPartInventory i = new dtPOPartInventory(); var inventoryAffectingItems = proposedObj.Items.Where(z => z.QuantityReceived > 0).ToList();
i.PartId = poItem.PartId; foreach (var poItem in inventoryAffectingItems)
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)
{ {
//It's a new receipt from before, add to inventory //make inventory adjustment here
dtPOPartInventory i = new dtPOPartInventory(); dtPOPartInventory i = new dtPOPartInventory();
i.PartId = propPOItem.PartId; i.PartId = poItem.PartId;
i.PartWarehouseId = propPOItem.PartWarehouseId; i.PartWarehouseId = poItem.PartWarehouseId;
i.Quantity = propPOItem.QuantityReceived; i.Quantity = poItem.QuantityReceived;
i.SourceType = AyaType.PurchaseOrder; i.SourceType = AyaType.PurchaseOrder;
i.SourceId = proposedObj.Id; i.SourceId = proposedObj.Id;
await pib.CreateAsync(i); await pib.CreateAsync(i);
//MIGRATE_OUTSTANDING - update workorderitempart here if applicable //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; //get the matching currentPoItem
var oldItem = currentObj.Items.FirstOrDefault(z => z.Id == newItem.Id);
if (currentPOItem.QuantityReceived < propPOItem.QuantityReceived) //NEW ITEM?
if (oldItem == null && newItem.QuantityReceived > 0)
{ {
//More received //It's a new receipt with received amounts - add to inventory
netChange = propPOItem.QuantityReceived - currentPOItem.QuantityReceived; dtPOPartInventory i = new dtPOPartInventory();
} i.PartId = newItem.PartId;
else i.PartWarehouseId = newItem.PartWarehouseId;
{ i.Quantity = newItem.QuantityReceived;
//less received i.SourceType = AyaType.PurchaseOrder;
netChange = propPOItem.QuantityReceived - currentPOItem.QuantityReceived; 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; break;
case AyaEvent.Deleted: 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; break;
} }
} }