// Returns quick task templates for a business // Input: BusinessID (required) // Output: { OK: true, TEMPLATES: [...] } function apiAbort(required struct payload) { writeOutput(serializeJSON(payload)); abort; } function readJsonBody() { var raw = getHttpRequestData().content; if (isNull(raw)) raw = ""; if (!len(trim(raw))) return {}; try { var data = deserializeJSON(raw); if (isStruct(data)) return data; } catch (any e) {} return {}; } try { data = readJsonBody(); // Get BusinessID from body, header, or URL businessID = 0; httpHeaders = getHttpRequestData().headers; if (structKeyExists(data, "BusinessID") && isNumeric(data.BusinessID)) { businessID = int(data.BusinessID); } else if (structKeyExists(httpHeaders, "X-Business-ID") && isNumeric(httpHeaders["X-Business-ID"])) { businessID = int(httpHeaders["X-Business-ID"]); } else if (structKeyExists(url, "BusinessID") && isNumeric(url.BusinessID)) { businessID = int(url.BusinessID); } if (businessID == 0) { apiAbort({ "OK": false, "ERROR": "missing_params", "MESSAGE": "BusinessID is required" }); } // Get quick task templates for this business q = queryTimed(" SELECT qt.ID, qt.Name as Name, qt.TaskCategoryID as CategoryID, qt.Title as Title, qt.Details as Details, qt.Icon as Icon, qt.Color as Color, qt.SortOrder as SortOrder, qt.IsActive as IsActive, tc.Name as Name, tc.Color as CategoryColor FROM QuickTaskTemplates qt LEFT JOIN TaskCategories tc ON qt.TaskCategoryID = tc.ID WHERE qt.BusinessID = :businessID AND qt.IsActive = 1 ORDER BY qt.SortOrder, qt.ID ", { businessID: { value: businessID, cfsqltype: "cf_sql_integer" } }, { datasource: "payfrit" }); templates = []; for (row in q) { arrayAppend(templates, { "QuickTaskTemplateID": row.ID, "Name": row.Name, "CategoryID": isNull(row.CategoryID) ? "" : row.CategoryID, "Title": row.Title, "Details": isNull(row.Details) ? "" : row.Details, "Icon": isNull(row.Icon) ? "add_box" : row.Icon, "Color": isNull(row.Color) ? "##6366f1" : row.Color, "SortOrder": row.SortOrder, "IsActive": row.IsActive, "Name": isNull(row.Name) ? "" : row.Name, "CategoryColor": isNull(row.CategoryColor) ? "" : row.CategoryColor }); } apiAbort({ "OK": true, "TEMPLATES": templates, "COUNT": arrayLen(templates) }); } catch (any e) { apiAbort({ "OK": false, "ERROR": "server_error", "MESSAGE": e.message }); }