From fc0d1bd7e1f37b551622bb18c3a5d825984b6113 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 28 Feb 2022 20:30:31 +0000 Subject: [PATCH] --- server/AyaNova/DataList/DataListFetcher.cs | 2 +- server/AyaNova/kpi/KPIFactory.cs | 7 +- server/AyaNova/kpi/KPIFetcher.cs | 2 +- .../kpi/WorkOrderUnscheduledOpenList.cs | 74 +++++++++++++++++++ server/AyaNova/resource/de.json | 1 + server/AyaNova/resource/en.json | 1 + server/AyaNova/resource/es.json | 1 + server/AyaNova/resource/fr.json | 1 + 8 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 server/AyaNova/kpi/WorkOrderUnscheduledOpenList.cs diff --git a/server/AyaNova/DataList/DataListFetcher.cs b/server/AyaNova/DataList/DataListFetcher.cs index 831aaa3d..9972a5b4 100644 --- a/server/AyaNova/DataList/DataListFetcher.cs +++ b/server/AyaNova/DataList/DataListFetcher.cs @@ -1,4 +1,4 @@ -//#define AYSHOWQUERYINFO +#define AYSHOWQUERYINFO using System.Collections.Generic; using System.Linq; diff --git a/server/AyaNova/kpi/KPIFactory.cs b/server/AyaNova/kpi/KPIFactory.cs index d0dfbcad..00ea5f7e 100644 --- a/server/AyaNova/kpi/KPIFactory.cs +++ b/server/AyaNova/kpi/KPIFactory.cs @@ -13,11 +13,11 @@ namespace AyaNova.KPI { switch (name) { - //CoreBizObject add here if it will be "picked" on any other form + case "WorkOrderItemLaborQuantitySummary": return new WorkOrderItemLaborQuantitySummary() as IAyaKPI; - - //@##### WARNING: BE SURE TO ADD NEW TYPES BELOW OR USERS WON"T BE ABLE TO EDIT THE TEMPLATE FOR THEM + case "WorkOrderUnscheduledOpenList": + return new WorkOrderUnscheduledOpenList() as IAyaKPI; default: throw new System.NotImplementedException($"KPI {name} NOT IMPLEMENTED"); @@ -32,6 +32,7 @@ namespace AyaNova.KPI List ret = new List(); ret.Add("WorkOrderItemLaborQuantitySummary"); + ret.Add("WorkOrderUnscheduledOpenList"); return ret; } diff --git a/server/AyaNova/kpi/KPIFetcher.cs b/server/AyaNova/kpi/KPIFetcher.cs index f9680119..417db899 100644 --- a/server/AyaNova/kpi/KPIFetcher.cs +++ b/server/AyaNova/kpi/KPIFetcher.cs @@ -1,4 +1,4 @@ -//#define AYSHOWKPIQUERYINFO +#define AYSHOWKPIQUERYINFO using System.Collections.Generic; using System.Linq; diff --git a/server/AyaNova/kpi/WorkOrderUnscheduledOpenList.cs b/server/AyaNova/kpi/WorkOrderUnscheduledOpenList.cs new file mode 100644 index 00000000..c0570a64 --- /dev/null +++ b/server/AyaNova/kpi/WorkOrderUnscheduledOpenList.cs @@ -0,0 +1,74 @@ +using AyaNova.Biz; +using Newtonsoft.Json.Linq; +using AyaNova.DataList; +using System.Collections.Generic; + +namespace AyaNova.KPI +{ + internal class WorkOrderUnscheduledOpenList : IAyaKPI + { + private string _metaQuery = null; + private string _dataQuery = null; + private string _errorMessage = null; + + public AuthorizationRoles AllowedRoles { get => AuthorizationRoles.Tech | AuthorizationRoles.TechRestricted; } + + public string MetaQuery => _metaQuery; + public string DataQuery => _dataQuery; + public string ErrorMessage => _errorMessage; + + public void BuildQuery(KPIRequestOptions options, long userId) + { + //build data and meta queries + + //validate criteria exists + if (!options.Criteria.ContainsKey("timeSpan")) + { + _errorMessage = "Missing 'timeSpan' criteria"; + return; + } + + if (!options.Criteria.ContainsKey("interval")) + { + _errorMessage = "Missing 'interval' criteria"; + return; + } + + var timeSpan = (string)options.Criteria["timeSpan"]; + var interval = (string)options.Criteria["interval"]; + + var wotags = options.Criteria["wotags"].ToObject>(); + var woitemtags = options.Criteria["woitemtags"].ToObject>(); + + var dateWhere = DataListSqlFilterCriteriaBuilder.DataFilterToColumnCriteria("aworkorderitemlabor.servicestopdate", UiFieldDataType.DateTime, "no-operator", timeSpan, options.ClientTimeStamp); + + //optional tags + string woTagsWhere = null; + if (wotags.Count > 0) + woTagsWhere = " AND " + DataListSqlFilterCriteriaBuilder.TagDataFilterToColumnCriteria("aworkorder.tags", DataListFilterComparisonOperator.Contains, string.Join(",", wotags)); + + + string woItemTagsWhere = null; + if (woitemtags.Count > 0) + woItemTagsWhere = " AND " + DataListSqlFilterCriteriaBuilder.TagDataFilterToColumnCriteria("aworkorderitem.tags", DataListFilterComparisonOperator.Contains, string.Join(",", woitemtags)); + + + + _dataQuery = @$"SELECT row_to_json(t) as res from ( + select SUM(AWORKORDERITEMLABOR.serviceratequantity) y, date_trunc('{interval}',AWORKORDERITEMLABOR.servicestopdate) x + FROM AWORKORDER + LEFT JOIN AWORKORDERITEM ON AWORKORDER.ID = AWORKORDERITEM.WORKORDERID + LEFT JOIN AWORKORDERITEMLABOR ON AWORKORDERITEM.ID = AWORKORDERITEMLABOR.WORKORDERITEMID + WHERE AWORKORDERITEMLABOR.userid = {userId} AND {dateWhere} {woTagsWhere} {woItemTagsWhere} + GROUP BY x + ORDER BY x 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 f6b3b5be..8dbbccb8 100644 --- a/server/AyaNova/resource/de.json +++ b/server/AyaNova/resource/de.json @@ -226,6 +226,7 @@ "DarkMode": "Dunkler Modus", "Dashboard": "Dashboard", "DashboardNotAssigned": "Not assigned", + "DashboardNotScheduled": "Außerplanmäßig", "DashboardOverdue": "Overdue", "DashboardReminders": "Reminders", "DashboardScheduled": "Scheduled", diff --git a/server/AyaNova/resource/en.json b/server/AyaNova/resource/en.json index 51f4a63e..b6f963ff 100644 --- a/server/AyaNova/resource/en.json +++ b/server/AyaNova/resource/en.json @@ -226,6 +226,7 @@ "DarkMode": "Dark mode", "Dashboard": "Dashboard", "DashboardNotAssigned": "Not assigned", + "DashboardNotScheduled": "Not scheduled", "DashboardOverdue": "Overdue", "DashboardReminders": "Reminders", "DashboardScheduled": "Scheduled", diff --git a/server/AyaNova/resource/es.json b/server/AyaNova/resource/es.json index 621a9ed8..02a352ce 100644 --- a/server/AyaNova/resource/es.json +++ b/server/AyaNova/resource/es.json @@ -226,6 +226,7 @@ "DarkMode": "Modo oscuro", "Dashboard": "Panel", "DashboardNotAssigned": "Not assigned", + "DashboardNotScheduled": "No programado", "DashboardOverdue": "Overdue", "DashboardReminders": "Reminders", "DashboardScheduled": "Scheduled", diff --git a/server/AyaNova/resource/fr.json b/server/AyaNova/resource/fr.json index cce571ba..0e2f403e 100644 --- a/server/AyaNova/resource/fr.json +++ b/server/AyaNova/resource/fr.json @@ -226,6 +226,7 @@ "DarkMode": "Mode Sombre", "Dashboard": "Tableau de bord", "DashboardNotAssigned": "Not assigned", + "DashboardNotScheduled": "Non planifié", "DashboardOverdue": "Overdue", "DashboardReminders": "Reminders", "DashboardScheduled": "Scheduled",