From db33afc40db4430066921d0a1db02c464cd9945d Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 3 Mar 2022 15:06:06 +0000 Subject: [PATCH] --- docs/8.0/ayanova/docs/home-dashboard.md | 26 ++++++++++++++++-- ...idget-work-order-completed-on-time-bar.png | Bin 0 -> 18618 bytes .../kpi/WorkOrderCompletedOnTimePct.cs | 10 ++++++- 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 docs/8.0/ayanova/docs/img/widget-work-order-completed-on-time-bar.png diff --git a/docs/8.0/ayanova/docs/home-dashboard.md b/docs/8.0/ayanova/docs/home-dashboard.md index 37b432b2..02c23111 100644 --- a/docs/8.0/ayanova/docs/home-dashboard.md +++ b/docs/8.0/ayanova/docs/home-dashboard.md @@ -276,7 +276,6 @@ Available filter criteria: - Work order tags - Work order item tags - #### Count of work orders created Management chart showing the number of new work orders created that fit criteria selected, available as a Line or Bar chart: @@ -287,7 +286,6 @@ Management chart showing the number of new work orders created that fit criteria These chart format widgets display counts of work orders created by selected time span and selected interval. - They will automatically update every 15 minutes approximately. Available to the following roles: @@ -304,3 +302,27 @@ Available filter criteria: - Interval - Work order tags - Work order item tags + +#### Percentage of Work orders completed on time + +![pct workorder completed on time](img/widget-work-order-completed-on-time-bar.png) + +Management bar chart showing the percentage of work orders that were completed on time for the criteria selected. + +Here, completed on time means work orders that were set to a [Completed work order status](svc-work-order-status.md#is-a-completed-status) before the Work order's [date to be completed setting](svc-workorders.md#date-to-be-completed). + +They will automatically update every 15 minutes approximately. + +Available to the following roles: + +- Accounting +- Business administration +- Business administration - restricted +- Service manager +- Service manager - restricted + +Available filter criteria: + +- Time span +- Interval +- Work order tags diff --git a/docs/8.0/ayanova/docs/img/widget-work-order-completed-on-time-bar.png b/docs/8.0/ayanova/docs/img/widget-work-order-completed-on-time-bar.png new file mode 100644 index 0000000000000000000000000000000000000000..44f52e41f3eada595df6b91a8e9ae89f6801eb7c GIT binary patch literal 18618 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ƙJ@1i^l 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 literal 0 HcmV?d00001 diff --git a/server/AyaNova/kpi/WorkOrderCompletedOnTimePct.cs b/server/AyaNova/kpi/WorkOrderCompletedOnTimePct.cs index b7c908d7..d6bc5fb4 100644 --- a/server/AyaNova/kpi/WorkOrderCompletedOnTimePct.cs +++ b/server/AyaNova/kpi/WorkOrderCompletedOnTimePct.cs @@ -47,13 +47,21 @@ AuthorizationRoles.Accounting; bool wotagsany = options.Criteria["wotagsany"].ToObject(); string woTagsWhere = DataListSqlFilterCriteriaBuilder.KPITagFilterToSqlCriteria("aworkorder.tags", wotags, wotagsany); + + + _dataQuery = @$"SELECT row_to_json(t) as res from ( with subq as ( SELECT COUNT(AWORKORDER.ID) wocount, DATE_TRUNC('{interval}',AWORKORDER.createddate) x, - (LASTSTATUSID IS NULL OR AWORKORDERSTATUS.COMPLETED = FALSE) z + (aworkorder.laststatusid is not null AND AWORKORDERSTATUS.COMPLETED = TRUE AND laststate.created < aworkorder.completebydate) Z FROM AWORKORDER LEFT JOIN AWORKORDERSTATUS ON (AWORKORDER.LASTSTATUSID = AWORKORDERSTATUS.ID) + LEFT JOIN LATERAL (SELECT created + FROM aworkorderstate + WHERE aworkorderstate.workorderid = aworkorder.id + ORDER BY aworkorderstate.created DESC + LIMIT 1) AS laststate ON TRUE where AWORKORDER.COMPLETEBYDATE < NOW() AND {dateWhere} {woTagsWhere} GROUP BY x,z )