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,188 @@
|
||||
{
|
||||
"Time tracking made easy": "Zeiterfassung leicht gemacht",
|
||||
"E-Mail": "E-Mail",
|
||||
"API-Token": "API-Token",
|
||||
"Company Name": "Firmenname",
|
||||
"Company E-Mail": "Firma E-Mail",
|
||||
"The email of your clockodo user": "Die E-Mail Ihres Clockodo-Benutzers",
|
||||
"Your api token (can be found in profile settings)": "Ihr Api-Token (finden Sie in den Profileinstellungen)",
|
||||
"Your company name or app name": "Firmenname oder App-Name",
|
||||
"A contact email for your company or app": "Eine Kontakt-E-Mail für Ihr Unternehmen oder Ihre App",
|
||||
"Create Entry": "Eintrag erstellen",
|
||||
"Get Entry": "Eintrag abrufen",
|
||||
"Get Entries": "Einträge abrufen",
|
||||
"Update Entry": "Eintrag aktualisieren",
|
||||
"Delete Entry": "Eintrag löschen",
|
||||
"Create Customer": "Kunde erstellen",
|
||||
"Get Customer": "Kunde erhalten",
|
||||
"Update Customer": "Kunde aktualisieren",
|
||||
"Get Customers": "Kunden holen",
|
||||
"Delete Customer": "Kunden löschen",
|
||||
"Create Project": "Projekt erstellen",
|
||||
"Get Project": "Projekt holen",
|
||||
"Get Projects": "Projekte abrufen",
|
||||
"Update Project": "Projekt aktualisieren",
|
||||
"Delete Project": "Projekt löschen",
|
||||
"Create Service": "Service erstellen",
|
||||
"Get Service": "Service abrufen",
|
||||
"Update Service": "Update-Dienst",
|
||||
"Get Services": "Services abrufen",
|
||||
"Delete Service": "Service löschen",
|
||||
"Get Team": "Team holen",
|
||||
"Get Teams": "Teams holen",
|
||||
"Get User": "Benutzer holen",
|
||||
"Get Users": "Get Users",
|
||||
"Create User": "Benutzer erstellen",
|
||||
"Update User": "Benutzer aktualisieren",
|
||||
"Delete User": "Benutzer löschen",
|
||||
"Create Absence": "Abwesenheit erstellen",
|
||||
"Get Absence": "Abwesenheit",
|
||||
"Update Absence": "Abwesenheit aktualisieren",
|
||||
"Get Absences": "Erhalte Abwesenheit",
|
||||
"Delete Absence": "Abwesenheit löschen",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Creates an entry in clockodo": "Erstellt einen Eintrag in clockodo",
|
||||
"Retrieves a single entry from clockodo": "Ruft einen einzelnen Eintrag von Clockodo ab",
|
||||
"Fetches entries from clockodo": "Ruft Einträge von Clockodo ab",
|
||||
"Updates an entry in clockodo": "Aktualisiert einen Eintrag in clockodo",
|
||||
"Deletes an entry in clockodo": "Löscht einen Eintrag in Clockodo",
|
||||
"Creates a customer in clockodo": "Erstellt einen Kunden in clockodo",
|
||||
"Retrieves a single customer from clockodo": "Ruft einen einzelnen Kunden von Clockodo ab",
|
||||
"Updates a customer in clockodo": "Aktualisiert einen Kunden in clockodo",
|
||||
"Fetches customers from clockodo": "Lädt Kunden von clockodo",
|
||||
"Deletes a customer in clockodo": "Löscht einen Kunden in Clockodo",
|
||||
"Creates a project in clockodo": "Erstellt ein Projekt in clockodo",
|
||||
"Retrieves a single project from clockodo": "Ruft ein einzelnes Projekt von Clockodo ab",
|
||||
"Fetches projects from clockodo": "Ruft Projekte von Clockodo ab",
|
||||
"Updates a project in clockodo": "Aktualisiert ein Projekt in clockodo",
|
||||
"Deletes a project in clockodo": "Löscht ein Projekt in Clockodo",
|
||||
"Creates a service in clockodo": "Erstellt einen Dienst in Clockodo",
|
||||
"Retrieves a single service from clockodo": "Ruft einen einzigen Dienst von Clockodo ab",
|
||||
"Updates a service in clockodo": "Aktualisiert einen Dienst in Clockodo",
|
||||
"Fetches services from clockodo": "Ruft Dienste von Clockodo ab",
|
||||
"Deletes a service in clockodo": "Löscht einen Dienst in Clockodo",
|
||||
"Retrieves a single team from clockodo": "Ruft ein einzelnes Team von Clockodo ab",
|
||||
"Fetches teams from clockodo": "Ruft Teams von Clockodo ab",
|
||||
"Retrieves a single user from clockodo": "Ruft einen einzelnen Benutzer von clockodo ab",
|
||||
"Fetches users from clockodo": "Lädt Benutzer von clockodo",
|
||||
"Creates a user in clockodo": "Erstellt einen Benutzer in clockodo",
|
||||
"Updates a user in clockodo": "Aktualisiert einen Benutzer in clockodo",
|
||||
"Deletes a user in clockodo": "Löscht einen Benutzer in clockodo",
|
||||
"Creates a absence in clockodo": "Erstellt eine Abwesenheit in Clockodo",
|
||||
"Retrieves a single absence from clockodo": "Ruft eine einzelne Abwesenheit von Clockodo ab",
|
||||
"Updates an absence in clockodo": "Aktualisiert Abwesenheit in Clockodo",
|
||||
"Fetches absences from clockodo": "Abrufen der Abwesenheit von Uhr",
|
||||
"Deletes an absence in clockodo": "Löscht Abwesenheit in der Uhr",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Customer": "Kunde",
|
||||
"Project": "Projekt",
|
||||
"Service": "Service",
|
||||
"Start Time": "Startzeit",
|
||||
"End Time": "Endzeit",
|
||||
"Description": "Beschreibung",
|
||||
"Hourly Rate": "Stundensatz",
|
||||
"User": "Benutzer",
|
||||
"Entry ID": "Eintrag-ID",
|
||||
"Start Date": "Startdatum",
|
||||
"End Date": "Enddatum",
|
||||
"Customer ID Filter": "Kunden-ID Filter",
|
||||
"Project ID Filter": "Projekt ID-Filter",
|
||||
"Service ID Filter": "Dienst-ID-Filter",
|
||||
"Billable": "Abrechenbar",
|
||||
"Billed": "Abgerechnet",
|
||||
"Enhanced List": "Erweiterte Liste",
|
||||
"Page": "Seite",
|
||||
"Name": "Name",
|
||||
"Number": "Zahl",
|
||||
"Active": "Aktiv",
|
||||
"Note": "Notiz",
|
||||
"Color": "Farbe",
|
||||
"Active Filter": "Aktiver Filter",
|
||||
"Budget": "Budget",
|
||||
"Budget in hours?": "Budget in Stunden?",
|
||||
"Soft Budget": "Soft-Budget",
|
||||
"Completed": "Abgeschlossen",
|
||||
"Billed Amount": "Rechnungsbetrag",
|
||||
"Billing Complete": "Abrechnung abgeschlossen",
|
||||
"Team": "Team",
|
||||
"Role": "Rolle",
|
||||
"Language": "Sprache",
|
||||
"Wage Type": "Lohnart",
|
||||
"Can see absences": "Darf Abwesenheit sehen",
|
||||
"Can manage absences": "Darf Abwesenheit verwalten",
|
||||
"Can add customers": "Kann Kunden hinzufügen",
|
||||
"Type": "Typ",
|
||||
"Half Days": "Halbe Tage",
|
||||
"Approved": "Genehmigt",
|
||||
"Sick Note": "Kranke Notiz",
|
||||
"Absence ID": "Abwesenheitsnummer",
|
||||
"Status": "Status",
|
||||
"Year": "Jahr",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopfzeilen",
|
||||
"Query Parameters": "Abfrageparameter",
|
||||
"Body": "Körper",
|
||||
"Response is Binary ?": "Antwort ist binär?",
|
||||
"No Error on Failure": "Kein Fehler bei Fehler",
|
||||
"Timeout (in seconds)": "Timeout (in Sekunden)",
|
||||
"The ID of the customer": "Die ID des Kunden",
|
||||
"The ID of the project": "Die ID des Projekts",
|
||||
"The ID of the service": "Die ID des Dienstes",
|
||||
"The ID of the user": "Die ID des Benutzers",
|
||||
"Filter entries by their user": "Einträge nach ihrem Benutzer filtern",
|
||||
"Filter entries by their customer": "Einträge nach Kunden filtern",
|
||||
"Filter entries by their project": "Einträge nach Projekt filtern",
|
||||
"Filter entries by their service": "Einträge nach ihrem Dienst filtern",
|
||||
"Only show entries that are billable": "Nur abrechnungsfähige Einträge anzeigen",
|
||||
"Only show entries that are already billed": "Nur Einträge anzeigen, die bereits abgerechnet sind",
|
||||
"Retrieves additional information about the entries": "Ruft zusätzliche Informationen über die Einträge ab",
|
||||
"Reads only the specified page": "Liest nur die angegebene Seite",
|
||||
"Filter customers by their active status": "Kunden nach ihrem aktiven Status filtern",
|
||||
"Filter projects by their customer": "Projekte nach Kunden filtern",
|
||||
"The ID of the team": "Die ID des Teams",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
|
||||
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
|
||||
"Orange": "Orange",
|
||||
"Yellow": "Gelb",
|
||||
"Green": "Grün",
|
||||
"Caribean": "Caribean",
|
||||
"Lightblue": "Lightblue",
|
||||
"Blue": "Blau",
|
||||
"Purple": "Lila",
|
||||
"Magenta": "Magenta",
|
||||
"Pink": "Rosa",
|
||||
"German": "Deutsch",
|
||||
"English": "Englisch",
|
||||
"French": "Französisch",
|
||||
"Salary": "Gehalt",
|
||||
"Hourly wage": "Stundenlohn",
|
||||
"Regular holiday": "Normaler Urlaub",
|
||||
"Special leaves": "Spezielle Blätter",
|
||||
"Reduction of overtime": "Reduktion der Überstunden",
|
||||
"Sick day": "Kranker Tag",
|
||||
"Sick day of a child": "Kranker Tag eines Kindes",
|
||||
"School / further education": "Schule / Weiterbildung",
|
||||
"Maternity protection": "Mutterschutz",
|
||||
"Home office (planned hours are applied)": "Home Office (geplante Stunden werden angewendet)",
|
||||
"Work out of office (planned hours are applied)": "Arbeiten außerhalb des Büros (geplante Stunden werden angewendet)",
|
||||
"Special leaves (unpaid)": "Spezielle Blätter (unbezahlt)",
|
||||
"Sick day (unpaid)": "Kranker Tag (unbezahlt)",
|
||||
"Sick day of child (unpaid)": "Kranker Tag des Kindes (unbezahlt)",
|
||||
"Quarantine": "Quarantäne",
|
||||
"Military / alternative service (only full days)": "Militärdienst (nur volle Tage)",
|
||||
"Sick day (sickness benefit)": "Kranker Tag (Krankheitsvorteil)",
|
||||
"Requested": "Angefragt",
|
||||
"Declined": "Abgelehnt",
|
||||
"Approval cancelled": "Genehmigung storniert",
|
||||
"Request cancelled": "Anfrage abgebrochen",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD",
|
||||
"New Entry": "Neuer Eintrag",
|
||||
"New Absence Enquiry": "Neue Abwesenheitsanfrage",
|
||||
"Triggers when a new time entry is created": "Wird ausgelöst, wenn ein neuer Zeiteintrag erstellt wird",
|
||||
"Triggers when a new absence enquiry is created": "Wird ausgelöst, wenn eine neue Abwesenheitsanfrage erstellt wird"
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
{
|
||||
"Time tracking made easy": "Control de tiempo facilitado",
|
||||
"E-Mail": "Correo",
|
||||
"API-Token": "API-Token",
|
||||
"Company Name": "Nombre De La Empresa",
|
||||
"Company E-Mail": "E-Mail de la empresa",
|
||||
"The email of your clockodo user": "El correo electrónico de tu usuario de reloj",
|
||||
"Your api token (can be found in profile settings)": "Tu token api (se puede encontrar en la configuración del perfil)",
|
||||
"Your company name or app name": "Nombre de su empresa o apellido",
|
||||
"A contact email for your company or app": "Un correo electrónico de contacto para tu empresa o aplicación",
|
||||
"Create Entry": "Crear entrada",
|
||||
"Get Entry": "Obtener entrada",
|
||||
"Get Entries": "Obtener entradas",
|
||||
"Update Entry": "Actualizar entrada",
|
||||
"Delete Entry": "Eliminar entrada",
|
||||
"Create Customer": "Crear cliente",
|
||||
"Get Customer": "Obtener cliente",
|
||||
"Update Customer": "Actualizar cliente",
|
||||
"Get Customers": "Obtener clientes",
|
||||
"Delete Customer": "Eliminar cliente",
|
||||
"Create Project": "Crear proyecto",
|
||||
"Get Project": "Obtener proyecto",
|
||||
"Get Projects": "Obtener Proyectos",
|
||||
"Update Project": "Actualizar proyecto",
|
||||
"Delete Project": "Eliminar proyecto",
|
||||
"Create Service": "Crear Servicio",
|
||||
"Get Service": "Obtener Servicio",
|
||||
"Update Service": "Actualizar Servicio",
|
||||
"Get Services": "Obtener servicios",
|
||||
"Delete Service": "Eliminar Servicio",
|
||||
"Get Team": "Obtener equipo",
|
||||
"Get Teams": "Obtener Equipos",
|
||||
"Get User": "Obtener usuario",
|
||||
"Get Users": "Get Users",
|
||||
"Create User": "Crear usuario",
|
||||
"Update User": "Actualizar usuario",
|
||||
"Delete User": "Eliminar usuario",
|
||||
"Create Absence": "Crear ausencia",
|
||||
"Get Absence": "Obtener ausencia",
|
||||
"Update Absence": "Actualizar ausencia",
|
||||
"Get Absences": "Obtener ausencias",
|
||||
"Delete Absence": "Eliminar ausencia",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Creates an entry in clockodo": "Crea una entrada en reloj",
|
||||
"Retrieves a single entry from clockodo": "Recuperar una sola entrada del reloj",
|
||||
"Fetches entries from clockodo": "Obtiene entradas de reloj",
|
||||
"Updates an entry in clockodo": "Actualiza una entrada en clockodo",
|
||||
"Deletes an entry in clockodo": "Elimina una entrada en reloj",
|
||||
"Creates a customer in clockodo": "Crea un cliente en clockodo",
|
||||
"Retrieves a single customer from clockodo": "Recuperar un solo cliente de clockodo",
|
||||
"Updates a customer in clockodo": "Actualiza un cliente en clockodo",
|
||||
"Fetches customers from clockodo": "Obtiene clientes de clockodo",
|
||||
"Deletes a customer in clockodo": "Elimina un cliente en clockodo",
|
||||
"Creates a project in clockodo": "Crea un proyecto en reloj",
|
||||
"Retrieves a single project from clockodo": "Recuperar un solo proyecto de reloj",
|
||||
"Fetches projects from clockodo": "Obtiene proyectos de reloj",
|
||||
"Updates a project in clockodo": "Actualiza un proyecto en reloj",
|
||||
"Deletes a project in clockodo": "Elimina un proyecto en reloj",
|
||||
"Creates a service in clockodo": "Crea un servicio en clockodo",
|
||||
"Retrieves a single service from clockodo": "Recuperar un solo servicio desde el reloj",
|
||||
"Updates a service in clockodo": "Actualiza un servicio en clockodo",
|
||||
"Fetches services from clockodo": "Obtiene servicios de reloj",
|
||||
"Deletes a service in clockodo": "Elimina un servicio en reloj",
|
||||
"Retrieves a single team from clockodo": "Recuperar un solo equipo de reloj",
|
||||
"Fetches teams from clockodo": "Obtiene equipos de reloj",
|
||||
"Retrieves a single user from clockodo": "Recuperar un solo usuario de clockodo",
|
||||
"Fetches users from clockodo": "Obtener usuarios del reloj",
|
||||
"Creates a user in clockodo": "Crea un usuario en clockodo",
|
||||
"Updates a user in clockodo": "Actualiza un usuario en clockodo",
|
||||
"Deletes a user in clockodo": "Elimina un usuario en clockodo",
|
||||
"Creates a absence in clockodo": "Crea una ausencia en reloj",
|
||||
"Retrieves a single absence from clockodo": "Recuperar una sola ausencia del reloj",
|
||||
"Updates an absence in clockodo": "Actualiza una ausencia en reloj",
|
||||
"Fetches absences from clockodo": "Obtiene ausencias del reloj",
|
||||
"Deletes an absence in clockodo": "Elimina una ausencia en reloj",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Customer": "Cliente",
|
||||
"Project": "Projekt",
|
||||
"Service": "Servicio",
|
||||
"Start Time": "Hora de inicio",
|
||||
"End Time": "Hora de fin",
|
||||
"Description": "Descripción",
|
||||
"Hourly Rate": "Tarifa por hora",
|
||||
"User": "Usuario",
|
||||
"Entry ID": "ID de entrada",
|
||||
"Start Date": "Fecha de inicio",
|
||||
"End Date": "Fecha de fin",
|
||||
"Customer ID Filter": "Filtro de ID de cliente",
|
||||
"Project ID Filter": "Filtro de ID del proyecto",
|
||||
"Service ID Filter": "Filtro de ID de servicio",
|
||||
"Billable": "Facturable",
|
||||
"Billed": "Facturado",
|
||||
"Enhanced List": "Lista mejorada",
|
||||
"Page": "Pgina",
|
||||
"Name": "Nombre",
|
||||
"Number": "Número",
|
||||
"Active": "Activo",
|
||||
"Note": "Nota",
|
||||
"Color": "Color",
|
||||
"Active Filter": "Filtro activo",
|
||||
"Budget": "Presupuestario",
|
||||
"Budget in hours?": "Presupuesto en horas?",
|
||||
"Soft Budget": "Presupuesto suave",
|
||||
"Completed": "Completado",
|
||||
"Billed Amount": "Importe facturado",
|
||||
"Billing Complete": "Facturación completada",
|
||||
"Team": "Equipo",
|
||||
"Role": "Rol",
|
||||
"Language": "Idioma",
|
||||
"Wage Type": "Tipo de salario",
|
||||
"Can see absences": "Puedes ver ausencias",
|
||||
"Can manage absences": "Puede administrar ausencias",
|
||||
"Can add customers": "Puede añadir clientes",
|
||||
"Type": "Tipo",
|
||||
"Half Days": "Días medianos",
|
||||
"Approved": "Aprobado",
|
||||
"Sick Note": "Nota de enfermedad",
|
||||
"Absence ID": "ID de Ausencia",
|
||||
"Status": "Estado",
|
||||
"Year": "Año",
|
||||
"Method": "Método",
|
||||
"Headers": "Encabezados",
|
||||
"Query Parameters": "Parámetros de consulta",
|
||||
"Body": "Cuerpo",
|
||||
"Response is Binary ?": "¿Respuesta es binaria?",
|
||||
"No Error on Failure": "No hay ningún error en fallo",
|
||||
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
|
||||
"The ID of the customer": "El ID del cliente",
|
||||
"The ID of the project": "El ID del proyecto",
|
||||
"The ID of the service": "El ID del servicio",
|
||||
"The ID of the user": "El ID del usuario",
|
||||
"Filter entries by their user": "Filtrar entradas por su usuario",
|
||||
"Filter entries by their customer": "Filtrar entradas por su cliente",
|
||||
"Filter entries by their project": "Filtrar entradas por su proyecto",
|
||||
"Filter entries by their service": "Filtrar entradas por su servicio",
|
||||
"Only show entries that are billable": "Mostrar sólo las entradas que son facturables",
|
||||
"Only show entries that are already billed": "Mostrar sólo las entradas que ya están facturadas",
|
||||
"Retrieves additional information about the entries": "Recuperar información adicional sobre las entradas",
|
||||
"Reads only the specified page": "Lee sólo la página especificada",
|
||||
"Filter customers by their active status": "Filtrar clientes por su estado activo",
|
||||
"Filter projects by their customer": "Filtrar proyectos por su cliente",
|
||||
"The ID of the team": "El ID del equipo",
|
||||
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
|
||||
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
|
||||
"Orange": "Naranja",
|
||||
"Yellow": "Amarillo",
|
||||
"Green": "Verde",
|
||||
"Caribean": "Caribean",
|
||||
"Lightblue": "Lightblue",
|
||||
"Blue": "Azul",
|
||||
"Purple": "Morado",
|
||||
"Magenta": "Magenta",
|
||||
"Pink": "Rosa",
|
||||
"German": "Alemán",
|
||||
"English": "Inglés",
|
||||
"French": "Francés",
|
||||
"Salary": "Salario",
|
||||
"Hourly wage": "Salario por hora",
|
||||
"Regular holiday": "Vacaciones regulares",
|
||||
"Special leaves": "Hojas especiales",
|
||||
"Reduction of overtime": "Reducción de las horas extraordinarias",
|
||||
"Sick day": "Día de la enfermedad",
|
||||
"Sick day of a child": "Día de un niño enfermo",
|
||||
"School / further education": "Escolar / educación superior",
|
||||
"Maternity protection": "Protección de maternidad",
|
||||
"Home office (planned hours are applied)": "Oficina en casa (se aplican las horas planeadas)",
|
||||
"Work out of office (planned hours are applied)": "Trabajar fuera de la oficina (se aplican las horas planificadas)",
|
||||
"Special leaves (unpaid)": "Hojas especiales (sin pagar)",
|
||||
"Sick day (unpaid)": "Día por enfermedad (no pagado)",
|
||||
"Sick day of child (unpaid)": "Día del niño enfermo (no pagado)",
|
||||
"Quarantine": "Cuarantina",
|
||||
"Military / alternative service (only full days)": "Servicio militar / alternativo (sólo días completos)",
|
||||
"Sick day (sickness benefit)": "Día por enfermedad (beneficio por enfermedad)",
|
||||
"Requested": "Solicitado",
|
||||
"Declined": "Denegado",
|
||||
"Approval cancelled": "Aprobación cancelada",
|
||||
"Request cancelled": "Solicitud cancelada",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO",
|
||||
"New Entry": "Nueva entrada",
|
||||
"New Absence Enquiry": "Nueva consulta de ausencia",
|
||||
"Triggers when a new time entry is created": "Dispara cuando se crea una nueva entrada de tiempo",
|
||||
"Triggers when a new absence enquiry is created": "Dispara cuando se crea una nueva consulta de ausencia"
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
{
|
||||
"Time tracking made easy": "Le suivi du temps simplifié",
|
||||
"E-Mail": "Courriel",
|
||||
"API-Token": "API-Token",
|
||||
"Company Name": "Nom de l’entreprise",
|
||||
"Company E-Mail": "E-Mail de la société",
|
||||
"The email of your clockodo user": "L'e-mail de votre utilisateur d'horodatage",
|
||||
"Your api token (can be found in profile settings)": "Votre jeton api (peut être trouvé dans les paramètres du profil)",
|
||||
"Your company name or app name": "Nom de votre entreprise ou nom d'application",
|
||||
"A contact email for your company or app": "Un e-mail de contact pour votre entreprise ou application",
|
||||
"Create Entry": "Créer une entrée",
|
||||
"Get Entry": "Obtenir une entrée",
|
||||
"Get Entries": "Obtenir des entrées",
|
||||
"Update Entry": "Mettre à jour l'entrée",
|
||||
"Delete Entry": "Supprimer l'entrée",
|
||||
"Create Customer": "Créer un client",
|
||||
"Get Customer": "Obtenir le client",
|
||||
"Update Customer": "Mettre à jour le client",
|
||||
"Get Customers": "Obtenir des clients",
|
||||
"Delete Customer": "Supprimer le client",
|
||||
"Create Project": "Créer un projet",
|
||||
"Get Project": "Obtenir le projet",
|
||||
"Get Projects": "Obtenir des projets",
|
||||
"Update Project": "Mettre à jour le projet",
|
||||
"Delete Project": "Supprimer le projet",
|
||||
"Create Service": "Créer un Service",
|
||||
"Get Service": "Obtenir le service",
|
||||
"Update Service": "Service de mise à jour",
|
||||
"Get Services": "Obtenir des services",
|
||||
"Delete Service": "Supprimer le service",
|
||||
"Get Team": "Obtenir une équipe",
|
||||
"Get Teams": "Obtenir des équipes",
|
||||
"Get User": "Obtenir un utilisateur",
|
||||
"Get Users": "Get Users",
|
||||
"Create User": "Créer un utilisateur",
|
||||
"Update User": "Mise à jour de l'utilisateur",
|
||||
"Delete User": "Supprimer l'utilisateur",
|
||||
"Create Absence": "Créer une absence",
|
||||
"Get Absence": "Absence",
|
||||
"Update Absence": "Mise à jour Absence",
|
||||
"Get Absences": "Obtenez des absences",
|
||||
"Delete Absence": "Supprimer l'absence",
|
||||
"Custom API Call": "Appel API personnalisé",
|
||||
"Creates an entry in clockodo": "Crée une entrée dans l'horloge",
|
||||
"Retrieves a single entry from clockodo": "Récupère une seule entrée à partir de l'horloge",
|
||||
"Fetches entries from clockodo": "Récupère les entrées de l'horloge kodo",
|
||||
"Updates an entry in clockodo": "Met à jour une entrée dans l'horloge",
|
||||
"Deletes an entry in clockodo": "Supprime une entrée dans l'horloge",
|
||||
"Creates a customer in clockodo": "Crée un client dans l'horloge",
|
||||
"Retrieves a single customer from clockodo": "Récupère un seul client de l'horloge",
|
||||
"Updates a customer in clockodo": "Met à jour un client dans l'horloge",
|
||||
"Fetches customers from clockodo": "Récupère les clients de l'horloge",
|
||||
"Deletes a customer in clockodo": "Supprime un client dans l'horloge",
|
||||
"Creates a project in clockodo": "Crée un projet dans l'horloge",
|
||||
"Retrieves a single project from clockodo": "Récupère un seul projet à partir de l'horloge",
|
||||
"Fetches projects from clockodo": "Récupère les projets depuis l'horloge",
|
||||
"Updates a project in clockodo": "Met à jour un projet dans l'horloge",
|
||||
"Deletes a project in clockodo": "Supprime un projet dans l'horloge",
|
||||
"Creates a service in clockodo": "Crée un service dans l'horloge",
|
||||
"Retrieves a single service from clockodo": "Récupère un service unique à partir de l'horloge",
|
||||
"Updates a service in clockodo": "Met à jour un service dans l'horloge",
|
||||
"Fetches services from clockodo": "Récupère les services de l'horloge",
|
||||
"Deletes a service in clockodo": "Supprime un service dans l'horloge",
|
||||
"Retrieves a single team from clockodo": "Récupère une seule équipe à partir de l'horloge",
|
||||
"Fetches teams from clockodo": "Récupère les équipes de l'horloge kodo",
|
||||
"Retrieves a single user from clockodo": "Récupère un seul utilisateur de l'horloge",
|
||||
"Fetches users from clockodo": "Récupère les utilisateurs de l'horloge",
|
||||
"Creates a user in clockodo": "Crée un utilisateur dans l'horloge",
|
||||
"Updates a user in clockodo": "Met à jour un utilisateur dans l'horloge",
|
||||
"Deletes a user in clockodo": "Supprime un utilisateur dans l'horloge",
|
||||
"Creates a absence in clockodo": "Crée une absence dans l'horloge",
|
||||
"Retrieves a single absence from clockodo": "Récupère une seule absence de l'horloge",
|
||||
"Updates an absence in clockodo": "Met à jour une absence dans l'horloge",
|
||||
"Fetches absences from clockodo": "Récupère les absences de l'horloge",
|
||||
"Deletes an absence in clockodo": "Supprime une absence dans l'horloge",
|
||||
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
|
||||
"Customer": "Client",
|
||||
"Project": "Projet",
|
||||
"Service": "Service",
|
||||
"Start Time": "Start Time",
|
||||
"End Time": "Heure de fin",
|
||||
"Description": "Libellé",
|
||||
"Hourly Rate": "Taux horaire",
|
||||
"User": "Utilisateur",
|
||||
"Entry ID": "ID de l'entrée",
|
||||
"Start Date": "Date de début",
|
||||
"End Date": "Date de fin",
|
||||
"Customer ID Filter": "Filtre ID du client",
|
||||
"Project ID Filter": "Filtre ID du projet",
|
||||
"Service ID Filter": "Filtre ID de service",
|
||||
"Billable": "Facturable",
|
||||
"Billed": "Facturé",
|
||||
"Enhanced List": "Liste améliorée",
|
||||
"Page": "Page",
|
||||
"Name": "Nom",
|
||||
"Number": "Number",
|
||||
"Active": "Actif",
|
||||
"Note": "Note",
|
||||
"Color": "Couleur",
|
||||
"Active Filter": "Filtre actif",
|
||||
"Budget": "Budget",
|
||||
"Budget in hours?": "Budget en heures ?",
|
||||
"Soft Budget": "Budget souple",
|
||||
"Completed": "Terminé",
|
||||
"Billed Amount": "Montant facturé",
|
||||
"Billing Complete": "Facturation terminée",
|
||||
"Team": "Équipe",
|
||||
"Role": "Rôle",
|
||||
"Language": "Langue",
|
||||
"Wage Type": "Type de salaire",
|
||||
"Can see absences": "Peut voir les absences",
|
||||
"Can manage absences": "Permet de gérer les absences",
|
||||
"Can add customers": "Peut ajouter des clients",
|
||||
"Type": "Type de texte",
|
||||
"Half Days": "Demi-jours",
|
||||
"Approved": "Approuvé",
|
||||
"Sick Note": "Note de maladie",
|
||||
"Absence ID": "ID d'absence",
|
||||
"Status": "Statut",
|
||||
"Year": "Année",
|
||||
"Method": "Méthode",
|
||||
"Headers": "En-têtes",
|
||||
"Query Parameters": "Paramètres de requête",
|
||||
"Body": "Corps",
|
||||
"Response is Binary ?": "La réponse est Binaire ?",
|
||||
"No Error on Failure": "Aucune erreur en cas d'échec",
|
||||
"Timeout (in seconds)": "Délai d'attente (en secondes)",
|
||||
"The ID of the customer": "L'ID du client",
|
||||
"The ID of the project": "L'ID du projet",
|
||||
"The ID of the service": "L'ID du service",
|
||||
"The ID of the user": "L'ID de l'utilisateur",
|
||||
"Filter entries by their user": "Filtrer les entrées par leur utilisateur",
|
||||
"Filter entries by their customer": "Filtrer les entrées par le client",
|
||||
"Filter entries by their project": "Filtrer les entrées par projet",
|
||||
"Filter entries by their service": "Filtrer les entrées par leur service",
|
||||
"Only show entries that are billable": "Afficher uniquement les entrées qui sont facturables",
|
||||
"Only show entries that are already billed": "Afficher uniquement les entrées qui sont déjà facturées",
|
||||
"Retrieves additional information about the entries": "Récupère des informations supplémentaires sur les entrées",
|
||||
"Reads only the specified page": "Lit seulement la page spécifiée",
|
||||
"Filter customers by their active status": "Filtrer les clients par leur statut actif",
|
||||
"Filter projects by their customer": "Filtrer les projets par leur client",
|
||||
"The ID of the team": "L'ID de l'équipe",
|
||||
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
|
||||
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
|
||||
"Orange": "Orange",
|
||||
"Yellow": "Jaune",
|
||||
"Green": "Vert",
|
||||
"Caribean": "Caribean",
|
||||
"Lightblue": "Lightblue",
|
||||
"Blue": "Bleu",
|
||||
"Purple": "Violet",
|
||||
"Magenta": "Magenta",
|
||||
"Pink": "Rose",
|
||||
"German": "Allemand",
|
||||
"English": "Anglais",
|
||||
"French": "Français",
|
||||
"Salary": "Salaire",
|
||||
"Hourly wage": "Salaire horaire",
|
||||
"Regular holiday": "Vacances régulières",
|
||||
"Special leaves": "Feuilles spéciales",
|
||||
"Reduction of overtime": "Réduction des heures supplémentaires",
|
||||
"Sick day": "Jour malade",
|
||||
"Sick day of a child": "Jour de maladie d'un enfant",
|
||||
"School / further education": "École / formation continue",
|
||||
"Maternity protection": "Protection contre la maternité",
|
||||
"Home office (planned hours are applied)": "Home Office (horaires programmés sont appliqués)",
|
||||
"Work out of office (planned hours are applied)": "Travail en dehors des bureaux (les heures planifiées sont appliquées)",
|
||||
"Special leaves (unpaid)": "Feuilles spéciales (non payées)",
|
||||
"Sick day (unpaid)": "Jour malade (non payé)",
|
||||
"Sick day of child (unpaid)": "Jour malade de l'enfant (non payé)",
|
||||
"Quarantine": "Quarantaine",
|
||||
"Military / alternative service (only full days)": "Service militaire / alternatif (uniquement des jours entiers)",
|
||||
"Sick day (sickness benefit)": "Jour de maladie (bienfaiteur)",
|
||||
"Requested": "Demandé",
|
||||
"Declined": "Refusé",
|
||||
"Approval cancelled": "Approbation annulée",
|
||||
"Request cancelled": "Demande annulée",
|
||||
"GET": "OBTENIR",
|
||||
"POST": "POSTER",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "EFFACER",
|
||||
"DELETE": "SUPPRIMER",
|
||||
"HEAD": "TÊTE",
|
||||
"New Entry": "Nouvelle entrée",
|
||||
"New Absence Enquiry": "Nouvelle demande d'absence",
|
||||
"Triggers when a new time entry is created": "Déclenche quand une nouvelle entrée de temps est créée",
|
||||
"Triggers when a new absence enquiry is created": "Déclenche quand une nouvelle demande d'absence est créée"
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
{
|
||||
"Time tracking made easy": "タイムトラッキングが簡単になりました",
|
||||
"E-Mail": "メール",
|
||||
"API-Token": "API-Token",
|
||||
"Company Name": "会社名",
|
||||
"Company E-Mail": "会社のメールアドレス",
|
||||
"The email of your clockodo user": "あなたのclockodoユーザーのメール",
|
||||
"Your api token (can be found in profile settings)": "あなたのAPIトークン(プロフィールの設定で見つけることができます)",
|
||||
"Your company name or app name": "会社名またはアプリ名",
|
||||
"A contact email for your company or app": "会社またはアプリの連絡先メール",
|
||||
"Create Entry": "エントリを作成",
|
||||
"Get Entry": "エントリーを取得",
|
||||
"Get Entries": "エントリーを取得",
|
||||
"Update Entry": "エントリを更新",
|
||||
"Delete Entry": "項目を削除",
|
||||
"Create Customer": "顧客を作成",
|
||||
"Get Customer": "顧客を取得",
|
||||
"Update Customer": "顧客情報の更新",
|
||||
"Get Customers": "顧客を獲得する",
|
||||
"Delete Customer": "顧客を削除",
|
||||
"Create Project": "プロジェクトを作成",
|
||||
"Get Project": "プロジェクトを取得",
|
||||
"Get Projects": "プロジェクトを取得",
|
||||
"Update Project": "プロジェクトを更新",
|
||||
"Delete Project": "プロジェクトを削除",
|
||||
"Create Service": "サービスを作成",
|
||||
"Get Service": "サービスを取得する",
|
||||
"Update Service": "サービスを更新",
|
||||
"Get Services": "サービスの取得",
|
||||
"Delete Service": "サービスを削除",
|
||||
"Get Team": "チームを取得",
|
||||
"Get Teams": "チームを取得",
|
||||
"Get User": "ユーザーを取得",
|
||||
"Get Users": "Get Users",
|
||||
"Create User": "ユーザーを作成",
|
||||
"Update User": "ユーザーを更新",
|
||||
"Delete User": "ユーザーを削除",
|
||||
"Create Absence": "不在を作成",
|
||||
"Get Absence": "不在になる",
|
||||
"Update Absence": "不在を更新",
|
||||
"Get Absences": "Absencesを入手",
|
||||
"Delete Absence": "不在を削除",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Creates an entry in clockodo": "clockodo でエントリを作成",
|
||||
"Retrieves a single entry from clockodo": "clockodo から単一のエントリを取得します。",
|
||||
"Fetches entries from clockodo": "clockodo から項目をフェッチします。",
|
||||
"Updates an entry in clockodo": "clockodo のエントリを更新",
|
||||
"Deletes an entry in clockodo": "clockodo のエントリを削除します。",
|
||||
"Creates a customer in clockodo": "clockodo で顧客を作成します",
|
||||
"Retrieves a single customer from clockodo": "clockodo から単一の顧客を取得します",
|
||||
"Updates a customer in clockodo": "clockodo で顧客を更新する",
|
||||
"Fetches customers from clockodo": "clockodo から顧客を取得します。",
|
||||
"Deletes a customer in clockodo": "clockodo で顧客を削除します。",
|
||||
"Creates a project in clockodo": "clockodo でプロジェクトを作成",
|
||||
"Retrieves a single project from clockodo": "clockodo から単一のプロジェクトを取得します。",
|
||||
"Fetches projects from clockodo": "clockodo からプロジェクトをフェッチします。",
|
||||
"Updates a project in clockodo": "clockodo でプロジェクトを更新",
|
||||
"Deletes a project in clockodo": "clockodo 内のプロジェクトを削除します",
|
||||
"Creates a service in clockodo": "clockodo でサービスを作成します",
|
||||
"Retrieves a single service from clockodo": "clockodo から単一のサービスを取得します。",
|
||||
"Updates a service in clockodo": "clockodo でサービスを更新",
|
||||
"Fetches services from clockodo": "clockodo からのサービスの取得",
|
||||
"Deletes a service in clockodo": "clockodo でサービスを削除する",
|
||||
"Retrieves a single team from clockodo": "clockodo から単一のチームを取得します。",
|
||||
"Fetches teams from clockodo": "clockodo からチームをフェッチします。",
|
||||
"Retrieves a single user from clockodo": "clockodo から1人のユーザーを取得します。",
|
||||
"Fetches users from clockodo": "clockodo からユーザーを取得します。",
|
||||
"Creates a user in clockodo": "clockodo でユーザーを作成します",
|
||||
"Updates a user in clockodo": "clockodo でユーザーを更新します",
|
||||
"Deletes a user in clockodo": "clockodo でユーザーを削除します。",
|
||||
"Creates a absence in clockodo": "clockodo で不在を作成",
|
||||
"Retrieves a single absence from clockodo": "clockodo から1つの不在を取得します。",
|
||||
"Updates an absence in clockodo": "clockodo で不在を更新",
|
||||
"Fetches absences from clockodo": "clockodo からの欠席をフェッチします。",
|
||||
"Deletes an absence in clockodo": "clockodo 内の不在を削除",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Customer": "顧客",
|
||||
"Project": "プロジェクト",
|
||||
"Service": "サービス",
|
||||
"Start Time": "開始時刻",
|
||||
"End Time": "終了時刻",
|
||||
"Description": "説明",
|
||||
"Hourly Rate": "1時間あたりのレート",
|
||||
"User": "ユーザー",
|
||||
"Entry ID": "エントリ ID",
|
||||
"Start Date": "開始日",
|
||||
"End Date": "終了日",
|
||||
"Customer ID Filter": "顧客IDフィルタ",
|
||||
"Project ID Filter": "プロジェクト ID フィルタ",
|
||||
"Service ID Filter": "サービスIDフィルタ",
|
||||
"Billable": "請求可能",
|
||||
"Billed": "お支払い",
|
||||
"Enhanced List": "拡張リスト",
|
||||
"Page": "ページ",
|
||||
"Name": "Name",
|
||||
"Number": "Number",
|
||||
"Active": "有効",
|
||||
"Note": "メモ",
|
||||
"Color": "色",
|
||||
"Active Filter": "有効なフィルタ",
|
||||
"Budget": "予算",
|
||||
"Budget in hours?": "時間内の予算?",
|
||||
"Soft Budget": "ソフト予算",
|
||||
"Completed": "完了",
|
||||
"Billed Amount": "請求額",
|
||||
"Billing Complete": "請求が完了しました",
|
||||
"Team": "Team",
|
||||
"Role": "ロール",
|
||||
"Language": "言語",
|
||||
"Wage Type": "賃金タイプ",
|
||||
"Can see absences": "欠席を確認できます。",
|
||||
"Can manage absences": "欠席を管理できます。",
|
||||
"Can add customers": "顧客を追加できます",
|
||||
"Type": "タイプ",
|
||||
"Half Days": "半日前",
|
||||
"Approved": "承認済み",
|
||||
"Sick Note": "病気のメモ",
|
||||
"Absence ID": "不在ID",
|
||||
"Status": "ステータス",
|
||||
"Year": "年",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"The ID of the customer": "顧客ID",
|
||||
"The ID of the project": "プロジェクトの ID",
|
||||
"The ID of the service": "サービスのID",
|
||||
"The ID of the user": "利用者のID",
|
||||
"Filter entries by their user": "ユーザーで項目をフィルター",
|
||||
"Filter entries by their customer": "顧客で項目をフィルター",
|
||||
"Filter entries by their project": "プロジェクトでエントリをフィルター",
|
||||
"Filter entries by their service": "エントリをサービスでフィルター",
|
||||
"Only show entries that are billable": "請求可能なエントリのみを表示",
|
||||
"Only show entries that are already billed": "既に請求済みのエントリのみ表示",
|
||||
"Retrieves additional information about the entries": "項目に関する追加情報を取得します。",
|
||||
"Reads only the specified page": "指定したページのみ読み込みます。",
|
||||
"Filter customers by their active status": "顧客のアクティブなステータスでフィルター",
|
||||
"Filter projects by their customer": "顧客でプロジェクトをフィルター",
|
||||
"The ID of the team": "チームのID",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"Orange": "オレンジ",
|
||||
"Yellow": "黄色",
|
||||
"Green": "緑",
|
||||
"Caribean": "Caribean",
|
||||
"Lightblue": "Lightblue",
|
||||
"Blue": "青",
|
||||
"Purple": "パープル",
|
||||
"Magenta": "マゼンタ",
|
||||
"Pink": "ピンク",
|
||||
"German": "ドイツ語",
|
||||
"English": "日本語",
|
||||
"French": "フランス語",
|
||||
"Salary": "給料:",
|
||||
"Hourly wage": "1時間あたりの賃金:",
|
||||
"Regular holiday": "定休日",
|
||||
"Special leaves": "特別な葉",
|
||||
"Reduction of overtime": "残業の削減",
|
||||
"Sick day": "病気の日",
|
||||
"Sick day of a child": "子供の病気の日",
|
||||
"School / further education": "学校/さらなる教育",
|
||||
"Maternity protection": "産科保護",
|
||||
"Home office (planned hours are applied)": "在宅勤務(予定時間)",
|
||||
"Work out of office (planned hours are applied)": "勤務外(予定時間が適用されます)",
|
||||
"Special leaves (unpaid)": "特別葉(未払い)",
|
||||
"Sick day (unpaid)": "病気の日 (未払い)",
|
||||
"Sick day of child (unpaid)": "子供の病気の日 (未払い)",
|
||||
"Quarantine": "<unk>",
|
||||
"Military / alternative service (only full days)": "軍事/代替サービス(通常のみ)",
|
||||
"Sick day (sickness benefit)": "病気の日(病気給付)",
|
||||
"Requested": "要求済み",
|
||||
"Declined": "辞退しました",
|
||||
"Approval cancelled": "承認がキャンセルされました",
|
||||
"Request cancelled": "リクエストがキャンセルされました",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭",
|
||||
"New Entry": "新規エントリ",
|
||||
"New Absence Enquiry": "新しい不在のお問い合わせ",
|
||||
"Triggers when a new time entry is created": "新しい時間エントリが作成されたときにトリガーします",
|
||||
"Triggers when a new absence enquiry is created": "新しい不在問い合わせが作成されたときにトリガーします"
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
{
|
||||
"Time tracking made easy": "Tijdregistratie gemakkelijk gemaakt",
|
||||
"E-Mail": "E-mailadres",
|
||||
"API-Token": "API-Token",
|
||||
"Company Name": "Bedrijfsnaam",
|
||||
"Company E-Mail": "Bedrijf e-mail",
|
||||
"The email of your clockodo user": "Het e-mailadres van uw clockodo gebruiker",
|
||||
"Your api token (can be found in profile settings)": "Uw API token (kan gevonden worden in profielinstellingen)",
|
||||
"Your company name or app name": "Uw bedrijfsnaam of appnaam",
|
||||
"A contact email for your company or app": "Een contactmail voor uw bedrijf of app",
|
||||
"Create Entry": "Invoer aanmaken",
|
||||
"Get Entry": "Krijg Invoer",
|
||||
"Get Entries": "Verkrijg items",
|
||||
"Update Entry": "Invoer bijwerken",
|
||||
"Delete Entry": "Vermelding verwijderen",
|
||||
"Create Customer": "Klant aanmaken",
|
||||
"Get Customer": "Klant ophalen",
|
||||
"Update Customer": "Klant bijwerken",
|
||||
"Get Customers": "Klanten ophalen",
|
||||
"Delete Customer": "Klant verwijderen",
|
||||
"Create Project": "Project aanmaken",
|
||||
"Get Project": "Project ophalen",
|
||||
"Get Projects": "Ophalen projecten",
|
||||
"Update Project": "Project bijwerken",
|
||||
"Delete Project": "Project verwijderen",
|
||||
"Create Service": "Service aanmaken",
|
||||
"Get Service": "Service krijgen",
|
||||
"Update Service": "Update service",
|
||||
"Get Services": "Services ophalen",
|
||||
"Delete Service": "Service verwijderen",
|
||||
"Get Team": "Team openen",
|
||||
"Get Teams": "Teams ophalen",
|
||||
"Get User": "Gebruiker ophalen",
|
||||
"Get Users": "Get Users",
|
||||
"Create User": "Gebruiker aanmaken",
|
||||
"Update User": "Gebruiker bijwerken",
|
||||
"Delete User": "Gebruiker verwijderen",
|
||||
"Create Absence": "Afwezigheid maken",
|
||||
"Get Absence": "Krijg Afwezigheid",
|
||||
"Update Absence": "Afwezigheid bijwerken",
|
||||
"Get Absences": "Krijg Afspraken",
|
||||
"Delete Absence": "Afwezigheid verwijderen",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates an entry in clockodo": "Maakt een invoer in de klok",
|
||||
"Retrieves a single entry from clockodo": "Haalt een enkele invoer van de clockodo op",
|
||||
"Fetches entries from clockodo": "Haalt invoergegevens van de klok",
|
||||
"Updates an entry in clockodo": "Werkt een item in de klok bij",
|
||||
"Deletes an entry in clockodo": "Verwijdert een invoer in de klokodo",
|
||||
"Creates a customer in clockodo": "Maakt een klant in de klok",
|
||||
"Retrieves a single customer from clockodo": "Haal een enkele klant op van de clockodo",
|
||||
"Updates a customer in clockodo": "Werkt een klant in clockodo bij",
|
||||
"Fetches customers from clockodo": "Haalt klanten van de clockodo",
|
||||
"Deletes a customer in clockodo": "Verwijdert een klant in de klok",
|
||||
"Creates a project in clockodo": "Maakt een project in de klok",
|
||||
"Retrieves a single project from clockodo": "Haalt een enkel project op van de clockodo",
|
||||
"Fetches projects from clockodo": "Haalt projecten van clockodo",
|
||||
"Updates a project in clockodo": "Werkt een project bij in de clockodo",
|
||||
"Deletes a project in clockodo": "Verwijdert een project in de klok",
|
||||
"Creates a service in clockodo": "Maakt een service in de klok",
|
||||
"Retrieves a single service from clockodo": "Haalt een enkele dienst op van de clockodo",
|
||||
"Updates a service in clockodo": "Werkt een service in clockodo bij",
|
||||
"Fetches services from clockodo": "Haalt services van de clockodo",
|
||||
"Deletes a service in clockodo": "Verwijdert een service in de clockodo",
|
||||
"Retrieves a single team from clockodo": "Ophalen van één team van clockodo",
|
||||
"Fetches teams from clockodo": "Haalt teams van de clockodo",
|
||||
"Retrieves a single user from clockodo": "Haalt een enkele gebruiker op van de clockodo",
|
||||
"Fetches users from clockodo": "Haalt gebruikers van de clockodo",
|
||||
"Creates a user in clockodo": "Maakt een gebruiker aan in de klok",
|
||||
"Updates a user in clockodo": "Werkt een gebruiker in clockodo bij",
|
||||
"Deletes a user in clockodo": "Verwijdert een gebruiker in de klokodo",
|
||||
"Creates a absence in clockodo": "Maakt een afwezigheid in de klok",
|
||||
"Retrieves a single absence from clockodo": "Haalt een enkele afwezigheid van de clockodo op",
|
||||
"Updates an absence in clockodo": "Werkt een afwezigheid in de klok bij",
|
||||
"Fetches absences from clockodo": "Haalt de afwezigheid van de clockodo",
|
||||
"Deletes an absence in clockodo": "Verwijdert een afwezigheid in de klokodo",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Customer": "Klant",
|
||||
"Project": "Project",
|
||||
"Service": "Diensten",
|
||||
"Start Time": "Starttijd",
|
||||
"End Time": "Eind Tijd",
|
||||
"Description": "Beschrijving",
|
||||
"Hourly Rate": "Tarief per uur",
|
||||
"User": "Gebruiker",
|
||||
"Entry ID": "Invoer ID",
|
||||
"Start Date": "Start datum",
|
||||
"End Date": "Eind datum",
|
||||
"Customer ID Filter": "Filter klant-ID",
|
||||
"Project ID Filter": "Project ID filter",
|
||||
"Service ID Filter": "Filter service ID",
|
||||
"Billable": "Factureerbaar",
|
||||
"Billed": "Gefactureerd",
|
||||
"Enhanced List": "Verbeterde lijst",
|
||||
"Page": "Pagina",
|
||||
"Name": "Naam",
|
||||
"Number": "Getal",
|
||||
"Active": "Actief",
|
||||
"Note": "Notitie",
|
||||
"Color": "Kleur",
|
||||
"Active Filter": "Actieve filter",
|
||||
"Budget": "Begroting",
|
||||
"Budget in hours?": "Begroting in uren?",
|
||||
"Soft Budget": "Soft Budget",
|
||||
"Completed": "Voltooid",
|
||||
"Billed Amount": "Gefactureerd bedrag",
|
||||
"Billing Complete": "Facturering voltooid",
|
||||
"Team": "Team",
|
||||
"Role": "Functie",
|
||||
"Language": "Taal",
|
||||
"Wage Type": "Type salaris",
|
||||
"Can see absences": "Kan afwezigheid zien",
|
||||
"Can manage absences": "Kan afwegingen beheren",
|
||||
"Can add customers": "Kan klanten toevoegen",
|
||||
"Type": "Type",
|
||||
"Half Days": "Halve dagen",
|
||||
"Approved": "Goedgekeurd",
|
||||
"Sick Note": "Sick Notitie",
|
||||
"Absence ID": "Afwezigheid ID",
|
||||
"Status": "status",
|
||||
"Year": "jaar",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopteksten",
|
||||
"Query Parameters": "Query parameters",
|
||||
"Body": "Lichaam",
|
||||
"Response is Binary ?": "Antwoord is binair?",
|
||||
"No Error on Failure": "Geen fout bij fout",
|
||||
"Timeout (in seconds)": "Time-out (in seconden)",
|
||||
"The ID of the customer": "Het ID van de klant",
|
||||
"The ID of the project": "Het ID van het project",
|
||||
"The ID of the service": "Het ID van de dienst",
|
||||
"The ID of the user": "Het ID van de gebruiker",
|
||||
"Filter entries by their user": "Filter items op hun gebruiker",
|
||||
"Filter entries by their customer": "Filter items op hun klant",
|
||||
"Filter entries by their project": "Items filteren op hun project",
|
||||
"Filter entries by their service": "Filter items op hun service",
|
||||
"Only show entries that are billable": "Toon alleen factureerbare vermeldingen",
|
||||
"Only show entries that are already billed": "Toon alleen vermeldingen die al gefactureerd zijn",
|
||||
"Retrieves additional information about the entries": "Ophalen van extra informatie over de items",
|
||||
"Reads only the specified page": "Leest alleen de opgegeven pagina",
|
||||
"Filter customers by their active status": "Klanten filteren op hun actieve status",
|
||||
"Filter projects by their customer": "Projecten filteren op klant",
|
||||
"The ID of the team": "Het ID van het team",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
|
||||
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
|
||||
"Orange": "Oranje",
|
||||
"Yellow": "Geel",
|
||||
"Green": "Groen",
|
||||
"Caribean": "Caribean",
|
||||
"Lightblue": "Lightblue",
|
||||
"Blue": "Blauw",
|
||||
"Purple": "Paars",
|
||||
"Magenta": "Magenta",
|
||||
"Pink": "Roze",
|
||||
"German": "Duits",
|
||||
"English": "Nederlands",
|
||||
"French": "Frans",
|
||||
"Salary": "Salaris",
|
||||
"Hourly wage": "Uurloon",
|
||||
"Regular holiday": "Reguliere vakantie",
|
||||
"Special leaves": "Speciale bladeren",
|
||||
"Reduction of overtime": "Vermindering van overuren",
|
||||
"Sick day": "Zieke dag",
|
||||
"Sick day of a child": "Zieke dag van een kind",
|
||||
"School / further education": "School / voortgezet onderwijs",
|
||||
"Maternity protection": "Moederschap bescherming",
|
||||
"Home office (planned hours are applied)": "Huiskantoor (geplande uren worden toegepast)",
|
||||
"Work out of office (planned hours are applied)": "Werk zonder werktijd (geplande uren worden toegepast)",
|
||||
"Special leaves (unpaid)": "Speciale bladeren (onbetaald)",
|
||||
"Sick day (unpaid)": "Zieke dag (onbetaald)",
|
||||
"Sick day of child (unpaid)": "Zieke kinderdag (onbetaald)",
|
||||
"Quarantine": "Quarantaine",
|
||||
"Military / alternative service (only full days)": "Militaire / alternatieve service (alleen volledige dagen)",
|
||||
"Sick day (sickness benefit)": "Zieke dag (ziekte-voordeel)",
|
||||
"Requested": "Aangevraagd",
|
||||
"Declined": "Geweigerd",
|
||||
"Approval cancelled": "Goedkeuring geannuleerd",
|
||||
"Request cancelled": "Verzoek geannuleerd",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD",
|
||||
"New Entry": "Nieuwe vermelding",
|
||||
"New Absence Enquiry": "Nieuwe Afwezigheid Aanvraag",
|
||||
"Triggers when a new time entry is created": "Triggert wanneer een nieuwe tijdvermelding wordt aangemaakt",
|
||||
"Triggers when a new absence enquiry is created": "Triggert wanneer een nieuwe afwezigheid vraag wordt aangemaakt"
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
{
|
||||
"Time tracking made easy": "Rastreamento de tempo facilitado",
|
||||
"E-Mail": "E-mail",
|
||||
"API-Token": "API-Token",
|
||||
"Company Name": "Nome da Empresa",
|
||||
"Company E-Mail": "E-mail da Empresa",
|
||||
"The email of your clockodo user": "O e-mail do seu usuário do clockodo",
|
||||
"Your api token (can be found in profile settings)": "Seu token de API (pode ser encontrado nas configurações de perfil)",
|
||||
"Your company name or app name": "Nome da sua empresa ou nome do app",
|
||||
"A contact email for your company or app": "Um e-mail de contato para sua empresa ou aplicativo",
|
||||
"Create Entry": "Criar Entrada",
|
||||
"Get Entry": "Obter Entrada",
|
||||
"Get Entries": "Obter Entradas",
|
||||
"Update Entry": "Atualizar Entrada",
|
||||
"Delete Entry": "Excluir registro",
|
||||
"Create Customer": "Criar Cliente",
|
||||
"Get Customer": "Obter Cliente",
|
||||
"Update Customer": "Atualizar Cliente",
|
||||
"Get Customers": "Obter Clientes",
|
||||
"Delete Customer": "Excluir Cliente",
|
||||
"Create Project": "Criar Projeto",
|
||||
"Get Project": "Obter Projeto",
|
||||
"Get Projects": "Obter projetos",
|
||||
"Update Project": "Atualizar Projeto",
|
||||
"Delete Project": "Excluir Projeto",
|
||||
"Create Service": "Criar Serviço",
|
||||
"Get Service": "Obter Serviço",
|
||||
"Update Service": "Serviço de atualização",
|
||||
"Get Services": "Obter Serviços",
|
||||
"Delete Service": "Excluir Serviço",
|
||||
"Get Team": "Obter Time",
|
||||
"Get Teams": "Obtenha Times",
|
||||
"Get User": "Obter Usuário",
|
||||
"Get Users": "Get Users",
|
||||
"Create User": "Criar Usuário",
|
||||
"Update User": "Atualizar usuário",
|
||||
"Delete User": "Excluir Usuário",
|
||||
"Create Absence": "Criar Ausência",
|
||||
"Get Absence": "Obter Ausência",
|
||||
"Update Absence": "Atualizar Ausência",
|
||||
"Get Absences": "Obter Abdominais",
|
||||
"Delete Absence": "Excluir Ausência",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Creates an entry in clockodo": "Cria uma entrada no clockodo",
|
||||
"Retrieves a single entry from clockodo": "Recupera uma entrada única do clockodo",
|
||||
"Fetches entries from clockodo": "Obtém entradas do clockodo",
|
||||
"Updates an entry in clockodo": "Atualiza uma entrada no clockodo",
|
||||
"Deletes an entry in clockodo": "Exclui uma entrada no clockodo",
|
||||
"Creates a customer in clockodo": "Cria um cliente no relógio",
|
||||
"Retrieves a single customer from clockodo": "Recupera um único cliente do clockodo",
|
||||
"Updates a customer in clockodo": "Atualiza um cliente no relógio",
|
||||
"Fetches customers from clockodo": "Recupera os clientes do clockodo",
|
||||
"Deletes a customer in clockodo": "Deleta um cliente no relógio",
|
||||
"Creates a project in clockodo": "Cria um projeto no clockodo",
|
||||
"Retrieves a single project from clockodo": "Recupera um único projeto do clockodo",
|
||||
"Fetches projects from clockodo": "Recupera projetos do clockodo",
|
||||
"Updates a project in clockodo": "Atualiza um projeto no clockodo",
|
||||
"Deletes a project in clockodo": "Exclui um projeto no clockodo",
|
||||
"Creates a service in clockodo": "Cria um serviço no clockodo",
|
||||
"Retrieves a single service from clockodo": "Recupera um único serviço do clockodo",
|
||||
"Updates a service in clockodo": "Atualiza um serviço no clockodo",
|
||||
"Fetches services from clockodo": "Recupera os serviços do clockodo",
|
||||
"Deletes a service in clockodo": "Exclui um serviço no clockodo",
|
||||
"Retrieves a single team from clockodo": "Recupera um único time do relógio",
|
||||
"Fetches teams from clockodo": "Recupera as equipes do relógio",
|
||||
"Retrieves a single user from clockodo": "Recupera um único usuário do clockodo",
|
||||
"Fetches users from clockodo": "Obtém os usuários do clockodo",
|
||||
"Creates a user in clockodo": "Cria um usuário no clockodo",
|
||||
"Updates a user in clockodo": "Atualiza um usuário no clockodo",
|
||||
"Deletes a user in clockodo": "Exclui um usuário no clockodo",
|
||||
"Creates a absence in clockodo": "Cria uma ausência no clockodo",
|
||||
"Retrieves a single absence from clockodo": "Recupera uma única ausência do relógio",
|
||||
"Updates an absence in clockodo": "Atualiza a ausência no clockodo",
|
||||
"Fetches absences from clockodo": "Recupera a ausência do relógio",
|
||||
"Deletes an absence in clockodo": "Exclui a ausência no relógio",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Customer": "Cliente",
|
||||
"Project": "Projecto",
|
||||
"Service": "Serviço",
|
||||
"Start Time": "Hora de início",
|
||||
"End Time": "Hora de término",
|
||||
"Description": "Descrição",
|
||||
"Hourly Rate": "Preço por hora",
|
||||
"User": "Usuário",
|
||||
"Entry ID": "ID da postagem",
|
||||
"Start Date": "Data Inicial",
|
||||
"End Date": "Data de Término",
|
||||
"Customer ID Filter": "Filtro de ID de Cliente",
|
||||
"Project ID Filter": "Filtro ID do projeto",
|
||||
"Service ID Filter": "Filtro de Service ID",
|
||||
"Billable": "Faturável",
|
||||
"Billed": "Faturado",
|
||||
"Enhanced List": "Lista aprimorada",
|
||||
"Page": "Página",
|
||||
"Name": "Nome",
|
||||
"Number": "Número",
|
||||
"Active": "Ativo",
|
||||
"Note": "Observação",
|
||||
"Color": "Cor",
|
||||
"Active Filter": "Filtro ativo",
|
||||
"Budget": "Orçamento",
|
||||
"Budget in hours?": "Orçamento em horas?",
|
||||
"Soft Budget": "Orçamento Suave",
|
||||
"Completed": "Concluído",
|
||||
"Billed Amount": "Valor Faturado",
|
||||
"Billing Complete": "Faturamento completo",
|
||||
"Team": "Equipe",
|
||||
"Role": "Funções",
|
||||
"Language": "IDIOMA",
|
||||
"Wage Type": "Tipo de salário",
|
||||
"Can see absences": "Pode ver ausências",
|
||||
"Can manage absences": "Pode gerenciar as ausências",
|
||||
"Can add customers": "Pode adicionar clientes",
|
||||
"Type": "tipo",
|
||||
"Half Days": "Metade dos dias",
|
||||
"Approved": "Aceito",
|
||||
"Sick Note": "Nota doente",
|
||||
"Absence ID": "ID de Ausência",
|
||||
"Status": "Estado",
|
||||
"Year": "ano",
|
||||
"Method": "Método",
|
||||
"Headers": "Cabeçalhos",
|
||||
"Query Parameters": "Parâmetros da consulta",
|
||||
"Body": "Conteúdo",
|
||||
"Response is Binary ?": "A resposta é binária ?",
|
||||
"No Error on Failure": "Nenhum erro no Failure",
|
||||
"Timeout (in seconds)": "Tempo limite (em segundos)",
|
||||
"The ID of the customer": "O ID do cliente",
|
||||
"The ID of the project": "O ID do projeto",
|
||||
"The ID of the service": "O ID do serviço",
|
||||
"The ID of the user": "A ID do usuário",
|
||||
"Filter entries by their user": "Filtrar entradas por seu usuário",
|
||||
"Filter entries by their customer": "Filtrar entradas por seus clientes",
|
||||
"Filter entries by their project": "Filtrar entradas por seu projeto",
|
||||
"Filter entries by their service": "Filtrar entradas por serviço",
|
||||
"Only show entries that are billable": "Apenas mostrar entradas facturáveis",
|
||||
"Only show entries that are already billed": "Mostrar apenas as entradas que já são cobradas",
|
||||
"Retrieves additional information about the entries": "Obtém informações adicionais sobre os lançamentos",
|
||||
"Reads only the specified page": "Lê somente a página especificada",
|
||||
"Filter customers by their active status": "Filtrar clientes pelo seu status ativo",
|
||||
"Filter projects by their customer": "Filtrar projetos por seus clientes",
|
||||
"The ID of the team": "O ID da equipe",
|
||||
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
|
||||
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
|
||||
"Orange": "Laranja",
|
||||
"Yellow": "Amarelo",
|
||||
"Green": "Verde",
|
||||
"Caribean": "Caribean",
|
||||
"Lightblue": "Lightblue",
|
||||
"Blue": "azul",
|
||||
"Purple": "Roxo",
|
||||
"Magenta": "Magenta",
|
||||
"Pink": "Rosa",
|
||||
"German": "alemão",
|
||||
"English": "Portuguese-Brazil",
|
||||
"French": "francês",
|
||||
"Salary": "Salário",
|
||||
"Hourly wage": "Salário horário",
|
||||
"Regular holiday": "Feriado regular",
|
||||
"Special leaves": "Folhas especiais",
|
||||
"Reduction of overtime": "Redução de horas extras",
|
||||
"Sick day": "Dia doente",
|
||||
"Sick day of a child": "Dia doente de uma criança",
|
||||
"School / further education": "Ensino / Ensino Superior",
|
||||
"Maternity protection": "Proteção de maternidade",
|
||||
"Home office (planned hours are applied)": "Home office (horas planejadas são aplicadas)",
|
||||
"Work out of office (planned hours are applied)": "Trabalho fora de escritório (horas planejadas são aplicadas)",
|
||||
"Special leaves (unpaid)": "Folhas especiais (não pagas)",
|
||||
"Sick day (unpaid)": "Dia doente (não pago)",
|
||||
"Sick day of child (unpaid)": "Dia doente de criança (não pago)",
|
||||
"Quarantine": "Quarentena",
|
||||
"Military / alternative service (only full days)": "Serviço militar / alternativo (apenas dias inteiros)",
|
||||
"Sick day (sickness benefit)": "Dia doente (benefício com doença)",
|
||||
"Requested": "Solicitado",
|
||||
"Declined": "Recusado",
|
||||
"Approval cancelled": "Aprovação cancelada",
|
||||
"Request cancelled": "Pedido cancelado",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA",
|
||||
"New Entry": "Nova entrada",
|
||||
"New Absence Enquiry": "Nova dúvida de Absência",
|
||||
"Triggers when a new time entry is created": "Dispara quando uma nova entrada é criada",
|
||||
"Triggers when a new absence enquiry is created": "Dispara quando um novo pedido de ausência for criado"
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
{
|
||||
"Clockodo": "Чеккодо",
|
||||
"Time tracking made easy": "Простое отслеживание времени",
|
||||
"E-Mail": "Электронная почта",
|
||||
"API-Token": "API-Token",
|
||||
"Company Name": "Название компании",
|
||||
"Company E-Mail": "Электронная почта компании",
|
||||
"The email of your clockodo user": "Email пользователя clockodo",
|
||||
"Your api token (can be found in profile settings)": "Ваш токен api (можно найти в настройках профиля)",
|
||||
"Your company name or app name": "Название вашей компании или приложения",
|
||||
"A contact email for your company or app": "Контактный адрес электронной почты для вашей компании или приложения",
|
||||
"Create Entry": "Создать запись",
|
||||
"Get Entry": "Получить запись",
|
||||
"Get Entries": "Получить записи",
|
||||
"Update Entry": "Обновить запись",
|
||||
"Delete Entry": "Удалить запись",
|
||||
"Create Customer": "Создать клиента",
|
||||
"Get Customer": "Получить клиента",
|
||||
"Update Customer": "Обновить клиента",
|
||||
"Get Customers": "Получить клиентов",
|
||||
"Delete Customer": "Удалить клиента",
|
||||
"Create Project": "Создать проект",
|
||||
"Get Project": "Получить проект",
|
||||
"Get Projects": "Получить проекты",
|
||||
"Update Project": "Обновить проект",
|
||||
"Delete Project": "Удалить проект",
|
||||
"Create Service": "Создать сервис",
|
||||
"Get Service": "Получить услугу",
|
||||
"Update Service": "Сервис обновления",
|
||||
"Get Services": "Получить услуги",
|
||||
"Delete Service": "Удалить сервис",
|
||||
"Get Team": "Получить команду",
|
||||
"Get Teams": "Получить команды",
|
||||
"Get User": "Получить пользователя",
|
||||
"Get Users": "Get Users",
|
||||
"Create User": "Создать пользователя",
|
||||
"Update User": "Изменить пользователя",
|
||||
"Delete User": "Удалить пользователя",
|
||||
"Create Absence": "Создать отсутствие",
|
||||
"Get Absence": "Получить отсутствие",
|
||||
"Update Absence": "Обновить отсутствие",
|
||||
"Get Absences": "Получить Absences",
|
||||
"Delete Absence": "Удалить отсутствие",
|
||||
"Custom API Call": "Пользовательский вызов API",
|
||||
"Creates an entry in clockodo": "Создает запись в clockodo",
|
||||
"Retrieves a single entry from clockodo": "Извлекает одну запись из clockodo",
|
||||
"Fetches entries from clockodo": "Извлекает записи из clockodo",
|
||||
"Updates an entry in clockodo": "Обновляет запись в clockodo",
|
||||
"Deletes an entry in clockodo": "Удаляет запись в clockodo",
|
||||
"Creates a customer in clockodo": "Создает клиента в clockodo",
|
||||
"Retrieves a single customer from clockodo": "Возвращает одного клиента из clockodo",
|
||||
"Updates a customer in clockodo": "Обновляет клиента в clockodo",
|
||||
"Fetches customers from clockodo": "Извлекает клиентов из clockodo",
|
||||
"Deletes a customer in clockodo": "Удаляет клиента в clockodo",
|
||||
"Creates a project in clockodo": "Создает проект в clockodo",
|
||||
"Retrieves a single project from clockodo": "Возвращает один проект из clockodo",
|
||||
"Fetches projects from clockodo": "Получает проекты из clockodo",
|
||||
"Updates a project in clockodo": "Обновляет проект в clockodo",
|
||||
"Deletes a project in clockodo": "Удаляет проект в clockodo",
|
||||
"Creates a service in clockodo": "Создает сервис в clockodo",
|
||||
"Retrieves a single service from clockodo": "Получает один сервис от clockodo",
|
||||
"Updates a service in clockodo": "Обновляет сервис в clockodo",
|
||||
"Fetches services from clockodo": "Извлекает сервисы из clockodo",
|
||||
"Deletes a service in clockodo": "Удаляет сервис в clockodo",
|
||||
"Retrieves a single team from clockodo": "Получает одну команду из clockodo",
|
||||
"Fetches teams from clockodo": "Извлекает команды из clockodo",
|
||||
"Retrieves a single user from clockodo": "Извлекает одного пользователя из clockodo",
|
||||
"Fetches users from clockodo": "Извлекает пользователей из clockodo",
|
||||
"Creates a user in clockodo": "Создает пользователя в clockodo",
|
||||
"Updates a user in clockodo": "Обновляет пользователя в clockodo",
|
||||
"Deletes a user in clockodo": "Удаляет пользователя в clockodo",
|
||||
"Creates a absence in clockodo": "Создает отсутствие в clockodo",
|
||||
"Retrieves a single absence from clockodo": "Получает одиночное отсутствие из clockodo",
|
||||
"Updates an absence in clockodo": "Обновляет отсутствие в clockodo",
|
||||
"Fetches absences from clockodo": "Получает отсутствие от clockodo",
|
||||
"Deletes an absence in clockodo": "Удаляет отсутствие в clockodo",
|
||||
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
|
||||
"Customer": "Покупатель",
|
||||
"Project": "Проект",
|
||||
"Service": "Сервис",
|
||||
"Start Time": "Время начала",
|
||||
"End Time": "Конец времени",
|
||||
"Description": "Description",
|
||||
"Hourly Rate": "Почасовая ставка",
|
||||
"User": "Пользователь",
|
||||
"Entry ID": "ID записи",
|
||||
"Start Date": "Дата начала",
|
||||
"End Date": "Дата окончания",
|
||||
"Customer ID Filter": "Фильтр ID клиента",
|
||||
"Project ID Filter": "Фильтр ID проекта",
|
||||
"Service ID Filter": "Фильтр ID службы",
|
||||
"Billable": "Оплачиваемый",
|
||||
"Billed": "Оплачено",
|
||||
"Enhanced List": "Расширенный список",
|
||||
"Page": "Страница",
|
||||
"Name": "Наименование",
|
||||
"Number": "Номер",
|
||||
"Active": "Активен",
|
||||
"Note": "Примечание",
|
||||
"Color": "Цвет",
|
||||
"Active Filter": "Активный фильтр",
|
||||
"Budget": "Бюджет",
|
||||
"Budget in hours?": "Бюджет в часах?",
|
||||
"Soft Budget": "Мягкий бюджет",
|
||||
"Completed": "Выполнено",
|
||||
"Billed Amount": "Оплаченная сумма",
|
||||
"Billing Complete": "Платеж завершен",
|
||||
"Team": "Команда",
|
||||
"Role": "Роль",
|
||||
"Language": "Язык",
|
||||
"Wage Type": "Тип заработной платы",
|
||||
"Can see absences": "Может видеть отсутствие",
|
||||
"Can manage absences": "Управление отсутствиями",
|
||||
"Can add customers": "Может добавлять клиентов",
|
||||
"Type": "Тип",
|
||||
"Half Days": "Пол дней",
|
||||
"Approved": "Одобрено",
|
||||
"Sick Note": "Локтевая заметка",
|
||||
"Absence ID": "Отсутствие ID",
|
||||
"Status": "Status",
|
||||
"Year": "Год",
|
||||
"Method": "Метод",
|
||||
"Headers": "Заголовки",
|
||||
"Query Parameters": "Параметры запроса",
|
||||
"Body": "Тело",
|
||||
"No Error on Failure": "Нет ошибок при ошибке",
|
||||
"Timeout (in seconds)": "Таймаут (в секундах)",
|
||||
"The ID of the customer": "ID клиента",
|
||||
"The ID of the project": "ID проекта",
|
||||
"The ID of the service": "ID сервиса",
|
||||
"The ID of the user": "ID пользователя",
|
||||
"Filter entries by their user": "Фильтровать записи по их пользователю",
|
||||
"Filter entries by their customer": "Фильтровать записи по клиенту",
|
||||
"Filter entries by their project": "Фильтровать записи по их проекту",
|
||||
"Filter entries by their service": "Фильтровать записи по их сервису",
|
||||
"Only show entries that are billable": "Показывать только записи, которые можно оплатить",
|
||||
"Only show entries that are already billed": "Показывать только записи, которые уже оплачены",
|
||||
"Retrieves additional information about the entries": "Получает дополнительную информацию о записях",
|
||||
"Reads only the specified page": "Читает только указанную страницу",
|
||||
"Filter customers by their active status": "Фильтровать клиентов по их активному статусу",
|
||||
"Filter projects by their customer": "Фильтровать проекты по клиенту",
|
||||
"The ID of the team": "ID команды",
|
||||
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
|
||||
"Orange": "Оранжевый",
|
||||
"Yellow": "Жёлтый",
|
||||
"Green": "Зелёный",
|
||||
"Caribean": "Caribean",
|
||||
"Lightblue": "Lightblue",
|
||||
"Blue": "Синий",
|
||||
"Purple": "Фиолетовый",
|
||||
"Magenta": "Пурпурный",
|
||||
"Pink": "Розовый",
|
||||
"German": "Немецкий",
|
||||
"English": "Russian",
|
||||
"French": "Французский",
|
||||
"Salary": "Зарплата",
|
||||
"Hourly wage": "Почасовая заработная плата",
|
||||
"Regular holiday": "Регулярный отпуск",
|
||||
"Special leaves": "Специальные листья",
|
||||
"Reduction of overtime": "Снижение сверхурочной работы",
|
||||
"Sick day": "Тяжелый день",
|
||||
"Sick day of a child": "Серьезный день ребенка",
|
||||
"School / further education": "Школа / дальнейшее образование",
|
||||
"Maternity protection": "Охрана материнства",
|
||||
"Home office (planned hours are applied)": "Домашний офис (запланированные часы)",
|
||||
"Work out of office (planned hours are applied)": "Работы вне офиса (запланированные часы)",
|
||||
"Special leaves (unpaid)": "Специальные листья (неоплаченные)",
|
||||
"Sick day (unpaid)": "Болезный день (неоплаченный)",
|
||||
"Sick day of child (unpaid)": "Больной день ребенка (неоплаченный)",
|
||||
"Quarantine": "Карантин",
|
||||
"Military / alternative service (only full days)": "Военная / альтернативная служба (только полные дни)",
|
||||
"Sick day (sickness benefit)": "День болезни (пособие по болезни)",
|
||||
"Requested": "Запрошено",
|
||||
"Declined": "Отклонено",
|
||||
"Approval cancelled": "Утверждение отменено",
|
||||
"Request cancelled": "Запрос отменен",
|
||||
"GET": "ПОЛУЧИТЬ",
|
||||
"POST": "ПОСТ",
|
||||
"PATCH": "ПАТЧ",
|
||||
"PUT": "ПОКУПИТЬ",
|
||||
"DELETE": "УДАЛИТЬ",
|
||||
"HEAD": "HEAD",
|
||||
"New Entry": "Новая запись",
|
||||
"New Absence Enquiry": "Новый запрос об отсутствии",
|
||||
"Triggers when a new time entry is created": "Триггеры при создании новой записи времени",
|
||||
"Triggers when a new absence enquiry is created": "Запускает при создании нового запроса об отсутствии"
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
{
|
||||
"Time tracking made easy": "Time tracking made easy",
|
||||
"E-Mail": "E-Mail",
|
||||
"API-Token": "API-Token",
|
||||
"Company Name": "Company Name",
|
||||
"Company E-Mail": "Company E-Mail",
|
||||
"The email of your clockodo user": "The email of your clockodo user",
|
||||
"Your api token (can be found in profile settings)": "Your api token (can be found in profile settings)",
|
||||
"Your company name or app name": "Your company name or app name",
|
||||
"A contact email for your company or app": "A contact email for your company or app",
|
||||
"Create Entry": "Create Entry",
|
||||
"Get Entry": "Get Entry",
|
||||
"Get Entries": "Get Entries",
|
||||
"Update Entry": "Update Entry",
|
||||
"Delete Entry": "Delete Entry",
|
||||
"Create Customer": "Create Customer",
|
||||
"Get Customer": "Get Customer",
|
||||
"Update Customer": "Update Customer",
|
||||
"Get Customers": "Get Customers",
|
||||
"Delete Customer": "Delete Customer",
|
||||
"Create Project": "Create Project",
|
||||
"Get Project": "Get Project",
|
||||
"Get Projects": "Get Projects",
|
||||
"Update Project": "Update Project",
|
||||
"Delete Project": "Delete Project",
|
||||
"Create Service": "Create Service",
|
||||
"Get Service": "Get Service",
|
||||
"Update Service": "Update Service",
|
||||
"Get Services": "Get Services",
|
||||
"Delete Service": "Delete Service",
|
||||
"Get Team": "Get Team",
|
||||
"Get Teams": "Get Teams",
|
||||
"Get User": "Get User",
|
||||
"Get Users": "Get Users",
|
||||
"Create User": "Create User",
|
||||
"Update User": "Update User",
|
||||
"Delete User": "Delete User",
|
||||
"Create Absence": "Create Absence",
|
||||
"Get Absence": "Get Absence",
|
||||
"Update Absence": "Update Absence",
|
||||
"Get Absences": "Get Absences",
|
||||
"Delete Absence": "Delete Absence",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates an entry in clockodo": "Creates an entry in clockodo",
|
||||
"Retrieves a single entry from clockodo": "Retrieves a single entry from clockodo",
|
||||
"Fetches entries from clockodo": "Fetches entries from clockodo",
|
||||
"Updates an entry in clockodo": "Updates an entry in clockodo",
|
||||
"Deletes an entry in clockodo": "Deletes an entry in clockodo",
|
||||
"Creates a customer in clockodo": "Creates a customer in clockodo",
|
||||
"Retrieves a single customer from clockodo": "Retrieves a single customer from clockodo",
|
||||
"Updates a customer in clockodo": "Updates a customer in clockodo",
|
||||
"Fetches customers from clockodo": "Fetches customers from clockodo",
|
||||
"Deletes a customer in clockodo": "Deletes a customer in clockodo",
|
||||
"Creates a project in clockodo": "Creates a project in clockodo",
|
||||
"Retrieves a single project from clockodo": "Retrieves a single project from clockodo",
|
||||
"Fetches projects from clockodo": "Fetches projects from clockodo",
|
||||
"Updates a project in clockodo": "Updates a project in clockodo",
|
||||
"Deletes a project in clockodo": "Deletes a project in clockodo",
|
||||
"Creates a service in clockodo": "Creates a service in clockodo",
|
||||
"Retrieves a single service from clockodo": "Retrieves a single service from clockodo",
|
||||
"Updates a service in clockodo": "Updates a service in clockodo",
|
||||
"Fetches services from clockodo": "Fetches services from clockodo",
|
||||
"Deletes a service in clockodo": "Deletes a service in clockodo",
|
||||
"Retrieves a single team from clockodo": "Retrieves a single team from clockodo",
|
||||
"Fetches teams from clockodo": "Fetches teams from clockodo",
|
||||
"Retrieves a single user from clockodo": "Retrieves a single user from clockodo",
|
||||
"Fetches users from clockodo": "Fetches users from clockodo",
|
||||
"Creates a user in clockodo": "Creates a user in clockodo",
|
||||
"Updates a user in clockodo": "Updates a user in clockodo",
|
||||
"Deletes a user in clockodo": "Deletes a user in clockodo",
|
||||
"Creates a absence in clockodo": "Creates a absence in clockodo",
|
||||
"Retrieves a single absence from clockodo": "Retrieves a single absence from clockodo",
|
||||
"Updates an absence in clockodo": "Updates an absence in clockodo",
|
||||
"Fetches absences from clockodo": "Fetches absences from clockodo",
|
||||
"Deletes an absence in clockodo": "Deletes an absence in clockodo",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Customer": "Customer",
|
||||
"Project": "Project",
|
||||
"Service": "Service",
|
||||
"Start Time": "Start Time",
|
||||
"End Time": "End Time",
|
||||
"Description": "Description",
|
||||
"Hourly Rate": "Hourly Rate",
|
||||
"User": "User",
|
||||
"Entry ID": "Entry ID",
|
||||
"Start Date": "Start Date",
|
||||
"End Date": "End Date",
|
||||
"Customer ID Filter": "Customer ID Filter",
|
||||
"Project ID Filter": "Project ID Filter",
|
||||
"Service ID Filter": "Service ID Filter",
|
||||
"Billable": "Billable",
|
||||
"Billed": "Billed",
|
||||
"Enhanced List": "Enhanced List",
|
||||
"Page": "Page",
|
||||
"Name": "Name",
|
||||
"Number": "Number",
|
||||
"Active": "Active",
|
||||
"Note": "Note",
|
||||
"Color": "Color",
|
||||
"Active Filter": "Active Filter",
|
||||
"Budget": "Budget",
|
||||
"Budget in hours?": "Budget in hours?",
|
||||
"Soft Budget": "Soft Budget",
|
||||
"Completed": "Completed",
|
||||
"Billed Amount": "Billed Amount",
|
||||
"Billing Complete": "Billing Complete",
|
||||
"Team": "Team",
|
||||
"Role": "Role",
|
||||
"Language": "Language",
|
||||
"Wage Type": "Wage Type",
|
||||
"Can see absences": "Can see absences",
|
||||
"Can manage absences": "Can manage absences",
|
||||
"Can add customers": "Can add customers",
|
||||
"Type": "Type",
|
||||
"Half Days": "Half Days",
|
||||
"Approved": "Approved",
|
||||
"Sick Note": "Sick Note",
|
||||
"Absence ID": "Absence ID",
|
||||
"Status": "Status",
|
||||
"Year": "Year",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"The ID of the customer": "The ID of the customer",
|
||||
"The ID of the project": "The ID of the project",
|
||||
"The ID of the service": "The ID of the service",
|
||||
"The ID of the user": "The ID of the user",
|
||||
"Filter entries by their user": "Filter entries by their user",
|
||||
"Filter entries by their customer": "Filter entries by their customer",
|
||||
"Filter entries by their project": "Filter entries by their project",
|
||||
"Filter entries by their service": "Filter entries by their service",
|
||||
"Only show entries that are billable": "Only show entries that are billable",
|
||||
"Only show entries that are already billed": "Only show entries that are already billed",
|
||||
"Retrieves additional information about the entries": "Retrieves additional information about the entries",
|
||||
"Reads only the specified page": "Reads only the specified page",
|
||||
"Filter customers by their active status": "Filter customers by their active status",
|
||||
"Filter projects by their customer": "Filter projects by their customer",
|
||||
"The ID of the team": "The ID of the team",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"Orange": "Orange",
|
||||
"Yellow": "Yellow",
|
||||
"Green": "Green",
|
||||
"Caribean": "Caribean",
|
||||
"Lightblue": "Lightblue",
|
||||
"Blue": "Blue",
|
||||
"Purple": "Purple",
|
||||
"Magenta": "Magenta",
|
||||
"Pink": "Pink",
|
||||
"German": "German",
|
||||
"English": "English",
|
||||
"French": "French",
|
||||
"Salary": "Salary",
|
||||
"Hourly wage": "Hourly wage",
|
||||
"Regular holiday": "Regular holiday",
|
||||
"Special leaves": "Special leaves",
|
||||
"Reduction of overtime": "Reduction of overtime",
|
||||
"Sick day": "Sick day",
|
||||
"Sick day of a child": "Sick day of a child",
|
||||
"School / further education": "School / further education",
|
||||
"Maternity protection": "Maternity protection",
|
||||
"Home office (planned hours are applied)": "Home office (planned hours are applied)",
|
||||
"Work out of office (planned hours are applied)": "Work out of office (planned hours are applied)",
|
||||
"Special leaves (unpaid)": "Special leaves (unpaid)",
|
||||
"Sick day (unpaid)": "Sick day (unpaid)",
|
||||
"Sick day of child (unpaid)": "Sick day of child (unpaid)",
|
||||
"Quarantine": "Quarantine",
|
||||
"Military / alternative service (only full days)": "Military / alternative service (only full days)",
|
||||
"Sick day (sickness benefit)": "Sick day (sickness benefit)",
|
||||
"Requested": "Requested",
|
||||
"Declined": "Declined",
|
||||
"Approval cancelled": "Approval cancelled",
|
||||
"Request cancelled": "Request cancelled",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Entry": "New Entry",
|
||||
"New Absence Enquiry": "New Absence Enquiry",
|
||||
"Triggers when a new time entry is created": "Triggers when a new time entry is created",
|
||||
"Triggers when a new absence enquiry is created": "Triggers when a new absence enquiry is created"
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
{
|
||||
"Clockodo": "Clockodo",
|
||||
"Time tracking made easy": "Time tracking made easy",
|
||||
"E-Mail": "E-Mail",
|
||||
"API-Token": "API-Token",
|
||||
"Company Name": "Tên công ty",
|
||||
"Company E-Mail": "Company E-Mail",
|
||||
"The email of your clockodo user": "The email of your clockodo user",
|
||||
"Your api token (can be found in profile settings)": "Your api token (can be found in profile settings)",
|
||||
"Your company name or app name": "Your company name or app name",
|
||||
"A contact email for your company or app": "A contact email for your company or app",
|
||||
"Create Entry": "Create Entry",
|
||||
"Get Entry": "Get Entry",
|
||||
"Get Entries": "Get Entries",
|
||||
"Update Entry": "Update Entry",
|
||||
"Delete Entry": "Delete Entry",
|
||||
"Create Customer": "Create Customer",
|
||||
"Get Customer": "Get Customer",
|
||||
"Update Customer": "Update Customer",
|
||||
"Get Customers": "Get Customers",
|
||||
"Delete Customer": "Delete Customer",
|
||||
"Create Project": "Create Project",
|
||||
"Get Project": "Get Project",
|
||||
"Get Projects": "Get Projects",
|
||||
"Update Project": "Update Project",
|
||||
"Delete Project": "Delete Project",
|
||||
"Create Service": "Create Service",
|
||||
"Get Service": "Get Service",
|
||||
"Update Service": "Update Service",
|
||||
"Get Services": "Get Services",
|
||||
"Delete Service": "Delete Service",
|
||||
"Get Team": "Get Team",
|
||||
"Get Teams": "Get Teams",
|
||||
"Get User": "Get User",
|
||||
"Get Users": "Get Users",
|
||||
"Create User": "Create User",
|
||||
"Update User": "Update User",
|
||||
"Delete User": "Delete User",
|
||||
"Create Absence": "Create Absence",
|
||||
"Get Absence": "Get Absence",
|
||||
"Update Absence": "Update Absence",
|
||||
"Get Absences": "Get Absences",
|
||||
"Delete Absence": "Delete Absence",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates an entry in clockodo": "Creates an entry in clockodo",
|
||||
"Retrieves a single entry from clockodo": "Retrieves a single entry from clockodo",
|
||||
"Fetches entries from clockodo": "Fetches entries from clockodo",
|
||||
"Updates an entry in clockodo": "Updates an entry in clockodo",
|
||||
"Deletes an entry in clockodo": "Deletes an entry in clockodo",
|
||||
"Creates a customer in clockodo": "Creates a customer in clockodo",
|
||||
"Retrieves a single customer from clockodo": "Retrieves a single customer from clockodo",
|
||||
"Updates a customer in clockodo": "Updates a customer in clockodo",
|
||||
"Fetches customers from clockodo": "Fetches customers from clockodo",
|
||||
"Deletes a customer in clockodo": "Deletes a customer in clockodo",
|
||||
"Creates a project in clockodo": "Creates a project in clockodo",
|
||||
"Retrieves a single project from clockodo": "Retrieves a single project from clockodo",
|
||||
"Fetches projects from clockodo": "Fetches projects from clockodo",
|
||||
"Updates a project in clockodo": "Updates a project in clockodo",
|
||||
"Deletes a project in clockodo": "Deletes a project in clockodo",
|
||||
"Creates a service in clockodo": "Creates a service in clockodo",
|
||||
"Retrieves a single service from clockodo": "Retrieves a single service from clockodo",
|
||||
"Updates a service in clockodo": "Updates a service in clockodo",
|
||||
"Fetches services from clockodo": "Fetches services from clockodo",
|
||||
"Deletes a service in clockodo": "Deletes a service in clockodo",
|
||||
"Retrieves a single team from clockodo": "Retrieves a single team from clockodo",
|
||||
"Fetches teams from clockodo": "Fetches teams from clockodo",
|
||||
"Retrieves a single user from clockodo": "Retrieves a single user from clockodo",
|
||||
"Fetches users from clockodo": "Fetches users from clockodo",
|
||||
"Creates a user in clockodo": "Creates a user in clockodo",
|
||||
"Updates a user in clockodo": "Updates a user in clockodo",
|
||||
"Deletes a user in clockodo": "Deletes a user in clockodo",
|
||||
"Creates a absence in clockodo": "Creates a absence in clockodo",
|
||||
"Retrieves a single absence from clockodo": "Retrieves a single absence from clockodo",
|
||||
"Updates an absence in clockodo": "Updates an absence in clockodo",
|
||||
"Fetches absences from clockodo": "Fetches absences from clockodo",
|
||||
"Deletes an absence in clockodo": "Deletes an absence in clockodo",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Customer": "Customer",
|
||||
"Project": "Project",
|
||||
"Service": "Service",
|
||||
"Start Time": "Start Time",
|
||||
"End Time": "End Time",
|
||||
"Description": "Description",
|
||||
"Hourly Rate": "Hourly Rate",
|
||||
"User": "User",
|
||||
"Entry ID": "Entry ID",
|
||||
"Start Date": "Start Date",
|
||||
"End Date": "End Date",
|
||||
"Customer ID Filter": "Customer ID Filter",
|
||||
"Project ID Filter": "Project ID Filter",
|
||||
"Service ID Filter": "Service ID Filter",
|
||||
"Billable": "Billable",
|
||||
"Billed": "Billed",
|
||||
"Enhanced List": "Enhanced List",
|
||||
"Page": "Page",
|
||||
"Name": "Name",
|
||||
"Number": "Number",
|
||||
"Active": "Tích cực",
|
||||
"Note": "Note",
|
||||
"Color": "Color",
|
||||
"Active Filter": "Active Filter",
|
||||
"Budget": "Budget",
|
||||
"Budget in hours?": "Budget in hours?",
|
||||
"Soft Budget": "Soft Budget",
|
||||
"Completed": "Completed",
|
||||
"Billed Amount": "Billed Amount",
|
||||
"Billing Complete": "Billing Complete",
|
||||
"Team": "Team",
|
||||
"Role": "Vai trò",
|
||||
"Language": "Language",
|
||||
"Wage Type": "Wage Type",
|
||||
"Can see absences": "Can see absences",
|
||||
"Can manage absences": "Can manage absences",
|
||||
"Can add customers": "Can add customers",
|
||||
"Type": "Type",
|
||||
"Half Days": "Half Days",
|
||||
"Approved": "Approved",
|
||||
"Sick Note": "Sick Note",
|
||||
"Absence ID": "Absence ID",
|
||||
"Status": "Status",
|
||||
"Year": "Year",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"The ID of the customer": "The ID of the customer",
|
||||
"The ID of the project": "The ID of the project",
|
||||
"The ID of the service": "The ID of the service",
|
||||
"The ID of the user": "The ID of the user",
|
||||
"Filter entries by their user": "Filter entries by their user",
|
||||
"Filter entries by their customer": "Filter entries by their customer",
|
||||
"Filter entries by their project": "Filter entries by their project",
|
||||
"Filter entries by their service": "Filter entries by their service",
|
||||
"Only show entries that are billable": "Only show entries that are billable",
|
||||
"Only show entries that are already billed": "Only show entries that are already billed",
|
||||
"Retrieves additional information about the entries": "Retrieves additional information about the entries",
|
||||
"Reads only the specified page": "Reads only the specified page",
|
||||
"Filter customers by their active status": "Filter customers by their active status",
|
||||
"Filter projects by their customer": "Filter projects by their customer",
|
||||
"The ID of the team": "The ID of the team",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"Orange": "Orange",
|
||||
"Yellow": "Yellow",
|
||||
"Green": "Green",
|
||||
"Caribean": "Caribean",
|
||||
"Lightblue": "Lightblue",
|
||||
"Blue": "Blue",
|
||||
"Purple": "Purple",
|
||||
"Magenta": "Magenta",
|
||||
"Pink": "Pink",
|
||||
"German": "German",
|
||||
"English": "English",
|
||||
"French": "French",
|
||||
"Salary": "Salary",
|
||||
"Hourly wage": "Hourly wage",
|
||||
"Regular holiday": "Regular holiday",
|
||||
"Special leaves": "Special leaves",
|
||||
"Reduction of overtime": "Reduction of overtime",
|
||||
"Sick day": "Sick day",
|
||||
"Sick day of a child": "Sick day of a child",
|
||||
"School / further education": "School / further education",
|
||||
"Maternity protection": "Maternity protection",
|
||||
"Home office (planned hours are applied)": "Home office (planned hours are applied)",
|
||||
"Work out of office (planned hours are applied)": "Work out of office (planned hours are applied)",
|
||||
"Special leaves (unpaid)": "Special leaves (unpaid)",
|
||||
"Sick day (unpaid)": "Sick day (unpaid)",
|
||||
"Sick day of child (unpaid)": "Sick day of child (unpaid)",
|
||||
"Quarantine": "Quarantine",
|
||||
"Military / alternative service (only full days)": "Military / alternative service (only full days)",
|
||||
"Sick day (sickness benefit)": "Sick day (sickness benefit)",
|
||||
"Requested": "Requested",
|
||||
"Declined": "Declined",
|
||||
"Approval cancelled": "Approval cancelled",
|
||||
"Request cancelled": "Request cancelled",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Entry": "New Entry",
|
||||
"New Absence Enquiry": "New Absence Enquiry",
|
||||
"Triggers when a new time entry is created": "Triggers when a new time entry is created",
|
||||
"Triggers when a new absence enquiry is created": "Triggers when a new absence enquiry is created"
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
{
|
||||
"Time tracking made easy": "Time tracking made easy",
|
||||
"E-Mail": "E-Mail",
|
||||
"API-Token": "API-Token",
|
||||
"Company Name": "Company Name",
|
||||
"Company E-Mail": "Company E-Mail",
|
||||
"The email of your clockodo user": "The email of your clockodo user",
|
||||
"Your api token (can be found in profile settings)": "Your api token (can be found in profile settings)",
|
||||
"Your company name or app name": "Your company name or app name",
|
||||
"A contact email for your company or app": "A contact email for your company or app",
|
||||
"Create Entry": "Create Entry",
|
||||
"Get Entry": "Get Entry",
|
||||
"Get Entries": "Get Entries",
|
||||
"Update Entry": "Update Entry",
|
||||
"Delete Entry": "Delete Entry",
|
||||
"Create Customer": "Create Customer",
|
||||
"Get Customer": "Get Customer",
|
||||
"Update Customer": "Update Customer",
|
||||
"Get Customers": "Get Customers",
|
||||
"Delete Customer": "Delete Customer",
|
||||
"Create Project": "Create Project",
|
||||
"Get Project": "Get Project",
|
||||
"Get Projects": "Get Projects",
|
||||
"Update Project": "Update Project",
|
||||
"Delete Project": "Delete Project",
|
||||
"Create Service": "Create Service",
|
||||
"Get Service": "Get Service",
|
||||
"Update Service": "Update Service",
|
||||
"Get Services": "Get Services",
|
||||
"Delete Service": "Delete Service",
|
||||
"Get Team": "Get Team",
|
||||
"Get Teams": "Get Teams",
|
||||
"Get User": "Get User",
|
||||
"Get Users": "Get Users",
|
||||
"Create User": "Create User",
|
||||
"Update User": "Update User",
|
||||
"Delete User": "删除用户",
|
||||
"Create Absence": "Create Absence",
|
||||
"Get Absence": "Get Absence",
|
||||
"Update Absence": "Update Absence",
|
||||
"Get Absences": "Get Absences",
|
||||
"Delete Absence": "Delete Absence",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Creates an entry in clockodo": "Creates an entry in clockodo",
|
||||
"Retrieves a single entry from clockodo": "Retrieves a single entry from clockodo",
|
||||
"Fetches entries from clockodo": "Fetches entries from clockodo",
|
||||
"Updates an entry in clockodo": "Updates an entry in clockodo",
|
||||
"Deletes an entry in clockodo": "Deletes an entry in clockodo",
|
||||
"Creates a customer in clockodo": "Creates a customer in clockodo",
|
||||
"Retrieves a single customer from clockodo": "Retrieves a single customer from clockodo",
|
||||
"Updates a customer in clockodo": "Updates a customer in clockodo",
|
||||
"Fetches customers from clockodo": "Fetches customers from clockodo",
|
||||
"Deletes a customer in clockodo": "Deletes a customer in clockodo",
|
||||
"Creates a project in clockodo": "Creates a project in clockodo",
|
||||
"Retrieves a single project from clockodo": "Retrieves a single project from clockodo",
|
||||
"Fetches projects from clockodo": "Fetches projects from clockodo",
|
||||
"Updates a project in clockodo": "Updates a project in clockodo",
|
||||
"Deletes a project in clockodo": "Deletes a project in clockodo",
|
||||
"Creates a service in clockodo": "Creates a service in clockodo",
|
||||
"Retrieves a single service from clockodo": "Retrieves a single service from clockodo",
|
||||
"Updates a service in clockodo": "Updates a service in clockodo",
|
||||
"Fetches services from clockodo": "Fetches services from clockodo",
|
||||
"Deletes a service in clockodo": "Deletes a service in clockodo",
|
||||
"Retrieves a single team from clockodo": "Retrieves a single team from clockodo",
|
||||
"Fetches teams from clockodo": "Fetches teams from clockodo",
|
||||
"Retrieves a single user from clockodo": "Retrieves a single user from clockodo",
|
||||
"Fetches users from clockodo": "Fetches users from clockodo",
|
||||
"Creates a user in clockodo": "Creates a user in clockodo",
|
||||
"Updates a user in clockodo": "Updates a user in clockodo",
|
||||
"Deletes a user in clockodo": "Deletes a user in clockodo",
|
||||
"Creates a absence in clockodo": "Creates a absence in clockodo",
|
||||
"Retrieves a single absence from clockodo": "Retrieves a single absence from clockodo",
|
||||
"Updates an absence in clockodo": "Updates an absence in clockodo",
|
||||
"Fetches absences from clockodo": "Fetches absences from clockodo",
|
||||
"Deletes an absence in clockodo": "Deletes an absence in clockodo",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Customer": "Customer",
|
||||
"Project": "项目",
|
||||
"Service": "Service",
|
||||
"Start Time": "开始时间",
|
||||
"End Time": "End Time",
|
||||
"Description": "描述",
|
||||
"Hourly Rate": "Hourly Rate",
|
||||
"User": "用户",
|
||||
"Entry ID": "Entry ID",
|
||||
"Start Date": "Start Date",
|
||||
"End Date": "End Date",
|
||||
"Customer ID Filter": "Customer ID Filter",
|
||||
"Project ID Filter": "Project ID Filter",
|
||||
"Service ID Filter": "Service ID Filter",
|
||||
"Billable": "Billable",
|
||||
"Billed": "Billed",
|
||||
"Enhanced List": "Enhanced List",
|
||||
"Page": "Page",
|
||||
"Name": "名称",
|
||||
"Number": "号码",
|
||||
"Active": "使用中",
|
||||
"Note": "说明",
|
||||
"Color": "Color",
|
||||
"Active Filter": "Active Filter",
|
||||
"Budget": "Budget",
|
||||
"Budget in hours?": "Budget in hours?",
|
||||
"Soft Budget": "Soft Budget",
|
||||
"Completed": "Completed",
|
||||
"Billed Amount": "Billed Amount",
|
||||
"Billing Complete": "Billing Complete",
|
||||
"Team": "团队",
|
||||
"Role": "作用",
|
||||
"Language": "Language",
|
||||
"Wage Type": "Wage Type",
|
||||
"Can see absences": "Can see absences",
|
||||
"Can manage absences": "Can manage absences",
|
||||
"Can add customers": "Can add customers",
|
||||
"Type": "类型",
|
||||
"Half Days": "Half Days",
|
||||
"Approved": "Approved",
|
||||
"Sick Note": "Sick Note",
|
||||
"Absence ID": "Absence ID",
|
||||
"Status": "状态",
|
||||
"Year": "Year",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"The ID of the customer": "The ID of the customer",
|
||||
"The ID of the project": "The ID of the project",
|
||||
"The ID of the service": "The ID of the service",
|
||||
"The ID of the user": "The ID of the user",
|
||||
"Filter entries by their user": "Filter entries by their user",
|
||||
"Filter entries by their customer": "Filter entries by their customer",
|
||||
"Filter entries by their project": "Filter entries by their project",
|
||||
"Filter entries by their service": "Filter entries by their service",
|
||||
"Only show entries that are billable": "Only show entries that are billable",
|
||||
"Only show entries that are already billed": "Only show entries that are already billed",
|
||||
"Retrieves additional information about the entries": "Retrieves additional information about the entries",
|
||||
"Reads only the specified page": "Reads only the specified page",
|
||||
"Filter customers by their active status": "Filter customers by their active status",
|
||||
"Filter projects by their customer": "Filter projects by their customer",
|
||||
"The ID of the team": "The ID of the team",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"Orange": "Orange",
|
||||
"Yellow": "Yellow",
|
||||
"Green": "Green",
|
||||
"Caribean": "Caribean",
|
||||
"Lightblue": "Lightblue",
|
||||
"Blue": "Blue",
|
||||
"Purple": "Purple",
|
||||
"Magenta": "Magenta",
|
||||
"Pink": "Pink",
|
||||
"German": "German",
|
||||
"English": "English",
|
||||
"French": "French",
|
||||
"Salary": "Salary",
|
||||
"Hourly wage": "Hourly wage",
|
||||
"Regular holiday": "Regular holiday",
|
||||
"Special leaves": "Special leaves",
|
||||
"Reduction of overtime": "Reduction of overtime",
|
||||
"Sick day": "Sick day",
|
||||
"Sick day of a child": "Sick day of a child",
|
||||
"School / further education": "School / further education",
|
||||
"Maternity protection": "Maternity protection",
|
||||
"Home office (planned hours are applied)": "Home office (planned hours are applied)",
|
||||
"Work out of office (planned hours are applied)": "Work out of office (planned hours are applied)",
|
||||
"Special leaves (unpaid)": "Special leaves (unpaid)",
|
||||
"Sick day (unpaid)": "Sick day (unpaid)",
|
||||
"Sick day of child (unpaid)": "Sick day of child (unpaid)",
|
||||
"Quarantine": "Quarantine",
|
||||
"Military / alternative service (only full days)": "Military / alternative service (only full days)",
|
||||
"Sick day (sickness benefit)": "Sick day (sickness benefit)",
|
||||
"Requested": "Requested",
|
||||
"Declined": "Declined",
|
||||
"Approval cancelled": "Approval cancelled",
|
||||
"Request cancelled": "Request cancelled",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色",
|
||||
"New Entry": "New Entry",
|
||||
"New Absence Enquiry": "New Absence Enquiry",
|
||||
"Triggers when a new time entry is created": "Triggers when a new time entry is created",
|
||||
"Triggers when a new absence enquiry is created": "Triggers when a new absence enquiry is created"
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
import {
|
||||
PieceAuth,
|
||||
Property,
|
||||
createPiece,
|
||||
} from '@activepieces/pieces-framework';
|
||||
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
import actions from './lib/actions';
|
||||
import triggers from './lib/triggers';
|
||||
|
||||
export const clockodoAuth = PieceAuth.CustomAuth({
|
||||
required: true,
|
||||
props: {
|
||||
email: Property.ShortText({
|
||||
displayName: 'E-Mail',
|
||||
required: true,
|
||||
description: 'The email of your clockodo user',
|
||||
}),
|
||||
token: PieceAuth.SecretText({
|
||||
displayName: 'API-Token',
|
||||
description: 'Your api token (can be found in profile settings)',
|
||||
required: true,
|
||||
}),
|
||||
company_name: Property.ShortText({
|
||||
displayName: 'Company Name',
|
||||
description: 'Your company name or app name',
|
||||
required: true,
|
||||
}),
|
||||
company_email: Property.ShortText({
|
||||
displayName: 'Company E-Mail',
|
||||
description: 'A contact email for your company or app',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
export const clockodo = createPiece({
|
||||
displayName: 'Clockodo',
|
||||
description: 'Time tracking made easy',
|
||||
minimumSupportedRelease: '0.30.0',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/clockodo.png',
|
||||
categories: [PieceCategory.PRODUCTIVITY],
|
||||
authors: ["JanHolger","kishanprmr","MoShizzle","khaledmashaly","abuaboud"],
|
||||
auth: clockodoAuth,
|
||||
actions,
|
||||
triggers,
|
||||
});
|
||||
@@ -0,0 +1,60 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
clockodoCommon,
|
||||
emptyToNull,
|
||||
makeClient,
|
||||
reformatDate,
|
||||
} from '../../common';
|
||||
import { AbsenceStatus, AbsenceType } from '../../common/models/absence';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'create_absence',
|
||||
displayName: 'Create Absence',
|
||||
description: 'Creates a absence in clockodo',
|
||||
props: {
|
||||
date_since: Property.DateTime({
|
||||
displayName: 'Start Date',
|
||||
required: true,
|
||||
}),
|
||||
date_until: Property.DateTime({
|
||||
displayName: 'End Date',
|
||||
required: true,
|
||||
}),
|
||||
type: clockodoCommon.absenceType(true),
|
||||
user_id: clockodoCommon.user_id(false),
|
||||
half_days: Property.Checkbox({
|
||||
displayName: 'Half Days',
|
||||
required: false,
|
||||
}),
|
||||
approved: Property.Checkbox({
|
||||
displayName: 'Approved',
|
||||
required: false,
|
||||
}),
|
||||
note: Property.LongText({
|
||||
displayName: 'Note',
|
||||
required: false,
|
||||
}),
|
||||
sick_note: Property.Checkbox({
|
||||
displayName: 'Sick Note',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.createAbsence({
|
||||
date_since: reformatDate(propsValue.date_since) as string,
|
||||
date_until: reformatDate(propsValue.date_until) as string,
|
||||
type: propsValue.type as AbsenceType,
|
||||
users_id: propsValue.user_id as number,
|
||||
count_days: propsValue.half_days ? 0.5 : 1,
|
||||
status: propsValue.approved
|
||||
? AbsenceStatus.APPROVED
|
||||
: AbsenceStatus.REQUESTED,
|
||||
note: emptyToNull(propsValue.note),
|
||||
sick_note: propsValue.sick_note,
|
||||
});
|
||||
return res.absence;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,20 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'delete_absence',
|
||||
displayName: 'Delete Absence',
|
||||
description: 'Deletes an absence in clockodo',
|
||||
props: {
|
||||
absence_id: Property.Number({
|
||||
displayName: 'Absence ID',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
await client.deleteAbsence(propsValue.absence_id);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,21 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'get_absence',
|
||||
displayName: 'Get Absence',
|
||||
description: 'Retrieves a single absence from clockodo',
|
||||
props: {
|
||||
absence_id: Property.Number({
|
||||
displayName: 'Absence ID',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.getAbsence(propsValue.absence_id);
|
||||
return res.absence;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
import createAction from './create-absence';
|
||||
import getAction from './get-absence';
|
||||
import updateAction from './update-absence';
|
||||
import listAction from './list-absence';
|
||||
import deleteAction from './delete-absence';
|
||||
|
||||
export default [
|
||||
createAction,
|
||||
getAction,
|
||||
updateAction,
|
||||
listAction,
|
||||
deleteAction,
|
||||
];
|
||||
@@ -0,0 +1,27 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { clockodoCommon, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'list_absences',
|
||||
displayName: 'Get Absences',
|
||||
description: 'Fetches absences from clockodo',
|
||||
props: {
|
||||
year: Property.Number({
|
||||
displayName: 'Year',
|
||||
required: true,
|
||||
}),
|
||||
user_id: clockodoCommon.user_id(false),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.listAbsences({
|
||||
year: propsValue.year,
|
||||
users_id: propsValue.user_id,
|
||||
});
|
||||
return {
|
||||
absences: res.absences,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,68 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
clockodoCommon,
|
||||
emptyToNull,
|
||||
makeClient,
|
||||
reformatDate,
|
||||
} from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'update_absence',
|
||||
displayName: 'Update Absence',
|
||||
description: 'Updates an absence in clockodo',
|
||||
props: {
|
||||
absence_id: Property.Number({
|
||||
displayName: 'Absence ID',
|
||||
required: true,
|
||||
}),
|
||||
date_since: Property.DateTime({
|
||||
displayName: 'Start Date',
|
||||
required: false,
|
||||
}),
|
||||
date_until: Property.DateTime({
|
||||
displayName: 'End Date',
|
||||
required: false,
|
||||
}),
|
||||
type: clockodoCommon.absenceType(false),
|
||||
status: Property.StaticDropdown({
|
||||
displayName: 'Status',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ value: 0, label: 'Requested' },
|
||||
{ value: 1, label: 'Approved' },
|
||||
{ value: 2, label: 'Declined' },
|
||||
{ value: 3, label: 'Approval cancelled' },
|
||||
{ value: 4, label: 'Request cancelled' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
half_days: Property.Checkbox({
|
||||
displayName: 'Half Days',
|
||||
required: false,
|
||||
}),
|
||||
note: Property.LongText({
|
||||
displayName: 'Note',
|
||||
required: false,
|
||||
}),
|
||||
sick_note: Property.Checkbox({
|
||||
displayName: 'Sick Note',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.updateAbsence(propsValue.absence_id, {
|
||||
date_since: reformatDate(propsValue.date_since),
|
||||
date_until: reformatDate(propsValue.date_until),
|
||||
type: propsValue.type,
|
||||
status: propsValue.status,
|
||||
count_days: propsValue.half_days ? 0.5 : 1,
|
||||
note: emptyToNull(propsValue.note),
|
||||
sick_note: propsValue.sick_note,
|
||||
});
|
||||
return res.absence;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,45 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { clockodoCommon, emptyToNull, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'create_customer',
|
||||
displayName: 'Create Customer',
|
||||
description: 'Creates a customer in clockodo',
|
||||
props: {
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
required: true,
|
||||
}),
|
||||
number: Property.ShortText({
|
||||
displayName: 'Number',
|
||||
required: false,
|
||||
}),
|
||||
active: Property.Checkbox({
|
||||
displayName: 'Active',
|
||||
required: false,
|
||||
}),
|
||||
billable: Property.Checkbox({
|
||||
displayName: 'Billable',
|
||||
required: false,
|
||||
}),
|
||||
note: Property.LongText({
|
||||
displayName: 'Note',
|
||||
required: false,
|
||||
}),
|
||||
color: clockodoCommon.color(false),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.createCustomer({
|
||||
name: propsValue.name,
|
||||
number: emptyToNull(propsValue.number),
|
||||
active: propsValue.active,
|
||||
billable_default: propsValue.billable,
|
||||
note: emptyToNull(propsValue.note),
|
||||
color: propsValue.color,
|
||||
});
|
||||
return res.customer;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,17 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { clockodoCommon, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'delete_customer',
|
||||
displayName: 'Delete Customer',
|
||||
description: 'Deletes a customer in clockodo',
|
||||
props: {
|
||||
customer_id: clockodoCommon.customer_id(true, false),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
await client.deleteCustomer(propsValue.customer_id as number);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,18 @@
|
||||
import { clockodoCommon, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'get_customer',
|
||||
displayName: 'Get Customer',
|
||||
description: 'Retrieves a single customer from clockodo',
|
||||
props: {
|
||||
customer_id: clockodoCommon.customer_id(true, undefined),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.getCustomer(propsValue.customer_id as number);
|
||||
return res.customer;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
import createAction from './create-customer';
|
||||
import getAction from './get-customer';
|
||||
import updateAction from './update-customer';
|
||||
import listAction from './list-customers';
|
||||
import deleteAction from './delete-customer';
|
||||
|
||||
export default [
|
||||
createAction,
|
||||
getAction,
|
||||
updateAction,
|
||||
listAction,
|
||||
deleteAction,
|
||||
];
|
||||
@@ -0,0 +1,45 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { makeClient } from '../../common';
|
||||
import { CustomerListFilter } from '../../common/models/customer';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'list_customers',
|
||||
displayName: 'Get Customers',
|
||||
description: 'Fetches customers from clockodo',
|
||||
props: {
|
||||
active_filter: Property.Checkbox({
|
||||
displayName: 'Active Filter',
|
||||
description: 'Filter customers by their active status',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
page: Property.Number({
|
||||
displayName: 'Page',
|
||||
description: 'Reads only the specified page',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const filter: CustomerListFilter = {
|
||||
active: propsValue.active_filter,
|
||||
};
|
||||
if (propsValue.page !== undefined) {
|
||||
const res = await client.listCustomers({
|
||||
page: propsValue.page,
|
||||
filter,
|
||||
});
|
||||
return {
|
||||
pagination: res.paging,
|
||||
customers: res.customers,
|
||||
};
|
||||
} else {
|
||||
const customers = await client.listAllCustomers(filter);
|
||||
return {
|
||||
customers,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,46 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { clockodoCommon, emptyToNull, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'update_customer',
|
||||
displayName: 'Update Customer',
|
||||
description: 'Updates a customer in clockodo',
|
||||
props: {
|
||||
customer_id: clockodoCommon.customer_id(true, undefined),
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
required: false,
|
||||
}),
|
||||
number: Property.ShortText({
|
||||
displayName: 'Number',
|
||||
required: false,
|
||||
}),
|
||||
active: Property.Checkbox({
|
||||
displayName: 'Active',
|
||||
required: false,
|
||||
}),
|
||||
billable: Property.Checkbox({
|
||||
displayName: 'Billable',
|
||||
required: false,
|
||||
}),
|
||||
note: Property.LongText({
|
||||
displayName: 'Note',
|
||||
required: false,
|
||||
}),
|
||||
color: clockodoCommon.color(false),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.updateCustomer(propsValue.customer_id as number, {
|
||||
name: propsValue.name,
|
||||
number: emptyToNull(propsValue.number),
|
||||
active: propsValue.active,
|
||||
billable_default: propsValue.billable,
|
||||
note: emptyToNull(propsValue.note),
|
||||
color: propsValue.color,
|
||||
});
|
||||
return res.customer;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,47 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { clockodoCommon, makeClient, reformatDateTime } from '../../common';
|
||||
import { TimeRecordEntry } from '../../common/models/entry';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'create_entry',
|
||||
displayName: 'Create Entry',
|
||||
description: 'Creates an entry in clockodo',
|
||||
props: {
|
||||
customer_id: clockodoCommon.customer_id(),
|
||||
project_id: clockodoCommon.project_id(false),
|
||||
service_id: clockodoCommon.service_id(),
|
||||
time_since: Property.DateTime({
|
||||
displayName: 'Start Time',
|
||||
required: true,
|
||||
}),
|
||||
time_until: Property.DateTime({
|
||||
displayName: 'End Time',
|
||||
required: true,
|
||||
}),
|
||||
text: Property.LongText({
|
||||
displayName: 'Description',
|
||||
required: false,
|
||||
}),
|
||||
hourly_rate: Property.Number({
|
||||
displayName: 'Hourly Rate',
|
||||
required: false,
|
||||
}),
|
||||
user_id: clockodoCommon.user_id(false),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.createEntry({
|
||||
customers_id: propsValue.customer_id,
|
||||
projects_id: propsValue.project_id,
|
||||
services_id: propsValue.service_id,
|
||||
time_since: reformatDateTime(propsValue.time_since),
|
||||
time_until: reformatDateTime(propsValue.time_until),
|
||||
text: propsValue.text,
|
||||
hourly_rate: propsValue.hourly_rate,
|
||||
users_id: propsValue.user_id,
|
||||
} as TimeRecordEntry); // For now we only support time records
|
||||
return res.entry;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,20 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'delete_entry',
|
||||
displayName: 'Delete Entry',
|
||||
description: 'Deletes an entry in clockodo',
|
||||
props: {
|
||||
entry_id: Property.Number({
|
||||
displayName: 'Entry ID',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
await client.deleteEntry(propsValue.entry_id);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,21 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'get_entry',
|
||||
displayName: 'Get Entry',
|
||||
description: 'Retrieves a single entry from clockodo',
|
||||
props: {
|
||||
entry_id: Property.Number({
|
||||
displayName: 'Entry ID',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient (auth.props);
|
||||
const res = await client.getEntry(propsValue.entry_id);
|
||||
return res.entry;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
import createAction from './create-entry';
|
||||
import getAction from './get-entry';
|
||||
import updateAction from './update-entry';
|
||||
import listAction from './list-entries';
|
||||
import deleteAction from './delete-entry';
|
||||
|
||||
export default [
|
||||
createAction,
|
||||
getAction,
|
||||
listAction,
|
||||
updateAction,
|
||||
deleteAction,
|
||||
];
|
||||
@@ -0,0 +1,113 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { makeClient, reformatDateTime } from '../../common';
|
||||
import { BillableType, EntryListFilter } from '../../common/models/entry';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
function calculateBillable(
|
||||
billable?: boolean,
|
||||
billed?: boolean
|
||||
): BillableType | undefined {
|
||||
if (billable === undefined && billed === undefined) {
|
||||
return undefined;
|
||||
} else {
|
||||
if (billed) {
|
||||
return 2;
|
||||
} else {
|
||||
return billable ? 1 : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'list_entries',
|
||||
displayName: 'Get Entries',
|
||||
description: 'Fetches entries from clockodo',
|
||||
props: {
|
||||
time_since: Property.DateTime({
|
||||
displayName: 'Start Date',
|
||||
required: true,
|
||||
}),
|
||||
time_until: Property.DateTime({
|
||||
displayName: 'End Date',
|
||||
required: true,
|
||||
}),
|
||||
user_id_filter: Property.Number({
|
||||
displayName: 'Customer ID Filter',
|
||||
description: 'Filter entries by their user',
|
||||
required: false,
|
||||
}),
|
||||
customer_id_filter: Property.Number({
|
||||
displayName: 'Customer ID Filter',
|
||||
description: 'Filter entries by their customer',
|
||||
required: false,
|
||||
}),
|
||||
project_id_filter: Property.Number({
|
||||
displayName: 'Project ID Filter',
|
||||
description: 'Filter entries by their project',
|
||||
required: false,
|
||||
}),
|
||||
service_id_filter: Property.Number({
|
||||
displayName: 'Service ID Filter',
|
||||
description: 'Filter entries by their service',
|
||||
required: false,
|
||||
}),
|
||||
billable_filter: Property.Checkbox({
|
||||
displayName: 'Billable',
|
||||
description: 'Only show entries that are billable',
|
||||
required: false,
|
||||
}),
|
||||
billed_filter: Property.Checkbox({
|
||||
displayName: 'Billed',
|
||||
description: 'Only show entries that are already billed',
|
||||
required: false,
|
||||
}),
|
||||
enhanced_list: Property.Checkbox({
|
||||
displayName: 'Enhanced List',
|
||||
description: 'Retrieves additional information about the entries',
|
||||
required: false,
|
||||
}),
|
||||
page: Property.Number({
|
||||
displayName: 'Page',
|
||||
description: 'Reads only the specified page',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const filter: EntryListFilter = {
|
||||
users_id: propsValue.user_id_filter,
|
||||
customers_id: propsValue.customer_id_filter,
|
||||
projects_id: propsValue.project_id_filter,
|
||||
services_id: propsValue.service_id_filter,
|
||||
billable: calculateBillable(
|
||||
propsValue.billable_filter,
|
||||
propsValue.billed_filter
|
||||
),
|
||||
};
|
||||
const time_since = reformatDateTime(propsValue.time_since) as string;
|
||||
const time_until = reformatDateTime(propsValue.time_until) as string;
|
||||
if (propsValue.page !== undefined) {
|
||||
const res = await client.listEntries({
|
||||
time_since,
|
||||
time_until,
|
||||
enhanced_list: propsValue.enhanced_list,
|
||||
page: propsValue.page,
|
||||
filter,
|
||||
});
|
||||
return {
|
||||
pagination: res.paging,
|
||||
entries: res.entries,
|
||||
};
|
||||
} else {
|
||||
const entries = await client.listAllEntries(
|
||||
time_since,
|
||||
time_until,
|
||||
filter
|
||||
);
|
||||
return {
|
||||
entries,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,45 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { clockodoCommon, makeClient, reformatDateTime } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'update_entry',
|
||||
displayName: 'Update Entry',
|
||||
description: 'Updates an entry in clockodo',
|
||||
props: {
|
||||
entry_id: Property.Number({
|
||||
displayName: 'Entry ID',
|
||||
required: true,
|
||||
}),
|
||||
customer_id: clockodoCommon.customer_id(false),
|
||||
project_id: clockodoCommon.project_id(false),
|
||||
service_id: clockodoCommon.service_id(false),
|
||||
time_since: Property.DateTime({
|
||||
displayName: 'Start Time',
|
||||
required: false,
|
||||
}),
|
||||
time_until: Property.DateTime({
|
||||
displayName: 'End Time',
|
||||
required: false,
|
||||
}),
|
||||
text: Property.LongText({
|
||||
displayName: 'Description',
|
||||
required: false,
|
||||
}),
|
||||
user_id: clockodoCommon.user_id(false),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.updateEntry(propsValue.entry_id, {
|
||||
customers_id: propsValue.customer_id,
|
||||
projects_id: propsValue.project_id,
|
||||
services_id: propsValue.service_id,
|
||||
users_id: propsValue.user_id,
|
||||
text: propsValue.text,
|
||||
time_since: reformatDateTime(propsValue.time_since),
|
||||
time_until: reformatDateTime(propsValue.time_until),
|
||||
});
|
||||
return res.entry;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,29 @@
|
||||
import entryActions from './entry';
|
||||
import customerActions from './customer';
|
||||
import projectActions from './project';
|
||||
import serviceActions from './service';
|
||||
import teamActions from './team';
|
||||
import userActions from './user';
|
||||
import absenceActions from './absence';
|
||||
import { createCustomApiCallAction } from '@activepieces/pieces-common';
|
||||
import { clockodoAuth } from '../../index';
|
||||
|
||||
export default [
|
||||
...entryActions,
|
||||
...customerActions,
|
||||
...projectActions,
|
||||
...serviceActions,
|
||||
...teamActions,
|
||||
...userActions,
|
||||
...absenceActions,
|
||||
createCustomApiCallAction({
|
||||
baseUrl: () => 'https://my.clockodo.com/api', // Replace with the actual base URL
|
||||
auth: clockodoAuth,
|
||||
authMapping: async (auth) => ({
|
||||
'X-ClockodoApiUser': auth?.props?.email || '',
|
||||
'X-ClockodoApiKey': auth?.props?.token || '',
|
||||
'X-Clockodo-External-Application': auth?.props?.company_name || '',
|
||||
'Accept-Language': 'en',
|
||||
}),
|
||||
}),
|
||||
];
|
||||
@@ -0,0 +1,60 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { clockodoCommon, emptyToNull, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'create_project',
|
||||
displayName: 'Create Project',
|
||||
description: 'Creates a project in clockodo',
|
||||
props: {
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
required: true,
|
||||
}),
|
||||
customer_id: clockodoCommon.customer_id(),
|
||||
number: Property.ShortText({
|
||||
displayName: 'Number',
|
||||
required: false,
|
||||
}),
|
||||
active: Property.Checkbox({
|
||||
displayName: 'Active',
|
||||
required: false,
|
||||
}),
|
||||
billable: Property.Checkbox({
|
||||
displayName: 'Billable',
|
||||
required: false,
|
||||
}),
|
||||
budget: Property.Number({
|
||||
displayName: 'Budget',
|
||||
required: false,
|
||||
}),
|
||||
budget_is_hours: Property.Checkbox({
|
||||
displayName: 'Budget in hours?',
|
||||
required: false,
|
||||
}),
|
||||
budget_is_not_strict: Property.Checkbox({
|
||||
displayName: 'Soft Budget',
|
||||
required: false,
|
||||
}),
|
||||
note: Property.LongText({
|
||||
displayName: 'Note',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.createProject({
|
||||
name: propsValue.name,
|
||||
customers_id: propsValue.customer_id as number,
|
||||
number: emptyToNull(propsValue.number),
|
||||
active: propsValue.active,
|
||||
billable_default: propsValue.billable,
|
||||
note: emptyToNull(propsValue.note),
|
||||
budget_money: propsValue.budget,
|
||||
budget_is_hours: propsValue.budget_is_hours,
|
||||
budget_is_not_strict: propsValue.budget_is_not_strict,
|
||||
});
|
||||
return res.project;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,17 @@
|
||||
import { clockodoCommon, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'delete_project',
|
||||
displayName: 'Delete Project',
|
||||
description: 'Deletes a project in clockodo',
|
||||
props: {
|
||||
project_id: clockodoCommon.project_id(true, false, false),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
await client.deleteProject(propsValue.project_id as number);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,18 @@
|
||||
import { clockodoCommon, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'get_project',
|
||||
displayName: 'Get Project',
|
||||
description: 'Retrieves a single project from clockodo',
|
||||
props: {
|
||||
project_id: clockodoCommon.project_id(true, false, null),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.getProject(propsValue.project_id as number);
|
||||
return res.project;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
import createAction from './create-project';
|
||||
import getAction from './get-project';
|
||||
import updateAction from './update-project';
|
||||
import listAction from './list-projects';
|
||||
import deleteAction from './delete-project';
|
||||
|
||||
export default [
|
||||
createAction,
|
||||
getAction,
|
||||
listAction,
|
||||
updateAction,
|
||||
deleteAction,
|
||||
];
|
||||
@@ -0,0 +1,51 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { makeClient } from '../../common';
|
||||
import { ProjectListFilter } from '../../common/models/project';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'list_projects',
|
||||
displayName: 'Get Projects',
|
||||
description: 'Fetches projects from clockodo',
|
||||
props: {
|
||||
customer_id_filter: Property.Number({
|
||||
displayName: 'Customer ID Filter',
|
||||
description: 'Filter projects by their customer',
|
||||
required: false,
|
||||
}),
|
||||
active_filter: Property.Checkbox({
|
||||
displayName: 'Active Filter',
|
||||
description: 'Filter customers by their active status',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
page: Property.Number({
|
||||
displayName: 'Page',
|
||||
description: 'Reads only the specified page',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const filter: ProjectListFilter = {
|
||||
customers_id: propsValue.customer_id_filter,
|
||||
active: propsValue.active_filter,
|
||||
};
|
||||
if (propsValue.page !== undefined) {
|
||||
const res = await client.listProjects({
|
||||
page: propsValue.page,
|
||||
filter,
|
||||
});
|
||||
return {
|
||||
pagination: res.paging,
|
||||
projects: res.projects,
|
||||
};
|
||||
} else {
|
||||
const projects = await client.listAllProjects(filter);
|
||||
return {
|
||||
projects,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,76 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { clockodoCommon, emptyToNull, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'update_project',
|
||||
displayName: 'Update Project',
|
||||
description: 'Updates a project in clockodo',
|
||||
props: {
|
||||
project_id: clockodoCommon.project_id(true, false, null),
|
||||
customer_id: clockodoCommon.customer_id(false),
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
required: false,
|
||||
}),
|
||||
number: Property.ShortText({
|
||||
displayName: 'Number',
|
||||
required: false,
|
||||
}),
|
||||
active: Property.Checkbox({
|
||||
displayName: 'Active',
|
||||
required: false,
|
||||
}),
|
||||
billable: Property.Checkbox({
|
||||
displayName: 'Billable',
|
||||
required: false,
|
||||
}),
|
||||
budget: Property.Number({
|
||||
displayName: 'Budget',
|
||||
required: false,
|
||||
}),
|
||||
budget_is_hours: Property.Checkbox({
|
||||
displayName: 'Budget in hours?',
|
||||
required: false,
|
||||
}),
|
||||
budget_is_not_strict: Property.Checkbox({
|
||||
displayName: 'Soft Budget',
|
||||
required: false,
|
||||
}),
|
||||
note: Property.LongText({
|
||||
displayName: 'Note',
|
||||
required: false,
|
||||
}),
|
||||
completed: Property.Checkbox({
|
||||
displayName: 'Completed',
|
||||
required: false,
|
||||
}),
|
||||
billed_amount: Property.Number({
|
||||
displayName: 'Billed Amount',
|
||||
required: false,
|
||||
}),
|
||||
billing_complete: Property.Checkbox({
|
||||
displayName: 'Billing Complete',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.updateProject(propsValue.project_id as number, {
|
||||
name: propsValue.name,
|
||||
customers_id: propsValue.customer_id,
|
||||
number: emptyToNull(propsValue.number),
|
||||
active: propsValue.active,
|
||||
billable_default: propsValue.billable,
|
||||
note: emptyToNull(propsValue.note),
|
||||
budget_money: propsValue.budget,
|
||||
budget_is_hours: propsValue.budget_is_hours,
|
||||
budget_is_not_strict: propsValue.budget_is_not_strict,
|
||||
completed: propsValue.completed,
|
||||
billed_money: propsValue.billed_amount,
|
||||
billed_completely: propsValue.billing_complete,
|
||||
});
|
||||
return res.project;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,38 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { emptyToNull, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'create_service',
|
||||
displayName: 'Create Service',
|
||||
description: 'Creates a service in clockodo',
|
||||
props: {
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
required: true,
|
||||
}),
|
||||
number: Property.ShortText({
|
||||
displayName: 'Number',
|
||||
required: false,
|
||||
}),
|
||||
active: Property.Checkbox({
|
||||
displayName: 'Active',
|
||||
required: false,
|
||||
}),
|
||||
note: Property.LongText({
|
||||
displayName: 'Note',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.createService({
|
||||
name: propsValue.name,
|
||||
number: emptyToNull(propsValue.number),
|
||||
active: propsValue.active,
|
||||
note: emptyToNull(propsValue.note),
|
||||
});
|
||||
return res.service;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,17 @@
|
||||
import { clockodoCommon, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'delete_service',
|
||||
displayName: 'Delete Service',
|
||||
description: 'Deletes a service in clockodo',
|
||||
props: {
|
||||
service_id: clockodoCommon.service_id(true, false),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
await client.deleteService(propsValue.service_id as number);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,18 @@
|
||||
import { clockodoCommon, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'get_service',
|
||||
displayName: 'Get Service',
|
||||
description: 'Retrieves a single service from clockodo',
|
||||
props: {
|
||||
service_id: clockodoCommon.service_id(true, null),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.getService(propsValue.service_id as number);
|
||||
return res.service;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
import createAction from './create-service';
|
||||
import getAction from './get-service';
|
||||
import updateAction from './update-service';
|
||||
import listAction from './list-services';
|
||||
import deleteAction from './delete-service';
|
||||
|
||||
export default [
|
||||
createAction,
|
||||
getAction,
|
||||
updateAction,
|
||||
listAction,
|
||||
deleteAction,
|
||||
];
|
||||
@@ -0,0 +1,18 @@
|
||||
import { makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'list_services',
|
||||
displayName: 'Get Services',
|
||||
description: 'Fetches services from clockodo',
|
||||
props: {},
|
||||
async run({ auth }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.listServices();
|
||||
return {
|
||||
services: res.services,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,39 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { clockodoCommon, emptyToNull, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'update_service',
|
||||
displayName: 'Update Service',
|
||||
description: 'Updates a service in clockodo',
|
||||
props: {
|
||||
service_id: clockodoCommon.service_id(true, null),
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
required: false,
|
||||
}),
|
||||
number: Property.ShortText({
|
||||
displayName: 'Number',
|
||||
required: false,
|
||||
}),
|
||||
active: Property.Checkbox({
|
||||
displayName: 'Active',
|
||||
required: false,
|
||||
}),
|
||||
note: Property.LongText({
|
||||
displayName: 'Note',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.updateService(propsValue.service_id as number, {
|
||||
name: propsValue.name,
|
||||
number: emptyToNull(propsValue.number),
|
||||
active: propsValue.active,
|
||||
note: emptyToNull(propsValue.note),
|
||||
});
|
||||
return res.service;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,18 @@
|
||||
import { clockodoCommon, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'get_team',
|
||||
displayName: 'Get Team',
|
||||
description: 'Retrieves a single team from clockodo',
|
||||
props: {
|
||||
team_id: clockodoCommon.team_id(),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.getTeam(propsValue.team_id as number);
|
||||
return res.team;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,4 @@
|
||||
import getAction from './get-team';
|
||||
import listAction from './list-teams';
|
||||
|
||||
export default [getAction, listAction];
|
||||
@@ -0,0 +1,18 @@
|
||||
import { makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'list_teams',
|
||||
displayName: 'Get Teams',
|
||||
description: 'Fetches teams from clockodo',
|
||||
props: {},
|
||||
async run({ auth }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.listTeams();
|
||||
return {
|
||||
teams: res.teams,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,68 @@
|
||||
import { clockodoCommon, emptyToNull, makeClient } from '../../common';
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'create_user',
|
||||
displayName: 'Create User',
|
||||
description: 'Creates a user in clockodo',
|
||||
props: {
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
required: true,
|
||||
}),
|
||||
email: Property.ShortText({
|
||||
displayName: 'E-Mail',
|
||||
required: true,
|
||||
}),
|
||||
role: Property.ShortText({
|
||||
displayName: 'Role',
|
||||
required: true,
|
||||
}),
|
||||
number: Property.ShortText({
|
||||
displayName: 'Number',
|
||||
required: false,
|
||||
}),
|
||||
team_id: clockodoCommon.team_id(false),
|
||||
language: clockodoCommon.language(false),
|
||||
wage_type: Property.StaticDropdown({
|
||||
displayName: 'Wage Type',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Salary', value: 1 },
|
||||
{ label: 'Hourly wage', value: 2 },
|
||||
],
|
||||
},
|
||||
}),
|
||||
can_generally_see_absences: Property.Checkbox({
|
||||
displayName: 'Can see absences',
|
||||
required: false,
|
||||
}),
|
||||
can_generally_manage_absences: Property.Checkbox({
|
||||
displayName: 'Can manage absences',
|
||||
required: false,
|
||||
}),
|
||||
can_add_customers: Property.Checkbox({
|
||||
displayName: 'Can add customers',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.createUser({
|
||||
name: propsValue.name,
|
||||
email: propsValue.email,
|
||||
role: propsValue.role,
|
||||
number: emptyToNull(propsValue.number),
|
||||
teams_id: propsValue.team_id,
|
||||
language: propsValue.language,
|
||||
wage_type: propsValue.wage_type,
|
||||
can_generally_see_absences: propsValue.can_generally_see_absences,
|
||||
can_generally_manage_absences: propsValue.can_generally_manage_absences,
|
||||
can_add_customers: propsValue.can_add_customers,
|
||||
});
|
||||
return res.user;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,17 @@
|
||||
import { clockodoCommon, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'delete_user',
|
||||
displayName: 'Delete User',
|
||||
description: 'Deletes a user in clockodo',
|
||||
props: {
|
||||
user_id: clockodoCommon.user_id(true, false),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
await client.deleteUser(propsValue.user_id as number);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,18 @@
|
||||
import { clockodoCommon, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'get_user',
|
||||
displayName: 'Get User',
|
||||
description: 'Retrieves a single user from clockodo',
|
||||
props: {
|
||||
user_id: clockodoCommon.user_id(true, null),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.getUser(propsValue.user_id as number);
|
||||
return res.user;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
import getAction from './get-user';
|
||||
import listAction from './list-users';
|
||||
import createAction from './create-user';
|
||||
import updateAction from './update-user';
|
||||
import deleteAction from './delete-user';
|
||||
|
||||
export default [
|
||||
getAction,
|
||||
listAction,
|
||||
createAction,
|
||||
updateAction,
|
||||
deleteAction,
|
||||
];
|
||||
@@ -0,0 +1,18 @@
|
||||
import { makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'list_users',
|
||||
displayName: 'Get Users',
|
||||
description: 'Fetches users from clockodo',
|
||||
props: {},
|
||||
async run({ auth }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.listUsers();
|
||||
return {
|
||||
users: res.users,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,74 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { clockodoCommon, emptyToNull, makeClient } from '../../common';
|
||||
import { clockodoAuth } from '../../../';
|
||||
|
||||
export default createAction({
|
||||
auth: clockodoAuth,
|
||||
name: 'update_user',
|
||||
displayName: 'Update User',
|
||||
description: 'Updates a user in clockodo',
|
||||
props: {
|
||||
user_id: clockodoCommon.user_id(true, null),
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
required: false,
|
||||
}),
|
||||
email: Property.ShortText({
|
||||
displayName: 'E-Mail',
|
||||
required: false,
|
||||
}),
|
||||
role: Property.ShortText({
|
||||
displayName: 'Role',
|
||||
required: false,
|
||||
}),
|
||||
number: Property.ShortText({
|
||||
displayName: 'Number',
|
||||
required: false,
|
||||
}),
|
||||
active: Property.Checkbox({
|
||||
displayName: 'Active',
|
||||
required: false,
|
||||
}),
|
||||
team_id: clockodoCommon.team_id(false),
|
||||
language: clockodoCommon.language(false),
|
||||
wage_type: Property.StaticDropdown({
|
||||
displayName: 'Wage Type',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Salary', value: 1 },
|
||||
{ label: 'Hourly wage', value: 2 },
|
||||
],
|
||||
},
|
||||
}),
|
||||
can_generally_see_absences: Property.Checkbox({
|
||||
displayName: 'Can see absences',
|
||||
required: false,
|
||||
}),
|
||||
can_generally_manage_absences: Property.Checkbox({
|
||||
displayName: 'Can manage absences',
|
||||
required: false,
|
||||
}),
|
||||
can_add_customers: Property.Checkbox({
|
||||
displayName: 'Can add customers',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const client = makeClient(auth.props);
|
||||
const res = await client.updateUser(propsValue.user_id as number, {
|
||||
name: propsValue.name,
|
||||
email: propsValue.email,
|
||||
role: propsValue.role,
|
||||
number: emptyToNull(propsValue.number),
|
||||
active: propsValue.active,
|
||||
teams_id: propsValue.team_id,
|
||||
language: propsValue.language,
|
||||
wage_type: propsValue.wage_type,
|
||||
can_generally_see_absences: propsValue.can_generally_see_absences,
|
||||
can_generally_manage_absences: propsValue.can_generally_manage_absences,
|
||||
can_add_customers: propsValue.can_add_customers,
|
||||
});
|
||||
return res.user;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,423 @@
|
||||
import {
|
||||
HttpMessageBody,
|
||||
HttpMethod,
|
||||
QueryParams,
|
||||
httpClient,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { ListRequest, prepareListRequest } from './models/common';
|
||||
import {
|
||||
UserCreateRequest,
|
||||
UserListResponse,
|
||||
UserSingleResponse,
|
||||
UserUpdateRequest,
|
||||
} from './models/user';
|
||||
import {
|
||||
CustomerSingleResponse,
|
||||
CustomerListResponse,
|
||||
CustomerCreateRequest,
|
||||
CustomerUpdateRequest,
|
||||
CustomerListFilter,
|
||||
Customer,
|
||||
} from './models/customer';
|
||||
import {
|
||||
ProjectSingleResponse,
|
||||
ProjectListResponse,
|
||||
ProjectCreateRequest,
|
||||
ProjectUpdateRequest,
|
||||
ProjectListFilter,
|
||||
Project,
|
||||
} from './models/project';
|
||||
import {
|
||||
ServiceSingleResponse,
|
||||
ServiceListResponse,
|
||||
ServiceCreateRequest,
|
||||
ServiceUpdateRequest,
|
||||
} from './models/service';
|
||||
import {
|
||||
EntrySingleResponse,
|
||||
EntryListResponse,
|
||||
EntryCreateRequest,
|
||||
EntryUpdateRequest,
|
||||
EntryListRequest,
|
||||
Entry,
|
||||
EntryListFilter,
|
||||
} from './models/entry';
|
||||
import {
|
||||
AbsenceSingleResponse,
|
||||
AbsenceListResponse,
|
||||
AbsenceCreateRequest,
|
||||
AbsenceUpdateRequest,
|
||||
AbsenceListRequest,
|
||||
} from './models/absence';
|
||||
import {
|
||||
TeamCreateRequest,
|
||||
TeamListResponse,
|
||||
TeamSingleResponse,
|
||||
TeamUpdateRequest,
|
||||
} from './models/team';
|
||||
|
||||
export class ClockodoClient {
|
||||
private clientIdentification: string;
|
||||
private language = 'en';
|
||||
|
||||
constructor(
|
||||
private email: string,
|
||||
private token: string,
|
||||
clientName: string,
|
||||
clientEmail: string
|
||||
) {
|
||||
this.clientIdentification = clientName + ';' + clientEmail;
|
||||
}
|
||||
|
||||
setLanguage(language: string) {
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
async makeRequest<T extends HttpMessageBody>(
|
||||
method: HttpMethod,
|
||||
url: string,
|
||||
query?: QueryParams,
|
||||
body?: object
|
||||
): Promise<T> {
|
||||
const res = await httpClient.sendRequest<T>({
|
||||
method,
|
||||
url: 'https://my.clockodo.com/api' + url,
|
||||
queryParams: query,
|
||||
body,
|
||||
headers: {
|
||||
'X-ClockodoApiUser': this.email,
|
||||
'X-ClockodoApiKey': this.token,
|
||||
'X-Clockodo-External-Application': this.clientIdentification,
|
||||
'Accept-Language': this.language,
|
||||
},
|
||||
});
|
||||
return res.body;
|
||||
}
|
||||
|
||||
listUsers(): Promise<UserListResponse> {
|
||||
return this.makeRequest<UserListResponse>(HttpMethod.GET, '/v2/users');
|
||||
}
|
||||
|
||||
getUser(id: number): Promise<UserSingleResponse> {
|
||||
return this.makeRequest<UserSingleResponse>(
|
||||
HttpMethod.GET,
|
||||
'/v2/users/' + id
|
||||
);
|
||||
}
|
||||
|
||||
createUser(request: UserCreateRequest) {
|
||||
return this.makeRequest<UserSingleResponse>(
|
||||
HttpMethod.POST,
|
||||
'/v2/users',
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
updateUser(
|
||||
id: number,
|
||||
request: UserUpdateRequest
|
||||
): Promise<UserSingleResponse> {
|
||||
return this.makeRequest<UserSingleResponse>(
|
||||
HttpMethod.PUT,
|
||||
'/v2/users/' + id,
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
deleteUser(id: number): Promise<object> {
|
||||
return this.makeRequest<object>(HttpMethod.DELETE, '/v2/users/' + id);
|
||||
}
|
||||
|
||||
listTeams(): Promise<TeamListResponse> {
|
||||
return this.makeRequest<TeamListResponse>(HttpMethod.GET, '/v2/teams');
|
||||
}
|
||||
|
||||
getTeam(id: number): Promise<TeamSingleResponse> {
|
||||
return this.makeRequest<TeamSingleResponse>(
|
||||
HttpMethod.GET,
|
||||
'/v2/teams/' + id
|
||||
);
|
||||
}
|
||||
|
||||
createTeam(request: TeamCreateRequest) {
|
||||
return this.makeRequest<TeamSingleResponse>(
|
||||
HttpMethod.POST,
|
||||
'/v2/teams',
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
updateTeam(
|
||||
id: number,
|
||||
request: TeamUpdateRequest
|
||||
): Promise<TeamSingleResponse> {
|
||||
return this.makeRequest<TeamSingleResponse>(
|
||||
HttpMethod.PUT,
|
||||
'/v2/teams/' + id,
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
deleteTeam(id: number): Promise<object> {
|
||||
return this.makeRequest<object>(HttpMethod.DELETE, '/v2/teams/' + id);
|
||||
}
|
||||
|
||||
listCustomers(
|
||||
request: ListRequest<CustomerListFilter> = {}
|
||||
): Promise<CustomerListResponse> {
|
||||
return this.makeRequest<CustomerListResponse>(
|
||||
HttpMethod.GET,
|
||||
'/v2/customers',
|
||||
prepareListRequest(request)
|
||||
);
|
||||
}
|
||||
|
||||
async listAllCustomers(filter: CustomerListFilter = {}): Promise<Customer[]> {
|
||||
let totalPages = 999999;
|
||||
const all: Customer[] = [];
|
||||
for (let page = 0; page < totalPages; page++) {
|
||||
const res = await this.listCustomers({
|
||||
page: page + 1,
|
||||
filter,
|
||||
});
|
||||
totalPages = res.paging.count_pages;
|
||||
res.customers.forEach((e) => all.push(e));
|
||||
}
|
||||
return all;
|
||||
}
|
||||
|
||||
getCustomer(id: number): Promise<CustomerSingleResponse> {
|
||||
return this.makeRequest<CustomerSingleResponse>(
|
||||
HttpMethod.GET,
|
||||
'/v2/customers/' + id
|
||||
);
|
||||
}
|
||||
|
||||
createCustomer(request: CustomerCreateRequest) {
|
||||
return this.makeRequest<CustomerSingleResponse>(
|
||||
HttpMethod.POST,
|
||||
'/v2/customers',
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
updateCustomer(
|
||||
id: number,
|
||||
request: CustomerUpdateRequest
|
||||
): Promise<CustomerSingleResponse> {
|
||||
return this.makeRequest<CustomerSingleResponse>(
|
||||
HttpMethod.PUT,
|
||||
'/v2/customers/' + id,
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
deleteCustomer(id: number): Promise<object> {
|
||||
return this.makeRequest<object>(HttpMethod.DELETE, '/v2/customers/' + id);
|
||||
}
|
||||
|
||||
listProjects(
|
||||
request: ListRequest<ProjectListFilter> = {}
|
||||
): Promise<ProjectListResponse> {
|
||||
return this.makeRequest<ProjectListResponse>(
|
||||
HttpMethod.GET,
|
||||
'/v2/projects',
|
||||
prepareListRequest(request)
|
||||
);
|
||||
}
|
||||
|
||||
async listAllProjects(filter: ProjectListFilter = {}): Promise<Project[]> {
|
||||
let totalPages = 999999;
|
||||
const all: Project[] = [];
|
||||
for (let page = 0; page < totalPages; page++) {
|
||||
const res = await this.listProjects({
|
||||
page: page + 1,
|
||||
filter,
|
||||
});
|
||||
totalPages = res.paging.count_pages;
|
||||
res.projects.forEach((e) => all.push(e));
|
||||
}
|
||||
return all;
|
||||
}
|
||||
|
||||
getProject(id: number): Promise<ProjectSingleResponse> {
|
||||
return this.makeRequest<ProjectSingleResponse>(
|
||||
HttpMethod.GET,
|
||||
'/v2/projects/' + id
|
||||
);
|
||||
}
|
||||
|
||||
createProject(request: ProjectCreateRequest) {
|
||||
return this.makeRequest<ProjectSingleResponse>(
|
||||
HttpMethod.POST,
|
||||
'/v2/projects',
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
updateProject(
|
||||
id: number,
|
||||
request: ProjectUpdateRequest
|
||||
): Promise<ProjectSingleResponse> {
|
||||
return this.makeRequest<ProjectSingleResponse>(
|
||||
HttpMethod.PUT,
|
||||
'/v2/projects/' + id,
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
deleteProject(id: number): Promise<object> {
|
||||
return this.makeRequest<object>(HttpMethod.DELETE, '/v2/projects/' + id);
|
||||
}
|
||||
|
||||
listServices(): Promise<ServiceListResponse> {
|
||||
return this.makeRequest<ServiceListResponse>(
|
||||
HttpMethod.GET,
|
||||
'/v2/services'
|
||||
);
|
||||
}
|
||||
|
||||
getService(id: number): Promise<ServiceSingleResponse> {
|
||||
return this.makeRequest<ServiceSingleResponse>(
|
||||
HttpMethod.GET,
|
||||
'/v2/services/' + id
|
||||
);
|
||||
}
|
||||
|
||||
createService(request: ServiceCreateRequest) {
|
||||
return this.makeRequest<ServiceSingleResponse>(
|
||||
HttpMethod.POST,
|
||||
'/v2/services',
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
updateService(
|
||||
id: number,
|
||||
request: ServiceUpdateRequest
|
||||
): Promise<ServiceSingleResponse> {
|
||||
return this.makeRequest<ServiceSingleResponse>(
|
||||
HttpMethod.PUT,
|
||||
'/v2/services/' + id,
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
deleteService(id: number): Promise<object> {
|
||||
return this.makeRequest<object>(HttpMethod.DELETE, '/v2/services/' + id);
|
||||
}
|
||||
|
||||
listEntries(request: EntryListRequest): Promise<EntryListResponse> {
|
||||
return this.makeRequest<EntryListResponse>(
|
||||
HttpMethod.GET,
|
||||
'/v2/entries',
|
||||
prepareListRequest(request)
|
||||
);
|
||||
}
|
||||
|
||||
async listAllEntries(
|
||||
time_since: string,
|
||||
time_until: string,
|
||||
filter: EntryListFilter = {}
|
||||
): Promise<Entry[]> {
|
||||
let totalPages = 999999;
|
||||
const all: Entry[] = [];
|
||||
for (let page = 0; page < totalPages; page++) {
|
||||
const res = await this.listEntries({
|
||||
page: page + 1,
|
||||
time_since,
|
||||
time_until,
|
||||
filter,
|
||||
});
|
||||
totalPages = res.paging.count_pages;
|
||||
res.entries.forEach((e) => all.push(e));
|
||||
}
|
||||
return all;
|
||||
}
|
||||
|
||||
getEntry(id: number): Promise<EntrySingleResponse> {
|
||||
return this.makeRequest<EntrySingleResponse>(
|
||||
HttpMethod.GET,
|
||||
'/v2/entries/' + id
|
||||
);
|
||||
}
|
||||
|
||||
createEntry(request: EntryCreateRequest) {
|
||||
return this.makeRequest<EntrySingleResponse>(
|
||||
HttpMethod.POST,
|
||||
'/v2/entries',
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
updateEntry(
|
||||
id: number,
|
||||
request: EntryUpdateRequest
|
||||
): Promise<EntrySingleResponse> {
|
||||
return this.makeRequest<EntrySingleResponse>(
|
||||
HttpMethod.PUT,
|
||||
'/v2/entries/' + id,
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
deleteEntry(id: number): Promise<object> {
|
||||
return this.makeRequest<object>(HttpMethod.DELETE, '/v2/entries/' + id);
|
||||
}
|
||||
|
||||
listAbsences(request: AbsenceListRequest): Promise<AbsenceListResponse> {
|
||||
const query: QueryParams = {
|
||||
year: request.year.toString(),
|
||||
};
|
||||
if (request.users_id) query.users_id = request.users_id.toString();
|
||||
return this.makeRequest<AbsenceListResponse>(
|
||||
HttpMethod.GET,
|
||||
'/absences',
|
||||
query
|
||||
);
|
||||
}
|
||||
|
||||
getAbsence(id: number): Promise<AbsenceSingleResponse> {
|
||||
return this.makeRequest<AbsenceSingleResponse>(
|
||||
HttpMethod.GET,
|
||||
'/absences/' + id
|
||||
);
|
||||
}
|
||||
|
||||
createAbsence(request: AbsenceCreateRequest) {
|
||||
return this.makeRequest<AbsenceSingleResponse>(
|
||||
HttpMethod.POST,
|
||||
'/absences',
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
updateAbsence(
|
||||
id: number,
|
||||
request: AbsenceUpdateRequest
|
||||
): Promise<AbsenceSingleResponse> {
|
||||
return this.makeRequest<AbsenceSingleResponse>(
|
||||
HttpMethod.PUT,
|
||||
'/absences/' + id,
|
||||
undefined,
|
||||
request
|
||||
);
|
||||
}
|
||||
|
||||
deleteAbsence(id: number): Promise<object> {
|
||||
return this.makeRequest<object>(HttpMethod.DELETE, '/absences/' + id);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,256 @@
|
||||
import { PiecePropValueSchema, Property } from '@activepieces/pieces-framework';
|
||||
import { ClockodoClient } from './client';
|
||||
import { clockodoAuth } from '../../';
|
||||
import { isNil } from '@activepieces/shared';
|
||||
|
||||
type ClockodoAuthValue = PiecePropValueSchema<typeof clockodoAuth>;
|
||||
|
||||
export function makeClient(auth: ClockodoAuthValue): ClockodoClient {
|
||||
return new ClockodoClient(
|
||||
auth.email,
|
||||
auth.token,
|
||||
auth.company_name,
|
||||
auth.company_email
|
||||
);
|
||||
}
|
||||
|
||||
export const clockodoCommon = {
|
||||
absenceType: (required = true) =>
|
||||
Property.StaticDropdown({
|
||||
displayName: 'Type',
|
||||
required,
|
||||
options: {
|
||||
options: [
|
||||
{ value: 1, label: 'Regular holiday' },
|
||||
{ value: 2, label: 'Special leaves' },
|
||||
{ value: 3, label: 'Reduction of overtime' },
|
||||
{ value: 4, label: 'Sick day' },
|
||||
{ value: 5, label: 'Sick day of a child' },
|
||||
{ value: 6, label: 'School / further education' },
|
||||
{ value: 7, label: 'Maternity protection' },
|
||||
{ value: 8, label: 'Home office (planned hours are applied)' },
|
||||
{ value: 9, label: 'Work out of office (planned hours are applied)' },
|
||||
{ value: 10, label: 'Special leaves (unpaid)' },
|
||||
{ value: 11, label: 'Sick day (unpaid)' },
|
||||
{ value: 12, label: 'Sick day of child (unpaid)' },
|
||||
{ value: 13, label: 'Quarantine' },
|
||||
{
|
||||
value: 14,
|
||||
label: 'Military / alternative service (only full days)',
|
||||
},
|
||||
{ value: 15, label: 'Sick day (sickness benefit)' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
customer_id: (required = true, active: boolean | null = true) =>
|
||||
Property.Dropdown({
|
||||
auth: clockodoAuth,
|
||||
description: 'The ID of the customer',
|
||||
displayName: 'Customer',
|
||||
required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (isNil(auth)) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'setup authentication first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const client = makeClient(auth.props);
|
||||
const customers = await client.listAllCustomers({
|
||||
active: active === null ? undefined : active,
|
||||
});
|
||||
return {
|
||||
disabled: false,
|
||||
options: customers.map((customer) => {
|
||||
return {
|
||||
label: customer.name,
|
||||
value: customer.id,
|
||||
};
|
||||
}),
|
||||
};
|
||||
},
|
||||
}),
|
||||
project_id: (
|
||||
required = true,
|
||||
requiresCustomer = true,
|
||||
active: boolean | null = true
|
||||
) =>
|
||||
Property.Dropdown({
|
||||
auth: clockodoAuth,
|
||||
description: 'The ID of the project',
|
||||
displayName: 'Project',
|
||||
required,
|
||||
refreshers: [...(requiresCustomer ? ['customer_id'] : [])],
|
||||
options: async ({ auth, customer_id }) => {
|
||||
if (isNil(auth)) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'setup authentication first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
if (requiresCustomer && !customer_id) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'select a customer first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const client = makeClient(auth.props);
|
||||
const projects = await client.listAllProjects({
|
||||
active: active === null ? undefined : active,
|
||||
customers_id: requiresCustomer
|
||||
? parseInt(customer_id as string)
|
||||
: undefined,
|
||||
});
|
||||
return {
|
||||
disabled: false,
|
||||
options: projects.map((project) => {
|
||||
return {
|
||||
label: project.name,
|
||||
value: project.id,
|
||||
};
|
||||
}),
|
||||
};
|
||||
},
|
||||
}),
|
||||
user_id: (required = true, active: boolean | null = true) =>
|
||||
Property.Dropdown({
|
||||
auth: clockodoAuth,
|
||||
description: 'The ID of the user',
|
||||
displayName: 'User',
|
||||
required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (isNil(auth)) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'setup authentication first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const client = makeClient(auth.props);
|
||||
const usersRes = await client.listUsers();
|
||||
return {
|
||||
disabled: false,
|
||||
options: usersRes.users
|
||||
.filter((u) => active === null || u.active === active)
|
||||
.map((user) => {
|
||||
return {
|
||||
label: user.name,
|
||||
value: user.id,
|
||||
};
|
||||
}),
|
||||
};
|
||||
},
|
||||
}),
|
||||
team_id: (required = true) =>
|
||||
Property.Dropdown({
|
||||
auth: clockodoAuth,
|
||||
description: 'The ID of the team',
|
||||
displayName: 'Team',
|
||||
required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (isNil(auth)) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'setup authentication first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const client = makeClient(auth.props);
|
||||
const teamsRes = await client.listTeams();
|
||||
return {
|
||||
disabled: false,
|
||||
options: teamsRes.teams.map((team) => {
|
||||
return {
|
||||
label: team.name,
|
||||
value: team.id,
|
||||
};
|
||||
}),
|
||||
};
|
||||
},
|
||||
}),
|
||||
service_id: (required = true, active: boolean | null = true) =>
|
||||
Property.Dropdown({
|
||||
auth: clockodoAuth,
|
||||
description: 'The ID of the service',
|
||||
displayName: 'Service',
|
||||
required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (isNil(auth)) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'setup authentication first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const client = makeClient(auth.props);
|
||||
const servicesRes = await client.listServices();
|
||||
return {
|
||||
disabled: false,
|
||||
options: servicesRes.services
|
||||
.filter((s) => active === null || s.active === active)
|
||||
.map((service) => {
|
||||
return {
|
||||
label: service.name,
|
||||
value: service.id,
|
||||
};
|
||||
}),
|
||||
};
|
||||
},
|
||||
}),
|
||||
language: (required = true) =>
|
||||
Property.StaticDropdown({
|
||||
displayName: 'Language',
|
||||
required,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'German', value: 'de' },
|
||||
{ label: 'English', value: 'en' },
|
||||
{ label: 'French', value: 'fr' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
color: (required = true) =>
|
||||
Property.StaticDropdown({
|
||||
displayName: 'Color',
|
||||
required,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Orange', value: 0xee9163 },
|
||||
{ label: 'Yellow', value: 0xf0d758 },
|
||||
{ label: 'Green', value: 0x9de34a },
|
||||
{ label: 'Caribean', value: 0x39e6ca },
|
||||
{ label: 'Lightblue', value: 0x56c6f9 },
|
||||
{ label: 'Blue', value: 0x3657f7 },
|
||||
{ label: 'Purple', value: 0x7b4be7 },
|
||||
{ label: 'Magenta', value: 0xd065e6 },
|
||||
{ label: 'Pink', value: 0xfc71d1 },
|
||||
],
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
||||
export function emptyToNull(val?: string): undefined | string | null {
|
||||
return val === undefined ? val : val || null;
|
||||
}
|
||||
|
||||
export function currentYear(): number {
|
||||
const todaysDate = new Date();
|
||||
return todaysDate.getFullYear();
|
||||
}
|
||||
|
||||
export function reformatDateTime(s?: string): string | undefined {
|
||||
if (!s) return undefined;
|
||||
return s.replace(/\.[0-9]{3}/, '');
|
||||
}
|
||||
|
||||
export function reformatDate(s?: string): string | undefined {
|
||||
if (!s) return undefined;
|
||||
return s.split('T', 2)[0];
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
export enum AbsenceStatus {
|
||||
REQUESTED = 0,
|
||||
APPROVED = 1,
|
||||
DECLINED = 2,
|
||||
APPROVAL_CANCELLED = 3,
|
||||
REQUEST_CANCELLED = 4,
|
||||
}
|
||||
|
||||
export enum AbsenceType {
|
||||
REGULAR_HOLIDAY = 1,
|
||||
SPECIAL_LEAVE = 2,
|
||||
REDUCTION_OF_OVERTIME = 3,
|
||||
SICK_DAY = 4,
|
||||
SICK_DAY_OF_CHILD = 5,
|
||||
EDUCATION = 6,
|
||||
MATERNITY_PROTECTION = 7,
|
||||
HOME_OFFICE = 8,
|
||||
WORK_OUT_OF_OFFICE = 9,
|
||||
UNPAID_SPECIAL_LEAVE = 10,
|
||||
UNPAID_SICK_DAY = 11,
|
||||
UNPAID_SICK_DAY_OF_CHILD = 12,
|
||||
QUARANTINE = 13,
|
||||
MILITARY_SERVICE = 14,
|
||||
SICK_DAY_BENEFIT = 15,
|
||||
}
|
||||
|
||||
export interface Absence {
|
||||
id: number;
|
||||
users_id: number;
|
||||
date_since: string;
|
||||
date_until?: string;
|
||||
status: AbsenceStatus;
|
||||
type: AbsenceType;
|
||||
note?: string;
|
||||
count_days?: number;
|
||||
count_hours?: number;
|
||||
sick_note?: boolean;
|
||||
date_enquired?: string;
|
||||
date_approved?: string;
|
||||
approved_by?: number;
|
||||
}
|
||||
|
||||
export interface AbsenceCreateRequest {
|
||||
type: AbsenceType;
|
||||
date_since: string;
|
||||
date_until: string | null;
|
||||
note?: string | null;
|
||||
users_id?: number;
|
||||
status?: AbsenceStatus;
|
||||
sick_note?: boolean;
|
||||
count_days?: number;
|
||||
}
|
||||
|
||||
export interface AbsenceUpdateRequest {
|
||||
type?: AbsenceType;
|
||||
date_since?: string;
|
||||
date_until?: string | null;
|
||||
note?: string | null;
|
||||
users_id?: number;
|
||||
status?: AbsenceStatus;
|
||||
sick_note?: boolean;
|
||||
count_days?: number;
|
||||
}
|
||||
|
||||
export interface AbsenceListRequest {
|
||||
year: number;
|
||||
users_id?: number;
|
||||
}
|
||||
|
||||
export interface AbsenceListResponse {
|
||||
absences: Absence[];
|
||||
}
|
||||
|
||||
export interface AbsenceSingleResponse {
|
||||
absence: Absence;
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
import { QueryParams } from '@activepieces/pieces-common';
|
||||
|
||||
export interface Paging {
|
||||
items_per_page: number;
|
||||
current_page: number;
|
||||
count_pages: number;
|
||||
count_items: number;
|
||||
}
|
||||
|
||||
export interface ListRequest<T extends object> {
|
||||
page?: number;
|
||||
filter?: T;
|
||||
}
|
||||
|
||||
function emptyValueFilter(
|
||||
accessor: (key: string) => any
|
||||
): (key: string) => boolean {
|
||||
return (key: string) => {
|
||||
const val = accessor(key);
|
||||
return (
|
||||
val !== null &&
|
||||
val !== undefined &&
|
||||
(typeof val != 'string' || val.length > 0)
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
export function prepareListRequest(request: ListRequest<any>): QueryParams {
|
||||
const params: QueryParams = {};
|
||||
const requestObj = request as Record<string, any>;
|
||||
Object.keys(request)
|
||||
.filter((k) => k != 'filter')
|
||||
.filter(emptyValueFilter((k) => requestObj[k]))
|
||||
.forEach((k: string) => {
|
||||
params[k] = (request as Record<string, any>)[k].toString();
|
||||
});
|
||||
if (request.filter) {
|
||||
Object.keys(request.filter)
|
||||
.filter(emptyValueFilter((k) => request.filter[k]))
|
||||
.forEach((k) => {
|
||||
params['filter[' + k + ']'] = request.filter[k].toString();
|
||||
});
|
||||
}
|
||||
return params;
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
import { Paging } from './common';
|
||||
|
||||
export interface Customer {
|
||||
id: number;
|
||||
name: string;
|
||||
number?: string;
|
||||
active: boolean;
|
||||
billable_default: boolean;
|
||||
note?: string;
|
||||
color: number;
|
||||
}
|
||||
|
||||
export interface CustomerCreateRequest {
|
||||
name: string;
|
||||
number?: string | null;
|
||||
active?: boolean;
|
||||
billable_default?: boolean;
|
||||
note?: string | null;
|
||||
color?: number;
|
||||
}
|
||||
|
||||
export interface CustomerUpdateRequest {
|
||||
name?: string;
|
||||
number?: string | null;
|
||||
active?: boolean;
|
||||
billable_default?: boolean;
|
||||
note?: string | null;
|
||||
color?: number;
|
||||
}
|
||||
|
||||
export interface CustomerListFilter {
|
||||
active?: boolean;
|
||||
}
|
||||
|
||||
export interface CustomerListResponse {
|
||||
paging: Paging;
|
||||
customers: Customer[];
|
||||
}
|
||||
|
||||
export interface CustomerSingleResponse {
|
||||
customer: Customer;
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
import { Paging, ListRequest } from './common';
|
||||
|
||||
export enum EntryType {
|
||||
TIME_RECORD = 1,
|
||||
LUMP_SUM = 2,
|
||||
LUMP_SERVICE = 3,
|
||||
}
|
||||
|
||||
export enum BillableType {
|
||||
NOT_BILLABLE = 0,
|
||||
BILLABLE = 1,
|
||||
BILLED = 2,
|
||||
}
|
||||
|
||||
export interface Entry {
|
||||
id: number;
|
||||
type: EntryType;
|
||||
customers_id: number;
|
||||
projects_id?: number;
|
||||
users_id: number;
|
||||
billable: BillableType;
|
||||
texts_id?: string;
|
||||
time_since: string;
|
||||
time_until?: string;
|
||||
time_insert: string;
|
||||
time_last_change: string;
|
||||
customers_name?: string;
|
||||
projects_name?: string;
|
||||
users_name?: string;
|
||||
text?: string;
|
||||
revenue?: number;
|
||||
}
|
||||
|
||||
export interface TimeRecordEntry extends Entry {
|
||||
services_id: number;
|
||||
duration?: number;
|
||||
offset: number;
|
||||
clocked: boolean;
|
||||
clocked_offline: boolean;
|
||||
time_clocked_since?: string;
|
||||
time_last_change_worktime: string;
|
||||
hourly_rate: number;
|
||||
service_name?: string;
|
||||
}
|
||||
|
||||
export interface LumpSumEntry extends Entry {
|
||||
services_id: number;
|
||||
lumpsum: number;
|
||||
service_name?: string;
|
||||
}
|
||||
|
||||
export interface LumpServiceEntry extends Entry {
|
||||
lumpsum_services_id: number;
|
||||
lumpsums_amount: number;
|
||||
lumpsum_services_price?: number;
|
||||
}
|
||||
|
||||
export interface EntryCreateRequest {
|
||||
customers_id: number;
|
||||
}
|
||||
|
||||
export interface TimeRecordEntryCreateRequest extends EntryCreateRequest {
|
||||
services_id: number;
|
||||
billable: BillableType;
|
||||
time_since: string;
|
||||
time_until: string | null;
|
||||
users_id?: number;
|
||||
duration?: number;
|
||||
hourly_rate?: number;
|
||||
projects_id?: number;
|
||||
text?: string;
|
||||
}
|
||||
|
||||
export interface LumpSumEntryCreateRequest extends EntryCreateRequest {
|
||||
services_id: number;
|
||||
lumpsum: number;
|
||||
billable: BillableType;
|
||||
time_since: string;
|
||||
users_id?: number;
|
||||
projects_id?: number;
|
||||
text?: string;
|
||||
}
|
||||
|
||||
export interface LumpServiceEntryCreateRequest extends EntryCreateRequest {
|
||||
lumpsum_services_id: number;
|
||||
lumpsum_services_amount: number;
|
||||
billable: BillableType;
|
||||
time_since: string;
|
||||
users_id?: number;
|
||||
projects_id?: number;
|
||||
text?: string;
|
||||
}
|
||||
|
||||
export interface EntryUpdateRequest {
|
||||
customers_id?: number;
|
||||
projects_id?: number;
|
||||
services_id?: number;
|
||||
lumpsum_services_id?: number;
|
||||
users_id?: number;
|
||||
billable?: BillableType;
|
||||
text?: string;
|
||||
duration?: number;
|
||||
lumpsum?: number;
|
||||
lumpsum_services_amount?: number;
|
||||
hourly_rate?: number;
|
||||
time_since?: string;
|
||||
time_until?: string;
|
||||
}
|
||||
|
||||
export interface EntryListFilter {
|
||||
users_id?: number;
|
||||
customers_id?: number;
|
||||
projects_id?: number;
|
||||
services_id?: number;
|
||||
lumpsum_services_id?: number;
|
||||
billable?: BillableType;
|
||||
text?: string;
|
||||
texts_id?: number;
|
||||
budget_type?: string;
|
||||
}
|
||||
|
||||
export interface EntryListRequest extends ListRequest<EntryListFilter> {
|
||||
time_since: string;
|
||||
time_until: string;
|
||||
enhanced_list?: boolean;
|
||||
calc_also_revenues_for_projects_with_hard_budget?: boolean;
|
||||
}
|
||||
|
||||
export interface EntryListResponse {
|
||||
paging: Paging;
|
||||
entries: Entry[];
|
||||
}
|
||||
|
||||
export interface EntrySingleResponse {
|
||||
entry: Entry;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
import { Paging } from './common';
|
||||
|
||||
export interface Project {
|
||||
id: number;
|
||||
customers_id: number;
|
||||
name: string;
|
||||
number?: string;
|
||||
active: boolean;
|
||||
billable_default: boolean;
|
||||
note?: string;
|
||||
budget_money?: number;
|
||||
budget_is_hours: boolean;
|
||||
budget_is_not_strict: boolean;
|
||||
completed: boolean;
|
||||
billed_money?: number;
|
||||
billed_completely?: boolean;
|
||||
revenue_factor?: number;
|
||||
}
|
||||
|
||||
export interface ProjectCreateRequest {
|
||||
name: string;
|
||||
customers_id: number;
|
||||
number?: string | null;
|
||||
active?: boolean;
|
||||
billable_default?: boolean;
|
||||
note?: string | null;
|
||||
budget_money?: number | null;
|
||||
budget_is_hours?: boolean;
|
||||
budget_is_not_strict?: boolean;
|
||||
}
|
||||
|
||||
export interface ProjectUpdateRequest {
|
||||
name?: string;
|
||||
customers_id?: number;
|
||||
number?: string | null;
|
||||
active?: boolean;
|
||||
billable_default?: boolean;
|
||||
note?: string | null;
|
||||
budget_money?: number | null;
|
||||
budget_is_hours?: boolean;
|
||||
budget_is_not_strict?: boolean;
|
||||
hourly_rate?: number | null;
|
||||
completed?: boolean;
|
||||
billed_money?: number | null;
|
||||
billed_completely?: boolean;
|
||||
}
|
||||
|
||||
export interface ProjectListFilter {
|
||||
active?: boolean;
|
||||
customers_id?: number;
|
||||
}
|
||||
|
||||
export interface ProjectListResponse {
|
||||
paging: Paging;
|
||||
projects: Project[];
|
||||
}
|
||||
|
||||
export interface ProjectSingleResponse {
|
||||
project: Project;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
export interface Service {
|
||||
id: number;
|
||||
name: string;
|
||||
number?: string;
|
||||
active: boolean;
|
||||
note?: string;
|
||||
}
|
||||
|
||||
export interface ServiceCreateRequest {
|
||||
name: string;
|
||||
number?: string | null;
|
||||
active?: boolean;
|
||||
note?: string | null;
|
||||
}
|
||||
|
||||
export interface ServiceUpdateRequest {
|
||||
name?: string;
|
||||
number?: string | null;
|
||||
active?: boolean;
|
||||
note?: string | null;
|
||||
}
|
||||
|
||||
export interface ServiceListResponse {
|
||||
services: Service[];
|
||||
}
|
||||
|
||||
export interface ServiceSingleResponse {
|
||||
service: Service;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
export interface Team {
|
||||
id: number;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface TeamCreateRequest {
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface TeamUpdateRequest {
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface TeamListResponse {
|
||||
teams: Team[];
|
||||
}
|
||||
|
||||
export interface TeamSingleResponse {
|
||||
team: Team;
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
export interface User {
|
||||
id: number;
|
||||
name: string;
|
||||
number?: string;
|
||||
email: string;
|
||||
role: string;
|
||||
active: boolean;
|
||||
timeformat_12h: boolean;
|
||||
weekstart_monday: boolean;
|
||||
weekend_friday: boolean;
|
||||
language: string;
|
||||
timezone: string;
|
||||
wage_type?: number;
|
||||
can_generally_see_absences: boolean;
|
||||
can_generally_manage_absences: boolean;
|
||||
can_add_customers: boolean;
|
||||
edit_lock?: string;
|
||||
edit_lock_dyn?: string;
|
||||
edit_lock_sync?: boolean;
|
||||
worktime_regulation_id?: number;
|
||||
teams_id?: number;
|
||||
nonbusinessgroups_id?: number;
|
||||
}
|
||||
|
||||
export interface UserCreateRequest {
|
||||
name: string;
|
||||
number?: string | null;
|
||||
email: string;
|
||||
role: string;
|
||||
timeformat_12h?: boolean;
|
||||
weekstart_monday?: boolean;
|
||||
weekend_friday?: boolean;
|
||||
language?: string;
|
||||
timezone?: string;
|
||||
wage_type?: number;
|
||||
can_generally_see_absences?: boolean;
|
||||
can_generally_manage_absences?: boolean;
|
||||
can_add_customers?: boolean;
|
||||
edit_lock_sync?: boolean;
|
||||
worktime_regulation_id?: number;
|
||||
teams_id?: number;
|
||||
nonbusinessgroups_id?: number;
|
||||
mail_to_user?: boolean;
|
||||
}
|
||||
|
||||
export interface UserUpdateRequest {
|
||||
name?: string;
|
||||
number?: string | null;
|
||||
email?: string;
|
||||
role?: string;
|
||||
active?: boolean;
|
||||
timeformat_12h?: boolean;
|
||||
weekstart_monday?: boolean;
|
||||
weekend_friday?: boolean;
|
||||
language?: string;
|
||||
timezone?: string;
|
||||
wage_type?: number;
|
||||
can_generally_see_absences?: boolean;
|
||||
can_generally_manage_absences?: boolean;
|
||||
can_add_customers?: boolean;
|
||||
edit_lock?: string;
|
||||
edit_lock_dyn?: string;
|
||||
edit_lock_sync?: boolean;
|
||||
worktime_regulation_id?: number;
|
||||
teams_id?: number;
|
||||
nonbusinessgroups_id?: number;
|
||||
}
|
||||
|
||||
export interface UserListResponse {
|
||||
users: User[];
|
||||
}
|
||||
|
||||
export interface UserSingleResponse {
|
||||
user: User;
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
import newEntryTrigger from './new-entry';
|
||||
import newAbsenceEnquiryTrigger from './new-absence-enquiry';
|
||||
|
||||
export default [newEntryTrigger, newAbsenceEnquiryTrigger];
|
||||
@@ -0,0 +1,69 @@
|
||||
import { AppConnectionValueForAuthProperty, TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { currentYear } from '../common';
|
||||
import { ClockodoClient } from '../common/client';
|
||||
import { clockodoAuth } from '../../';
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof clockodoAuth>, unknown> = {
|
||||
strategy: DedupeStrategy.LAST_ITEM,
|
||||
items: async ({ auth }) => {
|
||||
|
||||
const client = new ClockodoClient(
|
||||
auth.props.email,
|
||||
auth.props.token,
|
||||
auth.props.company_name,
|
||||
auth.props.company_email
|
||||
);
|
||||
const res = await client.listAbsences({ year: currentYear() });
|
||||
return res.absences
|
||||
.sort((a, b) => b.id - a.id)
|
||||
.map((a) => ({
|
||||
id: a.id,
|
||||
data: a,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export default createTrigger({
|
||||
auth: clockodoAuth,
|
||||
name: 'new_absence_enquiry',
|
||||
displayName: 'New Absence Enquiry',
|
||||
description: 'Triggers when a new absence enquiry is created',
|
||||
type: TriggerStrategy.POLLING,
|
||||
props: {},
|
||||
sampleData: {},
|
||||
onEnable: async (context) => {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
onDisable: async (context) => {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
run: async (context) => {
|
||||
return await pollingHelper.poll(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
files: context.files,
|
||||
});
|
||||
},
|
||||
test: async (context) => {
|
||||
return await pollingHelper.test(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
files: context.files,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,78 @@
|
||||
import { AppConnectionValueForAuthProperty, TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { currentYear } from '../common';
|
||||
import { ClockodoClient } from '../common/client';
|
||||
import { clockodoAuth } from '../../';
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof clockodoAuth>, unknown> = {
|
||||
strategy: DedupeStrategy.LAST_ITEM,
|
||||
items: async ({ auth }) => {
|
||||
const { email, token, company_name, company_email } = auth.props;
|
||||
const client = new ClockodoClient(
|
||||
email,
|
||||
token,
|
||||
company_name,
|
||||
company_email
|
||||
);
|
||||
const time_since = currentYear() - 1 + '-01-01T00:00:00Z';
|
||||
const time_until = currentYear() + 1 + '-12-31T23:59:59Z';
|
||||
let res = await client.listEntries({ time_since, time_until });
|
||||
if (res.paging.count_pages > 1) {
|
||||
res = await client.listEntries({
|
||||
time_since,
|
||||
time_until,
|
||||
page: res.paging.count_pages,
|
||||
});
|
||||
}
|
||||
return res.entries
|
||||
.sort((a, b) => b.id - a.id)
|
||||
.map((a) => ({
|
||||
id: a.id,
|
||||
data: a,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export default createTrigger({
|
||||
auth: clockodoAuth,
|
||||
name: 'new_entry',
|
||||
displayName: 'New Entry',
|
||||
description: 'Triggers when a new time entry is created',
|
||||
type: TriggerStrategy.POLLING,
|
||||
props: {},
|
||||
sampleData: {},
|
||||
onEnable: async (context) => {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
onDisable: async (context) => {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
run: async (context) => {
|
||||
return await pollingHelper.poll(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
files: context.files,
|
||||
});
|
||||
},
|
||||
test: async (context) => {
|
||||
return await pollingHelper.test(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
files: context.files,
|
||||
});
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user