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) { //build data and meta queries //validate criteria exists if (!options.Criteria.ContainsKey("wostatus")) { _errorMessage = "Missing 'wostatus' criteria"; return; } var wostatus = (int?)options.Criteria["wostatus"]; 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); string statusWhere = string.Empty; if (wostatus != null) { statusWhere = $"AND LASTSTATUSID = {wostatus}"; } //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 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 (LASTSTATUSID IS NULL OR AWORKORDERSTATUS.COMPLETED = FALSE) AND AWORKORDERITEMSCHEDULEDUSER.ID IS NULL {woTagsWhere} {woItemTagsWhere} {statusWhere} 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