This commit is contained in:
2021-05-24 20:04:32 +00:00
parent 74c67e90fa
commit 2dc7af5823
10 changed files with 106 additions and 10 deletions

2
.vscode/launch.json vendored
View File

@@ -53,7 +53,7 @@
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles",
"AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", "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_SEEDLEVEL": "small",
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7",
"AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\" "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\"

View File

@@ -898,6 +898,7 @@ namespace AyaNova.Biz
l.Add(new FormField { TKey = "WorkOrderItemExpenseList", FieldKey = "WorkOrderItemExpenseList", TKeySection = "WorkOrderItem", Requireable = false }); 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 = "WorkOrderItemLaborList", FieldKey = "WorkOrderItemLaborList", TKeySection = "WorkOrderItem", Requireable = false });
l.Add(new FormField { TKey = "WorkOrderItemTravelList", FieldKey = "WorkOrderItemTravelList", 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 //WORKORDER ITEM SCHEDULED USER
l.Add(new FormField { TKey = "WorkOrderItemScheduledUserEstimatedQuantity", FieldKey = "WorkOrderItemScheduledUserEstimatedQuantity", TKeySection = "WorkOrderItemScheduledUser" }); 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" }); 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); _formFields.Add(AyaType.WorkOrder.ToString(), l);
} }

View File

