From 0007f22cafa05b2a6bd890f62896a55047cc2b78 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Wed, 2 Mar 2022 17:06:50 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- server/AyaNova/kpi/KPIFactory.cs | 2 + server/AyaNova/kpi/WorkOrderOverdueAllList.cs | 63 +++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 server/AyaNova/kpi/WorkOrderOverdueAllList.cs diff --git a/.vscode/launch.json b/.vscode/launch.json index f18b4927..d0cceaa8 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": "true", + "AYANOVA_SERVER_TEST_MODE": "false", "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 c81e64bd..7f9d206b 100644 --- a/server/AyaNova/kpi/KPIFactory.cs +++ b/server/AyaNova/kpi/KPIFactory.cs @@ -22,6 +22,8 @@ namespace AyaNova.KPI return new CSROpenList() as IAyaKPI; case "WorkOrderOverduePersonalList": return new WorkOrderOverduePersonalList() as IAyaKPI; + case "WorkOrderOverdueAllList": + return new WorkOrderOverdueAllList() as IAyaKPI; default: throw new System.NotImplementedException($"KPI {name} NOT IMPLEMENTED"); diff --git a/server/AyaNova/kpi/WorkOrderOverdueAllList.cs b/server/AyaNova/kpi/WorkOrderOverdueAllList.cs new file mode 100644 index 00000000..bce29a48 --- /dev/null +++ b/server/AyaNova/kpi/WorkOrderOverdueAllList.cs @@ -0,0 +1,63 @@ +using AyaNova.Biz; +using AyaNova.DataList; +using System.Collections.Generic; + +namespace AyaNova.KPI +{ + internal class WorkOrderOverdueAllList : 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; + } + + public string MetaQuery => _metaQuery; + public string DataQuery => _dataQuery; + public string ErrorMessage => _errorMessage; + + public void BuildQuery(KPIRequestOptions options, long userId) + { + + var wotags = options.Criteria["wotags"].ToObject>(); + var woitemtags = options.Criteria["woitemtags"].ToObject>(); + + 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 distinct(AWORKORDER.ID), + AWORKORDER.SERIAL, + AWORKORDER.completebydate, + 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 (LASTSTATUSID IS NULL OR AWORKORDERSTATUS.COMPLETED = FALSE) and aworkorder.completebydate < now() + {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