diff --git a/.vscode/launch.json b/.vscode/launch.json index d0cceaa8..f18b4927 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -48,7 +48,7 @@ "AYANOVA_DATA_PATH": "c:\\temp\\ravendata", "AYANOVA_USE_URLS": "http://*:7575;", //"AYANOVA_PERMANENTLY_ERASE_DATABASE":"true", - "AYANOVA_SERVER_TEST_MODE": "false", + "AYANOVA_SERVER_TEST_MODE": "true", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-8", //"AYANOVA_REPORT_RENDERING_TIMEOUT":"1", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", diff --git a/server/AyaNova/kpi/KPIFactory.cs b/server/AyaNova/kpi/KPIFactory.cs index 5f7874c9..ee4a1cb2 100644 --- a/server/AyaNova/kpi/KPIFactory.cs +++ b/server/AyaNova/kpi/KPIFactory.cs @@ -23,6 +23,8 @@ namespace AyaNova.KPI return new WorkOrderOverduePersonalList() as IAyaKPI; case "WorkOrderOverdueAllList": return new WorkOrderOverdueAllList() as IAyaKPI; + case "WorkOrderByStatusList": + return new WorkOrderByStatusList() as IAyaKPI; case "WorkOrderCreatedCount": return new WorkOrderCreatedCount() as IAyaKPI; case "WorkOrderStatusCount": @@ -31,7 +33,6 @@ namespace AyaNova.KPI return new WorkOrderStatusPct() as IAyaKPI; case "WorkOrderCompletedOnTimePct": return new WorkOrderCompletedOnTimePct() as IAyaKPI; - default: throw new System.NotImplementedException($"KPI {name} NOT IMPLEMENTED"); diff --git a/server/AyaNova/kpi/WorkOrderByStatusList.cs b/server/AyaNova/kpi/WorkOrderByStatusList.cs new file mode 100644 index 00000000..db747967 --- /dev/null +++ b/server/AyaNova/kpi/WorkOrderByStatusList.cs @@ -0,0 +1,71 @@ +using AyaNova.Biz; +using AyaNova.DataList; +using System.Collections.Generic; + +namespace AyaNova.KPI +{ + internal class WorkOrderByStatusList : IAyaKPI + { + private string _metaQuery = null; + private string _dataQuery = null; + private string _errorMessage = null; + + public AuthorizationRoles AllowedRoles + { + get => + AuthorizationRoles.BizAdmin + | AuthorizationRoles.BizAdminRestricted + | AuthorizationRoles.ServiceRestricted + | AuthorizationRoles.Service + | AuthorizationRoles.Accounting + | AuthorizationRoles.Tech + | AuthorizationRoles.TechRestricted; + } + + public string MetaQuery => _metaQuery; + public string DataQuery => _dataQuery; + public string ErrorMessage => _errorMessage; + + public void BuildQuery(KPIRequestOptions options, long userId) + { + if (!options.Criteria.ContainsKey("wostatus")) + { + _errorMessage = "Missing 'wostatus' criteria"; + return; + } + var wostatus = (int?)options.Criteria["wostatus"]; + string statusWhere = string.Empty; + if (wostatus != null) + { + statusWhere = $"AND LASTSTATUSID = {wostatus}"; + } + + var wotags = options.Criteria["wotags"].ToObject>(); + bool wotagsany = options.Criteria["wotagsany"].ToObject(); + var woitemtags = options.Criteria["woitemtags"].ToObject>(); + bool woitemtagsany = options.Criteria["woitemtagsany"].ToObject(); + string woTagsWhere = DataListSqlFilterCriteriaBuilder.KPITagFilterToSqlCriteria("aworkorder.tags", wotags, wotagsany); + string woItemTagsWhere = DataListSqlFilterCriteriaBuilder.KPITagFilterToSqlCriteria("aworkorderitem.tags", woitemtags, woitemtagsany); ; + + _dataQuery = @$"SELECT row_to_json(t) as res from ( + SELECT distinct(AWORKORDER.ID), AWORKORDER.SERIAL, + AWORKORDER.SERVICEDATE, + ACUSTOMER.NAME, + AWORKORDER.NOTES + FROM AWORKORDER + LEFT JOIN AWORKORDERITEM ON AWORKORDER.ID = AWORKORDERITEM.WORKORDERID + LEFT JOIN AWORKORDERITEMSCHEDULEDUSER ON AWORKORDERITEM.ID = AWORKORDERITEMSCHEDULEDUSER.WORKORDERITEMID + LEFT JOIN AWORKORDERSTATUS ON (AWORKORDER.LASTSTATUSID = AWORKORDERSTATUS.ID) + LEFT JOIN ACUSTOMER ON (AWORKORDER.CUSTOMERID = ACUSTOMER.ID) + WHERE {statusWhere} {woTagsWhere} {woItemTagsWhere} + ORDER BY AWORKORDER.ID ASC + ) t"; + _metaQuery = string.Empty; + // @"SELECT row_to_json(t) as res from ( + // select name from auser where id = 10 + // ) t"; + } + + + }//eoc +}//eons \ No newline at end of file diff --git a/server/AyaNova/resource/de.json b/server/AyaNova/resource/de.json index 366863fe..b3f4eca0 100644 --- a/server/AyaNova/resource/de.json +++ b/server/AyaNova/resource/de.json @@ -234,7 +234,8 @@ "DashboardServiceRateQuantityAllUsers":"Servicemenge - alle", "DashboardOpenCSR":"Offene Serviceanfragen", "DashboardCountWorkOrdersCreated": "Anzahl der erstellten Arbeitsaufträge", - "DashboardPctWorkOrderCompletedOnTime": "% Arbeitsaufträge pünktlich abgeschlossen", + "DashboardPctWorkOrderCompletedOnTime": "% Arbeitsaufträge pünktlich abgeschlossen", + "DashboardWorkOrderByStatusList":"Liste der Arbeitsaufträge nach Status", "DashboardWorkOrderStatusCount":"Anzahl der Arbeitsaufträge nach Status", "DashboardWorkOrderStatusPct":"% der Arbeitsaufträge nach Status", "Database": "Datenbank", diff --git a/server/AyaNova/resource/en.json b/server/AyaNova/resource/en.json index 5f987287..738f981a 100644 --- a/server/AyaNova/resource/en.json +++ b/server/AyaNova/resource/en.json @@ -234,7 +234,8 @@ "DashboardServiceRateQuantityAllUsers": "Service quantity - all", "DashboardOpenCSR": "Open service requests", "DashboardCountWorkOrdersCreated": "Count of Work orders created", - "DashboardPctWorkOrderCompletedOnTime": "% Work orders completed on time", + "DashboardPctWorkOrderCompletedOnTime": "% Work orders completed on time", + "DashboardWorkOrderByStatusList":"List of work orders by status", "DashboardWorkOrderStatusCount":"Count of work orders by status", "DashboardWorkOrderStatusPct":"% of work orders by status", "Database": "Database", diff --git a/server/AyaNova/resource/es.json b/server/AyaNova/resource/es.json index ca194b00..a2d3f973 100644 --- a/server/AyaNova/resource/es.json +++ b/server/AyaNova/resource/es.json @@ -234,7 +234,8 @@ "DashboardServiceRateQuantityAllUsers":"Cantidad de servicio - todo", "DashboardOpenCSR":"Solicitudes de servicio abiertas", "DashboardCountWorkOrdersCreated": "Recuento de órdenes de trabajo creadas", - "DashboardPctWorkOrderCompletedOnTime": "% de órdenes de trabajo completadas a tiempo", + "DashboardPctWorkOrderCompletedOnTime": "% de órdenes de trabajo completadas a tiempo", + "DashboardWorkOrderByStatusList":"Lista de órdenes de trabajo por estado", "DashboardWorkOrderStatusCount":"Recuento de órdenes de trabajo por estado", "DashboardWorkOrderStatusPct":"% de órdenes de trabajo por estado", "Database": "Base de datos", diff --git a/server/AyaNova/resource/fr.json b/server/AyaNova/resource/fr.json index 7ce866bf..e126e966 100644 --- a/server/AyaNova/resource/fr.json +++ b/server/AyaNova/resource/fr.json @@ -234,7 +234,8 @@ "DashboardServiceRateQuantityAllUsers":"Quantité de service - tout", "DashboardOpenCSR":"Demandes de service - ouvertes", "DashboardCountWorkOrdersCreated": "Nombre de bons de travail créés", - "DashboardPctWorkOrderCompletedOnTime": "% des ordres de travail terminés à temps", + "DashboardPctWorkOrderCompletedOnTime": "% des ordres de travail terminés à temps", + "DashboardWorkOrderByStatusList":"Liste des bons de travail par statut", "DashboardWorkOrderStatusCount":"Nombre d'ordres de travail par statut", "DashboardWorkOrderStatusPct":"% des bons de travail par statut", "Database": "Base de données",