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.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.TagFilterToSqlCriteriaHelper("aworkorder.tags", wotags, wotagsany); string woItemTagsWhere = DataListSqlFilterCriteriaBuilder.TagFilterToSqlCriteriaHelper("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, AWORKORDER.LASTSTATUSID 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 AWORKORDERITEMSCHEDULEDUSER.ID IS NULL {woTagsWhere} {woItemTagsWhere} {statusWhere} ORDER BY AWORKORDER.ID ASC ) t LIMIT {KPIFetcher.KPI_LIST_MAX_ITEMS_TO_RETURN}"; _metaQuery = string.Empty; // @"SELECT row_to_json(t) as res from ( // select name from auser where id = 10 // ) t"; } }//eoc }//eons