From d70b1f30668e49e3ccafaaf28928be197b7c270a Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 25 Feb 2021 16:03:16 +0000 Subject: [PATCH] --- server/AyaNova/biz/PurchaseOrderBiz.cs | 17 +++++++++++++++++ server/AyaNova/models/PurchaseOrderItem.cs | 1 + server/AyaNova/util/AySchema.cs | 4 ++-- server/AyaNova/util/Seeder.cs | 19 ++++++++++++++++++- 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/server/AyaNova/biz/PurchaseOrderBiz.cs b/server/AyaNova/biz/PurchaseOrderBiz.cs index 0782416f..8bd7c66b 100644 --- a/server/AyaNova/biz/PurchaseOrderBiz.cs +++ b/server/AyaNova/biz/PurchaseOrderBiz.cs @@ -512,6 +512,23 @@ namespace AyaNova.Biz { AddError(ApiErrorCode.API_SERVER_ERROR, "generalerror", $"Error updating inventory ({i.Description}):{pib.GetErrorsAsString()}"); return; + } + + if (!string.IsNullOrWhiteSpace(newItem.Serials)) + { + //javascript version at UI for partserials entry + //let splitted = this.newSerial.split(/[\s,]+/).filter(Boolean); //filter Boolean is equivalent to array.filter(item => Boolean(item)) and it's to filter out nulls concisely from badly formatted strings + // splitted = [...splitted, ...this.obj]; + // let uniqueItems = [...new Set(splitted)]; + // uniqueItems.sort(); + + //c# version to replicate above + var serials = System.Text.RegularExpressions.Regex.Split(newItem.Serials, "[\\s,]+", System.Text.RegularExpressions.RegexOptions.IgnoreCase, + TimeSpan.FromMilliseconds(2000)).Select(x => x.Trim()).Where(x => !string.IsNullOrWhiteSpace(x)).Distinct().OrderBy(x => x).ToArray(); + + + + } } diff --git a/server/AyaNova/models/PurchaseOrderItem.cs b/server/AyaNova/models/PurchaseOrderItem.cs index f27dd48b..fcb2c956 100644 --- a/server/AyaNova/models/PurchaseOrderItem.cs +++ b/server/AyaNova/models/PurchaseOrderItem.cs @@ -29,6 +29,7 @@ namespace AyaNova.Models public long? WorkorderItemPartRequestId { get; set; } public long? PurchaseTaxCodeId { get; set; } public string VendorPartNumber { get; set; } + public string Serials { get; set; } [JsonIgnore] public PurchaseOrder PurchaseOrder { get; set; } diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index 88eb5ee4..428a6642 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -22,7 +22,7 @@ namespace AyaNova.Util //!!!!WARNING: BE SURE TO UPDATE THE DbUtil::EmptyBizDataFromDatabaseForSeedingOrImporting WHEN NEW TABLES ADDED!!!! private const int DESIRED_SCHEMA_LEVEL = 15; - internal const long EXPECTED_COLUMN_COUNT = 735; + internal const long EXPECTED_COLUMN_COUNT = 736; internal const long EXPECTED_INDEX_COUNT = 125; internal const long EXPECTED_CHECK_CONSTRAINTS = 328; internal const long EXPECTED_FOREIGN_KEY_CONSTRAINTS = 70; @@ -744,7 +744,7 @@ $BODY$ LANGUAGE PLPGSQL STABLE"); await ExecQueryAsync("CREATE TABLE apurchaseorderitem (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, purchaseorderid BIGINT NOT NULL REFERENCES apurchaseorder ON DELETE CASCADE, " + "partid BIGINT NOT NULL REFERENCES apart, partwarehouseid BIGINT NOT NULL REFERENCES apartwarehouse, quantityordered DECIMAL(19,4) NOT NULL default 0, " + "quantityreceived DECIMAL(19,4) NOT NULL default 0, purchaseordercost DECIMAL(19,4) NOT NULL default 0, receivedcost DECIMAL(19,4) NOT NULL default 0, " + - "receiveddate TIMESTAMP, partrequestedbyid BIGINT REFERENCES auser, purchasetaxcodeid BIGINT REFERENCES ataxcode, vendorpartnumber TEXT " + + "receiveddate TIMESTAMP, partrequestedbyid BIGINT REFERENCES auser, purchasetaxcodeid BIGINT REFERENCES ataxcode, vendorpartnumber TEXT, serials TEXT " + ")"); diff --git a/server/AyaNova/util/Seeder.cs b/server/AyaNova/util/Seeder.cs index 9e3e7b53..c66ae6a2 100644 --- a/server/AyaNova/util/Seeder.cs +++ b/server/AyaNova/util/Seeder.cs @@ -1742,6 +1742,9 @@ namespace AyaNova.Util List partsAdded = new List(); int partCount = Fake.Random.Int(1, 5); + + + //simulate some items without tax codes bool addTaxCode = (Fake.Random.Number(1, 4) != 3); @@ -1761,6 +1764,19 @@ namespace AyaNova.Util var qty = Fake.Random.Int(1, 100); var cost = Fake.Random.Decimal(1, 25); + // 50% chance it has received serial numbers + string serials = string.Empty; + if (isReceived && Fake.Random.Number() == 1) + { + var serialStart = Fake.Finance.Account().ToString(); + for (int si = 0; si < qty; si++) + { + serials += serialStart + si.ToString() + ", "; + + } + serials = serials.TrimEnd().TrimEnd(','); + } + o.Items.Add(new PurchaseOrderItem() { PartId = partId, @@ -1770,7 +1786,8 @@ namespace AyaNova.Util PurchaseOrderCost = cost, ReceivedCost = isReceived ? cost : 0, ReceivedDate = isReceived ? o.ExpectedReceiveDate : null, - PurchaseTaxCodeId = addTaxCode ? 3 : null//sales and goods + PurchaseTaxCodeId = addTaxCode ? 3 : null,//sales and goods + Serials = serials }); }