Add Activepieces integration for workflow automation
- Add Activepieces fork with SmoothSchedule custom piece - Create integrations app with Activepieces service layer - Add embed token endpoint for iframe integration - Create Automations page with embedded workflow builder - Add sidebar visibility fix for embed mode - Add list inactive customers endpoint to Public API - Include SmoothSchedule triggers: event created/updated/cancelled - Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"extends": [
|
||||
"../../../../.eslintrc.base.json"
|
||||
],
|
||||
"ignorePatterns": [
|
||||
"!**/*"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx",
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
# pieces-quickbooks
|
||||
|
||||
This library was generated with [Nx](https://nx.dev).
|
||||
|
||||
## Building
|
||||
|
||||
Run `nx build pieces-quickbooks` to build the library.
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "@activepieces/piece-quickbooks",
|
||||
"version": "0.0.9"
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"name": "pieces-quickbooks",
|
||||
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "packages/pieces/community/quickbooks/src",
|
||||
"projectType": "library",
|
||||
"release": {
|
||||
"version": {
|
||||
"currentVersionResolver": "git-tag",
|
||||
"preserveLocalDependencyProtocols": false,
|
||||
"manifestRootsToUpdate": [
|
||||
"dist/{projectRoot}"
|
||||
]
|
||||
}
|
||||
},
|
||||
"tags": [],
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@nx/js:tsc",
|
||||
"outputs": [
|
||||
"{options.outputPath}"
|
||||
],
|
||||
"options": {
|
||||
"outputPath": "dist/packages/pieces/community/quickbooks",
|
||||
"tsConfig": "packages/pieces/community/quickbooks/tsconfig.lib.json",
|
||||
"packageJson": "packages/pieces/community/quickbooks/package.json",
|
||||
"main": "packages/pieces/community/quickbooks/src/index.ts",
|
||||
"assets": [
|
||||
"packages/pieces/community/quickbooks/*.md"
|
||||
],
|
||||
"buildableProjectDepsInPackageJsonType": "dependencies",
|
||||
"updateBuildableProjectDepsInPackageJson": true
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build",
|
||||
"prebuild"
|
||||
]
|
||||
},
|
||||
"nx-release-publish": {
|
||||
"options": {
|
||||
"packageRoot": "dist/{projectRoot}"
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nx/eslint:lint",
|
||||
"outputs": [
|
||||
"{options.outputFile}"
|
||||
]
|
||||
},
|
||||
"prebuild": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"cwd": "packages/pieces/community/quickbooks",
|
||||
"command": "bun install --no-save --silent"
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,234 @@
|
||||
import { Property, createAction, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
|
||||
import { quickbooksAuth } from '../index';
|
||||
import { quickbooksCommon, QuickbooksEntityResponse } from '../lib/common';
|
||||
import {
|
||||
QuickbooksAccount,
|
||||
QuickbooksVendor,
|
||||
QuickbooksPurchase,
|
||||
QuickbooksRef,
|
||||
} from '../lib/types';
|
||||
|
||||
export const createExpenseAction = createAction({
|
||||
auth: quickbooksAuth,
|
||||
name: 'create_expense',
|
||||
displayName: 'Create Expense',
|
||||
description: 'Creates an expense transaction (purchase) in QuickBooks.',
|
||||
props: {
|
||||
accountRef: Property.Dropdown({
|
||||
auth: quickbooksAuth,
|
||||
|
||||
displayName: 'Bank/Credit Card Account',
|
||||
description: 'The account from which the expense was paid.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return { disabled: true, placeholder: 'Connect account', options: [] };
|
||||
}
|
||||
const { access_token, props } = auth as OAuth2PropertyValue;
|
||||
|
||||
const companyId = props?.['companyId'];
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId);
|
||||
const query = `SELECT Id, Name, AccountType FROM Account STARTPOSITION 1 MAXRESULTS 1000`;
|
||||
const response = await httpClient.sendRequest<QuickbooksEntityResponse<QuickbooksAccount>>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${apiUrl}/query`,
|
||||
queryParams: { query: query, minorversion: '70' },
|
||||
headers: {
|
||||
Authorization: `Bearer ${access_token}`,
|
||||
Accept: 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
if (response.body.Fault) {
|
||||
throw new Error(
|
||||
`QuickBooks API Error fetching accounts: ${response.body.Fault.Error.map(
|
||||
(e: { Message: string }) => e.Message,
|
||||
).join(', ')}`,
|
||||
);
|
||||
}
|
||||
|
||||
const accounts = response.body.QueryResponse?.['Account'] ?? [];
|
||||
return {
|
||||
disabled: false,
|
||||
options: accounts.map((account) => ({
|
||||
label: `${account.Name} (${account.AccountType})`,
|
||||
value: account.Id,
|
||||
})),
|
||||
};
|
||||
},
|
||||
}),
|
||||
paymentType: Property.StaticDropdown({
|
||||
displayName: 'Payment Type',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Cash', value: 'Cash' },
|
||||
{ label: 'Check', value: 'Check' },
|
||||
{ label: 'Credit Card', value: 'CreditCard' },
|
||||
],
|
||||
},
|
||||
defaultValue: 'Cash',
|
||||
}),
|
||||
entityRef: Property.Dropdown({
|
||||
auth: quickbooksAuth,
|
||||
|
||||
displayName: 'Payee (Vendor)',
|
||||
description: 'Optional - The vendor the expense was paid to.',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return { disabled: true, placeholder: 'Connect account', options: [] };
|
||||
}
|
||||
const { access_token, props } = auth as OAuth2PropertyValue;
|
||||
|
||||
const companyId = props?.['companyId'];
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId);
|
||||
const query = `SELECT Id, DisplayName FROM Vendor STARTPOSITION 1 MAXRESULTS 1000`;
|
||||
const response = await httpClient.sendRequest<QuickbooksEntityResponse<QuickbooksVendor>>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${apiUrl}/query`,
|
||||
queryParams: { query: query, minorversion: '70' },
|
||||
headers: {
|
||||
Authorization: `Bearer ${access_token}`,
|
||||
Accept: 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
if (response.body.Fault) {
|
||||
throw new Error(
|
||||
`QuickBooks API Error fetching vendors: ${response.body.Fault.Error.map(
|
||||
(e: { Message: string }) => e.Message,
|
||||
).join(', ')}`,
|
||||
);
|
||||
}
|
||||
|
||||
const vendors = response.body.QueryResponse?.['Vendor'] ?? [];
|
||||
return {
|
||||
disabled: false,
|
||||
options: vendors.map((vendor) => ({
|
||||
label: vendor.DisplayName,
|
||||
value: vendor.Id,
|
||||
})),
|
||||
};
|
||||
},
|
||||
}),
|
||||
txnDate: Property.DateTime({
|
||||
displayName: 'Payment Date',
|
||||
description: 'The date the expense occurred.',
|
||||
required: false, // Defaults to today if empty
|
||||
}),
|
||||
// Line items for the expense details
|
||||
lineItems: Property.Array({
|
||||
displayName: 'Line Items',
|
||||
description:
|
||||
'Details of the expense (e.g., categories or items purchased). At least one line is required.',
|
||||
required: true,
|
||||
properties: {
|
||||
amount: Property.Number({
|
||||
displayName: 'Amount',
|
||||
required: true,
|
||||
}),
|
||||
description: Property.ShortText({
|
||||
displayName: 'Description',
|
||||
required: false,
|
||||
}),
|
||||
detailType: Property.StaticDropdown({
|
||||
displayName: 'Detail Type',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{
|
||||
label: 'Account Based Expense Line Detail',
|
||||
value: 'AccountBasedExpenseLineDetail',
|
||||
},
|
||||
],
|
||||
},
|
||||
defaultValue: 'AccountBasedExpenseLineDetail',
|
||||
}),
|
||||
expenseAccountId: Property.ShortText({
|
||||
displayName: 'Expense Category/Account ID',
|
||||
description:
|
||||
'Enter the ID of the Expense Account. Required for AccountBasedExpenseLineDetail.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
privateNote: Property.LongText({
|
||||
displayName: 'Memo (Private Note)',
|
||||
description: 'Internal note about the expense.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const { access_token } = context.auth;
|
||||
const companyId = context.auth.props?.['companyId'];
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId as string);
|
||||
const props = context.propsValue;
|
||||
|
||||
const lines = (props['lineItems'] as any[]).map((line) => {
|
||||
const detail: any = {
|
||||
Amount: line['amount'],
|
||||
Description: line['description'],
|
||||
DetailType: line['detailType'],
|
||||
};
|
||||
if (line['detailType'] === 'AccountBasedExpenseLineDetail') {
|
||||
if (!line['expenseAccountId']) {
|
||||
throw new Error(
|
||||
'Expense Category/Account ID is required for Account Based Expense Line Detail.',
|
||||
);
|
||||
}
|
||||
detail.AccountBasedExpenseLineDetail = {
|
||||
AccountRef: { value: line['expenseAccountId'] },
|
||||
};
|
||||
}
|
||||
return detail;
|
||||
});
|
||||
|
||||
if (lines.length === 0) {
|
||||
throw new Error('At least one line item is required.');
|
||||
}
|
||||
|
||||
const expensePayload: Partial<QuickbooksPurchase> = {
|
||||
AccountRef: { value: props['accountRef'] },
|
||||
PaymentType: props['paymentType'] as 'Cash' | 'Check' | 'CreditCard',
|
||||
Line: lines,
|
||||
...(props['entityRef'] && { EntityRef: { value: props['entityRef'] } as QuickbooksRef }),
|
||||
...(props['txnDate'] && { TxnDate: props['txnDate'].split('T')[0] }),
|
||||
...(props['privateNote'] && { PrivateNote: props['privateNote'] }),
|
||||
};
|
||||
|
||||
const endpoint = 'purchase';
|
||||
|
||||
const response = await httpClient.sendRequest<{
|
||||
Purchase: QuickbooksPurchase;
|
||||
time: string;
|
||||
Fault?: { Error: { Message: string; Detail?: string; code: string }[]; type: string };
|
||||
}>({
|
||||
method: HttpMethod.POST,
|
||||
url: `${apiUrl}/${endpoint}`,
|
||||
queryParams: { minorversion: '70' },
|
||||
headers: {
|
||||
Authorization: `Bearer ${access_token}`,
|
||||
Accept: 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: expensePayload,
|
||||
});
|
||||
|
||||
if (response.body.Fault) {
|
||||
throw new Error(
|
||||
`QuickBooks API Error creating expense: ${response.body.Fault.Error.map(
|
||||
(e: any) => e.Message,
|
||||
).join(', ')} - Detail: ${response.body.Fault.Error.map((e: any) => e.Detail).join(', ')}`,
|
||||
);
|
||||
}
|
||||
|
||||
return response.body.Purchase;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,233 @@
|
||||
import {
|
||||
createAction,
|
||||
Property,
|
||||
OAuth2PropertyValue,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
|
||||
import { quickbooksAuth } from '../index';
|
||||
import { QuickbooksEntityResponse, quickbooksCommon } from '../lib/common';
|
||||
import { QuickbooksCustomer, QuickbooksInvoice, QuickbooksRef } from '../lib/types';
|
||||
|
||||
export const createInvoiceAction = createAction({
|
||||
auth: quickbooksAuth,
|
||||
name: 'create_invoice',
|
||||
displayName: 'Create Invoice',
|
||||
description: 'Creates an invoice in QuickBooks.',
|
||||
props: {
|
||||
customerRef: Property.Dropdown({
|
||||
auth: quickbooksAuth,
|
||||
|
||||
displayName: 'Customer',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const { access_token, props } = auth as OAuth2PropertyValue;
|
||||
|
||||
const companyId = props?.['companyId'];
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId);
|
||||
|
||||
const query = `SELECT Id, DisplayName FROM Customer STARTPOSITION 1 MAXRESULTS 1000`;
|
||||
|
||||
const response = await httpClient.sendRequest<QuickbooksEntityResponse<QuickbooksCustomer>>(
|
||||
{
|
||||
method: HttpMethod.GET,
|
||||
url: `${apiUrl}/query`,
|
||||
queryParams: { query: query, minorversion: '70' },
|
||||
headers: {
|
||||
Authorization: `Bearer ${access_token}`,
|
||||
Accept: 'application/json',
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
if (response.body.Fault) {
|
||||
throw new Error(
|
||||
`QuickBooks API Error: ${response.body.Fault.Error.map(
|
||||
(e: { Message: string }) => e.Message,
|
||||
).join(', ')}`,
|
||||
);
|
||||
}
|
||||
|
||||
const customers = response.body.QueryResponse?.['Customer'] ?? [];
|
||||
return {
|
||||
disabled: false,
|
||||
options: customers.map((customer) => ({
|
||||
label: customer.DisplayName,
|
||||
value: customer.Id,
|
||||
})),
|
||||
};
|
||||
},
|
||||
}),
|
||||
lineItems: Property.Array({
|
||||
displayName: 'Line Items',
|
||||
description: 'Line items for the invoice',
|
||||
required: true,
|
||||
properties: {
|
||||
description: Property.ShortText({
|
||||
displayName: 'Description',
|
||||
required: false,
|
||||
}),
|
||||
amount: Property.Number({
|
||||
displayName: 'Amount',
|
||||
description: 'Total amount for this line (Exclusive of tax). Required.',
|
||||
required: true,
|
||||
}),
|
||||
detailType: Property.StaticDropdown({
|
||||
displayName: 'Detail Type',
|
||||
required: true,
|
||||
options: {
|
||||
options: [{ label: 'Sales Item Line Detail', value: 'SalesItemLineDetail' }],
|
||||
},
|
||||
defaultValue: 'SalesItemLineDetail',
|
||||
}),
|
||||
itemId: Property.ShortText({
|
||||
displayName: 'Item ID (Product/Service)',
|
||||
description:
|
||||
'Enter the ID of the Item (Product/Service). Required for SalesItemLineDetail.',
|
||||
required: true,
|
||||
}),
|
||||
quantity: Property.Number({
|
||||
displayName: 'Quantity',
|
||||
required: false,
|
||||
}),
|
||||
unitPrice: Property.Number({
|
||||
displayName: 'Unit Price',
|
||||
description:
|
||||
'If specified, Amount will be Qty * UnitPrice. If Amount is also specified, Amount overrides calculation.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
emailStatus: Property.StaticDropdown({
|
||||
displayName: 'Email Status',
|
||||
description: 'Specify whether the invoice should be emailed after creation.',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Not Set (Default - No Email)', value: 'NotSet' },
|
||||
{ label: 'Needs To Be Sent', value: 'NeedToSend' },
|
||||
],
|
||||
},
|
||||
defaultValue: 'NotSet',
|
||||
}),
|
||||
billEmail: Property.ShortText({
|
||||
displayName: 'Billing Email Address',
|
||||
description:
|
||||
'Email address to send the invoice to. Required if Email Status is "Needs To Be Sent". Overrides customer default.',
|
||||
required: false,
|
||||
}),
|
||||
dueDate: Property.DateTime({
|
||||
displayName: 'Due Date',
|
||||
description:
|
||||
'The date when the payment for the invoice is due. If not provided, default term from customer or company is used.',
|
||||
required: false,
|
||||
}),
|
||||
docNumber: Property.ShortText({
|
||||
displayName: 'Invoice Number',
|
||||
description:
|
||||
'Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.',
|
||||
required: false,
|
||||
}),
|
||||
txnDate: Property.DateTime({
|
||||
displayName: 'Transaction Date',
|
||||
description:
|
||||
'The date entered on the transaction. Defaults to the current date if not specified.',
|
||||
required: false,
|
||||
}),
|
||||
privateNote: Property.LongText({
|
||||
displayName: 'Private Note (Memo)',
|
||||
description: 'Note to self. Does not appear on the invoice sent to the customer.',
|
||||
required: false,
|
||||
}),
|
||||
customerMemo: Property.LongText({
|
||||
displayName: 'Customer Memo (Statement Memo)',
|
||||
description:
|
||||
'Memo to be displayed on the invoice sent to the customer (appears on statement).',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { access_token } = context.auth;
|
||||
const companyId = context.auth.props?.['companyId'];
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId as string);
|
||||
const props = context.propsValue;
|
||||
|
||||
if (props['emailStatus'] === 'NeedToSend' && !props['billEmail']) {
|
||||
throw new Error('Billing Email Address is required when Email Status is "Needs To Be Sent".');
|
||||
}
|
||||
|
||||
const lineItems = (props['lineItems'] as any[]).map((item: any) => {
|
||||
if (item['detailType'] === 'SalesItemLineDetail') {
|
||||
if (!item['itemId']) {
|
||||
throw new Error('Item ID is required for Sales Item Line Detail.');
|
||||
}
|
||||
return {
|
||||
Amount: item['amount'],
|
||||
DetailType: item['detailType'],
|
||||
Description: item['description'],
|
||||
SalesItemLineDetail: {
|
||||
ItemRef: { value: item['itemId'] } as QuickbooksRef,
|
||||
...(item['quantity'] != null && { Qty: item['quantity'] }),
|
||||
...(item['unitPrice'] != null && { UnitPrice: item['unitPrice'] }),
|
||||
},
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
Amount: item['amount'],
|
||||
DetailType: item['detailType'],
|
||||
Description: item['description'],
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
if (lineItems.length === 0) {
|
||||
throw new Error('At least one line item is required to create an invoice.');
|
||||
}
|
||||
|
||||
const invoicePayload = {
|
||||
Line: lineItems,
|
||||
CustomerRef: { value: props['customerRef'] } as QuickbooksRef,
|
||||
...(props['emailStatus'] && { EmailStatus: props['emailStatus'] }),
|
||||
...(props['billEmail'] && { BillEmail: { Address: props['billEmail'] } }),
|
||||
...(props['dueDate'] && { DueDate: props['dueDate'].split('T')[0] }),
|
||||
...(props['docNumber'] && { DocNumber: props['docNumber'] }),
|
||||
...(props['txnDate'] && { TxnDate: props['txnDate'].split('T')[0] }),
|
||||
...(props['privateNote'] && { PrivateNote: props['privateNote'] }),
|
||||
...(props['customerMemo'] && { CustomerMemo: { value: props['customerMemo'] } }),
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest<{
|
||||
Invoice: QuickbooksInvoice;
|
||||
time: string;
|
||||
Fault?: { Error: { Message: string; Detail?: string; code: string }[]; type: string };
|
||||
}>({
|
||||
method: HttpMethod.POST,
|
||||
url: `${apiUrl}/invoice`,
|
||||
queryParams: { minorversion: '70' },
|
||||
headers: {
|
||||
Authorization: `Bearer ${access_token}`,
|
||||
Accept: 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: invoicePayload,
|
||||
});
|
||||
|
||||
if (response.body.Fault) {
|
||||
throw new Error(
|
||||
`QuickBooks API Error: ${response.body.Fault.Error.map((e: any) => e.Message).join(
|
||||
', ',
|
||||
)} - ${response.body.Fault.Error.map((e: any) => e.Detail).join(', ')}`,
|
||||
);
|
||||
}
|
||||
|
||||
return response.body.Invoice;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,122 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod, httpClient, AuthenticationType } from '@activepieces/pieces-common';
|
||||
import { quickbooksAuth } from '../index';
|
||||
import { quickbooksCommon, QuickbooksEntityResponse } from '../lib/common';
|
||||
|
||||
export const findCustomerAction = createAction({
|
||||
auth: quickbooksAuth,
|
||||
name: 'find_customer',
|
||||
displayName: 'Find Customer',
|
||||
description: 'Search for a customer by display name in QuickBooks.',
|
||||
props: {
|
||||
search_term: Property.ShortText({
|
||||
displayName: 'Customer Name',
|
||||
description: 'The display name of the customer to search for.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { search_term } = context.propsValue;
|
||||
const companyId = context.auth.props?.['companyId'];
|
||||
|
||||
if (!companyId) {
|
||||
throw new Error('Realm ID not found in authentication data. Please reconnect your account.');
|
||||
}
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId as string);
|
||||
const query = `SELECT * FROM Customer WHERE DisplayName = '${search_term.replace(
|
||||
/'/g,
|
||||
"\\'",
|
||||
)}' MAXRESULTS 1`;
|
||||
|
||||
const response = await httpClient.sendRequest<QuickbooksEntityResponse<QuickBooksCustomer>>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${apiUrl}/query`,
|
||||
queryParams: {
|
||||
query: query,
|
||||
minorversion: '70',
|
||||
},
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
if (
|
||||
response.body?.QueryResponse?.['Customer'] &&
|
||||
response.body.QueryResponse['Customer'].length > 0
|
||||
) {
|
||||
return {
|
||||
found: true,
|
||||
result: response.body.QueryResponse['Customer'][0],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
found: false,
|
||||
result: {},
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
interface QuickBooksCustomer {
|
||||
Id: string;
|
||||
SyncToken: string;
|
||||
MetaData?: {
|
||||
CreateTime: string;
|
||||
LastUpdatedTime: string;
|
||||
};
|
||||
GivenName?: string;
|
||||
FamilyName?: string;
|
||||
FullyQualifiedName?: string;
|
||||
CompanyName?: string;
|
||||
DisplayName: string;
|
||||
PrintOnCheckName?: string;
|
||||
Active?: boolean;
|
||||
PrimaryPhone?: {
|
||||
FreeFormNumber: string;
|
||||
};
|
||||
PrimaryEmailAddr?: {
|
||||
Address: string;
|
||||
};
|
||||
BillAddr?: QuickBooksAddress;
|
||||
ShipAddr?: QuickBooksAddress;
|
||||
Notes?: string;
|
||||
Job?: boolean;
|
||||
BillWithParent?: boolean;
|
||||
ParentRef?: QuickBooksRef;
|
||||
Level?: number;
|
||||
Taxable?: boolean;
|
||||
Balance?: number;
|
||||
BalanceWithJobs?: number;
|
||||
CurrencyRef?: QuickBooksRef;
|
||||
PreferredDeliveryMethod?: string;
|
||||
PaymentMethodRef?: QuickBooksRef;
|
||||
domain?: string;
|
||||
sparse?: boolean;
|
||||
}
|
||||
|
||||
interface QuickBooksAddress {
|
||||
Id?: string;
|
||||
Line1?: string;
|
||||
Line2?: string;
|
||||
Line3?: string;
|
||||
Line4?: string;
|
||||
Line5?: string;
|
||||
City?: string;
|
||||
Country?: string;
|
||||
CountrySubDivisionCode?: string;
|
||||
PostalCode?: string;
|
||||
Lat?: string;
|
||||
Long?: string;
|
||||
Tag?: string;
|
||||
PostalCodeSuffix?: string;
|
||||
}
|
||||
|
||||
interface QuickBooksRef {
|
||||
value: string;
|
||||
name?: string;
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod, httpClient, AuthenticationType } from '@activepieces/pieces-common';
|
||||
import { quickbooksAuth } from '../index';
|
||||
import { quickbooksCommon, QuickbooksEntityResponse } from '../lib/common';
|
||||
|
||||
interface QuickBooksRef {
|
||||
value: string;
|
||||
name?: string;
|
||||
}
|
||||
|
||||
interface QuickBooksAddress {
|
||||
Id?: string;
|
||||
Line1?: string;
|
||||
Line2?: string;
|
||||
Line3?: string;
|
||||
Line4?: string;
|
||||
Line5?: string;
|
||||
City?: string;
|
||||
Country?: string;
|
||||
CountrySubDivisionCode?: string;
|
||||
PostalCode?: string;
|
||||
Lat?: string;
|
||||
Long?: string;
|
||||
Tag?: string;
|
||||
PostalCodeSuffix?: string;
|
||||
}
|
||||
|
||||
interface QuickBooksCustomField {
|
||||
DefinitionId: string;
|
||||
Name?: string;
|
||||
Type: string;
|
||||
StringValue?: string;
|
||||
}
|
||||
|
||||
interface QuickBooksLinkedTxn {
|
||||
TxnId: string;
|
||||
TxnType: string;
|
||||
}
|
||||
|
||||
interface QuickBooksTaxLineDetail {
|
||||
NetAmountTaxable?: number;
|
||||
TaxPercent?: number;
|
||||
TaxRateRef?: QuickBooksRef;
|
||||
PercentBased?: boolean;
|
||||
}
|
||||
|
||||
interface QuickBooksTaxLine {
|
||||
DetailType: string;
|
||||
Amount?: number;
|
||||
TaxLineDetail?: QuickBooksTaxLineDetail;
|
||||
}
|
||||
|
||||
interface QuickBooksInvoice {
|
||||
Id: string;
|
||||
SyncToken: string;
|
||||
MetaData?: {
|
||||
CreateTime: string;
|
||||
LastUpdatedTime: string;
|
||||
};
|
||||
CustomField?: QuickBooksCustomField[];
|
||||
DocNumber?: string;
|
||||
TxnDate?: string;
|
||||
domain?: string;
|
||||
sparse?: boolean;
|
||||
CustomerRef: QuickBooksRef;
|
||||
ProjectRef?: QuickBooksRef;
|
||||
SalesTermRef?: QuickBooksRef;
|
||||
BillEmail?: {
|
||||
Address: string;
|
||||
};
|
||||
TotalAmt?: number;
|
||||
CurrencyRef?: QuickBooksRef;
|
||||
LinkedTxn?: QuickBooksLinkedTxn[];
|
||||
Line: QuickBooksInvoiceLine[];
|
||||
TxnTaxDetail?: {
|
||||
TxnTaxCodeRef?: QuickBooksRef;
|
||||
TotalTax?: number;
|
||||
TaxLine?: QuickBooksTaxLine[];
|
||||
};
|
||||
DueDate?: string;
|
||||
Balance?: number;
|
||||
Deposit?: number;
|
||||
ApplyTaxAfterDiscount?: boolean;
|
||||
PrintStatus?: string;
|
||||
EmailStatus?: string;
|
||||
ShipAddr?: QuickBooksAddress;
|
||||
BillAddr?: QuickBooksAddress;
|
||||
CustomerMemo?: { value: string };
|
||||
}
|
||||
|
||||
interface QuickBooksInvoiceLine {
|
||||
Id?: string;
|
||||
LineNum?: number;
|
||||
Description?: string;
|
||||
Amount: number;
|
||||
DetailType: string;
|
||||
SalesItemLineDetail?: {
|
||||
ItemRef: QuickBooksRef;
|
||||
TaxCodeRef?: QuickBooksRef;
|
||||
UnitPrice?: number;
|
||||
Qty?: number;
|
||||
};
|
||||
SubTotalLineDetail?: {
|
||||
ItemRef?: QuickBooksRef;
|
||||
};
|
||||
}
|
||||
|
||||
export const findInvoiceAction = createAction({
|
||||
auth: quickbooksAuth,
|
||||
name: 'find_invoice',
|
||||
displayName: 'Find Invoice',
|
||||
description: 'Search for an invoice by its number in QuickBooks.',
|
||||
props: {
|
||||
invoice_number: Property.ShortText({
|
||||
displayName: 'Invoice Number',
|
||||
description: 'The document number (DocNumber) of the invoice to search for.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { invoice_number } = context.propsValue;
|
||||
const companyId = context.auth.props?.['companyId'];
|
||||
|
||||
if (!companyId) {
|
||||
throw new Error('Realm ID not found in authentication data. Please reconnect your account.');
|
||||
}
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId as string);
|
||||
const query = `SELECT * FROM Invoice WHERE DocNumber = '${invoice_number.replace(
|
||||
/'/g,
|
||||
"\\'",
|
||||
)}' MAXRESULTS 1`;
|
||||
|
||||
const response = await httpClient.sendRequest<QuickbooksEntityResponse<QuickBooksInvoice>>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${apiUrl}/query`,
|
||||
queryParams: {
|
||||
query: query,
|
||||
minorversion: '70',
|
||||
},
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
if (
|
||||
response.body?.QueryResponse?.['Invoice'] &&
|
||||
response.body.QueryResponse['Invoice'].length > 0
|
||||
) {
|
||||
return {
|
||||
found: true,
|
||||
result: response.body.QueryResponse['Invoice'][0],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
found: false,
|
||||
result: {},
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,97 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { quickbooksAuth } from '../index'; // Correct path relative to actions/find-payment.ts
|
||||
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
|
||||
import { quickbooksCommon, QuickbooksEntityResponse } from '../lib/common';
|
||||
|
||||
interface QuickbooksPayment {
|
||||
Id: string;
|
||||
SyncToken?: string;
|
||||
domain?: string;
|
||||
MetaData?: {
|
||||
CreateTime: string;
|
||||
LastUpdatedTime: string;
|
||||
};
|
||||
TxnDate?: string;
|
||||
CurrencyRef?: {
|
||||
value: string;
|
||||
name?: string;
|
||||
};
|
||||
CustomerRef: {
|
||||
value: string;
|
||||
name?: string;
|
||||
};
|
||||
DepositToAccountRef?: {
|
||||
value: string;
|
||||
name?: string;
|
||||
};
|
||||
ProjectRef?: {
|
||||
value: string;
|
||||
name?: string;
|
||||
};
|
||||
PaymentMethodRef?: {
|
||||
value: string;
|
||||
name?: string;
|
||||
};
|
||||
PaymentRefNum?: string;
|
||||
TotalAmt: number;
|
||||
UnappliedAmt?: number;
|
||||
ProcessPayment?: boolean;
|
||||
sparse?: boolean;
|
||||
Line?: {
|
||||
Amount: number;
|
||||
LinkedTxn?: {
|
||||
TxnId: string;
|
||||
TxnType: string;
|
||||
}[];
|
||||
LineEx?: any;
|
||||
}[];
|
||||
}
|
||||
|
||||
export const findPaymentAction = createAction({
|
||||
auth: quickbooksAuth,
|
||||
name: 'find_payment',
|
||||
displayName: 'Find Payment',
|
||||
description: 'Finds an existing payment in QuickBooks.',
|
||||
props: {
|
||||
customerId: Property.ShortText({
|
||||
displayName: 'Customer ID',
|
||||
description: 'The ID of the customer to find payments for.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { customerId } = context.propsValue;
|
||||
const companyId = context.auth.props?.['companyId'];
|
||||
|
||||
if (!companyId) {
|
||||
throw new Error('Realm ID not found in authentication data. Please reconnect.');
|
||||
}
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId as string);
|
||||
const query = `SELECT * FROM Payment WHERE CustomerRef = '${customerId}'`;
|
||||
|
||||
const response = await httpClient.sendRequest<QuickbooksEntityResponse<QuickbooksPayment>>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${apiUrl}/query?query=${encodeURIComponent(query)}&minorversion=70`,
|
||||
headers: {
|
||||
Authorization: `Bearer ${context.auth.access_token}`,
|
||||
Accept: 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
if (
|
||||
response.body.QueryResponse?.['Payment'] &&
|
||||
response.body.QueryResponse?.['Payment'].length > 0
|
||||
) {
|
||||
return {
|
||||
found: true,
|
||||
result: response.body.QueryResponse?.['Payment'],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
found: false,
|
||||
result: [],
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"Company ID": "Firmen-ID",
|
||||
"You can find Company ID under **settings->Additional Info**.": "Sie finden die Firmen-ID unter **Einstellungen->Weitere Info**.",
|
||||
"Find Invoice": "Rechnung finden",
|
||||
"Find Customer": "Kunde finden",
|
||||
"Find Payment": "Zahlung finden",
|
||||
"Create Invoice": "Rechnung erstellen",
|
||||
"Create Expense": "Ausgaben erstellen",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Search for an invoice by its number in QuickBooks.": "Suchen Sie eine Rechnung nach ihrer Nummer in QuickBooks.",
|
||||
"Search for a customer by display name in QuickBooks.": "Suche nach einem Kunden nach Anzeigenamen in QuickBooks.",
|
||||
"Finds an existing payment in QuickBooks.": "Findet eine bestehende Zahlung in QuickBooks.",
|
||||
"Creates an invoice in QuickBooks.": "Erstellt eine Rechnung in QuickBooks.",
|
||||
"Creates an expense transaction (purchase) in QuickBooks.": "Erstellt eine Ausgabentransaktion (Kauf) in QuickBooks.",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Invoice Number": "Rechnungsnummer",
|
||||
"Customer Name": "Kundenname",
|
||||
"Customer ID": "Kunden-ID",
|
||||
"Customer": "Kunde",
|
||||
"Line Items": "Zeilenelemente",
|
||||
"Email Status": "Email Status",
|
||||
"Billing Email Address": "Rechnungsadresse",
|
||||
"Due Date": "Fälligkeitsdatum",
|
||||
"Transaction Date": "Transaktionsdatum",
|
||||
"Private Note (Memo)": "Private Notiz (Memo)",
|
||||
"Customer Memo (Statement Memo)": "Kunden-Memo (Statement Memo)",
|
||||
"Bank/Credit Card Account": "Bank/Kreditkartenkonto",
|
||||
"Payment Type": "Zahlungsart",
|
||||
"Payee (Vendor)": "Payee (Vendor)",
|
||||
"Payment Date": "Zahlungsdatum",
|
||||
"Memo (Private Note)": "Notiz (Private Notiz)",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopfzeilen",
|
||||
"Query Parameters": "Abfrageparameter",
|
||||
"Body": "Körper",
|
||||
"Response is Binary ?": "Antwort ist binär?",
|
||||
"No Error on Failure": "Kein Fehler bei Fehler",
|
||||
"Timeout (in seconds)": "Timeout (in Sekunden)",
|
||||
"The document number (DocNumber) of the invoice to search for.": "Die Dokumentennummer (DocNumber) der zu suchenden Rechnung.",
|
||||
"The display name of the customer to search for.": "Der Anzeigename des zu suchenden Kunden.",
|
||||
"The ID of the customer to find payments for.": "Die ID des Kunden zu finden Zahlungen für.",
|
||||
"Line items for the invoice": "Artikel für die Rechnung",
|
||||
"Specify whether the invoice should be emailed after creation.": "Geben Sie an, ob die Rechnung nach der Erstellung per E-Mail versandt werden soll.",
|
||||
"Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.": "E-Mail-Adresse, an die die Rechnung gesendet werden soll. Wird benötigt, wenn der E-Mail-Status \"Gesendet werden muss\". Überschreibt die Kunden-Standardeinstellung.",
|
||||
"The date when the payment for the invoice is due. If not provided, default term from customer or company is used.": "Das Datum der Zahlung für die Rechnung ist fällig. Wenn nicht angegeben, wird die Zahlungsfrist des Kunden oder der Firma verwendet.",
|
||||
"Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.": "Optionale Referenznummer für die Rechnung. Falls nicht angegeben, weist QuickBooks die nächste sequentielle Nummer zu.",
|
||||
"The date entered on the transaction. Defaults to the current date if not specified.": "Das auf der Transaktion eingegebene Datum. Standardwert ist das aktuelle Datum, wenn nicht angegeben.",
|
||||
"Note to self. Does not appear on the invoice sent to the customer.": "Hinweis an sich. Wird nicht auf der Rechnung an den Kunden angezeigt.",
|
||||
"Memo to be displayed on the invoice sent to the customer (appears on statement).": "Memo wird auf der Rechnung angezeigt, die an den Kunden gesendet wird (erscheint auf Rechnung).",
|
||||
"The account from which the expense was paid.": "Das Konto, von dem die Kosten gezahlt wurden.",
|
||||
"Optional - The vendor the expense was paid to.": "Optional - Der Verkäufer, an den die Kosten gezahlt wurden.",
|
||||
"The date the expense occurred.": "Das Datum des Aufwands.",
|
||||
"Details of the expense (e.g., categories or items purchased). At least one line is required.": "Details des Aufwandes (z.B. Kategorien oder Artikel gekauft). Mindestens eine Zeile ist erforderlich.",
|
||||
"Internal note about the expense.": "Interne Notiz über die Kosten.",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
|
||||
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
|
||||
"Not Set (Default - No Email)": "Nicht gesetzt (Standard - keine E-Mail)",
|
||||
"Needs To Be Sent": "Muss gesendet werden",
|
||||
"Cash": "Bargeld",
|
||||
"Check": "Prüfen",
|
||||
"Credit Card": "Kreditkarte",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD",
|
||||
"New Invoice": "Neue Rechnung",
|
||||
"New Expense (Purchase)": "Neue Ausgaben (Urchase)",
|
||||
"New Customer": "Neuer Kunde",
|
||||
"New Deposit": "Neue Einzahlung",
|
||||
"New Transfer": "Neuer Transfer",
|
||||
"Triggers when an invoice is created .": "Wird ausgelöst, wenn eine Rechnung erstellt wird .",
|
||||
"Triggers when an Expense (Purchase) is created.": "Wird ausgelöst, wenn eine Ausgabe erstellt wird (Purchase).",
|
||||
"Triggers when a new customer is created.": "Wird ausgelöst, wenn ein neuer Kunde erstellt wird.",
|
||||
"Triggers when a Deposit is created.": "Wird ausgelöst, wenn eine Kaution erstellt wurde.",
|
||||
"Triggers when a Transfer is created.": "Wird ausgelöst, wenn ein Transfer erstellt wird."
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"Company ID": "ID de empresa",
|
||||
"You can find Company ID under **settings->Additional Info**.": "Puede encontrar el ID de la compañía en **ajustes->Información adicional**.",
|
||||
"Find Invoice": "Buscar factura",
|
||||
"Find Customer": "Buscar cliente",
|
||||
"Find Payment": "Buscar pago",
|
||||
"Create Invoice": "Crear factura",
|
||||
"Create Expense": "Crear gastos",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Search for an invoice by its number in QuickBooks.": "Busca una factura por número en QuickBooks.",
|
||||
"Search for a customer by display name in QuickBooks.": "Buscar un cliente por nombre para mostrar en QuickBooks.",
|
||||
"Finds an existing payment in QuickBooks.": "Encuentra un pago existente en QuickBooks.",
|
||||
"Creates an invoice in QuickBooks.": "Crea una factura en QuickBooks.",
|
||||
"Creates an expense transaction (purchase) in QuickBooks.": "Crea una transacción de gastos (compra) en QuickBooks.",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Invoice Number": "Número de factura",
|
||||
"Customer Name": "Nombre del cliente",
|
||||
"Customer ID": "ID del cliente",
|
||||
"Customer": "Cliente",
|
||||
"Line Items": "Ítems de línea",
|
||||
"Email Status": "Email Status",
|
||||
"Billing Email Address": "Dirección de email de facturación",
|
||||
"Due Date": "Fecha de fin",
|
||||
"Transaction Date": "Fecha de la transacción",
|
||||
"Private Note (Memo)": "Nota privada (Memo)",
|
||||
"Customer Memo (Statement Memo)": "Nota del cliente (declaración de memoria)",
|
||||
"Bank/Credit Card Account": "Cuenta bancaria/tarjeta de crédito",
|
||||
"Payment Type": "Tipo de pago",
|
||||
"Payee (Vendor)": "Payee (Vendor)",
|
||||
"Payment Date": "Fecha de pago",
|
||||
"Memo (Private Note)": "Memo (Nota privada)",
|
||||
"Method": "Método",
|
||||
"Headers": "Encabezados",
|
||||
"Query Parameters": "Parámetros de consulta",
|
||||
"Body": "Cuerpo",
|
||||
"Response is Binary ?": "¿Respuesta es binaria?",
|
||||
"No Error on Failure": "No hay ningún error en fallo",
|
||||
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
|
||||
"The document number (DocNumber) of the invoice to search for.": "El número de documento (DocNumber) de la factura a buscar.",
|
||||
"The display name of the customer to search for.": "El nombre mostrado del cliente a buscar.",
|
||||
"The ID of the customer to find payments for.": "El ID del cliente para encontrar pagos.",
|
||||
"Line items for the invoice": "Elementos de línea para la factura",
|
||||
"Specify whether the invoice should be emailed after creation.": "Especifique si la factura debe enviarse por correo electrónico después de la creación.",
|
||||
"Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.": "Dirección de correo electrónico a la que enviar la factura. Requerido si el estado del correo electrónico es \"Necesita ser enviado\". Reemplaza el valor predeterminado del cliente.",
|
||||
"The date when the payment for the invoice is due. If not provided, default term from customer or company is used.": "La fecha en que el pago de la factura es vencido. Si no se proporciona, se utiliza el término por defecto del cliente o la empresa.",
|
||||
"Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.": "Número de referencia opcional para la factura. Si no se proporciona, QuickBooks asigna el siguiente número secuencial.",
|
||||
"The date entered on the transaction. Defaults to the current date if not specified.": "La fecha introducida en la transacción. Por defecto es la fecha actual si no se especifica.",
|
||||
"Note to self. Does not appear on the invoice sent to the customer.": "Nota a sí misma. No aparece en la factura enviada al cliente.",
|
||||
"Memo to be displayed on the invoice sent to the customer (appears on statement).": "Nota que se mostrará en la factura enviada al cliente (aparece en el extracto).",
|
||||
"The account from which the expense was paid.": "La cuenta desde la cual se pagó el gasto.",
|
||||
"Optional - The vendor the expense was paid to.": "Opcional - El proveedor al que se pagó el gasto.",
|
||||
"The date the expense occurred.": "La fecha en que los gastos ocurrieron.",
|
||||
"Details of the expense (e.g., categories or items purchased). At least one line is required.": "Detalles del gasto (por ejemplo, categorías o artículos comprados). Se requiere al menos una línea.",
|
||||
"Internal note about the expense.": "Nota interna sobre el gasto.",
|
||||
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
|
||||
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
|
||||
"Not Set (Default - No Email)": "No establecido (por defecto - Sin correo electrónico)",
|
||||
"Needs To Be Sent": "Necesita ser enviado",
|
||||
"Cash": "Dinero",
|
||||
"Check": "Comprobar",
|
||||
"Credit Card": "Tarjeta de crédito",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO",
|
||||
"New Invoice": "Nueva factura",
|
||||
"New Expense (Purchase)": "Nuevo gasto (compra)",
|
||||
"New Customer": "Nuevo cliente",
|
||||
"New Deposit": "Nuevo depósito",
|
||||
"New Transfer": "Nueva transferencia",
|
||||
"Triggers when an invoice is created .": "Se activa cuando se crea una factura .",
|
||||
"Triggers when an Expense (Purchase) is created.": "Disparadores cuando se crea un gasto (Purchase).",
|
||||
"Triggers when a new customer is created.": "Dispara cuando se crea un nuevo cliente.",
|
||||
"Triggers when a Deposit is created.": "Dispara cuando se crea un depósito.",
|
||||
"Triggers when a Transfer is created.": "Dispara cuando se crea una transferencia."
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"Company ID": "ID de la société",
|
||||
"You can find Company ID under **settings->Additional Info**.": "Vous pouvez trouver l'ID de la société dans **paramètres->Infos supplémentaires**.",
|
||||
"Find Invoice": "Trouver une facture",
|
||||
"Find Customer": "Trouver le client",
|
||||
"Find Payment": "Trouver le paiement",
|
||||
"Create Invoice": "Créer une facture",
|
||||
"Create Expense": "Créer une dépense",
|
||||
"Custom API Call": "Appel API personnalisé",
|
||||
"Search for an invoice by its number in QuickBooks.": "Recherchez une facture par son numéro dans QuickBooks.",
|
||||
"Search for a customer by display name in QuickBooks.": "Rechercher un client par nom affiché dans QuickBooks.",
|
||||
"Finds an existing payment in QuickBooks.": "Trouve un paiement existant dans QuickBooks.",
|
||||
"Creates an invoice in QuickBooks.": "Crée une facture dans QuickBooks.",
|
||||
"Creates an expense transaction (purchase) in QuickBooks.": "Crée une transaction de dépense (achat) dans QuickBooks.",
|
||||
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
|
||||
"Invoice Number": "Numéro de facture",
|
||||
"Customer Name": "Nom du client",
|
||||
"Customer ID": "ID du client",
|
||||
"Customer": "Client",
|
||||
"Line Items": "Lignes",
|
||||
"Email Status": "Email Status",
|
||||
"Billing Email Address": "Adresse e-mail de facturation",
|
||||
"Due Date": "Date de fin",
|
||||
"Transaction Date": "Date de la transaction",
|
||||
"Private Note (Memo)": "Note privée (Mémo)",
|
||||
"Customer Memo (Statement Memo)": "Mémo client (Déclaration Mémo)",
|
||||
"Bank/Credit Card Account": "Compte bancaire/carte de crédit",
|
||||
"Payment Type": "Type de paiement",
|
||||
"Payee (Vendor)": "Payee (Vendor)",
|
||||
"Payment Date": "Date de paiement",
|
||||
"Memo (Private Note)": "Mémo (note privée)",
|
||||
"Method": "Méthode",
|
||||
"Headers": "En-têtes",
|
||||
"Query Parameters": "Paramètres de requête",
|
||||
"Body": "Corps",
|
||||
"Response is Binary ?": "La réponse est Binaire ?",
|
||||
"No Error on Failure": "Aucune erreur en cas d'échec",
|
||||
"Timeout (in seconds)": "Délai d'attente (en secondes)",
|
||||
"The document number (DocNumber) of the invoice to search for.": "Le numéro de document (DocNumber) de la facture à rechercher.",
|
||||
"The display name of the customer to search for.": "Le nom d'affichage du client à rechercher.",
|
||||
"The ID of the customer to find payments for.": "L'ID du client pour lequel trouver des paiements.",
|
||||
"Line items for the invoice": "Articles de la ligne pour la facture",
|
||||
"Specify whether the invoice should be emailed after creation.": "Indique si la facture doit être envoyée par e-mail après la création.",
|
||||
"Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.": "Adresse e-mail à laquelle envoyer la facture. Requis si le statut de l'e-mail est \"Besoin d'être envoyé\". Remplace la valeur par défaut du client.",
|
||||
"The date when the payment for the invoice is due. If not provided, default term from customer or company is used.": "La date à laquelle le paiement de la facture est dû. Si non fourni, le terme par défaut du client ou de la société est utilisé.",
|
||||
"Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.": "Numéro de référence optionnel pour la facture. Si non fourni, QuickBooks attribue le numéro séquentiel suivant.",
|
||||
"The date entered on the transaction. Defaults to the current date if not specified.": "La date saisie sur l'opération. La date courante par défaut n'est pas spécifiée.",
|
||||
"Note to self. Does not appear on the invoice sent to the customer.": "Note à soi. N'apparaît pas sur la facture envoyée au client.",
|
||||
"Memo to be displayed on the invoice sent to the customer (appears on statement).": "Mémo à afficher sur la facture envoyée au client (apparaît sur le relevé).",
|
||||
"The account from which the expense was paid.": "Le compte à partir duquel la dépense a été payée.",
|
||||
"Optional - The vendor the expense was paid to.": "Optionnel - Le vendeur auquel la dépense a été payée.",
|
||||
"The date the expense occurred.": "La date à laquelle la dépense s'est produite.",
|
||||
"Details of the expense (e.g., categories or items purchased). At least one line is required.": "Les détails de la dépense (p. ex., catégories ou articles achetés). Au moins une ligne est requise.",
|
||||
"Internal note about the expense.": "Note interne sur les dépenses.",
|
||||
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
|
||||
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
|
||||
"Not Set (Default - No Email)": "Non défini (Par défaut - Pas d'e-mail)",
|
||||
"Needs To Be Sent": "Doit être envoyé",
|
||||
"Cash": "Espèces",
|
||||
"Check": "Contrôler",
|
||||
"Credit Card": "Carte de Crédit",
|
||||
"GET": "OBTENIR",
|
||||
"POST": "POSTER",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "EFFACER",
|
||||
"DELETE": "SUPPRIMER",
|
||||
"HEAD": "TÊTE",
|
||||
"New Invoice": "Nouvelle facture",
|
||||
"New Expense (Purchase)": "Nouvelles dépenses (Purchase)",
|
||||
"New Customer": "Nouveau client",
|
||||
"New Deposit": "Nouveau dépôt",
|
||||
"New Transfer": "Nouveau transfert",
|
||||
"Triggers when an invoice is created .": "Déclenche quand une facture est créée .",
|
||||
"Triggers when an Expense (Purchase) is created.": "Déclenche quand une dépense (Purchase) est créée.",
|
||||
"Triggers when a new customer is created.": "Déclenche lorsqu'un nouveau client est créé.",
|
||||
"Triggers when a Deposit is created.": "Déclenche lorsqu'un dépôt est créé.",
|
||||
"Triggers when a Transfer is created.": "Déclenche lorsqu'un transfert est créé."
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"Company ID": "会社ID",
|
||||
"You can find Company ID under **settings->Additional Info**.": "会社IDは **settings->Additional Info** で確認できます。",
|
||||
"Find Invoice": "請求書を検索",
|
||||
"Find Customer": "顧客検索",
|
||||
"Find Payment": "支払いを検索",
|
||||
"Create Invoice": "請求書を作成",
|
||||
"Create Expense": "支出を作成",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Search for an invoice by its number in QuickBooks.": "QuickBooksの番号で請求書を検索します。",
|
||||
"Search for a customer by display name in QuickBooks.": "QuickBooksのディスプレイ名で顧客を検索します。",
|
||||
"Finds an existing payment in QuickBooks.": "QuickBooksの既存の支払いを検索します。",
|
||||
"Creates an invoice in QuickBooks.": "QuickBooksで請求書を作成します。",
|
||||
"Creates an expense transaction (purchase) in QuickBooks.": "QuickBooksで経費取引(購入)を作成します。",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Invoice Number": "請求書番号",
|
||||
"Customer Name": "顧客名",
|
||||
"Customer ID": "顧客 ID",
|
||||
"Customer": "顧客",
|
||||
"Line Items": "行の項目",
|
||||
"Email Status": "Email Status",
|
||||
"Billing Email Address": "請求先メールアドレス",
|
||||
"Due Date": "締切日",
|
||||
"Transaction Date": "取引日",
|
||||
"Private Note (Memo)": "プライベートメモ(メモ)",
|
||||
"Customer Memo (Statement Memo)": "Customer Memo (Statement Memo)",
|
||||
"Bank/Credit Card Account": "銀行/クレジットカードアカウント",
|
||||
"Payment Type": "支払いタイプ",
|
||||
"Payee (Vendor)": "Payee (Vendor)",
|
||||
"Payment Date": "支払日",
|
||||
"Memo (Private Note)": "メモ (プライベートノート)",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"The document number (DocNumber) of the invoice to search for.": "検索する請求書のドキュメント番号 (DocNumber)",
|
||||
"The display name of the customer to search for.": "検索する顧客の表示名",
|
||||
"The ID of the customer to find payments for.": "支払いを見つけるための顧客ID。",
|
||||
"Line items for the invoice": "請求書の行項目",
|
||||
"Specify whether the invoice should be emailed after creation.": "作成後に請求書を電子メールで送信するかどうかを指定します。",
|
||||
"Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.": "請求書を送信するメールアドレスです。メールステータスが「送信済み」の場合に必要です。顧客のデフォルトを上書きします。",
|
||||
"The date when the payment for the invoice is due. If not provided, default term from customer or company is used.": "請求書の支払い期限の日付。指定されていない場合は、顧客または会社からのデフォルトの期間が使用されます。",
|
||||
"Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.": "請求書のオプションの参照番号。指定されていない場合、QuickBooksは次の連続番号を割り当てます。",
|
||||
"The date entered on the transaction. Defaults to the current date if not specified.": "The date entered on the transaction. Defaults to the current date if not specified.",
|
||||
"Note to self. Does not appear on the invoice sent to the customer.": "顧客に送信された請求書には表示されません。",
|
||||
"Memo to be displayed on the invoice sent to the customer (appears on statement).": "顧客に送信された請求書にメモを表示します (ステートメントに表示されます)。",
|
||||
"The account from which the expense was paid.": "費用が支払われた口座。",
|
||||
"Optional - The vendor the expense was paid to.": "オプション - 費用が支払われたベンダー。",
|
||||
"The date the expense occurred.": "費用が発生した日付。",
|
||||
"Details of the expense (e.g., categories or items purchased). At least one line is required.": "費用の詳細(例:カテゴリまたは商品の購入)。少なくとも1行以上が必要です。",
|
||||
"Internal note about the expense.": "費用についての内部メモ。",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"Not Set (Default - No Email)": "設定されていません (デフォルト - メールはありません)",
|
||||
"Needs To Be Sent": "送信が必要",
|
||||
"Cash": "現金",
|
||||
"Check": "チェック",
|
||||
"Credit Card": "クレジットカード",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭",
|
||||
"New Invoice": "新しい請求書",
|
||||
"New Expense (Purchase)": "新しい支出(購入)",
|
||||
"New Customer": "新規顧客",
|
||||
"New Deposit": "新規デポジット数",
|
||||
"New Transfer": "新しい送金",
|
||||
"Triggers when an invoice is created .": "請求書が作成されたときにトリガーされます。",
|
||||
"Triggers when an Expense (Purchase) is created.": "経費(Purchase)が作成されたときにトリガーします。",
|
||||
"Triggers when a new customer is created.": "新しい顧客が作成されたときにトリガーします.",
|
||||
"Triggers when a Deposit is created.": "デポジットが作成されたときにトリガーします。",
|
||||
"Triggers when a Transfer is created.": "転送が作成されたときにトリガーします。"
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"Company ID": "Bedrijf ID",
|
||||
"You can find Company ID under **settings->Additional Info**.": "U kunt het Bedrijfs-ID vinden onder **instellingen>Aanvullende informatie**.",
|
||||
"Find Invoice": "Factuur zoeken",
|
||||
"Find Customer": "Klant zoeken",
|
||||
"Find Payment": "Betaling zoeken",
|
||||
"Create Invoice": "Factuur aanmaken",
|
||||
"Create Expense": "Kosten aanmaken",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Search for an invoice by its number in QuickBooks.": "Zoek naar een factuur volgens het nummer in QuickBooks.",
|
||||
"Search for a customer by display name in QuickBooks.": "Zoek naar een klant op weergave naam in QuickBooks.",
|
||||
"Finds an existing payment in QuickBooks.": "Vindt een bestaande betaling in QuickBooks.",
|
||||
"Creates an invoice in QuickBooks.": "Maakt een factuur in QuickBooks.",
|
||||
"Creates an expense transaction (purchase) in QuickBooks.": "Maakt een uitgave transactie aan (aankoop) in QuickBooks.",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Invoice Number": "Factuur Nummer",
|
||||
"Customer Name": "Klant naam",
|
||||
"Customer ID": "Klant ID",
|
||||
"Customer": "Klant",
|
||||
"Line Items": "Posities regel",
|
||||
"Email Status": "Email Status",
|
||||
"Billing Email Address": "E-mailadres voor facturering",
|
||||
"Due Date": "Inleverdatum",
|
||||
"Transaction Date": "Transactie datum",
|
||||
"Private Note (Memo)": "Privénotitie (Notitie)",
|
||||
"Customer Memo (Statement Memo)": "Klant Memo (declaratie memo)",
|
||||
"Bank/Credit Card Account": "Bank/creditcard rekening",
|
||||
"Payment Type": "Betalings Type",
|
||||
"Payee (Vendor)": "Payee (Vendor)",
|
||||
"Payment Date": "Datum betaling",
|
||||
"Memo (Private Note)": "Memo (Private Notitie)",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopteksten",
|
||||
"Query Parameters": "Query parameters",
|
||||
"Body": "Lichaam",
|
||||
"Response is Binary ?": "Antwoord is binair?",
|
||||
"No Error on Failure": "Geen fout bij fout",
|
||||
"Timeout (in seconds)": "Time-out (in seconden)",
|
||||
"The document number (DocNumber) of the invoice to search for.": "Het documentnummer (DocNumber) van de te zoeken factuur",
|
||||
"The display name of the customer to search for.": "De weergavenaam van de klant om naar te zoeken",
|
||||
"The ID of the customer to find payments for.": "Het ID van de klant om betalingen voor te vinden.",
|
||||
"Line items for the invoice": "Posities voor de factuur",
|
||||
"Specify whether the invoice should be emailed after creation.": "Specificeer of de factuur gemaild moet worden na creatie.",
|
||||
"Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.": "E-mailadres om de factuur naar te verzenden. Vereist als E-mail Status is \"Moet worden verzonden\". Overschrijft de klant standaard.",
|
||||
"The date when the payment for the invoice is due. If not provided, default term from customer or company is used.": "De datum waarop de betaling voor de factuur is gedaan. Indien niet opgegeven, wordt de standaard termijn van klant of bedrijf gebruikt.",
|
||||
"Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.": "Optionele referentienummer voor de factuur. Indien niet opgegeven, QuickBooks wijst het volgende opeenvolgende aantal toe.",
|
||||
"The date entered on the transaction. Defaults to the current date if not specified.": "De datum die is ingevoerd op de transactie. Standaard de huidige datum als deze niet is opgegeven.",
|
||||
"Note to self. Does not appear on the invoice sent to the customer.": "Opmerking voor zichzelf. Wordt niet weergegeven op de factuur die naar de klant is verzonden.",
|
||||
"Memo to be displayed on the invoice sent to the customer (appears on statement).": "Notitie om te worden getoond op de naar de klant verzonden factuur (verschijnt op de verklaring).",
|
||||
"The account from which the expense was paid.": "De rekening waarvan de uitgave is betaald.",
|
||||
"Optional - The vendor the expense was paid to.": "Optioneel - De verkoper waar de uitgave betaald werd.",
|
||||
"The date the expense occurred.": "De datum waarop de uitgave heeft plaatsgevonden.",
|
||||
"Details of the expense (e.g., categories or items purchased). At least one line is required.": "Details van de uitgave (bv. categorieën of items gekocht). Ten minste één regel is vereist.",
|
||||
"Internal note about the expense.": "Interne notitie over de kosten.",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
|
||||
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
|
||||
"Not Set (Default - No Email)": "Niet ingesteld (standaard - Geen E-mail)",
|
||||
"Needs To Be Sent": "Moet verzonden worden",
|
||||
"Cash": "Contant",
|
||||
"Check": "Controleer",
|
||||
"Credit Card": "Creditcard",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD",
|
||||
"New Invoice": "Nieuwe factuur",
|
||||
"New Expense (Purchase)": "Nieuwe kosten (Purchase)",
|
||||
"New Customer": "Nieuwe klant",
|
||||
"New Deposit": "Nieuwe storting",
|
||||
"New Transfer": "Nieuwe overschrijving",
|
||||
"Triggers when an invoice is created .": "Triggert wanneer een factuur is aangemaakt.",
|
||||
"Triggers when an Expense (Purchase) is created.": "Triggert wanneer een uitgave (Purchase) is aangemaakt.",
|
||||
"Triggers when a new customer is created.": "Triggert wanneer een nieuwe klant wordt aangemaakt.",
|
||||
"Triggers when a Deposit is created.": "Triggert wanneer een storting is aangemaakt.",
|
||||
"Triggers when a Transfer is created.": "Triggert wanneer een Transfer is aangemaakt."
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"Company ID": "ID da Empresa",
|
||||
"You can find Company ID under **settings->Additional Info**.": "Você pode encontrar o ID da empresa em **configurações->Informações adicionais**.",
|
||||
"Find Invoice": "Encontrar fatura",
|
||||
"Find Customer": "Encontrar o cliente",
|
||||
"Find Payment": "Encontrar pagamento",
|
||||
"Create Invoice": "Criar fatura",
|
||||
"Create Expense": "Criar Despesa",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Search for an invoice by its number in QuickBooks.": "Pesquisar uma fatura por seu número no QuickBooks.",
|
||||
"Search for a customer by display name in QuickBooks.": "Procure um cliente por nome de exibição no QuickBooks.",
|
||||
"Finds an existing payment in QuickBooks.": "Encontrar um pagamento existente no QuickBooks.",
|
||||
"Creates an invoice in QuickBooks.": "Cria uma fatura em QuickBooks.",
|
||||
"Creates an expense transaction (purchase) in QuickBooks.": "Cria uma transação de despesa (compra) no QuickBooks.",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Invoice Number": "Número da fatura",
|
||||
"Customer Name": "Nome do cliente",
|
||||
"Customer ID": "ID do cliente",
|
||||
"Customer": "Cliente",
|
||||
"Line Items": "Itens da linha",
|
||||
"Email Status": "Email Status",
|
||||
"Billing Email Address": "Endereço de Cobrança",
|
||||
"Due Date": "Data de vencimento",
|
||||
"Transaction Date": "Data da transação",
|
||||
"Private Note (Memo)": "Nota Privada (Memo)",
|
||||
"Customer Memo (Statement Memo)": "Memorando do cliente (declaração emo)",
|
||||
"Bank/Credit Card Account": "Conta Banco/Cartão de Crédito",
|
||||
"Payment Type": "Tipo de Pagamento",
|
||||
"Payee (Vendor)": "Payee (Vendor)",
|
||||
"Payment Date": "Data do pagamento",
|
||||
"Memo (Private Note)": "Memo (Nota Privada)",
|
||||
"Method": "Método",
|
||||
"Headers": "Cabeçalhos",
|
||||
"Query Parameters": "Parâmetros da consulta",
|
||||
"Body": "Conteúdo",
|
||||
"Response is Binary ?": "A resposta é binária ?",
|
||||
"No Error on Failure": "Nenhum erro no Failure",
|
||||
"Timeout (in seconds)": "Tempo limite (em segundos)",
|
||||
"The document number (DocNumber) of the invoice to search for.": "O número do documento (DocNumber) da fatura a ser pesquisada.",
|
||||
"The display name of the customer to search for.": "O nome de exibição do cliente a procurar",
|
||||
"The ID of the customer to find payments for.": "O ID do cliente para encontrar os pagamentos.",
|
||||
"Line items for the invoice": "Itens de linha para a fatura",
|
||||
"Specify whether the invoice should be emailed after creation.": "Especifique se a fatura deve ser enviada por e-mail após a criação.",
|
||||
"Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.": "Endereço de e-mail para enviar a fatura. Obrigatório se o status do e-mail for \"Precisa ser enviado\". Substitui o padrão do cliente.",
|
||||
"The date when the payment for the invoice is due. If not provided, default term from customer or company is used.": "A data de vencimento do pagamento da fatura. Se não for fornecido, será usado o termo padrão do cliente ou da empresa.",
|
||||
"Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.": "Número de referência opcional para a fatura. Se não fornecido, QuickBooks atribui o próximo número sequencial.",
|
||||
"The date entered on the transaction. Defaults to the current date if not specified.": "A data inserida na transação. O padrão é a data atual se não for especificado.",
|
||||
"Note to self. Does not appear on the invoice sent to the customer.": "Nota para si mesmo. Não aparece na fatura enviada ao cliente.",
|
||||
"Memo to be displayed on the invoice sent to the customer (appears on statement).": "O memorando a ser exibido na fatura enviada ao cliente (aparece na declaração).",
|
||||
"The account from which the expense was paid.": "A conta a partir da qual a despesa foi paga.",
|
||||
"Optional - The vendor the expense was paid to.": "Opcional - O fornecedor para o qual a despesa foi paga.",
|
||||
"The date the expense occurred.": "A data em que ocorreu a despesa.",
|
||||
"Details of the expense (e.g., categories or items purchased). At least one line is required.": "Detalhes da despesa (por exemplo, categorias ou itens comprados). Pelo menos uma linha é necessária.",
|
||||
"Internal note about the expense.": "Nota interna sobre a despesa.",
|
||||
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
|
||||
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
|
||||
"Not Set (Default - No Email)": "Não definido (padrão - Sem e-mail)",
|
||||
"Needs To Be Sent": "Precisa ser enviado",
|
||||
"Cash": "Dinheiro",
|
||||
"Check": "Verificar",
|
||||
"Credit Card": "Cartão de Crédito",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA",
|
||||
"New Invoice": "Nova fatura",
|
||||
"New Expense (Purchase)": "Nova Despesa (Purchase)",
|
||||
"New Customer": "Novo Cliente",
|
||||
"New Deposit": "Novo Depósito",
|
||||
"New Transfer": "Nova Transferência",
|
||||
"Triggers when an invoice is created .": "Aciona quando uma fatura é criada.",
|
||||
"Triggers when an Expense (Purchase) is created.": "Aciona quando uma despesa (Purchase) é criada.",
|
||||
"Triggers when a new customer is created.": "Dispara quando um novo cliente é criado.",
|
||||
"Triggers when a Deposit is created.": "Dispara quando um depósito é criado.",
|
||||
"Triggers when a Transfer is created.": "Dispara quando uma transferência é criada."
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"Quickbooks Online": "С quickbooks онлайн",
|
||||
"Company ID": "ID Компании",
|
||||
"You can find Company ID under **settings->Additional Info**.": "Вы можете найти ID компании в разделе **settings->Дополнительная информация**.",
|
||||
"Find Invoice": "Найти счет",
|
||||
"Find Customer": "Найти клиента",
|
||||
"Find Payment": "Найти платеж",
|
||||
"Create Invoice": "Создать счет",
|
||||
"Create Expense": "Создать расход",
|
||||
"Custom API Call": "Пользовательский вызов API",
|
||||
"Search for an invoice by its number in QuickBooks.": "Поиск счета по его количеству в quickbooks",
|
||||
"Search for a customer by display name in QuickBooks.": "Поиск клиента по имени в quickbooks",
|
||||
"Finds an existing payment in QuickBooks.": "Находит существующий платеж в quickbooks",
|
||||
"Creates an invoice in QuickBooks.": "Создает счет в quickbooks",
|
||||
"Creates an expense transaction (purchase) in QuickBooks.": "Создает транзакцию расходов (покупки) в quickbooks .",
|
||||
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
|
||||
"Invoice Number": "Номер счёта",
|
||||
"Customer Name": "Имя клиента",
|
||||
"Customer ID": "ID клиента",
|
||||
"Customer": "Покупатель",
|
||||
"Line Items": "Позиции",
|
||||
"Email Status": "Email Status",
|
||||
"Billing Email Address": "Адрес электронной почты для выставления счетов",
|
||||
"Due Date": "Срок сдачи",
|
||||
"Transaction Date": "Дата транзакции",
|
||||
"Private Note (Memo)": "Приватная заметка (Memo)",
|
||||
"Customer Memo (Statement Memo)": "Запоминание о клиенте (Statement Memo)",
|
||||
"Bank/Credit Card Account": "Банковский/кредитный счет",
|
||||
"Payment Type": "Тип платежа",
|
||||
"Payee (Vendor)": "Payee (Vendor)",
|
||||
"Payment Date": "Дата оплаты",
|
||||
"Memo (Private Note)": "Заметка (личная заметка)",
|
||||
"Method": "Метод",
|
||||
"Headers": "Заголовки",
|
||||
"Query Parameters": "Параметры запроса",
|
||||
"Body": "Тело",
|
||||
"No Error on Failure": "Нет ошибок при ошибке",
|
||||
"Timeout (in seconds)": "Таймаут (в секундах)",
|
||||
"The document number (DocNumber) of the invoice to search for.": "Номер документа (DocNumber) счета-фактуры для поиска.",
|
||||
"The display name of the customer to search for.": "Отображаемое имя клиента для поиска.",
|
||||
"The ID of the customer to find payments for.": "ID клиента для поиска платежей.",
|
||||
"Line items for the invoice": "Позиции для счета-фактуры",
|
||||
"Specify whether the invoice should be emailed after creation.": "Укажите, должен ли счет быть отправлен по электронной почте после создания.",
|
||||
"Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.": "Адрес эл. почты для отправки счета. Обязательно, если статус эл. почты \"Должен быть отправлен\". Переопределяет клиента по умолчанию.",
|
||||
"The date when the payment for the invoice is due. If not provided, default term from customer or company is used.": "Дата, когда причитается оплата за счет. Если не указано, используется срок по умолчанию от клиента или компании.",
|
||||
"Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.": "Необязательный номер счёта. Если он не указан, QuickBooks назначает следующий порядковый номер.",
|
||||
"The date entered on the transaction. Defaults to the current date if not specified.": "Дата введенная в транзакции. По умолчанию текущая дата, если не указана.",
|
||||
"Note to self. Does not appear on the invoice sent to the customer.": "Примечание для себя. Не появляется в счете, отправленном клиенту.",
|
||||
"Memo to be displayed on the invoice sent to the customer (appears on statement).": "Примечание, отображаемое в счете, отправленном клиенту (отображается в выписке).",
|
||||
"The account from which the expense was paid.": "Счет, с которого были оплачены расходы.",
|
||||
"Optional - The vendor the expense was paid to.": "Необязательный - Продавец был оплачен.",
|
||||
"The date the expense occurred.": "Дата совершения расхода.",
|
||||
"Details of the expense (e.g., categories or items purchased). At least one line is required.": "Детали расходов (например, категории или товары). Требуется хотя бы одна строка.",
|
||||
"Internal note about the expense.": "Внутренняя заметка о расходе.",
|
||||
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
|
||||
"Not Set (Default - No Email)": "Не установлено (по умолчанию - нет Email)",
|
||||
"Needs To Be Sent": "Нужно отправить",
|
||||
"Cash": "Наличные",
|
||||
"Check": "Проверить",
|
||||
"Credit Card": "Кредитная карта",
|
||||
"GET": "ПОЛУЧИТЬ",
|
||||
"POST": "ПОСТ",
|
||||
"PATCH": "ПАТЧ",
|
||||
"PUT": "ПОКУПИТЬ",
|
||||
"DELETE": "УДАЛИТЬ",
|
||||
"HEAD": "HEAD",
|
||||
"New Invoice": "Новый счет",
|
||||
"New Expense (Purchase)": "Новые расходы (покупки)",
|
||||
"New Customer": "Новый клиент",
|
||||
"New Deposit": "Новый депозит",
|
||||
"New Transfer": "Новый перевод",
|
||||
"Triggers when an invoice is created .": "Включает при создании счета-фактуры .",
|
||||
"Triggers when an Expense (Purchase) is created.": "Триггеры при оплате (покупке).",
|
||||
"Triggers when a new customer is created.": "Триггеры при создании нового клиента.",
|
||||
"Triggers when a Deposit is created.": "Триггеры при внесении депозита.",
|
||||
"Triggers when a Transfer is created.": "Триггеры при создании перевода."
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"Company ID": "Company ID",
|
||||
"You can find Company ID under **settings->Additional Info**.": "You can find Company ID under **settings->Additional Info**.",
|
||||
"Find Invoice": "Find Invoice",
|
||||
"Find Customer": "Find Customer",
|
||||
"Find Payment": "Find Payment",
|
||||
"Create Invoice": "Create Invoice",
|
||||
"Create Expense": "Create Expense",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Search for an invoice by its number in QuickBooks.": "Search for an invoice by its number in QuickBooks.",
|
||||
"Search for a customer by display name in QuickBooks.": "Search for a customer by display name in QuickBooks.",
|
||||
"Finds an existing payment in QuickBooks.": "Finds an existing payment in QuickBooks.",
|
||||
"Creates an invoice in QuickBooks.": "Creates an invoice in QuickBooks.",
|
||||
"Creates an expense transaction (purchase) in QuickBooks.": "Creates an expense transaction (purchase) in QuickBooks.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Invoice Number": "Invoice Number",
|
||||
"Customer Name": "Customer Name",
|
||||
"Customer ID": "Customer ID",
|
||||
"Customer": "Customer",
|
||||
"Line Items": "Line Items",
|
||||
"Email Status": "Email Status",
|
||||
"Billing Email Address": "Billing Email Address",
|
||||
"Due Date": "Due Date",
|
||||
"Transaction Date": "Transaction Date",
|
||||
"Private Note (Memo)": "Private Note (Memo)",
|
||||
"Customer Memo (Statement Memo)": "Customer Memo (Statement Memo)",
|
||||
"Bank/Credit Card Account": "Bank/Credit Card Account",
|
||||
"Payment Type": "Payment Type",
|
||||
"Payee (Vendor)": "Payee (Vendor)",
|
||||
"Payment Date": "Payment Date",
|
||||
"Memo (Private Note)": "Memo (Private Note)",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"The document number (DocNumber) of the invoice to search for.": "The document number (DocNumber) of the invoice to search for.",
|
||||
"The display name of the customer to search for.": "The display name of the customer to search for.",
|
||||
"The ID of the customer to find payments for.": "The ID of the customer to find payments for.",
|
||||
"Line items for the invoice": "Line items for the invoice",
|
||||
"Specify whether the invoice should be emailed after creation.": "Specify whether the invoice should be emailed after creation.",
|
||||
"Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.": "Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.",
|
||||
"The date when the payment for the invoice is due. If not provided, default term from customer or company is used.": "The date when the payment for the invoice is due. If not provided, default term from customer or company is used.",
|
||||
"Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.": "Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.",
|
||||
"The date entered on the transaction. Defaults to the current date if not specified.": "The date entered on the transaction. Defaults to the current date if not specified.",
|
||||
"Note to self. Does not appear on the invoice sent to the customer.": "Note to self. Does not appear on the invoice sent to the customer.",
|
||||
"Memo to be displayed on the invoice sent to the customer (appears on statement).": "Memo to be displayed on the invoice sent to the customer (appears on statement).",
|
||||
"The account from which the expense was paid.": "The account from which the expense was paid.",
|
||||
"Optional - The vendor the expense was paid to.": "Optional - The vendor the expense was paid to.",
|
||||
"The date the expense occurred.": "The date the expense occurred.",
|
||||
"Details of the expense (e.g., categories or items purchased). At least one line is required.": "Details of the expense (e.g., categories or items purchased). At least one line is required.",
|
||||
"Internal note about the expense.": "Internal note about the expense.",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"Not Set (Default - No Email)": "Not Set (Default - No Email)",
|
||||
"Needs To Be Sent": "Needs To Be Sent",
|
||||
"Cash": "Cash",
|
||||
"Check": "Check",
|
||||
"Credit Card": "Credit Card",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Invoice": "New Invoice",
|
||||
"New Expense (Purchase)": "New Expense (Purchase)",
|
||||
"New Customer": "New Customer",
|
||||
"New Deposit": "New Deposit",
|
||||
"New Transfer": "New Transfer",
|
||||
"Triggers when an invoice is created .": "Triggers when an invoice is created .",
|
||||
"Triggers when an Expense (Purchase) is created.": "Triggers when an Expense (Purchase) is created.",
|
||||
"Triggers when a new customer is created.": "Triggers when a new customer is created.",
|
||||
"Triggers when a Deposit is created.": "Triggers when a Deposit is created.",
|
||||
"Triggers when a Transfer is created.": "Triggers when a Transfer is created."
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"Quickbooks Online": "Quickbooks Online",
|
||||
"Company ID": "Company ID",
|
||||
"You can find Company ID under **settings->Additional Info**.": "You can find Company ID under **settings->Additional Info**.",
|
||||
"Find Invoice": "Find Invoice",
|
||||
"Find Customer": "Find Customer",
|
||||
"Find Payment": "Find Payment",
|
||||
"Create Invoice": "Create Invoice",
|
||||
"Create Expense": "Create Expense",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Search for an invoice by its number in QuickBooks.": "Search for an invoice by its number in QuickBooks.",
|
||||
"Search for a customer by display name in QuickBooks.": "Search for a customer by display name in QuickBooks.",
|
||||
"Finds an existing payment in QuickBooks.": "Finds an existing payment in QuickBooks.",
|
||||
"Creates an invoice in QuickBooks.": "Creates an invoice in QuickBooks.",
|
||||
"Creates an expense transaction (purchase) in QuickBooks.": "Creates an expense transaction (purchase) in QuickBooks.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Invoice Number": "Invoice Number",
|
||||
"Customer Name": "Customer Name",
|
||||
"Customer ID": "Customer ID",
|
||||
"Customer": "Customer",
|
||||
"Line Items": "Line Items",
|
||||
"Email Status": "Email Status",
|
||||
"Billing Email Address": "Billing Email Address",
|
||||
"Due Date": "Due Date",
|
||||
"Transaction Date": "Transaction Date",
|
||||
"Private Note (Memo)": "Private Note (Memo)",
|
||||
"Customer Memo (Statement Memo)": "Customer Memo (Statement Memo)",
|
||||
"Bank/Credit Card Account": "Bank/Credit Card Account",
|
||||
"Payment Type": "Payment Type",
|
||||
"Payee (Vendor)": "Payee (Vendor)",
|
||||
"Payment Date": "Payment Date",
|
||||
"Memo (Private Note)": "Memo (Private Note)",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"The document number (DocNumber) of the invoice to search for.": "The document number (DocNumber) of the invoice to search for.",
|
||||
"The display name of the customer to search for.": "The display name of the customer to search for.",
|
||||
"The ID of the customer to find payments for.": "The ID of the customer to find payments for.",
|
||||
"Line items for the invoice": "Line items for the invoice",
|
||||
"Specify whether the invoice should be emailed after creation.": "Specify whether the invoice should be emailed after creation.",
|
||||
"Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.": "Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.",
|
||||
"The date when the payment for the invoice is due. If not provided, default term from customer or company is used.": "The date when the payment for the invoice is due. If not provided, default term from customer or company is used.",
|
||||
"Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.": "Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.",
|
||||
"The date entered on the transaction. Defaults to the current date if not specified.": "The date entered on the transaction. Defaults to the current date if not specified.",
|
||||
"Note to self. Does not appear on the invoice sent to the customer.": "Note to self. Does not appear on the invoice sent to the customer.",
|
||||
"Memo to be displayed on the invoice sent to the customer (appears on statement).": "Memo to be displayed on the invoice sent to the customer (appears on statement).",
|
||||
"The account from which the expense was paid.": "The account from which the expense was paid.",
|
||||
"Optional - The vendor the expense was paid to.": "Optional - The vendor the expense was paid to.",
|
||||
"The date the expense occurred.": "The date the expense occurred.",
|
||||
"Details of the expense (e.g., categories or items purchased). At least one line is required.": "Details of the expense (e.g., categories or items purchased). At least one line is required.",
|
||||
"Internal note about the expense.": "Internal note about the expense.",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"Not Set (Default - No Email)": "Not Set (Default - No Email)",
|
||||
"Needs To Be Sent": "Needs To Be Sent",
|
||||
"Cash": "Cash",
|
||||
"Check": "Check",
|
||||
"Credit Card": "Credit Card",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Invoice": "New Invoice",
|
||||
"New Expense (Purchase)": "New Expense (Purchase)",
|
||||
"New Customer": "New Customer",
|
||||
"New Deposit": "New Deposit",
|
||||
"New Transfer": "New Transfer",
|
||||
"Triggers when an invoice is created .": "Triggers when an invoice is created .",
|
||||
"Triggers when an Expense (Purchase) is created.": "Triggers when an Expense (Purchase) is created.",
|
||||
"Triggers when a new customer is created.": "Triggers when a new customer is created.",
|
||||
"Triggers when a Deposit is created.": "Triggers when a Deposit is created.",
|
||||
"Triggers when a Transfer is created.": "Triggers when a Transfer is created."
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"Company ID": "Company ID",
|
||||
"You can find Company ID under **settings->Additional Info**.": "You can find Company ID under **settings->Additional Info**.",
|
||||
"Find Invoice": "Find Invoice",
|
||||
"Find Customer": "Find Customer",
|
||||
"Find Payment": "Find Payment",
|
||||
"Create Invoice": "Create Invoice",
|
||||
"Create Expense": "Create Expense",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Search for an invoice by its number in QuickBooks.": "Search for an invoice by its number in QuickBooks.",
|
||||
"Search for a customer by display name in QuickBooks.": "Search for a customer by display name in QuickBooks.",
|
||||
"Finds an existing payment in QuickBooks.": "Finds an existing payment in QuickBooks.",
|
||||
"Creates an invoice in QuickBooks.": "Creates an invoice in QuickBooks.",
|
||||
"Creates an expense transaction (purchase) in QuickBooks.": "Creates an expense transaction (purchase) in QuickBooks.",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Invoice Number": "Invoice Number",
|
||||
"Customer Name": "Customer Name",
|
||||
"Customer ID": "Customer ID",
|
||||
"Customer": "Customer",
|
||||
"Line Items": "Line Items",
|
||||
"Email Status": "Email Status",
|
||||
"Billing Email Address": "Billing Email Address",
|
||||
"Due Date": "Due Date",
|
||||
"Transaction Date": "Transaction Date",
|
||||
"Private Note (Memo)": "Private Note (Memo)",
|
||||
"Customer Memo (Statement Memo)": "Customer Memo (Statement Memo)",
|
||||
"Bank/Credit Card Account": "Bank/Credit Card Account",
|
||||
"Payment Type": "Payment Type",
|
||||
"Payee (Vendor)": "Payee (Vendor)",
|
||||
"Payment Date": "Payment Date",
|
||||
"Memo (Private Note)": "Memo (Private Note)",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"The document number (DocNumber) of the invoice to search for.": "The document number (DocNumber) of the invoice to search for.",
|
||||
"The display name of the customer to search for.": "The display name of the customer to search for.",
|
||||
"The ID of the customer to find payments for.": "The ID of the customer to find payments for.",
|
||||
"Line items for the invoice": "Line items for the invoice",
|
||||
"Specify whether the invoice should be emailed after creation.": "Specify whether the invoice should be emailed after creation.",
|
||||
"Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.": "Email address to send the invoice to. Required if Email Status is \"Needs To Be Sent\". Overrides customer default.",
|
||||
"The date when the payment for the invoice is due. If not provided, default term from customer or company is used.": "The date when the payment for the invoice is due. If not provided, default term from customer or company is used.",
|
||||
"Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.": "Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.",
|
||||
"The date entered on the transaction. Defaults to the current date if not specified.": "The date entered on the transaction. Defaults to the current date if not specified.",
|
||||
"Note to self. Does not appear on the invoice sent to the customer.": "Note to self. Does not appear on the invoice sent to the customer.",
|
||||
"Memo to be displayed on the invoice sent to the customer (appears on statement).": "Memo to be displayed on the invoice sent to the customer (appears on statement).",
|
||||
"The account from which the expense was paid.": "The account from which the expense was paid.",
|
||||
"Optional - The vendor the expense was paid to.": "Optional - The vendor the expense was paid to.",
|
||||
"The date the expense occurred.": "The date the expense occurred.",
|
||||
"Details of the expense (e.g., categories or items purchased). At least one line is required.": "Details of the expense (e.g., categories or items purchased). At least one line is required.",
|
||||
"Internal note about the expense.": "Internal note about the expense.",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"Not Set (Default - No Email)": "Not Set (Default - No Email)",
|
||||
"Needs To Be Sent": "Needs To Be Sent",
|
||||
"Cash": "Cash",
|
||||
"Check": "Check",
|
||||
"Credit Card": "Credit Card",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色",
|
||||
"New Invoice": "New Invoice",
|
||||
"New Expense (Purchase)": "New Expense (Purchase)",
|
||||
"New Customer": "New Customer",
|
||||
"New Deposit": "New Deposit",
|
||||
"New Transfer": "New Transfer",
|
||||
"Triggers when an invoice is created .": "Triggers when an invoice is created .",
|
||||
"Triggers when an Expense (Purchase) is created.": "Triggers when an Expense (Purchase) is created.",
|
||||
"Triggers when a new customer is created.": "Triggers when a new customer is created.",
|
||||
"Triggers when a Deposit is created.": "Triggers when a Deposit is created.",
|
||||
"Triggers when a Transfer is created.": "Triggers when a Transfer is created."
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
import { createPiece, OAuth2PropertyValue, PieceAuth, PiecePropValueSchema, Property } from "@activepieces/pieces-framework";
|
||||
import { findInvoiceAction } from "./actions/find-invoice";
|
||||
import { findCustomerAction } from "./actions/find-customer";
|
||||
import { findPaymentAction } from "./actions/find-payment";
|
||||
import { createInvoiceAction } from "./actions/create-invoice";
|
||||
import { createExpenseAction } from "./actions/create-expense";
|
||||
import { newInvoice } from "./triggers/new-invoice";
|
||||
import { newExpense } from "./triggers/new-expense";
|
||||
import { newCustomer } from "./triggers/new-customer";
|
||||
import { newDeposit } from "./triggers/new-deposit";
|
||||
import { newTransfer } from "./triggers/new-transfer";
|
||||
import { createCustomApiCallAction } from "@activepieces/pieces-common";
|
||||
import { quickbooksCommon } from "./lib/common";
|
||||
|
||||
export const quickbooksAuth = PieceAuth.OAuth2({
|
||||
description: 'You can find Company ID under **settings->Additional Info**.',
|
||||
required: true,
|
||||
props: {
|
||||
companyId: Property.ShortText({
|
||||
displayName: 'Company ID',
|
||||
required: true,
|
||||
}) },
|
||||
authUrl: 'https://appcenter.intuit.com/connect/oauth2',
|
||||
tokenUrl: 'https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer',
|
||||
scope: ['com.intuit.quickbooks.accounting'],
|
||||
});
|
||||
|
||||
export const quickbooks = createPiece({
|
||||
displayName: "Quickbooks Online",
|
||||
auth: quickbooksAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: "https://cdn.activepieces.com/pieces/quickbooks.png",
|
||||
authors: [
|
||||
'onyedikachi-david'
|
||||
],
|
||||
actions: [
|
||||
findInvoiceAction,
|
||||
findCustomerAction,
|
||||
findPaymentAction,
|
||||
createInvoiceAction,
|
||||
createExpenseAction,
|
||||
createCustomApiCallAction({
|
||||
auth:quickbooksAuth,
|
||||
baseUrl:(auth)=>{
|
||||
const authValue = auth as PiecePropValueSchema<typeof quickbooksAuth>;
|
||||
const companyId = authValue.props?.['companyId'];
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId);
|
||||
return apiUrl
|
||||
|
||||
},
|
||||
authMapping:async (auth)=>{
|
||||
return {
|
||||
Authorization:`Bearer ${(auth as OAuth2PropertyValue).access_token}`
|
||||
}
|
||||
}
|
||||
})
|
||||
],
|
||||
triggers: [
|
||||
newInvoice,
|
||||
newExpense,
|
||||
newCustomer,
|
||||
newDeposit,
|
||||
newTransfer
|
||||
],
|
||||
});
|
||||
@@ -0,0 +1,28 @@
|
||||
const QUICKBOOKS_API_URL_SANDBOX = 'https://sandbox-quickbooks.api.intuit.com/v3/company';
|
||||
const QUICKBOOKS_API_URL_PRODUCTION = 'https://quickbooks.api.intuit.com/v3/company';
|
||||
|
||||
export const quickbooksCommon = {
|
||||
getApiUrl: (realmId: string) => {
|
||||
const baseUrl = QUICKBOOKS_API_URL_PRODUCTION;
|
||||
return `${baseUrl}/${realmId}`;
|
||||
},
|
||||
};
|
||||
|
||||
export interface QuickbooksEntityResponse<T> {
|
||||
QueryResponse?: {
|
||||
startPosition?: number;
|
||||
maxResults?: number;
|
||||
totalCount?: number;
|
||||
} & {
|
||||
[key: string]: T[] | undefined;
|
||||
};
|
||||
Fault?: {
|
||||
Error: {
|
||||
Message: string;
|
||||
Detail?: string;
|
||||
code: string;
|
||||
}[];
|
||||
type: string;
|
||||
};
|
||||
time?: string;
|
||||
}
|
||||
@@ -0,0 +1,290 @@
|
||||
export interface QuickbooksRef {
|
||||
value: string;
|
||||
name?: string; // Optional based on context
|
||||
}
|
||||
|
||||
export interface QuickbooksAddress {
|
||||
Id?: string;
|
||||
Line1?: string;
|
||||
City?: string;
|
||||
CountrySubDivisionCode?: string;
|
||||
PostalCode?: string;
|
||||
Lat?: string;
|
||||
Long?: string;
|
||||
}
|
||||
|
||||
export interface QuickbooksEmail {
|
||||
Address?: string;
|
||||
}
|
||||
|
||||
export interface QuickbooksWebsite {
|
||||
URI?: string;
|
||||
}
|
||||
|
||||
export interface QuickbooksPhoneNumber {
|
||||
FreeFormNumber?: string;
|
||||
}
|
||||
|
||||
export interface QuickbooksCurrencyRef {
|
||||
value: string;
|
||||
name?: string;
|
||||
}
|
||||
|
||||
export interface QuickbooksMetaData {
|
||||
CreateTime?: string;
|
||||
LastUpdatedTime?: string;
|
||||
}
|
||||
|
||||
export interface QuickbooksCustomField {
|
||||
DefinitionId: string;
|
||||
Name?: string;
|
||||
Type: 'BooleanType' | 'DateType' | 'NumberType' | 'StringType';
|
||||
StringValue?: string;
|
||||
BooleanValue?: boolean;
|
||||
DateValue?: string; // YYYY-MM-DD
|
||||
NumberValue?: number;
|
||||
}
|
||||
|
||||
export interface QuickbooksCustomer {
|
||||
Id: string;
|
||||
SyncToken?: string;
|
||||
MetaData?: QuickbooksMetaData;
|
||||
GivenName?: string;
|
||||
FamilyName?: string;
|
||||
FullyQualifiedName?: string;
|
||||
CompanyName?: string;
|
||||
DisplayName: string;
|
||||
PrintOnCheckName?: string;
|
||||
Active?: boolean;
|
||||
PrimaryPhone?: QuickbooksPhoneNumber;
|
||||
PrimaryEmailAddr?: QuickbooksEmail;
|
||||
WebAddr?: QuickbooksWebsite;
|
||||
BillAddr?: QuickbooksAddress;
|
||||
ShipAddr?: QuickbooksAddress;
|
||||
Job?: boolean;
|
||||
BillWithParent?: boolean;
|
||||
ParentRef?: QuickbooksRef;
|
||||
Level?: number;
|
||||
SalesTermRef?: QuickbooksRef;
|
||||
PaymentMethodRef?: QuickbooksRef;
|
||||
Balance?: number;
|
||||
OpenBalanceDate?: string;
|
||||
BalanceWithJobs?: number;
|
||||
CurrencyRef?: QuickbooksCurrencyRef;
|
||||
PreferredDeliveryMethod?: string;
|
||||
Taxable?: boolean;
|
||||
TaxExemptionReasonId?: QuickbooksRef;
|
||||
DefaultTaxCodeRef?: QuickbooksRef;
|
||||
Notes?: string;
|
||||
domain?: string;
|
||||
sparse?: boolean;
|
||||
}
|
||||
|
||||
export interface QuickbooksInvoice {
|
||||
Id: string;
|
||||
SyncToken?: string;
|
||||
MetaData?: QuickbooksMetaData;
|
||||
CustomField?: QuickbooksCustomField[];
|
||||
DocNumber?: string;
|
||||
TxnDate?: string;
|
||||
CurrencyRef?: QuickbooksCurrencyRef;
|
||||
LinkedTxn?: any[];
|
||||
Line: QuickbooksInvoiceLine[];
|
||||
TxnTaxDetail?: { TotalTax?: number; TaxLine?: any[]; };
|
||||
CustomerRef: QuickbooksRef;
|
||||
CustomerMemo?: { value: string };
|
||||
BillAddr?: QuickbooksAddress;
|
||||
ShipAddr?: QuickbooksAddress;
|
||||
SalesTermRef?: QuickbooksRef;
|
||||
DueDate?: string;
|
||||
TotalAmt: number;
|
||||
ApplyTaxAfterDiscount?: boolean;
|
||||
PrintStatus?: string;
|
||||
EmailStatus?: string;
|
||||
BillEmail?: QuickbooksEmail;
|
||||
Balance: number;
|
||||
Deposit?: number;
|
||||
AllowIPNPayment?: boolean;
|
||||
AllowOnlinePayment?: boolean;
|
||||
AllowOnlineCreditCardPayment?: boolean;
|
||||
AllowOnlineACHPayment?: boolean;
|
||||
domain?: string;
|
||||
sparse?: boolean;
|
||||
PrivateNote?: string;
|
||||
ProjectRef?: QuickbooksRef;
|
||||
}
|
||||
|
||||
export interface QuickbooksInvoiceLine {
|
||||
Id?: string;
|
||||
LineNum?: number;
|
||||
Description?: string;
|
||||
Amount: number;
|
||||
LinkedTxn?: any[];
|
||||
DetailType: 'SalesItemLineDetail' | 'GroupLineDetail' | 'DescriptionOnly' | 'DiscountLineDetail' | 'SubTotalLineDetail';
|
||||
SalesItemLineDetail?: {
|
||||
ItemRef: QuickbooksRef;
|
||||
UnitPrice?: number;
|
||||
Qty?: number;
|
||||
TaxCodeRef?: QuickbooksRef;
|
||||
};
|
||||
DiscountLineDetail?: {
|
||||
PercentBased?: boolean;
|
||||
DiscountPercent?: number;
|
||||
DiscountAccountRef?: QuickbooksRef;
|
||||
};
|
||||
SubTotalLineDetail?: Record<string, never>;
|
||||
DescriptionOnly?: Record<string, never>;
|
||||
}
|
||||
|
||||
export interface QuickbooksItem {
|
||||
Id: string;
|
||||
Name: string;
|
||||
Description?: string;
|
||||
Active?: boolean;
|
||||
FullyQualifiedName?: string;
|
||||
Taxable?: boolean;
|
||||
UnitPrice?: number;
|
||||
Type: 'Inventory' | 'NonInventory' | 'Service' | 'Category' | 'Bundle';
|
||||
IncomeAccountRef?: QuickbooksRef;
|
||||
PurchaseDesc?: string;
|
||||
PurchaseCost?: number;
|
||||
ExpenseAccountRef?: QuickbooksRef;
|
||||
AssetAccountRef?: QuickbooksRef; // For Inventory type
|
||||
TrackQtyOnHand?: boolean; // For Inventory type
|
||||
QtyOnHand?: number; // For Inventory type
|
||||
InvStartDate?: string; // For Inventory type
|
||||
SubItem?: boolean;
|
||||
ParentRef?: QuickbooksRef;
|
||||
Level?: number;
|
||||
TaxClassificationRef?: QuickbooksRef;
|
||||
domain?: string;
|
||||
sparse?: boolean;
|
||||
MetaData?: QuickbooksMetaData;
|
||||
}
|
||||
|
||||
export interface QuickbooksAccount {
|
||||
Id: string;
|
||||
Name: string;
|
||||
AccountType: string; // e.g., 'Bank', 'Credit Card', 'Accounts Receivable', 'Expense', 'Income'
|
||||
AccountSubType?: string;
|
||||
Classification?: string; // e.g., 'Asset', 'Liability', 'Equity', 'Revenue', 'Expense'
|
||||
Active?: boolean;
|
||||
CurrencyRef?: QuickbooksCurrencyRef;
|
||||
CurrentBalance?: number;
|
||||
domain?: string;
|
||||
sparse?: boolean;
|
||||
MetaData?: QuickbooksMetaData;
|
||||
}
|
||||
|
||||
export interface QuickbooksVendor {
|
||||
Id: string;
|
||||
SyncToken?: string;
|
||||
DisplayName: string;
|
||||
CompanyName?: string;
|
||||
PrintOnCheckName?: string;
|
||||
Active?: boolean;
|
||||
PrimaryPhone?: QuickbooksPhoneNumber;
|
||||
PrimaryEmailAddr?: QuickbooksEmail;
|
||||
WebAddr?: QuickbooksWebsite;
|
||||
BillAddr?: QuickbooksAddress;
|
||||
Balance?: number;
|
||||
CurrencyRef?: QuickbooksCurrencyRef;
|
||||
Vendor1099?: boolean;
|
||||
TaxIdentifier?: string;
|
||||
TermRef?: QuickbooksRef;
|
||||
domain?: string;
|
||||
sparse?: boolean;
|
||||
MetaData?: QuickbooksMetaData;
|
||||
}
|
||||
|
||||
export interface QuickbooksPurchase {
|
||||
Id?: string;
|
||||
SyncToken?: string;
|
||||
MetaData?: QuickbooksMetaData;
|
||||
DocNumber?: string;
|
||||
TxnDate?: string;
|
||||
CurrencyRef?: QuickbooksCurrencyRef;
|
||||
PrivateNote?: string;
|
||||
Line: QuickbooksPurchaseLine[];
|
||||
AccountRef: QuickbooksRef; // Account money came from (Bank/CC)
|
||||
EntityRef?: QuickbooksRef; // Payee (Vendor)
|
||||
PaymentType: 'Cash' | 'Check' | 'CreditCard';
|
||||
TotalAmt: number;
|
||||
PrintStatus?: string;
|
||||
ExchangeRate?: number;
|
||||
GlobalTaxCalculation?: string;
|
||||
TransactionLocationType?: string;
|
||||
Credit?: boolean; // Specifies if this is a vendor credit
|
||||
domain?: string;
|
||||
sparse?: boolean;
|
||||
}
|
||||
|
||||
export interface QuickbooksPurchaseLine {
|
||||
Id?: string;
|
||||
LineNum?: number;
|
||||
Description?: string;
|
||||
Amount: number;
|
||||
LinkedTxn?: any[];
|
||||
DetailType: 'AccountBasedExpenseLineDetail' | 'ItemBasedExpenseLineDetail'; // Add others if needed
|
||||
AccountBasedExpenseLineDetail?: {
|
||||
AccountRef: QuickbooksRef; // Expense Account
|
||||
BillableStatus?: string;
|
||||
CustomerRef?: QuickbooksRef;
|
||||
TaxCodeRef?: QuickbooksRef;
|
||||
};
|
||||
ItemBasedExpenseLineDetail?: {
|
||||
ItemRef: QuickbooksRef;
|
||||
Qty?: number;
|
||||
UnitPrice?: number;
|
||||
BillableStatus?: string;
|
||||
CustomerRef?: QuickbooksRef;
|
||||
TaxCodeRef?: QuickbooksRef;
|
||||
};
|
||||
// Add other detail types if needed
|
||||
}
|
||||
|
||||
export interface QuickbooksEstimate {
|
||||
Id: string;
|
||||
SyncToken?: string;
|
||||
MetaData?: QuickbooksMetaData;
|
||||
CustomField?: QuickbooksCustomField[];
|
||||
DocNumber?: string;
|
||||
TxnDate?: string;
|
||||
CurrencyRef?: QuickbooksCurrencyRef;
|
||||
LinkedTxn?: any[];
|
||||
Line: QuickbooksInvoiceLine[];
|
||||
TxnTaxDetail?: {
|
||||
TxnTaxCodeRef?: QuickbooksRef;
|
||||
TotalTax?: number;
|
||||
TaxLine?: {
|
||||
DetailType: 'TaxLineDetail';
|
||||
Amount?: number;
|
||||
TaxLineDetail?: {
|
||||
TaxRateRef?: QuickbooksRef;
|
||||
PercentBased?: boolean;
|
||||
TaxPercent?: number;
|
||||
NetAmountTaxable?: number;
|
||||
}
|
||||
}[];
|
||||
};
|
||||
CustomerRef: QuickbooksRef;
|
||||
CustomerMemo?: { value: string };
|
||||
BillAddr?: QuickbooksAddress;
|
||||
ShipAddr?: QuickbooksAddress;
|
||||
SalesTermRef?: QuickbooksRef;
|
||||
DueDate?: string;
|
||||
TotalAmt?: number;
|
||||
ApplyTaxAfterDiscount?: boolean;
|
||||
PrintStatus?: string;
|
||||
EmailStatus?: string;
|
||||
BillEmail?: QuickbooksEmail;
|
||||
AcceptedBy?: string;
|
||||
AcceptedDate?: string;
|
||||
ExpirationDate?: string;
|
||||
TxnStatus?: string;
|
||||
domain?: string;
|
||||
sparse?: boolean;
|
||||
PrivateNote?: string;
|
||||
GlobalTaxCalculation?: string;
|
||||
ProjectRef?: QuickbooksRef;
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
import {
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
PiecePropValueSchema,
|
||||
AppConnectionValueForAuthProperty,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { quickbooksAuth } from '../index';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { quickbooksCommon, QuickbooksEntityResponse } from '../lib/common';
|
||||
import dayjs from 'dayjs';
|
||||
import { QuickbooksCustomer } from '../lib/types';
|
||||
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof quickbooksAuth>,
|
||||
Record<string, unknown>
|
||||
> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
async items({ auth, lastFetchEpochMS }) {
|
||||
const { access_token } = auth;
|
||||
const companyId = auth.props?.['companyId'] as string;
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId!);
|
||||
|
||||
const query =
|
||||
lastFetchEpochMS === 0
|
||||
? `SELECT * FROM Customer ORDERBY Metadata.CreateTime DESC MAXRESULTS 10`
|
||||
: `SELECT * FROM Customer WHERE Metadata.CreateTime >= '${dayjs(
|
||||
lastFetchEpochMS
|
||||
).toISOString()}' ORDERBY Metadata.CreateTime DESC`;
|
||||
|
||||
const response = await httpClient.sendRequest<
|
||||
QuickbooksEntityResponse<QuickbooksCustomer>
|
||||
>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${apiUrl}/query`,
|
||||
queryParams: { query: query, minorversion: '70' },
|
||||
headers: {
|
||||
Authorization: `Bearer ${access_token}`,
|
||||
Accept: 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
const customers = response.body.QueryResponse?.['Customer'] ?? [];
|
||||
|
||||
return customers.map((customer) => ({
|
||||
epochMilliSeconds: dayjs(customer.MetaData?.CreateTime).valueOf(),
|
||||
data: customer,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newCustomer = createTrigger({
|
||||
auth: quickbooksAuth,
|
||||
name: 'new_customer',
|
||||
displayName: 'New Customer',
|
||||
description: 'Triggers when a new customer is created.',
|
||||
props: {},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
sampleData: undefined,
|
||||
});
|
||||
@@ -0,0 +1,80 @@
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
PiecePropValueSchema,
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
} from "@activepieces/pieces-framework";
|
||||
import { quickbooksAuth } from '../index';
|
||||
import { DedupeStrategy, httpClient, HttpMethod, Polling, pollingHelper } from "@activepieces/pieces-common";
|
||||
import { quickbooksCommon, QuickbooksEntityResponse } from "../lib/common";
|
||||
import { QuickbooksCustomer } from '../lib/types';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof quickbooksAuth>,
|
||||
Record<string, unknown>
|
||||
> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
async items({ auth, lastFetchEpochMS }) {
|
||||
const { access_token } = auth;
|
||||
const companyId = auth.props?.['companyId'] as string;
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId!);
|
||||
|
||||
const query =
|
||||
lastFetchEpochMS === 0
|
||||
? `SELECT * FROM Deposit ORDERBY Metadata.CreateTime DESC MAXRESULTS 10`
|
||||
: `SELECT * FROM Deposit WHERE Metadata.CreateTime >= '${dayjs(
|
||||
lastFetchEpochMS
|
||||
).toISOString()}' ORDERBY Metadata.CreateTime DESC`;
|
||||
|
||||
const response = await httpClient.sendRequest<
|
||||
QuickbooksEntityResponse<QuickbooksCustomer>
|
||||
>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${apiUrl}/query`,
|
||||
queryParams: { query: query, minorversion: '70' },
|
||||
headers: {
|
||||
Authorization: `Bearer ${access_token}`,
|
||||
Accept: 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
const deposits = response.body.QueryResponse?.['Deposit'] ?? [];
|
||||
|
||||
return deposits.map((deposit) => ({
|
||||
epochMilliSeconds: dayjs(deposit.MetaData?.CreateTime).valueOf(),
|
||||
data: deposit,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newDeposit = createTrigger({
|
||||
auth: quickbooksAuth,
|
||||
name: 'new_deposit',
|
||||
displayName: 'New Deposit',
|
||||
description: 'Triggers when a Deposit is created.',
|
||||
props: {},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
sampleData: undefined,
|
||||
});
|
||||
@@ -0,0 +1,86 @@
|
||||
import {
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
PiecePropValueSchema,
|
||||
AppConnectionValueForAuthProperty,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { quickbooksAuth } from '../index';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { quickbooksCommon, QuickbooksEntityResponse } from '../lib/common';
|
||||
import { QuickbooksPurchase } from '../lib/types';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof quickbooksAuth>,
|
||||
Record<string, unknown>
|
||||
> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
async items({ auth, lastFetchEpochMS }) {
|
||||
const { access_token } = auth;
|
||||
const companyId = auth.props?.['companyId'] as string;
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId!);
|
||||
|
||||
const query =
|
||||
lastFetchEpochMS === 0
|
||||
? `SELECT * FROM Purchase ORDERBY Metadata.CreateTime DESC MAXRESULTS 10`
|
||||
: `SELECT * FROM Purchase WHERE Metadata.CreateTime >= '${dayjs(
|
||||
lastFetchEpochMS
|
||||
).toISOString()}' ORDERBY Metadata.CreateTime DESC`;
|
||||
|
||||
const response = await httpClient.sendRequest<
|
||||
QuickbooksEntityResponse<QuickbooksPurchase>
|
||||
>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${apiUrl}/query`,
|
||||
queryParams: { query: query, minorversion: '70' },
|
||||
headers: {
|
||||
Authorization: `Bearer ${access_token}`,
|
||||
Accept: 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
const purchases = response.body.QueryResponse?.['Purchase'] ?? [];
|
||||
|
||||
return purchases.map((purchase) => ({
|
||||
epochMilliSeconds: dayjs(purchase.MetaData?.CreateTime).valueOf(),
|
||||
data: purchase,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newExpense = createTrigger({
|
||||
auth: quickbooksAuth,
|
||||
name: 'new_expense',
|
||||
displayName: 'New Expense (Purchase)',
|
||||
description: 'Triggers when an Expense (Purchase) is created.',
|
||||
props: {},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
sampleData: undefined,
|
||||
});
|
||||
@@ -0,0 +1,86 @@
|
||||
import {
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
PiecePropValueSchema,
|
||||
AppConnectionValueForAuthProperty,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { quickbooksAuth } from '../index';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { quickbooksCommon, QuickbooksEntityResponse } from '../lib/common';
|
||||
import dayjs from 'dayjs';
|
||||
import { QuickbooksInvoice } from '../lib/types';
|
||||
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof quickbooksAuth>,
|
||||
Record<string, unknown>
|
||||
> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
async items({ auth, lastFetchEpochMS }) {
|
||||
const { access_token } = auth;
|
||||
const companyId = auth.props?.['companyId'] as string;
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId!);
|
||||
|
||||
const query =
|
||||
lastFetchEpochMS === 0
|
||||
? `SELECT * FROM Invoice ORDERBY Metadata.CreateTime DESC MAXRESULTS 10`
|
||||
: `SELECT * FROM Invoice WHERE Metadata.CreateTime >= '${dayjs(
|
||||
lastFetchEpochMS
|
||||
).toISOString()}' ORDERBY Metadata.CreateTime DESC`;
|
||||
|
||||
const response = await httpClient.sendRequest<
|
||||
QuickbooksEntityResponse<QuickbooksInvoice>
|
||||
>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${apiUrl}/query`,
|
||||
queryParams: { query: query, minorversion: '70' },
|
||||
headers: {
|
||||
Authorization: `Bearer ${access_token}`,
|
||||
Accept: 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
const invoices = response.body.QueryResponse?.['Invoice'] ?? [];
|
||||
|
||||
return invoices.map((invoice) => ({
|
||||
epochMilliSeconds: dayjs(invoice.MetaData?.CreateTime).valueOf(),
|
||||
data: invoice,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newInvoice = createTrigger({
|
||||
auth: quickbooksAuth,
|
||||
name: 'new_invoice',
|
||||
displayName: 'New Invoice',
|
||||
description: 'Triggers when an invoice is created .',
|
||||
props: {},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
sampleData: undefined,
|
||||
});
|
||||
@@ -0,0 +1,87 @@
|
||||
import {
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
PiecePropValueSchema,
|
||||
AppConnectionValueForAuthProperty,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { quickbooksAuth } from '../index';
|
||||
import dayjs from 'dayjs';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { quickbooksCommon, QuickbooksEntityResponse } from '../lib/common';
|
||||
import { QuickbooksInvoice } from '../lib/types';
|
||||
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof quickbooksAuth>,
|
||||
Record<string, unknown>
|
||||
> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
async items({ auth, lastFetchEpochMS }) {
|
||||
const { access_token } = auth;
|
||||
const companyId = auth.props?.['companyId'] as string;
|
||||
|
||||
const apiUrl = quickbooksCommon.getApiUrl(companyId!);
|
||||
|
||||
const query =
|
||||
lastFetchEpochMS === 0
|
||||
? `SELECT * FROM Transfer ORDERBY Metadata.CreateTime DESC MAXRESULTS 10`
|
||||
: `SELECT * FROM Transfer WHERE Metadata.CreateTime >= '${dayjs(
|
||||
lastFetchEpochMS
|
||||
).toISOString()}' ORDERBY Metadata.CreateTime DESC`;
|
||||
|
||||
const response = await httpClient.sendRequest<
|
||||
QuickbooksEntityResponse<QuickbooksInvoice>
|
||||
>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${apiUrl}/query`,
|
||||
queryParams: { query: query, minorversion: '70' },
|
||||
headers: {
|
||||
Authorization: `Bearer ${access_token}`,
|
||||
Accept: 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
const transers = response.body.QueryResponse?.['Transfer'] ?? [];
|
||||
|
||||
return transers.map((transfer) => ({
|
||||
epochMilliSeconds: dayjs(transfer.MetaData?.CreateTime).valueOf(),
|
||||
data: transfer,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newTransfer = createTrigger({
|
||||
auth: quickbooksAuth,
|
||||
name: 'new_transfer',
|
||||
displayName: 'New Transfer',
|
||||
description:
|
||||
'Triggers when a Transfer is created.',
|
||||
props: {},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
sampleData: undefined,
|
||||
});
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"extends": "../../../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"noImplicitOverride": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noPropertyAccessFromIndexSignature": true
|
||||
},
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"outDir": "../../../../dist/out-tsc",
|
||||
"declaration": true,
|
||||
"types": ["node"]
|
||||
},
|
||||
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
|
||||
"include": ["src/**/*.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user