diff --git a/server/AyaNova/biz/FormFieldReference.cs b/server/AyaNova/biz/FormFieldReference.cs index 5d92f154..8b7d0fe6 100644 --- a/server/AyaNova/biz/FormFieldReference.cs +++ b/server/AyaNova/biz/FormFieldReference.cs @@ -554,6 +554,7 @@ namespace AyaNova.Biz l.Add(new FormField { TKey = "PurchaseOrderItemWorkOrderNumber", FieldKey = "Items.WorkorderItemPartRequestId" }); l.Add(new FormField { TKey = "TaxCode", FieldKey = "Items.PurchaseTaxCodeId" }); l.Add(new FormField { TKey = "PurchaseOrderItemVendorPartNumber", FieldKey = "Items.VendorPartNumber" }); + l.Add(new FormField { TKey = "PurchaseOrderItemSerialNumbers", FieldKey = "Items.Serials" }); l.Add(new FormField { TKey = "PurchaseOrderCustom1", FieldKey = "PurchaseOrderCustom1", IsCustomField = true }); l.Add(new FormField { TKey = "PurchaseOrderCustom2", FieldKey = "PurchaseOrderCustom2", IsCustomField = true }); diff --git a/server/AyaNova/biz/PurchaseOrderBiz.cs b/server/AyaNova/biz/PurchaseOrderBiz.cs index 8e136956..3a284900 100644 --- a/server/AyaNova/biz/PurchaseOrderBiz.cs +++ b/server/AyaNova/biz/PurchaseOrderBiz.cs @@ -623,11 +623,18 @@ namespace AyaNova.Biz await PartBiz.RemoveSerialsAsync(oldItem.PartId, oldItem.Serials, ct, UserId); await PartBiz.AppendSerialsAsync(newItem.PartId, newItem.Serials, ct, UserId); } - continue;//on to next } - //### BEFORE ADDING MORE CHECKS HERE MAKE SURE LOGIC WORKS WITH ABOVE ### + //SERIALS CHANGED + if (oldItem.Serials != newItem.Serials) + { + await PartBiz.RemoveSerialsAsync(oldItem.PartId, oldItem.Serials, ct, UserId); + await PartBiz.AppendSerialsAsync(newItem.PartId, newItem.Serials, ct, UserId); + } + + + //### BEFORE ADDING MORE CHECKS HERE MAKE SURE LOGIC WORKS WITH ABOVE (and add continue statement) ### } }//modified block diff --git a/server/AyaNova/resource/de.json b/server/AyaNova/resource/de.json index 34625c2b..5b91fb9b 100644 --- a/server/AyaNova/resource/de.json +++ b/server/AyaNova/resource/de.json @@ -750,6 +750,7 @@ "PurchaseOrderItemUISaveWarning": "Möchten Sie wirklich speichern? Sobald dieser Datensatz gespeichert ist, wird er gesperrt und kann nicht mehr bearbeitet werden.", "PurchaseOrderItemWorkOrderNumber": "Arbeitsauftragsnummer", "PurchaseOrderItemVendorPartNumber": "Lieferantennummer", + "PurchaseOrderItemSerialNumbers": "Seriennummer", "PurchaseOrderReceiptItems": "Einkaufsauftragseingang - Posten", "PurchaseOrderReceiptPartRequestNotFound": "Teileanforderung nicht gefunden", "PurchaseOrderReceiptReceivedDate": "Empfangen am", diff --git a/server/AyaNova/resource/en.json b/server/AyaNova/resource/en.json index a6f16a31..e928e58b 100644 --- a/server/AyaNova/resource/en.json +++ b/server/AyaNova/resource/en.json @@ -750,6 +750,7 @@ "PurchaseOrderItemUISaveWarning": "Are you sure you want to save?\r\nOnce this record is saved it will be locked and can no longer be edited.", "PurchaseOrderItemWorkOrderNumber": "WorkOrder #", "PurchaseOrderItemVendorPartNumber": "Vendor number", + "PurchaseOrderItemSerialNumbers": "Serial numbers", "PurchaseOrderReceiptItems": "Purchase Order Receipt Items", "PurchaseOrderReceiptPartRequestNotFound": "Part request not found", "PurchaseOrderReceiptReceivedDate": "Received Date", diff --git a/server/AyaNova/resource/es.json b/server/AyaNova/resource/es.json index 6e4fa432..f9bf934a 100644 --- a/server/AyaNova/resource/es.json +++ b/server/AyaNova/resource/es.json @@ -749,6 +749,7 @@ "PurchaseOrderItemUISaveWarning": "¿Seguro que desea guardar? Una vez guardado, el registro quedará bloqueado y no podrá editarse.", "PurchaseOrderItemWorkOrderNumber": "Núm. pedido", "PurchaseOrderItemVendorPartNumber": "Proveedor Número", + "PurchaseOrderItemSerialNumbers": "Números seriales", "PurchaseOrderReceiptItems": "Elemento recibo orden de compra", "PurchaseOrderReceiptPartRequestNotFound": "Solicitud de pieza no encontrada", "PurchaseOrderReceiptReceivedDate": "Recibido con fecha", diff --git a/server/AyaNova/resource/fr.json b/server/AyaNova/resource/fr.json index e8cbbd33..b82ab0e4 100644 --- a/server/AyaNova/resource/fr.json +++ b/server/AyaNova/resource/fr.json @@ -750,6 +750,7 @@ "PurchaseOrderItemUISaveWarning": "Voulez-vous réellement sauvegarder ? Une fois l'enregistrement sauvegardé, il sera bloqué et ne pourra plus être modifié.", "PurchaseOrderItemWorkOrderNumber": "Bon de travail n°", "PurchaseOrderItemVendorPartNumber": "Fournisseur n°", + "PurchaseOrderItemSerialNumbers": "Numéros de série", "PurchaseOrderReceiptItems": "Éléments de reçu de bon de commande", "PurchaseOrderReceiptPartRequestNotFound": "Demande de pièce introuvable", "PurchaseOrderReceiptReceivedDate": "Date de réception", diff --git a/server/AyaNova/util/Seeder.cs b/server/AyaNova/util/Seeder.cs index c66ae6a2..c385ca31 100644 --- a/server/AyaNova/util/Seeder.cs +++ b/server/AyaNova/util/Seeder.cs @@ -238,7 +238,7 @@ namespace AyaNova.Util await SeedLoanLoanUnitAsync(log, 5); await SeedCustomerServiceRequestAsync(log, 5); await SeedPartWarehouseAsync(log, 5); - await SeedPartAsync(log, 20); + await SeedPartAsync(log, 20, 5); await SeedPartAssemblyAsync(log, 5); await SeedPurchaseOrderAsync(log, 20); @@ -292,7 +292,7 @@ namespace AyaNova.Util await SeedLoanLoanUnitAsync(log, 10); await SeedCustomerServiceRequestAsync(log, 10); await SeedPartWarehouseAsync(log, 10); - await SeedPartAsync(log, 100); + await SeedPartAsync(log, 100, 10); await SeedPartAssemblyAsync(log, 5); await SeedPurchaseOrderAsync(log, 30); @@ -357,7 +357,7 @@ namespace AyaNova.Util await SeedLoanLoanUnitAsync(log, 15); await SeedCustomerServiceRequestAsync(log, 15); await SeedPartWarehouseAsync(log, 15); - await SeedPartAsync(log, 200); + await SeedPartAsync(log, 200, 15); await SeedPartAssemblyAsync(log, 5); await SeedPurchaseOrderAsync(log, 50); @@ -422,7 +422,7 @@ namespace AyaNova.Util await SeedLoanLoanUnitAsync(log, 20); await SeedCustomerServiceRequestAsync(log, 20); await SeedPartWarehouseAsync(log, 20); - await SeedPartAsync(log, 500); + await SeedPartAsync(log, 500, 20); await SeedPartAssemblyAsync(log, 5); await SeedPurchaseOrderAsync(log, 200); @@ -1574,7 +1574,7 @@ namespace AyaNova.Util ////////////////////////////////////////////////////// //PART // - public async Task SeedPartAsync(ILogger log, int count) + public async Task SeedPartAsync(ILogger log, int count, int maxQuantity) { for (int x = 0; x < count; x++) { @@ -1616,23 +1616,23 @@ namespace AyaNova.Util throw new System.Exception(err); } + int OpeningInventoryLevel = Fake.Random.Number(1, maxQuantity); + PartInventoryBiz PartInventoryBizNess = PartInventoryBiz.GetBiz(ct); - int OpeningInventoryLevel = 1; - // 50% chance it has serial numbers - if (Fake.Random.Number() == 1) + // 25% chance it has serial numbers + if (Fake.Random.Number(0, 4) == 1) { - var serialCount = Fake.Random.Number(1, 5); - for (int y = 0; y < serialCount; y++) + var serialStart = Fake.Finance.Account(5).ToString(); + + for (int y = 0; y < OpeningInventoryLevel; y++) { - await ct.PartSerial.AddAsync(new PartSerial() { PartId = NewObject.Id, Serial = Fake.Finance.Account().ToString() + y.ToString() }); + await ct.PartSerial.AddAsync(new PartSerial() { PartId = NewObject.Id, Serial = serialStart + "-" + y.ToString() }); } await ct.SaveChangesAsync(); - //ensure add enough inventory to cover serials - OpeningInventoryLevel = serialCount; + } - OpeningInventoryLevel += Fake.Random.Number(1, 1000); PartInventory partInventory = null; //Add inventory into multiple warehouses for testing @@ -1643,14 +1643,16 @@ namespace AyaNova.Util //add opening inventory partInventory = await PartInventoryBizNess.CreateAsync(new dtPartInventory() { PartId = NewObject.Id, PartWarehouseId = WarehouseNumber, 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 = WarehouseNumber, Quantity = -1, Description = "example adjustment" }); - - if (partInventory != null) - partInventory = await PartInventoryBizNess.CreateAsync(new dtPartInventory() { PartId = NewObject.Id, PartWarehouseId = WarehouseNumber, Quantity = Fake.Random.Number(1, 100), Description = "example adjustment" }); - + //Example adjustments? + if (Fake.Random.Number(1, 10) == 1) // 10% adjusted + { + //make two adjustments to have some testing data + if (partInventory != null) + partInventory = await PartInventoryBizNess.CreateAsync(new dtPartInventory() { PartId = NewObject.Id, PartWarehouseId = WarehouseNumber, Quantity = -1, Description = "example adjustment" }); + if (partInventory != null) + partInventory = await PartInventoryBizNess.CreateAsync(new dtPartInventory() { PartId = NewObject.Id, PartWarehouseId = WarehouseNumber, Quantity = Fake.Random.Number(1, 3), Description = "example adjustment" }); + } if (partInventory == null) { var err = $"Seeder::SeedPart - error creating {o.PartNumber} INVENTORY \r\n{PartInventoryBizNess.GetErrorsAsString()}"; @@ -1761,7 +1763,7 @@ namespace AyaNova.Util partId = Fake.Random.Long(1, TotalSeededParts); } while (partsAdded.Contains(partId)); partsAdded.Add(partId); - var qty = Fake.Random.Int(1, 100); + var qty = Fake.Random.Int(1, 5); var cost = Fake.Random.Decimal(1, 25); // 50% chance it has received serial numbers