From 0baff224c2e9b61178280c16d7267a23be7acae8 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Fri, 22 Jan 2021 00:11:08 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- server/AyaNova/biz/PartInventoryBiz.cs | 72 ++++++++++++++------------ server/AyaNova/biz/ServiceBankBiz.cs | 6 +-- server/AyaNova/util/Seeder.cs | 28 ++++++++-- 4 files changed, 67 insertions(+), 41 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 0e2049e9..8fd97968 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 066cd980..dae5d038 100644 --- a/server/AyaNova/biz/PartInventoryBiz.cs +++ b/server/AyaNova/biz/PartInventoryBiz.cs @@ -45,40 +45,48 @@ namespace AyaNova.Biz { using (var transaction = await ct.Database.BeginTransactionAsync()) { - //get the last record if exists (will not if opening balance) - var LastEntry = await ct.PartInventory.OrderByDescending(m => m.EntryDate).FirstOrDefaultAsync(m => m.PartId == newDtObject.PartId && m.PartWarehouseId == newDtObject.PartWarehouseId); - PartInventory newObject = new PartInventory(); - newObject.Description = newDtObject.Description; - newObject.EntryDate = DateTime.UtcNow; - newObject.PartId = newDtObject.PartId; - newObject.PartWarehouseId = newDtObject.PartWarehouseId; - newObject.SourceId = 0; - newObject.SourceType = AyaType.NoType; - newObject.Quantity = newDtObject.Quantity; - - if (LastEntry != null) + try { - newObject.LastEntryDate = LastEntry.EntryDate; - newObject.LastBalance = LastEntry.Balance; - newObject.Balance = LastEntry.Balance + newObject.Quantity; + //get the last record if exists (will not if opening balance) + var LastEntry = await ct.PartInventory.OrderByDescending(m => m.EntryDate).FirstOrDefaultAsync(m => m.PartId == newDtObject.PartId && m.PartWarehouseId == newDtObject.PartWarehouseId); + PartInventory newObject = new PartInventory(); + newObject.Description = newDtObject.Description; + newObject.EntryDate = DateTime.UtcNow; + newObject.PartId = newDtObject.PartId; + newObject.PartWarehouseId = newDtObject.PartWarehouseId; + newObject.SourceId = 0; + newObject.SourceType = AyaType.NoType; + newObject.Quantity = newDtObject.Quantity; + + if (LastEntry != null) + { + newObject.LastEntryDate = LastEntry.EntryDate; + newObject.LastBalance = LastEntry.Balance; + newObject.Balance = LastEntry.Balance + newObject.Quantity; + } + else + { + newObject.Balance = newObject.Quantity; + } + + await ValidateAsync(newObject); + if (HasErrors) + return null; + else + { + + await ct.PartInventory.AddAsync(newObject); + await ct.SaveChangesAsync(); + await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, BizType, AyaEvent.Created), ct); + await SearchIndexAsync(newObject, true); + await transaction.CommitAsync(); + return newObject; + } } - else + catch { - newObject.Balance = newObject.Quantity; - } - - await ValidateAsync(newObject); - if (HasErrors) - return null; - else - { - - await ct.PartInventory.AddAsync(newObject); - await ct.SaveChangesAsync(); - await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, BizType, AyaEvent.Created), ct); - await SearchIndexAsync(newObject, true); - - return newObject; + //Just re-throw for now, let exception handler deal, but in future may want to deal with this more here + throw; } } } @@ -190,7 +198,7 @@ namespace AyaNova.Biz } //values must add up - if (proposedObj.Balance != (proposedObj.LastBalance ?? 0 + proposedObj.Quantity)) + if (proposedObj.Balance != (proposedObj.Quantity + (proposedObj.LastBalance ?? 0))) { AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "Balance", "Balance incorrect (LastBalance + Quantity not equal to Balance"); return; diff --git a/server/AyaNova/biz/ServiceBankBiz.cs b/server/AyaNova/biz/ServiceBankBiz.cs index fcdbd81a..b9ddd5b0 100644 --- a/server/AyaNova/biz/ServiceBankBiz.cs +++ b/server/AyaNova/biz/ServiceBankBiz.cs @@ -203,17 +203,17 @@ namespace AyaNova.Biz } //values must add up - if (proposedObj.IncidentsBalance != (proposedObj.LastIncidentsBalance ?? 0 + proposedObj.Incidents)) + if (proposedObj.IncidentsBalance != (proposedObj.Incidents + (proposedObj.LastIncidentsBalance ?? 0))) { AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "generalerror", "LT:ServiceBankIncidentsBalance"); return; } - if (proposedObj.CurrencyBalance != (proposedObj.LastCurrencyBalance ?? 0 + proposedObj.Currency)) + if (proposedObj.CurrencyBalance != (proposedObj.Currency + (proposedObj.LastCurrencyBalance ?? 0))) { AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "generalerror", "LT:ServiceBankCurrencyBalance"); return; } - if (proposedObj.HoursBalance != (proposedObj.LastHoursBalance ?? 0 + proposedObj.Hours)) + if (proposedObj.HoursBalance != (proposedObj.Hours + (proposedObj.LastHoursBalance ?? 0))) { AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "generalerror", "LT:ServiceBankHoursBalance"); return; diff --git a/server/AyaNova/util/Seeder.cs b/server/AyaNova/util/Seeder.cs index 4941c083..fe50478a 100644 --- a/server/AyaNova/util/Seeder.cs +++ b/server/AyaNova/util/Seeder.cs @@ -1538,6 +1538,7 @@ namespace AyaNova.Util } PartInventoryBiz PartInventoryBizNess = PartInventoryBiz.GetBiz(ct); + int OpeningInventoryLevel = 1; // 50% chance it has serial numbers if (Fake.Random.Number() == 1) { @@ -1548,14 +1549,31 @@ namespace AyaNova.Util } await ct.SaveChangesAsync(); - //add inventory to cover serials - await PartInventoryBizNess.CreateAsync(new dtPartInventory() { PartId = NewObject.Id, PartWarehouseId = 1, Quantity = serialCount }); + //ensure add enough inventory to cover serials + OpeningInventoryLevel = serialCount; } - else + + OpeningInventoryLevel += Fake.Random.Number(1, 1000); + PartInventory partInventory = null; + + //add opening inventory + partInventory = await PartInventoryBizNess.CreateAsync(new dtPartInventory() { PartId = NewObject.Id, PartWarehouseId = 1, Quantity = OpeningInventoryLevel, Description = "New part opening inventory" }); + + //make two adjustments to have some testing data + if (partInventory != null) + partInventory = await PartInventoryBizNess.CreateAsync(new dtPartInventory() { PartId = NewObject.Id, PartWarehouseId = 1, Quantity = -1, Description = "example adjustment" }); + + if (partInventory != null) + partInventory = await PartInventoryBizNess.CreateAsync(new dtPartInventory() { PartId = NewObject.Id, PartWarehouseId = 1, Quantity = Fake.Random.Number(1, 100), Description = "example adjustment" }); + + + if (partInventory == null) { - //add random inventory level - await PartInventoryBizNess.CreateAsync(new dtPartInventory() { PartId = NewObject.Id, PartWarehouseId = 1, Quantity = Fake.Random.Number(1, 100) }); + var err = $"Seeder::SeedPart - error creating {o.PartNumber} INVENTORY \r\n{PartInventoryBizNess.GetErrorsAsString()}"; + log.LogError(err); + throw new System.Exception(err); } + } } }