Operational reports and targets
Read open and overdue Task activity
/a/Report_getTasksDue
Compare open Tasks with the overdue subset within one creation-date reporting cohort.
When to use this endpoint
Compare open Tasks with the overdue subset within one creation-date reporting cohort. Select the matching saved Reports dashboard chart or table, choose a bounded range, and use the returned series to render that report.
res[0] counts open Tasks and res[1] counts overdue open Tasks; there is no value series.
Authentication and permissions
Authenticate with signed API-key fields or a logged-in CRM session. The handler requires login and account reporting feature bit 8192. No separate Reports, Jobs, Tasks or finance page-permission check is added by the handler.
The dispatcher rejects this legacy Report route for configured TeamAccess record scope, including assigned-only/parent-manager access and applicable department hierarchy scope. It returns an explicit scope error rather than a silently filtered chart.
Allowed requests read the authenticated tenant. Entity selections are report filters or label controls, not authorization; the handler does not add customer account-manager ownership filtering.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
daysFrom | Integer string | Yes | Inclusive first date: relative day offset from current PHP time by default, or Unix seconds with durationType=1. Must be an integer; malformed/blank values are rejected. ISO strings are not parsed as dates. |
daysTo | Integer string | Yes | Inclusive last date, in the same mode as daysFrom. Expanded to 23:59:59 in the account timezone; no reversed-range validation. |
durationType | Integer string | No | Default 0. Exactly 1 uses Unix seconds; other values convert integer day offsets through strtotime. Use 0/1; numeric values are validated before report SQL. |
frequency | Integer string | No | Default 0 monthly, 1 weekly, 2 quarterly, 3 yearly. Controls helper axis and grouping, using ISO week-year for weekly periods. Unsupported values are rejected. |
userType | Integer string | Yes | 0 summary, 1 users, 2 customers, 3 asset-axis labels. User grouping is Task created_by, not assigned_to. Type 3 uses the same customer-key grouping as type 2 rather than an actual asset relationship. |
user | Native array of ID strings or ["All"] | No | Defaults to ["All"]; a supplied empty list is rejected. Summary ignores the selection; individual axes include selected IDs by name. Pass a native array, not an encoded JSON string. |
Example request
$report = FM_api('Report_getTasksDue', [
'daysFrom'=>'1768003200',
'daysTo'=>'1768003200',
'durationType'=>'1',
'userType'=>'0',
'frequency'=>'0',
'user'=>['All'],
]);
Example response
{
"res": [
[
0
],
[
0
]
],
"xLabels": [
"Jan 2026"
],
"xLabels1": []
}
Representative empty-cohort result from the real handler with a January 2026 summary axis. The request timestamp is 2026-01-10 00:00:00 UTC and expands to account-local day boundaries.
res[0] counts open Tasks and res[1] counts overdue open Tasks; there is no value series.
Errors and unusual responses
| Response | Condition |
|---|---|
{"error":"not logged in"} | No authenticated tenant context is available. Invalid signed credentials can be rejected by the dispatcher before the handler runs. |
{"error":"This legacy report does not support your configured record scope. Use the scoped Contracts reports or table exports."} | The dispatcher detects configured TeamAccess record scope before the handler. |
{"error":"no permission to access api"} | Account reporting feature bit 8192 is absent. |
{"error":"missing parameter: daysFrom"} | The named parameter is omitted or null. Present blank/malformed controls return an invalid-parameter error instead; list controls must be native arrays. |
{"error":"missing parameter: daysTo"} | The named parameter is omitted or null. Present blank/malformed controls return an invalid-parameter error instead; list controls must be native arrays. |
{"error":"missing parameter: userType"} | The named parameter is omitted or null. Present blank/malformed controls return an invalid-parameter error instead; list controls must be native arrays. |
{"error":"invalid parameter: daysFrom"} | A supplied numeric/list control is malformed, a list contains unsupported tokens, or frequency/userType/date selectors are outside 0–3. The message names the invalid control; validation precedes chart queries. |
Legacy application errors may be returned with HTTP 200. Check the decoded response for error, not only the HTTP status.
Behaviour and edge cases
- Filters cdate inclusively and selects status 0 or 1. Overdue additionally means due_date < the real current account-local date at midnight; due today is excluded.
- The range selects Task creation date, not due date. Changing daysTo does not change the real-current-day overdue cutoff.
- User grouping is created_by, not assigned_to. No per-Task privacy, assignee, active/deleted or page-permission filter is added by the handler.
- For userType 2 or 3, grouping uses client_id, the Task customer field defined by the Task map. Customer-axis labels match that ID; type 3 retains the legacy asset-label axis without adding an asset relationship.
- displayType, legend and status are ignored; open statuses are fixed in SQL. Counts are integer chart values.
- There is no pagination, checkpoint or result-size limit. Keep the date range and entity selection bounded. Aggregated values are numeric chart cells, not database scalar strings or object rows.
- The helper orders periods first, then entities by name; one entity collapses xLabels to period text with empty xLabels1. Temporary users with non-null meta.is_tmp are excluded from user-axis lookups, but inactive/deleted label entities are not generally excluded. Unmatched entity/date keys are silently dropped.
- PHP date conversion uses the account timezone (missing/null defaults to Europe/Dublin, blank means UTC). SQL date/Unix conversion uses its database session timezone; these handlers do not force cross-layer alignment.
- Weekly axes enumerate real Mondays and use ISO week-year keys consistently with SQL. Week 53 and ranges crossing a calendar-year boundary are included; display labels are Week NN YYYY using the ISO year.
- Numeric controls and native selector lists are validated through Report_validateChartRequest before SQL. JSON-encoded list strings, nested/object-keyed arrays, unsafe ID values and undocumented tokens are rejected. The existing login, reporting-feature and TeamAccess entry policies remain unchanged.
- No direct caller for this endpoint was found in the mobile app or its m-service intermediary.
Side effects
- Reads tenant data only; no business-record, audit, notification or schema writes occur. The chart restores its temporary PHP timezone on normal return paths.
See it in Fieldmotion
CRM1
Open Reports dashboard, add or preview Due/Overdue Tasks, choose filters and inspect Network for Report_getTasksDue. pageReportDashboard.js constructs the endpoint dynamically from the saved api value. Generic legends can control presentation without changing the backend cohort; compare the actual request with this page’s parameter contract.
CRM2
Open Reports dashboard, add or preview Due/Overdue Tasks, choose filters and inspect Network for Report_getTasksDue. lib/displayReport.js / pageReportDashboardDetails.js constructs the endpoint dynamically from the saved api value. Generic legends can control presentation without changing the backend cohort; compare the actual request with this page’s parameter contract.
Related endpoints
Report_getTaskStatus— Compare status selection with the fixed open/overdue cohort.ReportDashboard_getRequestedDetailsreads a saved widget definition and filters; its widget ID is not a legacy report-template ID.