diff --git a/.vscode/launch.json b/.vscode/launch.json index b77f3b95..fcc80a75 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -53,7 +53,7 @@ "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", - "AYANOVA_SERVER_TEST_MODE": "false", + "AYANOVA_SERVER_TEST_MODE": "true", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\" diff --git a/server/AyaNova/biz/PartInventoryBiz.cs b/server/AyaNova/biz/PartInventoryBiz.cs index 5a1c33f6..b2189a08 100644 --- a/server/AyaNova/biz/PartInventoryBiz.cs +++ b/server/AyaNova/biz/PartInventoryBiz.cs @@ -233,11 +233,18 @@ namespace AyaNova.Biz //values must add up if (proposedObj.Balance != (proposedObj.Quantity + (proposedObj.LastBalance ?? 0))) { - AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Balance", "Balance incorrect (LastBalance + Quantity not equal to Balance"); + AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Balance", "Balance incorrect (LastBalance + Quantity not equal to Balance)"); return; } + //Balance must not be negative + if (proposedObj.Balance < 0 ) + { + AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Balance", "Transaction would result in a negative balance (not enough inventory to process this transaction)"); + return; + } + //date is newer than last entry date? if (proposedObj.LastEntryDate != null && proposedObj.LastEntryDate > proposedObj.EntryDate) { diff --git a/server/AyaNova/biz/PurchaseOrderBiz.cs b/server/AyaNova/biz/PurchaseOrderBiz.cs index ca05b267..a07b789d 100644 --- a/server/AyaNova/biz/PurchaseOrderBiz.cs +++ b/server/AyaNova/biz/PurchaseOrderBiz.cs @@ -416,7 +416,7 @@ namespace AyaNova.Biz dtInternalPartInventory i = new dtInternalPartInventory(); i.PartId = poItem.PartId; i.PartWarehouseId = poItem.PartWarehouseId; - i.Quantity = poItem.QuantityReceived *= -1; + i.Quantity = poItem.QuantityReceived * -1; i.SourceType = null;//null because the po no longer exists so this is technically a manual adjustment i.SourceId = null;//'' i.Description = await Translate("PurchaseOrder") + $" {oldObj.Serial} " + await Translate("EventDeleted"); @@ -488,7 +488,7 @@ namespace AyaNova.Biz dtInternalPartInventory i = new dtInternalPartInventory(); i.PartId = oldItem.PartId; i.PartWarehouseId = oldItem.PartWarehouseId; - i.Quantity = oldItem.QuantityReceived *= -1; + i.Quantity = oldItem.QuantityReceived * -1; i.SourceType = AyaType.PurchaseOrder; i.SourceId = oldObj.Id; i.Description = await Translate("PurchaseOrder") + $" {oldObj.Serial} " + await Translate("PurchaseOrderItem") + " " + await Translate("EventDeleted"); @@ -553,7 +553,7 @@ namespace AyaNova.Biz dtInternalPartInventory i = new dtInternalPartInventory(); i.PartId = oldItem.PartId; i.PartWarehouseId = oldItem.PartWarehouseId; - i.Quantity = oldItem.QuantityReceived *= -1; + i.Quantity = oldItem.QuantityReceived * -1; i.SourceType = AyaType.PurchaseOrder; i.SourceId = oldObj.Id; i.Description = await Translate("PurchaseOrder") + $" {oldObj.Serial} " + await Translate("PurchaseOrderItem") + " " + await Translate("EventModified") + " " + await Translate("Part") + "/" + await Translate("PartWarehouse"); diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 15cb644e..b43e61c0 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -3342,7 +3342,7 @@ namespace AyaNova.Biz { PartId = oldObj.PartId, PartWarehouseId = oldObj.PartWarehouseId, - Quantity = oldObj.Quantity *= -1, + Quantity = oldObj.Quantity, SourceType = null,//null because the po no longer exists so this is technically a manual adjustment SourceId = null,//'' Description = await Translate("WorkOrderItemPart") + $" {oldObj.Serials} " + await Translate("EventDeleted") @@ -3368,7 +3368,7 @@ namespace AyaNova.Biz { PartId = newObj.PartId, PartWarehouseId = newObj.PartWarehouseId, - Quantity = newObj.Quantity, + Quantity = newObj.Quantity * -1, SourceType = AyaType.WorkOrderItemPart, SourceId = newObj.Id, Description = await Translate("WorkOrderItemPart") + $" {newObj.Serials} " + await Translate("EventCreated") @@ -3397,7 +3397,7 @@ namespace AyaNova.Biz { PartId = oldObj.PartId, PartWarehouseId = oldObj.PartWarehouseId, - Quantity = oldObj.Quantity *= -1, + Quantity = oldObj.Quantity, SourceType = null,//null because the po no longer exists so this is technically a manual adjustment SourceId = null,//'' Description = await Translate("WorkOrderItemPart") + $" {oldObj.Serials} " + await Translate("EventDeleted") @@ -3418,7 +3418,7 @@ namespace AyaNova.Biz { PartId = newObj.PartId, PartWarehouseId = newObj.PartWarehouseId, - Quantity = newObj.Quantity, + Quantity = newObj.Quantity * -1, SourceType = AyaType.WorkOrderItemPart, SourceId = newObj.Id, Description = await Translate("WorkOrderItemPart") + $" {newObj.Serials} " + await Translate("EventCreated")