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,169 @@
|
||||
{
|
||||
"Company Login": "Firmenanmeldung",
|
||||
"User Login": "Benutzeranmeldung",
|
||||
"User Password": "Benutzerkennwort",
|
||||
"Your Simplybook company login (e.g., \"yourcompany\" from yourcompany.simplybook.me)": "Ihre Simplybook Firmenanmeldung (z. B. \"IhrUnternehmen\" von Ihr.simplybook.me)",
|
||||
"Your admin user login associated with the company": "Ihr Administrator-Benutzeranmeldung, der der Firma zugeordnet ist",
|
||||
"Your admin user password": "Ihr Admin-Benutzerpasswort",
|
||||
"Enter your Simplybook admin credentials to access the Admin API.": "Geben Sie Ihre Simplybook Admin-Anmeldedaten ein, um auf die Admin API zuzugreifen.",
|
||||
"Create Booking": "Buchung erstellen",
|
||||
"Set Booking Comment": "Buchungskommentar festlegen",
|
||||
"Add Client": "Kunde hinzufügen",
|
||||
"Create Note": "Notiz erstellen",
|
||||
"Create Detailed Report": "Detaillierter Bericht erstellen",
|
||||
"Cancel Booking": "Buchung stornieren",
|
||||
"Delete Client": "Kunde löschen",
|
||||
"Get Bookings": "Buchungen abrufen",
|
||||
"Get Client List": "Kundenliste abrufen",
|
||||
"Find Invoice": "Rechnung finden",
|
||||
"Create a new booking using the book API method. Returns appointment info or throws exception if time not available.": "Erstellen Sie eine neue Buchung mit der Buch-API-Methode. Gibt Termininformationen zurück oder wirft eine Ausnahme auf, wenn die Zeit nicht verfügbar ist.",
|
||||
"Set a comment for a booking": "Kommentar für eine Buchung festlegen",
|
||||
"Add a new client with specified data. Email, phone, or both may be required (check company settings).": "Fügen Sie einen neuen Kunden mit den angegebenen Daten hinzu. E-Mail, Telefon oder beide können benötigt werden (überprüfen Sie die Firmeneinstellungen).",
|
||||
"Create a note (generic) in the system": "Erstelle eine Notiz (generisch) im System",
|
||||
"Generate a detailed report (metrics, bookings, revenue)": "Erstelle einen detaillierten Bericht (Metriken, Buchungen, Einnahmen)",
|
||||
"Cancel an existing booking. Returns true on success.": "Eine bestehende Buchung stornieren. Gibt bei Erfolg die Rückgabe.",
|
||||
"Delete an existing client": "Einen bestehenden Client löschen",
|
||||
"Returns list of bookings filtered by given parameters": "Gibt die Liste der Buchungen nach angegebenen Parametern zurück",
|
||||
"Returns list of clients associated with company. Search by phone number, email address, or name.": "Gibt die Liste der mit Unternehmen verbundenen Kunden zurück. Suche nach Telefonnummer, E-Mail-Adresse oder Namen.",
|
||||
"Find invoices with filters and pagination": "Rechnungen mit Filtern und Paginierung finden",
|
||||
"Service": "Service",
|
||||
"Provider": "Anbieter",
|
||||
"Client": "Kunde",
|
||||
"Start Date": "Startdatum",
|
||||
"Start Time": "Startzeit",
|
||||
"End Date": "Enddatum",
|
||||
"End Time": "Endzeit",
|
||||
"Client Time Offset (seconds)": "Zeitversatz des Kunden (Sekunden)",
|
||||
"Additional Fields": "Zusätzliche Felder",
|
||||
"Count": "Anzahl",
|
||||
"Batch ID": "Batch-ID",
|
||||
"Recurring Data": "Wiederkehrende Daten",
|
||||
"Booking": "Buchung",
|
||||
"Comment": "Kommentar",
|
||||
"Name": "Name",
|
||||
"Email": "E-Mail",
|
||||
"Phone": "Telefon",
|
||||
"Address Line 1": "Adresszeile 1",
|
||||
"Address Line 2": "Adresszeile 2",
|
||||
"City": "Stadt",
|
||||
"ZIP Code": "Postleitzahl",
|
||||
"Country ID": "Landeskennung",
|
||||
"Start Date Time": "Startzeit",
|
||||
"End Date Time": "Enddatum",
|
||||
"Note Type": "Notiztyp",
|
||||
"Note": "Notiz",
|
||||
"Mode": "Modus",
|
||||
"Time Blocked": "Zeit blockiert",
|
||||
"Created Date From": "Erstellungsdatum ab",
|
||||
"Created Date To": "Erstelldatum bis",
|
||||
"Date From": "Datum ab",
|
||||
"Date To": "Datum bis",
|
||||
"Booking Code": "Buchungscode",
|
||||
"Service ID": "Dienst-ID",
|
||||
"Service Provider ID": "Dienstanbieter-ID",
|
||||
"Client ID": "Kunden-ID",
|
||||
"Booking Type": "Buchungsart",
|
||||
"Order Field": "Bestellfeld",
|
||||
"Order Direction": "Bestellrichtung",
|
||||
"Export Columns": "Spalten exportieren",
|
||||
"Time From": "Zeit von",
|
||||
"Time To": "Zeit bis",
|
||||
"Is Confirmed": "Ist bestätigt",
|
||||
"Order By": "Sortieren nach",
|
||||
"Search String": "Suchbegriff",
|
||||
"Limit": "Limit",
|
||||
"Page": "Seite",
|
||||
"Items Per Page": "Artikel pro Seite",
|
||||
"Date Time From": "Datumszeit ab",
|
||||
"Date Time To": "Zeit bis",
|
||||
"Status": "Status",
|
||||
"Select a service": "Dienst auswählen",
|
||||
"Select a service provider": "Einen Dienstanbieter auswählen",
|
||||
"Select a client": "Klient auswählen",
|
||||
"Booking start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Buchungsbeginn (Format: JJJJJ-MM-TT, z.B.: 2024-03-01)",
|
||||
"Booking start time (format: HH:MM:SS, e.g., 09:00:00). Must be multiple of company timeframe.": "Buchung Startzeit (Format: HH:MM:SS, z.B.: 09:00:00). Muss ein Vielfaches des Firmenzeitraums sein.",
|
||||
"Booking end date (format: YYYY-MM-DD, e.g., 2024-03-01). Should be later than start date.": "Buchungsende Enddatum (Format: JJJJJ-MM-DD, z.B.: 2024-03-01). Sollte später als Startdatum sein.",
|
||||
"Booking end time (format: HH:MM:SS, e.g., 10:00:00). Should be later than start time.": "Buchungsende Zeit (Format: HH:MM:SS, z.B.: 10:00:00). Sollte später als Startzeit sein.",
|
||||
"Difference between company and client time zone in seconds (e.g., -3600 for GMT+3 client with GMT+2 company)": "Unterschied zwischen Unternehmen und Kunden Zeitzone in Sekunden (z.B. -3600 für GMT+3 Client mit GMT+2 Unternehmen)",
|
||||
"Additional params and fields as object (e.g., {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Use for promo codes, location ID, intake forms.": "Zusätzliche Parameter und Felder als Objekt (z.B. {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Verwende für Promo-Codes, Standort-ID, Einnahmeformulare.",
|
||||
"Number of bookings for group booking batch (min. 1). Cannot be used with Batch ID.": "Anzahl der Buchungen für Gruppenbuchungen (min. 1). Kann nicht mit Batch-ID verwendet werden.",
|
||||
"Add booking to existing group bookings batch. Cannot be used with Count > 1.": "Buchung zum vorhandenen Gruppenbuchungsbatch hinzufügen. Kann nicht mit Anzahl > 1 verwendet werden.",
|
||||
"Make booking recurrent (optional, array format)": "Buchung wiederkehrend machen (optional, Array-Format)",
|
||||
"Select a booking": "Buchung auswählen",
|
||||
"The comment text to set for the booking": "Der Kommentartext für die Buchung",
|
||||
"Client name": "Kundenname",
|
||||
"Client email address": "Client-E-Mail-Adresse",
|
||||
"Client phone number (e.g., +1502-810-4521)": "Kunden-Telefonnummer (z. B. +1502-810-4521)",
|
||||
"Client address line 1": "Kundenadresse: Zeile 1",
|
||||
"Client address line 2": "Kundenadresse: Zeile 2",
|
||||
"Client city": "Client-Stadt",
|
||||
"Client ZIP/postal code": "Postleitzahl des Kunden",
|
||||
"Client country ID": "Kundenland-ID",
|
||||
"Note start date and time (format: YYYY-MM-DD HH:MM:SS)": "Notiz Startdatum und -zeit (Format: JJJJ-MM-TT HH:MM:SS)",
|
||||
"Note end date and time (format: YYYY-MM-DD HH:MM:SS)": "Notiz Enddatum und -zeit (Format: JJJJ-MM-TT HH:MM:SS)",
|
||||
"Select a note type": "Wählen Sie einen Notiztyp",
|
||||
"Note body/content": "Notiz Körper/Inhalt",
|
||||
"Note mode - determines visibility scope": "Notizmodus - bestimmt Sichtbarkeitsbereich",
|
||||
"Whether the time should be blocked": "Ob die Zeit gesperrt werden soll",
|
||||
"Select a provider (optional)": "Anbieter auswählen (optional)",
|
||||
"Select a service (optional)": "Dienst auswählen (optional)",
|
||||
"Filter by booking creation date from (format: YYYY-MM-DD)": "Filter nach Buchungserstellungsdatum (Format: JJJJ-MM-TT)",
|
||||
"Filter by booking creation date to (format: YYYY-MM-DD)": "Filtern nach Buchungserstellungsdatum (Format: JJJJ-MM-TT)",
|
||||
"Filter by booking date from (format: YYYY-MM-DD)": "Filter nach Buchungsdatum (Format: JJJJ-MM-TT)",
|
||||
"Filter by booking date to (format: YYYY-MM-DD)": "Filtern nach Buchungsdatum (Format: JJJJ-MM-TT)",
|
||||
"Filter by booking code": "Nach Buchungscode filtern",
|
||||
"Filter by service ID": "Nach Service ID filtern",
|
||||
"Filter by service provider ID": "Nach Dienstanbieter-ID filtern",
|
||||
"Filter by client ID": "Nach Client-ID filtern",
|
||||
"Filter by booking type": "Nach Buchungsart filtern",
|
||||
"Field to order results by (e.g., record_date)": "Feld um Ergebnisse zu sortieren nach (z.B. record_date)",
|
||||
"Sort order direction": "Sortierreihenfolge",
|
||||
"Array of columns to export (leave empty for all columns)": "Anordnung der zu exportierenden Spalten (leer lassen für alle Spalten)",
|
||||
"Start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Startdatum (Format: JJJJJ-MM-TT, z.B.: 2024-03-01)",
|
||||
"Start time (format: HH:MM:SS, e.g., 09:00:00)": "Startzeit (Format: HH:MM:SS, z.B.: 09:00:00)",
|
||||
"End date (format: YYYY-MM-DD, e.g., 2024-03-31)": "Enddatum (Format: JJJJJ-MM-TT, z.B.: 2024-03-31)",
|
||||
"End time (format: HH:MM:SS, e.g., 18:00:00)": "Endzeit (Format: HH:MM:SS, z.B.: 18:00:00)",
|
||||
"Filter by creation date from (format: YYYY-MM-DD)": "Filter nach Erstellungsdatum (Format: JJJJ-MM-TT)",
|
||||
"Filter by creation date to (format: YYYY-MM-DD)": "Filtern nach Erstellungsdatum (Format: JJJJ-MM-TT)",
|
||||
"Get bookings for a specific service provider (optional)": "Buchungen für einen bestimmten Dienstleister abrufen (optional)",
|
||||
"Get bookings for a specific service (optional)": "Erhalten Sie Buchungen für einen bestimmten Service (optional)",
|
||||
"Filter by confirmation status": "Nach Bestätigungsstatus filtern",
|
||||
"Get bookings for a specific client (optional)": "Erhalte Buchungen für einen bestimmten Kunden (optional)",
|
||||
"Sort order for results": "Reihenfolge der Ergebnisse",
|
||||
"Filter by booking type (depends on Approve booking plugin status)": "Filtern nach Buchungsart (abhängig vom Status des Buchungsmoduls)",
|
||||
"Search by phone number, email address, or name. Leave empty to get all clients.": "Suche nach Telefonnummer, E-Mail-Adresse oder Namen. Leer lassen um alle Kunden zu erhalten.",
|
||||
"Maximum number of clients to return. Leave empty for no limit.": "Maximale Anzahl an Clients die zurückgegeben werden sollen. Leer lassen für kein Limit.",
|
||||
"Page number in the list": "Seitennummer in der Liste",
|
||||
"Number of items per page": "Anzahl der Elemente pro Seite",
|
||||
"Filter by client (optional)": "Nach Client filtern (optional)",
|
||||
"Order/invoice date and time from (format: YYYY-MM-DD HH:MM:SS)": "Datum und Uhrzeit der Bestellung/Rechnung (Format: JJJJ-MM-TT HH:MM:SS)",
|
||||
"Order/invoice date and time to (format: YYYY-MM-DD HH:MM:SS)": "Bestell-/Rechnungsdatum und -zeit (Format: JJJJ-MM-TT HH:MM:SS)",
|
||||
"Order/invoice status": "Bestellung/Rechnung Status",
|
||||
"All": "Alle",
|
||||
"Non-Cancelled": "Nicht storniert",
|
||||
"Cancelled": "Abgebrochen",
|
||||
"Ascending": "Aufsteigend",
|
||||
"Descending": "Absteigend",
|
||||
"Confirmed (1)": "Bestätigt (1)",
|
||||
"Not Confirmed (0)": "Nicht bestätigt (0)",
|
||||
"Date Start (Descending)": "Startdatum (absteigend)",
|
||||
"Date Start (Ascending)": "Startdatum (absteigend)",
|
||||
"Record Date": "Aufzeichnungsdatum",
|
||||
"Non Cancelled": "Non Cancelled",
|
||||
"Cancelled by Client": "Vom Kunden abgebrochen",
|
||||
"Cancelled by Admin": "Vom Admin abgebrochen",
|
||||
"Non Approved Yet": "Noch nicht genehmigt",
|
||||
"Approved": "Genehmigt",
|
||||
"New Booking": "Neue Buchung",
|
||||
"Booking Change": "Buchungsänderung",
|
||||
"Booking Cancellation": "Stornierung der Buchung",
|
||||
"New Client": "Neuer Kunde",
|
||||
"New Invoice": "Neue Rechnung",
|
||||
"New Offer": "Neues Angebot",
|
||||
"Triggers when a new booking is created in SimplyBook.me": "Wird ausgelöst, wenn eine neue Buchung in SimplyBook.me erstellt wird",
|
||||
"Triggers when a booking is changed in SimplyBook.me": "Wird ausgelöst, wenn eine Buchung in SimplyBook.me geändert wird",
|
||||
"Triggers when a booking is canceled in SimplyBook.me": "Wird ausgelöst, wenn eine Buchung in SimplyBook.me storniert wird",
|
||||
"Triggers when a new client is added (via booking or manually) in SimplyBook.me": "Löst aus, wenn ein neuer Client in SimplyBook.me hinzugefügt wird (via Buchung oder manuell)",
|
||||
"Triggers when a new invoice is generated/paid in SimplyBook.me (requires Accept Payments feature)": "Löst aus, wenn eine neue Rechnung in SimplyBook.me generiert/bezahlt wird (erfordert die Funktion Akzeptierte Zahlungen)",
|
||||
"Triggers when a new offer (proposal or quote) is created (bookings with promo: false)": "Wird ausgelöst, wenn ein neues Angebot erstellt wird (Angebot oder Angebot) (Buchungen mit Promo: falsch)"
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"Company Login": "Login de la empresa",
|
||||
"User Login": "Inicio de sesión",
|
||||
"User Password": "Contraseña de usuario",
|
||||
"Your Simplybook company login (e.g., \"yourcompany\" from yourcompany.simplybook.me)": "Su nombre de usuario de la empresa de Simplybook (por ejemplo, \"sua empresa\" de yourcompany.simplybook.me)",
|
||||
"Your admin user login associated with the company": "Tu usuario administrador asociado con la empresa",
|
||||
"Your admin user password": "Tu contraseña de usuario admin",
|
||||
"Enter your Simplybook admin credentials to access the Admin API.": "Introduzca sus credenciales de administración de Simplybook para acceder al API de administrador.",
|
||||
"Create Booking": "Crear reserva",
|
||||
"Set Booking Comment": "Establecer comentario de reserva",
|
||||
"Add Client": "Añadir cliente",
|
||||
"Create Note": "Crear nota",
|
||||
"Create Detailed Report": "Crear informe detallado",
|
||||
"Cancel Booking": "Cancelar reserva",
|
||||
"Delete Client": "Eliminar cliente",
|
||||
"Get Bookings": "Obtener reservas",
|
||||
"Get Client List": "Obtener lista de clientes",
|
||||
"Find Invoice": "Buscar factura",
|
||||
"Create a new booking using the book API method. Returns appointment info or throws exception if time not available.": "Crear una nueva reserva utilizando el método API de libro. Devuelve la información de la cita o arroja una excepción si el tiempo no está disponible.",
|
||||
"Set a comment for a booking": "Establecer un comentario para una reserva",
|
||||
"Add a new client with specified data. Email, phone, or both may be required (check company settings).": "Añadir un nuevo cliente con datos especificados. Correo electrónico, teléfono o ambos pueden ser requeridos (comprobar la configuración de la empresa).",
|
||||
"Create a note (generic) in the system": "Crear una nota (genérico) en el sistema",
|
||||
"Generate a detailed report (metrics, bookings, revenue)": "Generar un informe detallado (métricas, libros, ingresos)",
|
||||
"Cancel an existing booking. Returns true on success.": "Cancelar una reserva existente. Devuelve verdadero en caso de éxito.",
|
||||
"Delete an existing client": "Eliminar un cliente existente",
|
||||
"Returns list of bookings filtered by given parameters": "Devuelve la lista de reservas filtradas por determinados parámetros",
|
||||
"Returns list of clients associated with company. Search by phone number, email address, or name.": "Devuelve la lista de clientes asociados a la empresa. Búsqueda por número de teléfono, dirección de correo electrónico o nombre.",
|
||||
"Find invoices with filters and pagination": "Encuentra facturas con filtros y paginación",
|
||||
"Service": "Servicio",
|
||||
"Provider": "Proveedor",
|
||||
"Client": "Cliente",
|
||||
"Start Date": "Fecha de inicio",
|
||||
"Start Time": "Hora de inicio",
|
||||
"End Date": "Fecha de fin",
|
||||
"End Time": "Hora de fin",
|
||||
"Client Time Offset (seconds)": "Desplazamiento de tiempo del cliente (segundos)",
|
||||
"Additional Fields": "Campos adicionales",
|
||||
"Count": "Contador",
|
||||
"Batch ID": "ID de Lote",
|
||||
"Recurring Data": "Datos recurrientes",
|
||||
"Booking": "Reservando",
|
||||
"Comment": "Comentario",
|
||||
"Name": "Nombre",
|
||||
"Email": "E-mail",
|
||||
"Phone": "Teléfono",
|
||||
"Address Line 1": "Dirección línea 1",
|
||||
"Address Line 2": "Dirección línea 2",
|
||||
"City": "Ciudad",
|
||||
"ZIP Code": "Código postal",
|
||||
"Country ID": "ID de país",
|
||||
"Start Date Time": "Fecha de inicio hora",
|
||||
"End Date Time": "Fecha de fin hora",
|
||||
"Note Type": "Tipo de nota",
|
||||
"Note": "Nota",
|
||||
"Mode": "Modo",
|
||||
"Time Blocked": "Tiempo bloqueado",
|
||||
"Created Date From": "Fecha de Creación desde",
|
||||
"Created Date To": "Fecha de Creación",
|
||||
"Date From": "Fecha de",
|
||||
"Date To": "Fecha hasta",
|
||||
"Booking Code": "Código de reserva",
|
||||
"Service ID": "ID del servicio",
|
||||
"Service Provider ID": "ID de proveedor de servicio",
|
||||
"Client ID": "ID de cliente",
|
||||
"Booking Type": "Tipo de reserva",
|
||||
"Order Field": "Campo de pedido",
|
||||
"Order Direction": "Dirección del pedido",
|
||||
"Export Columns": "Exportar columnas",
|
||||
"Time From": "Tiempo desde",
|
||||
"Time To": "Tiempo hasta",
|
||||
"Is Confirmed": "Está confirmado",
|
||||
"Order By": "Ordenar por",
|
||||
"Search String": "Cadena de búsqueda",
|
||||
"Limit": "Límite",
|
||||
"Page": "Pgina",
|
||||
"Items Per Page": "Elementos por página",
|
||||
"Date Time From": "Fecha y hora de",
|
||||
"Date Time To": "Fecha y hora hasta",
|
||||
"Status": "Estado",
|
||||
"Select a service": "Seleccione un servicio",
|
||||
"Select a service provider": "Seleccione un proveedor de servicios",
|
||||
"Select a client": "Seleccione un cliente",
|
||||
"Booking start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Fecha de inicio de la reserva (formato: AAA-MM-DD, p. ej., 2024 03-01)",
|
||||
"Booking start time (format: HH:MM:SS, e.g., 09:00:00). Must be multiple of company timeframe.": "Hora de inicio de la reserva (formato: HH:MM:SS, p. ej., 09:00:00). Debe ser múltiple del marco temporal de la empresa.",
|
||||
"Booking end date (format: YYYY-MM-DD, e.g., 2024-03-01). Should be later than start date.": "Fecha de finalización de la reserva (formato: AAA-MM-DD, p. ej., 2024-03-01). Debe ser posterior a la fecha de inicio.",
|
||||
"Booking end time (format: HH:MM:SS, e.g., 10:00:00). Should be later than start time.": "Hora de finalización de la reserva (formato: HH:MM:SS, p. ej., 10:00:00). Debe ser más tarde que la hora de inicio.",
|
||||
"Difference between company and client time zone in seconds (e.g., -3600 for GMT+3 client with GMT+2 company)": "Diferencia entre la empresa y la zona horaria del cliente en segundos (por ejemplo, -3600 para cliente GMT+3 con empresa GMT+2)",
|
||||
"Additional params and fields as object (e.g., {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Use for promo codes, location ID, intake forms.": "Parámetros y campos adicionales como objeto (por ejemplo, {\"código promocional\": \"CODE123\", \"location_id\": \"1\"}). Utilizar para códigos promocionales, ID de localización, formularios de entrada.",
|
||||
"Number of bookings for group booking batch (min. 1). Cannot be used with Batch ID.": "Número de reservas para el lote de reservas de grupo (min. 1). No se puede utilizar con el ID de Batch.",
|
||||
"Add booking to existing group bookings batch. Cannot be used with Count > 1.": "Añadir reserva al lote de reservas de grupo existente. No se puede utilizar con Cuenta > 1.",
|
||||
"Make booking recurrent (optional, array format)": "Hacer reserva recurrente (opcional, formato de matriz)",
|
||||
"Select a booking": "Seleccione una reserva",
|
||||
"The comment text to set for the booking": "El texto del comentario a establecer para la reserva",
|
||||
"Client name": "Nombre del cliente",
|
||||
"Client email address": "Dirección de email del cliente",
|
||||
"Client phone number (e.g., +1502-810-4521)": "Número de teléfono del cliente (por ejemplo, +1502-810-4521)",
|
||||
"Client address line 1": "Línea de dirección de cliente 1",
|
||||
"Client address line 2": "Dirección del cliente línea 2",
|
||||
"Client city": "Ciudad del cliente",
|
||||
"Client ZIP/postal code": "Código postal del cliente",
|
||||
"Client country ID": "ID de país de cliente",
|
||||
"Note start date and time (format: YYYY-MM-DD HH:MM:SS)": "Nota fecha y hora de inicio (formato: AAA-MM-DD HH:MM:SS)",
|
||||
"Note end date and time (format: YYYY-MM-DD HH:MM:SS)": "Nota fecha y hora final (formato: AAA-MM-DD HH:MM:SS)",
|
||||
"Select a note type": "Seleccione un tipo de nota",
|
||||
"Note body/content": "Nota de cuerpo/contenido",
|
||||
"Note mode - determines visibility scope": "Modo de nota - determina el alcance de la visibilidad",
|
||||
"Whether the time should be blocked": "Si el tiempo debe ser bloqueado",
|
||||
"Select a provider (optional)": "Seleccione un proveedor (opcional)",
|
||||
"Select a service (optional)": "Seleccione un servicio (opcional)",
|
||||
"Filter by booking creation date from (format: YYYY-MM-DD)": "Filtrar por fecha de creación de reserva desde (formato: AAA-MM-DD)",
|
||||
"Filter by booking creation date to (format: YYYY-MM-DD)": "Filtrar por fecha de creación de la reserva hasta (formato: AAA-MM-DD)",
|
||||
"Filter by booking date from (format: YYYY-MM-DD)": "Filtrar por fecha de reserva desde (formato: AAA-MM-DD)",
|
||||
"Filter by booking date to (format: YYYY-MM-DD)": "Filtrar por fecha de reserva hasta (formato: AAA-MM-DD)",
|
||||
"Filter by booking code": "Filtrar por código de reserva",
|
||||
"Filter by service ID": "Filtrar por ID de servicio",
|
||||
"Filter by service provider ID": "Filtrar por ID del proveedor de servicios",
|
||||
"Filter by client ID": "Filtrar por ID de cliente",
|
||||
"Filter by booking type": "Filtrar por tipo de reserva",
|
||||
"Field to order results by (e.g., record_date)": "Campo para ordenar resultados por (por ej., fecha de registro)",
|
||||
"Sort order direction": "Dirección de orden",
|
||||
"Array of columns to export (leave empty for all columns)": "Matriz de columnas a exportar (dejar vacío para todas las columnas)",
|
||||
"Start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Fecha de inicio (formato: AAA-MM-DD, p. ej., 2024-03-01)",
|
||||
"Start time (format: HH:MM:SS, e.g., 09:00:00)": "Hora de inicio (formato: HH:MM:SS, ej., 09:00:00)",
|
||||
"End date (format: YYYY-MM-DD, e.g., 2024-03-31)": "Fecha de fin (formato: AAA-MM-DD, p. ej., 2024 03-31)",
|
||||
"End time (format: HH:MM:SS, e.g., 18:00:00)": "Hora final (formato: HH:MM:SS, p. ej., 18:00:00)",
|
||||
"Filter by creation date from (format: YYYY-MM-DD)": "Filtrar por fecha de creación desde (formato: AAA-MM-DD)",
|
||||
"Filter by creation date to (format: YYYY-MM-DD)": "Filtrar por fecha de creación hasta (formato: AAA-MM-DD)",
|
||||
"Get bookings for a specific service provider (optional)": "Obtener reservas para un proveedor de servicios específico (opcional)",
|
||||
"Get bookings for a specific service (optional)": "Obtener reservas para un servicio específico (opcional)",
|
||||
"Filter by confirmation status": "Filtrar por estado de confirmación",
|
||||
"Get bookings for a specific client (optional)": "Obtener reservas para un cliente específico (opcional)",
|
||||
"Sort order for results": "Ordenar resultados",
|
||||
"Filter by booking type (depends on Approve booking plugin status)": "Filtrar por tipo de reserva (depende de aprobar el estado del plugin de reserva)",
|
||||
"Search by phone number, email address, or name. Leave empty to get all clients.": "Buscar por número de teléfono, dirección de correo electrónico o nombre. Dejar en blanco para obtener todos los clientes.",
|
||||
"Maximum number of clients to return. Leave empty for no limit.": "Número máximo de clientes a regresar. Dejar vacío para sin límite.",
|
||||
"Page number in the list": "Número de página en la lista",
|
||||
"Number of items per page": "Número de elementos por página",
|
||||
"Filter by client (optional)": "Filtrar por cliente (opcional)",
|
||||
"Order/invoice date and time from (format: YYYY-MM-DD HH:MM:SS)": "Ordenar fecha y hora de factura/factura de (formato: AAAY-MM-DD HH:MM:SS)",
|
||||
"Order/invoice date and time to (format: YYYY-MM-DD HH:MM:SS)": "Ordenar fecha y hora de factura/factura a (formato: AAAA-MM-DD HH:MM:SS)",
|
||||
"Order/invoice status": "Estado de pedido/factura",
|
||||
"All": "Todos",
|
||||
"Non-Cancelled": "No cancelado",
|
||||
"Cancelled": "Cancelado",
|
||||
"Ascending": "Ascendiente",
|
||||
"Descending": "Descendiente",
|
||||
"Confirmed (1)": "Confirmado(1)",
|
||||
"Not Confirmed (0)": "No confirmado (0)",
|
||||
"Date Start (Descending)": "Fecha de inicio (descendente)",
|
||||
"Date Start (Ascending)": "Fecha de inicio (ascendente)",
|
||||
"Record Date": "Fecha de registro",
|
||||
"Non Cancelled": "Non Cancelled",
|
||||
"Cancelled by Client": "Cancelado por el cliente",
|
||||
"Cancelled by Admin": "Cancelado por el administrador",
|
||||
"Non Approved Yet": "No aprobado aún",
|
||||
"Approved": "Aprobado",
|
||||
"New Booking": "Nueva reserva",
|
||||
"Booking Change": "Cambio de reserva",
|
||||
"Booking Cancellation": "Cancelación de reserva",
|
||||
"New Client": "Nuevo cliente",
|
||||
"New Invoice": "Nueva factura",
|
||||
"New Offer": "Nueva oferta",
|
||||
"Triggers when a new booking is created in SimplyBook.me": "Dispara cuando se crea una nueva reserva en SimplyBook.me",
|
||||
"Triggers when a booking is changed in SimplyBook.me": "Disparadores cuando una reserva se cambia en SimplyBook.me",
|
||||
"Triggers when a booking is canceled in SimplyBook.me": "Dispara cuando una reserva es cancelada en SimplyBook.me",
|
||||
"Triggers when a new client is added (via booking or manually) in SimplyBook.me": "Se activa cuando se añade un nuevo cliente (a través de la reserva o manualmente) en SimplyBook.me",
|
||||
"Triggers when a new invoice is generated/paid in SimplyBook.me (requires Accept Payments feature)": "Dispara cuando una nueva factura es generada/pagada en SimplyBook.me (requiere la función Aceptar pagos)",
|
||||
"Triggers when a new offer (proposal or quote) is created (bookings with promo: false)": "Dispara cuando se crea una nueva oferta (propuesta o cotización) (reservas con promoción: falso)"
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"Company Login": "Connexion de la société",
|
||||
"User Login": "Connexion de l'utilisateur",
|
||||
"User Password": "Mot de passe de l'utilisateur",
|
||||
"Your Simplybook company login (e.g., \"yourcompany\" from yourcompany.simplybook.me)": "Connexion de votre entreprise Simplybook (par exemple, \"votreentreprise\" de votreentreprise.simplybook.me)",
|
||||
"Your admin user login associated with the company": "Votre identifiant utilisateur admin associé à la société",
|
||||
"Your admin user password": "Votre mot de passe administrateur",
|
||||
"Enter your Simplybook admin credentials to access the Admin API.": "Entrez vos identifiants d'administration de Simplybook pour accéder à l'API Admin.",
|
||||
"Create Booking": "Créer une réservation",
|
||||
"Set Booking Comment": "Définir le commentaire de réservation",
|
||||
"Add Client": "Ajouter un client",
|
||||
"Create Note": "Créer une note",
|
||||
"Create Detailed Report": "Créer un rapport détaillé",
|
||||
"Cancel Booking": "Annuler la réservation",
|
||||
"Delete Client": "Supprimer le client",
|
||||
"Get Bookings": "Obtenir des réservations",
|
||||
"Get Client List": "Obtenir la liste des clients",
|
||||
"Find Invoice": "Trouver une facture",
|
||||
"Create a new booking using the book API method. Returns appointment info or throws exception if time not available.": "Créer une nouvelle réservation en utilisant la méthode API du livre. Renvoie les informations du rendez-vous ou émet une exception si l'heure n'est pas disponible.",
|
||||
"Set a comment for a booking": "Définir un commentaire pour une réservation",
|
||||
"Add a new client with specified data. Email, phone, or both may be required (check company settings).": "Ajouter un nouveau client avec des données spécifiées. Courriel, téléphone ou les deux peuvent être requis (vérifiez les paramètres de la société).",
|
||||
"Create a note (generic) in the system": "Créer une note (générique) dans le système",
|
||||
"Generate a detailed report (metrics, bookings, revenue)": "Générer un rapport détaillé (métriques, réservations, revenus)",
|
||||
"Cancel an existing booking. Returns true on success.": "Annuler une réservation existante. Renvoie vrai en cas de succès.",
|
||||
"Delete an existing client": "Supprimer un client existant",
|
||||
"Returns list of bookings filtered by given parameters": "Renvoie la liste des réservations filtrées par les paramètres donnés",
|
||||
"Returns list of clients associated with company. Search by phone number, email address, or name.": "Renvoie la liste des clients associés à l'entreprise. Recherche par numéro de téléphone, adresse e-mail ou nom.",
|
||||
"Find invoices with filters and pagination": "Trouver des factures avec des filtres et de la pagination",
|
||||
"Service": "Service",
|
||||
"Provider": "Fournisseur",
|
||||
"Client": "Client",
|
||||
"Start Date": "Date de début",
|
||||
"Start Time": "Start Time",
|
||||
"End Date": "Date de fin",
|
||||
"End Time": "Heure de fin",
|
||||
"Client Time Offset (seconds)": "Décalage horaire du client (secondes)",
|
||||
"Additional Fields": "Champs supplémentaires",
|
||||
"Count": "Count",
|
||||
"Batch ID": "ID de lot",
|
||||
"Recurring Data": "Données récurrentes",
|
||||
"Booking": "Réservation",
|
||||
"Comment": "Commenter",
|
||||
"Name": "Nom",
|
||||
"Email": "Courriel",
|
||||
"Phone": "Téléphone",
|
||||
"Address Line 1": "Adresse ligne 1",
|
||||
"Address Line 2": "Adresse ligne 2",
|
||||
"City": "Ville",
|
||||
"ZIP Code": "Code postal",
|
||||
"Country ID": "ID du pays",
|
||||
"Start Date Time": "Date de début",
|
||||
"End Date Time": "Date de fin",
|
||||
"Note Type": "Type de note",
|
||||
"Note": "Note",
|
||||
"Mode": "Mode",
|
||||
"Time Blocked": "Temps Bloqué",
|
||||
"Created Date From": "Date de création du",
|
||||
"Created Date To": "Créé le",
|
||||
"Date From": "Date de début",
|
||||
"Date To": "Date de fin",
|
||||
"Booking Code": "Code de réservation",
|
||||
"Service ID": "ID de service",
|
||||
"Service Provider ID": "ID du fournisseur de services",
|
||||
"Client ID": "ID client",
|
||||
"Booking Type": "Type de réservation",
|
||||
"Order Field": "Champ de la commande",
|
||||
"Order Direction": "Direction de la commande",
|
||||
"Export Columns": "Exporter les colonnes",
|
||||
"Time From": "Temps à partir de",
|
||||
"Time To": "Heure de",
|
||||
"Is Confirmed": "Est confirmé",
|
||||
"Order By": "Trier par",
|
||||
"Search String": "Chaîne de recherche",
|
||||
"Limit": "Limite",
|
||||
"Page": "Page",
|
||||
"Items Per Page": "Éléments par page",
|
||||
"Date Time From": "Date à partir de",
|
||||
"Date Time To": "Date/Heure jusqu'au",
|
||||
"Status": "Statut",
|
||||
"Select a service": "Sélectionnez un service",
|
||||
"Select a service provider": "Sélectionnez un fournisseur de service",
|
||||
"Select a client": "Sélectionnez un client",
|
||||
"Booking start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Date de début de réservation (format : AAAA-MM-JJ, ex. 2024-03-01)",
|
||||
"Booking start time (format: HH:MM:SS, e.g., 09:00:00). Must be multiple of company timeframe.": "Heure de début de réservation (format : HH:MM:SS, par exemple, 09:00:00). Doit être multiple de la période de l'entreprise.",
|
||||
"Booking end date (format: YYYY-MM-DD, e.g., 2024-03-01). Should be later than start date.": "Date de fin de réservation (format : AAAA-MM-JJ, p. ex. 2024-03-01). Doit être postérieur à la date de début.",
|
||||
"Booking end time (format: HH:MM:SS, e.g., 10:00:00). Should be later than start time.": "Heure de fin de réservation (format: HH:MM:SS, par exemple, 10:00:00). Doit être plus tard que l'heure de début.",
|
||||
"Difference between company and client time zone in seconds (e.g., -3600 for GMT+3 client with GMT+2 company)": "Différence entre la société et le fuseau horaire du client en secondes (par exemple, -3600 pour le client GMT+3 avec l'entreprise GMT+2)",
|
||||
"Additional params and fields as object (e.g., {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Use for promo codes, location ID, intake forms.": "Paramètres et champs supplémentaires en tant qu'objet (par exemple, {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Utilisez pour les codes promotionnels, l'ID de la localisation, les formulaires d'entrée.",
|
||||
"Number of bookings for group booking batch (min. 1). Cannot be used with Batch ID.": "Nombre de réservations pour le lot de réservation de groupe (min. 1). Ne peut pas être utilisé avec l'ID du lot.",
|
||||
"Add booking to existing group bookings batch. Cannot be used with Count > 1.": "Ajouter une réservation à un lot de réservations de groupe existantes. Ne peut pas être utilisé avec le compte > 1.",
|
||||
"Make booking recurrent (optional, array format)": "Rendre la réservation récurrente (optionnelle, format tableau)",
|
||||
"Select a booking": "Sélectionnez une réservation",
|
||||
"The comment text to set for the booking": "Le texte du commentaire à définir pour la réservation",
|
||||
"Client name": "Nom du client",
|
||||
"Client email address": "Adresse e-mail du client",
|
||||
"Client phone number (e.g., +1502-810-4521)": "Numéro de téléphone du client (par exemple, +1502-810-4521)",
|
||||
"Client address line 1": "Adresse du client ligne 1",
|
||||
"Client address line 2": "Adresse du client ligne 2",
|
||||
"Client city": "Ville du client",
|
||||
"Client ZIP/postal code": "Code postal du client",
|
||||
"Client country ID": "ID du pays du client",
|
||||
"Note start date and time (format: YYYY-MM-DD HH:MM:SS)": "Note Date et heure de début (format: AAAA-MM-JJ HH:MM:SS)",
|
||||
"Note end date and time (format: YYYY-MM-DD HH:MM:SS)": "Date et heure de fin de la note (format: AAAA-MM-JJ HH:MM:SS)",
|
||||
"Select a note type": "Sélectionnez un type de note",
|
||||
"Note body/content": "Corps de la note / contenu",
|
||||
"Note mode - determines visibility scope": "Mode note - détermine la portée de visibilité",
|
||||
"Whether the time should be blocked": "Si l'heure doit être bloquée",
|
||||
"Select a provider (optional)": "Sélectionnez un fournisseur (facultatif)",
|
||||
"Select a service (optional)": "Sélectionnez un service (facultatif)",
|
||||
"Filter by booking creation date from (format: YYYY-MM-DD)": "Filtrer par date de création de la réservation (format : AAAA-MM-JJ)",
|
||||
"Filter by booking creation date to (format: YYYY-MM-DD)": "Filtrer par date de création de la réservation (format: AAAA-MM-JJ)",
|
||||
"Filter by booking date from (format: YYYY-MM-DD)": "Filtrer par date de réservation (format : AAAA-MM-JJ)",
|
||||
"Filter by booking date to (format: YYYY-MM-DD)": "Filtrer par date de réservation (format: AAAA-MM-JJ)",
|
||||
"Filter by booking code": "Filtrer par code de réservation",
|
||||
"Filter by service ID": "Filtrer par ID de service",
|
||||
"Filter by service provider ID": "Filtrer par ID de fournisseur de services",
|
||||
"Filter by client ID": "Filtrer par ID du client",
|
||||
"Filter by booking type": "Filtrer par type de réservation",
|
||||
"Field to order results by (e.g., record_date)": "Champ pour ordonner les résultats par (par exemple, record_date)",
|
||||
"Sort order direction": "Direction de l'ordre de tri",
|
||||
"Array of columns to export (leave empty for all columns)": "Tableau des colonnes à exporter (laisser vide pour toutes les colonnes)",
|
||||
"Start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Date de début (format : AAAA-MM-JJ, ex: 2024-03-01)",
|
||||
"Start time (format: HH:MM:SS, e.g., 09:00:00)": "Heure de début (format: HH:MM:SS, ex: 09:00:00)",
|
||||
"End date (format: YYYY-MM-DD, e.g., 2024-03-31)": "Date de fin (format: AAAA-MM-JJ, ex: 2024-03-31)",
|
||||
"End time (format: HH:MM:SS, e.g., 18:00:00)": "Heure de fin (format: HH:MM:SS, ex: 18:00:00)",
|
||||
"Filter by creation date from (format: YYYY-MM-DD)": "Filtrer par date de création (format: AAAA-MM-JJ)",
|
||||
"Filter by creation date to (format: YYYY-MM-DD)": "Filtrer par date de création (format: AAAA-MM-JJ)",
|
||||
"Get bookings for a specific service provider (optional)": "Obtenir des réservations pour un fournisseur de services spécifique (facultatif)",
|
||||
"Get bookings for a specific service (optional)": "Obtenir des réservations pour un service spécifique (facultatif)",
|
||||
"Filter by confirmation status": "Filtrer par état de confirmation",
|
||||
"Get bookings for a specific client (optional)": "Obtenir des réservations pour un client spécifique (facultatif)",
|
||||
"Sort order for results": "Ordre de tri des résultats",
|
||||
"Filter by booking type (depends on Approve booking plugin status)": "Filtrer par type de réservation (dépend du statut du plugin d'approbation de réservation)",
|
||||
"Search by phone number, email address, or name. Leave empty to get all clients.": "Recherche par numéro de téléphone, adresse e-mail ou nom. Laisser vide pour obtenir tous les clients.",
|
||||
"Maximum number of clients to return. Leave empty for no limit.": "Nombre maximum de clients à retourner. Laisser vide pour pas de limite.",
|
||||
"Page number in the list": "Numéro de page dans la liste",
|
||||
"Number of items per page": "Nombre d'éléments par page",
|
||||
"Filter by client (optional)": "Filtrer par client (optionnel)",
|
||||
"Order/invoice date and time from (format: YYYY-MM-DD HH:MM:SS)": "Date et heure de la commande/facture (format : AAAA-MM-JJ HH:MM:SS)",
|
||||
"Order/invoice date and time to (format: YYYY-MM-DD HH:MM:SS)": "Date et heure de la commande/facture (format: AAAA-MM-JJ HH:MM:SS)",
|
||||
"Order/invoice status": "État de la commande/facture",
|
||||
"All": "Tous",
|
||||
"Non-Cancelled": "Non Annulé",
|
||||
"Cancelled": "Annulé",
|
||||
"Ascending": "Ascendant",
|
||||
"Descending": "Descendant",
|
||||
"Confirmed (1)": "Confirmé (1)",
|
||||
"Not Confirmed (0)": "Non confirmé (0)",
|
||||
"Date Start (Descending)": "Date de début (Descendant)",
|
||||
"Date Start (Ascending)": "Date de début (Ascendant)",
|
||||
"Record Date": "Date d'enregistrement",
|
||||
"Non Cancelled": "Non Cancelled",
|
||||
"Cancelled by Client": "Annulé par le client",
|
||||
"Cancelled by Admin": "Annulé par l'administrateur",
|
||||
"Non Approved Yet": "Pas encore approuvé",
|
||||
"Approved": "Approuvé",
|
||||
"New Booking": "Nouvelle réservation",
|
||||
"Booking Change": "Changement de réservation",
|
||||
"Booking Cancellation": "Annulation de la réservation",
|
||||
"New Client": "Nouveau client",
|
||||
"New Invoice": "Nouvelle facture",
|
||||
"New Offer": "Nouvelle offre",
|
||||
"Triggers when a new booking is created in SimplyBook.me": "Déclenche quand une nouvelle réservation est créée dans SimplyBook.me",
|
||||
"Triggers when a booking is changed in SimplyBook.me": "Déclenche quand une réservation est modifiée dans SimplyBook.me",
|
||||
"Triggers when a booking is canceled in SimplyBook.me": "Déclenche quand une réservation est annulée dans SimplyBook.me",
|
||||
"Triggers when a new client is added (via booking or manually) in SimplyBook.me": "Déclenche lorsqu'un nouveau client est ajouté (via la réservation ou manuellement) dans SimplyBook.me",
|
||||
"Triggers when a new invoice is generated/paid in SimplyBook.me (requires Accept Payments feature)": "Déclenche quand une nouvelle facture est générée/payée dans SimplyBook.me (nécessite la fonction Accept Payments)",
|
||||
"Triggers when a new offer (proposal or quote) is created (bookings with promo: false)": "Déclenche quand une nouvelle offre (proposition ou devis) est créée (réservations avec promotion : faux)"
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"Company Login": "会社ログイン",
|
||||
"User Login": "ユーザーログイン",
|
||||
"User Password": "ユーザーパスワード",
|
||||
"Your Simplybook company login (e.g., \"yourcompany\" from yourcompany.simplybook.me)": "Simplybook 会社のログイン (例: yourcompany.simplebook.me)",
|
||||
"Your admin user login associated with the company": "会社に関連付けられた管理者ユーザーログイン",
|
||||
"Your admin user password": "管理者のユーザーパスワード",
|
||||
"Enter your Simplybook admin credentials to access the Admin API.": "管理APIにアクセスするには、Simplybook 管理者の資格情報を入力します。",
|
||||
"Create Booking": "予約を作成",
|
||||
"Set Booking Comment": "予約コメントを設定",
|
||||
"Add Client": "クライアントを追加",
|
||||
"Create Note": "ノートを作成",
|
||||
"Create Detailed Report": "詳細レポートを作成",
|
||||
"Cancel Booking": "予約をキャンセル",
|
||||
"Delete Client": "クライアントを削除",
|
||||
"Get Bookings": "予約を取得する",
|
||||
"Get Client List": "クライアントリストの取得",
|
||||
"Find Invoice": "請求書を検索",
|
||||
"Create a new booking using the book API method. Returns appointment info or throws exception if time not available.": "book APIメソッドを使用して新しい予約を作成します。予約情報を返すか、時間がない場合は例外をスローします。",
|
||||
"Set a comment for a booking": "予約のコメントを設定",
|
||||
"Add a new client with specified data. Email, phone, or both may be required (check company settings).": "指定されたデータを含む新しいクライアントを追加します。メール、電話、または両方が必要な場合があります (会社の設定を確認してください)。",
|
||||
"Create a note (generic) in the system": "システム内にノート(一般的)を作成",
|
||||
"Generate a detailed report (metrics, bookings, revenue)": "詳細レポート(指標、予約、収益)",
|
||||
"Cancel an existing booking. Returns true on success.": "既存の予約をキャンセルします。成功した場合はtrueを返します。",
|
||||
"Delete an existing client": "既存のクライアントを削除",
|
||||
"Returns list of bookings filtered by given parameters": "指定されたパラメーターでフィルターされたブックのリストを返します。",
|
||||
"Returns list of clients associated with company. Search by phone number, email address, or name.": "会社に関連付けられているクライアントのリストを返します。電話番号、メールアドレス、または名前で検索します。",
|
||||
"Find invoices with filters and pagination": "フィルタとペジネーション付きの請求書を検索",
|
||||
"Service": "サービス",
|
||||
"Provider": "プロバイダー",
|
||||
"Client": "クライアント",
|
||||
"Start Date": "開始日",
|
||||
"Start Time": "開始時刻",
|
||||
"End Date": "終了日",
|
||||
"End Time": "終了時刻",
|
||||
"Client Time Offset (seconds)": "クライアント時間オフセット(秒)",
|
||||
"Additional Fields": "追加項目",
|
||||
"Count": "カウント",
|
||||
"Batch ID": "バッチID",
|
||||
"Recurring Data": "定期的なデータ",
|
||||
"Booking": "予約",
|
||||
"Comment": "コメント",
|
||||
"Name": "Name",
|
||||
"Email": "Eメールアドレス",
|
||||
"Phone": "電話番号",
|
||||
"Address Line 1": "住所1",
|
||||
"Address Line 2": "住所2",
|
||||
"City": "市区町村名",
|
||||
"ZIP Code": "郵便番号",
|
||||
"Country ID": "国ID",
|
||||
"Start Date Time": "開始日時",
|
||||
"End Date Time": "終了日時",
|
||||
"Note Type": "ノートの種類",
|
||||
"Note": "メモ",
|
||||
"Mode": "モード",
|
||||
"Time Blocked": "ブロック時間",
|
||||
"Created Date From": "作成日から",
|
||||
"Created Date To": "作成日",
|
||||
"Date From": "開始日",
|
||||
"Date To": "終了日",
|
||||
"Booking Code": "予約コード",
|
||||
"Service ID": "サービスID",
|
||||
"Service Provider ID": "サービスプロバイダID",
|
||||
"Client ID": "クライアント ID",
|
||||
"Booking Type": "予約タイプ",
|
||||
"Order Field": "注文フィールド",
|
||||
"Order Direction": "注文の方向",
|
||||
"Export Columns": "列のエクスポート",
|
||||
"Time From": "開始日時",
|
||||
"Time To": "時間",
|
||||
"Is Confirmed": "確認済み",
|
||||
"Order By": "並び替え",
|
||||
"Search String": "検索文字列",
|
||||
"Limit": "制限",
|
||||
"Page": "ページ",
|
||||
"Items Per Page": "1ページあたりのアイテム",
|
||||
"Date Time From": "開始日時:",
|
||||
"Date Time To": "終了日時",
|
||||
"Status": "ステータス",
|
||||
"Select a service": "サービスを選択",
|
||||
"Select a service provider": "サービスプロバイダを選択",
|
||||
"Select a client": "クライアントを選択",
|
||||
"Booking start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "予約開始日 (フォーマット: YYYY-MM-DD, 例: 2024-03-01)",
|
||||
"Booking start time (format: HH:MM:SS, e.g., 09:00:00). Must be multiple of company timeframe.": "予約開始時間 (フォーマット: HH:MM:SS, 例えば, 09:00:00). 会社の時間枠の倍数である必要があります.",
|
||||
"Booking end date (format: YYYY-MM-DD, e.g., 2024-03-01). Should be later than start date.": "予約終了日 (フォーマット: YYYY-MM-DD, 例えば, 2024-03-01). 開始日より後でなければなりません.",
|
||||
"Booking end time (format: HH:MM:SS, e.g., 10:00:00). Should be later than start time.": "予約終了時間 (フォーマット: HH:MM:SS, 例えば, 10:00:00:00). 開始時間よりも遅くする必要があります.",
|
||||
"Difference between company and client time zone in seconds (e.g., -3600 for GMT+3 client with GMT+2 company)": "会社とクライアントのタイムゾーンの違い(例:GMT+2の場合GMT+3の場合-3600)",
|
||||
"Additional params and fields as object (e.g., {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Use for promo codes, location ID, intake forms.": "オブジェクトとしての追加のパラメータとフィールド (例: {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). プロモーションコード, ロケーションID, インテークフォームに使用します。",
|
||||
"Number of bookings for group booking batch (min. 1). Cannot be used with Batch ID.": "グループ予約バッチの予約数(最小1)。バッチIDでは使用できません。",
|
||||
"Add booking to existing group bookings batch. Cannot be used with Count > 1.": "既存のグループ予約バッチに予約を追加します。カウント>1では使用できません。",
|
||||
"Make booking recurrent (optional, array format)": "繰り返し予約を行います (オプション、配列形式)",
|
||||
"Select a booking": "予約を選択",
|
||||
"The comment text to set for the booking": "予約に設定するコメント テキスト",
|
||||
"Client name": "クライアント名",
|
||||
"Client email address": "クライアントのメールアドレス",
|
||||
"Client phone number (e.g., +1502-810-4521)": "クライアントの電話番号 (例: +1502-810-4521)",
|
||||
"Client address line 1": "クライアントアドレス1",
|
||||
"Client address line 2": "クライアントアドレス2",
|
||||
"Client city": "顧客の都市",
|
||||
"Client ZIP/postal code": "クライアントの郵便番号(郵便番号)",
|
||||
"Client country ID": "クライアントの国ID",
|
||||
"Note start date and time (format: YYYY-MM-DD HH:MM:SS)": "ノートの開始日時(フォーマット: YYYY-MM-DD HH:MM:SS)",
|
||||
"Note end date and time (format: YYYY-MM-DD HH:MM:SS)": "ノートの終了日時(フォーマット: YYYY-MM-DD HH:MM:SS)",
|
||||
"Select a note type": "ノートタイプを選択",
|
||||
"Note body/content": "ノートの本文/コンテンツ",
|
||||
"Note mode - determines visibility scope": "ノートモード - 可視範囲を決定する",
|
||||
"Whether the time should be blocked": "時間をブロックするかどうか",
|
||||
"Select a provider (optional)": "プロバイダを選択 (オプション)",
|
||||
"Select a service (optional)": "サービスを選択 (オプション)",
|
||||
"Filter by booking creation date from (format: YYYY-MM-DD)": "予約作成日から (フォーマット: YYYY-MM-DD) でフィルター",
|
||||
"Filter by booking creation date to (format: YYYY-MM-DD)": "予約作成日から (形式: YYYY-MM-DD) でフィルター",
|
||||
"Filter by booking date from (format: YYYY-MM-DD)": "予約日時でフィルター (形式: YYYY-MM-DD)",
|
||||
"Filter by booking date to (format: YYYY-MM-DD)": "予約日時でフィルター (形式: YYYY-MM-DD)",
|
||||
"Filter by booking code": "予約コードでフィルター",
|
||||
"Filter by service ID": "サービスIDでフィルター",
|
||||
"Filter by service provider ID": "サービスプロバイダー ID でフィルター",
|
||||
"Filter by client ID": "クライアント ID でフィルター",
|
||||
"Filter by booking type": "予約タイプでフィルター",
|
||||
"Field to order results by (e.g., record_date)": "結果を順に並べるフィールド (例: record_date)",
|
||||
"Sort order direction": "並び替え順",
|
||||
"Array of columns to export (leave empty for all columns)": "エクスポートするカラムの配列 (すべてのカラムに対して空のままにします)",
|
||||
"Start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "開始日 (フォーマット: YYYY-MM-DD, 例: 2024-03-01)",
|
||||
"Start time (format: HH:MM:SS, e.g., 09:00:00)": "開始時刻(フォーマット: HH:MM:SS, 例えば, 09:00:00)",
|
||||
"End date (format: YYYY-MM-DD, e.g., 2024-03-31)": "終了日 (フォーマット: YYYY-MM-DD, 例: 2024-03-31)",
|
||||
"End time (format: HH:MM:SS, e.g., 18:00:00)": "終了時刻 (フォーマット: HH:MM:SS, 例: 18:00)",
|
||||
"Filter by creation date from (format: YYYY-MM-DD)": "作成日でフィルター (フォーマット: YYYY-MM-DD)",
|
||||
"Filter by creation date to (format: YYYY-MM-DD)": "作成日時でフィルター (フォーマット: YYYY-MM-DD)",
|
||||
"Get bookings for a specific service provider (optional)": "特定のサービスプロバイダの予約を取得します(オプション)",
|
||||
"Get bookings for a specific service (optional)": "特定のサービスの予約を取得します(オプション)",
|
||||
"Filter by confirmation status": "確認ステータスでフィルター",
|
||||
"Get bookings for a specific client (optional)": "特定のクライアントの予約を取得します(オプション)",
|
||||
"Sort order for results": "結果の並び順",
|
||||
"Filter by booking type (depends on Approve booking plugin status)": "予約タイプでフィルター(予約承認プラグインのステータスに応じて)",
|
||||
"Search by phone number, email address, or name. Leave empty to get all clients.": "電話番号、メールアドレス、または名前で検索します。すべてのクライアントを取得するには空白のままにします。",
|
||||
"Maximum number of clients to return. Leave empty for no limit.": "リターンするクライアントの最大数。無制限の場合は空のままにします。",
|
||||
"Page number in the list": "リスト内のページ番号",
|
||||
"Number of items per page": "ページあたりのアイテム数",
|
||||
"Filter by client (optional)": "クライアントでフィルター (オプション)",
|
||||
"Order/invoice date and time from (format: YYYY-MM-DD HH:MM:SS)": "注文/請求日時(形式:YYYY-MM-DD HH:MM:SS)",
|
||||
"Order/invoice date and time to (format: YYYY-MM-DD HH:MM:SS)": "注文/請求書の日付と時刻 (形式: YYYY-MM-DD HH:MM:SS)",
|
||||
"Order/invoice status": "注文/請求書のステータス",
|
||||
"All": "すべて",
|
||||
"Non-Cancelled": "キャンセルされていない",
|
||||
"Cancelled": "キャンセルしました",
|
||||
"Ascending": "昇順",
|
||||
"Descending": "降順",
|
||||
"Confirmed (1)": "確認済み (1)",
|
||||
"Not Confirmed (0)": "未確認 (0)",
|
||||
"Date Start (Descending)": "開始日(降順)",
|
||||
"Date Start (Ascending)": "開始日(昇順)",
|
||||
"Record Date": "日付を記録",
|
||||
"Non Cancelled": "Non Cancelled",
|
||||
"Cancelled by Client": "クライアントによってキャンセルされました",
|
||||
"Cancelled by Admin": "管理者によってキャンセルされました",
|
||||
"Non Approved Yet": "承認されていない",
|
||||
"Approved": "承認済み",
|
||||
"New Booking": "新規予約",
|
||||
"Booking Change": "予約変更",
|
||||
"Booking Cancellation": "予約のキャンセル",
|
||||
"New Client": "新規クライアント",
|
||||
"New Invoice": "新しい請求書",
|
||||
"New Offer": "新しいオファー",
|
||||
"Triggers when a new booking is created in SimplyBook.me": "SimplyBook.meで新しい予約が作成されたときにトリガーします",
|
||||
"Triggers when a booking is changed in SimplyBook.me": "SimplyBook.meで予約が変更されたときにトリガーします",
|
||||
"Triggers when a booking is canceled in SimplyBook.me": "SimplyBook.meで予約がキャンセルされたときにトリガーします",
|
||||
"Triggers when a new client is added (via booking or manually) in SimplyBook.me": "SimplyBook.meに(予約または手動で)新しいクライアントが追加されたときにトリガーします",
|
||||
"Triggers when a new invoice is generated/paid in SimplyBook.me (requires Accept Payments feature)": "SimplyBook.meで新しい請求書が生成/支払われたときに発生します (支払いを承認する必要があります)",
|
||||
"Triggers when a new offer (proposal or quote) is created (bookings with promo: false)": "新しいオファー(提案または見積もり)が作成されたときに発生します (プロモーション付きの予約: false)"
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"Company Login": "Bedrijfs login",
|
||||
"User Login": "Gebruiker login",
|
||||
"User Password": "Wachtwoord gebruiker",
|
||||
"Your Simplybook company login (e.g., \"yourcompany\" from yourcompany.simplybook.me)": "Uw Simplybook bedrijfs login (bijv. \"uwbedrijf\" van uwbedrijf.simplybook.me)",
|
||||
"Your admin user login associated with the company": "Uw inloggegevens voor beheerders die gekoppeld zijn aan het bedrijf",
|
||||
"Your admin user password": "Uw wachtwoord voor admin gebruiker",
|
||||
"Enter your Simplybook admin credentials to access the Admin API.": "Vul uw Simplybook admin gegevens in voor toegang tot de Admin API.",
|
||||
"Create Booking": "Maak boeking",
|
||||
"Set Booking Comment": "Zet reserveringsopmerking",
|
||||
"Add Client": "Klant toevoegen",
|
||||
"Create Note": "Notitie aanmaken",
|
||||
"Create Detailed Report": "Maak een gedetailleerd rapport",
|
||||
"Cancel Booking": "Boeking annuleren",
|
||||
"Delete Client": "Verwijder klant",
|
||||
"Get Bookings": "Boekingen krijgen",
|
||||
"Get Client List": "Clientlijst ophalen",
|
||||
"Find Invoice": "Factuur zoeken",
|
||||
"Create a new booking using the book API method. Returns appointment info or throws exception if time not available.": "Maak een nieuwe boeking met behulp van de boekAPI-methode. Geeft afspraak info of gooit uitzondering als de tijd niet beschikbaar is.",
|
||||
"Set a comment for a booking": "Stel een opmerking in voor een boeking",
|
||||
"Add a new client with specified data. Email, phone, or both may be required (check company settings).": "Voeg een nieuwe client met de opgegeven gegevens toe. E-mail, telefoon of beide zijn mogelijk vereist (controleer bedrijfsinstellingen).",
|
||||
"Create a note (generic) in the system": "Maak een notitie (algemeen) aan in het systeem",
|
||||
"Generate a detailed report (metrics, bookings, revenue)": "Genereer een gedetailleerd rapport (statistieken, boekingen, inkomsten)",
|
||||
"Cancel an existing booking. Returns true on success.": "Annuleer een bestaande boeking. Resultaat is waar.",
|
||||
"Delete an existing client": "Verwijder een bestaande client",
|
||||
"Returns list of bookings filtered by given parameters": "Retourneert een lijst van reserveringen die gefilterd zijn op bepaalde parameters",
|
||||
"Returns list of clients associated with company. Search by phone number, email address, or name.": "Retourneert een lijst van klanten die zijn gekoppeld aan het bedrijf. Zoek op telefoonnummer, e-mailadres, of naam.",
|
||||
"Find invoices with filters and pagination": "Facturen met filters en paginering zoeken",
|
||||
"Service": "Diensten",
|
||||
"Provider": "Leverancier",
|
||||
"Client": "Klant",
|
||||
"Start Date": "Start datum",
|
||||
"Start Time": "Starttijd",
|
||||
"End Date": "Eind datum",
|
||||
"End Time": "Eind Tijd",
|
||||
"Client Time Offset (seconds)": "Client tijdsverschuiving (seconden)",
|
||||
"Additional Fields": "Extra velden",
|
||||
"Count": "Aantal",
|
||||
"Batch ID": "Batch ID",
|
||||
"Recurring Data": "Terugkerende data",
|
||||
"Booking": "Boeking",
|
||||
"Comment": "Opmerking",
|
||||
"Name": "Naam",
|
||||
"Email": "E-mail",
|
||||
"Phone": "Telefoonnummer",
|
||||
"Address Line 1": "Adresregel 1",
|
||||
"Address Line 2": "Adresregel 2",
|
||||
"City": "Woonplaats",
|
||||
"ZIP Code": "Postcode code",
|
||||
"Country ID": "Land ID",
|
||||
"Start Date Time": "Startdatum tijd",
|
||||
"End Date Time": "Einddatum tijd",
|
||||
"Note Type": "Notitie type",
|
||||
"Note": "Notitie",
|
||||
"Mode": "Modus",
|
||||
"Time Blocked": "Tijd Geblokkeerd",
|
||||
"Created Date From": "Aangemaakt datum vanaf",
|
||||
"Created Date To": "Aangemaakt op",
|
||||
"Date From": "Datum vanaf",
|
||||
"Date To": "Datum tot",
|
||||
"Booking Code": "Boeking code",
|
||||
"Service ID": "Service ID",
|
||||
"Service Provider ID": "Service Provider ID",
|
||||
"Client ID": "Klant ID",
|
||||
"Booking Type": "Type boeking",
|
||||
"Order Field": "Bestelling veld",
|
||||
"Order Direction": "Order richting",
|
||||
"Export Columns": "Kolommen exporteren",
|
||||
"Time From": "Tijd vanaf",
|
||||
"Time To": "Tijd tot",
|
||||
"Is Confirmed": "Is bevestigd",
|
||||
"Order By": "Sorteer op",
|
||||
"Search String": "Zoek String",
|
||||
"Limit": "Limiet",
|
||||
"Page": "Pagina",
|
||||
"Items Per Page": "Items Per pagina",
|
||||
"Date Time From": "Datum tijd vanaf",
|
||||
"Date Time To": "Datum tot",
|
||||
"Status": "status",
|
||||
"Select a service": "Selecteer een service",
|
||||
"Select a service provider": "Selecteer een serviceprovider",
|
||||
"Select a client": "Selecteer een klant",
|
||||
"Booking start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Startdatum reservering (formaat: JJJJ-MM-DD, b.v. 2024-03-01)",
|
||||
"Booking start time (format: HH:MM:SS, e.g., 09:00:00). Must be multiple of company timeframe.": "Begintijd van de boeking (formaat: HH:MM:SS, b.v. 09:00:00). Moet een veelvoud aan bedrijfstijd zijn.",
|
||||
"Booking end date (format: YYYY-MM-DD, e.g., 2024-03-01). Should be later than start date.": "Einddatum reservering (formaat: JJJJ-MM-DD, b.v. 2024-03-01). Moet later zijn dan begindatum.",
|
||||
"Booking end time (format: HH:MM:SS, e.g., 10:00:00). Should be later than start time.": "Eindtijd reservering (formaat: HH:MM:SS, b.v. 10:00:00). Moet later zijn dan de starttijd.",
|
||||
"Difference between company and client time zone in seconds (e.g., -3600 for GMT+3 client with GMT+2 company)": "Verschil tussen bedrijf en klant tijdzone in seconden (bijv. -3600 voor GMT+3 client met GMT+2 bedrijf)",
|
||||
"Additional params and fields as object (e.g., {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Use for promo codes, location ID, intake forms.": "Extra parameters en velden als object (bijv. {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Gebruik voor promocodes, locatie ID, inname formulieren.",
|
||||
"Number of bookings for group booking batch (min. 1). Cannot be used with Batch ID.": "Aantal reserveringen voor groepsreservering (min. 1). Kan niet worden gebruikt met batchID.",
|
||||
"Add booking to existing group bookings batch. Cannot be used with Count > 1.": "Voeg reservering toe aan bestaande groepreserveringsbatch. Kan niet worden gebruikt met Count > 1.",
|
||||
"Make booking recurrent (optional, array format)": "Maak boeking periodiek (optioneel, array formaat)",
|
||||
"Select a booking": "Selecteer een boeking",
|
||||
"The comment text to set for the booking": "De reactietekst om in te stellen voor de boeking",
|
||||
"Client name": "Klant naam",
|
||||
"Client email address": "Klant e-mailadres",
|
||||
"Client phone number (e.g., +1502-810-4521)": "Telefoonnummer van cliënt (bijv. +1502-810-4521)",
|
||||
"Client address line 1": "Klant adres lijn 1",
|
||||
"Client address line 2": "Klant adres lijn 2",
|
||||
"Client city": "Plaats klant",
|
||||
"Client ZIP/postal code": "Postcode van klant",
|
||||
"Client country ID": "Klant landnummer",
|
||||
"Note start date and time (format: YYYY-MM-DD HH:MM:SS)": "Begindatum en tijd notitie (formaat: JJJJ-MM-DD HHH:MM:SS)",
|
||||
"Note end date and time (format: YYYY-MM-DD HH:MM:SS)": "Einddatum en tijd notitie (formaat: JJJJ-MM-DD UU:MM:SS)",
|
||||
"Select a note type": "Selecteer een notitietype",
|
||||
"Note body/content": "Notitie body/inhoud",
|
||||
"Note mode - determines visibility scope": "Notitiemodus - bepaalt zichtbaarheid",
|
||||
"Whether the time should be blocked": "Of de tijd geblokkeerd moet worden",
|
||||
"Select a provider (optional)": "Selecteer een provider (optioneel)",
|
||||
"Select a service (optional)": "Selecteer een service (optioneel)",
|
||||
"Filter by booking creation date from (format: YYYY-MM-DD)": "Filter op aanmaakdatum vanaf (formaat: JJJJ-MM-DD)",
|
||||
"Filter by booking creation date to (format: YYYY-MM-DD)": "Filter op aanmaakdatum naar formaat (JJJJ-MM-DD)",
|
||||
"Filter by booking date from (format: YYYY-MM-DD)": "Filter op boekingsdatum vanaf (formaat: JJJJ-MM-DD)",
|
||||
"Filter by booking date to (format: YYYY-MM-DD)": "Filter op boekingsdatum naar (formaat: JJJJ-MM-DD)",
|
||||
"Filter by booking code": "Filter op reserveringscode",
|
||||
"Filter by service ID": "Filter op service ID",
|
||||
"Filter by service provider ID": "Filter op ID van serviceprovider",
|
||||
"Filter by client ID": "Filter op client-ID",
|
||||
"Filter by booking type": "Filter op boeking type",
|
||||
"Field to order results by (e.g., record_date)": "Veld om de resultaten te sorteren met (bijv. record_date)",
|
||||
"Sort order direction": "Sorteer volgorde",
|
||||
"Array of columns to export (leave empty for all columns)": "Reeks van kolommen om te exporteren (leeg laten voor alle kolommen)",
|
||||
"Start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Startdatum (formaat: YYYY-MM-DD, b.v. 2024-03-01)",
|
||||
"Start time (format: HH:MM:SS, e.g., 09:00:00)": "Starttijd (formaat: HH:MM:SS, b.v. 09:00:00)",
|
||||
"End date (format: YYYY-MM-DD, e.g., 2024-03-31)": "Einddatum (formaat: YYYY-MM-DD, b.v. 2024-03-31)",
|
||||
"End time (format: HH:MM:SS, e.g., 18:00:00)": "Eindtijd (format: HH:MM:SS, b.v. 18:00:00)",
|
||||
"Filter by creation date from (format: YYYY-MM-DD)": "Filter op aanmaakdatum op (formaat: JJJJ-MM-DD)",
|
||||
"Filter by creation date to (format: YYYY-MM-DD)": "Filter op aanmaakdatum op (formaat: JJJJ-MM-DD)",
|
||||
"Get bookings for a specific service provider (optional)": "Boekingen ophalen voor een specifieke serviceprovider (optioneel)",
|
||||
"Get bookings for a specific service (optional)": "Boekingen ophalen voor een specifieke service (optioneel)",
|
||||
"Filter by confirmation status": "Filter op bevestigingsstatus",
|
||||
"Get bookings for a specific client (optional)": "Boekingen ophalen voor een specifieke client (optioneel)",
|
||||
"Sort order for results": "Sorteer volgorde voor resultaten",
|
||||
"Filter by booking type (depends on Approve booking plugin status)": "Filter per boekingstype (afhankelijk van goedkeuring van de boeking plugin status)",
|
||||
"Search by phone number, email address, or name. Leave empty to get all clients.": "Zoeken op telefoonnummer, e-mailadres of naam. Laat leeg om alle clients te krijgen.",
|
||||
"Maximum number of clients to return. Leave empty for no limit.": "Maximum aantal klanten om terug te sturen. Laat leeg voor geen limiet.",
|
||||
"Page number in the list": "Paginanummer in de lijst",
|
||||
"Number of items per page": "Aantal items per pagina",
|
||||
"Filter by client (optional)": "Filter op klant (optioneel)",
|
||||
"Order/invoice date and time from (format: YYYY-MM-DD HH:MM:SS)": "Order/factuur datum en tijd vanaf (formaat: JJJJJ-MM-DD HH:MM:SS)",
|
||||
"Order/invoice date and time to (format: YYYY-MM-DD HH:MM:SS)": "Order/factuur datum en tijd naar (formaat: JJJJJ-MM-DD HH:MM:SS)",
|
||||
"Order/invoice status": "Status bestelling/factuur",
|
||||
"All": "Allemaal",
|
||||
"Non-Cancelled": "Niet-Geannuleerd",
|
||||
"Cancelled": "Geannuleerd",
|
||||
"Ascending": "Oplopend",
|
||||
"Descending": "Aflopend",
|
||||
"Confirmed (1)": "Bevestigd (1)",
|
||||
"Not Confirmed (0)": "Niet bevestigd (0)",
|
||||
"Date Start (Descending)": "Datum start (aflopend)",
|
||||
"Date Start (Ascending)": "Startdatum (scending)",
|
||||
"Record Date": "Record datum",
|
||||
"Non Cancelled": "Non Cancelled",
|
||||
"Cancelled by Client": "Geannuleerd door cliënt",
|
||||
"Cancelled by Admin": "Geannuleerd door Admin",
|
||||
"Non Approved Yet": "Nog niet goedgekeurd",
|
||||
"Approved": "Goedgekeurd",
|
||||
"New Booking": "Nieuwe boeking",
|
||||
"Booking Change": "Wijziging reservering",
|
||||
"Booking Cancellation": "Annulering van reservering",
|
||||
"New Client": "Nieuwe klant",
|
||||
"New Invoice": "Nieuwe factuur",
|
||||
"New Offer": "Nieuwe aanbieding",
|
||||
"Triggers when a new booking is created in SimplyBook.me": "Triggert wanneer een nieuwe boeking is gemaakt in SimplyBook.me",
|
||||
"Triggers when a booking is changed in SimplyBook.me": "Triggert wanneer een boeking wordt gewijzigd in SimplyBook.me",
|
||||
"Triggers when a booking is canceled in SimplyBook.me": "Triggert wanneer een boeking wordt geannuleerd in SimplyBook.me",
|
||||
"Triggers when a new client is added (via booking or manually) in SimplyBook.me": "Triggert wanneer een nieuwe klant wordt toegevoegd (via boeking of handmatig) in SimplyBook.me",
|
||||
"Triggers when a new invoice is generated/paid in SimplyBook.me (requires Accept Payments feature)": "Triggers wanneer een nieuwe factuur wordt gegenereerd/betaald in SimplyBook.me (vereist Accept Payments functie)",
|
||||
"Triggers when a new offer (proposal or quote) is created (bookings with promo: false)": "Wordt uitgevoerd wanneer een nieuwe aanbieding (voorstel of offerte) is gemaakt (reserveringen met promo: false)"
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"Company Login": "Login da empresa",
|
||||
"User Login": "Login de Usuário",
|
||||
"User Password": "Senha do usuário",
|
||||
"Your Simplybook company login (e.g., \"yourcompany\" from yourcompany.simplybook.me)": "Seu login na Simplybook empresa (por exemplo, \"suaempresa\" de sua empresa.simplybook.me)",
|
||||
"Your admin user login associated with the company": "Seu login de usuário administrador associado à empresa",
|
||||
"Your admin user password": "Sua senha de usuário administrador",
|
||||
"Enter your Simplybook admin credentials to access the Admin API.": "Insira suas credenciais de administrador do Simplybook para acessar a API do Admin.",
|
||||
"Create Booking": "Criar Reserva",
|
||||
"Set Booking Comment": "Definir comentário de reserva",
|
||||
"Add Client": "Adicionar Cliente",
|
||||
"Create Note": "Criar Nota",
|
||||
"Create Detailed Report": "Criar relatório detalhado",
|
||||
"Cancel Booking": "Cancelar Reserva",
|
||||
"Delete Client": "Excluir Cliente",
|
||||
"Get Bookings": "Obter reservas",
|
||||
"Get Client List": "Obter lista de clientes",
|
||||
"Find Invoice": "Encontrar fatura",
|
||||
"Create a new booking using the book API method. Returns appointment info or throws exception if time not available.": "Crie uma nova reserva usando o método de API. Retorna informações de compromisso ou lança exceções se o tempo não estiver disponível.",
|
||||
"Set a comment for a booking": "Definir um comentário para um pedido",
|
||||
"Add a new client with specified data. Email, phone, or both may be required (check company settings).": "Adicionar um novo cliente com dados especificados. E-mail, telefone ou ambos podem ser necessários (verifique as configurações da empresa).",
|
||||
"Create a note (generic) in the system": "Criar uma nota (genérica) no sistema",
|
||||
"Generate a detailed report (metrics, bookings, revenue)": "Gerar um relatório detalhado (métricas, reservas, receita)",
|
||||
"Cancel an existing booking. Returns true on success.": "Cancele uma reserva existente. Retorna verdadeiro em caso de sucesso.",
|
||||
"Delete an existing client": "Apagar um cliente existente",
|
||||
"Returns list of bookings filtered by given parameters": "Retorna lista de reservas filtradas por determinados parâmetros",
|
||||
"Returns list of clients associated with company. Search by phone number, email address, or name.": "Retorna lista de clientes associados com a empresa. Pesquise por número de telefone, endereço de e-mail ou nome.",
|
||||
"Find invoices with filters and pagination": "Encontrar faturas com filtros e paginação",
|
||||
"Service": "Serviço",
|
||||
"Provider": "Fornecedor",
|
||||
"Client": "Cliente",
|
||||
"Start Date": "Data Inicial",
|
||||
"Start Time": "Hora de início",
|
||||
"End Date": "Data de Término",
|
||||
"End Time": "Hora de término",
|
||||
"Client Time Offset (seconds)": "Tempo de deslocamento do cliente (segundos)",
|
||||
"Additional Fields": "Campos adicionais",
|
||||
"Count": "Contagem",
|
||||
"Batch ID": "ID do Lote",
|
||||
"Recurring Data": "Dados Recorrentes",
|
||||
"Booking": "Reserva",
|
||||
"Comment": "Comentar",
|
||||
"Name": "Nome",
|
||||
"Email": "e-mail",
|
||||
"Phone": "Smartphone",
|
||||
"Address Line 1": "Linha de Endereço 1",
|
||||
"Address Line 2": "Linha de Endereço 2",
|
||||
"City": "cidade",
|
||||
"ZIP Code": "Código Postal",
|
||||
"Country ID": "ID do País",
|
||||
"Start Date Time": "Data de Início",
|
||||
"End Date Time": "Data de término",
|
||||
"Note Type": "Tipo de Nota",
|
||||
"Note": "Observação",
|
||||
"Mode": "Modo",
|
||||
"Time Blocked": "Tempo Bloqueado",
|
||||
"Created Date From": "Data de Criação De",
|
||||
"Created Date To": "Data de criação",
|
||||
"Date From": "Data de origem",
|
||||
"Date To": "Data Final",
|
||||
"Booking Code": "Código de reserva",
|
||||
"Service ID": "Serviço ID",
|
||||
"Service Provider ID": "ID do Provedor",
|
||||
"Client ID": "ID do Cliente",
|
||||
"Booking Type": "Tipo de reserva",
|
||||
"Order Field": "Campo Pedido",
|
||||
"Order Direction": "Direção da ordem",
|
||||
"Export Columns": "Exportar colunas",
|
||||
"Time From": "Tempo de origem",
|
||||
"Time To": "Tempo até",
|
||||
"Is Confirmed": "Está Confirmado",
|
||||
"Order By": "Ordenar Por",
|
||||
"Search String": "Caracteres de Pesquisa",
|
||||
"Limit": "Limitar",
|
||||
"Page": "Página",
|
||||
"Items Per Page": "Itens por página",
|
||||
"Date Time From": "Data e hora de",
|
||||
"Date Time To": "Data e Hora Para",
|
||||
"Status": "Estado",
|
||||
"Select a service": "Selecione um serviço",
|
||||
"Select a service provider": "Selecione um provedor de serviços",
|
||||
"Select a client": "Selecione um cliente",
|
||||
"Booking start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Data de início da reserva (formato: YYYY-MM-DD, ex.: 2024-03-01)",
|
||||
"Booking start time (format: HH:MM:SS, e.g., 09:00:00). Must be multiple of company timeframe.": "Hora inicial da reserva (formato: HH:MM:SS, por exemplo, 09:00:00). Deve ser múltiplo do período da empresa.",
|
||||
"Booking end date (format: YYYY-MM-DD, e.g., 2024-03-01). Should be later than start date.": "Data final da reserva (formato: AAAA-MM-DD, por exemplo, 2024-03-01). Deve ser posterior à data de início.",
|
||||
"Booking end time (format: HH:MM:SS, e.g., 10:00:00). Should be later than start time.": "Hora final da reserva (formato: HH:MM:SS, por exemplo, 10:00:00). Deve ser posterior à hora de início.",
|
||||
"Difference between company and client time zone in seconds (e.g., -3600 for GMT+3 client with GMT+2 company)": "Diferença entre o fuso horário da empresa e do cliente em segundos (por exemplo, -3600 para GMT+3 cliente com empresa GMT+2)",
|
||||
"Additional params and fields as object (e.g., {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Use for promo codes, location ID, intake forms.": "Parâmetros adicionais e campos como objeto (ex.: {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Use para códigos promocionais, ID local, inserir formulários.",
|
||||
"Number of bookings for group booking batch (min. 1). Cannot be used with Batch ID.": "Número de reservas para lote de reserva em grupo (min. 1). Não pode ser usado com ID em lote.",
|
||||
"Add booking to existing group bookings batch. Cannot be used with Count > 1.": "Adicionar reserva ao lote de reservas de grupo existente. Não pode ser usado na contagem > 1.",
|
||||
"Make booking recurrent (optional, array format)": "Fazer reserva recorrente (opcional, formato de matriz)",
|
||||
"Select a booking": "Selecione uma reserva",
|
||||
"The comment text to set for the booking": "O texto de comentário a ser definido para o pedido",
|
||||
"Client name": "Nome do Cliente",
|
||||
"Client email address": "E-mail do cliente",
|
||||
"Client phone number (e.g., +1502-810-4521)": "Número de telefone cliente (por exemplo, +1502-810-4521)",
|
||||
"Client address line 1": "Linha de endereço do cliente 1",
|
||||
"Client address line 2": "Linha de endereço do cliente 2",
|
||||
"Client city": "Cidade do cliente",
|
||||
"Client ZIP/postal code": "CEP do cliente",
|
||||
"Client country ID": "Cliente ID País",
|
||||
"Note start date and time (format: YYYY-MM-DD HH:MM:SS)": "Nota de início e hora (formato: AAAA-MM-DD HH:MM:SS)",
|
||||
"Note end date and time (format: YYYY-MM-DD HH:MM:SS)": "Data e hora de término da nota (formato: AAAA-MM-DD HH:MM:SS)",
|
||||
"Select a note type": "Selecione um tipo de nota",
|
||||
"Note body/content": "Corpo da nota/conteúdo",
|
||||
"Note mode - determines visibility scope": "Modo de nota - determina o escopo de visibilidade",
|
||||
"Whether the time should be blocked": "Se o tempo deve ser bloqueado",
|
||||
"Select a provider (optional)": "Selecione um provedor (opcional)",
|
||||
"Select a service (optional)": "Selecione um serviço (opcional)",
|
||||
"Filter by booking creation date from (format: YYYY-MM-DD)": "Filtrar pela data de criação de reserva de (formato: AAAA-MM-DD)",
|
||||
"Filter by booking creation date to (format: YYYY-MM-DD)": "Filtrar por data de criação de reserva em (formato: AAAA-MM-DD)",
|
||||
"Filter by booking date from (format: YYYY-MM-DD)": "Filtrar pela data de reserva de (formato: AAAA-MM-DD)",
|
||||
"Filter by booking date to (format: YYYY-MM-DD)": "Filtrar pela data de reserva em (formato: AAAA-MM-DD)",
|
||||
"Filter by booking code": "Filtrar por código de reserva",
|
||||
"Filter by service ID": "Filtrar por ID de serviço",
|
||||
"Filter by service provider ID": "Filtrar por ID do provedor de serviço",
|
||||
"Filter by client ID": "Filtrar por ID de Cliente",
|
||||
"Filter by booking type": "Filtrar por tipo de reserva",
|
||||
"Field to order results by (e.g., record_date)": "Campo para ordenar os resultados por (ex: data de registro)",
|
||||
"Sort order direction": "Ordem de classificação",
|
||||
"Array of columns to export (leave empty for all columns)": "Array de colunas a exportar (deixe vazio para todas as colunas)",
|
||||
"Start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Data de início (formato: AAAA-MM-DD, por exemplo, 2024-03-01)",
|
||||
"Start time (format: HH:MM:SS, e.g., 09:00:00)": "Hora de início (formato: HH:MM:SS, por exemplo, 09:00:00)",
|
||||
"End date (format: YYYY-MM-DD, e.g., 2024-03-31)": "Data final (formato: AAAA-MM-DD, por exemplo, 2024-03-31)",
|
||||
"End time (format: HH:MM:SS, e.g., 18:00:00)": "Hora de término (formato: HH:MM:SS, por exemplo, 18:00:00)",
|
||||
"Filter by creation date from (format: YYYY-MM-DD)": "Filtrar por data de criação de (formato: AAAA-MM-DD)",
|
||||
"Filter by creation date to (format: YYYY-MM-DD)": "Filtrar por data de criação para (formato: AAAA-MM-DD)",
|
||||
"Get bookings for a specific service provider (optional)": "Obtenha reservas para um provedor de serviços específico (opcional)",
|
||||
"Get bookings for a specific service (optional)": "Obtenha reservas para um serviço específico (opcional)",
|
||||
"Filter by confirmation status": "Filtrar por estado de confirmação",
|
||||
"Get bookings for a specific client (optional)": "Obter reservas para um cliente específico (opcional)",
|
||||
"Sort order for results": "Ordem de classificação para resultados",
|
||||
"Filter by booking type (depends on Approve booking plugin status)": "Filtrar por tipo de reserva (depende do status do plugin de reserva aprovado)",
|
||||
"Search by phone number, email address, or name. Leave empty to get all clients.": "Pesquisar por número de telefone, endereço de e-mail ou nome. Deixe em branco para obter todos os clientes.",
|
||||
"Maximum number of clients to return. Leave empty for no limit.": "Número máximo de clientes a retornar . Deixe em branco para não ter limite.",
|
||||
"Page number in the list": "Número da página na lista",
|
||||
"Number of items per page": "Número de itens por página",
|
||||
"Filter by client (optional)": "Filtrar por cliente (opcional)",
|
||||
"Order/invoice date and time from (format: YYYY-MM-DD HH:MM:SS)": "Data e hora da fatura de (formato: AAAA-MM-DD HH:MM:SS)",
|
||||
"Order/invoice date and time to (format: YYYY-MM-DD HH:MM:SS)": "Data e hora da fatura para (formato: AAAA-MM-DD HH:MM:SS)",
|
||||
"Order/invoice status": "Status do pedido/fatura",
|
||||
"All": "TODOS",
|
||||
"Non-Cancelled": "Não-Cancelado",
|
||||
"Cancelled": "Cancelado",
|
||||
"Ascending": "Crescente",
|
||||
"Descending": "Decrescente",
|
||||
"Confirmed (1)": "Confirmado (1)",
|
||||
"Not Confirmed (0)": "Não Confirmado (0)",
|
||||
"Date Start (Descending)": "Data de início (decrescente)",
|
||||
"Date Start (Ascending)": "Data de início (ascendente)",
|
||||
"Record Date": "Data de registro",
|
||||
"Non Cancelled": "Non Cancelled",
|
||||
"Cancelled by Client": "Cancelado pelo cliente",
|
||||
"Cancelled by Admin": "Cancelado pelo Administrador",
|
||||
"Non Approved Yet": "Não Aprovado Ainda",
|
||||
"Approved": "Aceito",
|
||||
"New Booking": "Nova Reserva",
|
||||
"Booking Change": "Alteração de reserva",
|
||||
"Booking Cancellation": "Cancelamento de Reserva",
|
||||
"New Client": "Novo Cliente",
|
||||
"New Invoice": "Nova fatura",
|
||||
"New Offer": "Nova oferta",
|
||||
"Triggers when a new booking is created in SimplyBook.me": "Aciona quando uma nova reserva é criada em SimplyBook.me",
|
||||
"Triggers when a booking is changed in SimplyBook.me": "Aciona quando uma reserva é alterada no SimplyBook.me",
|
||||
"Triggers when a booking is canceled in SimplyBook.me": "Aciona quando uma reserva é cancelada no SimplyBook.me",
|
||||
"Triggers when a new client is added (via booking or manually) in SimplyBook.me": "Aciona quando um novo cliente é adicionado (via reserva ou manualmente) em SimplyBook.me",
|
||||
"Triggers when a new invoice is generated/paid in SimplyBook.me (requires Accept Payments feature)": "Aciona quando uma nova fatura é gerada/paga no SimplyBook.me (requer Recurso de Aceite Pagamentos)",
|
||||
"Triggers when a new offer (proposal or quote) is created (bookings with promo: false)": "Aciona quando uma nova oferta (proposta ou citação) é criada (reservas com promoção: falso)"
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"Company Login": "Company Login",
|
||||
"User Login": "User Login",
|
||||
"User Password": "User Password",
|
||||
"Your Simplybook company login (e.g., \"yourcompany\" from yourcompany.simplybook.me)": "Your Simplybook company login (e.g., \"yourcompany\" from yourcompany.simplybook.me)",
|
||||
"Your admin user login associated with the company": "Your admin user login associated with the company",
|
||||
"Your admin user password": "Your admin user password",
|
||||
"Enter your Simplybook admin credentials to access the Admin API.": "Enter your Simplybook admin credentials to access the Admin API.",
|
||||
"Create Booking": "Create Booking",
|
||||
"Set Booking Comment": "Set Booking Comment",
|
||||
"Add Client": "Add Client",
|
||||
"Create Note": "Create Note",
|
||||
"Create Detailed Report": "Create Detailed Report",
|
||||
"Cancel Booking": "Cancel Booking",
|
||||
"Delete Client": "Delete Client",
|
||||
"Get Bookings": "Get Bookings",
|
||||
"Get Client List": "Get Client List",
|
||||
"Find Invoice": "Find Invoice",
|
||||
"Create a new booking using the book API method. Returns appointment info or throws exception if time not available.": "Create a new booking using the book API method. Returns appointment info or throws exception if time not available.",
|
||||
"Set a comment for a booking": "Set a comment for a booking",
|
||||
"Add a new client with specified data. Email, phone, or both may be required (check company settings).": "Add a new client with specified data. Email, phone, or both may be required (check company settings).",
|
||||
"Create a note (generic) in the system": "Create a note (generic) in the system",
|
||||
"Generate a detailed report (metrics, bookings, revenue)": "Generate a detailed report (metrics, bookings, revenue)",
|
||||
"Cancel an existing booking. Returns true on success.": "Cancel an existing booking. Returns true on success.",
|
||||
"Delete an existing client": "Delete an existing client",
|
||||
"Returns list of bookings filtered by given parameters": "Returns list of bookings filtered by given parameters",
|
||||
"Returns list of clients associated with company. Search by phone number, email address, or name.": "Returns list of clients associated with company. Search by phone number, email address, or name.",
|
||||
"Find invoices with filters and pagination": "Find invoices with filters and pagination",
|
||||
"Service": "Service",
|
||||
"Provider": "Provider",
|
||||
"Client": "Client",
|
||||
"Start Date": "Start Date",
|
||||
"Start Time": "Start Time",
|
||||
"End Date": "End Date",
|
||||
"End Time": "End Time",
|
||||
"Client Time Offset (seconds)": "Client Time Offset (seconds)",
|
||||
"Additional Fields": "Additional Fields",
|
||||
"Count": "Count",
|
||||
"Batch ID": "Batch ID",
|
||||
"Recurring Data": "Recurring Data",
|
||||
"Booking": "Booking",
|
||||
"Comment": "Comment",
|
||||
"Name": "Name",
|
||||
"Email": "Email",
|
||||
"Phone": "Phone",
|
||||
"Address Line 1": "Address Line 1",
|
||||
"Address Line 2": "Address Line 2",
|
||||
"City": "City",
|
||||
"ZIP Code": "ZIP Code",
|
||||
"Country ID": "Country ID",
|
||||
"Start Date Time": "Start Date Time",
|
||||
"End Date Time": "End Date Time",
|
||||
"Note Type": "Note Type",
|
||||
"Note": "Note",
|
||||
"Mode": "Mode",
|
||||
"Time Blocked": "Time Blocked",
|
||||
"Created Date From": "Created Date From",
|
||||
"Created Date To": "Created Date To",
|
||||
"Date From": "Date From",
|
||||
"Date To": "Date To",
|
||||
"Booking Code": "Booking Code",
|
||||
"Service ID": "Service ID",
|
||||
"Service Provider ID": "Service Provider ID",
|
||||
"Client ID": "Client ID",
|
||||
"Booking Type": "Booking Type",
|
||||
"Order Field": "Order Field",
|
||||
"Order Direction": "Order Direction",
|
||||
"Export Columns": "Export Columns",
|
||||
"Time From": "Time From",
|
||||
"Time To": "Time To",
|
||||
"Is Confirmed": "Is Confirmed",
|
||||
"Order By": "Order By",
|
||||
"Search String": "Search String",
|
||||
"Limit": "Limit",
|
||||
"Page": "Page",
|
||||
"Items Per Page": "Items Per Page",
|
||||
"Date Time From": "Date Time From",
|
||||
"Date Time To": "Date Time To",
|
||||
"Status": "Status",
|
||||
"Select a service": "Select a service",
|
||||
"Select a service provider": "Select a service provider",
|
||||
"Select a client": "Select a client",
|
||||
"Booking start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Booking start date (format: YYYY-MM-DD, e.g., 2024-03-01)",
|
||||
"Booking start time (format: HH:MM:SS, e.g., 09:00:00). Must be multiple of company timeframe.": "Booking start time (format: HH:MM:SS, e.g., 09:00:00). Must be multiple of company timeframe.",
|
||||
"Booking end date (format: YYYY-MM-DD, e.g., 2024-03-01). Should be later than start date.": "Booking end date (format: YYYY-MM-DD, e.g., 2024-03-01). Should be later than start date.",
|
||||
"Booking end time (format: HH:MM:SS, e.g., 10:00:00). Should be later than start time.": "Booking end time (format: HH:MM:SS, e.g., 10:00:00). Should be later than start time.",
|
||||
"Difference between company and client time zone in seconds (e.g., -3600 for GMT+3 client with GMT+2 company)": "Difference between company and client time zone in seconds (e.g., -3600 for GMT+3 client with GMT+2 company)",
|
||||
"Additional params and fields as object (e.g., {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Use for promo codes, location ID, intake forms.": "Additional params and fields as object (e.g., {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Use for promo codes, location ID, intake forms.",
|
||||
"Number of bookings for group booking batch (min. 1). Cannot be used with Batch ID.": "Number of bookings for group booking batch (min. 1). Cannot be used with Batch ID.",
|
||||
"Add booking to existing group bookings batch. Cannot be used with Count > 1.": "Add booking to existing group bookings batch. Cannot be used with Count > 1.",
|
||||
"Make booking recurrent (optional, array format)": "Make booking recurrent (optional, array format)",
|
||||
"Select a booking": "Select a booking",
|
||||
"The comment text to set for the booking": "The comment text to set for the booking",
|
||||
"Client name": "Client name",
|
||||
"Client email address": "Client email address",
|
||||
"Client phone number (e.g., +1502-810-4521)": "Client phone number (e.g., +1502-810-4521)",
|
||||
"Client address line 1": "Client address line 1",
|
||||
"Client address line 2": "Client address line 2",
|
||||
"Client city": "Client city",
|
||||
"Client ZIP/postal code": "Client ZIP/postal code",
|
||||
"Client country ID": "Client country ID",
|
||||
"Note start date and time (format: YYYY-MM-DD HH:MM:SS)": "Note start date and time (format: YYYY-MM-DD HH:MM:SS)",
|
||||
"Note end date and time (format: YYYY-MM-DD HH:MM:SS)": "Note end date and time (format: YYYY-MM-DD HH:MM:SS)",
|
||||
"Select a note type": "Select a note type",
|
||||
"Note body/content": "Note body/content",
|
||||
"Note mode - determines visibility scope": "Note mode - determines visibility scope",
|
||||
"Whether the time should be blocked": "Whether the time should be blocked",
|
||||
"Select a provider (optional)": "Select a provider (optional)",
|
||||
"Select a service (optional)": "Select a service (optional)",
|
||||
"Filter by booking creation date from (format: YYYY-MM-DD)": "Filter by booking creation date from (format: YYYY-MM-DD)",
|
||||
"Filter by booking creation date to (format: YYYY-MM-DD)": "Filter by booking creation date to (format: YYYY-MM-DD)",
|
||||
"Filter by booking date from (format: YYYY-MM-DD)": "Filter by booking date from (format: YYYY-MM-DD)",
|
||||
"Filter by booking date to (format: YYYY-MM-DD)": "Filter by booking date to (format: YYYY-MM-DD)",
|
||||
"Filter by booking code": "Filter by booking code",
|
||||
"Filter by service ID": "Filter by service ID",
|
||||
"Filter by service provider ID": "Filter by service provider ID",
|
||||
"Filter by client ID": "Filter by client ID",
|
||||
"Filter by booking type": "Filter by booking type",
|
||||
"Field to order results by (e.g., record_date)": "Field to order results by (e.g., record_date)",
|
||||
"Sort order direction": "Sort order direction",
|
||||
"Array of columns to export (leave empty for all columns)": "Array of columns to export (leave empty for all columns)",
|
||||
"Start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Start date (format: YYYY-MM-DD, e.g., 2024-03-01)",
|
||||
"Start time (format: HH:MM:SS, e.g., 09:00:00)": "Start time (format: HH:MM:SS, e.g., 09:00:00)",
|
||||
"End date (format: YYYY-MM-DD, e.g., 2024-03-31)": "End date (format: YYYY-MM-DD, e.g., 2024-03-31)",
|
||||
"End time (format: HH:MM:SS, e.g., 18:00:00)": "End time (format: HH:MM:SS, e.g., 18:00:00)",
|
||||
"Filter by creation date from (format: YYYY-MM-DD)": "Filter by creation date from (format: YYYY-MM-DD)",
|
||||
"Filter by creation date to (format: YYYY-MM-DD)": "Filter by creation date to (format: YYYY-MM-DD)",
|
||||
"Get bookings for a specific service provider (optional)": "Get bookings for a specific service provider (optional)",
|
||||
"Get bookings for a specific service (optional)": "Get bookings for a specific service (optional)",
|
||||
"Filter by confirmation status": "Filter by confirmation status",
|
||||
"Get bookings for a specific client (optional)": "Get bookings for a specific client (optional)",
|
||||
"Sort order for results": "Sort order for results",
|
||||
"Filter by booking type (depends on Approve booking plugin status)": "Filter by booking type (depends on Approve booking plugin status)",
|
||||
"Search by phone number, email address, or name. Leave empty to get all clients.": "Search by phone number, email address, or name. Leave empty to get all clients.",
|
||||
"Maximum number of clients to return. Leave empty for no limit.": "Maximum number of clients to return. Leave empty for no limit.",
|
||||
"Page number in the list": "Page number in the list",
|
||||
"Number of items per page": "Number of items per page",
|
||||
"Filter by client (optional)": "Filter by client (optional)",
|
||||
"Order/invoice date and time from (format: YYYY-MM-DD HH:MM:SS)": "Order/invoice date and time from (format: YYYY-MM-DD HH:MM:SS)",
|
||||
"Order/invoice date and time to (format: YYYY-MM-DD HH:MM:SS)": "Order/invoice date and time to (format: YYYY-MM-DD HH:MM:SS)",
|
||||
"Order/invoice status": "Order/invoice status",
|
||||
"All": "All",
|
||||
"Non-Cancelled": "Non-Cancelled",
|
||||
"Cancelled": "Cancelled",
|
||||
"Ascending": "Ascending",
|
||||
"Descending": "Descending",
|
||||
"Confirmed (1)": "Confirmed (1)",
|
||||
"Not Confirmed (0)": "Not Confirmed (0)",
|
||||
"Date Start (Descending)": "Date Start (Descending)",
|
||||
"Date Start (Ascending)": "Date Start (Ascending)",
|
||||
"Record Date": "Record Date",
|
||||
"Non Cancelled": "Non Cancelled",
|
||||
"Cancelled by Client": "Cancelled by Client",
|
||||
"Cancelled by Admin": "Cancelled by Admin",
|
||||
"Non Approved Yet": "Non Approved Yet",
|
||||
"Approved": "Approved",
|
||||
"New Booking": "New Booking",
|
||||
"Booking Change": "Booking Change",
|
||||
"Booking Cancellation": "Booking Cancellation",
|
||||
"New Client": "New Client",
|
||||
"New Invoice": "New Invoice",
|
||||
"New Offer": "New Offer",
|
||||
"Triggers when a new booking is created in SimplyBook.me": "Triggers when a new booking is created in SimplyBook.me",
|
||||
"Triggers when a booking is changed in SimplyBook.me": "Triggers when a booking is changed in SimplyBook.me",
|
||||
"Triggers when a booking is canceled in SimplyBook.me": "Triggers when a booking is canceled in SimplyBook.me",
|
||||
"Triggers when a new client is added (via booking or manually) in SimplyBook.me": "Triggers when a new client is added (via booking or manually) in SimplyBook.me",
|
||||
"Triggers when a new invoice is generated/paid in SimplyBook.me (requires Accept Payments feature)": "Triggers when a new invoice is generated/paid in SimplyBook.me (requires Accept Payments feature)",
|
||||
"Triggers when a new offer (proposal or quote) is created (bookings with promo: false)": "Triggers when a new offer (proposal or quote) is created (bookings with promo: false)"
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"Company Login": "Company Login",
|
||||
"User Login": "User Login",
|
||||
"User Password": "User Password",
|
||||
"Your Simplybook company login (e.g., \"yourcompany\" from yourcompany.simplybook.me)": "Your Simplybook company login (e.g., \"yourcompany\" from yourcompany.simplybook.me)",
|
||||
"Your admin user login associated with the company": "Your admin user login associated with the company",
|
||||
"Your admin user password": "Your admin user password",
|
||||
"Enter your Simplybook admin credentials to access the Admin API.": "Enter your Simplybook admin credentials to access the Admin API.",
|
||||
"Create Booking": "Create Booking",
|
||||
"Set Booking Comment": "Set Booking Comment",
|
||||
"Add Client": "Add Client",
|
||||
"Create Note": "Create Note",
|
||||
"Create Detailed Report": "Create Detailed Report",
|
||||
"Cancel Booking": "Cancel Booking",
|
||||
"Delete Client": "Delete Client",
|
||||
"Get Bookings": "Get Bookings",
|
||||
"Get Client List": "Get Client List",
|
||||
"Find Invoice": "Find Invoice",
|
||||
"Create a new booking using the book API method. Returns appointment info or throws exception if time not available.": "Create a new booking using the book API method. Returns appointment info or throws exception if time not available.",
|
||||
"Set a comment for a booking": "Set a comment for a booking",
|
||||
"Add a new client with specified data. Email, phone, or both may be required (check company settings).": "Add a new client with specified data. Email, phone, or both may be required (check company settings).",
|
||||
"Create a note (generic) in the system": "Create a note (generic) in the system",
|
||||
"Generate a detailed report (metrics, bookings, revenue)": "Generate a detailed report (metrics, bookings, revenue)",
|
||||
"Cancel an existing booking. Returns true on success.": "Cancel an existing booking. Returns true on success.",
|
||||
"Delete an existing client": "Delete an existing client",
|
||||
"Returns list of bookings filtered by given parameters": "Returns list of bookings filtered by given parameters",
|
||||
"Returns list of clients associated with company. Search by phone number, email address, or name.": "Returns list of clients associated with company. Search by phone number, email address, or name.",
|
||||
"Find invoices with filters and pagination": "Find invoices with filters and pagination",
|
||||
"Service": "Service",
|
||||
"Provider": "Provider",
|
||||
"Client": "Client",
|
||||
"Start Date": "Start Date",
|
||||
"Start Time": "开始时间",
|
||||
"End Date": "End Date",
|
||||
"End Time": "End Time",
|
||||
"Client Time Offset (seconds)": "Client Time Offset (seconds)",
|
||||
"Additional Fields": "Additional Fields",
|
||||
"Count": "计数",
|
||||
"Batch ID": "Batch ID",
|
||||
"Recurring Data": "Recurring Data",
|
||||
"Booking": "Booking",
|
||||
"Comment": "Comment",
|
||||
"Name": "名称",
|
||||
"Email": "电子邮件地址",
|
||||
"Phone": "Phone",
|
||||
"Address Line 1": "Address Line 1",
|
||||
"Address Line 2": "Address Line 2",
|
||||
"City": "City",
|
||||
"ZIP Code": "ZIP Code",
|
||||
"Country ID": "Country ID",
|
||||
"Start Date Time": "Start Date Time",
|
||||
"End Date Time": "End Date Time",
|
||||
"Note Type": "Note Type",
|
||||
"Note": "说明",
|
||||
"Mode": "Mode",
|
||||
"Time Blocked": "Time Blocked",
|
||||
"Created Date From": "Created Date From",
|
||||
"Created Date To": "Created Date To",
|
||||
"Date From": "Date From",
|
||||
"Date To": "Date To",
|
||||
"Booking Code": "Booking Code",
|
||||
"Service ID": "Service ID",
|
||||
"Service Provider ID": "Service Provider ID",
|
||||
"Client ID": "客户端ID",
|
||||
"Booking Type": "Booking Type",
|
||||
"Order Field": "Order Field",
|
||||
"Order Direction": "Order Direction",
|
||||
"Export Columns": "Export Columns",
|
||||
"Time From": "Time From",
|
||||
"Time To": "Time To",
|
||||
"Is Confirmed": "Is Confirmed",
|
||||
"Order By": "Order By",
|
||||
"Search String": "Search String",
|
||||
"Limit": "Limit",
|
||||
"Page": "Page",
|
||||
"Items Per Page": "Items Per Page",
|
||||
"Date Time From": "Date Time From",
|
||||
"Date Time To": "Date Time To",
|
||||
"Status": "状态",
|
||||
"Select a service": "Select a service",
|
||||
"Select a service provider": "Select a service provider",
|
||||
"Select a client": "Select a client",
|
||||
"Booking start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Booking start date (format: YYYY-MM-DD, e.g., 2024-03-01)",
|
||||
"Booking start time (format: HH:MM:SS, e.g., 09:00:00). Must be multiple of company timeframe.": "Booking start time (format: HH:MM:SS, e.g., 09:00:00). Must be multiple of company timeframe.",
|
||||
"Booking end date (format: YYYY-MM-DD, e.g., 2024-03-01). Should be later than start date.": "Booking end date (format: YYYY-MM-DD, e.g., 2024-03-01). Should be later than start date.",
|
||||
"Booking end time (format: HH:MM:SS, e.g., 10:00:00). Should be later than start time.": "Booking end time (format: HH:MM:SS, e.g., 10:00:00). Should be later than start time.",
|
||||
"Difference between company and client time zone in seconds (e.g., -3600 for GMT+3 client with GMT+2 company)": "Difference between company and client time zone in seconds (e.g., -3600 for GMT+3 client with GMT+2 company)",
|
||||
"Additional params and fields as object (e.g., {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Use for promo codes, location ID, intake forms.": "Additional params and fields as object (e.g., {\"promocode\": \"CODE123\", \"location_id\": \"1\"}). Use for promo codes, location ID, intake forms.",
|
||||
"Number of bookings for group booking batch (min. 1). Cannot be used with Batch ID.": "Number of bookings for group booking batch (min. 1). Cannot be used with Batch ID.",
|
||||
"Add booking to existing group bookings batch. Cannot be used with Count > 1.": "Add booking to existing group bookings batch. Cannot be used with Count > 1.",
|
||||
"Make booking recurrent (optional, array format)": "Make booking recurrent (optional, array format)",
|
||||
"Select a booking": "Select a booking",
|
||||
"The comment text to set for the booking": "The comment text to set for the booking",
|
||||
"Client name": "Client name",
|
||||
"Client email address": "Client email address",
|
||||
"Client phone number (e.g., +1502-810-4521)": "Client phone number (e.g., +1502-810-4521)",
|
||||
"Client address line 1": "Client address line 1",
|
||||
"Client address line 2": "Client address line 2",
|
||||
"Client city": "Client city",
|
||||
"Client ZIP/postal code": "Client ZIP/postal code",
|
||||
"Client country ID": "Client country ID",
|
||||
"Note start date and time (format: YYYY-MM-DD HH:MM:SS)": "Note start date and time (format: YYYY-MM-DD HH:MM:SS)",
|
||||
"Note end date and time (format: YYYY-MM-DD HH:MM:SS)": "Note end date and time (format: YYYY-MM-DD HH:MM:SS)",
|
||||
"Select a note type": "Select a note type",
|
||||
"Note body/content": "Note body/content",
|
||||
"Note mode - determines visibility scope": "Note mode - determines visibility scope",
|
||||
"Whether the time should be blocked": "Whether the time should be blocked",
|
||||
"Select a provider (optional)": "Select a provider (optional)",
|
||||
"Select a service (optional)": "Select a service (optional)",
|
||||
"Filter by booking creation date from (format: YYYY-MM-DD)": "Filter by booking creation date from (format: YYYY-MM-DD)",
|
||||
"Filter by booking creation date to (format: YYYY-MM-DD)": "Filter by booking creation date to (format: YYYY-MM-DD)",
|
||||
"Filter by booking date from (format: YYYY-MM-DD)": "Filter by booking date from (format: YYYY-MM-DD)",
|
||||
"Filter by booking date to (format: YYYY-MM-DD)": "Filter by booking date to (format: YYYY-MM-DD)",
|
||||
"Filter by booking code": "Filter by booking code",
|
||||
"Filter by service ID": "Filter by service ID",
|
||||
"Filter by service provider ID": "Filter by service provider ID",
|
||||
"Filter by client ID": "Filter by client ID",
|
||||
"Filter by booking type": "Filter by booking type",
|
||||
"Field to order results by (e.g., record_date)": "Field to order results by (e.g., record_date)",
|
||||
"Sort order direction": "Sort order direction",
|
||||
"Array of columns to export (leave empty for all columns)": "Array of columns to export (leave empty for all columns)",
|
||||
"Start date (format: YYYY-MM-DD, e.g., 2024-03-01)": "Start date (format: YYYY-MM-DD, e.g., 2024-03-01)",
|
||||
"Start time (format: HH:MM:SS, e.g., 09:00:00)": "Start time (format: HH:MM:SS, e.g., 09:00:00)",
|
||||
"End date (format: YYYY-MM-DD, e.g., 2024-03-31)": "End date (format: YYYY-MM-DD, e.g., 2024-03-31)",
|
||||
"End time (format: HH:MM:SS, e.g., 18:00:00)": "End time (format: HH:MM:SS, e.g., 18:00:00)",
|
||||
"Filter by creation date from (format: YYYY-MM-DD)": "Filter by creation date from (format: YYYY-MM-DD)",
|
||||
"Filter by creation date to (format: YYYY-MM-DD)": "Filter by creation date to (format: YYYY-MM-DD)",
|
||||
"Get bookings for a specific service provider (optional)": "Get bookings for a specific service provider (optional)",
|
||||
"Get bookings for a specific service (optional)": "Get bookings for a specific service (optional)",
|
||||
"Filter by confirmation status": "Filter by confirmation status",
|
||||
"Get bookings for a specific client (optional)": "Get bookings for a specific client (optional)",
|
||||
"Sort order for results": "Sort order for results",
|
||||
"Filter by booking type (depends on Approve booking plugin status)": "Filter by booking type (depends on Approve booking plugin status)",
|
||||
"Search by phone number, email address, or name. Leave empty to get all clients.": "Search by phone number, email address, or name. Leave empty to get all clients.",
|
||||
"Maximum number of clients to return. Leave empty for no limit.": "Maximum number of clients to return. Leave empty for no limit.",
|
||||
"Page number in the list": "Page number in the list",
|
||||
"Number of items per page": "Number of items per page",
|
||||
"Filter by client (optional)": "Filter by client (optional)",
|
||||
"Order/invoice date and time from (format: YYYY-MM-DD HH:MM:SS)": "Order/invoice date and time from (format: YYYY-MM-DD HH:MM:SS)",
|
||||
"Order/invoice date and time to (format: YYYY-MM-DD HH:MM:SS)": "Order/invoice date and time to (format: YYYY-MM-DD HH:MM:SS)",
|
||||
"Order/invoice status": "Order/invoice status",
|
||||
"All": "所有的",
|
||||
"Non-Cancelled": "Non-Cancelled",
|
||||
"Cancelled": "Cancelled",
|
||||
"Ascending": "升序",
|
||||
"Descending": "降序",
|
||||
"Confirmed (1)": "Confirmed (1)",
|
||||
"Not Confirmed (0)": "Not Confirmed (0)",
|
||||
"Date Start (Descending)": "Date Start (Descending)",
|
||||
"Date Start (Ascending)": "Date Start (Ascending)",
|
||||
"Record Date": "Record Date",
|
||||
"Non Cancelled": "Non Cancelled",
|
||||
"Cancelled by Client": "Cancelled by Client",
|
||||
"Cancelled by Admin": "Cancelled by Admin",
|
||||
"Non Approved Yet": "Non Approved Yet",
|
||||
"Approved": "Approved",
|
||||
"New Booking": "New Booking",
|
||||
"Booking Change": "Booking Change",
|
||||
"Booking Cancellation": "Booking Cancellation",
|
||||
"New Client": "New Client",
|
||||
"New Invoice": "New Invoice",
|
||||
"New Offer": "New Offer",
|
||||
"Triggers when a new booking is created in SimplyBook.me": "Triggers when a new booking is created in SimplyBook.me",
|
||||
"Triggers when a booking is changed in SimplyBook.me": "Triggers when a booking is changed in SimplyBook.me",
|
||||
"Triggers when a booking is canceled in SimplyBook.me": "Triggers when a booking is canceled in SimplyBook.me",
|
||||
"Triggers when a new client is added (via booking or manually) in SimplyBook.me": "Triggers when a new client is added (via booking or manually) in SimplyBook.me",
|
||||
"Triggers when a new invoice is generated/paid in SimplyBook.me (requires Accept Payments feature)": "Triggers when a new invoice is generated/paid in SimplyBook.me (requires Accept Payments feature)",
|
||||
"Triggers when a new offer (proposal or quote) is created (bookings with promo: false)": "Triggers when a new offer (proposal or quote) is created (bookings with promo: false)"
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
import { createPiece } from '@activepieces/pieces-framework';
|
||||
import { cancelBooking } from './lib/actions/cancel-booking';
|
||||
import { createBooking } from './lib/actions/create-booking';
|
||||
import { createBookingComment } from './lib/actions/create-booking-comment';
|
||||
import { createClient } from './lib/actions/create-client';
|
||||
import { createDetailedReport } from './lib/actions/create-detailed-report';
|
||||
import { createNote } from './lib/actions/create-note';
|
||||
import { deleteClient } from './lib/actions/delete-client';
|
||||
import { findBooking } from './lib/actions/find-booking';
|
||||
import { findClient } from './lib/actions/find-client';
|
||||
import { findInvoice } from './lib/actions/find-invoice';
|
||||
import { simplybookAuth } from './lib/common/auth';
|
||||
import { bookingCanceled } from './lib/triggers/booking-canceled';
|
||||
import { bookingChanged } from './lib/triggers/booking-changed';
|
||||
import { newBooking } from './lib/triggers/new-booking';
|
||||
import { newClient } from './lib/triggers/new-client';
|
||||
import { newInvoice } from './lib/triggers/new-invoice';
|
||||
import { newOffer } from './lib/triggers/new-offer';
|
||||
|
||||
export const simplybookme = createPiece({
|
||||
displayName: 'SimplyBook.me',
|
||||
auth: simplybookAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/simplybookme.png',
|
||||
authors: ['fortunamide','sanket-a11y'],
|
||||
actions: [
|
||||
// Write Actions
|
||||
createBooking,
|
||||
createBookingComment,
|
||||
createClient,
|
||||
createNote,
|
||||
createDetailedReport,
|
||||
cancelBooking,
|
||||
deleteClient,
|
||||
// Search Actions
|
||||
findBooking,
|
||||
findClient,
|
||||
findInvoice
|
||||
],
|
||||
triggers: [newBooking, bookingChanged, bookingCanceled, newClient, newInvoice, newOffer]
|
||||
});
|
||||
@@ -0,0 +1,21 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { simplybookAuth, makeJsonRpcCall, SimplybookAuth, bookingDropdown } from '../common';
|
||||
|
||||
export const cancelBooking = createAction({
|
||||
auth: simplybookAuth,
|
||||
name: 'cancel_booking',
|
||||
displayName: 'Cancel Booking',
|
||||
description: 'Cancel an existing booking. Returns true on success.',
|
||||
props: {
|
||||
bookingId: bookingDropdown
|
||||
},
|
||||
async run(context) {
|
||||
const auth = context.auth.props;
|
||||
const { bookingId } = context.propsValue;
|
||||
|
||||
const params = [bookingId];
|
||||
const result = await makeJsonRpcCall<boolean>(auth, 'cancelBooking', params);
|
||||
|
||||
return { success: result };
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,26 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { simplybookAuth, makeJsonRpcCall, SimplybookAuth, bookingDropdown } from '../common';
|
||||
|
||||
export const createBookingComment = createAction({
|
||||
auth: simplybookAuth,
|
||||
name: 'create_booking_comment',
|
||||
displayName: 'Set Booking Comment',
|
||||
description: 'Set a comment for a booking',
|
||||
props: {
|
||||
bookingId: bookingDropdown,
|
||||
comment: Property.LongText({
|
||||
displayName: 'Comment',
|
||||
description: 'The comment text to set for the booking',
|
||||
required: true
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const auth = context.auth.props;
|
||||
const { bookingId, comment } = context.propsValue;
|
||||
|
||||
const params = [bookingId, comment];
|
||||
const result = await makeJsonRpcCall<number>(auth, 'setBookingComment', params);
|
||||
|
||||
return { id: result };
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,112 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
simplybookAuth,
|
||||
makeJsonRpcCall,
|
||||
SimplybookAuth,
|
||||
serviceDropdown,
|
||||
providerDropdown,
|
||||
clientDropdown
|
||||
} from '../common';
|
||||
|
||||
export const createBooking = createAction({
|
||||
auth: simplybookAuth,
|
||||
name: 'create_booking',
|
||||
displayName: 'Create Booking',
|
||||
description:
|
||||
'Create a new booking using the book API method. Returns appointment info or throws exception if time not available.',
|
||||
props: {
|
||||
eventId: serviceDropdown,
|
||||
unitId: providerDropdown,
|
||||
clientId: clientDropdown,
|
||||
startDate: Property.ShortText({
|
||||
displayName: 'Start Date',
|
||||
description: 'Booking start date (format: YYYY-MM-DD, e.g., 2024-03-01)',
|
||||
required: true
|
||||
}),
|
||||
startTime: Property.ShortText({
|
||||
displayName: 'Start Time',
|
||||
description:
|
||||
'Booking start time (format: HH:MM:SS, e.g., 09:00:00). Must be multiple of company timeframe.',
|
||||
required: true
|
||||
}),
|
||||
endDate: Property.ShortText({
|
||||
displayName: 'End Date',
|
||||
description: 'Booking end date (format: YYYY-MM-DD, e.g., 2024-03-01). Should be later than start date.',
|
||||
required: true
|
||||
}),
|
||||
endTime: Property.ShortText({
|
||||
displayName: 'End Time',
|
||||
description:
|
||||
'Booking end time (format: HH:MM:SS, e.g., 10:00:00). Should be later than start time.',
|
||||
required: true
|
||||
}),
|
||||
clientTimeOffset: Property.Number({
|
||||
displayName: 'Client Time Offset (seconds)',
|
||||
description:
|
||||
'Difference between company and client time zone in seconds (e.g., -3600 for GMT+3 client with GMT+2 company)',
|
||||
required: false,
|
||||
defaultValue: 0
|
||||
}),
|
||||
additionalFields: Property.Json({
|
||||
displayName: 'Additional Fields',
|
||||
description:
|
||||
'Additional params and fields as object (e.g., {"promocode": "CODE123", "location_id": "1"}). Use for promo codes, location ID, intake forms.',
|
||||
required: false
|
||||
}),
|
||||
count: Property.Number({
|
||||
displayName: 'Count',
|
||||
description: 'Number of bookings for group booking batch (min. 1). Cannot be used with Batch ID.',
|
||||
required: false,
|
||||
defaultValue: 1
|
||||
}),
|
||||
batchId: Property.Number({
|
||||
displayName: 'Batch ID',
|
||||
description:
|
||||
'Add booking to existing group bookings batch. Cannot be used with Count > 1.',
|
||||
required: false
|
||||
}),
|
||||
recurringData: Property.Json({
|
||||
displayName: 'Recurring Data',
|
||||
description: 'Make booking recurrent (optional, array format)',
|
||||
required: false
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const auth = context.auth.props;
|
||||
const {
|
||||
eventId,
|
||||
unitId,
|
||||
clientId,
|
||||
startDate,
|
||||
startTime,
|
||||
endDate,
|
||||
endTime,
|
||||
clientTimeOffset,
|
||||
additionalFields,
|
||||
count,
|
||||
batchId,
|
||||
recurringData
|
||||
} = context.propsValue;
|
||||
|
||||
// Build params array according to book API signature:
|
||||
// book($eventId, $unitId, $clientId, $startDate, $startTime, $endDate, $endTime, $clientTimeOffset, $additional, $count, $batchId, $recurringData)
|
||||
const params = [
|
||||
eventId,
|
||||
unitId,
|
||||
clientId,
|
||||
startDate,
|
||||
startTime,
|
||||
endDate,
|
||||
endTime,
|
||||
clientTimeOffset || 0,
|
||||
additionalFields || {},
|
||||
count || 1,
|
||||
batchId || null,
|
||||
recurringData || null
|
||||
];
|
||||
|
||||
const result = await makeJsonRpcCall(auth, 'book', params);
|
||||
|
||||
return result;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,79 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { simplybookAuth, makeJsonRpcCall, SimplybookAuth } from '../common';
|
||||
|
||||
export const createClient = createAction({
|
||||
auth: simplybookAuth,
|
||||
name: 'create_client',
|
||||
displayName: 'Add Client',
|
||||
description: 'Add a new client with specified data. Email, phone, or both may be required (check company settings).',
|
||||
props: {
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
description: 'Client name',
|
||||
required: true
|
||||
}),
|
||||
email: Property.ShortText({
|
||||
displayName: 'Email',
|
||||
description: 'Client email address',
|
||||
required: false
|
||||
}),
|
||||
phone: Property.ShortText({
|
||||
displayName: 'Phone',
|
||||
description: 'Client phone number (e.g., +1502-810-4521)',
|
||||
required: false
|
||||
}),
|
||||
address1: Property.ShortText({
|
||||
displayName: 'Address Line 1',
|
||||
description: 'Client address line 1',
|
||||
required: false
|
||||
}),
|
||||
address2: Property.ShortText({
|
||||
displayName: 'Address Line 2',
|
||||
description: 'Client address line 2',
|
||||
required: false
|
||||
}),
|
||||
city: Property.ShortText({
|
||||
displayName: 'City',
|
||||
description: 'Client city',
|
||||
required: false
|
||||
}),
|
||||
zip: Property.ShortText({
|
||||
displayName: 'ZIP Code',
|
||||
description: 'Client ZIP/postal code',
|
||||
required: false
|
||||
}),
|
||||
countryId: Property.ShortText({
|
||||
displayName: 'Country ID',
|
||||
description: 'Client country ID',
|
||||
required: false
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const auth = context.auth.props;
|
||||
const {
|
||||
name,
|
||||
email,
|
||||
phone,
|
||||
address1,
|
||||
address2,
|
||||
city,
|
||||
zip,
|
||||
countryId
|
||||
} = context.propsValue;
|
||||
|
||||
const clientData: any = { name };
|
||||
|
||||
if (email) clientData.email = email;
|
||||
if (phone) clientData.phone = phone;
|
||||
if (address1) clientData.address1 = address1;
|
||||
if (address2) clientData.address2 = address2;
|
||||
if (city) clientData.city = city;
|
||||
if (zip) clientData.zip = zip;
|
||||
if (countryId) clientData.country_id = countryId;
|
||||
|
||||
const params = [clientData];
|
||||
const clientId = await makeJsonRpcCall<number>(auth, 'addClient', params);
|
||||
|
||||
return { clientId };
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,150 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { simplybookAuth, getAccessToken, SimplybookAuth } from '../common';
|
||||
|
||||
export const createDetailedReport = createAction({
|
||||
auth: simplybookAuth,
|
||||
name: 'create_detailed_report',
|
||||
displayName: 'Create Detailed Report',
|
||||
description: 'Generate a detailed report (metrics, bookings, revenue)',
|
||||
props: {
|
||||
createdDateFrom: Property.ShortText({
|
||||
displayName: 'Created Date From',
|
||||
description: 'Filter by booking creation date from (format: YYYY-MM-DD)',
|
||||
required: false
|
||||
}),
|
||||
createdDateTo: Property.ShortText({
|
||||
displayName: 'Created Date To',
|
||||
description: 'Filter by booking creation date to (format: YYYY-MM-DD)',
|
||||
required: false
|
||||
}),
|
||||
dateFrom: Property.ShortText({
|
||||
displayName: 'Date From',
|
||||
description: 'Filter by booking date from (format: YYYY-MM-DD)',
|
||||
required: false
|
||||
}),
|
||||
dateTo: Property.ShortText({
|
||||
displayName: 'Date To',
|
||||
description: 'Filter by booking date to (format: YYYY-MM-DD)',
|
||||
required: false
|
||||
}),
|
||||
code: Property.ShortText({
|
||||
displayName: 'Booking Code',
|
||||
description: 'Filter by booking code',
|
||||
required: false
|
||||
}),
|
||||
eventId: Property.Number({
|
||||
displayName: 'Service ID',
|
||||
description: 'Filter by service ID',
|
||||
required: false
|
||||
}),
|
||||
unitGroupId: Property.Number({
|
||||
displayName: 'Service Provider ID',
|
||||
description: 'Filter by service provider ID',
|
||||
required: false
|
||||
}),
|
||||
clientId: Property.Number({
|
||||
displayName: 'Client ID',
|
||||
description: 'Filter by client ID',
|
||||
required: false
|
||||
}),
|
||||
bookingType: Property.StaticDropdown({
|
||||
displayName: 'Booking Type',
|
||||
description: 'Filter by booking type',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Non-Cancelled', value: 'non_cancelled' },
|
||||
{ label: 'Cancelled', value: 'cancelled' }
|
||||
]
|
||||
}
|
||||
}),
|
||||
orderField: Property.ShortText({
|
||||
displayName: 'Order Field',
|
||||
description: 'Field to order results by (e.g., record_date)',
|
||||
required: false,
|
||||
defaultValue: 'record_date'
|
||||
}),
|
||||
orderDirection: Property.StaticDropdown({
|
||||
displayName: 'Order Direction',
|
||||
description: 'Sort order direction',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Ascending', value: 'asc' },
|
||||
{ label: 'Descending', value: 'desc' }
|
||||
]
|
||||
},
|
||||
defaultValue: 'asc'
|
||||
}),
|
||||
exportColumns: Property.Json({
|
||||
displayName: 'Export Columns',
|
||||
description: 'Array of columns to export (leave empty for all columns)',
|
||||
required: false
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const auth = context.auth.props;
|
||||
const accessToken = await getAccessToken(auth);
|
||||
|
||||
const filter: any = {};
|
||||
|
||||
// Build filter object
|
||||
if (context.propsValue.createdDateFrom) {
|
||||
filter.created_date_from = context.propsValue.createdDateFrom;
|
||||
}
|
||||
if (context.propsValue.createdDateTo) {
|
||||
filter.created_date_to = context.propsValue.createdDateTo;
|
||||
}
|
||||
if (context.propsValue.dateFrom) {
|
||||
filter.date_from = context.propsValue.dateFrom;
|
||||
}
|
||||
if (context.propsValue.dateTo) {
|
||||
filter.date_to = context.propsValue.dateTo;
|
||||
}
|
||||
if (context.propsValue.code) {
|
||||
filter.code = context.propsValue.code;
|
||||
}
|
||||
if (context.propsValue.eventId) {
|
||||
filter.event_id = context.propsValue.eventId.toString();
|
||||
}
|
||||
if (context.propsValue.unitGroupId) {
|
||||
filter.unit_group_id = context.propsValue.unitGroupId.toString();
|
||||
}
|
||||
if (context.propsValue.clientId) {
|
||||
filter.client_id = context.propsValue.clientId.toString();
|
||||
}
|
||||
if (context.propsValue.bookingType) {
|
||||
filter.booking_type = context.propsValue.bookingType;
|
||||
}
|
||||
|
||||
const requestBody: any = {
|
||||
filter,
|
||||
export_columns: context.propsValue.exportColumns || [],
|
||||
order_direction: context.propsValue.orderDirection || 'asc',
|
||||
order_field: context.propsValue.orderField || 'record_date'
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: 'https://user-api-v2.simplybook.me/admin/detailed-report',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Company-Login': auth.companyLogin,
|
||||
'X-Token': accessToken
|
||||
},
|
||||
body: requestBody
|
||||
});
|
||||
|
||||
return response.body;
|
||||
} catch (error: any) {
|
||||
if (error.response) {
|
||||
throw new Error(
|
||||
`Failed to generate detailed report: ${error.response.status} - ${JSON.stringify(error.response.body)}`
|
||||
);
|
||||
}
|
||||
throw new Error(`Failed to generate detailed report: ${error.message}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,105 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { simplybookAuth, getAccessToken, SimplybookAuth, serviceDropdown, providerDropdown, noteTypeDropdown } from '../common';
|
||||
|
||||
export const createNote = createAction({
|
||||
auth: simplybookAuth,
|
||||
name: 'create_note',
|
||||
displayName: 'Create Note',
|
||||
description: 'Create a note (generic) in the system',
|
||||
props: {
|
||||
startDateTime: Property.ShortText({
|
||||
displayName: 'Start Date Time',
|
||||
description: 'Note start date and time (format: YYYY-MM-DD HH:MM:SS)',
|
||||
required: true
|
||||
}),
|
||||
endDateTime: Property.ShortText({
|
||||
displayName: 'End Date Time',
|
||||
description: 'Note end date and time (format: YYYY-MM-DD HH:MM:SS)',
|
||||
required: true
|
||||
}),
|
||||
noteTypeId: noteTypeDropdown,
|
||||
note: Property.LongText({
|
||||
displayName: 'Note',
|
||||
description: 'Note body/content',
|
||||
required: true
|
||||
}),
|
||||
mode: Property.StaticDropdown({
|
||||
displayName: 'Mode',
|
||||
description: 'Note mode - determines visibility scope',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Service', value: 'service' },
|
||||
{ label: 'Provider', value: 'provider' },
|
||||
{ label: 'All', value: 'all' }
|
||||
]
|
||||
}
|
||||
}),
|
||||
timeBlocked: Property.Checkbox({
|
||||
displayName: 'Time Blocked',
|
||||
description: 'Whether the time should be blocked',
|
||||
required: false,
|
||||
defaultValue: true
|
||||
}),
|
||||
providerId: Property.Dropdown({
|
||||
auth: simplybookAuth,
|
||||
displayName: 'Provider',
|
||||
description: 'Select a provider (optional)',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
options: providerDropdown.options
|
||||
}),
|
||||
serviceId: Property.Dropdown({
|
||||
auth: simplybookAuth,
|
||||
displayName: 'Service',
|
||||
description: 'Select a service (optional)',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
options: serviceDropdown.options
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const auth = context.auth.props;
|
||||
const accessToken = await getAccessToken(auth);
|
||||
|
||||
const noteData: any = {
|
||||
start_date_time: context.propsValue.startDateTime,
|
||||
end_date_time: context.propsValue.endDateTime,
|
||||
note_type_id: context.propsValue.noteTypeId.toString(),
|
||||
note: context.propsValue.note,
|
||||
mode: context.propsValue.mode,
|
||||
time_blocked: context.propsValue.timeBlocked ?? true
|
||||
};
|
||||
|
||||
// Add optional fields
|
||||
if (context.propsValue.providerId) {
|
||||
noteData.provider_id = context.propsValue.providerId;
|
||||
}
|
||||
if (context.propsValue.serviceId) {
|
||||
noteData.service_id = context.propsValue.serviceId;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: 'https://user-api-v2.simplybook.me/admin/calendar-notes',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Company-Login': auth.companyLogin,
|
||||
'X-Token': accessToken
|
||||
},
|
||||
body: noteData
|
||||
});
|
||||
|
||||
return response.body;
|
||||
} catch (error: any) {
|
||||
if (error.response) {
|
||||
throw new Error(
|
||||
`Failed to create note: ${error.response.status} - ${JSON.stringify(error.response.body)}`
|
||||
);
|
||||
}
|
||||
throw new Error(`Failed to create note: ${error.message}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,51 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import {
|
||||
simplybookAuth,
|
||||
getAccessToken,
|
||||
SimplybookAuth,
|
||||
clientDropdown
|
||||
} from '../common';
|
||||
|
||||
export const deleteClient = createAction({
|
||||
auth: simplybookAuth,
|
||||
name: 'delete_client',
|
||||
displayName: 'Delete Client',
|
||||
description: 'Delete an existing client',
|
||||
props: {
|
||||
clientId: clientDropdown
|
||||
},
|
||||
async run(context) {
|
||||
const auth = context.auth.props;
|
||||
const accessToken = await getAccessToken(auth);
|
||||
|
||||
const { clientId } = context.propsValue;
|
||||
|
||||
try {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.DELETE,
|
||||
url: `https://user-api-v2.simplybook.me/admin/clients/${clientId}`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Company-Login': auth.companyLogin,
|
||||
'X-Token': accessToken
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: `Client ${clientId} deleted successfully`,
|
||||
response: response.body
|
||||
};
|
||||
} catch (error: any) {
|
||||
if (error.response) {
|
||||
throw new Error(
|
||||
`Failed to delete client: ${error.response.status} - ${JSON.stringify(
|
||||
error.response.body
|
||||
)}`
|
||||
);
|
||||
}
|
||||
throw new Error(`Failed to delete client: ${error.message}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,142 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { simplybookAuth, makeJsonRpcCall, SimplybookAuth, clientDropdown, serviceDropdown, providerDropdown } from '../common';
|
||||
|
||||
export const findBooking = createAction({
|
||||
auth: simplybookAuth,
|
||||
name: 'find_booking',
|
||||
displayName: 'Get Bookings',
|
||||
description: 'Returns list of bookings filtered by given parameters',
|
||||
props: {
|
||||
dateFrom: Property.ShortText({
|
||||
displayName: 'Date From',
|
||||
description: 'Start date (format: YYYY-MM-DD, e.g., 2024-03-01)',
|
||||
required: false
|
||||
}),
|
||||
timeFrom: Property.ShortText({
|
||||
displayName: 'Time From',
|
||||
description: 'Start time (format: HH:MM:SS, e.g., 09:00:00)',
|
||||
required: false
|
||||
}),
|
||||
dateTo: Property.ShortText({
|
||||
displayName: 'Date To',
|
||||
description: 'End date (format: YYYY-MM-DD, e.g., 2024-03-31)',
|
||||
required: false
|
||||
}),
|
||||
timeTo: Property.ShortText({
|
||||
displayName: 'Time To',
|
||||
description: 'End time (format: HH:MM:SS, e.g., 18:00:00)',
|
||||
required: false
|
||||
}),
|
||||
createdDateFrom: Property.ShortText({
|
||||
displayName: 'Created Date From',
|
||||
description: 'Filter by creation date from (format: YYYY-MM-DD)',
|
||||
required: false
|
||||
}),
|
||||
createdDateTo: Property.ShortText({
|
||||
displayName: 'Created Date To',
|
||||
description: 'Filter by creation date to (format: YYYY-MM-DD)',
|
||||
required: false
|
||||
}),
|
||||
unitGroupId: Property.Dropdown({
|
||||
auth: simplybookAuth,
|
||||
displayName: 'Provider',
|
||||
description: 'Get bookings for a specific service provider (optional)',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
options: providerDropdown.options
|
||||
}),
|
||||
eventId: Property.Dropdown({
|
||||
auth: simplybookAuth,
|
||||
displayName: 'Service',
|
||||
description: 'Get bookings for a specific service (optional)',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
options: serviceDropdown.options
|
||||
}),
|
||||
isConfirmed: Property.StaticDropdown({
|
||||
displayName: 'Is Confirmed',
|
||||
description: 'Filter by confirmation status',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Confirmed (1)', value: 1 },
|
||||
{ label: 'Not Confirmed (0)', value: 0 }
|
||||
]
|
||||
}
|
||||
}),
|
||||
clientId: Property.Dropdown({
|
||||
auth: simplybookAuth,
|
||||
displayName: 'Client',
|
||||
description: 'Get bookings for a specific client (optional)',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
options: clientDropdown.options
|
||||
}),
|
||||
order: Property.StaticDropdown({
|
||||
displayName: 'Order By',
|
||||
description: 'Sort order for results',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Date Start (Descending)', value: 'date_start' },
|
||||
{ label: 'Date Start (Ascending)', value: 'date_start_asc' },
|
||||
{ label: 'Record Date', value: 'record_date' }
|
||||
]
|
||||
}
|
||||
}),
|
||||
bookingType: Property.StaticDropdown({
|
||||
displayName: 'Booking Type',
|
||||
description: 'Filter by booking type (depends on Approve booking plugin status)',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'All', value: 'all' },
|
||||
{ label: 'Cancelled', value: 'cancelled' },
|
||||
{ label: 'Non Cancelled', value: 'non_cancelled' },
|
||||
{ label: 'Cancelled by Client', value: 'cancelled_by_client' },
|
||||
{ label: 'Cancelled by Admin', value: 'cancelled_by_admin' },
|
||||
{ label: 'Non Approved Yet', value: 'non_approved_yet' },
|
||||
{ label: 'Approved', value: 'approved' }
|
||||
]
|
||||
}
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const auth = context.auth.props;
|
||||
const {
|
||||
dateFrom,
|
||||
timeFrom,
|
||||
dateTo,
|
||||
timeTo,
|
||||
createdDateFrom,
|
||||
createdDateTo,
|
||||
unitGroupId,
|
||||
eventId,
|
||||
isConfirmed,
|
||||
clientId,
|
||||
order,
|
||||
bookingType
|
||||
} = context.propsValue;
|
||||
|
||||
// Build filter object
|
||||
const filter: any = {};
|
||||
|
||||
if (dateFrom) filter.date_from = dateFrom;
|
||||
if (timeFrom) filter.time_from = timeFrom;
|
||||
if (dateTo) filter.date_to = dateTo;
|
||||
if (timeTo) filter.time_to = timeTo;
|
||||
if (createdDateFrom) filter.created_date_from = createdDateFrom;
|
||||
if (createdDateTo) filter.created_date_to = createdDateTo;
|
||||
if (unitGroupId) filter.unit_group_id = unitGroupId;
|
||||
if (eventId) filter.event_id = eventId;
|
||||
if (isConfirmed !== undefined) filter.is_confirmed = isConfirmed;
|
||||
if (clientId) filter.client_id = clientId;
|
||||
if (order) filter.order = order;
|
||||
if (bookingType) filter.booking_type = bookingType;
|
||||
|
||||
const params = [filter];
|
||||
const bookings = await makeJsonRpcCall(auth, 'getBookings', params);
|
||||
|
||||
return bookings;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,34 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { simplybookAuth, makeJsonRpcCall, SimplybookAuth } from '../common';
|
||||
|
||||
export const findClient = createAction({
|
||||
auth: simplybookAuth,
|
||||
name: 'find_client',
|
||||
displayName: 'Get Client List',
|
||||
description: 'Returns list of clients associated with company. Search by phone number, email address, or name.',
|
||||
props: {
|
||||
searchString: Property.ShortText({
|
||||
displayName: 'Search String',
|
||||
description: 'Search by phone number, email address, or name. Leave empty to get all clients.',
|
||||
required: false
|
||||
}),
|
||||
limit: Property.Number({
|
||||
displayName: 'Limit',
|
||||
description: 'Maximum number of clients to return. Leave empty for no limit.',
|
||||
required: false
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const auth = context.auth.props;
|
||||
const { searchString, limit } = context.propsValue;
|
||||
|
||||
const params = [
|
||||
searchString || '',
|
||||
limit !== undefined ? limit : null
|
||||
];
|
||||
|
||||
const clients = await makeJsonRpcCall(auth, 'getClientList', params);
|
||||
|
||||
return clients;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,107 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { simplybookAuth, getAccessToken, SimplybookAuth, clientDropdown } from '../common';
|
||||
|
||||
export const findInvoice = createAction({
|
||||
auth: simplybookAuth,
|
||||
name: 'find_invoice',
|
||||
displayName: 'Find Invoice',
|
||||
description: 'Find invoices with filters and pagination',
|
||||
props: {
|
||||
page: Property.Number({
|
||||
displayName: 'Page',
|
||||
description: 'Page number in the list',
|
||||
required: false,
|
||||
defaultValue: 1
|
||||
}),
|
||||
onPage: Property.Number({
|
||||
displayName: 'Items Per Page',
|
||||
description: 'Number of items per page',
|
||||
required: false,
|
||||
defaultValue: 25
|
||||
}),
|
||||
clientId: Property.Dropdown({
|
||||
auth: simplybookAuth,
|
||||
displayName: 'Client',
|
||||
description: 'Filter by client (optional)',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
options: clientDropdown.options
|
||||
}),
|
||||
datetimeFrom: Property.ShortText({
|
||||
displayName: 'Date Time From',
|
||||
description: 'Order/invoice date and time from (format: YYYY-MM-DD HH:MM:SS)',
|
||||
required: false
|
||||
}),
|
||||
datetimeTo: Property.ShortText({
|
||||
displayName: 'Date Time To',
|
||||
description: 'Order/invoice date and time to (format: YYYY-MM-DD HH:MM:SS)',
|
||||
required: false
|
||||
}),
|
||||
status: Property.ShortText({
|
||||
displayName: 'Status',
|
||||
description: 'Order/invoice status',
|
||||
required: false
|
||||
}),
|
||||
bookingCode: Property.ShortText({
|
||||
displayName: 'Booking Code',
|
||||
description: 'Filter by booking code',
|
||||
required: false
|
||||
})
|
||||
},
|
||||
async run(context) {
|
||||
const auth = context.auth.props;
|
||||
const accessToken = await getAccessToken(auth);
|
||||
|
||||
// Build query parameters
|
||||
const queryParams: string[] = [];
|
||||
|
||||
// Pagination
|
||||
if (context.propsValue.page) {
|
||||
queryParams.push(`page=${context.propsValue.page}`);
|
||||
}
|
||||
if (context.propsValue.onPage) {
|
||||
queryParams.push(`on_page=${context.propsValue.onPage}`);
|
||||
}
|
||||
|
||||
// Filters
|
||||
if (context.propsValue.clientId) {
|
||||
queryParams.push(`filter[client_id]=${context.propsValue.clientId}`);
|
||||
}
|
||||
if (context.propsValue.datetimeFrom) {
|
||||
queryParams.push(`filter[datetime_from]=${encodeURIComponent(context.propsValue.datetimeFrom)}`);
|
||||
}
|
||||
if (context.propsValue.datetimeTo) {
|
||||
queryParams.push(`filter[datetime_to]=${encodeURIComponent(context.propsValue.datetimeTo)}`);
|
||||
}
|
||||
if (context.propsValue.status) {
|
||||
queryParams.push(`filter[status]=${encodeURIComponent(context.propsValue.status)}`);
|
||||
}
|
||||
if (context.propsValue.bookingCode) {
|
||||
queryParams.push(`filter[booking_code]=${encodeURIComponent(context.propsValue.bookingCode)}`);
|
||||
}
|
||||
|
||||
const queryString = queryParams.length > 0 ? `?${queryParams.join('&')}` : '';
|
||||
|
||||
try {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `https://user-api-v2.simplybook.me/admin/invoices${queryString}`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Company-Login': auth.companyLogin,
|
||||
'X-Token': accessToken
|
||||
}
|
||||
});
|
||||
|
||||
return response.body;
|
||||
} catch (error: any) {
|
||||
if (error.response) {
|
||||
throw new Error(
|
||||
`Failed to find invoices: ${error.response.status} - ${JSON.stringify(error.response.body)}`
|
||||
);
|
||||
}
|
||||
throw new Error(`Failed to find invoices: ${error.message}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,10 @@
|
||||
export * from './cancel-booking';
|
||||
export * from './create-booking';
|
||||
export * from './create-booking-comment';
|
||||
export * from './create-client';
|
||||
export * from './create-detailed-report';
|
||||
export * from './create-note';
|
||||
export * from './delete-client';
|
||||
export * from './find-booking';
|
||||
export * from './find-client';
|
||||
export * from './find-invoice';
|
||||
@@ -0,0 +1,175 @@
|
||||
import { PieceAuth, Property } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const simplybookAuth = PieceAuth.CustomAuth({
|
||||
description:
|
||||
'Enter your Simplybook admin credentials to access the Admin API.',
|
||||
props: {
|
||||
companyLogin: Property.ShortText({
|
||||
displayName: 'Company Login',
|
||||
description:
|
||||
'Your Simplybook company login (e.g., "yourcompany" from yourcompany.simplybook.me)',
|
||||
required: true
|
||||
}),
|
||||
userLogin: Property.ShortText({
|
||||
displayName: 'User Login',
|
||||
description: 'Your admin user login associated with the company',
|
||||
required: true
|
||||
}),
|
||||
userPassword: Property.ShortText({
|
||||
displayName: 'User Password',
|
||||
description: 'Your admin user password',
|
||||
required: true
|
||||
})
|
||||
},
|
||||
required: true
|
||||
});
|
||||
|
||||
export type SimplybookAuth = {
|
||||
companyLogin: string;
|
||||
userLogin: string;
|
||||
userPassword: string;
|
||||
};
|
||||
|
||||
interface JsonRpcResponse<T = any> {
|
||||
jsonrpc: string;
|
||||
result?: T;
|
||||
error?: { code: number; message: string; data?: any };
|
||||
id: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get access token for Simplybook Admin API
|
||||
*
|
||||
* Uses getUserToken method with user credentials for Admin API authentication.
|
||||
* Headers: X-Company-Login, X-User-Token
|
||||
*
|
||||
* @param auth - SimplybookAuth object with user credentials
|
||||
* @returns The user token to be used in X-User-Token header
|
||||
*/
|
||||
export async function getAccessToken(auth: SimplybookAuth): Promise<string> {
|
||||
try {
|
||||
const response = await httpClient.sendRequest<JsonRpcResponse<string>>({
|
||||
method: HttpMethod.POST,
|
||||
url: 'https://user-api.simplybook.me/login',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: {
|
||||
jsonrpc: '2.0',
|
||||
method: 'getUserToken',
|
||||
params: [auth.companyLogin, auth.userLogin, auth.userPassword],
|
||||
id: 1
|
||||
},
|
||||
timeout: 15000
|
||||
});
|
||||
|
||||
if (response.body?.error) {
|
||||
const errorCode = response.body.error.code;
|
||||
const errorMessage = response.body.error.message;
|
||||
|
||||
// Provide helpful error messages based on error codes
|
||||
let helpfulMessage = errorMessage;
|
||||
if (errorCode === -33001) helpfulMessage = 'Company does not exist';
|
||||
else if (errorCode === -33002) helpfulMessage = 'Wrong API key';
|
||||
else if (errorCode === -33003)
|
||||
helpfulMessage = 'User with this login and password not found';
|
||||
else if (errorCode === -33004) helpfulMessage = 'User is blocked';
|
||||
else if (errorCode === -33005)
|
||||
helpfulMessage =
|
||||
'You are not allowed to use this application when HIPAA Custom Feature is enabled';
|
||||
|
||||
throw new Error(
|
||||
`Simplybook authentication error: ${helpfulMessage} (code: ${errorCode})`
|
||||
);
|
||||
}
|
||||
|
||||
if (response.body?.result) {
|
||||
return response.body.result;
|
||||
}
|
||||
|
||||
throw new Error('Failed to get access token: No result in response');
|
||||
} catch (error: any) {
|
||||
if (error.response) {
|
||||
throw new Error(
|
||||
`Failed to authenticate with Simplybook: ${
|
||||
error.response.status
|
||||
} - ${JSON.stringify(error.response.body)}`
|
||||
);
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a JSON-RPC call to Simplybook Admin API
|
||||
*
|
||||
* Uses the Admin API endpoint (https://user-api.simplybook.me/admin) with X-User-Token header.
|
||||
* For public/client API methods, set usePublicEndpoint to true.
|
||||
*
|
||||
* @param auth - SimplybookAuth object
|
||||
* @param method - The JSON-RPC method name to call
|
||||
* @param params - Array of parameters for the method
|
||||
* @param usePublicEndpoint - Use public endpoint instead of admin (default: false)
|
||||
* @returns The result from the JSON-RPC call
|
||||
*/
|
||||
export async function makeJsonRpcCall<T = any>(
|
||||
auth: SimplybookAuth,
|
||||
method: string,
|
||||
params: any[] = [],
|
||||
usePublicEndpoint = false
|
||||
): Promise<T> {
|
||||
const token = await getAccessToken(auth);
|
||||
|
||||
// Use admin endpoint by default, public endpoint if specified
|
||||
const baseUrl = 'https://user-api.simplybook.me';
|
||||
const url = usePublicEndpoint ? baseUrl : `${baseUrl}/admin`;
|
||||
|
||||
const headers: Record<string, string> = {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Company-Login': auth.companyLogin,
|
||||
'X-User-Token': token
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await httpClient.sendRequest<JsonRpcResponse<T>>({
|
||||
method: HttpMethod.POST,
|
||||
url: url,
|
||||
headers: headers,
|
||||
body: {
|
||||
jsonrpc: '2.0',
|
||||
method: method,
|
||||
params: params,
|
||||
id: 1
|
||||
},
|
||||
timeout: 20000
|
||||
});
|
||||
|
||||
if (response.body?.error) {
|
||||
throw new Error(
|
||||
`Simplybook API error: ${response.body.error.message} (code: ${
|
||||
response.body.error.code
|
||||
})${
|
||||
response.body.error.data
|
||||
? ` - ${JSON.stringify(response.body.error.data)}`
|
||||
: ''
|
||||
}`
|
||||
);
|
||||
}
|
||||
|
||||
if (response.body?.result !== undefined) {
|
||||
return response.body.result;
|
||||
}
|
||||
|
||||
throw new Error('Failed to get result from Simplybook API');
|
||||
} catch (error: any) {
|
||||
if (error.response) {
|
||||
throw new Error(
|
||||
`Simplybook API request failed: ${
|
||||
error.response.status
|
||||
} - ${JSON.stringify(error.response.body)}`
|
||||
);
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,340 @@
|
||||
import { Property } from '@activepieces/pieces-framework';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { SimplybookAuth, makeJsonRpcCall, getAccessToken, simplybookAuth } from './auth';
|
||||
|
||||
interface Client {
|
||||
id: number;
|
||||
name: string;
|
||||
email?: string;
|
||||
phone?: string;
|
||||
}
|
||||
|
||||
interface Service {
|
||||
id: number;
|
||||
name: string;
|
||||
}
|
||||
|
||||
interface Provider {
|
||||
id: number;
|
||||
name: string;
|
||||
}
|
||||
|
||||
interface Booking {
|
||||
id: number;
|
||||
code?: string;
|
||||
start_date?: string;
|
||||
start_time?: string;
|
||||
client_name?: string;
|
||||
event_name?: string;
|
||||
}
|
||||
|
||||
interface NoteType {
|
||||
id: number;
|
||||
name: string;
|
||||
color?: string;
|
||||
}
|
||||
|
||||
export const clientDropdown = Property.Dropdown({
|
||||
auth: simplybookAuth,
|
||||
displayName: 'Client',
|
||||
description: 'Select a client',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first'
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const clients = await makeJsonRpcCall<Client[]>(
|
||||
auth.props,
|
||||
|
||||
'getClientList',
|
||||
['', null]
|
||||
);
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: clients.map((client) => ({
|
||||
label: `${client.name}${client.email ? ` (${client.email})` : ''}${client.phone ? ` - ${client.phone}` : ''}`,
|
||||
value: client.id
|
||||
}))
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Failed to load clients'
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
export const serviceDropdown = Property.Dropdown({
|
||||
auth: simplybookAuth,
|
||||
displayName: 'Service',
|
||||
description: 'Select a service',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first'
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await Promise.race([
|
||||
makeJsonRpcCall<any>( auth.props
|
||||
, 'getEventList', []),
|
||||
new Promise((_, reject) =>
|
||||
setTimeout(() => reject(new Error('Request timeout after 20s')), 20000)
|
||||
)
|
||||
]);
|
||||
|
||||
// Handle different response formats
|
||||
let services: Service[] = [];
|
||||
if (Array.isArray(response)) {
|
||||
services = response;
|
||||
} else if (response && typeof response === 'object') {
|
||||
// Check if it's an object with numeric keys (object-formatted array)
|
||||
const keys = Object.keys(response);
|
||||
if (keys.length > 0 && keys.every((k) => !isNaN(Number(k)))) {
|
||||
services = Object.values(response);
|
||||
} else {
|
||||
services = response.data || response.result || response.items || [];
|
||||
}
|
||||
}
|
||||
|
||||
if (!Array.isArray(services) || services.length === 0) {
|
||||
return {
|
||||
disabled: false,
|
||||
options: [],
|
||||
placeholder: services.length === 0 ? 'No services found' : 'Invalid response format'
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: services.map((service) => ({
|
||||
label: service.name || `Service ${service.id}`,
|
||||
value: service.id
|
||||
}))
|
||||
};
|
||||
} catch (error: any) {
|
||||
console.error('Failed to load services:', error);
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: `Error: ${error.message?.substring(0, 50) || 'Failed to load'}`
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
export const providerDropdown = Property.Dropdown({
|
||||
auth: simplybookAuth,
|
||||
displayName: 'Provider',
|
||||
description: 'Select a service provider',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first'
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await Promise.race([
|
||||
makeJsonRpcCall<any>( auth.props
|
||||
, 'getUnitList', []),
|
||||
new Promise((_, reject) =>
|
||||
setTimeout(() => reject(new Error('Request timeout after 20s')), 20000)
|
||||
)
|
||||
]);
|
||||
|
||||
// Handle different response formats
|
||||
let providers: Provider[] = [];
|
||||
if (Array.isArray(response)) {
|
||||
providers = response;
|
||||
} else if (response && typeof response === 'object') {
|
||||
// Check if it's an object with numeric keys (object-formatted array)
|
||||
const keys = Object.keys(response);
|
||||
if (keys.length > 0 && keys.every((k) => !isNaN(Number(k)))) {
|
||||
providers = Object.values(response);
|
||||
} else {
|
||||
providers = response.data || response.result || response.items || [];
|
||||
}
|
||||
}
|
||||
|
||||
if (!Array.isArray(providers) || providers.length === 0) {
|
||||
return {
|
||||
disabled: false,
|
||||
options: [],
|
||||
placeholder: providers.length === 0 ? 'No providers found' : 'Invalid response format'
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: providers.map((provider) => ({
|
||||
label: provider.name || `Provider ${provider.id}`,
|
||||
value: provider.id
|
||||
}))
|
||||
};
|
||||
} catch (error: any) {
|
||||
console.error('Failed to load providers:', error);
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: `Error: ${error.message?.substring(0, 50) || 'Failed to load'}`
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
export const noteTypeDropdown = Property.Dropdown({
|
||||
auth: simplybookAuth,
|
||||
displayName: 'Note Type',
|
||||
description: 'Select a note type',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first'
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const authData = auth.props
|
||||
;
|
||||
const token = await getAccessToken(authData);
|
||||
|
||||
const response = await Promise.race([
|
||||
httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: 'https://user-api-v2.simplybook.me/admin/calendar-notes/types',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Company-Login': authData.companyLogin,
|
||||
'X-Token': token
|
||||
},
|
||||
timeout: 20000
|
||||
}),
|
||||
new Promise((_, reject) =>
|
||||
setTimeout(() => reject(new Error('Request timeout after 20s')), 20000)
|
||||
)
|
||||
]);
|
||||
|
||||
// Handle different response formats
|
||||
const responseData = (response as any).body;
|
||||
let noteTypes: NoteType[] = [];
|
||||
|
||||
if (Array.isArray(responseData)) {
|
||||
noteTypes = responseData;
|
||||
} else if (responseData && typeof responseData === 'object') {
|
||||
const keys = Object.keys(responseData);
|
||||
if (keys.length > 0 && keys.every((k) => !isNaN(Number(k)))) {
|
||||
noteTypes = Object.values(responseData);
|
||||
} else {
|
||||
noteTypes = responseData.data || responseData.result || responseData.items || [];
|
||||
}
|
||||
}
|
||||
|
||||
if (!Array.isArray(noteTypes) || noteTypes.length === 0) {
|
||||
return {
|
||||
disabled: false,
|
||||
options: [],
|
||||
placeholder: noteTypes.length === 0 ? 'No note types found' : 'Invalid response format'
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: noteTypes.map((noteType) => ({
|
||||
label: noteType.name || `Note Type ${noteType.id}`,
|
||||
value: noteType.id
|
||||
}))
|
||||
};
|
||||
} catch (error: any) {
|
||||
console.error('Failed to load note types:', error);
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: `Error: ${error.message?.substring(0, 50) || 'Failed to load'}`
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
export const bookingDropdown = Property.Dropdown({
|
||||
auth: simplybookAuth,
|
||||
displayName: 'Booking',
|
||||
description: 'Select a booking',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first'
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
// Get recent bookings (last 30 days)
|
||||
const today = new Date();
|
||||
const thirtyDaysAgo = new Date();
|
||||
thirtyDaysAgo.setDate(today.getDate() - 30);
|
||||
|
||||
const dateFrom = thirtyDaysAgo.toISOString().split('T')[0];
|
||||
const dateTo = today.toISOString().split('T')[0];
|
||||
|
||||
const bookings = await makeJsonRpcCall<Booking[]>(
|
||||
auth.props,
|
||||
|
||||
'getBookings',
|
||||
[{ date_from: dateFrom, date_to: dateTo, booking_type: 'non_cancelled' }]
|
||||
);
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: bookings.map((booking) => {
|
||||
const label = [
|
||||
booking.code ? `#${booking.code}` : `ID: ${booking.id}`,
|
||||
booking.start_date,
|
||||
booking.start_time,
|
||||
booking.client_name,
|
||||
booking.event_name
|
||||
]
|
||||
.filter(Boolean)
|
||||
.join(' - ');
|
||||
|
||||
return {
|
||||
label: label || `Booking ${booking.id}`,
|
||||
value: booking.id
|
||||
};
|
||||
})
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Failed to load bookings'
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,3 @@
|
||||
export * from './auth';
|
||||
export * from './helpers';
|
||||
export * from './webhooks';
|
||||
@@ -0,0 +1,35 @@
|
||||
import { SimplybookAuth, makeJsonRpcCall } from './auth';
|
||||
|
||||
export type WebhookNotificationType = 'create' | 'cancel' | 'new_client' | 'change' | 'create_invoice';
|
||||
|
||||
/**
|
||||
* Subscribe to webhook notifications
|
||||
* @param auth - SimplybookAuth object
|
||||
* @param url - Webhook URL to receive notifications
|
||||
* @param notificationType - Type of notification to subscribe to
|
||||
* @returns Boolean indicating success
|
||||
*/
|
||||
export async function subscribeWebhook(
|
||||
auth: SimplybookAuth,
|
||||
url: string,
|
||||
notificationType: WebhookNotificationType
|
||||
): Promise<boolean> {
|
||||
const params = [url, notificationType];
|
||||
const result = await makeJsonRpcCall<boolean>(auth, 'pluginZapierSubscribe', params);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get last notification update datetime
|
||||
* @param auth - SimplybookAuth object
|
||||
* @param type - Notification type
|
||||
* @returns Last update datetime string
|
||||
*/
|
||||
export async function getLastNotificationUpdate(
|
||||
auth: SimplybookAuth,
|
||||
type: WebhookNotificationType
|
||||
): Promise<string> {
|
||||
const params = [type];
|
||||
const result = await makeJsonRpcCall<string>(auth, 'getLastNotificationUpdate', params);
|
||||
return result;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { simplybookAuth} from '../common';
|
||||
|
||||
export const bookingCanceled = createTrigger({
|
||||
auth: simplybookAuth,
|
||||
name: 'booking_canceled',
|
||||
displayName: 'Booking Cancellation',
|
||||
description: 'Triggers when a booking is canceled in SimplyBook.me',
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
props: {},
|
||||
async onEnable(context) {
|
||||
// Subscribe to 'cancel' event webhook will be added through simplybook platform
|
||||
},
|
||||
async onDisable(context) {
|
||||
// Subscribe to 'cancel' event webhook will be removed through simplybook platform
|
||||
},
|
||||
async run(context) {
|
||||
const body = context.payload.body as any;
|
||||
if (body.notification_type !== 'cancel') {
|
||||
return [];
|
||||
}
|
||||
return [body];
|
||||
},
|
||||
sampleData: {
|
||||
booking_id: '4',
|
||||
booking_hash: 'cfae2b34e23ec6e68545d60532234ae8',
|
||||
company: 'examplecompany',
|
||||
notification_type: 'cancel',
|
||||
webhook_timestamp: 1759919125,
|
||||
signature_algo: 'sha256',
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,33 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { simplybookAuth } from '../common';
|
||||
|
||||
|
||||
export const bookingChanged = createTrigger({
|
||||
auth: simplybookAuth,
|
||||
name: 'booking_changed',
|
||||
displayName: 'Booking Change',
|
||||
description: 'Triggers when a booking is changed in SimplyBook.me',
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
props: {},
|
||||
async onEnable(context) {
|
||||
// Subscribe to 'change' event webhook will be added through simplybook platform
|
||||
},
|
||||
async onDisable(context) {
|
||||
// Subscribe to 'change' event webhook will be removed through simplybook platform
|
||||
},
|
||||
async run(context) {
|
||||
const body = context.payload.body as any;
|
||||
if(body.notification_type !== 'change') {
|
||||
return [];
|
||||
}
|
||||
return [body];
|
||||
},
|
||||
sampleData: {
|
||||
booking_id: '4',
|
||||
booking_hash: 'cfae2b34e23ec6e68545d60532234ae8',
|
||||
company: 'examplecompany',
|
||||
notification_type: 'change',
|
||||
webhook_timestamp: 1759919125,
|
||||
signature_algo: 'sha256',
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,6 @@
|
||||
export * from './booking-canceled';
|
||||
export * from './booking-changed';
|
||||
export * from './new-booking';
|
||||
export * from './new-client';
|
||||
export * from './new-invoice';
|
||||
export * from './new-offer';
|
||||
@@ -0,0 +1,32 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { simplybookAuth } from '../common';
|
||||
|
||||
export const newBooking = createTrigger({
|
||||
auth: simplybookAuth,
|
||||
name: 'new_booking',
|
||||
displayName: 'New Booking',
|
||||
description: 'Triggers when a new booking is created in SimplyBook.me',
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
props: {},
|
||||
async onEnable(context) {
|
||||
// Subscribe to 'change' event webhook will be added through simplybook platform
|
||||
},
|
||||
async onDisable(context) {
|
||||
// Subscribe to 'change' event webhook will be removed through simplybook platform
|
||||
},
|
||||
async run(context) {
|
||||
const body = context.payload.body as any;
|
||||
if (body.notification_type !== 'create') {
|
||||
return [];
|
||||
}
|
||||
return [body];
|
||||
},
|
||||
sampleData: {
|
||||
booking_id: '4',
|
||||
booking_hash: 'cfae2b34e23ec6e68545d60532234ae8',
|
||||
company: 'examplecompany',
|
||||
notification_type: 'create',
|
||||
webhook_timestamp: 1759919125,
|
||||
signature_algo: 'sha256',
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,74 @@
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
createTrigger,
|
||||
TriggerStrategy
|
||||
} from '@activepieces/pieces-framework';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
Polling,
|
||||
pollingHelper
|
||||
} from '@activepieces/pieces-common';
|
||||
import { simplybookAuth, makeJsonRpcCall } from '../common';
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof simplybookAuth>, Record<string, never>> = {
|
||||
strategy: DedupeStrategy.LAST_ITEM,
|
||||
items: async ({ auth }) => {
|
||||
const authData = auth;
|
||||
|
||||
const clients = await makeJsonRpcCall<any[]>(
|
||||
authData.props,
|
||||
'getClientList',
|
||||
['', null]
|
||||
);
|
||||
|
||||
// Handle object with numeric keys format
|
||||
let clientArray: any[] = [];
|
||||
if (Array.isArray(clients)) {
|
||||
clientArray = clients;
|
||||
} else if (clients && typeof clients === 'object') {
|
||||
const keys = Object.keys(clients);
|
||||
if (keys.length > 0 && keys.every((k) => !isNaN(Number(k)))) {
|
||||
clientArray = Object.values(clients);
|
||||
}
|
||||
}
|
||||
|
||||
return clientArray
|
||||
.sort((a, b) => b.id - a.id)
|
||||
.map((client) => ({
|
||||
id: client.id,
|
||||
data: client
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
export const newClient = createTrigger({
|
||||
auth: simplybookAuth,
|
||||
name: 'new_client',
|
||||
displayName: 'New Client',
|
||||
description: 'Triggers when a new client is added (via booking or manually) in SimplyBook.me',
|
||||
type: TriggerStrategy.POLLING,
|
||||
props: {},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, context);
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
sampleData: {
|
||||
id: 12345,
|
||||
name: 'John Doe',
|
||||
email: 'john.doe@example.com',
|
||||
phone: '+1234567890',
|
||||
address: '123 Main St',
|
||||
city: 'New York',
|
||||
zip: '10001',
|
||||
country: 'USA',
|
||||
created_at: '2025-10-05T10:30:00.000Z'
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,124 @@
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
createTrigger,
|
||||
TriggerStrategy
|
||||
} from '@activepieces/pieces-framework';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
Polling,
|
||||
pollingHelper
|
||||
} from '@activepieces/pieces-common';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { simplybookAuth, getAccessToken } from '../common';
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof simplybookAuth>, Record<string, never>> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, lastFetchEpochMS }) => {
|
||||
const authData = auth;
|
||||
const token = await getAccessToken(authData.props);
|
||||
|
||||
// Calculate datetime range based on last fetch time
|
||||
const now = new Date();
|
||||
const lastFetch = lastFetchEpochMS ? new Date(lastFetchEpochMS) : new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000); // Default: 30 days ago
|
||||
|
||||
// Format as YYYY-MM-DD HH:MM:SS
|
||||
const formatDateTime = (date: Date) => {
|
||||
const pad = (n: number) => n.toString().padStart(2, '0');
|
||||
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;
|
||||
};
|
||||
|
||||
const datetimeFrom = formatDateTime(lastFetch);
|
||||
const datetimeTo = formatDateTime(now);
|
||||
|
||||
// Get invoices using REST API with datetime filter
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `https://user-api-v2.simplybook.me/admin/invoices?filter[datetime_from]=${encodeURIComponent(datetimeFrom)}&filter[datetime_to]=${encodeURIComponent(datetimeTo)}`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Company-Login': authData.props.companyLogin,
|
||||
'X-Token': token
|
||||
},
|
||||
timeout: 20000
|
||||
});
|
||||
|
||||
// Handle paginated response
|
||||
const responseData = response.body as any;
|
||||
let invoiceArray: any[] = [];
|
||||
|
||||
if (Array.isArray(responseData)) {
|
||||
invoiceArray = responseData;
|
||||
} else if (responseData && typeof responseData === 'object') {
|
||||
// Check for paginated response structure
|
||||
invoiceArray = responseData.data || responseData.result || responseData.items || [];
|
||||
|
||||
// Handle object with numeric keys format
|
||||
if (!Array.isArray(invoiceArray) && typeof invoiceArray === 'object') {
|
||||
const keys = Object.keys(invoiceArray);
|
||||
if (keys.length > 0 && keys.every((k) => !isNaN(Number(k)))) {
|
||||
invoiceArray = Object.values(invoiceArray);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Filter invoices created after last fetch
|
||||
const filteredInvoices = invoiceArray.filter((invoice) => {
|
||||
if (!invoice.created_at && !invoice.date) return false;
|
||||
const invoiceTime = new Date(invoice.created_at || invoice.date).getTime();
|
||||
return invoiceTime > lastFetchEpochMS;
|
||||
});
|
||||
|
||||
// Sort by creation date (most recent first)
|
||||
return filteredInvoices
|
||||
.sort((a, b) => {
|
||||
const dateA = new Date(a.created_at || a.date || 0).getTime();
|
||||
const dateB = new Date(b.created_at || b.date || 0).getTime();
|
||||
return dateB - dateA;
|
||||
})
|
||||
.map((invoice) => ({
|
||||
epochMilliSeconds: new Date(invoice.created_at || invoice.date).getTime(),
|
||||
data: invoice
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
export const newInvoice = createTrigger({
|
||||
auth: simplybookAuth,
|
||||
name: 'new_invoice',
|
||||
displayName: 'New Invoice',
|
||||
description: 'Triggers when a new invoice is generated/paid in SimplyBook.me (requires Accept Payments feature)',
|
||||
type: TriggerStrategy.POLLING,
|
||||
props: {},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, context);
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
sampleData: {
|
||||
id: 98765,
|
||||
booking_id: 123456,
|
||||
client_id: 12345,
|
||||
amount: 100.00,
|
||||
currency: 'USD',
|
||||
status: 'paid',
|
||||
payment_method: 'credit_card',
|
||||
created_at: '2025-10-05T14:30:00.000Z',
|
||||
paid_at: '2025-10-05T14:35:00.000Z',
|
||||
invoice_number: 'INV-2025-001',
|
||||
items: [
|
||||
{
|
||||
description: 'Consultation Service',
|
||||
quantity: 1,
|
||||
unit_price: 100.00,
|
||||
total: 100.00
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,113 @@
|
||||
import {
|
||||
createTrigger,
|
||||
AppConnectionValueForAuthProperty,
|
||||
TriggerStrategy
|
||||
} from '@activepieces/pieces-framework';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
Polling,
|
||||
pollingHelper
|
||||
} from '@activepieces/pieces-common';
|
||||
import { simplybookAuth, makeJsonRpcCall } from '../common';
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof simplybookAuth>, Record<string, never>> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, lastFetchEpochMS }) => {
|
||||
const authData = auth;
|
||||
|
||||
// Calculate date range based on last fetch time
|
||||
const now = new Date();
|
||||
const lastFetch = lastFetchEpochMS ? new Date(lastFetchEpochMS) : new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000); // Default: 7 days ago
|
||||
|
||||
const dateFrom = lastFetch.toISOString().split('T')[0];
|
||||
const dateTo = now.toISOString().split('T')[0];
|
||||
|
||||
// Get bookings with promo: false (offers/proposals)
|
||||
const bookings = await makeJsonRpcCall<any[]>(authData.props, 'getBookings', [
|
||||
{
|
||||
created_date_from: dateFrom,
|
||||
created_date_to: dateTo,
|
||||
booking_type: 'non_cancelled',
|
||||
order: 'record_date'
|
||||
}
|
||||
]);
|
||||
|
||||
// Handle object with numeric keys format
|
||||
let bookingArray: any[] = [];
|
||||
if (Array.isArray(bookings)) {
|
||||
bookingArray = bookings;
|
||||
} else if (bookings && typeof bookings === 'object') {
|
||||
const keys = Object.keys(bookings);
|
||||
if (keys.length > 0 && keys.every((k) => !isNaN(Number(k)))) {
|
||||
bookingArray = Object.values(bookings);
|
||||
}
|
||||
}
|
||||
|
||||
// Filter bookings where promo === false (offers/proposals)
|
||||
const filteredOffers = bookingArray.filter((booking) => {
|
||||
if (!booking.record_date) return false;
|
||||
const recordTime = new Date(booking.record_date).getTime();
|
||||
// Check if promo is explicitly false (indicating an offer/proposal)
|
||||
const isOffer = booking.promo === false;
|
||||
return recordTime > lastFetchEpochMS && isOffer;
|
||||
});
|
||||
|
||||
// Sort by record_date (most recent first)
|
||||
return filteredOffers
|
||||
.sort((a, b) => {
|
||||
const dateA = new Date(a.record_date || 0).getTime();
|
||||
const dateB = new Date(b.record_date || 0).getTime();
|
||||
return dateB - dateA;
|
||||
})
|
||||
.map((offer) => ({
|
||||
epochMilliSeconds: new Date(offer.record_date).getTime(),
|
||||
data: offer
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
export const newOffer = createTrigger({
|
||||
auth: simplybookAuth,
|
||||
name: 'new_offer',
|
||||
displayName: 'New Offer',
|
||||
description: 'Triggers when a new offer (proposal or quote) is created (bookings with promo: false)',
|
||||
type: TriggerStrategy.POLLING,
|
||||
props: {},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, context);
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
sampleData: {
|
||||
id: 2,
|
||||
record_date: '2025-10-08 09:22:32',
|
||||
start_date: '2025-10-08 15:00:00',
|
||||
end_date: '2025-10-08 16:00:00',
|
||||
client_timezone: null,
|
||||
unit_id: '3',
|
||||
text: 'client fort',
|
||||
client: 'client fort',
|
||||
unit: 'providertest',
|
||||
unit_email: 'provider@example.com',
|
||||
event: 'Consultation',
|
||||
event_id: '2',
|
||||
is_confirm: '1',
|
||||
client_id: '1',
|
||||
client_phone: '+1234567890',
|
||||
client_email: 'client@example.com',
|
||||
offset: '0',
|
||||
comment: 'Offer for consultation service',
|
||||
code: '23lt1xy7',
|
||||
event_duration: '60',
|
||||
promo: false,
|
||||
promo_code: 'OFFER2025',
|
||||
discount: 10.00
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user