diff --git a/plugins/AutoTask/v1/cspell.json b/plugins/AutoTask/v1/cspell.json index d0e25046..c5510aa9 100644 --- a/plugins/AutoTask/v1/cspell.json +++ b/plugins/AutoTask/v1/cspell.json @@ -1,6 +1,6 @@ { "words": [ - "AutoTask", + "Autotask", "Datto", "itsm" ] diff --git a/plugins/AutoTask/v1/custom_types.json b/plugins/AutoTask/v1/custom_types.json index e95f4539..813a238b 100644 --- a/plugins/AutoTask/v1/custom_types.json +++ b/plugins/AutoTask/v1/custom_types.json @@ -7,42 +7,42 @@ "plural": "Companies" }, { - "name": "AutotaskContact", + "name": "Autotask Contact", "sourceType": "autotask-contact", "icon": "user", "singular": "Contact", "plural": "Contacts" }, { - "name": "AutotaskProject", + "name": "Autotask Project", "sourceType": "autotask-project", "icon": "folder-kanban", "singular": "Project", "plural": "Projects" }, { - "name": "AutotaskResource", + "name": "Autotask Resource", "sourceType": "autotask-resource", "icon": "hard-hat", "singular": "Resource", "plural": "Resources" }, { - "name": "AutotaskContract", + "name": "Autotask Contract", "sourceType": "autotask-contract", "icon": "file-text", "singular": "Contract", "plural": "Contracts" }, { - "name": "AutotaskTicketStatus", + "name": "Autotask Ticket Status", "sourceType": "autotask-ticket-status", "icon": "circle-dot", "singular": "Ticket Status", "plural": "Ticket Statuses" }, { - "name": "AutotaskTicketPriority", + "name": "Autotask Ticket Priority", "sourceType": "autotask-ticket-priority", "icon": "arrow-up-circle", "singular": "Ticket Priority", diff --git a/plugins/AutoTask/v1/dataStreams/companies.json b/plugins/AutoTask/v1/dataStreams/companies.json index 1eccdff3..0843b2dd 100644 --- a/plugins/AutoTask/v1/dataStreams/companies.json +++ b/plugins/AutoTask/v1/dataStreams/companies.json @@ -1,8 +1,7 @@ { "name": "companies", "displayName": "Companies", - "description": "All active companies in AutoTask", - "tags": ["Companies"], + "description": "All active companies in Autotask", "baseDataSourceName": "httpRequestUnscoped", "timeframes": false, "config": { @@ -20,7 +19,9 @@ } }, "metadata": [ + { "name": "id", "displayName": "ID", "sourceType": "autotask-company", "shape": "string", "visible": false }, { "name": "companyName", "displayName": "Company Name" }, + { "sourceId": "id", "sourceType": "autotask-company", "name": "companyName" }, { "name": "isActive", "displayName": "Is Active" }, { "name": "phone", "displayName": "Phone" }, { "name": "address1", "displayName": "Address" }, diff --git a/plugins/AutoTask/v1/dataStreams/contacts.json b/plugins/AutoTask/v1/dataStreams/contacts.json index 466f2ea2..118d78de 100644 --- a/plugins/AutoTask/v1/dataStreams/contacts.json +++ b/plugins/AutoTask/v1/dataStreams/contacts.json @@ -1,6 +1,7 @@ { "name": "contacts", "displayName": "Contacts", + "description": "All active contacts in Autotask", "baseDataSourceName": "httpRequestUnscoped", "visibility": { "type": "hidden" }, "timeframes": false, diff --git a/plugins/AutoTask/v1/dataStreams/contractStatus.json b/plugins/AutoTask/v1/dataStreams/contractStatus.json index c652a392..42cbf264 100644 --- a/plugins/AutoTask/v1/dataStreams/contractStatus.json +++ b/plugins/AutoTask/v1/dataStreams/contractStatus.json @@ -2,7 +2,6 @@ "name": "contractStatus", "displayName": "Contract Status", "description": "Status and key dates for contracts belonging to the selected company", - "tags": ["Contracts"], "baseDataSourceName": "httpRequestScopedSingle", "timeframes": false, "matches": { @@ -28,6 +27,7 @@ { "name": "contractName", "displayName": "Contract Name" }, { "name": "companyID", "displayName": "Company ID", "sourceType": "autotask-company", "shape": "string", "visible": false }, { "name": "companyName", "displayName": "Company", "sourceId": "companyID", "objectPropertyPath": "name" }, + { "sourceId": "companyID", "sourceType": "autotask-company", "name": "companyName" }, { "name": "contractTypeName", "displayName": "Contract Type", diff --git a/plugins/AutoTask/v1/dataStreams/contracts.json b/plugins/AutoTask/v1/dataStreams/contracts.json index fe9ad48b..e3b94322 100644 --- a/plugins/AutoTask/v1/dataStreams/contracts.json +++ b/plugins/AutoTask/v1/dataStreams/contracts.json @@ -1,6 +1,7 @@ { "name": "contracts", "displayName": "Contracts", + "description": "All contracts in Autotask", "baseDataSourceName": "httpRequestUnscoped", "visibility": { "type": "hidden" }, "timeframes": false, diff --git a/plugins/AutoTask/v1/dataStreams/financialHealth.json b/plugins/AutoTask/v1/dataStreams/financialHealth.json index 83f9bc86..884f47bf 100644 --- a/plugins/AutoTask/v1/dataStreams/financialHealth.json +++ b/plugins/AutoTask/v1/dataStreams/financialHealth.json @@ -2,7 +2,6 @@ "name": "financialHealth", "displayName": "Financial Health", "description": "Estimated revenue, cost, and hours across all contracts", - "tags": ["Finance"], "baseDataSourceName": "httpRequestUnscoped", "timeframes": false, "config": { diff --git a/plugins/AutoTask/v1/dataStreams/projectStatus.json b/plugins/AutoTask/v1/dataStreams/projectStatus.json index 78a21394..7114cb68 100644 --- a/plugins/AutoTask/v1/dataStreams/projectStatus.json +++ b/plugins/AutoTask/v1/dataStreams/projectStatus.json @@ -2,7 +2,6 @@ "name": "projectStatus", "displayName": "Project Status", "description": "Status, progress, and schedule for all projects", - "tags": ["Projects"], "baseDataSourceName": "httpRequestUnscoped", "timeframes": false, "config": { diff --git a/plugins/AutoTask/v1/dataStreams/projects.json b/plugins/AutoTask/v1/dataStreams/projects.json index cfe895f2..a97e5e37 100644 --- a/plugins/AutoTask/v1/dataStreams/projects.json +++ b/plugins/AutoTask/v1/dataStreams/projects.json @@ -1,6 +1,7 @@ { "name": "projects", "displayName": "Projects", + "description": "All projects in Autotask", "baseDataSourceName": "httpRequestUnscoped", "visibility": { "type": "hidden" }, "timeframes": false, diff --git a/plugins/AutoTask/v1/dataStreams/resourceUtilisation.json b/plugins/AutoTask/v1/dataStreams/resourceUtilisation.json index 423db20d..e5173a52 100644 --- a/plugins/AutoTask/v1/dataStreams/resourceUtilisation.json +++ b/plugins/AutoTask/v1/dataStreams/resourceUtilisation.json @@ -2,7 +2,6 @@ "name": "resourceUtilisation", "displayName": "Resource Utilization", "description": "Time entries logged by resources within the selected timeframe", - "tags": ["Resources"], "baseDataSourceName": "httpRequestUnscoped", "timeframes": true, "config": { diff --git a/plugins/AutoTask/v1/dataStreams/resources.json b/plugins/AutoTask/v1/dataStreams/resources.json index 3a07fceb..35bc006f 100644 --- a/plugins/AutoTask/v1/dataStreams/resources.json +++ b/plugins/AutoTask/v1/dataStreams/resources.json @@ -1,6 +1,7 @@ { "name": "resources", "displayName": "Resources", + "description": "All active resources in Autotask", "baseDataSourceName": "httpRequestUnscoped", "visibility": { "type": "hidden" }, "timeframes": false, diff --git a/plugins/AutoTask/v1/dataStreams/scripts/tickets.js b/plugins/AutoTask/v1/dataStreams/scripts/tickets.js index 783cbb8f..5652edd5 100644 --- a/plugins/AutoTask/v1/dataStreams/scripts/tickets.js +++ b/plugins/AutoTask/v1/dataStreams/scripts/tickets.js @@ -1,2 +1,2 @@ -const selectedIds = new Set(context.objects.map(o => String(o.companyId))); +const selectedIds = new Set((context.objects ?? []).map(o => String(o.companyId))); result = (data.items ?? []).filter(ticket => selectedIds.has(String(ticket.companyID))); diff --git a/plugins/AutoTask/v1/dataStreams/surveyResults.json b/plugins/AutoTask/v1/dataStreams/surveyResults.json index 16aa655f..5cbb9a5c 100644 --- a/plugins/AutoTask/v1/dataStreams/surveyResults.json +++ b/plugins/AutoTask/v1/dataStreams/surveyResults.json @@ -2,7 +2,6 @@ "name": "surveyResults", "displayName": "Survey Results", "description": "Survey results submitted within the selected timeframe", - "tags": ["Surveys"], "baseDataSourceName": "httpRequestUnscoped", "timeframes": true, "config": { diff --git a/plugins/AutoTask/v1/dataStreams/ticketPriorities.json b/plugins/AutoTask/v1/dataStreams/ticketPriorities.json index f4e3ef70..9567810a 100644 --- a/plugins/AutoTask/v1/dataStreams/ticketPriorities.json +++ b/plugins/AutoTask/v1/dataStreams/ticketPriorities.json @@ -1,8 +1,7 @@ { "name": "ticketPriorities", "displayName": "Ticket Priorities", - "description": "All ticket priorities from AutoTask", - "tags": ["Tickets"], + "description": "All ticket priorities from Autotask", "baseDataSourceName": "httpRequestUnscoped", "visibility": { "type": "hidden" }, "timeframes": false, diff --git a/plugins/AutoTask/v1/dataStreams/ticketStatuses.json b/plugins/AutoTask/v1/dataStreams/ticketStatuses.json index ed2944e0..72529f91 100644 --- a/plugins/AutoTask/v1/dataStreams/ticketStatuses.json +++ b/plugins/AutoTask/v1/dataStreams/ticketStatuses.json @@ -1,8 +1,7 @@ { "name": "ticketStatuses", "displayName": "Ticket Statuses", - "description": "All active ticket statuses from AutoTask, including custom statuses", - "tags": ["Tickets"], + "description": "All active ticket statuses from Autotask, including custom statuses", "baseDataSourceName": "httpRequestUnscoped", "visibility": { "type": "hidden" }, "timeframes": false, diff --git a/plugins/AutoTask/v1/dataStreams/tickets.json b/plugins/AutoTask/v1/dataStreams/tickets.json index 7fbcc2df..1be81ea8 100644 --- a/plugins/AutoTask/v1/dataStreams/tickets.json +++ b/plugins/AutoTask/v1/dataStreams/tickets.json @@ -2,7 +2,6 @@ "name": "tickets", "displayName": "Tickets", "description": "Tickets with last activity within the selected timeframe", - "tags": ["Tickets"], "baseDataSourceName": "httpRequestScoped", "timeframes": true, "matches": { @@ -57,6 +56,7 @@ { "name": "priority", "displayName": "Priority (Raw)", "sourceType": "autotask-ticket-priority", "shape": "string", "visible": false }, { "name": "companyID", "sourceType": "autotask-company", "shape": "string", "visible": false }, { "name": "companyName", "displayName": "Company", "sourceId": "companyID", "objectPropertyPath": "name" }, + { "sourceId": "companyID", "sourceType": "autotask-company", "name": "companyName" }, { "name": "contactID", "sourceType": "autotask-contact", "shape": "string", "visible": false }, { "name": "contactName", "displayName": "Contact", "sourceId": "contactID", "objectPropertyPath": "name" }, { "name": "contractID", "sourceType": "autotask-contract", "shape": "string", "visible": false }, @@ -65,14 +65,14 @@ { "name": "assignedResourceName", "displayName": "Assigned Resource", "sourceId": "assignedResourceID", "objectPropertyPath": "name" }, { "name": "completedByResourceID", "sourceType": "autotask-resource", "shape": "string", "visible": false }, { "name": "completedByResourceName", "displayName": "Completed By", "sourceId": "completedByResourceID", "objectPropertyPath": "name" }, - { "name": "firstresponeassignedresourceID", "displayName": "First Response Assigned Resource ID", "sourceType": "autotask-resource", "shape": "string", "visible": false }, - { "name": "firstResponseAssignedResourceName", "displayName": "First Response Resource", "sourceId": "firstresponeassignedresourceID", "objectPropertyPath": "name" }, + { "name": "firstResponseAssignedResourceID", "displayName": "First Response Assigned Resource ID", "sourceType": "autotask-resource", "shape": "string", "visible": false }, + { "name": "firstResponseAssignedResourceName", "displayName": "First Response Resource", "sourceId": "firstResponseAssignedResourceID", "objectPropertyPath": "name" }, { "name": "lastActivityResourceID", "sourceType": "autotask-resource", "shape": "string", "visible": false }, - { "name": "lastActivityResourceName", "displayName": "Last Activity Resource", "sourceId": "LastActivityResourceID", "objectPropertyPath": "name" }, + { "name": "lastActivityResourceName", "displayName": "Last Activity Resource", "sourceId": "lastActivityResourceID", "objectPropertyPath": "name" }, { "name": "issueType", "displayName": "Issue Type" }, { "name": "resolution", "displayName": "Resolution" }, { "name": "creatorResourceID", "sourceType": "autotask-resource", "shape": "string", "visible": false }, - { "name": "creatorResourceName", "displayName": "Creator", "sourceId": "CreatorResourceID", "objectPropertyPath": "name" }, + { "name": "creatorResourceName", "displayName": "Creator", "sourceId": "creatorResourceID", "objectPropertyPath": "name" }, { "name": "lastActivityDate", "displayName": "Last Activity Date", "shape": ["date", { "timeZone": "Etc/UTC" }] }, { "name": "dueDateTime", "displayName": "Due Date", "shape": ["date", { "timeZone": "Etc/UTC" }] }, { "name": "apiVendorID", "displayName": "API Vendor ID", "shape": "string", "visible": false }, diff --git a/plugins/AutoTask/v1/docs/README.md b/plugins/AutoTask/v1/docs/README.md index b499941a..f58df462 100644 --- a/plugins/AutoTask/v1/docs/README.md +++ b/plugins/AutoTask/v1/docs/README.md @@ -1,4 +1,6 @@ -# Before you start +Connect to Datto Autotask PSA to monitor tickets, contracts, projects, resources, and company data. + +## Before you start You will need an Autotask account with admin access to create an API User. API Users are a dedicated account type in Autotask used for system integrations. They are separate from regular user accounts and cannot log in to the Autotask UI. @@ -9,7 +11,7 @@ You will need an Autotask account with admin access to create an API User. API U 3. Complete the required fields in the **General** section, including **Email Address**. This address is only used to notify you if the integration has a problem, and it is **not** the API Username 4. Set **Security Level** to an API User (API-only) level with read access to the entities you want to monitor 5. In the **Credentials** section, click **Generate Key** to create the **Username (Key)**, and **Generate Secret** to create the **Password (Secret)**. Let Autotask generate both rather than typing your own, so they are formatted correctly -6. In the **API Tracking Identifier** section, select your **Integration Vendor**, or choose **Custom (Internal Integration)** to generate an identifier. This value is the **API Integration Code** +6. In the **API Tracking Identifier** section, select **Squared Up** as your **Integration Vendor**. Its **API Integration Code** is `FWAABGUO7E7BBHD3PQMLWCGLGY` — enter this value when configuring the plugin 7. Save the record, then copy the Username (Key), Password (Secret) and tracking identifier somewhere safe. The secret cannot be retrieved again after you leave the page The API User must have sufficient security permissions to read the entities you want to monitor (Companies, Tickets, Contracts, Projects, Resources, and Survey Results). @@ -38,5 +40,5 @@ Enter the full base including `https://`. |---|---| | **Zone URL** | Derived from your Autotask login URL. See above | | **API Username** | API User record > Credentials > **Username (Key)** | -| **API Integration Code** | API User record > **API Tracking Identifier** | +| **API Integration Code** | The **Squared Up** Integration Vendor code is `FWAABGUO7E7BBHD3PQMLWCGLGY` | | **API Secret** | API User record > Credentials > **Password (Secret)** | diff --git a/plugins/AutoTask/v1/metadata.json b/plugins/AutoTask/v1/metadata.json index 6c46df7f..943dd2ae 100644 --- a/plugins/AutoTask/v1/metadata.json +++ b/plugins/AutoTask/v1/metadata.json @@ -1,10 +1,10 @@ { "name": "autotask", "displayName": "Autotask", - "version": "1.0.5", + "version": "1.0.6", "author": { - "name": "@TimWheeler-SQUP", - "type": "community" + "name": "SquaredUp Labs", + "type": "labs" }, "description": "Monitor tickets, contracts, projects, resources, and company data from Datto Autotask PSA.", "category": "Service Management", diff --git a/plugins/AutoTask/v1/ui.json b/plugins/AutoTask/v1/ui.json index 04eefe5d..dcac6e9f 100644 --- a/plugins/AutoTask/v1/ui.json +++ b/plugins/AutoTask/v1/ui.json @@ -13,7 +13,7 @@ { "type": "text", "name": "userName", - "label": "API Username", + "label": "API username", "placeholder": "A1B2C3D4E5F6@yourdomain.com", "help": "On the Autotask API User record, this is **Credentials > Username (Key)**, created with the **Generate Key** button. It is not the **Email Address** field on the General section, even though the Username is formatted like an email address.", "validation": { @@ -23,7 +23,7 @@ { "type": "password", "name": "integrationCode", - "label": "API Integration Code", + "label": "API integration code", "help": "On the Autotask API User record, this is the identifier under **API Tracking Identifier**. Select an Integration Vendor, or choose **Custom (Internal Integration)** to generate one.", "validation": { "required": true @@ -32,7 +32,7 @@ { "type": "password", "name": "secret", - "label": "API Secret", + "label": "API secret", "help": "On the Autotask API User record, this is **Credentials > Password (Secret)**, created with the **Generate Secret** button.", "validation": { "required": true