From 476b90053bde7f8e9406b3f91424d5c4387a9156 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 17 Jun 2021 18:22:36 +0000 Subject: [PATCH] --- server/AyaNova/DataList/WorkOrderDataList.cs | 12 ++++++++++++ server/AyaNova/biz/WorkOrderBiz.cs | 3 +++ server/AyaNova/models/WorkOrder.cs | 4 ++++ server/AyaNova/util/AySchema.cs | 8 ++++---- server/AyaNova/util/Seeder.cs | 1 + 5 files changed, 24 insertions(+), 4 deletions(-) diff --git a/server/AyaNova/DataList/WorkOrderDataList.cs b/server/AyaNova/DataList/WorkOrderDataList.cs index b8c0b25d..e7a04639 100644 --- a/server/AyaNova/DataList/WorkOrderDataList.cs +++ b/server/AyaNova/DataList/WorkOrderDataList.cs @@ -8,6 +8,8 @@ namespace AyaNova.DataList { DefaultListAType = AyaType.WorkOrder; SQLFrom = "from aworkorder " + // + "left join lateral (select id, workorderstatusid, workorderid from aworkorderstate st where workorderid = aworkorder.id order by st.id DESC limit 1) st on aworkorder.id=st.workorderid " + + "left join aworkorderstatus on (aworkorder.laststatusid = aworkorderstatus.id) " + "left join acustomer on (aworkorder.customerid=acustomer.id) " + "left join aheadoffice on (acustomer.headofficeid=aheadoffice.id) " + "left join aproject on (aworkorder.projectid=aproject.id) " @@ -49,6 +51,16 @@ namespace AyaNova.DataList SqlValueColumnName = "aheadoffice.name" }); + FieldDefinitions.Add(new DataListFieldDefinition + { + TKey = "WorkOrderStatus", + FieldKey = "WorkOrderStatus", + UiFieldDataType = (int)UiFieldDataType.Text, + AType = (int)AyaType.WorkOrderStatus, + SqlIdColumnName = "aworkorder.laststatusid", + SqlValueColumnName = "aworkorderstatus.name" + }); + FieldDefinitions.Add(new DataListFieldDefinition { TKey = "WorkOrderSummary", diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index c996eb7a..422c5c18 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -1309,6 +1309,9 @@ namespace AyaNova.Biz else { await ct.WorkOrderState.AddAsync(newObject); + var wo=await ct.WorkOrder.FirstOrDefaultAsync(x=>x.Id==newObject.WorkOrderId); + wo.LastStatusId=newObject.WorkOrderStatusId; + await ct.SaveChangesAsync(); await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, AyaType.WorkOrderStatus, AyaEvent.Created), ct); await StateHandlePotentialNotificationEvent(AyaEvent.Created, newObject); diff --git a/server/AyaNova/models/WorkOrder.cs b/server/AyaNova/models/WorkOrder.cs index 899271d4..c3dce6c2 100644 --- a/server/AyaNova/models/WorkOrder.cs +++ b/server/AyaNova/models/WorkOrder.cs @@ -56,6 +56,10 @@ namespace AyaNova.Models [NotMapped] public string ContractViz { get; set; } + //redundant field to speed up list queries + //(added after status system already coded) + public long? LastStatusId { get; set; } + //POSTAL ADDRESS / "BILLING ADDRESS" public string PostAddress { get; set; } diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index 9f0a897b..287504be 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -22,16 +22,16 @@ namespace AyaNova.Util //!!!!WARNING: BE SURE TO UPDATE THE DbUtil::EmptyBizDataFromDatabaseForSeedingOrImporting WHEN NEW TABLES ADDED!!!! private const int DESIRED_SCHEMA_LEVEL = 1; - internal const long EXPECTED_COLUMN_COUNT = 956; + internal const long EXPECTED_COLUMN_COUNT = 957; internal const long EXPECTED_INDEX_COUNT = 137; internal const long EXPECTED_CHECK_CONSTRAINTS = 415; - internal const long EXPECTED_FOREIGN_KEY_CONSTRAINTS = 117; + internal const long EXPECTED_FOREIGN_KEY_CONSTRAINTS = 118; internal const long EXPECTED_VIEWS = 6; internal const long EXPECTED_ROUTINES = 2; //!!!!WARNING: BE SURE TO UPDATE THE DbUtil::EmptyBizDataFromDatabaseForSeedingOrImporting WHEN NEW TABLES ADDED!!!! - ///////////////////////////////////////////////////////////////// C957:I137:CC415:FC117:V6:R2 C957:I137:CC415:FC117:V6:R2 + ///////////////////////////////////////////////////////////////// C957:I137:CC415:FC118:V6:R2 /* @@ -772,7 +772,7 @@ $BODY$ LANGUAGE PLPGSQL STABLE"); //WORKORDER await ExecQueryAsync("CREATE TABLE aworkorder (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, serial BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, " + "notes TEXT, wiki TEXT, customfields TEXT, tags VARCHAR(255) ARRAY, customerid BIGINT NOT NULL REFERENCES acustomer (id), " - + "projectid BIGINT REFERENCES aproject, contractid BIGINT NULL, internalreferencenumber text, customerreferencenumber text, customercontactname text, " + + "projectid BIGINT REFERENCES aproject, laststatusid BIGINT REFERENCES aworkorderstatus(id), contractid BIGINT NULL, internalreferencenumber text, customerreferencenumber text, customercontactname text, " + "servicedate TIMESTAMP, completebydate TIMESTAMP, invoicenumber TEXT, customersignature TEXT, customersignaturename TEXT, customersignaturecaptured TIMESTAMP, " + "techsignature TEXT, techsignaturename TEXT, techsignaturecaptured TIMESTAMP, durationtocompleted INTERVAL NOT NULL, onsite BOOL NOT NULL, " + "postaddress TEXT, postcity TEXT, postregion TEXT, postcountry TEXT, postcode TEXT, address TEXT, city TEXT, region TEXT, country TEXT, latitude DECIMAL(9,6), longitude DECIMAL(9,6) " diff --git a/server/AyaNova/util/Seeder.cs b/server/AyaNova/util/Seeder.cs index 13d2c9d9..b07b716d 100644 --- a/server/AyaNova/util/Seeder.cs +++ b/server/AyaNova/util/Seeder.cs @@ -2888,6 +2888,7 @@ namespace AyaNova.Util Created = ((DateTime)o.ServiceDate).AddHours(2) }; o.States.Add(WoState); + o.LastStatusId=WoState.WorkOrderStatusId;//simulate if user added state to wo so it gets set }