Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ced4602501 |
@@ -1,241 +0,0 @@
|
|||||||
import defineAction from '../../../../helpers/define-action.js';
|
|
||||||
|
|
||||||
export default defineAction({
|
|
||||||
name: 'Generate document',
|
|
||||||
key: 'generateDocument',
|
|
||||||
description: 'Creates a new document.',
|
|
||||||
arguments: [
|
|
||||||
{
|
|
||||||
label: 'Workspace',
|
|
||||||
key: 'workspaceId',
|
|
||||||
type: 'dropdown',
|
|
||||||
required: true,
|
|
||||||
description: '',
|
|
||||||
variables: true,
|
|
||||||
source: {
|
|
||||||
type: 'query',
|
|
||||||
name: 'getDynamicData',
|
|
||||||
arguments: [
|
|
||||||
{
|
|
||||||
name: 'key',
|
|
||||||
value: 'listWorkspaces',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Template',
|
|
||||||
key: 'templateId',
|
|
||||||
type: 'dropdown',
|
|
||||||
required: false,
|
|
||||||
depensOn: ['parameters.workspaceId'],
|
|
||||||
description: '',
|
|
||||||
variables: true,
|
|
||||||
source: {
|
|
||||||
type: 'query',
|
|
||||||
name: 'getDynamicData',
|
|
||||||
arguments: [
|
|
||||||
{
|
|
||||||
name: 'key',
|
|
||||||
value: 'listTemplates',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'parameters.workspaceId',
|
|
||||||
value: '{parameters.workspaceId}',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Use a Custom Json Structure?',
|
|
||||||
key: 'useCustomJsonStructure',
|
|
||||||
type: 'dropdown',
|
|
||||||
required: true,
|
|
||||||
description:
|
|
||||||
'Please indicate "yes" if you would rather create a full JSON payload instead of relying on Automatisch mapping for the Document data.',
|
|
||||||
variables: true,
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
label: 'Yes',
|
|
||||||
value: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'No',
|
|
||||||
value: false,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
additionalFields: {
|
|
||||||
type: 'query',
|
|
||||||
name: 'getDynamicFields',
|
|
||||||
arguments: [
|
|
||||||
{
|
|
||||||
name: 'key',
|
|
||||||
value: 'listDocumentData',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'parameters.useCustomJsonStructure',
|
|
||||||
value: '{parameters.useCustomJsonStructure}',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Add Line Items?',
|
|
||||||
key: 'addLineItems',
|
|
||||||
type: 'dropdown',
|
|
||||||
required: true,
|
|
||||||
description:
|
|
||||||
'Choose "yes" to include information for Line Items (such as in an invoice).',
|
|
||||||
variables: true,
|
|
||||||
options: [
|
|
||||||
{
|
|
||||||
label: 'Yes',
|
|
||||||
value: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'No',
|
|
||||||
value: false,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
additionalFields: {
|
|
||||||
type: 'query',
|
|
||||||
name: 'getDynamicFields',
|
|
||||||
arguments: [
|
|
||||||
{
|
|
||||||
name: 'key',
|
|
||||||
value: 'listLineItems',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'parameters.addLineItems',
|
|
||||||
value: '{parameters.addLineItems}',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Custom Filename',
|
|
||||||
key: 'customFilename',
|
|
||||||
type: 'string',
|
|
||||||
required: false,
|
|
||||||
description:
|
|
||||||
'You have the option to define a custom filename for generated documents. If left blank, a random value will be assigned.',
|
|
||||||
variables: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Meta Data',
|
|
||||||
key: 'metaData',
|
|
||||||
type: 'dynamic',
|
|
||||||
required: false,
|
|
||||||
description:
|
|
||||||
'Extra information appended to the generated Document but not accessible within its Template.',
|
|
||||||
fields: [
|
|
||||||
{
|
|
||||||
label: 'Key',
|
|
||||||
key: 'metaDataKey',
|
|
||||||
type: 'string',
|
|
||||||
required: false,
|
|
||||||
description: '',
|
|
||||||
variables: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Value',
|
|
||||||
key: 'metaDataValue',
|
|
||||||
type: 'string',
|
|
||||||
required: false,
|
|
||||||
description: '',
|
|
||||||
variables: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
async run($) {
|
|
||||||
const {
|
|
||||||
templateId,
|
|
||||||
useCustomJsonStructure,
|
|
||||||
customJsonPayload,
|
|
||||||
customFilename,
|
|
||||||
addLineItems,
|
|
||||||
lineItems,
|
|
||||||
documentData,
|
|
||||||
metaData,
|
|
||||||
} = $.step.parameters;
|
|
||||||
let payload = {};
|
|
||||||
let meta = {};
|
|
||||||
|
|
||||||
const documentDataObject = documentData.reduce((result, entry) => {
|
|
||||||
const key = entry.documentDataKey?.toLowerCase();
|
|
||||||
const value = entry.documentDataValue;
|
|
||||||
|
|
||||||
if (key && value) {
|
|
||||||
return {
|
|
||||||
...result,
|
|
||||||
[entry.documentDataKey?.toLowerCase()]: entry.documentDataValue,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}, {});
|
|
||||||
|
|
||||||
const lineItemsObject = lineItems.reduce((result, entry) => {
|
|
||||||
const key = entry.lineItemKey?.toLowerCase();
|
|
||||||
const value = entry.lineItemValue;
|
|
||||||
|
|
||||||
if (key && value) {
|
|
||||||
return {
|
|
||||||
...result,
|
|
||||||
[entry.lineItemKey?.toLowerCase()]: entry.lineItemValue,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}, {});
|
|
||||||
|
|
||||||
const metaDataObject = metaData.reduce((result, entry) => {
|
|
||||||
const key = entry.metaDataKey?.toLowerCase();
|
|
||||||
const value = entry.metaDataValue;
|
|
||||||
|
|
||||||
if (key && value) {
|
|
||||||
return {
|
|
||||||
...result,
|
|
||||||
[entry.metaDataKey?.toLowerCase()]: entry.metaDataValue,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}, {});
|
|
||||||
|
|
||||||
if (metaDataObject) {
|
|
||||||
meta = metaDataObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (customFilename) {
|
|
||||||
meta._filename = customFilename;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (useCustomJsonStructure) {
|
|
||||||
payload = JSON.parse(customJsonPayload);
|
|
||||||
} else {
|
|
||||||
payload = documentDataObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (addLineItems) {
|
|
||||||
payload.lineItems = [lineItemsObject];
|
|
||||||
}
|
|
||||||
|
|
||||||
const body = {
|
|
||||||
document: {
|
|
||||||
document_template_id: templateId,
|
|
||||||
meta: JSON.stringify(meta),
|
|
||||||
payload: JSON.stringify(payload),
|
|
||||||
status: 'pending',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const { data } = await $.http.post('/v1/documents', body);
|
|
||||||
|
|
||||||
$.setActionItem({
|
|
||||||
raw: data,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
@@ -1,3 +0,0 @@
|
|||||||
import generateDocument from './generate-document/index.js';
|
|
||||||
|
|
||||||
export default [generateDocument];
|
|
@@ -1,4 +0,0 @@
|
|||||||
import listTemplates from './list-templates/index.js';
|
|
||||||
import listWorkspaces from './list-workspaces/index.js';
|
|
||||||
|
|
||||||
export default [listTemplates, listWorkspaces];
|
|
@@ -1,39 +0,0 @@
|
|||||||
export default {
|
|
||||||
name: 'List templates',
|
|
||||||
key: 'listTemplates',
|
|
||||||
|
|
||||||
async run($) {
|
|
||||||
const templates = {
|
|
||||||
data: [],
|
|
||||||
};
|
|
||||||
const workspaceId = $.step.parameters.workspaceId;
|
|
||||||
let next = false;
|
|
||||||
|
|
||||||
const params = {
|
|
||||||
page: 'all',
|
|
||||||
'q[workspace_id]': workspaceId,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!workspaceId) {
|
|
||||||
return templates;
|
|
||||||
}
|
|
||||||
|
|
||||||
do {
|
|
||||||
const { data } = await $.http.get('/v1/document_template_cards', params);
|
|
||||||
next = data.meta.next_page;
|
|
||||||
|
|
||||||
if (!data?.document_template_cards?.length) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const template of data.document_template_cards) {
|
|
||||||
templates.data.push({
|
|
||||||
value: template.id,
|
|
||||||
name: template.identifier,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} while (next);
|
|
||||||
|
|
||||||
return templates;
|
|
||||||
},
|
|
||||||
};
|
|
@@ -1,29 +0,0 @@
|
|||||||
export default {
|
|
||||||
name: 'List workspaces',
|
|
||||||
key: 'listWorkspaces',
|
|
||||||
|
|
||||||
async run($) {
|
|
||||||
const workspaces = {
|
|
||||||
data: [],
|
|
||||||
};
|
|
||||||
let next = false;
|
|
||||||
|
|
||||||
do {
|
|
||||||
const { data } = await $.http.get('/v1/workspace_cards');
|
|
||||||
next = data.meta.next_page;
|
|
||||||
|
|
||||||
if (!data?.workspace_cards?.length) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const workspace of data.workspace_cards) {
|
|
||||||
workspaces.data.push({
|
|
||||||
value: workspace.id,
|
|
||||||
name: workspace.identifier,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} while (next);
|
|
||||||
|
|
||||||
return workspaces;
|
|
||||||
},
|
|
||||||
};
|
|
@@ -1,4 +0,0 @@
|
|||||||
import listDocumentData from './list-document-data/index.js';
|
|
||||||
import listLineItems from './list-line-items/index.js';
|
|
||||||
|
|
||||||
export default [listDocumentData, listLineItems];
|
|
@@ -1,48 +0,0 @@
|
|||||||
export default {
|
|
||||||
name: 'List document data',
|
|
||||||
key: 'listDocumentData',
|
|
||||||
|
|
||||||
async run($) {
|
|
||||||
if ($.step.parameters.useCustomJsonStructure) {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
label: 'Data for the Document (JSON Payload)',
|
|
||||||
key: 'customJsonPayload',
|
|
||||||
type: 'string',
|
|
||||||
required: false,
|
|
||||||
description:
|
|
||||||
'Use the JSON format { "firstname": "John", "lastname": "Doe" }.',
|
|
||||||
variables: true,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
} else {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
label: 'Data for the Document',
|
|
||||||
key: 'documentData',
|
|
||||||
type: 'dynamic',
|
|
||||||
required: false,
|
|
||||||
description: '',
|
|
||||||
fields: [
|
|
||||||
{
|
|
||||||
label: 'Key',
|
|
||||||
key: 'documentDataKey',
|
|
||||||
type: 'string',
|
|
||||||
required: false,
|
|
||||||
description: '',
|
|
||||||
variables: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Value',
|
|
||||||
key: 'documentDataValue',
|
|
||||||
type: 'string',
|
|
||||||
required: false,
|
|
||||||
description: '',
|
|
||||||
variables: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
@@ -1,37 +0,0 @@
|
|||||||
export default {
|
|
||||||
name: 'List line items',
|
|
||||||
key: 'listLineItems',
|
|
||||||
|
|
||||||
async run($) {
|
|
||||||
if ($.step.parameters.addLineItems) {
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
label: 'Line Items',
|
|
||||||
key: 'lineItems',
|
|
||||||
type: 'dynamic',
|
|
||||||
required: false,
|
|
||||||
description:
|
|
||||||
'Data for a single item. Available as "lineItems" in your PDFMonkey Template.',
|
|
||||||
fields: [
|
|
||||||
{
|
|
||||||
label: 'Key',
|
|
||||||
key: 'lineItemKey',
|
|
||||||
type: 'string',
|
|
||||||
required: false,
|
|
||||||
description: '',
|
|
||||||
variables: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Value',
|
|
||||||
key: 'lineItemValue',
|
|
||||||
type: 'string',
|
|
||||||
required: false,
|
|
||||||
description: '',
|
|
||||||
variables: true,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
@@ -1,10 +1,6 @@
|
|||||||
import defineApp from '../../helpers/define-app.js';
|
import defineApp from '../../helpers/define-app.js';
|
||||||
import addAuthHeader from './common/add-auth-header.js';
|
import addAuthHeader from './common/add-auth-header.js';
|
||||||
import auth from './auth/index.js';
|
import auth from './auth/index.js';
|
||||||
import triggers from './triggers/index.js';
|
|
||||||
import dynamicData from './dynamic-data/index.js';
|
|
||||||
import actions from './actions/index.js';
|
|
||||||
import dynamicFields from './dynamic-fields/index.js';
|
|
||||||
|
|
||||||
export default defineApp({
|
export default defineApp({
|
||||||
name: 'PDFMonkey',
|
name: 'PDFMonkey',
|
||||||
@@ -14,11 +10,7 @@ export default defineApp({
|
|||||||
supportsConnections: true,
|
supportsConnections: true,
|
||||||
baseUrl: 'https://pdfmonkey.io',
|
baseUrl: 'https://pdfmonkey.io',
|
||||||
apiBaseUrl: 'https://api.pdfmonkey.io/api',
|
apiBaseUrl: 'https://api.pdfmonkey.io/api',
|
||||||
primaryColor: '376794',
|
primaryColor: 'db2777',
|
||||||
beforeRequest: [addAuthHeader],
|
beforeRequest: [addAuthHeader],
|
||||||
auth,
|
auth,
|
||||||
triggers,
|
|
||||||
dynamicData,
|
|
||||||
actions,
|
|
||||||
dynamicFields,
|
|
||||||
});
|
});
|
||||||
|
@@ -1,99 +0,0 @@
|
|||||||
import defineTrigger from '../../../../helpers/define-trigger.js';
|
|
||||||
|
|
||||||
export default defineTrigger({
|
|
||||||
name: 'Documents Generated',
|
|
||||||
key: 'documentsGenerated',
|
|
||||||
pollInterval: 15,
|
|
||||||
description:
|
|
||||||
'Triggers upon the successful completion of document generation.',
|
|
||||||
arguments: [
|
|
||||||
{
|
|
||||||
label: 'Workspace',
|
|
||||||
key: 'workspaceId',
|
|
||||||
type: 'dropdown',
|
|
||||||
required: true,
|
|
||||||
description: '',
|
|
||||||
variables: true,
|
|
||||||
source: {
|
|
||||||
type: 'query',
|
|
||||||
name: 'getDynamicData',
|
|
||||||
arguments: [
|
|
||||||
{
|
|
||||||
name: 'key',
|
|
||||||
value: 'listWorkspaces',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Templates',
|
|
||||||
key: 'templateIds',
|
|
||||||
type: 'dynamic',
|
|
||||||
required: false,
|
|
||||||
description: 'Apply this trigger exclusively for particular templates.',
|
|
||||||
fields: [
|
|
||||||
{
|
|
||||||
label: 'Template',
|
|
||||||
key: 'templateId',
|
|
||||||
type: 'dropdown',
|
|
||||||
required: false,
|
|
||||||
depensOn: ['parameters.workspaceId'],
|
|
||||||
description: '',
|
|
||||||
variables: true,
|
|
||||||
source: {
|
|
||||||
type: 'query',
|
|
||||||
name: 'getDynamicData',
|
|
||||||
arguments: [
|
|
||||||
{
|
|
||||||
name: 'key',
|
|
||||||
value: 'listTemplates',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'parameters.workspaceId',
|
|
||||||
value: '{parameters.workspaceId}',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
async run($) {
|
|
||||||
const workspaceId = $.step.parameters.workspaceId;
|
|
||||||
const templateIds = $.step.parameters.templateIds;
|
|
||||||
const allTemplates = templateIds
|
|
||||||
.map((templateId) => templateId.templateId)
|
|
||||||
.join(',');
|
|
||||||
|
|
||||||
const params = {
|
|
||||||
'page[size]': 100,
|
|
||||||
'q[workspace_id]': workspaceId,
|
|
||||||
'q[status]': 'success',
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!templateIds.length) {
|
|
||||||
params['q[document_template_id]'] = allTemplates;
|
|
||||||
}
|
|
||||||
|
|
||||||
let next = false;
|
|
||||||
do {
|
|
||||||
const { data } = await $.http.get('/v1/document_cards', { params });
|
|
||||||
|
|
||||||
if (!data?.document_cards?.length) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
next = data.meta.next_page;
|
|
||||||
|
|
||||||
for (const document of data.document_cards) {
|
|
||||||
$.pushTriggerItem({
|
|
||||||
raw: document,
|
|
||||||
meta: {
|
|
||||||
internalId: document.id,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} while (next);
|
|
||||||
},
|
|
||||||
});
|
|
@@ -1,3 +0,0 @@
|
|||||||
import documentsGenerated from './documents-generated/index.js';
|
|
||||||
|
|
||||||
export default [documentsGenerated];
|
|
@@ -256,11 +256,7 @@ export default defineConfig({
|
|||||||
text: 'PDFMonkey',
|
text: 'PDFMonkey',
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
collapsed: true,
|
collapsed: true,
|
||||||
items: [
|
items: [{ text: 'Connection', link: '/apps/pdf-monkey/connection' }],
|
||||||
{ text: 'Triggers', link: '/apps/pdf-monkey/triggers' },
|
|
||||||
{ text: 'Actions', link: '/apps/pdf-monkey/actions' },
|
|
||||||
{ text: 'Connection', link: '/apps/pdf-monkey/connection' },
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: 'Pipedrive',
|
text: 'Pipedrive',
|
||||||
|
@@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
favicon: /favicons/pdf-monkey.svg
|
|
||||||
items:
|
|
||||||
- name: Generate documents
|
|
||||||
desc: Creates a new document.
|
|
||||||
---
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import CustomListing from '../../components/CustomListing.vue'
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<CustomListing />
|
|
@@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
favicon: /favicons/pdf-monkey.svg
|
|
||||||
items:
|
|
||||||
- name: Documents Generated
|
|
||||||
desc: Triggers upon the successful completion of document generation.
|
|
||||||
---
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import CustomListing from '../../components/CustomListing.vue'
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<CustomListing />
|
|
@@ -26,7 +26,6 @@ The following integrations are currently supported by Automatisch.
|
|||||||
- [Ntfy](/apps/ntfy/actions)
|
- [Ntfy](/apps/ntfy/actions)
|
||||||
- [Odoo](/apps/odoo/actions)
|
- [Odoo](/apps/odoo/actions)
|
||||||
- [OpenAI](/apps/openai/actions)
|
- [OpenAI](/apps/openai/actions)
|
||||||
- [PDFMonkey](/apps/pdf-monkey/actions)
|
|
||||||
- [Pipedrive](/apps/pipedrive/triggers)
|
- [Pipedrive](/apps/pipedrive/triggers)
|
||||||
- [Placetel](/apps/placetel/triggers)
|
- [Placetel](/apps/placetel/triggers)
|
||||||
- [PostgreSQL](/apps/postgresql/actions)
|
- [PostgreSQL](/apps/postgresql/actions)
|
||||||
|
Reference in New Issue
Block a user