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,18 @@
|
||||
{
|
||||
"extends": ["../../../../.eslintrc.json"],
|
||||
"ignorePatterns": ["!**/*"],
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": ["*.ts", "*.tsx"],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": ["*.js", "*.jsx"],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
# pieces-invoiceninja
|
||||
|
||||
This library was generated with [Nx](https://nx.dev).
|
||||
|
||||
## Running lint
|
||||
|
||||
Run `nx lint pieces-invoiceninja` to execute the lint via [ESLint](https://eslint.org/).
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "@activepieces/piece-invoiceninja",
|
||||
"version": "0.2.12"
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"name": "pieces-invoiceninja",
|
||||
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "packages/pieces/community/invoiceninja/src",
|
||||
"projectType": "library",
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@nx/js:tsc",
|
||||
"outputs": [
|
||||
"{options.outputPath}"
|
||||
],
|
||||
"options": {
|
||||
"outputPath": "dist/packages/pieces/community/invoiceninja",
|
||||
"tsConfig": "packages/pieces/community/invoiceninja/tsconfig.lib.json",
|
||||
"packageJson": "packages/pieces/community/invoiceninja/package.json",
|
||||
"main": "packages/pieces/community/invoiceninja/src/index.ts",
|
||||
"assets": [
|
||||
"packages/pieces/community/invoiceninja/*.md",
|
||||
{
|
||||
"input": "packages/pieces/community/invoiceninja/src/i18n",
|
||||
"output": "./src/i18n",
|
||||
"glob": "**/!(i18n.json)"
|
||||
}
|
||||
],
|
||||
"buildableProjectDepsInPackageJsonType": "dependencies",
|
||||
"updateBuildableProjectDepsInPackageJson": true
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build",
|
||||
"prebuild"
|
||||
]
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nx/eslint:lint",
|
||||
"outputs": [
|
||||
"{options.outputFile}"
|
||||
]
|
||||
},
|
||||
"prebuild": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"cwd": "packages/pieces/community/invoiceninja",
|
||||
"command": "bun install --no-save --silent"
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build"
|
||||
]
|
||||
}
|
||||
},
|
||||
"tags": []
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"Free open-source invoicing tool": "Kostenloses Open-Source-Rechnungstool",
|
||||
"Base URL": "Basis-URL",
|
||||
"API Token": "API Token",
|
||||
"Enter the base URL": "Basis-URL eingeben",
|
||||
"Enter the API token": "API-Token eingeben",
|
||||
"Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token": "Bitte überprüfe https://invoice-ninja.readthedocs.io/de/latest/api_tokens.html#create-token\n um zu sehen, wie man das API Token bekommt",
|
||||
"Create Task": "Aufgabe erstellen",
|
||||
"Check Task Existence": "Vorhandene Aufgabe prüfen",
|
||||
"Get Client Details from e-mail": "Client-Details von E-Mail erhalten",
|
||||
"Get Invoices": "Rechnungen erhalten",
|
||||
"Get Report": "Bericht abrufen",
|
||||
"Create Invoice": "Rechnung erstellen",
|
||||
"Create Client": "Kunde erstellen",
|
||||
"Create Recurring Invoice": "Wiederkehrende Rechnung erstellen",
|
||||
"Perform Action on Recurring Invoice": "Aktion bei wiederkehrender Rechnung ausführen",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Creates a task instance in Invoice Ninja for billing purposes.": "Erstellt eine Task-Instanz in Rechnungs-Ninja für Abrechnungszwecke.",
|
||||
"Verify if a Task Already Exists": "Überprüfen Sie, ob eine Aufgabe bereits vorhanden ist",
|
||||
"Gets the client details if they exist by e-mail.": "Gibt die Kundendaten zurück, wenn sie per E-Mail existieren.",
|
||||
"Gets data for invoices.": "Ruft Daten für Rechnungen ab.",
|
||||
"Gets report data from InvoiceNinja.": "Ruft Daten von InvoiceNinja ab.",
|
||||
"Creates an invoice in Invoice Ninja for billing purposes.": "Erstellt eine Rechnung in Rechnung Ninja für Abrechnungszwecke.",
|
||||
"Creates a new client in InvoiceNinja.": "Erstellt einen neuen Client in InvoiceNinja.",
|
||||
"Creates a recurring invoice in Invoice Ninja for billing purposes.": "Erstellt eine wiederkehrende Rechnung in Rechnung Ninja für Abrechnungszwecke.",
|
||||
"Actions include: start, stop, send_now, restore, archive, delete.": "Aktionen beinhalten: start, stop, send_now, restore, archive, delete.",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Task or Ticket Number (alphanumeric)": "Aufgaben- oder Ticketnummer (alphanumerisch)",
|
||||
"Client ID (alphanumeric)": "Client-ID (alphanumerisch)",
|
||||
"Project ID (alphanumeric)": "Projekt-ID (alphanumerisch)",
|
||||
"Description of task": "Beschreibung der Aufgabe",
|
||||
"Custom hourly rate": "Angepasster Stundensatz",
|
||||
"Client e-mail address": "E-Mail-Adresse des Kunden",
|
||||
"Invoice Status": "Rechnungsstatus",
|
||||
"Client ID": "Kunden-ID",
|
||||
"Max Results": "Maximale Ergebnisse",
|
||||
"Report Type": "Berichtstyp",
|
||||
"Purchase Order Number (alphanumeric)": "Bestellnummer (alphanumerisch)",
|
||||
"Apply discount": "Rabatt anwenden",
|
||||
"Type of discount": "Art des Rabatts",
|
||||
"Public notes for invoice": "Öffentliche Notizen für Rechnung",
|
||||
"Private notes for invoice": "Private Notizen für Rechnung",
|
||||
"Order Items JSON string": "Bestellartikel JSON-Zeichenkette",
|
||||
"Send invoice to the client by InvoiceNinja e-mail?": "Rechnung per E-Mail an den Kunden senden?",
|
||||
"Mark the invoice as sent?": "Rechnung als gesendet markieren?",
|
||||
"Invoice due date": "Rechnungsdatum",
|
||||
"Client First Name (alphanumeric)": "Client Vorname (alphanumerisch)",
|
||||
"Client Last Name (alphanumeric)": "Client Nachname (alphanumerisch)",
|
||||
"Client Contact No (alphanumeric)": "Kundenkontakt Nr. (alphanumerisch)",
|
||||
"Client e-mail (alphanumeric)": "Client-E-Mail (alphanumerisch)",
|
||||
"Send invoices to the client": "Rechnungen an den Kunden senden",
|
||||
"Business Name (alphanumeric)": "Geschäftsname (alphanumerisch)",
|
||||
"Client Tax Number (alphanumeric)": "Kundensteuer-Nummer (alphanumerisch)",
|
||||
"Private notes for client": "Private Notizen für Kunden",
|
||||
"Client address 1 (alphanumeric)": "Client-Adresse 1 (alphanumerisch)",
|
||||
"Client address 2 (alphanumeric)": "Client-Adresse 2 (alphanumerisch)",
|
||||
"Client City/Town (alphanumeric)": "Kundenstadt/Stadt (alphanumerisch)",
|
||||
"Client State (alphanumeric)": "Kundenstatus (alphanumerisch)",
|
||||
"Client Postcode (alphanumeric)": "Client-Postleitzahl (alphanumerisch)",
|
||||
"Frequency of billing": "Abrechnungshäufigkeit",
|
||||
"No of billing cycles": "Keine Abrechnungszyklen",
|
||||
"Override Frequency using Frequency ID (optional)": "Frequenz mit Frequenz-ID überschreiben (optional)",
|
||||
"Invoice next send date": "Rechnungsdatum",
|
||||
"Invoice last sent date": "Rechnung zuletzt gesendet am",
|
||||
"Recurring Invoice ID (alphanumeric)": "Wiederkehrende Rechnungsnummer (alphanumerisch)",
|
||||
"Action to perform": "durchzuführende Aktion",
|
||||
"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)",
|
||||
"A unique task or ticket number that has not been used before in Invoice Ninja": "Eine einzigartige Aufgabe oder Ticket-Nummer, die noch nicht in Rechnungen Ninja verwendet wurde",
|
||||
"Client ID from Invoice Ninja (optional)": "Client-ID von Rechnungs-Ninja (optional)",
|
||||
"Project ID from Invoice Ninja (optional)": "Projekt-ID von Rechnungs-Ninja (optional)",
|
||||
"Description of task to be billed": "Beschreibung der abzurechnenden Aufgabe",
|
||||
"Custom hourly rate (optional) otherwise default used": "Benutzerdefinierte Stundenrate (optional) ansonsten Standard verwendet",
|
||||
"A task or ticket number to check": "Eine zu prüfende Aufgabe oder Ticket-Nummer",
|
||||
"A valid e-mail address to get client details for": "Eine gültige E-Mail-Adresse, um die Kundendetails zu erhalten",
|
||||
"Select the invoice status for filtering.": "Wählen Sie den Rechnungsstatus für die Filterung aus.",
|
||||
"Filter by Client ID, default is all clients.": "Nach Client-ID filtern, standardmäßig sind alle Clients.",
|
||||
"Maximum number of results to return. 9999 is default.": "Maximale Anzahl an Ergebnissen, die zurückgegeben werden sollen. 9999 ist Standard.",
|
||||
"Select the report type.": "Wählen Sie den Berichtstyp aus.",
|
||||
"Client ID from Invoice Ninja": "Client-ID von Rechnungs-Ninja",
|
||||
"Descriptive text or arbitrary number (optional)": "Beschreibender Text oder beliebiger Nummer (optional)",
|
||||
"Enter a number for the whole invoice discount": "Geben Sie eine Nummer für den gesamten Rechnungsrabatt ein",
|
||||
"Select either amount or percentage for invoice discount. Applies to line items and invoice.": "Wählen Sie den Betrag oder Prozentsatz für den Rechnungsrabatt. Gilt für Zeilenpositionen und Rechnung.",
|
||||
"Text that may be visible in the client portal (optional)": "Text, der im Client-Portal sichtbar sein kann (optional)",
|
||||
"Text not visible for clients (optional)": "Text für Clients nicht sichtbar (optional)",
|
||||
"e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]": "z. B. [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]",
|
||||
"Should we send the invoice to the client on creation?": "Sollen wir die Rechnung bei der Erstellung an den Kunden schicken?",
|
||||
"Makes the invoice active otherwise remains pending.": "Macht die Rechnung aktiv, ansonsten bleibt offen.",
|
||||
"e.g., 2024-01-20": "z. B. 2024-01-20",
|
||||
"The contact first name for this client (optional)": "Der Vorname des Kontakts für diesen Client (optional)",
|
||||
"The contact last name for this client (optional)": "Der Kontakt-Nachname für diesen Client (optional)",
|
||||
"The contact number for this client (optional)": "Die Kontaktnummer für diesen Client (optional)",
|
||||
"The contact email for this client (compulsory)": "Die Kontakt-E-Mail für diesen Kunden (obligatorisch)",
|
||||
"Should we send invoices to the client by e-mail?": "Sollen wir dem Kunden Rechnungen per E-Mail schicken?",
|
||||
"Name of this business or natural person (compulsory)": "Name dieses Unternehmens oder natürliche Person (obligatorisch)",
|
||||
"Leave blank if not a business (optional)": "Leer lassen, wenn nicht ein Unternehmen (optional)",
|
||||
"Usually street name and number (compulsory)": "Normalerweise Straßenname und Straßennummer (obligatorisch)",
|
||||
"Additional address details (optional)": "Zusätzliche Adressdetails (optional)",
|
||||
"City or Town name (compulsory)": "Stadt oder Stadt (obligatorisch)",
|
||||
"State or county or similar (optional)": "Bundesland oder Landkreis oder ähnliches (optional)",
|
||||
"Postal code (optional)": "Postleitzahl (optional)",
|
||||
"Choose one": "Wählen Sie eine",
|
||||
"Enter a number. How many times should this bill be generated": "Geben Sie eine Zahl ein. Wie oft soll diese Rechnung generiert werden",
|
||||
"Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!": "Geben Sie eine Zahl ein. 1-12 - entspricht dem Dropdown oben [Täglich 1, wöchentlich 2 etc..]!",
|
||||
"Recurring Invoice ID from Invoice Ninja": "Wiederkehrende Rechnungsnummer von Rechnungs-Ninja",
|
||||
"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..",
|
||||
"Unpaid Invoices": "Unbezahlte Rechnungen",
|
||||
"Paid Invoices": "Bezahlte Rechnungen",
|
||||
"Overdue Invoices": "Überfällige Rechnungen",
|
||||
"All Invoices": "Alle Rechnungen",
|
||||
"Invoices": "Rechnungen",
|
||||
"Amount": "Betrag",
|
||||
"Percentage": "Prozentsatz",
|
||||
"Use override below": "Unten überschreiben",
|
||||
"Daily": "Täglich",
|
||||
"Weekly": "Wöchentlich",
|
||||
"2 Weeks": "2 Wochen",
|
||||
"4 Weeks": "4 Wochen",
|
||||
"Monthly": "Monatlich",
|
||||
"Two Months": "Zwei Monate",
|
||||
"Quarterly": "Vierteljährlich",
|
||||
"Four Months": "Vier Monate",
|
||||
"Semi Annually": "Halbjährlich",
|
||||
"Annually": "Jährlich",
|
||||
"Two Years": "Zwei Jahre",
|
||||
"Three Years": "Drei Jahre",
|
||||
"Start": "Start",
|
||||
"Stop": "Stoppen",
|
||||
"Send Now": "Jetzt senden",
|
||||
"Restore": "Wiederherstellen",
|
||||
"Archive": "Archivieren",
|
||||
"Delete": "Löschen",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"Free open-source invoicing tool": "Herramienta gratuita de facturación de código abierto",
|
||||
"Base URL": "URL base",
|
||||
"API Token": "API Token",
|
||||
"Enter the base URL": "Introduzca la URL base",
|
||||
"Enter the API token": "Introduzca el token API",
|
||||
"Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token": "Por favor, comprueba https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n para ver cómo obtener el token API",
|
||||
"Create Task": "Crear tarea",
|
||||
"Check Task Existence": "Comprobar la existencia de la tarea",
|
||||
"Get Client Details from e-mail": "Obtener detalles del cliente del correo electrónico",
|
||||
"Get Invoices": "Obtener facturas",
|
||||
"Get Report": "Obtener Reporte",
|
||||
"Create Invoice": "Crear factura",
|
||||
"Create Client": "Crear cliente",
|
||||
"Create Recurring Invoice": "Crear factura recurrente",
|
||||
"Perform Action on Recurring Invoice": "Realizar acción en la factura recurrente",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Creates a task instance in Invoice Ninja for billing purposes.": "Crea una instancia de tarea en Factura Ninja para fines de facturación.",
|
||||
"Verify if a Task Already Exists": "Verificar si ya existe una tarea",
|
||||
"Gets the client details if they exist by e-mail.": "Obtiene los datos del cliente si existen por correo electrónico.",
|
||||
"Gets data for invoices.": "Obtiene datos para las facturas.",
|
||||
"Gets report data from InvoiceNinja.": "Obtiene los datos del informe de InvoiceNinja.",
|
||||
"Creates an invoice in Invoice Ninja for billing purposes.": "Crea una factura en Factura Ninja para fines de facturación.",
|
||||
"Creates a new client in InvoiceNinja.": "Crea un nuevo cliente en InvoiceNinja.",
|
||||
"Creates a recurring invoice in Invoice Ninja for billing purposes.": "Crea una factura recurrente en Factura Ninja para fines de facturación.",
|
||||
"Actions include: start, stop, send_now, restore, archive, delete.": "Las acciones incluyen: inicio, detenimiento, send_now, restaurar, archivar, eliminar.",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Task or Ticket Number (alphanumeric)": "Tarea o número de ticket (alfanumérico)",
|
||||
"Client ID (alphanumeric)": "ID de cliente (alfanumérica)",
|
||||
"Project ID (alphanumeric)": "ID del proyecto (alfanumérica)",
|
||||
"Description of task": "Descripción de la tarea",
|
||||
"Custom hourly rate": "Precio por hora personalizado",
|
||||
"Client e-mail address": "Dirección de correo electrónico del cliente",
|
||||
"Invoice Status": "Estado de la factura",
|
||||
"Client ID": "ID de cliente",
|
||||
"Max Results": "Resultados máximos",
|
||||
"Report Type": "Tipo de informe",
|
||||
"Purchase Order Number (alphanumeric)": "Número de orden de compra (alfanumérica)",
|
||||
"Apply discount": "Aplicar descuento",
|
||||
"Type of discount": "Tipo de descuento",
|
||||
"Public notes for invoice": "Notas públicas para la factura",
|
||||
"Private notes for invoice": "Notas privadas para la factura",
|
||||
"Order Items JSON string": "Orden de artículos JSON cadena",
|
||||
"Send invoice to the client by InvoiceNinja e-mail?": "¿Enviar factura al cliente por correo electrónico InvoiceNinja?",
|
||||
"Mark the invoice as sent?": "¿Marcar la factura como enviada?",
|
||||
"Invoice due date": "Fecha límite de la factura",
|
||||
"Client First Name (alphanumeric)": "Nombre del cliente (alfanumérica)",
|
||||
"Client Last Name (alphanumeric)": "Apellido del cliente (alfanumérico)",
|
||||
"Client Contact No (alphanumeric)": "Número de contacto del cliente (alfanumérica)",
|
||||
"Client e-mail (alphanumeric)": "Correo del cliente (alfanumérica)",
|
||||
"Send invoices to the client": "Enviar facturas al cliente",
|
||||
"Business Name (alphanumeric)": "Nombre de negocio (alfanumérico)",
|
||||
"Client Tax Number (alphanumeric)": "Número de impuestos del cliente (alfanumérico)",
|
||||
"Private notes for client": "Notas privadas para el cliente",
|
||||
"Client address 1 (alphanumeric)": "Dirección del cliente 1 (alfanumérica)",
|
||||
"Client address 2 (alphanumeric)": "Dirección del cliente 2 (alfanumérica)",
|
||||
"Client City/Town (alphanumeric)": "Ciudad/ciudad del cliente (alfanumérico)",
|
||||
"Client State (alphanumeric)": "Estado del cliente (alfanumérico)",
|
||||
"Client Postcode (alphanumeric)": "Código Postal del Cliente (alfanumérico)",
|
||||
"Frequency of billing": "Frecuencia de facturación",
|
||||
"No of billing cycles": "Núm. de ciclos de facturación",
|
||||
"Override Frequency using Frequency ID (optional)": "Anular Frecuencia usando Frequency ID (opcional)",
|
||||
"Invoice next send date": "Factura siguiente fecha de envío",
|
||||
"Invoice last sent date": "Fecha de última recepción",
|
||||
"Recurring Invoice ID (alphanumeric)": "ID de factura recurrente (alfanumérica)",
|
||||
"Action to perform": "Acción a realizar",
|
||||
"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)",
|
||||
"A unique task or ticket number that has not been used before in Invoice Ninja": "Una tarea o número de ticket único que no se ha utilizado antes en Ninja de factura",
|
||||
"Client ID from Invoice Ninja (optional)": "ID de cliente de factura Ninja (opcional)",
|
||||
"Project ID from Invoice Ninja (optional)": "ID del proyecto de factura Ninja (opcional)",
|
||||
"Description of task to be billed": "Descripción de la tarea a facturar",
|
||||
"Custom hourly rate (optional) otherwise default used": "Precio por hora personalizada (opcional) usado de otro modo por defecto",
|
||||
"A task or ticket number to check": "Una tarea o número de ticket para comprobar",
|
||||
"A valid e-mail address to get client details for": "Una dirección de correo electrónico válida para obtener los detalles del cliente para",
|
||||
"Select the invoice status for filtering.": "Seleccione el estado de la factura para filtrar.",
|
||||
"Filter by Client ID, default is all clients.": "Filtrar por ID de cliente, por defecto son todos los clientes.",
|
||||
"Maximum number of results to return. 9999 is default.": "Número máximo de resultados a regresar. 9999 es el valor predeterminado.",
|
||||
"Select the report type.": "Seleccione el tipo de informe.",
|
||||
"Client ID from Invoice Ninja": "ID de cliente de factura Ninja",
|
||||
"Descriptive text or arbitrary number (optional)": "Texto descriptivo o número arbitrario (opcional)",
|
||||
"Enter a number for the whole invoice discount": "Introduzca un número para el descuento de la factura completa",
|
||||
"Select either amount or percentage for invoice discount. Applies to line items and invoice.": "Seleccione la cantidad o el porcentaje para el descuento de la factura. Se aplica a los artículos de línea y la factura.",
|
||||
"Text that may be visible in the client portal (optional)": "Texto que puede ser visible en el portal del cliente (opcional)",
|
||||
"Text not visible for clients (optional)": "Texto no visible para clientes (opcional)",
|
||||
"e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]": "e.g., [{ \"quantity\":1,\"product_key\":\"clave de producto\", \"descuento\": \"0\" }]",
|
||||
"Should we send the invoice to the client on creation?": "¿Debemos enviar la factura al cliente en la creación?",
|
||||
"Makes the invoice active otherwise remains pending.": "Hace que la factura activa de lo contrario permanece pendiente.",
|
||||
"e.g., 2024-01-20": "p. ej., 2024-01",
|
||||
"The contact first name for this client (optional)": "El nombre del contacto para este cliente (opcional)",
|
||||
"The contact last name for this client (optional)": "El apellido del contacto para este cliente (opcional)",
|
||||
"The contact number for this client (optional)": "El número de contacto para este cliente (opcional)",
|
||||
"The contact email for this client (compulsory)": "El correo electrónico de contacto para este cliente (lamentablemente)",
|
||||
"Should we send invoices to the client by e-mail?": "¿Deberíamos enviar facturas al cliente por correo electrónico?",
|
||||
"Name of this business or natural person (compulsory)": "Nombre de este negocio o persona natural (sentido)",
|
||||
"Leave blank if not a business (optional)": "Dejar en blanco si no es un negocio (opcional)",
|
||||
"Usually street name and number (compulsory)": "Usualmente el nombre y el número de la calle (sentido)",
|
||||
"Additional address details (optional)": "Detalles adicionales de la dirección (opcional)",
|
||||
"City or Town name (compulsory)": "Nombre de ciudad o ciudad (sentido)",
|
||||
"State or county or similar (optional)": "Estado o condado o similar (opcional)",
|
||||
"Postal code (optional)": "Código postal (opcional)",
|
||||
"Choose one": "Elige uno",
|
||||
"Enter a number. How many times should this bill be generated": "Introduzca un número. Cuántas veces debe generarse esta factura",
|
||||
"Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!": "Introduzca un número. 1-12 - corresponde a la lista desplegable de arriba [Ser 1, Semanal 2, etc..]!",
|
||||
"Recurring Invoice ID from Invoice Ninja": "ID de factura recurrente de Ninja de factura",
|
||||
"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.",
|
||||
"Unpaid Invoices": "Facturas pendientes",
|
||||
"Paid Invoices": "Facturas pagadas",
|
||||
"Overdue Invoices": "Facturas atrasadas",
|
||||
"All Invoices": "Todas las facturas",
|
||||
"Invoices": "Facturas",
|
||||
"Amount": "Cantidad",
|
||||
"Percentage": "Porcentaje",
|
||||
"Use override below": "Usar sobrescribir abajo",
|
||||
"Daily": "Diario",
|
||||
"Weekly": "Semanal",
|
||||
"2 Weeks": "2 Semanas",
|
||||
"4 Weeks": "4 semanas",
|
||||
"Monthly": "Mensual",
|
||||
"Two Months": "Dos Meses",
|
||||
"Quarterly": "Trimestral",
|
||||
"Four Months": "Cuatro meses",
|
||||
"Semi Annually": "Semestral",
|
||||
"Annually": "Anualmente",
|
||||
"Two Years": "Dos años",
|
||||
"Three Years": "Tres años",
|
||||
"Start": "Comenzar",
|
||||
"Stop": "Parar",
|
||||
"Send Now": "Enviar Ahora",
|
||||
"Restore": "Restaurar",
|
||||
"Archive": "Archivar",
|
||||
"Delete": "Eliminar",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO"
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"Free open-source invoicing tool": "Outil gratuit de facturation open-source",
|
||||
"Base URL": "URL de base",
|
||||
"API Token": "API Token",
|
||||
"Enter the base URL": "Entrez l'URL de base",
|
||||
"Enter the API token": "Entrez le jeton de l'API",
|
||||
"Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token": "Veuillez consulter https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n pour savoir comment obtenir le jeton API",
|
||||
"Create Task": "Créer une tâche",
|
||||
"Check Task Existence": "Vérifier Existence de Tâche",
|
||||
"Get Client Details from e-mail": "Obtenir les détails du client par e-mail",
|
||||
"Get Invoices": "Obtenir les factures",
|
||||
"Get Report": "Obtenir le rapport",
|
||||
"Create Invoice": "Créer une facture",
|
||||
"Create Client": "Créer un client",
|
||||
"Create Recurring Invoice": "Créer une facture récurrente",
|
||||
"Perform Action on Recurring Invoice": "Effectuer une action sur la facture récurrente",
|
||||
"Custom API Call": "Appel API personnalisé",
|
||||
"Creates a task instance in Invoice Ninja for billing purposes.": "Crée une instance de tâche dans le Ninja de facture à des fins de facturation.",
|
||||
"Verify if a Task Already Exists": "Vérifier si une tâche existe déjà",
|
||||
"Gets the client details if they exist by e-mail.": "Renvoie les informations du client si elles existent par e-mail.",
|
||||
"Gets data for invoices.": "Récupère les données des factures.",
|
||||
"Gets report data from InvoiceNinja.": "Récupère les données de rapport de InvoiceNinja.",
|
||||
"Creates an invoice in Invoice Ninja for billing purposes.": "Crée une facture dans le Ninja de facture à des fins de facturation.",
|
||||
"Creates a new client in InvoiceNinja.": "Crée un nouveau client dans InvoiceNinja.",
|
||||
"Creates a recurring invoice in Invoice Ninja for billing purposes.": "Crée une facture récurrente dans le Ninja de facture à des fins de facturation.",
|
||||
"Actions include: start, stop, send_now, restore, archive, delete.": "Les actions incluent : démarrer, arrêter, send_now, restore, archiver, supprimer.",
|
||||
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
|
||||
"Task or Ticket Number (alphanumeric)": "Numéro de tâche ou de ticket (alphanumérique)",
|
||||
"Client ID (alphanumeric)": "ID du client (alphanumérique)",
|
||||
"Project ID (alphanumeric)": "ID du projet (alphanumérique)",
|
||||
"Description of task": "Description de la tâche",
|
||||
"Custom hourly rate": "Taux horaire personnalisé",
|
||||
"Client e-mail address": "Adresse e-mail du client",
|
||||
"Invoice Status": "Statut de la facture",
|
||||
"Client ID": "ID client",
|
||||
"Max Results": "Nombre maximum de résultats",
|
||||
"Report Type": "Type de rapport",
|
||||
"Purchase Order Number (alphanumeric)": "Numéro de bon de commande (alphanumérique)",
|
||||
"Apply discount": "Appliquer la réduction",
|
||||
"Type of discount": "Type de remise",
|
||||
"Public notes for invoice": "Notes publiques pour la facture",
|
||||
"Private notes for invoice": "Notes privées pour la facture",
|
||||
"Order Items JSON string": "Chaîne JSON des éléments de la commande",
|
||||
"Send invoice to the client by InvoiceNinja e-mail?": "Envoyer la facture au client par e-mail à InvoiceNinja ?",
|
||||
"Mark the invoice as sent?": "Marquer la facture comme envoyée?",
|
||||
"Invoice due date": "Date d'échéance de la facture",
|
||||
"Client First Name (alphanumeric)": "Prénom du client (alphanumérique)",
|
||||
"Client Last Name (alphanumeric)": "Nom du client (alphanumérique)",
|
||||
"Client Contact No (alphanumeric)": "N° de contact client (alphanumérique)",
|
||||
"Client e-mail (alphanumeric)": "E-mail du client (alphanumérique)",
|
||||
"Send invoices to the client": "Envoyer des factures au client",
|
||||
"Business Name (alphanumeric)": "Nom de l'entreprise (alphanumérique)",
|
||||
"Client Tax Number (alphanumeric)": "Numéro de taxe du client (alphanumérique)",
|
||||
"Private notes for client": "Notes privées pour le client",
|
||||
"Client address 1 (alphanumeric)": "Adresse du client 1 (alphanumérique)",
|
||||
"Client address 2 (alphanumeric)": "Adresse du client 2 (alphanumérique)",
|
||||
"Client City/Town (alphanumeric)": "Ville cliente (alphanumérique)",
|
||||
"Client State (alphanumeric)": "État du client (alphanumérique)",
|
||||
"Client Postcode (alphanumeric)": "Code postal du client (alphanumérique)",
|
||||
"Frequency of billing": "Fréquence de facturation",
|
||||
"No of billing cycles": "Pas de cycles de facturation",
|
||||
"Override Frequency using Frequency ID (optional)": "Remplacer la Fréquence par l'ID de Fréquence (optionnel)",
|
||||
"Invoice next send date": "Date d'envoi de la facture suivante",
|
||||
"Invoice last sent date": "Dernière date d'envoi de la facture",
|
||||
"Recurring Invoice ID (alphanumeric)": "ID de facture récurrente (alphanumérique)",
|
||||
"Action to perform": "Action à effectuer",
|
||||
"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)",
|
||||
"A unique task or ticket number that has not been used before in Invoice Ninja": "Une tâche unique ou un numéro de ticket qui n'a pas été utilisé auparavant dans le Ninja de facture",
|
||||
"Client ID from Invoice Ninja (optional)": "ID du client depuis le Ninja Facture (optionnel)",
|
||||
"Project ID from Invoice Ninja (optional)": "ID du projet de la Facture Ninja (facultatif)",
|
||||
"Description of task to be billed": "Description de la tâche à facturer",
|
||||
"Custom hourly rate (optional) otherwise default used": "Taux horaire personnalisé (facultatif) sinon utilisé par défaut",
|
||||
"A task or ticket number to check": "Une tâche ou un numéro de ticket à vérifier",
|
||||
"A valid e-mail address to get client details for": "Une adresse e-mail valide pour obtenir les détails du client pour",
|
||||
"Select the invoice status for filtering.": "Sélectionnez le statut de la facture à filtrer.",
|
||||
"Filter by Client ID, default is all clients.": "Filtrer par ID de client, tous les clients sont par défaut.",
|
||||
"Maximum number of results to return. 9999 is default.": "Nombre maximum de résultats à renvoyer. 9999 est par défaut.",
|
||||
"Select the report type.": "Sélectionnez le type de rapport.",
|
||||
"Client ID from Invoice Ninja": "ID client de la facture Ninja",
|
||||
"Descriptive text or arbitrary number (optional)": "Texte descriptif ou nombre arbitraire (facultatif)",
|
||||
"Enter a number for the whole invoice discount": "Entrez un numéro pour la remise complète de la facture",
|
||||
"Select either amount or percentage for invoice discount. Applies to line items and invoice.": "Sélectionnez un montant ou un pourcentage pour la remise de la facture. S'applique aux articles en ligne et à la facture.",
|
||||
"Text that may be visible in the client portal (optional)": "Texte qui peut être visible dans le portail client (optionnel)",
|
||||
"Text not visible for clients (optional)": "Texte non visible pour les clients (facultatif)",
|
||||
"e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]": "ex: [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]",
|
||||
"Should we send the invoice to the client on creation?": "Devrions-nous envoyer la facture au client lors de la création ?",
|
||||
"Makes the invoice active otherwise remains pending.": "Rend la facture active autrement en attente.",
|
||||
"e.g., 2024-01-20": "par exemple, 2024-01-20",
|
||||
"The contact first name for this client (optional)": "Le prénom du contact pour ce client (optionnel)",
|
||||
"The contact last name for this client (optional)": "Nom du contact pour ce client (facultatif)",
|
||||
"The contact number for this client (optional)": "Le numéro de contact pour ce client (facultatif)",
|
||||
"The contact email for this client (compulsory)": "L'e-mail de contact pour ce client (obligatoire)",
|
||||
"Should we send invoices to the client by e-mail?": "Devrions-nous envoyer des factures au client par e-mail?",
|
||||
"Name of this business or natural person (compulsory)": "Nom de cette entreprise ou personne physique (obligatoire)",
|
||||
"Leave blank if not a business (optional)": "Laisser vide si ce n'est pas une entreprise (optionnel)",
|
||||
"Usually street name and number (compulsory)": "Normalement le nom de la rue et le numéro (obligatoire)",
|
||||
"Additional address details (optional)": "Détails supplémentaires de l'adresse (facultatif)",
|
||||
"City or Town name (compulsory)": "Nom de la ville (obligatoire)",
|
||||
"State or county or similar (optional)": "État ou comté ou similaire (optionnel)",
|
||||
"Postal code (optional)": "Code postal (facultatif)",
|
||||
"Choose one": "Choisir un",
|
||||
"Enter a number. How many times should this bill be generated": "Entrez un nombre. Combien de fois cette facture doit-elle être générée",
|
||||
"Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!": "Entrez un nombre. 1-12 - correspond à la liste déroulante ci-dessus [Quotidiennement 1, Hebdomadaire 2 etc..]!",
|
||||
"Recurring Invoice ID from Invoice Ninja": "ID de facture récurrente à partir de la facture Ninja",
|
||||
"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.",
|
||||
"Unpaid Invoices": "Factures impayées",
|
||||
"Paid Invoices": "Factures payantes",
|
||||
"Overdue Invoices": "Factures en retard",
|
||||
"All Invoices": "Toutes les factures",
|
||||
"Invoices": "Factures",
|
||||
"Amount": "Montant",
|
||||
"Percentage": "Pourcentage",
|
||||
"Use override below": "Utiliser la substitution ci-dessous",
|
||||
"Daily": "Tous les jours",
|
||||
"Weekly": "Hebdomadaire",
|
||||
"2 Weeks": "2 semaines",
|
||||
"4 Weeks": "4 semaines",
|
||||
"Monthly": "Mensuel",
|
||||
"Two Months": "Deux mois",
|
||||
"Quarterly": "trimestriel",
|
||||
"Four Months": "Quatre mois",
|
||||
"Semi Annually": "Semestre annuel",
|
||||
"Annually": "Annuellement",
|
||||
"Two Years": "Deux ans",
|
||||
"Three Years": "Trois ans",
|
||||
"Start": "Début",
|
||||
"Stop": "Arrêter",
|
||||
"Send Now": "Envoyer maintenant",
|
||||
"Restore": "Restaurer",
|
||||
"Archive": "Archiver",
|
||||
"Delete": "Supprimer",
|
||||
"GET": "OBTENIR",
|
||||
"POST": "POSTER",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "EFFACER",
|
||||
"DELETE": "SUPPRIMER",
|
||||
"HEAD": "TÊTE"
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"Free open-source invoicing tool": "無料のオープンソース請求ツール",
|
||||
"Base URL": "ベースURL",
|
||||
"API Token": "API Token",
|
||||
"Enter the base URL": "ベース URL を入力してください",
|
||||
"Enter the API token": "API トークンを入力してください",
|
||||
"Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token": "APIトークンの取得方法については、https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n を確認してください。",
|
||||
"Create Task": "タスクを作成",
|
||||
"Check Task Existence": "タスクの存在を確認",
|
||||
"Get Client Details from e-mail": "メールからクライアントの詳細を取得する",
|
||||
"Get Invoices": "請求書を取得",
|
||||
"Get Report": "レポートの取得",
|
||||
"Create Invoice": "請求書を作成",
|
||||
"Create Client": "クライアントを作成",
|
||||
"Create Recurring Invoice": "定期請求書の作成",
|
||||
"Perform Action on Recurring Invoice": "定期請求書のアクションを実行",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Creates a task instance in Invoice Ninja for billing purposes.": "請求のために請求書忍者にタスクインスタンスを作成します。",
|
||||
"Verify if a Task Already Exists": "タスクがすでに存在するかどうかを確認します",
|
||||
"Gets the client details if they exist by e-mail.": "電子メールでクライアントの詳細を取得します。",
|
||||
"Gets data for invoices.": "請求書データを取得します。",
|
||||
"Gets report data from InvoiceNinja.": "InvoiceNinjaからレポートデータを取得します。",
|
||||
"Creates an invoice in Invoice Ninja for billing purposes.": "請求用の請求書を請求書忍者に作成します。",
|
||||
"Creates a new client in InvoiceNinja.": "InvoiceNinja に新しいクライアントを作成します。",
|
||||
"Creates a recurring invoice in Invoice Ninja for billing purposes.": "請求目的のために請求書を請求書忍者に作成します。",
|
||||
"Actions include: start, stop, send_now, restore, archive, delete.": "アクションには以下のものがあります: start, stop, send_now, restore, archive, delete.",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Task or Ticket Number (alphanumeric)": "タスクまたはチケット番号 (英数字)",
|
||||
"Client ID (alphanumeric)": "クライアント ID (英数字)",
|
||||
"Project ID (alphanumeric)": "プロジェクト ID (英数字)",
|
||||
"Description of task": "タスクの説明",
|
||||
"Custom hourly rate": "カスタム時間ごとのレート",
|
||||
"Client e-mail address": "クライアントのメールアドレス",
|
||||
"Invoice Status": "請求ステータス",
|
||||
"Client ID": "クライアント ID",
|
||||
"Max Results": "最大結果",
|
||||
"Report Type": "レポートの種類",
|
||||
"Purchase Order Number (alphanumeric)": "注文番号(英数字)",
|
||||
"Apply discount": "割引を適用",
|
||||
"Type of discount": "割引の種類",
|
||||
"Public notes for invoice": "請求書の公開ノート",
|
||||
"Private notes for invoice": "請求書のプライベートノート",
|
||||
"Order Items JSON string": "注文商品JSON文字列",
|
||||
"Send invoice to the client by InvoiceNinja e-mail?": "InvoiceNinja メールで請求書をクライアントに送信しますか?",
|
||||
"Mark the invoice as sent?": "請求書を送信済みにしますか?",
|
||||
"Invoice due date": "請求書締切日",
|
||||
"Client First Name (alphanumeric)": "クライアント名 (英数字)",
|
||||
"Client Last Name (alphanumeric)": "Client Last Name (alphanumeric)",
|
||||
"Client Contact No (alphanumeric)": "クライアントの連絡先番号 (英数字)",
|
||||
"Client e-mail (alphanumeric)": "クライアントの電子メール (英数字)",
|
||||
"Send invoices to the client": "クライアントに請求書を送信する",
|
||||
"Business Name (alphanumeric)": "商号(英数字)",
|
||||
"Client Tax Number (alphanumeric)": "クライアント税番号(英数字)",
|
||||
"Private notes for client": "クライアントのプライベートノート",
|
||||
"Client address 1 (alphanumeric)": "クライアントアドレス 1 (英数字)",
|
||||
"Client address 2 (alphanumeric)": "クライアントアドレス 2 (英数字)",
|
||||
"Client City/Town (alphanumeric)": "Client City/Town (英数字)",
|
||||
"Client State (alphanumeric)": "クライアントの状態(英数字)",
|
||||
"Client Postcode (alphanumeric)": "クライアント 郵便番号 (英数字)",
|
||||
"Frequency of billing": "請求頻度",
|
||||
"No of billing cycles": "No of billing cycle",
|
||||
"Override Frequency using Frequency ID (optional)": "頻度IDを使用した頻度を上書きする (省略可能)",
|
||||
"Invoice next send date": "次の送信日",
|
||||
"Invoice last sent date": "請求書の最終送信日",
|
||||
"Recurring Invoice ID (alphanumeric)": "繰り返し請求書ID(英数字)",
|
||||
"Action to perform": "実行するアクション",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"A unique task or ticket number that has not been used before in Invoice Ninja": "請求書忍者で以前に使用されていないユニークなタスクまたはチケット番号",
|
||||
"Client ID from Invoice Ninja (optional)": "請求書忍者からのクライアントID(任意)",
|
||||
"Project ID from Invoice Ninja (optional)": "請求書忍者のプロジェクトID(任意)",
|
||||
"Description of task to be billed": "請求されるタスクの説明",
|
||||
"Custom hourly rate (optional) otherwise default used": "カスタム時給(オプション)、そうでない場合はデフォルトで使用",
|
||||
"A task or ticket number to check": "チェックするタスクまたはチケット番号",
|
||||
"A valid e-mail address to get client details for": "クライアントの詳細を取得するための有効なメールアドレス",
|
||||
"Select the invoice status for filtering.": "フィルタリングする請求書ステータスを選択します。",
|
||||
"Filter by Client ID, default is all clients.": "クライアントIDでフィルタリングします。デフォルトはすべてのクライアントです。",
|
||||
"Maximum number of results to return. 9999 is default.": "返す結果の最大数です。9999 はデフォルトです。",
|
||||
"Select the report type.": "レポート タイプを選択します。",
|
||||
"Client ID from Invoice Ninja": "請求書忍者からのクライアントID",
|
||||
"Descriptive text or arbitrary number (optional)": "記述テキストまたは任意の数字(任意)",
|
||||
"Enter a number for the whole invoice discount": "請求書全体の割引の番号を入力してください",
|
||||
"Select either amount or percentage for invoice discount. Applies to line items and invoice.": "請求書割引の金額またはパーセンテージを選択します。項目と請求書に適用されます。",
|
||||
"Text that may be visible in the client portal (optional)": "クライアント・ポータルに表示される可能性のあるテキスト (オプション)",
|
||||
"Text not visible for clients (optional)": "クライアントに表示されないテキスト (オプション)",
|
||||
"e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]": "例: [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]",
|
||||
"Should we send the invoice to the client on creation?": "作成時に請求書をクライアントに送信しますか?",
|
||||
"Makes the invoice active otherwise remains pending.": "請求書を有効にして保留中のままにします。",
|
||||
"e.g., 2024-01-20": "例:2024-01-20",
|
||||
"The contact first name for this client (optional)": "このクライアントの連絡先の名 (オプション)",
|
||||
"The contact last name for this client (optional)": "このクライアントの連絡先の姓 (オプション)",
|
||||
"The contact number for this client (optional)": "このクライアントの連絡先番号 (オプション)",
|
||||
"The contact email for this client (compulsory)": "このクライアントの連絡先メール (必須)",
|
||||
"Should we send invoices to the client by e-mail?": "請求書をお客様に電子メールで送信しますか?",
|
||||
"Name of this business or natural person (compulsory)": "この事業者または自然人の氏名(必須)",
|
||||
"Leave blank if not a business (optional)": "ビジネス (オプション) でなければ空白のままにします",
|
||||
"Usually street name and number (compulsory)": "通常通りの名前と番号(必須)",
|
||||
"Additional address details (optional)": "追加の住所の詳細(オプション)",
|
||||
"City or Town name (compulsory)": "市町村名(必須)",
|
||||
"State or county or similar (optional)": "都道府県(オプション)",
|
||||
"Postal code (optional)": "郵便番号 (オプション)",
|
||||
"Choose one": "1つ選択してください",
|
||||
"Enter a number. How many times should this bill be generated": "数字を入力してください。何回この請求書を生成する必要がありますか?",
|
||||
"Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!": "数字を入力してください。1-12 - [毎日 1、ウィークリー2など] の上にあるドロップダウンに該当します。",
|
||||
"Recurring Invoice ID from Invoice Ninja": "請求書忍者から反復請求書ID",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"Unpaid Invoices": "未払い請求書",
|
||||
"Paid Invoices": "有料請求書",
|
||||
"Overdue Invoices": "延滞請求書",
|
||||
"All Invoices": "すべての請求書",
|
||||
"Invoices": "請求書",
|
||||
"Amount": "金額",
|
||||
"Percentage": "割合",
|
||||
"Use override below": "以下の上書きを使用する",
|
||||
"Daily": "毎日",
|
||||
"Weekly": "Weekly",
|
||||
"2 Weeks": "2 週間",
|
||||
"4 Weeks": "4 週間",
|
||||
"Monthly": "月ごと",
|
||||
"Two Months": "2ヶ月",
|
||||
"Quarterly": "四半期ごと",
|
||||
"Four Months": "4 ヶ月",
|
||||
"Semi Annually": "半年ごと",
|
||||
"Annually": "毎年",
|
||||
"Two Years": "2年",
|
||||
"Three Years": "3年",
|
||||
"Start": "開始",
|
||||
"Stop": "停止",
|
||||
"Send Now": "今すぐ送信",
|
||||
"Restore": "復元",
|
||||
"Archive": "アーカイブ",
|
||||
"Delete": "削除",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭"
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"Free open-source invoicing tool": "Gratis open-source factureringsgereedschap",
|
||||
"Base URL": "Basis URL",
|
||||
"API Token": "API Token",
|
||||
"Enter the base URL": "Voer de basis-URL in",
|
||||
"Enter the API token": "Voer het API token in",
|
||||
"Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token": "Kijk op https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n om te zien hoe je de API-token kunt verkrijgen",
|
||||
"Create Task": "Taak maken",
|
||||
"Check Task Existence": "Controleer Bestaande Taak",
|
||||
"Get Client Details from e-mail": "Klantgegevens ophalen uit e-mail",
|
||||
"Get Invoices": "Facturen ophalen",
|
||||
"Get Report": "Rapport ophalen",
|
||||
"Create Invoice": "Factuur aanmaken",
|
||||
"Create Client": "Client aanmaken",
|
||||
"Create Recurring Invoice": "Maak periodieke factuur",
|
||||
"Perform Action on Recurring Invoice": "Actie uitvoeren op periodieke factuur",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates a task instance in Invoice Ninja for billing purposes.": "Maakt een taak instantie in factuur Ninja voor factureringsdoeleinden.",
|
||||
"Verify if a Task Already Exists": "Verifieer of een taak al bestaat",
|
||||
"Gets the client details if they exist by e-mail.": "Haalt de klantgegevens op als deze per e-mail bestaan.",
|
||||
"Gets data for invoices.": "Gegevens voor facturen ophalen.",
|
||||
"Gets report data from InvoiceNinja.": "Haalt gegevens op van InvoiceNinja.",
|
||||
"Creates an invoice in Invoice Ninja for billing purposes.": "Maakt een factuur in factuur Ninja voor factureringsdoeleinden.",
|
||||
"Creates a new client in InvoiceNinja.": "Maakt een nieuwe klant aan in InvoiceNinja.",
|
||||
"Creates a recurring invoice in Invoice Ninja for billing purposes.": "Maakt een periodieke factuur in factuur Ninja voor factureringsdoeleinden.",
|
||||
"Actions include: start, stop, send_now, restore, archive, delete.": "Acties omvatten: start, stop, send_now herstellen, archief, verwijderen.",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Task or Ticket Number (alphanumeric)": "Taak of ticket nummer (alfanumeriek)",
|
||||
"Client ID (alphanumeric)": "Client-ID (alfanumeriek)",
|
||||
"Project ID (alphanumeric)": "Project ID (alfanumeriek)",
|
||||
"Description of task": "Beschrijving van taak",
|
||||
"Custom hourly rate": "Aangepast uurtarief",
|
||||
"Client e-mail address": "E-mailadres klant",
|
||||
"Invoice Status": "Factuur Status",
|
||||
"Client ID": "Klant ID",
|
||||
"Max Results": "Max. aantal resultaten",
|
||||
"Report Type": "Rapport Type",
|
||||
"Purchase Order Number (alphanumeric)": "Inkoopordernummer (alfanumeriek)",
|
||||
"Apply discount": "Korting toepassen",
|
||||
"Type of discount": "Type korting",
|
||||
"Public notes for invoice": "Openbare notities voor factuur",
|
||||
"Private notes for invoice": "Privé notities voor factuur",
|
||||
"Order Items JSON string": "Bestelitems JSON tekenreeks",
|
||||
"Send invoice to the client by InvoiceNinja e-mail?": "Factuur per e-mail naar de klant versturen?",
|
||||
"Mark the invoice as sent?": "Markeer de factuur als verzonden?",
|
||||
"Invoice due date": "Vervaldatum factuur",
|
||||
"Client First Name (alphanumeric)": "Voornaam klant (alfanumeriek)",
|
||||
"Client Last Name (alphanumeric)": "Klant achternaam (alfanumeriek)",
|
||||
"Client Contact No (alphanumeric)": "Klant Contact nr. (alfanumeriek)",
|
||||
"Client e-mail (alphanumeric)": "Klant e-mail (alfanumeriek)",
|
||||
"Send invoices to the client": "Stuur facturen naar de klant",
|
||||
"Business Name (alphanumeric)": "Bedrijfsnaam (alfanumeriek)",
|
||||
"Client Tax Number (alphanumeric)": "Klant BTW-nummer (alfanumeriek)",
|
||||
"Private notes for client": "Privé notities voor klant",
|
||||
"Client address 1 (alphanumeric)": "Klant adres 1 (alfanumeriek)",
|
||||
"Client address 2 (alphanumeric)": "Klant adres 2 (alfanumeriek)",
|
||||
"Client City/Town (alphanumeric)": "Klant stad/stad (alfanumeriek)",
|
||||
"Client State (alphanumeric)": "Provincie klant (alfanumeriek)",
|
||||
"Client Postcode (alphanumeric)": "Klant postcode (alfanumeriek)",
|
||||
"Frequency of billing": "Frequentie van facturering",
|
||||
"No of billing cycles": "Aantal factureringscycli",
|
||||
"Override Frequency using Frequency ID (optional)": "Frequentie overschrijven met Frequentie ID (optioneel)",
|
||||
"Invoice next send date": "Factuur volgende verzenddatum",
|
||||
"Invoice last sent date": "Factuur laatste verzonden datum",
|
||||
"Recurring Invoice ID (alphanumeric)": "Terugkerende factuur ID (alfanumeriek)",
|
||||
"Action to perform": "Uit te voeren actie",
|
||||
"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)",
|
||||
"A unique task or ticket number that has not been used before in Invoice Ninja": "Een unieke taak of ticketnummer dat nog niet eerder is gebruikt in factuur Ninja",
|
||||
"Client ID from Invoice Ninja (optional)": "Client-ID van factuur Ninja (optioneel)",
|
||||
"Project ID from Invoice Ninja (optional)": "Project-ID van factuur Ninja (optioneel)",
|
||||
"Description of task to be billed": "Te factureren taak omschrijving",
|
||||
"Custom hourly rate (optional) otherwise default used": "Aangepaste uurtarief (optioneel) anders standaard gebruikt",
|
||||
"A task or ticket number to check": "Een taak of ticket nummer om te controleren",
|
||||
"A valid e-mail address to get client details for": "Een geldig e-mailadres om klantgegevens te krijgen voor",
|
||||
"Select the invoice status for filtering.": "Selecteer de factuur status voor het filteren.",
|
||||
"Filter by Client ID, default is all clients.": "Filter op Client ID, standaard zijn alle clients.",
|
||||
"Maximum number of results to return. 9999 is default.": "Maximum aantal resultaten om terug te zenden. 9999 is niet meer dan standaard.",
|
||||
"Select the report type.": "Selecteer het type rapport.",
|
||||
"Client ID from Invoice Ninja": "Client-ID van factuur Ninja",
|
||||
"Descriptive text or arbitrary number (optional)": "Beschrijvende tekst of willekeurig nummer (optioneel)",
|
||||
"Enter a number for the whole invoice discount": "Voer een getal in voor de gehele factuur",
|
||||
"Select either amount or percentage for invoice discount. Applies to line items and invoice.": "Selecteer bedrag of percentage voor factuurkorting. Geldt voor regelitems en factuurfactuur.",
|
||||
"Text that may be visible in the client portal (optional)": "Tekst die zichtbaar kan zijn in de klantenportaal (optioneel)",
|
||||
"Text not visible for clients (optional)": "Tekst niet zichtbaar voor klanten (optioneel)",
|
||||
"e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]": "b.v. [{ \"quantity\":1,\"product_key\":\"productsleutel\", \"korting\": \"0\" }]",
|
||||
"Should we send the invoice to the client on creation?": "Moeten we de factuur bij aanmaak naar de klant sturen?",
|
||||
"Makes the invoice active otherwise remains pending.": "Maakt de factuur actief anders in behandeling.",
|
||||
"e.g., 2024-01-20": "bijv. 2024-01-20",
|
||||
"The contact first name for this client (optional)": "De voornaam van de contactpersoon voor deze klant (optioneel)",
|
||||
"The contact last name for this client (optional)": "De achternaam van de contactpersoon voor deze klant (optioneel)",
|
||||
"The contact number for this client (optional)": "Het contactnummer voor deze klant (optioneel)",
|
||||
"The contact email for this client (compulsory)": "De contactmail voor deze klant (verplicht)",
|
||||
"Should we send invoices to the client by e-mail?": "Moeten we per e-mail facturen naar de klant sturen?",
|
||||
"Name of this business or natural person (compulsory)": "Naam van dit bedrijf of natuurlijk persoon (verplicht)",
|
||||
"Leave blank if not a business (optional)": "Laat leeg indien geen bedrijf (optioneel)",
|
||||
"Usually street name and number (compulsory)": "Normaal gesproken straatnaam en nummer (verplicht)",
|
||||
"Additional address details (optional)": "Extra adresgegevens (optioneel)",
|
||||
"City or Town name (compulsory)": "Naam stad of stad (verplicht)",
|
||||
"State or county or similar (optional)": "Provincie of gemeente of iets dergelijks (optioneel)",
|
||||
"Postal code (optional)": "Postcode (optioneel)",
|
||||
"Choose one": "Kies er een",
|
||||
"Enter a number. How many times should this bill be generated": "Voer een getal in. Hoeveel keer moet dit contract gegenereerd worden",
|
||||
"Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!": "Voer een getal in. 1-12 - correspondeert met de dropdown boven [Dagelijks zijn 1, Wekelijks 2 etc..]!",
|
||||
"Recurring Invoice ID from Invoice Ninja": "Periodieke factuur ID van factuur Ninja",
|
||||
"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..",
|
||||
"Unpaid Invoices": "Onbetaalde facturen",
|
||||
"Paid Invoices": "Betaalde facturen",
|
||||
"Overdue Invoices": "Achterstallige facturen",
|
||||
"All Invoices": "Alle facturen",
|
||||
"Invoices": "Rekeningen",
|
||||
"Amount": "Hoeveelheid",
|
||||
"Percentage": "Percentage",
|
||||
"Use override below": "Gebruik overschrijving onderaan",
|
||||
"Daily": "Dagelijks",
|
||||
"Weekly": "wekelijks",
|
||||
"2 Weeks": "2 weken",
|
||||
"4 Weeks": "4 weken",
|
||||
"Monthly": "maandelijks",
|
||||
"Two Months": "Twee maanden",
|
||||
"Quarterly": "Driemaandelijks",
|
||||
"Four Months": "Vier maanden",
|
||||
"Semi Annually": "Dagelijks Semi",
|
||||
"Annually": "Jaarlijks",
|
||||
"Two Years": "Twee jaar",
|
||||
"Three Years": "Drie jaar",
|
||||
"Start": "Beginnen",
|
||||
"Stop": "Stoppen",
|
||||
"Send Now": "Nu verzenden",
|
||||
"Restore": "Herstellen",
|
||||
"Archive": "Archief",
|
||||
"Delete": "Verwijderen",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD"
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"Free open-source invoicing tool": "Ferramenta de faturação open-source gratuita",
|
||||
"Base URL": "URL Base",
|
||||
"API Token": "API Token",
|
||||
"Enter the base URL": "Digite a URL base",
|
||||
"Enter the API token": "Digite o token de API",
|
||||
"Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token": "Por favor, verifique https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n para ver como obter o token de API",
|
||||
"Create Task": "Criar tarefa",
|
||||
"Check Task Existence": "Verificar a existência da tarefa",
|
||||
"Get Client Details from e-mail": "Obter detalhes do cliente de e-mail",
|
||||
"Get Invoices": "Obter Faturas",
|
||||
"Get Report": "Obter Relatório",
|
||||
"Create Invoice": "Criar fatura",
|
||||
"Create Client": "Criar Cliente",
|
||||
"Create Recurring Invoice": "Criar Fatura Recorrente",
|
||||
"Perform Action on Recurring Invoice": "Executar Ação na Fatura Recorrente",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Creates a task instance in Invoice Ninja for billing purposes.": "Cria uma instância de tarefa no Ninja da Fatura para fins de faturamento.",
|
||||
"Verify if a Task Already Exists": "Verifique se uma tarefa já existe",
|
||||
"Gets the client details if they exist by e-mail.": "Obtém os detalhes do cliente se eles existem por e-mail.",
|
||||
"Gets data for invoices.": "Obtém dados para faturas.",
|
||||
"Gets report data from InvoiceNinja.": "Obtém dados de relatório da InvoiceNinja.",
|
||||
"Creates an invoice in Invoice Ninja for billing purposes.": "Cria uma fatura no Ninja da fatura para fins de faturamento.",
|
||||
"Creates a new client in InvoiceNinja.": "Cria um novo cliente na InvoiceNinja.",
|
||||
"Creates a recurring invoice in Invoice Ninja for billing purposes.": "Cria uma fatura recorrente na fatura Ninja para fins de faturamento.",
|
||||
"Actions include: start, stop, send_now, restore, archive, delete.": "As ações incluem: iniciar, parar, enviar_agora, restaurar, arquivar, excluir.",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Task or Ticket Number (alphanumeric)": "Task ou Ticket Number (alfanumérico)",
|
||||
"Client ID (alphanumeric)": "ID do cliente (alfanumérico)",
|
||||
"Project ID (alphanumeric)": "ID do Projeto (alfanumérico)",
|
||||
"Description of task": "Descrição da tarefa",
|
||||
"Custom hourly rate": "Preço por hora personalizado",
|
||||
"Client e-mail address": "Endereço de e-mail cliente",
|
||||
"Invoice Status": "Status da fatura",
|
||||
"Client ID": "ID do Cliente",
|
||||
"Max Results": "Resultados no Máx.",
|
||||
"Report Type": "Tipo De Relatório",
|
||||
"Purchase Order Number (alphanumeric)": "Número do pedido (alfanumérico)",
|
||||
"Apply discount": "Aplicar desconto",
|
||||
"Type of discount": "Tipo de desconto",
|
||||
"Public notes for invoice": "Notas públicas para fatura",
|
||||
"Private notes for invoice": "Notas privadas para fatura",
|
||||
"Order Items JSON string": "Itens do pedido JSON",
|
||||
"Send invoice to the client by InvoiceNinja e-mail?": "Enviar fatura para o cliente por e-mail InvoiceNinj?",
|
||||
"Mark the invoice as sent?": "Marcar a fatura como enviada?",
|
||||
"Invoice due date": "Data de vencimento",
|
||||
"Client First Name (alphanumeric)": "Primeiro Nome do Cliente (alfanumérico)",
|
||||
"Client Last Name (alphanumeric)": "Sobrenome do Cliente (alfanumérico)",
|
||||
"Client Contact No (alphanumeric)": "Número de Contato do Cliente (alfanumérico)",
|
||||
"Client e-mail (alphanumeric)": "E-mail do cliente (alfanumérico)",
|
||||
"Send invoices to the client": "Enviar faturas para o cliente",
|
||||
"Business Name (alphanumeric)": "Nome Comercial (alfanumérico)",
|
||||
"Client Tax Number (alphanumeric)": "Número Imposto do Cliente (alfanumérico)",
|
||||
"Private notes for client": "Notas privadas para o cliente",
|
||||
"Client address 1 (alphanumeric)": "Endereço do cliente 1 (alfanumérico)",
|
||||
"Client address 2 (alphanumeric)": "Endereço do cliente 2 (alfanumérico)",
|
||||
"Client City/Town (alphanumeric)": "Cidade do cliente/Cidade (alfanumérico)",
|
||||
"Client State (alphanumeric)": "Estado do Cliente (alfanumérico)",
|
||||
"Client Postcode (alphanumeric)": "CEP do Cliente (alfanumérico)",
|
||||
"Frequency of billing": "Frequência da cobrança",
|
||||
"No of billing cycles": "Sem ciclos de faturamento",
|
||||
"Override Frequency using Frequency ID (optional)": "Sobrescrever Frequência usando ID de Frequência (opcional)",
|
||||
"Invoice next send date": "Data do próximo envio",
|
||||
"Invoice last sent date": "Data do último envio",
|
||||
"Recurring Invoice ID (alphanumeric)": "ID da Fatura Recorrente (alfanumérico)",
|
||||
"Action to perform": "Ação a executar",
|
||||
"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)",
|
||||
"A unique task or ticket number that has not been used before in Invoice Ninja": "Uma tarefa ou tíquete única que não foi utilizada anteriormente na Invoice Ninja",
|
||||
"Client ID from Invoice Ninja (optional)": "ID do cliente a partir da fatura Ninja (opcional)",
|
||||
"Project ID from Invoice Ninja (optional)": "ID do Projeto da Fatura Ninja (opcional)",
|
||||
"Description of task to be billed": "Descrição da tarefa a ser cobrada",
|
||||
"Custom hourly rate (optional) otherwise default used": "Tarifa por hora personalizada (opcional) caso contrário padrão usado",
|
||||
"A task or ticket number to check": "Uma tarefa ou número do ticket para verificar",
|
||||
"A valid e-mail address to get client details for": "Um endereço de e-mail válido para obter detalhes do cliente",
|
||||
"Select the invoice status for filtering.": "Selecione o status da fatura para filtragem.",
|
||||
"Filter by Client ID, default is all clients.": "Filtro por ID do cliente, padrão é todos os clientes.",
|
||||
"Maximum number of results to return. 9999 is default.": "O número máximo de resultados a retornar. 9999 é o padrão.",
|
||||
"Select the report type.": "Selecione o tipo de relatório.",
|
||||
"Client ID from Invoice Ninja": "ID do cliente a partir de Invoice Ninja",
|
||||
"Descriptive text or arbitrary number (optional)": "Texto descritivo ou número arbitrário (opcional)",
|
||||
"Enter a number for the whole invoice discount": "Insira um número para todo o desconto da fatura",
|
||||
"Select either amount or percentage for invoice discount. Applies to line items and invoice.": "Selecione qualquer valor ou porcentagem para o desconto da fatura. Aplica-se à linha de itens e faturas.",
|
||||
"Text that may be visible in the client portal (optional)": "Texto que pode ser visível no portal do cliente (opcional)",
|
||||
"Text not visible for clients (optional)": "Texto não visível para os clientes (opcional)",
|
||||
"e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]": "ex., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]",
|
||||
"Should we send the invoice to the client on creation?": "Devemos enviar o pedido ao cliente ao criar?",
|
||||
"Makes the invoice active otherwise remains pending.": "Mantém a fatura ativa caso contrário permanece pendente.",
|
||||
"e.g., 2024-01-20": "ex.: 2024-01-20",
|
||||
"The contact first name for this client (optional)": "O primeiro nome do contato para este cliente (opcional)",
|
||||
"The contact last name for this client (optional)": "O sobrenome do contato para este cliente (opcional)",
|
||||
"The contact number for this client (optional)": "O número de contato para este cliente (opcional)",
|
||||
"The contact email for this client (compulsory)": "O e-mail de contato para este cliente (obrigatório)",
|
||||
"Should we send invoices to the client by e-mail?": "Devemos enviar faturas para o cliente por e-mail?",
|
||||
"Name of this business or natural person (compulsory)": "Nome desta empresa ou pessoa natural (obrigatório)",
|
||||
"Leave blank if not a business (optional)": "Deixe em branco se não for um negócio (opcional)",
|
||||
"Usually street name and number (compulsory)": "Geralmente o nome e o número da rua (obrigatório)",
|
||||
"Additional address details (optional)": "Detalhes adicionais do endereço (opcional)",
|
||||
"City or Town name (compulsory)": "Cidade ou da cidade (obrigatório)",
|
||||
"State or county or similar (optional)": "Estado ou país ou semelhante (opcional)",
|
||||
"Postal code (optional)": "Código postal (opcional)",
|
||||
"Choose one": "Escolha um",
|
||||
"Enter a number. How many times should this bill be generated": "Insira um número. Quantas vezes esta fatura deve ser gerada",
|
||||
"Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!": "Insira um número. 1-12 - corresponde à lista suspensa acima [Diariamente sendo 1, Semanal 2, etc..]!",
|
||||
"Recurring Invoice ID from Invoice Ninja": "Recorrente ID de Fatura de Ninja",
|
||||
"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..",
|
||||
"Unpaid Invoices": "Faturas não pagas",
|
||||
"Paid Invoices": "Faturas pagas",
|
||||
"Overdue Invoices": "Faturas Vencidas",
|
||||
"All Invoices": "Todas as Faturas",
|
||||
"Invoices": "Faturas",
|
||||
"Amount": "Quantidade",
|
||||
"Percentage": "Porcentagem",
|
||||
"Use override below": "Use substituição abaixo",
|
||||
"Daily": "Diariamente",
|
||||
"Weekly": "Semanalmente",
|
||||
"2 Weeks": "2 Semanas",
|
||||
"4 Weeks": "4 Semanas",
|
||||
"Monthly": "Mensual",
|
||||
"Two Months": "Dois meses",
|
||||
"Quarterly": "Trimestralmente",
|
||||
"Four Months": "Quatro meses",
|
||||
"Semi Annually": "Semi Anualmente",
|
||||
"Annually": "Anualmente",
|
||||
"Two Years": "Dois anos",
|
||||
"Three Years": "Três anos",
|
||||
"Start": "Iniciar",
|
||||
"Stop": "Interromper",
|
||||
"Send Now": "Envie Agora",
|
||||
"Restore": "RESTAURAR",
|
||||
"Archive": "Arquivo",
|
||||
"Delete": "Apagar",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA"
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
{
|
||||
"Invoice Ninja": "Счет Ниндзя",
|
||||
"Free open-source invoicing tool": "Бесплатный инструмент выставления счетов с открытым исходным кодом",
|
||||
"Base URL": "Базовый URL",
|
||||
"API Token": "API Token",
|
||||
"Enter the base URL": "Введите базовый URL",
|
||||
"Enter the API token": "Введите API token",
|
||||
"Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token": "Пожалуйста, проверьте https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n чтобы узнать, как получить API токен",
|
||||
"Create Task": "Создать задачу",
|
||||
"Check Task Existence": "Проверить наличие задачи",
|
||||
"Get Client Details from e-mail": "Получить детали клиента по электронной почте",
|
||||
"Get Invoices": "Получать счета",
|
||||
"Get Report": "Получить отчет",
|
||||
"Create Invoice": "Создать счет",
|
||||
"Create Client": "Создать клиента",
|
||||
"Create Recurring Invoice": "Создать повторяющийся счет",
|
||||
"Perform Action on Recurring Invoice": "Выполнить действия по периодическому счету",
|
||||
"Custom API Call": "Пользовательский вызов API",
|
||||
"Creates a task instance in Invoice Ninja for billing purposes.": "Создает экземпляр задачи в счет-фактуре Ninja для целей выставления счетов.",
|
||||
"Verify if a Task Already Exists": "Проверьте, существует ли задача",
|
||||
"Gets the client details if they exist by e-mail.": "Получает данные клиента, если они существуют по электронной почте.",
|
||||
"Gets data for invoices.": "Получает данные для счетов-фактур.",
|
||||
"Gets report data from InvoiceNinja.": "Получает отчет от InvoiceNinja.",
|
||||
"Creates an invoice in Invoice Ninja for billing purposes.": "Создает счет в счет-фактуре Ninja для расчетов.",
|
||||
"Creates a new client in InvoiceNinja.": "Создает нового клиента в InvoiceNinja.",
|
||||
"Creates a recurring invoice in Invoice Ninja for billing purposes.": "Создает повторяющийся счет в счет-фактуре Ninja для расчетов.",
|
||||
"Actions include: start, stop, send_now, restore, archive, delete.": "Действия включают: start, stop, send_now, restore, archive, delete.",
|
||||
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
|
||||
"Task or Ticket Number (alphanumeric)": "Номер задачи или Заявки (буквенно-цифровый)",
|
||||
"Client ID (alphanumeric)": "ID клиента (буквенно-цифровый)",
|
||||
"Project ID (alphanumeric)": "ID проекта (буквенно-цифровый)",
|
||||
"Description of task": "Описание задачи",
|
||||
"Custom hourly rate": "Настраиваемая почасовая ставка",
|
||||
"Client e-mail address": "Адрес электронной почты клиента",
|
||||
"Invoice Status": "Статус счета",
|
||||
"Client ID": "ID клиента",
|
||||
"Max Results": "Макс. результатов",
|
||||
"Report Type": "Тип отчета",
|
||||
"Purchase Order Number (alphanumeric)": "Номер заказа на покупку (буквенно-цифровый)",
|
||||
"Apply discount": "Применить скидку",
|
||||
"Type of discount": "Тип скидки",
|
||||
"Public notes for invoice": "Публичные заметки к счету",
|
||||
"Private notes for invoice": "Приватные заметки к счету",
|
||||
"Order Items JSON string": "Строка заказа JSON элементов",
|
||||
"Send invoice to the client by InvoiceNinja e-mail?": "Отправить счет клиенту по электронной почте InvoiceNinja?",
|
||||
"Mark the invoice as sent?": "Отметить счет-фактуру как отправленный?",
|
||||
"Invoice due date": "Срок оплаты счёта",
|
||||
"Client First Name (alphanumeric)": "Имя клиента (буквенно-цифровый)",
|
||||
"Client Last Name (alphanumeric)": "Фамилия клиента (буквенно-цифровый)",
|
||||
"Client Contact No (alphanumeric)": "Контакт клиента № (буквенно-цифровый)",
|
||||
"Client e-mail (alphanumeric)": "Электронная почта клиента (буквенно-цифровый)",
|
||||
"Send invoices to the client": "Отправлять счета клиенту",
|
||||
"Business Name (alphanumeric)": "Бизнес Имя (буквенно-цифровый)",
|
||||
"Client Tax Number (alphanumeric)": "Номер налога клиента (буквенно-цифровый)",
|
||||
"Private notes for client": "Личные заметки для клиента",
|
||||
"Client address 1 (alphanumeric)": "Адрес клиента 1 (буквенно-цифровый)",
|
||||
"Client address 2 (alphanumeric)": "Адрес клиента 2 (буквенно-цифровый)",
|
||||
"Client City/Town (alphanumeric)": "Город клиента/город (буквенно-цифровый)",
|
||||
"Client State (alphanumeric)": "Состояние клиента (альфанумерический)",
|
||||
"Client Postcode (alphanumeric)": "Почтовый индекс клиента (альфанумерический)",
|
||||
"Frequency of billing": "Частота выставления счетов",
|
||||
"No of billing cycles": "Нет биллинговых циклов",
|
||||
"Override Frequency using Frequency ID (optional)": "Переопределить частоту с помощью идентификатора частоты (опционально)",
|
||||
"Invoice next send date": "Счет на дату следующей отправки",
|
||||
"Invoice last sent date": "Дата последней отправки счёта",
|
||||
"Recurring Invoice ID (alphanumeric)": "Код повторяющегося счета (буквенно-цифровый)",
|
||||
"Action to perform": "Действие для выполнения",
|
||||
"Method": "Метод",
|
||||
"Headers": "Заголовки",
|
||||
"Query Parameters": "Параметры запроса",
|
||||
"Body": "Тело",
|
||||
"No Error on Failure": "Нет ошибок при ошибке",
|
||||
"Timeout (in seconds)": "Таймаут (в секундах)",
|
||||
"A unique task or ticket number that has not been used before in Invoice Ninja": "Уникальная задача или номер билета, которые не были использованы ранее в Счете Нинджа",
|
||||
"Client ID from Invoice Ninja (optional)": "ID клиента из счета-фактуры Ninja (опционально)",
|
||||
"Project ID from Invoice Ninja (optional)": "ID проекта из счета-фактуры Ninja (опционально)",
|
||||
"Description of task to be billed": "Описание задачи, подлежащей оплате",
|
||||
"Custom hourly rate (optional) otherwise default used": "Пользовательская почасовая ставка (необязательно) в противном случае используется по умолчанию",
|
||||
"A task or ticket number to check": "Номер задачи или заявки для проверки",
|
||||
"A valid e-mail address to get client details for": "Действительный адрес электронной почты для получения информации о клиенте",
|
||||
"Select the invoice status for filtering.": "Выберите статус счета для фильтрации.",
|
||||
"Filter by Client ID, default is all clients.": "Фильтр по ID клиента, по умолчанию - все клиенты.",
|
||||
"Maximum number of results to return. 9999 is default.": "Максимальное количество результатов возврата. 9999 по умолчанию.",
|
||||
"Select the report type.": "Выберите тип отчета.",
|
||||
"Client ID from Invoice Ninja": "ID клиента из счета-фактуры Ninja",
|
||||
"Descriptive text or arbitrary number (optional)": "Описательный текст или произвольное число (необязательно)",
|
||||
"Enter a number for the whole invoice discount": "Введите номер для всей скидки на счет",
|
||||
"Select either amount or percentage for invoice discount. Applies to line items and invoice.": "Выберите сумму или процент для скидки на счет-фактуру. Применяется к позициям и счету.",
|
||||
"Text that may be visible in the client portal (optional)": "Текст, который может быть виден на портале клиента (опционально)",
|
||||
"Text not visible for clients (optional)": "Текст не виден для клиентов (опционально)",
|
||||
"e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]": "например, [{ \"quantity\":1,\"product_key\":\"Ключ продукта\", \"discount\": \"0\" }]",
|
||||
"Should we send the invoice to the client on creation?": "Должны ли мы выслать счет клиенту при его создании?",
|
||||
"Makes the invoice active otherwise remains pending.": "Активирует счет-фактуру в противном случае остается в ожидании.",
|
||||
"e.g., 2024-01-20": "например, 2024-01-20",
|
||||
"The contact first name for this client (optional)": "Имя контакта для этого клиента (опционально)",
|
||||
"The contact last name for this client (optional)": "Фамилия контакта для этого клиента (опционально)",
|
||||
"The contact number for this client (optional)": "Контактный номер для этого клиента (опционально)",
|
||||
"The contact email for this client (compulsory)": "Контактное письмо для этого клиента (обязательно)",
|
||||
"Should we send invoices to the client by e-mail?": "Должны ли мы отправлять счета клиенту по электронной почте?",
|
||||
"Name of this business or natural person (compulsory)": "Имя этого предприятия или физического лица (обязательно)",
|
||||
"Leave blank if not a business (optional)": "Оставить пустым, если не бизнес (опционально)",
|
||||
"Usually street name and number (compulsory)": "Обычно название и номер улицы (обязательно)",
|
||||
"Additional address details (optional)": "Дополнительная информация об адресе (опционально)",
|
||||
"City or Town name (compulsory)": "Название города или города (обязательно)",
|
||||
"State or county or similar (optional)": "Государство или графство или аналогичное (факультативно)",
|
||||
"Postal code (optional)": "Почтовый индекс (опционально)",
|
||||
"Choose one": "Выберите один",
|
||||
"Enter a number. How many times should this bill be generated": "Введите число. Сколько раз должен быть сгенерирован счет",
|
||||
"Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!": "Введите число. 1-12 - соответствует выпадающему списку [Ежедневно 1, неделю 2 и т.д..]!",
|
||||
"Recurring Invoice ID from Invoice Ninja": "Повторяющийся идентификатор счета-фактуры Ninja",
|
||||
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
|
||||
"Unpaid Invoices": "Неоплаченные счета",
|
||||
"Paid Invoices": "Платные счета",
|
||||
"Overdue Invoices": "Просроченные счета",
|
||||
"All Invoices": "Все счета",
|
||||
"Invoices": "Счета",
|
||||
"Amount": "Сумма",
|
||||
"Percentage": "Процент",
|
||||
"Use override below": "Использовать переопределение ниже",
|
||||
"Daily": "Ежедневно",
|
||||
"Weekly": "Еженедельно",
|
||||
"2 Weeks": "2 недели",
|
||||
"4 Weeks": "4 недели",
|
||||
"Monthly": "Ежемесячно",
|
||||
"Two Months": "Два месяца",
|
||||
"Quarterly": "Квартал",
|
||||
"Four Months": "Четыре месяца",
|
||||
"Semi Annually": "Пол на ежегодной основе",
|
||||
"Annually": "Ежегодно",
|
||||
"Two Years": "Два года",
|
||||
"Three Years": "Три года",
|
||||
"Start": "Начать",
|
||||
"Stop": "Остановить",
|
||||
"Send Now": "Отправить сейчас",
|
||||
"Restore": "Восстановить",
|
||||
"Archive": "Архивировать",
|
||||
"Delete": "Delete",
|
||||
"GET": "ПОЛУЧИТЬ",
|
||||
"POST": "ПОСТ",
|
||||
"PATCH": "ПАТЧ",
|
||||
"PUT": "ПОКУПИТЬ",
|
||||
"DELETE": "УДАЛИТЬ",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"Free open-source invoicing tool": "Free open-source invoicing tool",
|
||||
"Base URL": "Base URL",
|
||||
"API Token": "API Token",
|
||||
"Enter the base URL": "Enter the base URL",
|
||||
"Enter the API token": "Enter the API token",
|
||||
"Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token": "Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token",
|
||||
"Create Task": "Create Task",
|
||||
"Check Task Existence": "Check Task Existence",
|
||||
"Get Client Details from e-mail": "Get Client Details from e-mail",
|
||||
"Get Invoices": "Get Invoices",
|
||||
"Get Report": "Get Report",
|
||||
"Create Invoice": "Create Invoice",
|
||||
"Create Client": "Create Client",
|
||||
"Create Recurring Invoice": "Create Recurring Invoice",
|
||||
"Perform Action on Recurring Invoice": "Perform Action on Recurring Invoice",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates a task instance in Invoice Ninja for billing purposes.": "Creates a task instance in Invoice Ninja for billing purposes.",
|
||||
"Verify if a Task Already Exists": "Verify if a Task Already Exists",
|
||||
"Gets the client details if they exist by e-mail.": "Gets the client details if they exist by e-mail.",
|
||||
"Gets data for invoices.": "Gets data for invoices.",
|
||||
"Gets report data from InvoiceNinja.": "Gets report data from InvoiceNinja.",
|
||||
"Creates an invoice in Invoice Ninja for billing purposes.": "Creates an invoice in Invoice Ninja for billing purposes.",
|
||||
"Creates a new client in InvoiceNinja.": "Creates a new client in InvoiceNinja.",
|
||||
"Creates a recurring invoice in Invoice Ninja for billing purposes.": "Creates a recurring invoice in Invoice Ninja for billing purposes.",
|
||||
"Actions include: start, stop, send_now, restore, archive, delete.": "Actions include: start, stop, send_now, restore, archive, delete.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Task or Ticket Number (alphanumeric)": "Task or Ticket Number (alphanumeric)",
|
||||
"Client ID (alphanumeric)": "Client ID (alphanumeric)",
|
||||
"Project ID (alphanumeric)": "Project ID (alphanumeric)",
|
||||
"Description of task": "Description of task",
|
||||
"Custom hourly rate": "Custom hourly rate",
|
||||
"Client e-mail address": "Client e-mail address",
|
||||
"Invoice Status": "Invoice Status",
|
||||
"Client ID": "Client ID",
|
||||
"Max Results": "Max Results",
|
||||
"Report Type": "Report Type",
|
||||
"Purchase Order Number (alphanumeric)": "Purchase Order Number (alphanumeric)",
|
||||
"Apply discount": "Apply discount",
|
||||
"Type of discount": "Type of discount",
|
||||
"Public notes for invoice": "Public notes for invoice",
|
||||
"Private notes for invoice": "Private notes for invoice",
|
||||
"Order Items JSON string": "Order Items JSON string",
|
||||
"Send invoice to the client by InvoiceNinja e-mail?": "Send invoice to the client by InvoiceNinja e-mail?",
|
||||
"Mark the invoice as sent?": "Mark the invoice as sent?",
|
||||
"Invoice due date": "Invoice due date",
|
||||
"Client First Name (alphanumeric)": "Client First Name (alphanumeric)",
|
||||
"Client Last Name (alphanumeric)": "Client Last Name (alphanumeric)",
|
||||
"Client Contact No (alphanumeric)": "Client Contact No (alphanumeric)",
|
||||
"Client e-mail (alphanumeric)": "Client e-mail (alphanumeric)",
|
||||
"Send invoices to the client": "Send invoices to the client",
|
||||
"Business Name (alphanumeric)": "Business Name (alphanumeric)",
|
||||
"Client Tax Number (alphanumeric)": "Client Tax Number (alphanumeric)",
|
||||
"Private notes for client": "Private notes for client",
|
||||
"Client address 1 (alphanumeric)": "Client address 1 (alphanumeric)",
|
||||
"Client address 2 (alphanumeric)": "Client address 2 (alphanumeric)",
|
||||
"Client City/Town (alphanumeric)": "Client City/Town (alphanumeric)",
|
||||
"Client State (alphanumeric)": "Client State (alphanumeric)",
|
||||
"Client Postcode (alphanumeric)": "Client Postcode (alphanumeric)",
|
||||
"Frequency of billing": "Frequency of billing",
|
||||
"No of billing cycles": "No of billing cycles",
|
||||
"Override Frequency using Frequency ID (optional)": "Override Frequency using Frequency ID (optional)",
|
||||
"Invoice next send date": "Invoice next send date",
|
||||
"Invoice last sent date": "Invoice last sent date",
|
||||
"Recurring Invoice ID (alphanumeric)": "Recurring Invoice ID (alphanumeric)",
|
||||
"Action to perform": "Action to perform",
|
||||
"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)",
|
||||
"A unique task or ticket number that has not been used before in Invoice Ninja": "A unique task or ticket number that has not been used before in Invoice Ninja",
|
||||
"Client ID from Invoice Ninja (optional)": "Client ID from Invoice Ninja (optional)",
|
||||
"Project ID from Invoice Ninja (optional)": "Project ID from Invoice Ninja (optional)",
|
||||
"Description of task to be billed": "Description of task to be billed",
|
||||
"Custom hourly rate (optional) otherwise default used": "Custom hourly rate (optional) otherwise default used",
|
||||
"A task or ticket number to check": "A task or ticket number to check",
|
||||
"A valid e-mail address to get client details for": "A valid e-mail address to get client details for",
|
||||
"Select the invoice status for filtering.": "Select the invoice status for filtering.",
|
||||
"Filter by Client ID, default is all clients.": "Filter by Client ID, default is all clients.",
|
||||
"Maximum number of results to return. 9999 is default.": "Maximum number of results to return. 9999 is default.",
|
||||
"Select the report type.": "Select the report type.",
|
||||
"Client ID from Invoice Ninja": "Client ID from Invoice Ninja",
|
||||
"Descriptive text or arbitrary number (optional)": "Descriptive text or arbitrary number (optional)",
|
||||
"Enter a number for the whole invoice discount": "Enter a number for the whole invoice discount",
|
||||
"Select either amount or percentage for invoice discount. Applies to line items and invoice.": "Select either amount or percentage for invoice discount. Applies to line items and invoice.",
|
||||
"Text that may be visible in the client portal (optional)": "Text that may be visible in the client portal (optional)",
|
||||
"Text not visible for clients (optional)": "Text not visible for clients (optional)",
|
||||
"e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]": "e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]",
|
||||
"Should we send the invoice to the client on creation?": "Should we send the invoice to the client on creation?",
|
||||
"Makes the invoice active otherwise remains pending.": "Makes the invoice active otherwise remains pending.",
|
||||
"e.g., 2024-01-20": "e.g., 2024-01-20",
|
||||
"The contact first name for this client (optional)": "The contact first name for this client (optional)",
|
||||
"The contact last name for this client (optional)": "The contact last name for this client (optional)",
|
||||
"The contact number for this client (optional)": "The contact number for this client (optional)",
|
||||
"The contact email for this client (compulsory)": "The contact email for this client (compulsory)",
|
||||
"Should we send invoices to the client by e-mail?": "Should we send invoices to the client by e-mail?",
|
||||
"Name of this business or natural person (compulsory)": "Name of this business or natural person (compulsory)",
|
||||
"Leave blank if not a business (optional)": "Leave blank if not a business (optional)",
|
||||
"Usually street name and number (compulsory)": "Usually street name and number (compulsory)",
|
||||
"Additional address details (optional)": "Additional address details (optional)",
|
||||
"City or Town name (compulsory)": "City or Town name (compulsory)",
|
||||
"State or county or similar (optional)": "State or county or similar (optional)",
|
||||
"Postal code (optional)": "Postal code (optional)",
|
||||
"Choose one": "Choose one",
|
||||
"Enter a number. How many times should this bill be generated": "Enter a number. How many times should this bill be generated",
|
||||
"Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!": "Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!",
|
||||
"Recurring Invoice ID from Invoice Ninja": "Recurring Invoice ID from Invoice Ninja",
|
||||
"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..",
|
||||
"Unpaid Invoices": "Unpaid Invoices",
|
||||
"Paid Invoices": "Paid Invoices",
|
||||
"Overdue Invoices": "Overdue Invoices",
|
||||
"All Invoices": "All Invoices",
|
||||
"Invoices": "Invoices",
|
||||
"Amount": "Amount",
|
||||
"Percentage": "Percentage",
|
||||
"Use override below": "Use override below",
|
||||
"Daily": "Daily",
|
||||
"Weekly": "Weekly",
|
||||
"2 Weeks": "2 Weeks",
|
||||
"4 Weeks": "4 Weeks",
|
||||
"Monthly": "Monthly",
|
||||
"Two Months": "Two Months",
|
||||
"Quarterly": "Quarterly",
|
||||
"Four Months": "Four Months",
|
||||
"Semi Annually": "Semi Annually",
|
||||
"Annually": "Annually",
|
||||
"Two Years": "Two Years",
|
||||
"Three Years": "Three Years",
|
||||
"Start": "Start",
|
||||
"Stop": "Stop",
|
||||
"Send Now": "Send Now",
|
||||
"Restore": "Restore",
|
||||
"Archive": "Archive",
|
||||
"Delete": "Delete",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
{
|
||||
"Invoice Ninja": "Invoice Ninja",
|
||||
"Free open-source invoicing tool": "Free open-source invoicing tool",
|
||||
"Base URL": "Base URL",
|
||||
"API Token": "API Token",
|
||||
"Enter the base URL": "Enter the base URL",
|
||||
"Enter the API token": "Enter the API token",
|
||||
"Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token": "Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token",
|
||||
"Create Task": "Create Task",
|
||||
"Check Task Existence": "Check Task Existence",
|
||||
"Get Client Details from e-mail": "Get Client Details from e-mail",
|
||||
"Get Invoices": "Get Invoices",
|
||||
"Get Report": "Get Report",
|
||||
"Create Invoice": "Create Invoice",
|
||||
"Create Client": "Create Client",
|
||||
"Create Recurring Invoice": "Create Recurring Invoice",
|
||||
"Perform Action on Recurring Invoice": "Perform Action on Recurring Invoice",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates a task instance in Invoice Ninja for billing purposes.": "Creates a task instance in Invoice Ninja for billing purposes.",
|
||||
"Verify if a Task Already Exists": "Verify if a Task Already Exists",
|
||||
"Gets the client details if they exist by e-mail.": "Gets the client details if they exist by e-mail.",
|
||||
"Gets data for invoices.": "Gets data for invoices.",
|
||||
"Gets report data from InvoiceNinja.": "Gets report data from InvoiceNinja.",
|
||||
"Creates an invoice in Invoice Ninja for billing purposes.": "Creates an invoice in Invoice Ninja for billing purposes.",
|
||||
"Creates a new client in InvoiceNinja.": "Creates a new client in InvoiceNinja.",
|
||||
"Creates a recurring invoice in Invoice Ninja for billing purposes.": "Creates a recurring invoice in Invoice Ninja for billing purposes.",
|
||||
"Actions include: start, stop, send_now, restore, archive, delete.": "Actions include: start, stop, send_now, restore, archive, delete.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Task or Ticket Number (alphanumeric)": "Task or Ticket Number (alphanumeric)",
|
||||
"Client ID (alphanumeric)": "Client ID (alphanumeric)",
|
||||
"Project ID (alphanumeric)": "Project ID (alphanumeric)",
|
||||
"Description of task": "Description of task",
|
||||
"Custom hourly rate": "Custom hourly rate",
|
||||
"Client e-mail address": "Client e-mail address",
|
||||
"Invoice Status": "Invoice Status",
|
||||
"Client ID": "ID khách hàng",
|
||||
"Max Results": "Max Results",
|
||||
"Report Type": "Report Type",
|
||||
"Purchase Order Number (alphanumeric)": "Purchase Order Number (alphanumeric)",
|
||||
"Apply discount": "Apply discount",
|
||||
"Type of discount": "Type of discount",
|
||||
"Public notes for invoice": "Public notes for invoice",
|
||||
"Private notes for invoice": "Private notes for invoice",
|
||||
"Order Items JSON string": "Order Items JSON string",
|
||||
"Send invoice to the client by InvoiceNinja e-mail?": "Send invoice to the client by InvoiceNinja e-mail?",
|
||||
"Mark the invoice as sent?": "Mark the invoice as sent?",
|
||||
"Invoice due date": "Invoice due date",
|
||||
"Client First Name (alphanumeric)": "Client First Name (alphanumeric)",
|
||||
"Client Last Name (alphanumeric)": "Client Last Name (alphanumeric)",
|
||||
"Client Contact No (alphanumeric)": "Client Contact No (alphanumeric)",
|
||||
"Client e-mail (alphanumeric)": "Client e-mail (alphanumeric)",
|
||||
"Send invoices to the client": "Send invoices to the client",
|
||||
"Business Name (alphanumeric)": "Business Name (alphanumeric)",
|
||||
"Client Tax Number (alphanumeric)": "Client Tax Number (alphanumeric)",
|
||||
"Private notes for client": "Private notes for client",
|
||||
"Client address 1 (alphanumeric)": "Client address 1 (alphanumeric)",
|
||||
"Client address 2 (alphanumeric)": "Client address 2 (alphanumeric)",
|
||||
"Client City/Town (alphanumeric)": "Client City/Town (alphanumeric)",
|
||||
"Client State (alphanumeric)": "Client State (alphanumeric)",
|
||||
"Client Postcode (alphanumeric)": "Client Postcode (alphanumeric)",
|
||||
"Frequency of billing": "Frequency of billing",
|
||||
"No of billing cycles": "No of billing cycles",
|
||||
"Override Frequency using Frequency ID (optional)": "Override Frequency using Frequency ID (optional)",
|
||||
"Invoice next send date": "Invoice next send date",
|
||||
"Invoice last sent date": "Invoice last sent date",
|
||||
"Recurring Invoice ID (alphanumeric)": "Recurring Invoice ID (alphanumeric)",
|
||||
"Action to perform": "Action to perform",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"A unique task or ticket number that has not been used before in Invoice Ninja": "A unique task or ticket number that has not been used before in Invoice Ninja",
|
||||
"Client ID from Invoice Ninja (optional)": "Client ID from Invoice Ninja (optional)",
|
||||
"Project ID from Invoice Ninja (optional)": "Project ID from Invoice Ninja (optional)",
|
||||
"Description of task to be billed": "Description of task to be billed",
|
||||
"Custom hourly rate (optional) otherwise default used": "Custom hourly rate (optional) otherwise default used",
|
||||
"A task or ticket number to check": "A task or ticket number to check",
|
||||
"A valid e-mail address to get client details for": "A valid e-mail address to get client details for",
|
||||
"Select the invoice status for filtering.": "Select the invoice status for filtering.",
|
||||
"Filter by Client ID, default is all clients.": "Filter by Client ID, default is all clients.",
|
||||
"Maximum number of results to return. 9999 is default.": "Maximum number of results to return. 9999 is default.",
|
||||
"Select the report type.": "Select the report type.",
|
||||
"Client ID from Invoice Ninja": "Client ID from Invoice Ninja",
|
||||
"Descriptive text or arbitrary number (optional)": "Descriptive text or arbitrary number (optional)",
|
||||
"Enter a number for the whole invoice discount": "Enter a number for the whole invoice discount",
|
||||
"Select either amount or percentage for invoice discount. Applies to line items and invoice.": "Select either amount or percentage for invoice discount. Applies to line items and invoice.",
|
||||
"Text that may be visible in the client portal (optional)": "Text that may be visible in the client portal (optional)",
|
||||
"Text not visible for clients (optional)": "Text not visible for clients (optional)",
|
||||
"e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]": "e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]",
|
||||
"Should we send the invoice to the client on creation?": "Should we send the invoice to the client on creation?",
|
||||
"Makes the invoice active otherwise remains pending.": "Makes the invoice active otherwise remains pending.",
|
||||
"e.g., 2024-01-20": "e.g., 2024-01-20",
|
||||
"The contact first name for this client (optional)": "The contact first name for this client (optional)",
|
||||
"The contact last name for this client (optional)": "The contact last name for this client (optional)",
|
||||
"The contact number for this client (optional)": "The contact number for this client (optional)",
|
||||
"The contact email for this client (compulsory)": "The contact email for this client (compulsory)",
|
||||
"Should we send invoices to the client by e-mail?": "Should we send invoices to the client by e-mail?",
|
||||
"Name of this business or natural person (compulsory)": "Name of this business or natural person (compulsory)",
|
||||
"Leave blank if not a business (optional)": "Leave blank if not a business (optional)",
|
||||
"Usually street name and number (compulsory)": "Usually street name and number (compulsory)",
|
||||
"Additional address details (optional)": "Additional address details (optional)",
|
||||
"City or Town name (compulsory)": "City or Town name (compulsory)",
|
||||
"State or county or similar (optional)": "State or county or similar (optional)",
|
||||
"Postal code (optional)": "Postal code (optional)",
|
||||
"Choose one": "Choose one",
|
||||
"Enter a number. How many times should this bill be generated": "Enter a number. How many times should this bill be generated",
|
||||
"Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!": "Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!",
|
||||
"Recurring Invoice ID from Invoice Ninja": "Recurring Invoice ID from Invoice Ninja",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"Unpaid Invoices": "Unpaid Invoices",
|
||||
"Paid Invoices": "Paid Invoices",
|
||||
"Overdue Invoices": "Overdue Invoices",
|
||||
"All Invoices": "All Invoices",
|
||||
"Invoices": "Invoices",
|
||||
"Amount": "Amount",
|
||||
"Percentage": "Percentage",
|
||||
"Use override below": "Use override below",
|
||||
"Daily": "Daily",
|
||||
"Weekly": "Weekly",
|
||||
"2 Weeks": "2 Weeks",
|
||||
"4 Weeks": "4 Weeks",
|
||||
"Monthly": "Monthly",
|
||||
"Two Months": "Two Months",
|
||||
"Quarterly": "Quarterly",
|
||||
"Four Months": "Four Months",
|
||||
"Semi Annually": "Semi Annually",
|
||||
"Annually": "Annually",
|
||||
"Two Years": "Two Years",
|
||||
"Three Years": "Three Years",
|
||||
"Start": "Start",
|
||||
"Stop": "Stop",
|
||||
"Send Now": "Send Now",
|
||||
"Restore": "Restore",
|
||||
"Archive": "Archive",
|
||||
"Delete": "Delete",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"Free open-source invoicing tool": "Free open-source invoicing tool",
|
||||
"Base URL": "基本网址",
|
||||
"API Token": "API Token",
|
||||
"Enter the base URL": "Enter the base URL",
|
||||
"Enter the API token": "Enter the API token",
|
||||
"Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token": "Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token\n to see how to get the API token",
|
||||
"Create Task": "Create Task",
|
||||
"Check Task Existence": "Check Task Existence",
|
||||
"Get Client Details from e-mail": "Get Client Details from e-mail",
|
||||
"Get Invoices": "Get Invoices",
|
||||
"Get Report": "Get Report",
|
||||
"Create Invoice": "Create Invoice",
|
||||
"Create Client": "Create Client",
|
||||
"Create Recurring Invoice": "Create Recurring Invoice",
|
||||
"Perform Action on Recurring Invoice": "Perform Action on Recurring Invoice",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Creates a task instance in Invoice Ninja for billing purposes.": "Creates a task instance in Invoice Ninja for billing purposes.",
|
||||
"Verify if a Task Already Exists": "Verify if a Task Already Exists",
|
||||
"Gets the client details if they exist by e-mail.": "Gets the client details if they exist by e-mail.",
|
||||
"Gets data for invoices.": "Gets data for invoices.",
|
||||
"Gets report data from InvoiceNinja.": "Gets report data from InvoiceNinja.",
|
||||
"Creates an invoice in Invoice Ninja for billing purposes.": "Creates an invoice in Invoice Ninja for billing purposes.",
|
||||
"Creates a new client in InvoiceNinja.": "Creates a new client in InvoiceNinja.",
|
||||
"Creates a recurring invoice in Invoice Ninja for billing purposes.": "Creates a recurring invoice in Invoice Ninja for billing purposes.",
|
||||
"Actions include: start, stop, send_now, restore, archive, delete.": "Actions include: start, stop, send_now, restore, archive, delete.",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Task or Ticket Number (alphanumeric)": "Task or Ticket Number (alphanumeric)",
|
||||
"Client ID (alphanumeric)": "Client ID (alphanumeric)",
|
||||
"Project ID (alphanumeric)": "Project ID (alphanumeric)",
|
||||
"Description of task": "Description of task",
|
||||
"Custom hourly rate": "Custom hourly rate",
|
||||
"Client e-mail address": "Client e-mail address",
|
||||
"Invoice Status": "Invoice Status",
|
||||
"Client ID": "客户端ID",
|
||||
"Max Results": "Max Results",
|
||||
"Report Type": "Report Type",
|
||||
"Purchase Order Number (alphanumeric)": "Purchase Order Number (alphanumeric)",
|
||||
"Apply discount": "Apply discount",
|
||||
"Type of discount": "Type of discount",
|
||||
"Public notes for invoice": "Public notes for invoice",
|
||||
"Private notes for invoice": "Private notes for invoice",
|
||||
"Order Items JSON string": "Order Items JSON string",
|
||||
"Send invoice to the client by InvoiceNinja e-mail?": "Send invoice to the client by InvoiceNinja e-mail?",
|
||||
"Mark the invoice as sent?": "Mark the invoice as sent?",
|
||||
"Invoice due date": "Invoice due date",
|
||||
"Client First Name (alphanumeric)": "Client First Name (alphanumeric)",
|
||||
"Client Last Name (alphanumeric)": "Client Last Name (alphanumeric)",
|
||||
"Client Contact No (alphanumeric)": "Client Contact No (alphanumeric)",
|
||||
"Client e-mail (alphanumeric)": "Client e-mail (alphanumeric)",
|
||||
"Send invoices to the client": "Send invoices to the client",
|
||||
"Business Name (alphanumeric)": "Business Name (alphanumeric)",
|
||||
"Client Tax Number (alphanumeric)": "Client Tax Number (alphanumeric)",
|
||||
"Private notes for client": "Private notes for client",
|
||||
"Client address 1 (alphanumeric)": "Client address 1 (alphanumeric)",
|
||||
"Client address 2 (alphanumeric)": "Client address 2 (alphanumeric)",
|
||||
"Client City/Town (alphanumeric)": "Client City/Town (alphanumeric)",
|
||||
"Client State (alphanumeric)": "Client State (alphanumeric)",
|
||||
"Client Postcode (alphanumeric)": "Client Postcode (alphanumeric)",
|
||||
"Frequency of billing": "Frequency of billing",
|
||||
"No of billing cycles": "No of billing cycles",
|
||||
"Override Frequency using Frequency ID (optional)": "Override Frequency using Frequency ID (optional)",
|
||||
"Invoice next send date": "Invoice next send date",
|
||||
"Invoice last sent date": "Invoice last sent date",
|
||||
"Recurring Invoice ID (alphanumeric)": "Recurring Invoice ID (alphanumeric)",
|
||||
"Action to perform": "Action to perform",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"A unique task or ticket number that has not been used before in Invoice Ninja": "A unique task or ticket number that has not been used before in Invoice Ninja",
|
||||
"Client ID from Invoice Ninja (optional)": "Client ID from Invoice Ninja (optional)",
|
||||
"Project ID from Invoice Ninja (optional)": "Project ID from Invoice Ninja (optional)",
|
||||
"Description of task to be billed": "Description of task to be billed",
|
||||
"Custom hourly rate (optional) otherwise default used": "Custom hourly rate (optional) otherwise default used",
|
||||
"A task or ticket number to check": "A task or ticket number to check",
|
||||
"A valid e-mail address to get client details for": "A valid e-mail address to get client details for",
|
||||
"Select the invoice status for filtering.": "Select the invoice status for filtering.",
|
||||
"Filter by Client ID, default is all clients.": "Filter by Client ID, default is all clients.",
|
||||
"Maximum number of results to return. 9999 is default.": "Maximum number of results to return. 9999 is default.",
|
||||
"Select the report type.": "Select the report type.",
|
||||
"Client ID from Invoice Ninja": "Client ID from Invoice Ninja",
|
||||
"Descriptive text or arbitrary number (optional)": "Descriptive text or arbitrary number (optional)",
|
||||
"Enter a number for the whole invoice discount": "Enter a number for the whole invoice discount",
|
||||
"Select either amount or percentage for invoice discount. Applies to line items and invoice.": "Select either amount or percentage for invoice discount. Applies to line items and invoice.",
|
||||
"Text that may be visible in the client portal (optional)": "Text that may be visible in the client portal (optional)",
|
||||
"Text not visible for clients (optional)": "Text not visible for clients (optional)",
|
||||
"e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]": "e.g., [{ \"quantity\":1,\"product_key\":\"product key\", \"discount\": \"0\" }]",
|
||||
"Should we send the invoice to the client on creation?": "Should we send the invoice to the client on creation?",
|
||||
"Makes the invoice active otherwise remains pending.": "Makes the invoice active otherwise remains pending.",
|
||||
"e.g., 2024-01-20": "e.g., 2024-01-20",
|
||||
"The contact first name for this client (optional)": "The contact first name for this client (optional)",
|
||||
"The contact last name for this client (optional)": "The contact last name for this client (optional)",
|
||||
"The contact number for this client (optional)": "The contact number for this client (optional)",
|
||||
"The contact email for this client (compulsory)": "The contact email for this client (compulsory)",
|
||||
"Should we send invoices to the client by e-mail?": "Should we send invoices to the client by e-mail?",
|
||||
"Name of this business or natural person (compulsory)": "Name of this business or natural person (compulsory)",
|
||||
"Leave blank if not a business (optional)": "Leave blank if not a business (optional)",
|
||||
"Usually street name and number (compulsory)": "Usually street name and number (compulsory)",
|
||||
"Additional address details (optional)": "Additional address details (optional)",
|
||||
"City or Town name (compulsory)": "City or Town name (compulsory)",
|
||||
"State or county or similar (optional)": "State or county or similar (optional)",
|
||||
"Postal code (optional)": "Postal code (optional)",
|
||||
"Choose one": "Choose one",
|
||||
"Enter a number. How many times should this bill be generated": "Enter a number. How many times should this bill be generated",
|
||||
"Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!": "Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!",
|
||||
"Recurring Invoice ID from Invoice Ninja": "Recurring Invoice ID from Invoice Ninja",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"Unpaid Invoices": "Unpaid Invoices",
|
||||
"Paid Invoices": "Paid Invoices",
|
||||
"Overdue Invoices": "Overdue Invoices",
|
||||
"All Invoices": "All Invoices",
|
||||
"Invoices": "Invoices",
|
||||
"Amount": "Amount",
|
||||
"Percentage": "Percentage",
|
||||
"Use override below": "Use override below",
|
||||
"Daily": "Daily",
|
||||
"Weekly": "Weekly",
|
||||
"2 Weeks": "2 Weeks",
|
||||
"4 Weeks": "4 Weeks",
|
||||
"Monthly": "Monthly",
|
||||
"Two Months": "Two Months",
|
||||
"Quarterly": "Quarterly",
|
||||
"Four Months": "Four Months",
|
||||
"Semi Annually": "Semi Annually",
|
||||
"Annually": "Annually",
|
||||
"Two Years": "Two Years",
|
||||
"Three Years": "Three Years",
|
||||
"Start": "Start",
|
||||
"Stop": "停止",
|
||||
"Send Now": "Send Now",
|
||||
"Restore": "Restore",
|
||||
"Archive": "Archive",
|
||||
"Delete": "删除",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色"
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
import { createCustomApiCallAction } from '@activepieces/pieces-common';
|
||||
import {
|
||||
PieceAuth,
|
||||
Property,
|
||||
createPiece,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
import { createTask } from './lib/actions/create-task';
|
||||
import { getClient } from './lib/actions/get-client';
|
||||
import { getInvoices } from './lib/actions/get-invoices';
|
||||
import { getReport } from './lib/actions/get-report';
|
||||
import { existsTask } from './lib/actions/task-exists';
|
||||
import { createInvoice } from './lib/actions/create-invoice';
|
||||
import { createClient } from './lib/actions/create-client';
|
||||
import { createRecurringInvoice } from './lib/actions/create-recurring';
|
||||
import { actionRecurringInvoice } from './lib/actions/action-recurring';
|
||||
|
||||
export const invoiceninjaAuth = PieceAuth.CustomAuth({
|
||||
props: {
|
||||
base_url: Property.ShortText({
|
||||
displayName: 'Base URL',
|
||||
description: 'Enter the base URL',
|
||||
required: true,
|
||||
}),
|
||||
access_token: Property.ShortText({
|
||||
displayName: 'API Token',
|
||||
description: 'Enter the API token',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
description: `Please check https://invoice-ninja.readthedocs.io/en/latest/api_tokens.html#create-token
|
||||
to see how to get the API token`,
|
||||
required: true,
|
||||
});
|
||||
|
||||
export const invoiceninja = createPiece({
|
||||
displayName: 'Invoice Ninja',
|
||||
description: 'Free open-source invoicing tool',
|
||||
|
||||
minimumSupportedRelease: '0.30.0',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/invoiceninja.png',
|
||||
categories: [PieceCategory.ACCOUNTING],
|
||||
authors: ["buttonsbond","kishanprmr","MoShizzle","AbdulTheActivePiecer","khaledmashaly","abuaboud"],
|
||||
auth: invoiceninjaAuth,
|
||||
actions: [
|
||||
createTask,
|
||||
existsTask,
|
||||
getClient,
|
||||
getInvoices,
|
||||
getReport,
|
||||
createInvoice,
|
||||
createClient,
|
||||
createRecurringInvoice,
|
||||
actionRecurringInvoice,
|
||||
createCustomApiCallAction({
|
||||
baseUrl: (auth) =>
|
||||
auth ? `${(auth).props.base_url.replace(/\/$/, '')}/api/v1` : '',
|
||||
auth: invoiceninjaAuth,
|
||||
authMapping: async (auth) => ({
|
||||
'X-Api-Token': (auth).props.access_token,
|
||||
}),
|
||||
}),
|
||||
],
|
||||
triggers: [],
|
||||
});
|
||||
@@ -0,0 +1,89 @@
|
||||
import {
|
||||
createAction,
|
||||
Property,
|
||||
} from '@activepieces/pieces-framework';
|
||||
|
||||
import { invoiceninjaAuth } from '../..';
|
||||
|
||||
export const actionRecurringInvoice = createAction({
|
||||
auth: invoiceninjaAuth,
|
||||
name: 'action_recurring_invoice',
|
||||
displayName: 'Perform Action on Recurring Invoice',
|
||||
description:
|
||||
'Actions include: start, stop, send_now, restore, archive, delete.',
|
||||
props: {
|
||||
recurring_id: Property.LongText({
|
||||
displayName: 'Recurring Invoice ID (alphanumeric)',
|
||||
description: 'Recurring Invoice ID from Invoice Ninja',
|
||||
required: true,
|
||||
}),
|
||||
actionRecurring: Property.StaticDropdown({
|
||||
displayName: 'Action to perform',
|
||||
description: 'Choose one',
|
||||
defaultValue: 1,
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{
|
||||
label: 'Start',
|
||||
value: 'start',
|
||||
},
|
||||
{
|
||||
label: 'Stop',
|
||||
value: 'stop',
|
||||
},
|
||||
{
|
||||
label: 'Send Now',
|
||||
value: 'send_now',
|
||||
},
|
||||
{
|
||||
label: 'Restore',
|
||||
value: 'restore',
|
||||
},
|
||||
{
|
||||
label: 'Archive',
|
||||
value: 'archive',
|
||||
},
|
||||
{
|
||||
label: 'Delete',
|
||||
value: 'delete',
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const INapiToken = context.auth.props.access_token;
|
||||
const headers = {
|
||||
'X-Api-Token': INapiToken,
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
|
||||
const baseUrl = context.auth.props.base_url.replace(/\/$/, '');
|
||||
const i: string[] = [context.propsValue.recurring_id];
|
||||
|
||||
const createRequestBody = {
|
||||
action: context.propsValue.actionRecurring,
|
||||
ids: i,
|
||||
};
|
||||
const createRequestResponse = await fetch(
|
||||
`${baseUrl}/api/v1/recurring_invoices/bulk`,
|
||||
{
|
||||
method: 'POST',
|
||||
headers,
|
||||
body: JSON.stringify(createRequestBody),
|
||||
}
|
||||
);
|
||||
|
||||
if (!createRequestResponse.ok) {
|
||||
throw new Error(
|
||||
`Failed to perform action on recurring invoice. Status: ${createRequestResponse.status}`
|
||||
);
|
||||
}
|
||||
|
||||
const createResponseBody = await createRequestResponse.json();
|
||||
|
||||
return createResponseBody;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,119 @@
|
||||
import {
|
||||
createAction,
|
||||
Property,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { invoiceninjaAuth } from '../..';
|
||||
|
||||
export const createClient = createAction({
|
||||
auth: invoiceninjaAuth,
|
||||
name: 'create_client',
|
||||
displayName: 'Create Client',
|
||||
description: 'Creates a new client in InvoiceNinja.',
|
||||
|
||||
props: {
|
||||
client_first_name: Property.LongText({
|
||||
displayName: 'Client First Name (alphanumeric)',
|
||||
description: 'The contact first name for this client (optional)',
|
||||
required: false,
|
||||
}),
|
||||
client_last_name: Property.ShortText({
|
||||
displayName: 'Client Last Name (alphanumeric)',
|
||||
description: 'The contact last name for this client (optional)',
|
||||
required: false,
|
||||
}),
|
||||
client_phone: Property.ShortText({
|
||||
displayName: 'Client Contact No (alphanumeric)',
|
||||
description: 'The contact number for this client (optional)',
|
||||
required: false,
|
||||
}),
|
||||
client_email: Property.ShortText({
|
||||
displayName: 'Client e-mail (alphanumeric)',
|
||||
description: 'The contact email for this client (compulsory)',
|
||||
required: true,
|
||||
}),
|
||||
client_send_email: Property.Checkbox({
|
||||
displayName: 'Send invoices to the client',
|
||||
description: 'Should we send invoices to the client by e-mail?',
|
||||
defaultValue: false,
|
||||
required: true,
|
||||
}),
|
||||
client_business_name: Property.ShortText({
|
||||
displayName: 'Business Name (alphanumeric)',
|
||||
description: 'Name of this business or natural person (compulsory)',
|
||||
required: true,
|
||||
}),
|
||||
client_tax_no: Property.ShortText({
|
||||
displayName: 'Client Tax Number (alphanumeric)',
|
||||
description: 'Leave blank if not a business (optional)',
|
||||
required: false,
|
||||
}),
|
||||
client_private_notes: Property.ShortText({
|
||||
displayName: 'Private notes for client',
|
||||
description: 'Text not visible for clients (optional)',
|
||||
required: false,
|
||||
}),
|
||||
client_address1: Property.LongText({
|
||||
displayName: 'Client address 1 (alphanumeric)',
|
||||
description: 'Usually street name and number (compulsory)',
|
||||
required: true,
|
||||
}),
|
||||
client_address2: Property.LongText({
|
||||
displayName: 'Client address 2 (alphanumeric)',
|
||||
description: 'Additional address details (optional)',
|
||||
required: false,
|
||||
}),
|
||||
client_city: Property.ShortText({
|
||||
displayName: 'Client City/Town (alphanumeric)',
|
||||
description: 'City or Town name (compulsory)',
|
||||
required: true,
|
||||
}),
|
||||
client_state: Property.ShortText({
|
||||
displayName: 'Client State (alphanumeric)',
|
||||
description: 'State or county or similar (optional)',
|
||||
required: false,
|
||||
}),
|
||||
client_postcode: Property.ShortText({
|
||||
displayName: 'Client Postcode (alphanumeric)',
|
||||
description: 'Postal code (optional)',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const INapiToken = context.auth.props.access_token;
|
||||
const headers = {
|
||||
'X-Api-Token': INapiToken,
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
|
||||
const queryParams = new URLSearchParams();
|
||||
queryParams.append('name', context.propsValue.client_business_name);
|
||||
queryParams.append('private_notes', context.propsValue.client_private_notes || '');
|
||||
queryParams.append('address1', context.propsValue.client_address1 || '');
|
||||
queryParams.append('address2', context.propsValue.client_address2 || '');
|
||||
queryParams.append('city', context.propsValue.client_city || '');
|
||||
queryParams.append('state', context.propsValue.client_state || '');
|
||||
queryParams.append('postal_code', context.propsValue.client_postcode || '');
|
||||
queryParams.append('vat_number', context.propsValue.client_tax_no || '');
|
||||
const body = {
|
||||
"contacts": {
|
||||
"first_name": context.propsValue.client_first_name || "", "last_name": context.propsValue.client_last_name || "",
|
||||
"phone": context.propsValue.client_phone || "", "email": context.propsValue.client_email || "", "send_email": context.propsValue.client_send_email || false
|
||||
}
|
||||
};
|
||||
|
||||
const baseUrl = context.auth.props.base_url.replace(/\/$/, '');
|
||||
const url = `${baseUrl}/api/v1/clients/?${queryParams.toString()}`;
|
||||
|
||||
const httprequestdata = {
|
||||
method: HttpMethod.POST,
|
||||
url,
|
||||
headers,
|
||||
body,
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(httprequestdata);
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,215 @@
|
||||
import {
|
||||
createAction,
|
||||
Property,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { z } from 'zod';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
|
||||
import { invoiceninjaAuth } from '../..';
|
||||
|
||||
export const createInvoice = createAction({
|
||||
auth: invoiceninjaAuth,
|
||||
name: 'create_invoice',
|
||||
displayName: 'Create Invoice',
|
||||
description: 'Creates an invoice in Invoice Ninja for billing purposes.',
|
||||
|
||||
props: {
|
||||
client_id: Property.LongText({
|
||||
displayName: 'Client ID (alphanumeric)',
|
||||
description: 'Client ID from Invoice Ninja',
|
||||
required: true,
|
||||
}),
|
||||
purchase_order_no: Property.LongText({
|
||||
displayName: 'Purchase Order Number (alphanumeric)',
|
||||
description: 'Descriptive text or arbitrary number (optional)',
|
||||
required: false,
|
||||
}),
|
||||
discount: Property.LongText({
|
||||
displayName: 'Apply discount',
|
||||
description: 'Enter a number for the whole invoice discount',
|
||||
defaultValue: '0',
|
||||
required: true,
|
||||
}),
|
||||
discount_type: Property.StaticDropdown({
|
||||
displayName: 'Type of discount',
|
||||
description: 'Select either amount or percentage for invoice discount. Applies to line items and invoice.',
|
||||
defaultValue: true,
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{
|
||||
label: 'Amount',
|
||||
value: true
|
||||
},
|
||||
{
|
||||
label: 'Percentage',
|
||||
value: false
|
||||
}
|
||||
]
|
||||
}
|
||||
}),
|
||||
public_notes: Property.LongText({
|
||||
displayName: 'Public notes for invoice',
|
||||
description: 'Text that may be visible in the client portal (optional)',
|
||||
required: false,
|
||||
}),
|
||||
private_notes: Property.LongText({
|
||||
displayName: 'Private notes for invoice',
|
||||
description: 'Text not visible for clients (optional)',
|
||||
required: false,
|
||||
}),
|
||||
order_items_json: Property.LongText({
|
||||
displayName: 'Order Items JSON string',
|
||||
description: 'e.g., [{ "quantity":1,"product_key":"product key", "discount": "0" }]',
|
||||
required: true,
|
||||
}),
|
||||
send_email: Property.Checkbox({
|
||||
displayName: 'Send invoice to the client by InvoiceNinja e-mail?',
|
||||
description: 'Should we send the invoice to the client on creation?',
|
||||
defaultValue: false,
|
||||
required: true,
|
||||
}),
|
||||
mark_sent: Property.Checkbox({
|
||||
displayName: 'Mark the invoice as sent?',
|
||||
description: 'Makes the invoice active otherwise remains pending.',
|
||||
defaultValue: false,
|
||||
required: true,
|
||||
}),
|
||||
due_date: Property.DateTime({
|
||||
displayName: 'Invoice due date',
|
||||
description: 'e.g., 2024-01-20',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
await propsValidation.validateZod(context.propsValue, {
|
||||
due_date: z.string().datetime().optional(),
|
||||
});
|
||||
|
||||
const INapiToken = context.auth.props.access_token;
|
||||
const headers = {
|
||||
'X-Api-Token': INapiToken,
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
|
||||
const lineItemsArray = JSON.parse(context.propsValue.order_items_json);
|
||||
|
||||
if (!Array.isArray(lineItemsArray)) {
|
||||
throw new Error('Invalid format for order_items_json. It should be an array of objects.');
|
||||
}
|
||||
|
||||
if (lineItemsArray.length === 0) {
|
||||
throw new Error('The line_items array must not be empty.');
|
||||
}
|
||||
|
||||
const isValidLineItem = lineItemsArray.every(item => (
|
||||
typeof item === 'object' &&
|
||||
'quantity' in item && typeof item.quantity === 'number' &&
|
||||
'product_key' in item && typeof item.product_key === 'string' &&
|
||||
'discount' in item && typeof item.discount === 'string'
|
||||
));
|
||||
|
||||
if (!isValidLineItem) {
|
||||
throw new Error('Each item in the line_items array must be an object with "quantity" (number), "product_key" (string), and "discount" (string).');
|
||||
}
|
||||
|
||||
const baseUrl = context.auth.props.base_url.replace(/\/$/, '');
|
||||
let errorMessages = '';
|
||||
|
||||
try {
|
||||
const lineItemsWithDetailsPromises = lineItemsArray.map(async item => {
|
||||
try {
|
||||
const getProductDetailsResponse = await fetch(`${baseUrl}/api/v1/products/?product_key=${item.product_key}`, {
|
||||
method: 'GET',
|
||||
headers,
|
||||
});
|
||||
|
||||
if (!getProductDetailsResponse.ok) {
|
||||
console.error(`Failed to get product details for ${item.product_key}. Status: ${getProductDetailsResponse.status}`);
|
||||
errorMessages += `Failed to get product details for ${item.product_key}\n`;
|
||||
return null;
|
||||
}
|
||||
|
||||
const productDetailsResponseBody = await getProductDetailsResponse.json();
|
||||
const productCount = productDetailsResponseBody.meta.pagination.count;
|
||||
|
||||
if (productCount < 1) {
|
||||
console.error(`No product details found for ${item.product_key}.`);
|
||||
errorMessages += `No product details found for ${item.product_key}\n`;
|
||||
return null;
|
||||
}
|
||||
|
||||
const productDetails = productDetailsResponseBody.data[0];
|
||||
|
||||
return {
|
||||
quantity: item.quantity,
|
||||
product_key: item.product_key,
|
||||
product_cost: productDetails.price,
|
||||
cost: productDetails.price,
|
||||
notes: productDetails.notes,
|
||||
discount: item.discount || '0',
|
||||
is_amount_discount: context.propsValue.discount_type,
|
||||
tax_name1: productDetails.tax_name1,
|
||||
tax_rate1: productDetails.tax_rate1,
|
||||
tax_id: productDetails.tax_id,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error(`Error getting product details for ${item.product_key}:`, error);
|
||||
errorMessages += `Error getting product details for ${item.product_key}: ${error}\n`;
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
const lineItemsWithDetails = await Promise.all(lineItemsWithDetailsPromises);
|
||||
|
||||
if (errorMessages) {
|
||||
// If there are error messages, throw an error with the accumulated messages
|
||||
throw new Error(errorMessages.trim());
|
||||
}
|
||||
|
||||
const today = new Date();
|
||||
const year = today.getFullYear();
|
||||
const month = today.getMonth() + 1;
|
||||
const day = today.getDate();
|
||||
const formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
|
||||
|
||||
const createInvoiceRequestBody = {
|
||||
due_date: context.propsValue.due_date,
|
||||
date: formattedDate,
|
||||
client_id: context.propsValue.client_id || '',
|
||||
po_number: context.propsValue.purchase_order_no || '',
|
||||
public_notes: context.propsValue.public_notes || '',
|
||||
private_notes: context.propsValue.private_notes || '',
|
||||
line_items: lineItemsWithDetails,
|
||||
discount: context.propsValue.discount,
|
||||
is_amount_discount: context.propsValue.discount_type,
|
||||
send_email: context.propsValue.send_email,
|
||||
mark_sent: context.propsValue.mark_sent,
|
||||
};
|
||||
|
||||
const createInvoiceResponse = await fetch(`${baseUrl}/api/v1/invoices`, {
|
||||
method: 'POST',
|
||||
headers,
|
||||
body: JSON.stringify(createInvoiceRequestBody),
|
||||
});
|
||||
|
||||
if (!createInvoiceResponse.ok) {
|
||||
throw new Error(`Failed to create invoice. Status: ${createInvoiceResponse.status}`);
|
||||
}
|
||||
|
||||
const createInvoiceResponseBody = await createInvoiceResponse.json();
|
||||
|
||||
return createInvoiceResponseBody;
|
||||
} catch (error) {
|
||||
console.error('Error creating invoice or getting product details:', error);
|
||||
if (errorMessages) {
|
||||
// If there are error messages, throw an error with the accumulated messages
|
||||
throw new Error(errorMessages.trim());
|
||||
} else {
|
||||
// If there are no error messages, throw the original error
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,286 @@
|
||||
import {
|
||||
createAction,
|
||||
Property,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { z } from 'zod';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
|
||||
import { invoiceninjaAuth } from '../..';
|
||||
|
||||
export const createRecurringInvoice = createAction({
|
||||
auth: invoiceninjaAuth,
|
||||
name: 'create_recurring_invoice',
|
||||
displayName: 'Create Recurring Invoice',
|
||||
description: 'Creates a recurring invoice in Invoice Ninja for billing purposes.',
|
||||
|
||||
props: {
|
||||
client_id: Property.LongText({
|
||||
displayName: 'Client ID (alphanumeric)',
|
||||
description: 'Client ID from Invoice Ninja',
|
||||
required: true,
|
||||
}),
|
||||
purchase_order_no: Property.LongText({
|
||||
displayName: 'Purchase Order Number (alphanumeric)',
|
||||
description: 'Descriptive text or arbitrary number (optional)',
|
||||
required: false,
|
||||
}),
|
||||
discount: Property.LongText({
|
||||
displayName: 'Apply discount',
|
||||
description: 'Enter a number for the whole invoice discount',
|
||||
defaultValue: '0',
|
||||
required: true,
|
||||
}),
|
||||
discount_type: Property.StaticDropdown({
|
||||
displayName: 'Type of discount',
|
||||
description: 'Select either amount or percentage for invoice discount. Applies to line items and invoice.',
|
||||
defaultValue: true,
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{
|
||||
label: 'Amount',
|
||||
value: true
|
||||
},
|
||||
{
|
||||
label: 'Percentage',
|
||||
value: false
|
||||
}
|
||||
]
|
||||
}
|
||||
}),
|
||||
public_notes: Property.LongText({
|
||||
displayName: 'Public notes for invoice',
|
||||
description: 'Text that may be visible in the client portal (optional)',
|
||||
required: false,
|
||||
}),
|
||||
private_notes: Property.LongText({
|
||||
displayName: 'Private notes for invoice',
|
||||
description: 'Text not visible for clients (optional)',
|
||||
required: false,
|
||||
}),
|
||||
order_items_json: Property.LongText({
|
||||
displayName: 'Order Items JSON string',
|
||||
description: 'e.g., [{ "quantity":1,"product_key":"product key", "discount": "0" }]',
|
||||
required: true,
|
||||
}),
|
||||
frequency: Property.StaticDropdown({
|
||||
displayName: 'Frequency of billing',
|
||||
description: 'Choose one',
|
||||
defaultValue: 5,
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{
|
||||
label: 'Use override below',
|
||||
value:0,
|
||||
},
|
||||
{
|
||||
label: 'Daily',
|
||||
value: 1
|
||||
},
|
||||
{
|
||||
label: 'Weekly',
|
||||
value: 2
|
||||
},
|
||||
{
|
||||
label: '2 Weeks',
|
||||
value: 3
|
||||
},
|
||||
{
|
||||
label: '4 Weeks',
|
||||
value: 4
|
||||
},
|
||||
{
|
||||
label: 'Monthly',
|
||||
value: 5
|
||||
},
|
||||
{
|
||||
label: 'Two Months',
|
||||
value: 6
|
||||
},
|
||||
{
|
||||
label: 'Quarterly',
|
||||
value: 7
|
||||
},
|
||||
{
|
||||
label: 'Four Months',
|
||||
value: 8
|
||||
},
|
||||
{
|
||||
label: 'Semi Annually',
|
||||
value: 9
|
||||
},
|
||||
{
|
||||
label: 'Annually',
|
||||
value: 10
|
||||
},
|
||||
{
|
||||
label: 'Two Years',
|
||||
value: 11
|
||||
},
|
||||
{
|
||||
label: 'Three Years',
|
||||
value: 12
|
||||
}
|
||||
]
|
||||
},
|
||||
}),
|
||||
nocycles: Property.Number({
|
||||
displayName: 'No of billing cycles',
|
||||
description: 'Enter a number. How many times should this bill be generated',
|
||||
required: false,
|
||||
}),
|
||||
auto_frequency: Property.Number({
|
||||
displayName: 'Override Frequency using Frequency ID (optional)',
|
||||
description: 'Enter a number. 1-12 - corresponds to dropdown above [Daily being 1, Weekly 2 etc..]!',
|
||||
required: false,
|
||||
}),
|
||||
due_date: Property.DateTime({
|
||||
displayName: 'Invoice next send date',
|
||||
description: 'e.g., 2024-01-20',
|
||||
required: true,
|
||||
}),
|
||||
last_date: Property.DateTime({
|
||||
displayName: 'Invoice last sent date',
|
||||
description: 'e.g., 2024-01-20',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
await propsValidation.validateZod(context.propsValue, {
|
||||
nocycles: z.number().min(0).max(999).optional(),
|
||||
auto_frequency: z.number().min(1).max(12).optional(),
|
||||
due_date: z.string().datetime(),
|
||||
last_date: z.string().datetime().optional(),
|
||||
});
|
||||
|
||||
const INapiToken = context.auth.props.access_token;
|
||||
const headers = {
|
||||
'X-Api-Token': INapiToken,
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
|
||||
const lineItemsArray = JSON.parse(context.propsValue.order_items_json);
|
||||
|
||||
if (!Array.isArray(lineItemsArray)) {
|
||||
throw new Error('Invalid format for order_items_json. It should be an array of objects.');
|
||||
}
|
||||
|
||||
if (lineItemsArray.length === 0) {
|
||||
throw new Error('The line_items array must not be empty.');
|
||||
}
|
||||
|
||||
const isValidLineItem = lineItemsArray.every(item => (
|
||||
typeof item === 'object' &&
|
||||
'quantity' in item && typeof item.quantity === 'number' &&
|
||||
'product_key' in item && typeof item.product_key === 'string' &&
|
||||
'discount' in item && typeof item.discount === 'string'
|
||||
));
|
||||
|
||||
if (!isValidLineItem) {
|
||||
throw new Error('Each item in the line_items array must be an object with "quantity" (number), "product_key" (string), and "discount" (string).');
|
||||
}
|
||||
|
||||
const baseUrl = context.auth.props.base_url.replace(/\/$/, '');
|
||||
let errorMessages = '';
|
||||
|
||||
try {
|
||||
const lineItemsWithDetailsPromises = lineItemsArray.map(async item => {
|
||||
try {
|
||||
const getProductDetailsResponse = await fetch(`${baseUrl}/api/v1/products/?product_key=${item.product_key}`, {
|
||||
method: 'GET',
|
||||
headers,
|
||||
});
|
||||
|
||||
if (!getProductDetailsResponse.ok) {
|
||||
console.error(`Failed to get product details for ${item.product_key}. Status: ${getProductDetailsResponse.status}`);
|
||||
errorMessages += `Failed to get product details for ${item.product_key}\n`;
|
||||
return null;
|
||||
}
|
||||
|
||||
const productDetailsResponseBody = await getProductDetailsResponse.json();
|
||||
const productCount = productDetailsResponseBody.meta.pagination.count;
|
||||
|
||||
if (productCount < 1) {
|
||||
console.error(`No product details found for ${item.product_key}.`);
|
||||
errorMessages += `No product details found for ${item.product_key}\n`;
|
||||
return null;
|
||||
}
|
||||
|
||||
const productDetails = productDetailsResponseBody.data[0];
|
||||
|
||||
return {
|
||||
quantity: item.quantity,
|
||||
product_key: item.product_key,
|
||||
product_cost: productDetails.price,
|
||||
cost: productDetails.price,
|
||||
notes: productDetails.notes,
|
||||
discount: item.discount || '0',
|
||||
is_amount_discount: context.propsValue.discount_type,
|
||||
tax_name1: productDetails.tax_name1,
|
||||
tax_rate1: productDetails.tax_rate1,
|
||||
tax_id: productDetails.tax_id,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error(`Error getting product details for ${item.product_key}:`, error);
|
||||
errorMessages += `Error getting product details for ${item.product_key}: ${error}\n`;
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
const lineItemsWithDetails = await Promise.all(lineItemsWithDetailsPromises);
|
||||
|
||||
if (errorMessages) {
|
||||
// If there are error messages, throw an error with the accumulated messages
|
||||
throw new Error(errorMessages.trim());
|
||||
}
|
||||
|
||||
const today = new Date();
|
||||
const year = today.getFullYear();
|
||||
const month = today.getMonth() + 1;
|
||||
const day = today.getDate();
|
||||
const formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
|
||||
|
||||
const createInvoiceRequestBody = {
|
||||
//status_id: 2, // seems cant set the status id when creating need another api call either using the recurring invoice ID and updating the status that way
|
||||
// or possibly calling /bulk with action=start there's also an action send_now
|
||||
next_send_date: context.propsValue.due_date,
|
||||
date: formattedDate,
|
||||
client_id: context.propsValue.client_id || '',
|
||||
po_number: context.propsValue.purchase_order_no || '',
|
||||
public_notes: context.propsValue.public_notes || '',
|
||||
private_notes: context.propsValue.private_notes || '',
|
||||
line_items: lineItemsWithDetails,
|
||||
discount: context.propsValue.discount,
|
||||
is_amount_discount: context.propsValue.discount_type,
|
||||
frequency_id: context.propsValue.auto_frequency || context.propsValue.frequency,
|
||||
remaining_cycles:context.propsValue.nocycles || -1,
|
||||
};
|
||||
// if remaining cycles is set to 0 it will automatically go completed -1 is endless!
|
||||
// status_id 2 is pending ie start scheduling
|
||||
const createInvoiceResponse = await fetch(`${baseUrl}/api/v1/recurring_invoices`, {
|
||||
method: 'POST',
|
||||
headers,
|
||||
body: JSON.stringify(createInvoiceRequestBody),
|
||||
});
|
||||
|
||||
if (!createInvoiceResponse.ok) {
|
||||
throw new Error(`Failed to create recurring invoice. Status: ${createInvoiceResponse.status}`);
|
||||
}
|
||||
|
||||
const createInvoiceResponseBody = await createInvoiceResponse.json();
|
||||
|
||||
return createInvoiceResponseBody;
|
||||
} catch (error) {
|
||||
console.error('Error creating recurring invoice or getting product details:', error);
|
||||
if (errorMessages) {
|
||||
// If there are error messages, throw an error with the accumulated messages
|
||||
throw new Error(errorMessages.trim());
|
||||
} else {
|
||||
// If there are no error messages, throw the original error
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,68 @@
|
||||
import {
|
||||
createAction,
|
||||
Property,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { invoiceninjaAuth } from '../..';
|
||||
export const createTask = createAction({
|
||||
auth: invoiceninjaAuth,
|
||||
name: 'create_task',
|
||||
displayName: 'Create Task',
|
||||
description: 'Creates a task instance in Invoice Ninja for billing purposes.',
|
||||
|
||||
props: {
|
||||
number: Property.LongText({
|
||||
displayName: 'Task or Ticket Number (alphanumeric)',
|
||||
description:
|
||||
'A unique task or ticket number that has not been used before in Invoice Ninja',
|
||||
required: true,
|
||||
}),
|
||||
client_id: Property.LongText({
|
||||
displayName: 'Client ID (alphanumeric)',
|
||||
description: 'Client ID from Invoice Ninja (optional)',
|
||||
required: false,
|
||||
}),
|
||||
project_id: Property.LongText({
|
||||
displayName: 'Project ID (alphanumeric)',
|
||||
description: 'Project ID from Invoice Ninja (optional)',
|
||||
required: false,
|
||||
}),
|
||||
description: Property.LongText({
|
||||
displayName: 'Description of task',
|
||||
description: 'Description of task to be billed',
|
||||
required: true,
|
||||
}),
|
||||
rate: Property.Number({
|
||||
displayName: 'Custom hourly rate',
|
||||
description: 'Custom hourly rate (optional) otherwise default used',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const INapiToken = context.auth.props.access_token;
|
||||
|
||||
const headers = {
|
||||
'X-Api-Token': INapiToken,
|
||||
};
|
||||
const queryParams = new URLSearchParams();
|
||||
queryParams.append('number', context.propsValue.number || '');
|
||||
queryParams.append('client_id', context.propsValue.client_id || '');
|
||||
queryParams.append('project_id', context.propsValue.project_id || '');
|
||||
queryParams.append('description', context.propsValue.description || '');
|
||||
// bugfix - only append rate if a rate has been specified in the piece
|
||||
if (context.propsValue.rate?.valueOf != null) {
|
||||
queryParams.append('rate', context.propsValue.rate?.toString() || '0');
|
||||
}
|
||||
// Remove trailing slash from base_url
|
||||
const baseUrl = context.auth.props.base_url.replace(/\/$/, '');
|
||||
const url = `${baseUrl}/api/v1/tasks?${queryParams.toString()}`;
|
||||
const httprequestdata = {
|
||||
method: HttpMethod.POST,
|
||||
url,
|
||||
headers,
|
||||
};
|
||||
const response = await httpClient.sendRequest(httprequestdata);
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,102 @@
|
||||
import {
|
||||
createAction,
|
||||
Property,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod, propsValidation } from '@activepieces/pieces-common';
|
||||
import { z } from 'zod';
|
||||
import { invoiceninjaAuth } from '../..';
|
||||
|
||||
export const getClient = createAction({
|
||||
auth: invoiceninjaAuth,
|
||||
name: 'getclient_task',
|
||||
displayName: 'Get Client Details from e-mail',
|
||||
description: 'Gets the client details if they exist by e-mail.',
|
||||
|
||||
props: {
|
||||
email: Property.LongText({
|
||||
displayName: 'Client e-mail address',
|
||||
description: 'A valid e-mail address to get client details for',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
await propsValidation.validateZod(context.propsValue, {
|
||||
email: z.string().email(),
|
||||
});
|
||||
|
||||
const INapiToken = context.auth.props.access_token;
|
||||
|
||||
const headers = {
|
||||
'X-Api-Token': INapiToken,
|
||||
};
|
||||
const queryParams = new URLSearchParams();
|
||||
queryParams.append('email', context.propsValue.email || '');
|
||||
|
||||
// Remove trailing slash from base_url
|
||||
const baseUrl = context.auth.props.base_url.replace(/\/$/, '');
|
||||
const url = `${baseUrl}/api/v1/clients/?${queryParams.toString()}`;
|
||||
const httprequestdata = {
|
||||
method: HttpMethod.GET,
|
||||
url,
|
||||
headers,
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await httpClient.sendRequest(httprequestdata);
|
||||
// Process the successful response here (status 2xx).
|
||||
//
|
||||
if (response.body.meta.pagination.total > 0) {
|
||||
// Each client that is found will have one or more contacts
|
||||
const NumberOfContactsThisClient =
|
||||
response.body.data[0].contacts.length;
|
||||
for (let i = 0; i < NumberOfContactsThisClient; i++) {
|
||||
// theres a lot of extra data I don't really want in the actual response of contacts so I want to tr and just pick out
|
||||
// firstname, lastname, email, etc as I don't think we need the rest, just to keep it simpler
|
||||
delete response.body.data[0].contacts[i].id;
|
||||
delete response.body.data[0].contacts[i].created_at;
|
||||
delete response.body.data[0].contacts[i].updated_at;
|
||||
delete response.body.data[0].contacts[i].archived_at;
|
||||
delete response.body.data[0].contacts[i].is_primary;
|
||||
delete response.body.data[0].contacts[i].is_locked;
|
||||
delete response.body.data[0].contacts[i].contact_key;
|
||||
delete response.body.data[0].contacts[i].send_email;
|
||||
delete response.body.data[0].contacts[i].last_login;
|
||||
delete response.body.data[0].contacts[i].password;
|
||||
delete response.body.data[0].contacts[i].link;
|
||||
}
|
||||
const json = [
|
||||
{
|
||||
client_no_contacts: NumberOfContactsThisClient,
|
||||
client_id: response.body.data[0].id,
|
||||
client_name: response.body.data[0].name,
|
||||
client_web: response.body.data[0].website,
|
||||
client_private_notes: response.body.data[0].private_notes,
|
||||
client_balance: response.body.data[0].balance,
|
||||
client_paid_to_date: response.body.data[0].paid_to_date,
|
||||
client_payment_balance: response.body.data[0].payment_balance,
|
||||
client_credit_balance: response.body.data[0].credit_balance,
|
||||
client_public_notes: response.body.data[0].public_notes,
|
||||
client_address1: response.body.data[0].address1,
|
||||
client_address2: response.body.data[0].address2,
|
||||
client_phone: response.body.data[0].phone,
|
||||
client_city: response.body.data[0].city,
|
||||
client_state: response.body.data[0].state,
|
||||
client_postcode: response.body.data[0].postal_code,
|
||||
client_vat: response.body.data[0].vat_number,
|
||||
client_display_name: response.body.data[0].display_name,
|
||||
client_contacts: response.body.data[0].contacts,
|
||||
//meta: response.body.meta,
|
||||
},
|
||||
];
|
||||
return json;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
} // this is still returned so if it is false we'll return notfound or similar
|
||||
} catch (error) {
|
||||
// Handle the error when the request fails (status other than 2xx).
|
||||
return 'There was a problem getting information from your Invoice Ninja';
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,128 @@
|
||||
// action to return invoices from InvoiceNinja with filtering by invoice status and client id
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { invoiceninjaAuth } from '../..';
|
||||
export const getInvoices = createAction({
|
||||
auth: invoiceninjaAuth,
|
||||
name: 'getinvoices_task',
|
||||
displayName: 'Get Invoices',
|
||||
description: 'Gets data for invoices.',
|
||||
|
||||
props: {
|
||||
invoiceStatus: Property.StaticDropdown({
|
||||
displayName: 'Invoice Status',
|
||||
description: 'Select the invoice status for filtering.',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{
|
||||
label: 'Unpaid Invoices',
|
||||
value: 'unpaid',
|
||||
},
|
||||
{
|
||||
label: 'Paid Invoices',
|
||||
value: 'paid',
|
||||
},
|
||||
{
|
||||
label: 'Overdue Invoices',
|
||||
value: 'overdue',
|
||||
},
|
||||
{
|
||||
label: 'All Invoices',
|
||||
value: 'all',
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
clientID: Property.LongText({
|
||||
displayName: 'Client ID',
|
||||
description: 'Filter by Client ID, default is all clients.',
|
||||
required: false,
|
||||
}),
|
||||
numberOfResults: Property.Number({
|
||||
displayName: 'Max Results',
|
||||
description: 'Maximum number of results to return. 9999 is default.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const INapiToken = context.auth.props.access_token;
|
||||
|
||||
const headers = {
|
||||
'X-Api-Token': INapiToken,
|
||||
};
|
||||
|
||||
const queryParams = new URLSearchParams();
|
||||
queryParams.append(
|
||||
'client_status',
|
||||
context.propsValue.invoiceStatus || 'unpaid'
|
||||
);
|
||||
// only include client_id in the query parameters if it has been specified
|
||||
if (
|
||||
context.propsValue.clientID?.valueOf != null ||
|
||||
context.propsValue.clientID != undefined
|
||||
) {
|
||||
queryParams.append('client_id', context.propsValue.clientID || '');
|
||||
}
|
||||
queryParams.append('is_deleted', 'false'); // only return invoices that are not deleted
|
||||
queryParams.append(
|
||||
'per_page',
|
||||
context.propsValue.numberOfResults?.toString() || '9999'
|
||||
); // otherwise it only returns 20 per page hopefully
|
||||
|
||||
// Remove trailing slash from base_url
|
||||
const baseUrl = context.auth.props.base_url.replace(/\/$/, '');
|
||||
const url = `${baseUrl}/api/v1/invoices/?${queryParams.toString()}`;
|
||||
// console.log("INVOICENINJA: " + url);
|
||||
const httprequestdata = {
|
||||
method: HttpMethod.GET,
|
||||
url,
|
||||
headers,
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await httpClient.sendRequest(httprequestdata);
|
||||
const my = [];
|
||||
// Process the response here (status 2xx).
|
||||
if (response.body.meta.pagination.total > 0) {
|
||||
// Each invoice that is found will have lots of information, lets remove the guff
|
||||
// changed from .total to .count because we're only interested in those in the first page of results which
|
||||
// is what we set the per_page to to correspond to the number of records we wanted
|
||||
const NumberOfInvoices = response.body.meta.pagination.count;
|
||||
|
||||
for (let i = 0; i < NumberOfInvoices; i++) {
|
||||
my.push({
|
||||
invoice: {
|
||||
clientid: response.body.data[i].client_id,
|
||||
invoiceno: response.body.data[i].number,
|
||||
ponumber: response.body.data[i].po_number,
|
||||
invdate: response.body.data[i].date,
|
||||
duedate: response.body.data[i].due_date,
|
||||
punote: response.body.data[i].public_notes,
|
||||
prnote: response.body.data[i].private_notes,
|
||||
reminder1: response.body.data[i].reminder1_sent,
|
||||
reminder2: response.body.data[i].reminder2_sent,
|
||||
reminder3: response.body.data[i].reminder3_sent,
|
||||
lastreminder: response.body.data[i].reminder_last_sent,
|
||||
firstsku: response.body.data[i].line_items[0].product_key,
|
||||
firstitem: response.body.data[i].line_items[0].notes,
|
||||
amount: response.body.data[i].amount,
|
||||
balance: response.body.data[i].balance,
|
||||
paid: response.body.data[i].paid_to_date,
|
||||
},
|
||||
});
|
||||
// console.log("INVOICENINJA: (" + i.toString() + ") " + response.body.data[i].amount);
|
||||
}
|
||||
return my;
|
||||
} else {
|
||||
return false;
|
||||
} // this is still returned so if it is false we'll return notfound or similar
|
||||
} catch (error) {
|
||||
// Handle the error when the request fails (status other than 2xx).
|
||||
// console.log((error as Error).message);
|
||||
return (error as Error).message;
|
||||
// return "There was a problem getting information from your Invoice Ninja";
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,111 @@
|
||||
// action to return reports from InvoiceNinja with filtering
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { invoiceninjaAuth } from '../..';
|
||||
export const getReport = createAction({
|
||||
auth: invoiceninjaAuth,
|
||||
name: 'getreport_task',
|
||||
displayName: 'Get Report',
|
||||
description: 'Gets report data from InvoiceNinja.',
|
||||
|
||||
props: {
|
||||
reportType: Property.StaticDropdown({
|
||||
displayName: 'Report Type',
|
||||
description: 'Select the report type.',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{
|
||||
label: 'Invoices',
|
||||
value: 'invoices',
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
clientID: Property.LongText({
|
||||
displayName: 'Client ID',
|
||||
description: 'Filter by Client ID, default is all clients.',
|
||||
required: false,
|
||||
}),
|
||||
numberOfResults: Property.Number({
|
||||
displayName: 'Max Results',
|
||||
description: 'Maximum number of results to return. 9999 is default.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const INapiToken = context.auth.props.access_token;
|
||||
|
||||
const headers = {
|
||||
'X-Api-Token': INapiToken,
|
||||
serializers: 'JSON',
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
|
||||
const report_keys = JSON.stringify(['client', 'name', 'date']);
|
||||
const queryParams = new URLSearchParams();
|
||||
queryParams.append('report_keys', report_keys);
|
||||
queryParams.append('date_range', 'last7');
|
||||
// date range - last7, last_quarter, last_year etc..
|
||||
queryParams.append(
|
||||
'per_page',
|
||||
context.propsValue.numberOfResults?.toString() || '9999'
|
||||
); // otherwise it only returns 20 per page hopefully
|
||||
|
||||
// Remove trailing slash from base_url
|
||||
const baseUrl = context.auth.props.base_url.replace(/\/$/, '');
|
||||
const url = `${baseUrl}/api/v1/reports/${
|
||||
context.propsValue.reportType
|
||||
}?${queryParams.toString()}`;
|
||||
// console.log("INVOICENINJA: " + url);
|
||||
const httprequestdata = {
|
||||
method: HttpMethod.GET,
|
||||
url,
|
||||
headers,
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await httpClient.sendRequest(httprequestdata);
|
||||
const my = [];
|
||||
// Process the response here (status 2xx).
|
||||
if (response.body.meta.pagination.total > 0) {
|
||||
return response.body;
|
||||
|
||||
const NumberOfInvoices = response.body.meta.pagination.count;
|
||||
|
||||
for (let i = 0; i < NumberOfInvoices; i++) {
|
||||
my.push({
|
||||
invoice: {
|
||||
clientid: response.body.data[i].client_id,
|
||||
invoiceno: response.body.data[i].number,
|
||||
ponumber: response.body.data[i].po_number,
|
||||
invdate: response.body.data[i].date,
|
||||
duedate: response.body.data[i].due_date,
|
||||
punote: response.body.data[i].public_notes,
|
||||
prnote: response.body.data[i].private_notes,
|
||||
reminder1: response.body.data[i].reminder1_sent,
|
||||
reminder2: response.body.data[i].reminder2_sent,
|
||||
reminder3: response.body.data[i].reminder3_sent,
|
||||
lastreminder: response.body.data[i].reminder_last_sent,
|
||||
firstsku: response.body.data[i].line_items[0].product_key,
|
||||
firstitem: response.body.data[i].line_items[0].notes,
|
||||
amount: response.body.data[i].amount,
|
||||
balance: response.body.data[i].balance,
|
||||
paid: response.body.data[i].paid_to_date,
|
||||
},
|
||||
});
|
||||
// console.log("INVOICENINJA: (" + i.toString() + ") " + response.body.data[i].amount);
|
||||
}
|
||||
return my;
|
||||
} else {
|
||||
return false;
|
||||
} // this is still returned so if it is false we'll return notfound or similar
|
||||
} catch (error) {
|
||||
// Handle the error when the request fails (status other than 2xx).
|
||||
// console.log((error as Error).message);
|
||||
return (error as Error).message;
|
||||
// return "There was a problem getting information from your Invoice Ninja";
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,53 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { invoiceninjaAuth } from '../..';
|
||||
// 05/09/23 - returns 1 or 0 instead of true or false as was having issues
|
||||
export const existsTask = createAction({
|
||||
auth: invoiceninjaAuth,
|
||||
name: 'exists_task',
|
||||
displayName: 'Check Task Existence',
|
||||
description: 'Verify if a Task Already Exists',
|
||||
props: {
|
||||
number: Property.LongText({
|
||||
displayName: 'Task or Ticket Number (alphanumeric)',
|
||||
description: 'A task or ticket number to check',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const INapiToken = context.auth.props.access_token;
|
||||
|
||||
const headers = {
|
||||
'X-Api-Token': INapiToken,
|
||||
};
|
||||
|
||||
const queryParams = new URLSearchParams();
|
||||
// number=context.propsValue.number - last update 'number' was also on the const url which
|
||||
// was incorrect
|
||||
queryParams.append('number', context.propsValue.number || '');
|
||||
|
||||
// Remove trailing slash from base_url
|
||||
const baseUrl = context.auth.props.base_url.replace(/\/$/, '');
|
||||
const url = `${baseUrl}/api/v1/tasks?${queryParams.toString()}`;
|
||||
const httprequestdata = {
|
||||
method: HttpMethod.GET,
|
||||
url,
|
||||
headers,
|
||||
};
|
||||
try {
|
||||
const response = await httpClient.sendRequest(httprequestdata);
|
||||
// meta data only present if ticket exists. had issues testing true and false on
|
||||
// branch piece so switched to 1 and 0 respectively instead to see if that works
|
||||
// better.
|
||||
if (response.body.meta.pagination.total > 0) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
} catch (error) {
|
||||
// Handle the error when the request fails (status other than 2xx).
|
||||
return 'There was a problem getting information from your Invoice Ninja';
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"extends": "../../../../tsconfig.base.json",
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
}
|
||||
],
|
||||
"compilerOptions": {
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true
|
||||
}
|
||||
}
|
||||
@@ -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