From 2dc7af5823cf0105503314cad9f0cb872208606e Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 24 May 2021 20:04:32 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- server/AyaNova/biz/FormFieldReference.cs | 10 ++++ server/AyaNova/biz/WorkOrderBiz.cs | 27 ++++++++-- server/AyaNova/models/WorkOrderItemTask.cs | 8 ++- server/AyaNova/resource/de.json | 2 + server/AyaNova/resource/en.json | 2 + server/AyaNova/resource/es.json | 2 + server/AyaNova/resource/fr.json | 2 + server/AyaNova/util/AySchema.cs | 2 +- server/AyaNova/util/Seeder.cs | 59 +++++++++++++++++++++- 10 files changed, 106 insertions(+), 10 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/FormFieldReference.cs b/server/AyaNova/biz/FormFieldReference.cs index 3260b1f1..5c52da93 100644 --- a/server/AyaNova/biz/FormFieldReference.cs +++ b/server/AyaNova/biz/FormFieldReference.cs @@ -898,6 +898,7 @@ namespace AyaNova.Biz l.Add(new FormField { TKey = "WorkOrderItemExpenseList", FieldKey = "WorkOrderItemExpenseList", TKeySection = "WorkOrderItem", Requireable = false }); l.Add(new FormField { TKey = "WorkOrderItemLaborList", FieldKey = "WorkOrderItemLaborList", TKeySection = "WorkOrderItem", Requireable = false }); l.Add(new FormField { TKey = "WorkOrderItemTravelList", FieldKey = "WorkOrderItemTravelList", TKeySection = "WorkOrderItem", Requireable = false }); + l.Add(new FormField { TKey = "WorkOrderItemTaskList", FieldKey = "WorkOrderItemTaskList", TKeySection = "WorkOrderItem", Requireable = false }); //WORKORDER ITEM SCHEDULED USER l.Add(new FormField { TKey = "WorkOrderItemScheduledUserEstimatedQuantity", FieldKey = "WorkOrderItemScheduledUserEstimatedQuantity", TKeySection = "WorkOrderItemScheduledUser" }); @@ -959,6 +960,15 @@ namespace AyaNova.Biz l.Add(new FormField { TKey = "LineTotal", FieldKey = "TravelLineTotalViz", TKeySection = "WorkOrderItemTravels" }); + //WORKORDER ITEM TASKS + l.Add(new FormField { TKey = "Sequence", FieldKey = "WorkOrderItemTaskSequence", TKeySection = "WorkOrderItemTask" }); + l.Add(new FormField { TKey = "WorkOrderItemTaskTaskID", FieldKey = "WorkOrderItemTaskTaskID", TKeySection = "WorkOrderItemTask" }); + l.Add(new FormField { TKey = "WorkOrderItemTaskWorkOrderItemTaskCompletionType", FieldKey = "WorkOrderItemTaskWorkOrderItemTaskCompletionType", TKeySection = "WorkOrderItemTask" }); + l.Add(new FormField { TKey = "WorkOrderItemTaskUser", FieldKey = "WorkOrderItemTaskUser", TKeySection = "WorkOrderItemTask" }); + l.Add(new FormField { TKey = "WorkOrderItemTaskCompletedDate", FieldKey = "WorkOrderItemTaskCompletedDate", TKeySection = "WorkOrderItemTask" }); + + + _formFields.Add(AyaType.WorkOrder.ToString(), l); } diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 0207b1b2..d8a99f44 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -729,6 +729,8 @@ namespace AyaNova.Biz // public async Task GetReportData(long[] idList) { + + JArray ReportData = new JArray(); while (idList.Any()) { @@ -741,6 +743,13 @@ namespace AyaNova.Biz //order the results back into original var orderedList = from id in batch join z in batchResults on id equals z.Id select z; + + + //TODO: ##HERE## SEE ContractBiz for example implementation; will need to pre-cache some translation keys for enum lists etc, for example: + // private async Task TaskPopulateVizFields(WorkOrderItemTask o, List taskCompletionTypeEnumList = null) + + + foreach (WorkOrder w in orderedList) { //populate entire workorder graph @@ -3983,11 +3992,19 @@ namespace AyaNova.Biz //////////////////////////////////////////////////////////////////////////////////////////////// //VIZ POPULATE // - private async Task TaskPopulateVizFields(WorkOrderItemTask o) + private async Task TaskPopulateVizFields(WorkOrderItemTask o, List taskCompletionTypeEnumList = null) { - await Task.CompletedTask; - // if (o.WorkOrderOverseerId != null) - // o.WorkOrderOverseerViz = await ct.User.AsNoTracking().Where(x => x.Id == o.WorkOrderOverseerId).Select(x => x.Name).FirstOrDefaultAsync(); + if (o.CompletedByUserId != null) + o.CompletedByUserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.CompletedByUserId).Select(x => x.Name).FirstOrDefaultAsync(); + + if (taskCompletionTypeEnumList == null) + taskCompletionTypeEnumList = await AyaNova.Api.Controllers.EnumListController.GetEnumList( + StringUtil.TrimTypeName(typeof(WorkorderItemTaskCompletionType).ToString()), + UserTranslationId, + CurrentUserRoles); + + o.StatusViz = taskCompletionTypeEnumList.Where(x => x.Id == (long)o.Status).Select(x => x.Name).First(); + } //////////////////////////////////////////////////////////////////////////////////////////////// @@ -4256,7 +4273,7 @@ namespace AyaNova.Biz TravelRate Rate = null; if (o.TravelRateId != null) Rate = await ct.TravelRate.AsNoTracking().FirstOrDefaultAsync(x => x.Id == o.TravelRateId); - o.TravelRateViz=Rate.Name; + o.TravelRateViz = Rate.Name; TaxCode Tax = null; if (o.TaxCodeSaleId != null) Tax = await ct.TaxCode.AsNoTracking().FirstOrDefaultAsync(z => z.Id == o.TaxCodeSaleId); diff --git a/server/AyaNova/models/WorkOrderItemTask.cs b/server/AyaNova/models/WorkOrderItemTask.cs index e02d2c2f..86c8ead3 100644 --- a/server/AyaNova/models/WorkOrderItemTask.cs +++ b/server/AyaNova/models/WorkOrderItemTask.cs @@ -12,12 +12,18 @@ namespace AyaNova.Models public long Id { get; set; } public uint Concurrency { get; set; } - public int DisplayOrder { get; set; } = 0; + //public int DisplayOrder { get; set; } = 0; + public int Sequence { get; set; } + [Required] public string Task { get; set; } [Required] public WorkorderItemTaskCompletionType Status { get; set; } = WorkorderItemTaskCompletionType.Incomplete; + [NotMapped] + public string StatusViz { get; set; } public long? CompletedByUserId { get; set; } + [NotMapped] + public string CompletedByUserViz { get; set; } public DateTime? CompletedDate { get; set; } //UTILITY FIELDS diff --git a/server/AyaNova/resource/de.json b/server/AyaNova/resource/de.json index 80d541db..12ce8837 100644 --- a/server/AyaNova/resource/de.json +++ b/server/AyaNova/resource/de.json @@ -1566,6 +1566,8 @@ "WorkOrderItemTaskObject": "Arbeitsauftragsposten - Aufgabe", "WorkOrderItemTaskTaskID": "Aufgabe", "WorkOrderItemTaskWorkOrderItemTaskCompletionType": "Status", + "WorkOrderItemTaskUser":"Benutzer", + "WorkOrderItemTaskCompletedDate":"Fertigstellungstermin", "WorkOrderItemTravelDistance": "Distanz", "WorkOrderItemTravelList": "Reiseposten", "WorkOrderItemTravelNoChargeQuantity": "Ohne Gebühren - Menge", diff --git a/server/AyaNova/resource/en.json b/server/AyaNova/resource/en.json index 883b7e93..d1d6ff91 100644 --- a/server/AyaNova/resource/en.json +++ b/server/AyaNova/resource/en.json @@ -1566,6 +1566,8 @@ "WorkOrderItemTaskObject": "WorkOrder item task", "WorkOrderItemTaskTaskID": "Task", "WorkOrderItemTaskWorkOrderItemTaskCompletionType": "Status", + "WorkOrderItemTaskUser":"User", + "WorkOrderItemTaskCompletedDate":"Completed", "WorkOrderItemTravelDistance": "Distance", "WorkOrderItemTravelList": "Travels", "WorkOrderItemTravelNoChargeQuantity": "No Charge Quantity", diff --git a/server/AyaNova/resource/es.json b/server/AyaNova/resource/es.json index 9c03013a..3a67a82c 100644 --- a/server/AyaNova/resource/es.json +++ b/server/AyaNova/resource/es.json @@ -1566,6 +1566,8 @@ "WorkOrderItemTaskObject": "Tarea elemento de pedido", "WorkOrderItemTaskTaskID": "Tarea", "WorkOrderItemTaskWorkOrderItemTaskCompletionType": "Estado", + "WorkOrderItemTaskUser":"Usuario", + "WorkOrderItemTaskCompletedDate":"Fecha completada", "WorkOrderItemTravelDistance": "Distancia", "WorkOrderItemTravelList": "Elementos desplazamiento", "WorkOrderItemTravelNoChargeQuantity": "Cantidad sin cargo", diff --git a/server/AyaNova/resource/fr.json b/server/AyaNova/resource/fr.json index f9d2edc4..c8dd227f 100644 --- a/server/AyaNova/resource/fr.json +++ b/server/AyaNova/resource/fr.json @@ -1566,6 +1566,8 @@ "WorkOrderItemTaskObject": "Tâche d'élément de bon de travail", "WorkOrderItemTaskTaskID": "Tâche", "WorkOrderItemTaskWorkOrderItemTaskCompletionType": "État", + "WorkOrderItemTaskUser":"Utilisateur", + "WorkOrderItemTaskCompletedDate":"Date de fin", "WorkOrderItemTravelDistance": "Distance", "WorkOrderItemTravelList": "Éléments de déplacement", "WorkOrderItemTravelNoChargeQuantity": "Quantité non facturée", diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index 5b9bf5c8..c96a65c4 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -816,7 +816,7 @@ $BODY$ LANGUAGE PLPGSQL STABLE"); //WORKORDERITEM TASK await ExecQueryAsync("CREATE TABLE aworkorderitemtask (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, workorderitemid BIGINT NOT NULL REFERENCES aworkorderitem (id), " - + "displayorder INTEGER NOT NULL DEFAULT 0, task text NOT NULL, status INTEGER NOT NULL DEFAULT 1, completedbyuserid BIGINT REFERENCES auser, completeddate TIMESTAMP" + + "sequence INTEGER NOT NULL DEFAULT 0, task text NOT NULL, status INTEGER NOT NULL DEFAULT 1, completedbyuserid BIGINT REFERENCES auser, completeddate TIMESTAMP" + ")"); //WORKORDERITEM TRAVEL diff --git a/server/AyaNova/util/Seeder.cs b/server/AyaNova/util/Seeder.cs index 440f8c5a..7f71baf4 100644 --- a/server/AyaNova/util/Seeder.cs +++ b/server/AyaNova/util/Seeder.cs @@ -2525,9 +2525,10 @@ namespace AyaNova.Util //LABOR + var techId = RandomServiceTechUserId(); var woItemLabor = new WorkOrderItemLabor() { - UserId = RandomServiceTechUserId(), + UserId = techId, ServiceRateQuantity = 1, ServiceStartDate = woDate, ServiceStopDate = woDate.AddHours(1), @@ -2552,7 +2553,7 @@ namespace AyaNova.Util //TRAVEL var woItemTravel = new WorkOrderItemTravel() { - UserId = RandomServiceTechUserId(), + UserId = techId, TravelRateQuantity = 1, TravelStartDate = woDate, TravelStopDate = woDate.AddHours(1), @@ -2574,6 +2575,60 @@ namespace AyaNova.Util }; woItem.Travels.Add(woItemTravel); + //TASKS + var woItemTask = new WorkOrderItemTask() + { + CompletedByUserId = techId, + Task = "Dis-assemble", + Sequence = 1, + Status = WorkorderItemTaskCompletionType.Complete, + CompletedDate = woDate.AddHours(1) + }; + woItem.Tasks.Add(woItemTask); + + woItemTask = new WorkOrderItemTask() + { + CompletedByUserId = techId, + Task = "Lubricate", + Sequence = 2, + Status = WorkorderItemTaskCompletionType.NotApplicable, + CompletedDate = woDate.AddHours(1) + }; + woItem.Tasks.Add(woItemTask); + + + woItemTask = new WorkOrderItemTask() + { + CompletedByUserId = techId, + Task = "Repair", + Sequence = 3, + Status = WorkorderItemTaskCompletionType.Complete, + CompletedDate = woDate.AddHours(1.5) + }; + woItem.Tasks.Add(woItemTask); + + woItemTask = new WorkOrderItemTask() + { + CompletedByUserId = techId, + Task = "Re-assemble", + Sequence = 4, + Status = WorkorderItemTaskCompletionType.Complete, + CompletedDate = woDate.AddHours(2) + }; + woItem.Tasks.Add(woItemTask); + + woItemTask = new WorkOrderItemTask() + { + CompletedByUserId = techId, + Task = "Test and confirm repair", + Sequence = 5, + Status = WorkorderItemTaskCompletionType.Complete, + CompletedDate = woDate.AddHours(2) + }; + woItem.Tasks.Add(woItemTask); + + + //EXPENSES var cost = Fake.Random.Decimal(1, 10);