@@ -729,6 +729,8 @@ namespace AyaNova.Biz
// //
public async Task<JArray> GetReportData(long[] idList) public async Task<JArray> GetReportData(long[] idList)
{ {
JArray ReportData = new JArray(); JArray ReportData = new JArray();
while (idList.Any()) while (idList.Any())
{ {
@@ -741,6 +743,13 @@ namespace AyaNova.Biz
//order the results back into original //order the results back into original
var orderedList = from id in batch join z in batchResults on id equals z.Id select z; 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<NameIdItem> taskCompletionTypeEnumList = null)
foreach (WorkOrder w in orderedList) foreach (WorkOrder w in orderedList)
{ {
//populate entire workorder graph //populate entire workorder graph
@@ -3983,11 +3992,19 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//VIZ POPULATE //VIZ POPULATE
// //
private async Task TaskPopulateVizFields(WorkOrderItemTask o) private async Task TaskPopulateVizFields(WorkOrderItemTask o, List<NameIdItem> taskCompletionTypeEnumList = null)
{ {
await Task.CompletedTask; if (o.CompletedByUserId != null)
// if (o.WorkOrderOverseerId != null) o.CompletedByUserViz = await ct.User.AsNoTracking().Where(x => x.Id == o.CompletedByUserId).Select(x => x.Name).FirstOrDefaultAsync();
// o.WorkOrderOverseerViz = await ct.User.AsNoTracking().Where(x => x.Id == o.WorkOrderOverseerId).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();
} }
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -12,12 +12,18 @@ namespace AyaNova.Models
public long Id { get; set; } public long Id { get; set; }
public uint Concurrency { 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] [Required]
public string Task { get; set; } public string Task { get; set; }
[Required] [Required]
public WorkorderItemTaskCompletionType Status { get; set; } = WorkorderItemTaskCompletionType.Incomplete; public WorkorderItemTaskCompletionType Status { get; set; } = WorkorderItemTaskCompletionType.Incomplete;
[NotMapped]
public string StatusViz { get; set; }
public long? CompletedByUserId { get; set; } public long? CompletedByUserId { get; set; }
[NotMapped]
public string CompletedByUserViz { get; set; }
public DateTime? CompletedDate { get; set; } public DateTime? CompletedDate { get; set; }
//UTILITY FIELDS //UTILITY FIELDS

View File

@@ -1566,6 +1566,8 @@
"WorkOrderItemTaskObject": "Arbeitsauftragsposten - Aufgabe", "WorkOrderItemTaskObject": "Arbeitsauftragsposten - Aufgabe",
"WorkOrderItemTaskTaskID": "Aufgabe", "WorkOrderItemTaskTaskID": "Aufgabe",
"WorkOrderItemTaskWorkOrderItemTaskCompletionType": "Status", "WorkOrderItemTaskWorkOrderItemTaskCompletionType": "Status",
"WorkOrderItemTaskUser":"Benutzer",
"WorkOrderItemTaskCompletedDate":"Fertigstellungstermin",
"WorkOrderItemTravelDistance": "Distanz", "WorkOrderItemTravelDistance": "Distanz",
"WorkOrderItemTravelList": "Reiseposten", "WorkOrderItemTravelList": "Reiseposten",
"WorkOrderItemTravelNoChargeQuantity": "Ohne Gebühren - Menge", "WorkOrderItemTravelNoChargeQuantity": "Ohne Gebühren - Menge",

View File

@@ -1566,6 +1566,8 @@
"WorkOrderItemTaskObject": "WorkOrder item task", "WorkOrderItemTaskObject": "WorkOrder item task",
"WorkOrderItemTaskTaskID": "Task", "WorkOrderItemTaskTaskID": "Task",
"WorkOrderItemTaskWorkOrderItemTaskCompletionType": "Status", "WorkOrderItemTaskWorkOrderItemTaskCompletionType": "Status",
"WorkOrderItemTaskUser":"User",
"WorkOrderItemTaskCompletedDate":"Completed",
"WorkOrderItemTravelDistance": "Distance", "WorkOrderItemTravelDistance": "Distance",
"WorkOrderItemTravelList": "Travels", "WorkOrderItemTravelList": "Travels",
"WorkOrderItemTravelNoChargeQuantity": "No Charge Quantity", "WorkOrderItemTravelNoChargeQuantity": "No Charge Quantity",

View File

@@ -1566,6 +1566,8 @@
"WorkOrderItemTaskObject": "Tarea elemento de pedido", "WorkOrderItemTaskObject": "Tarea elemento de pedido",
"WorkOrderItemTaskTaskID": "Tarea", "WorkOrderItemTaskTaskID": "Tarea",
"WorkOrderItemTaskWorkOrderItemTaskCompletionType": "Estado", "WorkOrderItemTaskWorkOrderItemTaskCompletionType": "Estado",
"WorkOrderItemTaskUser":"Usuario",
"WorkOrderItemTaskCompletedDate":"Fecha completada",
"WorkOrderItemTravelDistance": "Distancia", "WorkOrderItemTravelDistance": "Distancia",
"WorkOrderItemTravelList": "Elementos desplazamiento", "WorkOrderItemTravelList": "Elementos desplazamiento",
"WorkOrderItemTravelNoChargeQuantity": "Cantidad sin cargo", "WorkOrderItemTravelNoChargeQuantity": "Cantidad sin cargo",

View File

@@ -1566,6 +1566,8 @@
"WorkOrderItemTaskObject": "Tâche d'élément de bon de travail", "WorkOrderItemTaskObject": "Tâche d'élément de bon de travail",
"WorkOrderItemTaskTaskID": "Tâche", "WorkOrderItemTaskTaskID": "Tâche",
"WorkOrderItemTaskWorkOrderItemTaskCompletionType": "État", "WorkOrderItemTaskWorkOrderItemTaskCompletionType": "État",
"WorkOrderItemTaskUser":"Utilisateur",
"WorkOrderItemTaskCompletedDate":"Date de fin",
"WorkOrderItemTravelDistance": "Distance", "WorkOrderItemTravelDistance": "Distance",
"WorkOrderItemTravelList": "Éléments de déplacement", "WorkOrderItemTravelList": "Éléments de déplacement",
"WorkOrderItemTravelNoChargeQuantity": "Quantité non facturée", "WorkOrderItemTravelNoChargeQuantity": "Quantité non facturée",

View File

@@ -816,7 +816,7 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
//WORKORDERITEM TASK //WORKORDERITEM TASK
await ExecQueryAsync("CREATE TABLE aworkorderitemtask (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, workorderitemid BIGINT NOT NULL REFERENCES aworkorderitem (id), " 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 //WORKORDERITEM TRAVEL

View File

@@ -2525,9 +2525,10 @@ namespace AyaNova.Util
//LABOR //LABOR
var techId = RandomServiceTechUserId();
var woItemLabor = new WorkOrderItemLabor() var woItemLabor = new WorkOrderItemLabor()
{ {
UserId = RandomServiceTechUserId(), UserId = techId,
ServiceRateQuantity = 1, ServiceRateQuantity = 1,
ServiceStartDate = woDate, ServiceStartDate = woDate,
ServiceStopDate = woDate.AddHours(1), ServiceStopDate = woDate.AddHours(1),
@@ -2552,7 +2553,7 @@ namespace AyaNova.Util
//TRAVEL //TRAVEL
var woItemTravel = new WorkOrderItemTravel() var woItemTravel = new WorkOrderItemTravel()
{ {
UserId = RandomServiceTechUserId(), UserId = techId,
TravelRateQuantity = 1, TravelRateQuantity = 1,
TravelStartDate = woDate, TravelStartDate = woDate,
TravelStopDate = woDate.AddHours(1), TravelStopDate = woDate.AddHours(1),
@@ -2574,6 +2575,60 @@ namespace AyaNova.Util
}; };
woItem.Travels.Add(woItemTravel); 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 //EXPENSES
var cost = Fake.Random.Decimal(1, 10); var cost = Fake.Random.Decimal(1, 10);