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:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,226 @@
{
"Teamwork is a work and project management tool that helps teams improve collaboration, visibility, and accountability.": "Teamwork ist ein Arbeits- und Projektmanagementwerkzeug, das Teams dabei hilft, Zusammenarbeit, Sichtbarkeit und Rechenschaftspflicht zu verbessern.",
"Username": "Benutzername",
"Password": "Kennwort",
"Subdomain": "Subdomain",
"Your Teamwork email address.": "Ihre Teamwork-E-Mail-Adresse.",
"Your Teamwork site subdomain (e.g., mycompany for mycompany.teamwork.com)": "Ihre Teamwork-Site Subdomain (z.B. mycompany für mycompany.teamwork.com)",
"\n\tEnter your Teamwork username (email address) and password.\n\t": "\n\tGeben Sie Ihren Teamwork-Benutzernamen (E-Mail-Adresse) und Ihr Passwort ein.\n\t",
"Create Project": "Projekt erstellen",
"Create Task List": "Aufgabenliste erstellen",
"Create Task": "Aufgabe erstellen",
"Mark Task Complete": "Aufgabe vollständig markieren",
"Create Company": "Firma erstellen",
"Create Person": "Person erstellen",
"Update Task": "Aufgabe aktualisieren",
"Create Task Comment": "Aufgabenkommentar erstellen",
"Create Time Entry on Task": "Erstelle Zeiteintrag bei Aufgabe",
"Create Expense": "Ausgaben erstellen",
"Upload File to Project": "Datei in Projekt hochladen",
"Create Message Reply": "Erstelle Antwort",
"Create Milestone": "Meilenstein erstellen",
"Add People to Project": "Personen zum Projekt hinzufügen",
"Find Task": "Aufgabe finden",
"Find Company": "Firma finden",
"Find Milestone": "Meilenstein finden",
"Find Notebook / Notebook Comment": "Notizbuch / Notizbuch Kommentar finden",
"Create a new project (name, description, belongs to company, dates, etc.).": "Erstellen Sie ein neues Projekt (Name, Beschreibung, gehört zu Firma, Datum etc.).",
"Add a new task list under a project.": "Eine neue Aufgabenliste unter einem Projekt hinzufügen.",
"Add a new task under a project with description, due date, assignee, tags, etc.": "Fügen Sie eine neue Aufgabe unter einem Projekt mit Beschreibung, Ablaufdatum, Zuweisung, Tags etc. hinzu.",
"Set a tasks status to complete.": "Setze den Status einer Aufgabe zum Beenden.",
"Create a new company in Teamwork.": "Erstellen Sie ein neues Unternehmen in Teamwork.",
"Create a new user/contact (name, email, invite options).": "Neuen Benutzer/Kontakt erstellen (Name, E-Mail, Einladungsoptionen).",
"Modify a tasks fields (due date, assignee, content, priority, etc.).": "Ändern Sie die Felder einer Aufgabe (Fälligkeitsdatum, Zuordner, Inhalt, Priorität etc.).",
"Leave a comment in a task.": "Hinterlassen Sie einen Kommentar in einer Aufgabe.",
"Log time spent on a task with duration, description.": "Protokollieren Sie die für eine Aufgabe verbrachte Zeit mit der Dauer, Beschreibung.",
"Log new expense in a project with cost, description, date.": "Melden Sie neue Ausgaben in einem Projekt mit Kosten, Beschreibung, Datum.",
"Upload a file to a Teamwork project.": "Eine Datei in ein Teamwork-Projekt hochladen.",
"Post a reply in a message thread.": "Schreiben Sie eine Antwort in einem Nachrichtenthread.",
"Add a milestone with due date, description, responsible user, etc.": "Fügen Sie einen Meilenstein mit Fälligkeitsdatum, Beschreibung, verantwortlichem Benutzer etc. hinzu.",
"Add existing users to a project.": "Vorhandene Benutzer zu einem Projekt hinzufügen.",
"Search for tasks.": "Nach Aufgaben suchen.",
"Search for a company by name or domain.": "Suchen Sie nach einem Unternehmen nach Namen oder Domain.",
"Find a milestone by name or due date in a project.": "Finden Sie einen Meilenstein nach Namen oder Fälligkeitsdatum in einem Projekt.",
"Locate notebooks or note comments by search parameters.": "Suchen Sie nach Notizbüchern oder Notizen anhand von Suchparametern.",
"Name": "Name",
"Description": "Beschreibung",
"Company": "Firma",
"Category": "Kategorie",
"Tags": "Tags",
"Start Date": "Startdatum",
"End Date": "Enddatum",
"Project Owner": "Projektbesitzer",
"Custom Fields": "Eigene Felder",
"Project": "Projekt",
"Private": "Privat",
"Default Task Priority": "Standard-Aufgabenpriorität",
"Default Task Tags": "Standard-Aufgaben-Tags",
"Task List": "Aufgabenliste",
"Content": "Inhalt",
"Responsible Parties": "Verantwortliche Parteien",
"Due Date": "Fälligkeitsdatum",
"Priority": "Priorität",
"Attachment": "Anhang",
"Task": "Aufgabe",
"Website": "Webseite",
"Address 1": "Adresse 1",
"Address 2": "Adresse 2",
"City": "Stadt",
"State": "Bundesland",
"Zip Code": "Postleitzahl",
"Country Code": "Landesvorwahl",
"Phone": "Telefon",
"Fax": "Fax",
"Email 1": "E-Mail 1",
"Email 2": "E-Mail 2",
"Email 3": "E-Mail 3",
"Profile": "Profil",
"Private Notes": "Private Notizen",
"First Name": "Vorname",
"Last Name": "Nachname",
"Email": "E-Mail",
"User Type": "Benutzertyp",
"Send Invite": "Einladung senden",
"Title": "Titel",
"Comment": "Kommentar",
"Notify": "Benachrichtige",
"Date": "Datum",
"Time": "Zeit",
"Hours": "Stunden",
"Minutes": "Minuten",
"Is Billable": "Ist abrechenbar",
"Cost": "Kosten",
"File": "Datei",
"Message": "Nachricht",
"Body": "Körper",
"Notify All": "Alle benachrichtigen",
"Deadline": "Deadline",
"Users": "Benutzer",
"Search Term": "Suchbegriff",
"Search For": "Suche nach",
"The name of the project.": "Der Name des Projekts.",
"A description for the project.": "Eine Beschreibung für das Projekt.",
"The company to associate the project with.": "Das Unternehmen, mit dem das Projekt assoziiert wird.",
"The category to assign the project to.": "Die Kategorie, der das Projekt zugewiesen wird.",
"Tags to associate with the project.": "Schlagwörter, die dem Projekt zugeordnet werden sollen.",
"The start date of the project.": "Das Startdatum des Projekts.",
"The end date of the project.": "Das Enddatum des Projekts.",
"The user to assign as the project owner.": "Der Benutzer, der als Projekteigentümer zugewiesen wird.",
"Custom fields for this project.": "Benutzerdefinierte Felder für dieses Projekt.",
"The project to create the task list in.": "Das Projekt, in dem die Aufgabenliste erstellt werden soll.",
"The name of the task list.": "Der Name der Aufgabenliste.",
"A description for the task list.": "Eine Beschreibung für die Aufgabenliste.",
"Set to true to make the task list private.": "Auf true setzen, um die Aufgabenliste privat zu machen.",
"The default priority for new tasks in this list.": "Die Standardpriorität für neue Aufgaben in dieser Liste.",
"Default tags for new tasks in this list.": "Standard-Tags für neue Aufgaben in dieser Liste.",
"The project to create the task in.": "Das Projekt, in dem die Aufgabe erstellt werden soll.",
"The task list to add the task to.": "Die Aufgabenliste, zu der die Aufgabe hinzugefügt werden soll.",
"The content of the task.": "Der Inhalt der Aufgabe.",
"The users responsible for the task.": "Die Benutzer, die für die Aufgabe verantwortlich sind.",
"The start date of the task.": "Das Startdatum der Aufgabe.",
"The due date of the task.": "Enddatum der Aufgabe.",
"A description for the task.": "Eine Beschreibung für die Aufgabe.",
"The priority of the task.": "Die Priorität der Aufgabe.",
"Tags to associate with the task.": "Schlagwörter, die der Aufgabe zugeordnet werden sollen.",
"A file to attach to the task.": "Eine Datei, die der Aufgabe hinzugefügt werden soll.",
"Custom fields for this task.": "Benutzerdefinierte Felder für diese Aufgabe.",
"The task to mark as complete.": "Die Aufgabe, die als abgeschlossen markiert werden soll.",
"Name of the company.": "Name des Unternehmens.",
"Company's website address.": "Adresse der Firma.",
"Primary address line.": "Primäre Adresszeile.",
"Secondary address line.": "Sekundäre Adresszeile.",
"City name.": "Stadtname.",
"State or province.": "Bundesland oder Provinz.",
"Postal or zip code.": "Postleitzahl oder Postleitzahl.",
"2-letter ISO country code (e.g., US, GB).": "ISO-Ländercode mit 2 Buchstaben (z. B. USA, GB).",
"Primary phone number.": "Primäre Telefonnummer.",
"Fax number.": "Faxnummer.",
"Primary email address.": "Primäre E-Mail-Adresse.",
"Secondary email address.": "Sekundäre E-Mail-Adresse.",
"Tertiary email address.": "Tertiäre E-Mail-Adresse.",
"Public company profile or 'About Us' text.": "Öffentliches Unternehmensprofil oder \"Über uns\" Text.",
"Notes visible only to internal users.": "Notizen nur für interne Benutzer sichtbar.",
"Custom fields for this company.": "Benutzerdefinierte Felder für dieses Unternehmen.",
"The user's first name.": "Der Vorname des Benutzers.",
"The user's last name.": "Nachname des Benutzers.",
"The user's email address.": "Die E-Mail-Adresse des Benutzers.",
"The type of user to create.": "Der Typ des zu erstellenden Benutzers.",
"The company to associate the user with.": "Das Unternehmen, dem der Benutzer zugeordnet werden soll.",
"Send an invitation email to the new user.": "Senden Sie eine Einladungs-E-Mail an den neuen Benutzer.",
"The user's job title.": "Der Job-Titel.",
"The task to update.": "Die zu aktualisierende Aufgabe.",
"The new content of the task.": "Der neue Inhalt der Aufgabe.",
"The new description for the task.": "Die neue Beschreibung für die Aufgabe.",
"The new users responsible for the task.": "Die neuen Benutzer, die für die Aufgabe verantwortlich sind.",
"The new start date of the task.": "Das neue Startdatum der Aufgabe.",
"The new due date of the task.": "Das neue Fälligkeitsdatum der Aufgabe.",
"The new priority of the task.": "Die neue Priorität der Aufgabe.",
"New tags to associate with the task.": "Neue Schlagwörter, die mit der Aufgabe verknüpft werden sollen.",
"The task to add a comment to.": "Die Aufgabe, der ein Kommentar hinzugefügt werden soll.",
"The content of the comment.": "Der Inhalt des Kommentars.",
"A file to attach to the comment.": "Eine Datei, die an den Kommentar anhängt.",
"Who to notify about this comment.": "Wer über diesen Kommentar benachrichtigt werden soll.",
"Set to true to make the comment private.": "Auf true setzen, um den Kommentar privat zu machen.",
"Date of the time entry (yyyy-mm-dd)": "Datum des Zeiteintrags (jjjjjj-mm-tt)",
"Time of the entry (hh:mm:ss)": "Zeit des Eintrags (hh:mm:ss)",
"Duration in minutes": "Dauer in Minuten",
"The project to log the expense against.": "Das Projekt, um die Kosten zu protokollieren.",
"The name of the expense.": "Der Name der Kosten.",
"The cost of the expense.": "Die Kosten der Kosten.",
"The date of the expense.": "Das Datum der Aufwand.",
"A description for the expense.": "Eine Beschreibung für die Kosten.",
"The project to upload the file to.": "Das Projekt, in das die Datei hochgeladen wird.",
"The file to upload.": "Die hochzuladende Datei.",
"A description for the file.": "Eine Beschreibung für die Datei.",
"The category to assign the file to.": "Die Kategorie, der die Datei zugewiesen werden soll.",
"Set to true to make the file private.": "Auf true setzen, um die Datei privat zu machen.",
"The message to reply to.": "Die zu beantwortende Nachricht.",
"The content of the reply.": "Der Inhalt der Antwort.",
"Notify all project users of this reply.": "Alle Projektbenutzer über diese Antwort benachrichtigen.",
"The project to create the milestone in.": "Das Projekt zur Erstellung des Meilensteins in.",
"The title of the milestone.": "Der Titel des Meilensteins.",
"The due date of the milestone.": "Das Fälligkeitsdatum des Meilensteins.",
"The users responsible for the milestone.": "Die für den Meilenstein verantwortlichen Nutzer.",
"A description for the milestone.": "Eine Beschreibung für den Meilenstein.",
"Notify responsible parties about the milestone.": "Verantwortlichen über den Meilenstein informieren.",
"Set to true to make the milestone private.": "Auf true setzen, um den Meilenstein privat zu machen.",
"The project to add people to.": "Das Projekt, zu dem Personen hinzugefügt werden.",
"The users to add to the project.": "Die Benutzer, die dem Projekt hinzugefügt werden sollen.",
"The keyword to search for.": "Das zu suchende Stichwort.",
"Limit the search to a specific project.": "Die Suche auf ein bestimmtes Projekt beschränken.",
"The name or domain to search for.": "Der Name oder die zu suchende Domäne.",
"The name or due date to search for.": "Der Name oder das Enddatum der Suchanfrage.",
"The type of item to search for.": "Der Typ des Elements, nach dem gesucht werden soll.",
"None": "Keine",
"Low": "Niedrig",
"Medium": "Mittel",
"High": "Hoch",
"Standard User": "Standard-Benutzer",
"Collaborator": "Mitarbeiter",
"Contact": "Kontakt",
"Nobody": "Niemand",
"Followers": "Follower",
"All Project Users": "Alle Projektbenutzer",
"Notebook": "Notizbuch",
"Notebook Comment": "Notizbuch Kommentar",
"New Task": "Neue Aufgabe",
"New Person": "Neue Person",
"New Comment": "Neuer Kommentar",
"New Message": "Neue Nachricht",
"New File": "Neue Datei",
"New Expense": "Neue Ausgaben",
"New Invoice": "Neue Rechnung",
"Fires when a task is created.": "Feuert ab, wenn eine Aufgabe erstellt wird.",
"Fires when a new person (user/contact) is added.": "Feuert wenn eine neue Person (Benutzer/Kontakt) hinzugefügt wird.",
"Fires when a new comment is posted.": "Feuert ab, wenn ein neuer Kommentar veröffentlicht wird.",
"Fires when a new message is posted (in project messages or discussions).": "Feuert ab, wenn eine neue Nachricht veröffentlicht wird (in Projektnachrichten oder Diskussionen).",
"Fires when a new file is added.": "Feuert ab, wenn eine neue Datei hinzugefügt wird.",
"Fires when a new expense entry is added.": "Feuer, wenn ein neuer Ausgabeneintrag hinzugefügt wird.",
"Fires when a new invoice is created.": "Feuert ab, wenn eine neue Rechnung erstellt wird.",
"The project to watch for new tasks. If not specified, all projects will be watched.": "Das zu überwachende Projekt. Wenn nicht angegeben, werden alle Projekte beobachtet.",
"The project to watch for new comments. If not specified, all projects will be watched.": "Das zu beobachtende Projekt. Wenn nicht angegeben, werden alle Projekte beobachtet.",
"The project to watch for new messages. If not specified, all projects will be watched.": "Das zu beobachtende Projekt. Wenn nicht angegeben, werden alle Projekte beobachtet.",
"The project to watch for new files. If not specified, all projects will be watched.": "Das Projekt, das auf neue Dateien zugreifen soll. Wenn nicht angegeben, werden alle Projekte beobachtet.",
"The project to watch for new expenses. If not specified, all projects will be watched.": "Das Projekt, das auf neue Ausgaben achtet. Wenn nicht angegeben, werden alle Projekte beobachtet.",
"The project to watch for new invoices. If not specified, all projects will be watched.": "Das zu überwachende Projekt für neue Rechnungen. Wenn nicht angegeben, werden alle Projekte beobachtet."
}

View File

@@ -0,0 +1,226 @@
{
"Teamwork is a work and project management tool that helps teams improve collaboration, visibility, and accountability.": "Teamwork es una herramienta de trabajo y gestión de proyectos que ayuda a los equipos a mejorar la colaboración, visibilidad y responsabilidad.",
"Username": "Usuario",
"Password": "Contraseña",
"Subdomain": "Subdominio",
"Your Teamwork email address.": "Tu dirección de correo electrónico de Teamwork.",
"Your Teamwork site subdomain (e.g., mycompany for mycompany.teamwork.com)": "Su subdominio del sitio de Teamwork (por ejemplo, mycompany para mycompany.teamwork.com)",
"\n\tEnter your Teamwork username (email address) and password.\n\t": "\n\tIntroduzca su nombre de usuario de Teamwork (dirección de correo electrónico) y contraseña.\n\t",
"Create Project": "Crear proyecto",
"Create Task List": "Crear lista de tareas",
"Create Task": "Crear tarea",
"Mark Task Complete": "Marcar tarea completa",
"Create Company": "Crear empresa",
"Create Person": "Crear Persona",
"Update Task": "Actualizar tarea",
"Create Task Comment": "Crear comentario de tarea",
"Create Time Entry on Task": "Crear entrada de tiempo en la tarea",
"Create Expense": "Crear gastos",
"Upload File to Project": "Subir archivo al proyecto",
"Create Message Reply": "Crear respuesta de mensaje",
"Create Milestone": "Crear hito",
"Add People to Project": "Añadir Personas al Proyecto",
"Find Task": "Buscar tarea",
"Find Company": "Buscar empresa",
"Find Milestone": "Buscar hito",
"Find Notebook / Notebook Comment": "Buscar Comentario Notebook / Notebook",
"Create a new project (name, description, belongs to company, dates, etc.).": "Crear un nuevo proyecto (nombre, descripción, pertenece a la empresa, fechas, etc.).",
"Add a new task list under a project.": "Añadir una nueva lista de tareas bajo un proyecto.",
"Add a new task under a project with description, due date, assignee, tags, etc.": "Añadir una nueva tarea bajo un proyecto con descripción, fecha de vencimiento, asignado, etiquetas, etc.",
"Set a tasks status to complete.": "Establece el estado de una tarea a completar.",
"Create a new company in Teamwork.": "Crear una nueva empresa en Teamwork.",
"Create a new user/contact (name, email, invite options).": "Crear un nuevo usuario/contacto (nombre, correo electrónico, opciones de invitación).",
"Modify a tasks fields (due date, assignee, content, priority, etc.).": "Modificar los campos de una tarea (fecha de vencimiento, asignado, contenido, prioridad, etc.).",
"Leave a comment in a task.": "Deja un comentario en una tarea.",
"Log time spent on a task with duration, description.": "Tiempo de registro gastado en una tarea con duración, descripción.",
"Log new expense in a project with cost, description, date.": "Registrar nuevos gastos en un proyecto con costo, descripción, fecha.",
"Upload a file to a Teamwork project.": "Subir un archivo a un proyecto de Teamwork.",
"Post a reply in a message thread.": "Publicar una respuesta en un hilo de mensaje.",
"Add a milestone with due date, description, responsible user, etc.": "Añadir un hito con fecha de vencimiento, descripción, usuario responsable, etc.",
"Add existing users to a project.": "Añadir usuarios existentes a un proyecto.",
"Search for tasks.": "Buscar tareas.",
"Search for a company by name or domain.": "Buscar una empresa por nombre o dominio.",
"Find a milestone by name or due date in a project.": "Encontrar un hito por nombre o fecha de vencimiento en un proyecto.",
"Locate notebooks or note comments by search parameters.": "Localice cuadernos o comentarios de notas por parámetros de búsqueda.",
"Name": "Nombre",
"Description": "Descripción",
"Company": "Empresa",
"Category": "Categoría",
"Tags": "Etiquetas",
"Start Date": "Fecha de inicio",
"End Date": "Fecha de fin",
"Project Owner": "Propietario del proyecto",
"Custom Fields": "Campos personalizados",
"Project": "Projekt",
"Private": "Privado",
"Default Task Priority": "Prioridad por defecto de la tarea",
"Default Task Tags": "Etiquetas de tarea por defecto",
"Task List": "Lista de tareas",
"Content": "Contenido",
"Responsible Parties": "Partes responsables",
"Due Date": "Fecha de fin",
"Priority": "Prioridad",
"Attachment": "Adjunto",
"Task": "Tarea",
"Website": "Sitio web",
"Address 1": "Dirección 1",
"Address 2": "Dirección 2",
"City": "Ciudad",
"State": "Estado",
"Zip Code": "Código postal",
"Country Code": "Código del país",
"Phone": "Teléfono",
"Fax": "Fax",
"Email 1": "Correo 1",
"Email 2": "Email 2",
"Email 3": "Email 3",
"Profile": "Perfil",
"Private Notes": "Notas privadas",
"First Name": "Nombre",
"Last Name": "Apellido",
"Email": "E-mail",
"User Type": "Tipo de usuario",
"Send Invite": "Enviar invitación",
"Title": "Título",
"Comment": "Comentario",
"Notify": "Notificar",
"Date": "Fecha",
"Time": "Hora",
"Hours": "Horas",
"Minutes": "Minutos",
"Is Billable": "Es facturable",
"Cost": "Costo",
"File": "Archivo",
"Message": "Mensaje",
"Body": "Cuerpo",
"Notify All": "Notificar a todos",
"Deadline": "Fecha límite",
"Users": "Usuarios",
"Search Term": "Buscar término",
"Search For": "Buscar",
"The name of the project.": "El nombre del proyecto.",
"A description for the project.": "Una descripción del proyecto.",
"The company to associate the project with.": "La empresa con la que asociar el proyecto.",
"The category to assign the project to.": "La categoría a la que asignar el proyecto.",
"Tags to associate with the project.": "Etiquetas a asociar con el proyecto.",
"The start date of the project.": "La fecha de inicio del proyecto.",
"The end date of the project.": "Fecha de finalización del proyecto.",
"The user to assign as the project owner.": "El usuario a asignar como propietario del proyecto.",
"Custom fields for this project.": "Campos personalizados para este proyecto.",
"The project to create the task list in.": "El proyecto en el que crear la lista de tareas.",
"The name of the task list.": "El nombre de la lista de tareas.",
"A description for the task list.": "Una descripción para la lista de tareas.",
"Set to true to make the task list private.": "Marcar como verdadero para hacer privada la lista de tareas.",
"The default priority for new tasks in this list.": "La prioridad por defecto para nuevas tareas en esta lista.",
"Default tags for new tasks in this list.": "Etiquetas por defecto para nuevas tareas en esta lista.",
"The project to create the task in.": "El proyecto en el que crear la tarea.",
"The task list to add the task to.": "La lista de tareas a la que añadir la tarea.",
"The content of the task.": "El contenido de la tarea.",
"The users responsible for the task.": "Los usuarios responsables de la tarea.",
"The start date of the task.": "La fecha de inicio de la tarea.",
"The due date of the task.": "La fecha límite de la tarea.",
"A description for the task.": "Una descripción para la tarea.",
"The priority of the task.": "La prioridad de la tarea.",
"Tags to associate with the task.": "Etiquetas a asociar con la tarea.",
"A file to attach to the task.": "Un archivo a adjuntar a la tarea.",
"Custom fields for this task.": "Campos personalizados para esta tarea.",
"The task to mark as complete.": "La tarea a marcar como completa.",
"Name of the company.": "Nombre de la empresa.",
"Company's website address.": "Dirección del sitio web de la empresa.",
"Primary address line.": "Línea de dirección principal.",
"Secondary address line.": "Línea de dirección secundaria.",
"City name.": "Nombre de la ciudad.",
"State or province.": "Estado o provincia.",
"Postal or zip code.": "Código postal o postal.",
"2-letter ISO country code (e.g., US, GB).": "Código ISO de 2 letras (por ej., EEUU, GB).",
"Primary phone number.": "Número de teléfono principal.",
"Fax number.": "Número de fax.",
"Primary email address.": "Dirección de email principal.",
"Secondary email address.": "Dirección de correo electrónico secundaria.",
"Tertiary email address.": "Dirección de email terciaria.",
"Public company profile or 'About Us' text.": "Perfil de la empresa pública o texto 'Acerca de nosotros'.",
"Notes visible only to internal users.": "Notas visibles sólo para usuarios internos.",
"Custom fields for this company.": "Campos personalizados para esta empresa.",
"The user's first name.": "Nombre del usuario.",
"The user's last name.": "Apellido del usuario.",
"The user's email address.": "La dirección de correo electrónico del usuario.",
"The type of user to create.": "El tipo de usuario a crear.",
"The company to associate the user with.": "La empresa con la que asociar al usuario.",
"Send an invitation email to the new user.": "Enviar un correo de invitación al nuevo usuario.",
"The user's job title.": "El título de la tarea del usuario.",
"The task to update.": "La tarea a actualizar.",
"The new content of the task.": "El nuevo contenido de la tarea.",
"The new description for the task.": "La nueva descripción para la tarea.",
"The new users responsible for the task.": "Los nuevos usuarios responsables de la tarea.",
"The new start date of the task.": "La nueva fecha de inicio de la tarea.",
"The new due date of the task.": "La nueva fecha límite de la tarea.",
"The new priority of the task.": "La nueva prioridad de la tarea.",
"New tags to associate with the task.": "Nuevas etiquetas a asociar con la tarea.",
"The task to add a comment to.": "La tarea a la que añadir un comentario.",
"The content of the comment.": "El contenido del comentario.",
"A file to attach to the comment.": "Un archivo para adjuntar al comentario.",
"Who to notify about this comment.": "A quién notificar sobre este comentario.",
"Set to true to make the comment private.": "Marcar como verdadero para hacer el comentario privado.",
"Date of the time entry (yyyy-mm-dd)": "Fecha de la entrada de hora (aaaa-mm-dd)",
"Time of the entry (hh:mm:ss)": "Tiempo de la entrada (hh:mm:ss)",
"Duration in minutes": "Duración en minutos",
"The project to log the expense against.": "El proyecto para registrar el gasto.",
"The name of the expense.": "El nombre del gasto.",
"The cost of the expense.": "El coste del gasto.",
"The date of the expense.": "La fecha del gasto.",
"A description for the expense.": "Una descripción del gasto.",
"The project to upload the file to.": "El proyecto al que subir el archivo.",
"The file to upload.": "El archivo a subir.",
"A description for the file.": "Una descripción para el archivo.",
"The category to assign the file to.": "La categoría a la que asignar el archivo.",
"Set to true to make the file private.": "Establecer como verdadero para hacer el archivo privado.",
"The message to reply to.": "El mensaje al que responder.",
"The content of the reply.": "El contenido de la respuesta.",
"Notify all project users of this reply.": "Notificar a todos los usuarios del proyecto de esta respuesta.",
"The project to create the milestone in.": "El proyecto en el que crear el hito.",
"The title of the milestone.": "El título del hito.",
"The due date of the milestone.": "La fecha límite del hito.",
"The users responsible for the milestone.": "Los usuarios responsables del hito.",
"A description for the milestone.": "Una descripción del hito.",
"Notify responsible parties about the milestone.": "Notificar a los responsables sobre el hito.",
"Set to true to make the milestone private.": "Marcar como verdadero para hacer el hito privado.",
"The project to add people to.": "El proyecto al que añadir personas.",
"The users to add to the project.": "Los usuarios a añadir al proyecto.",
"The keyword to search for.": "La palabra clave a buscar.",
"Limit the search to a specific project.": "Limitar la búsqueda a un proyecto específico.",
"The name or domain to search for.": "El nombre o dominio por el que buscar.",
"The name or due date to search for.": "El nombre o fecha de vencimiento para buscar.",
"The type of item to search for.": "El tipo de elemento al que buscar.",
"None": "Ninguna",
"Low": "Baja",
"Medium": "Medio",
"High": "Alta",
"Standard User": "Usuario Estándar",
"Collaborator": "Colaborador",
"Contact": "Contacto",
"Nobody": "Nadie",
"Followers": "Seguidores",
"All Project Users": "Todos los usuarios del proyecto",
"Notebook": "Cuadro",
"Notebook Comment": "Comentario de notas",
"New Task": "Nueva tarea",
"New Person": "Nueva persona",
"New Comment": "Nuevo comentario",
"New Message": "Nuevo mensaje",
"New File": "Nuevo archivo",
"New Expense": "Nuevo gasto",
"New Invoice": "Nueva factura",
"Fires when a task is created.": "Dispara cuando se crea una tarea.",
"Fires when a new person (user/contact) is added.": "Dispara cuando una nueva persona (usuario/contacto) es añadida.",
"Fires when a new comment is posted.": "Dispara cuando se publica un nuevo comentario.",
"Fires when a new message is posted (in project messages or discussions).": "Dispara cuando se publica un nuevo mensaje (en mensajes o discusiones del proyecto).",
"Fires when a new file is added.": "Se activa cuando se añade un nuevo archivo.",
"Fires when a new expense entry is added.": "Dispara cuando se añade una nueva entrada de gastos.",
"Fires when a new invoice is created.": "Dispara cuando se crea una nueva factura.",
"The project to watch for new tasks. If not specified, all projects will be watched.": "El proyecto para ver nuevas tareas. Si no se especifica, todos los proyectos serán observados.",
"The project to watch for new comments. If not specified, all projects will be watched.": "El proyecto para ver nuevos comentarios. Si no se especifica, todos los proyectos serán observados.",
"The project to watch for new messages. If not specified, all projects will be watched.": "El proyecto para ver nuevos mensajes. Si no se especifica, todos los proyectos serán observados.",
"The project to watch for new files. If not specified, all projects will be watched.": "El proyecto para ver nuevos archivos. Si no se especifica, todos los proyectos serán observados.",
"The project to watch for new expenses. If not specified, all projects will be watched.": "El proyecto para ver los nuevos gastos. Si no se especifica, todos los proyectos serán vigilados.",
"The project to watch for new invoices. If not specified, all projects will be watched.": "El proyecto para ver las nuevas facturas. Si no se especifica, todos los proyectos serán observados."
}

View File

@@ -0,0 +1,226 @@
{
"Teamwork is a work and project management tool that helps teams improve collaboration, visibility, and accountability.": "Le travail d'équipe est un outil de gestion de travail et de projet qui aide les équipes à améliorer la collaboration, la visibilité et la responsabilité.",
"Username": "Nom d'utilisateur",
"Password": "Password",
"Subdomain": "Sous-domaine",
"Your Teamwork email address.": "Votre adresse e-mail Teamwork.",
"Your Teamwork site subdomain (e.g., mycompany for mycompany.teamwork.com)": "Le sous-domaine de votre site de travail en équipe (ex: mycompany pour mycompany.teamwork.com)",
"\n\tEnter your Teamwork username (email address) and password.\n\t": "\n\tEnter your Teamwork username (email address) and password.\n\t",
"Create Project": "Créer un projet",
"Create Task List": "Créer une liste de tâches",
"Create Task": "Créer une tâche",
"Mark Task Complete": "Marquer la tâche comme terminée",
"Create Company": "Créer une entreprise",
"Create Person": "Créer une personne",
"Update Task": "Tâche de mise à jour",
"Create Task Comment": "Créer un commentaire de tâche",
"Create Time Entry on Task": "Créer une entrée de temps sur la tâche",
"Create Expense": "Créer une dépense",
"Upload File to Project": "Télécharger le fichier vers le projet",
"Create Message Reply": "Créer une réponse de message",
"Create Milestone": "Créer un jalon",
"Add People to Project": "Ajouter des personnes au projet",
"Find Task": "Trouver une tâche",
"Find Company": "Trouver une entreprise",
"Find Milestone": "Trouver un jalon",
"Find Notebook / Notebook Comment": "Trouver un Notebook / Notebook Commentaire",
"Create a new project (name, description, belongs to company, dates, etc.).": "Créer un nouveau projet (nom, description, appartient à la société, dates, etc.).",
"Add a new task list under a project.": "Ajouter une nouvelle liste de tâches sous un projet.",
"Add a new task under a project with description, due date, assignee, tags, etc.": "Ajouter une nouvelle tâche sous un projet avec description, date d'échéance, cessionnaire, tags, etc.",
"Set a tasks status to complete.": "Définissez le statut d'une tâche à compléter.",
"Create a new company in Teamwork.": "Créer une nouvelle entreprise dans le travail d'équipe.",
"Create a new user/contact (name, email, invite options).": "Créer un nouvel utilisateur/contact (nom, email, options d'invitation).",
"Modify a tasks fields (due date, assignee, content, priority, etc.).": "Modifier les champs d'une tâche (date d'échéance, cessionnaire, contenu, priorité, etc.).",
"Leave a comment in a task.": "Laisser un commentaire dans une tâche.",
"Log time spent on a task with duration, description.": "Enregistrer le temps passé sur une tâche avec la durée, la description.",
"Log new expense in a project with cost, description, date.": "Enregistrer les nouvelles dépenses dans un projet avec coût, description, date.",
"Upload a file to a Teamwork project.": "Télécharger un fichier dans un projet Teamwork.",
"Post a reply in a message thread.": "Poster une réponse dans un fil de message.",
"Add a milestone with due date, description, responsible user, etc.": "Ajouter un jalon avec la date d'échéance, la description, l'utilisateur responsable, etc.",
"Add existing users to a project.": "Ajouter des utilisateurs existants à un projet.",
"Search for tasks.": "Rechercher des tâches.",
"Search for a company by name or domain.": "Recherchez une entreprise par nom ou domaine.",
"Find a milestone by name or due date in a project.": "Trouver un jalon par nom ou date d'échéance dans un projet.",
"Locate notebooks or note comments by search parameters.": "Localisez les blocs-notes ou les commentaires de notes par paramètres de recherche.",
"Name": "Nom",
"Description": "Libellé",
"Company": "Entreprise",
"Category": "Catégorie",
"Tags": "Tags",
"Start Date": "Date de début",
"End Date": "Date de fin",
"Project Owner": "Propriétaire du projet",
"Custom Fields": "Champs personnalisés",
"Project": "Votre compte",
"Private": "Privé",
"Default Task Priority": "Priorité de la tâche par défaut",
"Default Task Tags": "Tags de tâche par défaut",
"Task List": "Liste des Tâches",
"Content": "Contenus",
"Responsible Parties": "Parties Responsables",
"Due Date": "Date de fin",
"Priority": "Priorité",
"Attachment": "Pièce jointe",
"Task": "Tâche",
"Website": "Site Web",
"Address 1": "Adresse 1",
"Address 2": "Adresse 2",
"City": "Ville",
"State": "État",
"Zip Code": "Code postal",
"Country Code": "Code du pays",
"Phone": "Téléphone",
"Fax": "Fax",
"Email 1": "Courriel 1",
"Email 2": "Courriel 2",
"Email 3": "Courriel 3",
"Profile": "Profil",
"Private Notes": "Notes privées",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Courriel",
"User Type": "Type d'utilisateur",
"Send Invite": "Envoyer une invitation",
"Title": "Titre de la feuille de calcul",
"Comment": "Commenter",
"Notify": "Notifier",
"Date": "Date",
"Time": "Date et heure",
"Hours": "Heures",
"Minutes": "Minutes",
"Is Billable": "Est facturable",
"Cost": "Coûts",
"File": "Ficher",
"Message": "Message",
"Body": "Body",
"Notify All": "Notifier tout",
"Deadline": "Date limite",
"Users": "Utilisateurs",
"Search Term": "Terme de recherche",
"Search For": "Rechercher",
"The name of the project.": "Le nom du projet.",
"A description for the project.": "Une description pour le projet.",
"The company to associate the project with.": "La société avec laquelle associer le projet.",
"The category to assign the project to.": "La catégorie à laquelle assigner le projet.",
"Tags to associate with the project.": "Tags à associer au projet.",
"The start date of the project.": "La date de début du projet.",
"The end date of the project.": "La date de fin du projet.",
"The user to assign as the project owner.": "L'utilisateur à assigner en tant que propriétaire du projet.",
"Custom fields for this project.": "Champs personnalisés pour ce projet.",
"The project to create the task list in.": "Le projet dans lequel créer la liste de tâches.",
"The name of the task list.": "Le nom de la liste des tâches.",
"A description for the task list.": "Une description pour la liste des tâches.",
"Set to true to make the task list private.": "Définir à vrai pour rendre la liste des tâches privée.",
"The default priority for new tasks in this list.": "La priorité par défaut pour les nouvelles tâches dans cette liste.",
"Default tags for new tasks in this list.": "Balises par défaut pour les nouvelles tâches dans cette liste.",
"The project to create the task in.": "Le projet pour créer la tâche.",
"The task list to add the task to.": "La liste des tâches à ajouter à la tâche.",
"The content of the task.": "Le contenu de la tâche.",
"The users responsible for the task.": "Les utilisateurs responsables de la tâche.",
"The start date of the task.": "La date de début de la tâche.",
"The due date of the task.": "La date d'échéance de la tâche.",
"A description for the task.": "Une description pour la tâche.",
"The priority of the task.": "La priorité de la tâche.",
"Tags to associate with the task.": "Tags à associer à la tâche.",
"A file to attach to the task.": "Un fichier à attacher à la tâche.",
"Custom fields for this task.": "Champs personnalisés pour cette tâche.",
"The task to mark as complete.": "La tâche à marquer comme terminée.",
"Name of the company.": "Nom de la société.",
"Company's website address.": "Adresse du site web de la société.",
"Primary address line.": "Ligne d'adresse principale.",
"Secondary address line.": "Ligne d'adresse secondaire.",
"City name.": "Nom de la ville.",
"State or province.": "État ou province.",
"Postal or zip code.": "Code postal ou postal.",
"2-letter ISO country code (e.g., US, GB).": "Code du pays ISO de 2 lettres (par exemple, US, GB).",
"Primary phone number.": "Numéro de téléphone principal.",
"Fax number.": "Numéro de télécopieur.",
"Primary email address.": "Adresse e-mail principale.",
"Secondary email address.": "Adresse e-mail secondaire.",
"Tertiary email address.": "Adresse e-mail tertiaire.",
"Public company profile or 'About Us' text.": "Le profil de la société publique ou le texte « À propos de nous ».",
"Notes visible only to internal users.": "Notes visibles uniquement aux utilisateurs internes.",
"Custom fields for this company.": "Champs personnalisés pour cette entreprise.",
"The user's first name.": "Le prénom de l'utilisateur",
"The user's last name.": "Le nom de l'utilisateur",
"The user's email address.": "L'adresse e-mail de l'utilisateur",
"The type of user to create.": "Le type d'utilisateur à créer.",
"The company to associate the user with.": "La société avec laquelle associer l'utilisateur.",
"Send an invitation email to the new user.": "Envoyer un e-mail d'invitation au nouvel utilisateur.",
"The user's job title.": "Le titre du poste de l'utilisateur.",
"The task to update.": "La tâche à mettre à jour.",
"The new content of the task.": "Le nouveau contenu de la tâche.",
"The new description for the task.": "La nouvelle description de la tâche.",
"The new users responsible for the task.": "Les nouveaux utilisateurs responsables de la tâche.",
"The new start date of the task.": "La nouvelle date de début de la tâche.",
"The new due date of the task.": "La nouvelle échéance de la tâche.",
"The new priority of the task.": "La nouvelle priorité de la tâche.",
"New tags to associate with the task.": "Nouveaux tags à associer à la tâche.",
"The task to add a comment to.": "La tâche à laquelle ajouter un commentaire.",
"The content of the comment.": "Le contenu du commentaire.",
"A file to attach to the comment.": "Un fichier à joindre au commentaire.",
"Who to notify about this comment.": "Qui informer de ce commentaire.",
"Set to true to make the comment private.": "Définir à vrai pour rendre le commentaire privé.",
"Date of the time entry (yyyy-mm-dd)": "Date d'entrée de l'heure (aaaa-mm-jj)",
"Time of the entry (hh:mm:ss)": "Heure de l'entrée (hh:mm:ss)",
"Duration in minutes": "Durée en minutes",
"The project to log the expense against.": "Le projet contre lequel enregistrer les dépenses.",
"The name of the expense.": "Nom de la dépense.",
"The cost of the expense.": "Le coût de la dépense.",
"The date of the expense.": "Date de la dépense.",
"A description for the expense.": "Une description de la dépense.",
"The project to upload the file to.": "Le projet vers lequel télécharger le fichier.",
"The file to upload.": "Le fichier à télécharger.",
"A description for the file.": "Une description pour le fichier.",
"The category to assign the file to.": "La catégorie à laquelle assigner le fichier.",
"Set to true to make the file private.": "Définir à vrai pour rendre le fichier privé.",
"The message to reply to.": "Le message à répondre.",
"The content of the reply.": "Le contenu de la réponse.",
"Notify all project users of this reply.": "Notifier tous les utilisateurs du projet de cette réponse.",
"The project to create the milestone in.": "Le projet pour créer le jalon.",
"The title of the milestone.": "Le titre du jalon.",
"The due date of the milestone.": "La date d'échéance du jalon.",
"The users responsible for the milestone.": "Les utilisateurs responsables du jalon.",
"A description for the milestone.": "Une description pour le jalon.",
"Notify responsible parties about the milestone.": "Informer les parties responsables du jalon.",
"Set to true to make the milestone private.": "Définir à vrai pour rendre le jalon privé.",
"The project to add people to.": "Le projet à ajouter des personnes.",
"The users to add to the project.": "Les utilisateurs à ajouter au projet.",
"The keyword to search for.": "Le mot clé à rechercher.",
"Limit the search to a specific project.": "Limiter la recherche à un projet spécifique.",
"The name or domain to search for.": "Le nom ou le domaine à rechercher.",
"The name or due date to search for.": "Le nom ou la date d'échéance à rechercher.",
"The type of item to search for.": "Le type d'élément à rechercher.",
"None": "Aucun",
"Low": "Bas",
"Medium": "Moyenne",
"High": "Élevé",
"Standard User": "Utilisateur standard",
"Collaborator": "Collaborateur",
"Contact": "Contacter",
"Nobody": "Personne",
"Followers": "Abonnés",
"All Project Users": "Tous les utilisateurs du projet",
"Notebook": "Carnet",
"Notebook Comment": "Commentaire du bloc-notes",
"New Task": "Nouvelle tâche",
"New Person": "Nouvelle Personne",
"New Comment": "Nouveau commentaire",
"New Message": "Nouveau message",
"New File": "Nouveau fichier",
"New Expense": "Nouvelles dépenses",
"New Invoice": "Nouvelle facture",
"Fires when a task is created.": "Tire quand une tâche est créée.",
"Fires when a new person (user/contact) is added.": "Tire quand une nouvelle personne (utilisateur/contact) est ajoutée.",
"Fires when a new comment is posted.": "Se déclenche lorsqu'un nouveau commentaire est affiché.",
"Fires when a new message is posted (in project messages or discussions).": "Se déclenche lorsqu'un nouveau message est publié (dans les messages du projet ou les discussions).",
"Fires when a new file is added.": "Se déclenche lorsqu'un nouveau fichier est ajouté.",
"Fires when a new expense entry is added.": "Se déclenche lorsqu'une nouvelle entrée de dépense est ajoutée.",
"Fires when a new invoice is created.": "Déclenche quand une nouvelle facture est créée.",
"The project to watch for new tasks. If not specified, all projects will be watched.": "Le projet à surveiller pour les nouvelles tâches. Si non spécifié, tous les projets seront surveillés.",
"The project to watch for new comments. If not specified, all projects will be watched.": "Le projet à surveiller pour les nouveaux commentaires. Si non spécifié, tous les projets seront surveillés.",
"The project to watch for new messages. If not specified, all projects will be watched.": "Le projet à surveiller pour les nouveaux messages. Si non spécifié, tous les projets seront surveillés.",
"The project to watch for new files. If not specified, all projects will be watched.": "Le projet à surveiller pour les nouveaux fichiers. Si non spécifié, tous les projets seront surveillés.",
"The project to watch for new expenses. If not specified, all projects will be watched.": "Le projet à surveiller pour les nouvelles dépenses. Si non spécifié, tous les projets seront surveillés.",
"The project to watch for new invoices. If not specified, all projects will be watched.": "Le projet à surveiller pour les nouvelles factures. Si non spécifié, tous les projets seront surveillés."
}

View File

@@ -0,0 +1,226 @@
{
"Teamwork is a work and project management tool that helps teams improve collaboration, visibility, and accountability.": "チームワークは、チームがコラボレーション、可視性、説明責任を向上させるのに役立つ作業およびプロジェクト管理ツールです。",
"Username": "ユーザー名",
"Password": "パスワード",
"Subdomain": "サブドメイン",
"Your Teamwork email address.": "Teamworkのメールアドレスです。",
"Your Teamwork site subdomain (e.g., mycompany for mycompany.teamwork.com)": "あなたのTeamworkサイトサブドメインmycompany.teamwork.comなど",
"\n\tEnter your Teamwork username (email address) and password.\n\t": "\n\tTeamworkのユーザー名(メールアドレス)とパスワードを入力します。\n\t",
"Create Project": "プロジェクトを作成",
"Create Task List": "タスクリストを作成",
"Create Task": "タスクを作成",
"Mark Task Complete": "タスクをマークしました",
"Create Company": "所属を作成",
"Create Person": "ユーザーを作成",
"Update Task": "タスクの更新",
"Create Task Comment": "タスクのコメントを作成",
"Create Time Entry on Task": "タスクにタイムエントリを作成",
"Create Expense": "支出を作成",
"Upload File to Project": "プロジェクトにファイルをアップロード",
"Create Message Reply": "メッセージの返信を作成",
"Create Milestone": "マイルストーンを作成",
"Add People to Project": "プロジェクトに人を追加",
"Find Task": "タスクを検索",
"Find Company": "会社を検索",
"Find Milestone": "マイルストーンを見つける",
"Find Notebook / Notebook Comment": "ノートブック/メモ帳のコメントを検索",
"Create a new project (name, description, belongs to company, dates, etc.).": "新しいプロジェクト (名前、説明、会社、日付など) を作成します。",
"Add a new task list under a project.": "プロジェクトの下に新しいタスクリストを追加します。",
"Add a new task under a project with description, due date, assignee, tags, etc.": "説明、期日、担当者、タグなどの新しいタスクをプロジェクトの下に追加します。",
"Set a tasks status to complete.": "タスクの状態を設定して完了します。",
"Create a new company in Teamwork.": "Teamwork で新しい会社を作成します。",
"Create a new user/contact (name, email, invite options).": "新しいユーザー/連絡先(名前、メールアドレス、招待オプション)を作成します。",
"Modify a tasks fields (due date, assignee, content, priority, etc.).": "タスクのフィールド(期日、担当者、コンテンツ、優先度など)を変更する",
"Leave a comment in a task.": "タスクにコメントを残します。",
"Log time spent on a task with duration, description.": "タスクに費やした時間を記録します。期間、説明です。",
"Log new expense in a project with cost, description, date.": "コスト、説明、日付を持つプロジェクトで新しい費用を記録します。",
"Upload a file to a Teamwork project.": "Teamwork プロジェクトにファイルをアップロードします。",
"Post a reply in a message thread.": "メッセージスレッドに返信を投稿します。",
"Add a milestone with due date, description, responsible user, etc.": "期日、説明、担当ユーザなどでマイルストーンを追加します。",
"Add existing users to a project.": "既存のユーザーをプロジェクトに追加します。",
"Search for tasks.": "タスクの検索。",
"Search for a company by name or domain.": "名前またはドメインで会社を検索します。",
"Find a milestone by name or due date in a project.": "プロジェクトの名前または期日でマイルストーンを検索します。",
"Locate notebooks or note comments by search parameters.": "検索パラメータでノートブックまたはノートコメントを探します。",
"Name": "名前",
"Description": "説明",
"Company": "会社名",
"Category": "カテゴリ",
"Tags": "タグ",
"Start Date": "開始日",
"End Date": "終了日",
"Project Owner": "プロジェクト所有者",
"Custom Fields": "カスタムフィールド",
"Project": "プロジェクト",
"Private": "非公開",
"Default Task Priority": "デフォルトのタスクの優先度",
"Default Task Tags": "デフォルトのタスクタグ",
"Task List": "タスクリスト",
"Content": "コンテンツ",
"Responsible Parties": "責任あるパーティー",
"Due Date": "締切日",
"Priority": "優先度",
"Attachment": "添付ファイル",
"Task": "タスク",
"Website": "ウェブサイト",
"Address 1": "住所1",
"Address 2": "住所2",
"City": "市区町村名",
"State": "都道府県:",
"Zip Code": "郵便番号",
"Country Code": "国コード",
"Phone": "電話番号",
"Fax": "Fax",
"Email 1": "メール 1",
"Email 2": "メール 2",
"Email 3": "メール 3",
"Profile": "プロフィール",
"Private Notes": "プライベートノート",
"First Name": "名",
"Last Name": "Last Name",
"Email": "Eメールアドレス",
"User Type": "ユーザータイプ",
"Send Invite": "招待を送信",
"Title": "タイトル",
"Comment": "コメント",
"Notify": "通知する",
"Date": "日付",
"Time": "時刻",
"Hours": "時間",
"Minutes": "分",
"Is Billable": "請求可能",
"Cost": "コスト",
"File": "ファイル",
"Message": "メッセージ",
"Body": "本文",
"Notify All": "すべて通知する",
"Deadline": "期限",
"Users": "ユーザー",
"Search Term": "検索用語",
"Search For": "検索",
"The name of the project.": "プロジェクトの名前",
"A description for the project.": "プロジェクトの説明。",
"The company to associate the project with.": "プロジェクトを関連付ける会社。",
"The category to assign the project to.": "プロジェクトに割り当てるカテゴリ。",
"Tags to associate with the project.": "プロジェクトに関連付けるタグ。",
"The start date of the project.": "プロジェクトの開始日です。",
"The end date of the project.": "プロジェクトの終了日。",
"The user to assign as the project owner.": "プロジェクトオーナーとして割り当てるユーザー",
"Custom fields for this project.": "このプロジェクトのカスタムフィールド。",
"The project to create the task list in.": "タスクリストを作成するプロジェクト。",
"The name of the task list.": "タスクリストの名前",
"A description for the task list.": "タスクリストの説明",
"Set to true to make the task list private.": "タスクリストを非公開にするには、true に設定します。",
"The default priority for new tasks in this list.": "このリストの新規タスクのデフォルトの優先順位。",
"Default tags for new tasks in this list.": "このリストの新しいタスクのデフォルトのタグ。",
"The project to create the task in.": "タスクを作成するプロジェクト。",
"The task list to add the task to.": "タスクを追加するタスク リスト。",
"The content of the task.": "タスクの内容",
"The users responsible for the task.": "タスクを担当するユーザー。",
"The start date of the task.": "タスクの開始日.",
"The due date of the task.": "タスクの期限.",
"A description for the task.": "タスクの説明",
"The priority of the task.": "タスクの優先順位。",
"Tags to associate with the task.": "タスクに関連付けるタグ。",
"A file to attach to the task.": "タスクに添付するファイル。",
"Custom fields for this task.": "このタスクのカスタムフィールド。",
"The task to mark as complete.": "完了としてマークするタスク。",
"Name of the company.": "会社名。",
"Company's website address.": "会社のウェブサイトのアドレス。",
"Primary address line.": "プライマリーアドレス",
"Secondary address line.": "セカンダリアドレス",
"City name.": "市名。",
"State or province.": "都道府県。",
"Postal or zip code.": "郵便番号または郵便番号",
"2-letter ISO country code (e.g., US, GB).": "2文字ISO国コード米国、GB",
"Primary phone number.": "プライマリー電話番号",
"Fax number.": "Fax番号",
"Primary email address.": "プライマリーメールアドレス",
"Secondary email address.": "セカンダリのメールアドレス。",
"Tertiary email address.": "第三者のメールアドレス",
"Public company profile or 'About Us' text.": "公開会社プロフィールまたは「私たちについて」のテキスト。",
"Notes visible only to internal users.": "ノートは内部ユーザーにのみ表示されます。",
"Custom fields for this company.": "この会社のカスタムフィールド。",
"The user's first name.": "ユーザーの名",
"The user's last name.": "ユーザーの姓。",
"The user's email address.": "ユーザーのメールアドレス",
"The type of user to create.": "作成するユーザーのタイプ",
"The company to associate the user with.": "ユーザーを関連付ける会社",
"Send an invitation email to the new user.": "新しいユーザーに招待メールを送信します。",
"The user's job title.": "ユーザーのジョブタイトル。",
"The task to update.": "更新するタスク",
"The new content of the task.": "タスクの新しいコンテンツ",
"The new description for the task.": "タスクの新しい説明。",
"The new users responsible for the task.": "タスクを担当する新規ユーザー。",
"The new start date of the task.": "タスクの新しい開始日付。",
"The new due date of the task.": "タスクの新しい期日。",
"The new priority of the task.": "タスクの新しい優先順位。",
"New tags to associate with the task.": "タスクに関連付ける新しいタグ。",
"The task to add a comment to.": "コメントを追加するタスク",
"The content of the comment.": "コメントの内容.",
"A file to attach to the comment.": "コメントに添付するファイル。",
"Who to notify about this comment.": "このコメントについて通知する人",
"Set to true to make the comment private.": "コメントを非公開にする場合は true に設定します。",
"Date of the time entry (yyyy-mm-dd)": "Date of the time entry (yyyy-mm-dd)",
"Time of the entry (hh:mm:ss)": "エントリの時間 (hh:mm:ss)",
"Duration in minutes": "時間 (分単位)",
"The project to log the expense against.": "費用を記録するプロジェクト。",
"The name of the expense.": "費用の名前。",
"The cost of the expense.": "費用の費用。",
"The date of the expense.": "費用の日付。",
"A description for the expense.": "費用の説明",
"The project to upload the file to.": "ファイルをアップロードするプロジェクト。",
"The file to upload.": "アップロードするファイル",
"A description for the file.": "ファイルの説明",
"The category to assign the file to.": "ファイルを割り当てるカテゴリ。",
"Set to true to make the file private.": "ファイルを非公開にするには true に設定します。",
"The message to reply to.": "返信するメッセージ。",
"The content of the reply.": "返信の内容",
"Notify all project users of this reply.": "すべてのプロジェクトユーザーにこの返信を通知します。",
"The project to create the milestone in.": "マイルストーンを作成するプロジェクト。",
"The title of the milestone.": "マイルストーンのタイトル",
"The due date of the milestone.": "マイルストーンの締切日",
"The users responsible for the milestone.": "マイルストーンを担当するユーザー。",
"A description for the milestone.": "マイルストーンの説明",
"Notify responsible parties about the milestone.": "マイルストーンについて責任者に通知します。",
"Set to true to make the milestone private.": "マイルストーンを非公開にするには、true に設定します。",
"The project to add people to.": "人を追加するプロジェクト。",
"The users to add to the project.": "プロジェクトに追加するユーザー。",
"The keyword to search for.": "検索するキーワード。",
"Limit the search to a specific project.": "検索を特定のプロジェクトに制限します。",
"The name or domain to search for.": "検索する名前またはドメイン。",
"The name or due date to search for.": "検索する名前または期日。",
"The type of item to search for.": "検索するアイテムの種類",
"None": "なし",
"Low": "低い",
"Medium": "ミディアム",
"High": "高い",
"Standard User": "標準ユーザー",
"Collaborator": "共同編集者",
"Contact": "お問い合わせ",
"Nobody": "誰もいません",
"Followers": "フォロワー",
"All Project Users": "すべてのプロジェクトユーザー",
"Notebook": "メモ帳",
"Notebook Comment": "メモ帳のコメント",
"New Task": "新しいタスク",
"New Person": "新しい人",
"New Comment": "新しいコメント",
"New Message": "新しいメッセージ",
"New File": "新規ファイル",
"New Expense": "新しい費用",
"New Invoice": "新しい請求書",
"Fires when a task is created.": "タスクが作成されたときに発生します。",
"Fires when a new person (user/contact) is added.": "新規ユーザー(ユーザー/連絡先)が追加されたときに発生します。",
"Fires when a new comment is posted.": "新しいコメントが投稿されたときに発行されます。",
"Fires when a new message is posted (in project messages or discussions).": "新しいメッセージが投稿されたときに発行されます(プロジェクトメッセージまたはディスカッション内)。",
"Fires when a new file is added.": "新しいファイルが追加されたときに発生します。",
"Fires when a new expense entry is added.": "新しい経費入力が追加されたときに発生します。",
"Fires when a new invoice is created.": "新しい請求書が作成されたときに発行されます。",
"The project to watch for new tasks. If not specified, all projects will be watched.": "新規タスクを監視するプロジェクト。指定しない場合は、すべてのプロジェクトが監視されます。",
"The project to watch for new comments. If not specified, all projects will be watched.": "新しいコメントを見るプロジェクト。指定しない場合、すべてのプロジェクトが見られます。",
"The project to watch for new messages. If not specified, all projects will be watched.": "新しいメッセージを見るプロジェクト。指定しない場合は、すべてのプロジェクトが見られます。",
"The project to watch for new files. If not specified, all projects will be watched.": "新しいファイルを監視するプロジェクト。指定しない場合は、すべてのプロジェクトが視聴されます。",
"The project to watch for new expenses. If not specified, all projects will be watched.": "新しい費用を監視するプロジェクト。指定されていない場合、すべてのプロジェクトが視聴されます。",
"The project to watch for new invoices. If not specified, all projects will be watched.": "新しい請求書を監視するプロジェクト。指定しない場合は、すべてのプロジェクトが監視されます。"
}

View File

@@ -0,0 +1,226 @@
{
"Teamwork is a work and project management tool that helps teams improve collaboration, visibility, and accountability.": "Teamwork is een werk- en projectmanagement-tool die teams helpt om de samenwerking, zichtbaarheid en verantwoording te verbeteren.",
"Username": "Gebruikersnaam",
"Password": "Wachtwoord",
"Subdomain": "Subdomein",
"Your Teamwork email address.": "Uw Teamwork e-mailadres",
"Your Teamwork site subdomain (e.g., mycompany for mycompany.teamwork.com)": "Uw Teamworksite subdomein (bijv. mijnbedrijf.teamwork.com)",
"\n\tEnter your Teamwork username (email address) and password.\n\t": "\n\t→Voer uw Teamwork gebruikersnaam (e-mailadres) en wachtwoord in.\n\t",
"Create Project": "Project aanmaken",
"Create Task List": "Takenlijst maken",
"Create Task": "Taak maken",
"Mark Task Complete": "Taak markeren voltooid",
"Create Company": "Bedrijf aanmaken",
"Create Person": "Maak persoon aan",
"Update Task": "Taak bijwerken",
"Create Task Comment": "Maak Taak Opmerking",
"Create Time Entry on Task": "Tijdsinvoer bij taak maken",
"Create Expense": "Kosten aanmaken",
"Upload File to Project": "Bestand uploaden naar project",
"Create Message Reply": "Antwoord op bericht maken",
"Create Milestone": "Mijlpaal maken",
"Add People to Project": "Mensen toevoegen aan project",
"Find Task": "Zoek Taak",
"Find Company": "Bedrijf zoeken",
"Find Milestone": "Vind Milestone",
"Find Notebook / Notebook Comment": "Vind Notitieboek / Notitieboek Opmerking",
"Create a new project (name, description, belongs to company, dates, etc.).": "Maak een nieuw project (naam, beschrijving, behoort tot het bedrijf, data, etc.).",
"Add a new task list under a project.": "Voeg een nieuwe takenlijst toe onder een project.",
"Add a new task under a project with description, due date, assignee, tags, etc.": "Voeg een nieuwe taak toe onder een project met beschrijving, vervaldatum, taakontvanger, tags, enz.",
"Set a tasks status to complete.": "Stel de status van een taak in als voltooid.",
"Create a new company in Teamwork.": "Maak een nieuw bedrijf aan in Teamwork.",
"Create a new user/contact (name, email, invite options).": "Maak een nieuwe gebruiker/contactpersoon aan (naam, e-mail, uitnodigingsopties).",
"Modify a tasks fields (due date, assignee, content, priority, etc.).": "Wijzig velden van een taak (vervaldatum, taakontvanger, inhoud, prioriteit, etc.).",
"Leave a comment in a task.": "Laat een opmerking achter in een taak.",
"Log time spent on a task with duration, description.": "Meld tijd besteed aan een taak met een duur, beschrijving.",
"Log new expense in a project with cost, description, date.": "Log nieuwe uitgaven in een project met kosten, beschrijving, datum.",
"Upload a file to a Teamwork project.": "Upload een bestand naar een Teamwork project.",
"Post a reply in a message thread.": "Plaats een antwoord in een bericht thread.",
"Add a milestone with due date, description, responsible user, etc.": "Voeg een mijlpaal toe met een vervaldatum, beschrijving, verantwoordelijke gebruiker, etc.",
"Add existing users to a project.": "Voeg bestaande gebruikers toe aan een project.",
"Search for tasks.": "Zoek naar taken.",
"Search for a company by name or domain.": "Zoeken naar een bedrijf op naam of domein.",
"Find a milestone by name or due date in a project.": "Vind een mijlpaal op naam of vervaldatum in een project.",
"Locate notebooks or note comments by search parameters.": "Zoek notitieboekjes of notities via zoekparameters.",
"Name": "Naam",
"Description": "Beschrijving",
"Company": "Bedrijfsnaam",
"Category": "categorie",
"Tags": "Labels",
"Start Date": "Start datum",
"End Date": "Eind datum",
"Project Owner": "Project Eigenaar",
"Custom Fields": "Aangepaste velden",
"Project": "Project",
"Private": "Privé",
"Default Task Priority": "Standaard Task Prioriteit",
"Default Task Tags": "Standaard taak labels",
"Task List": "Taak lijst",
"Content": "Inhoud",
"Responsible Parties": "Verantwoordelijke partijen",
"Due Date": "Inleverdatum",
"Priority": "Prioriteit",
"Attachment": "Bijlage",
"Task": "Opdracht",
"Website": "website",
"Address 1": "Adresregel 1",
"Address 2": "Adresregel 2",
"City": "Woonplaats",
"State": "Provincie",
"Zip Code": "Postcode code",
"Country Code": "Land Code",
"Phone": "Telefoonnummer",
"Fax": "Faxnummer",
"Email 1": "E-mail 1",
"Email 2": "E-mail 2",
"Email 3": "E-mail 3",
"Profile": "Profiel",
"Private Notes": "Privé notities",
"First Name": "Voornaam",
"Last Name": "Achternaam",
"Email": "E-mail",
"User Type": "Type gebruiker",
"Send Invite": "Uitnodiging sturen",
"Title": "Aanspreektitel",
"Comment": "Opmerking",
"Notify": "Melden",
"Date": "Datum:",
"Time": "Tijd",
"Hours": "Uren",
"Minutes": "minuten",
"Is Billable": "Is Factureerbaar",
"Cost": "Kosten",
"File": "Bestand",
"Message": "bericht",
"Body": "Lichaam",
"Notify All": "Waarschuw alle",
"Deadline": "Deadline",
"Users": "Gebruikers",
"Search Term": "Zoek term",
"Search For": "Zoeken naar",
"The name of the project.": "De naam van het project.",
"A description for the project.": "Een beschrijving van het project.",
"The company to associate the project with.": "Het bedrijf waarmee het project wordt gekoppeld.",
"The category to assign the project to.": "De categorie waaraan het project moet worden toegewezen.",
"Tags to associate with the project.": "Tags om te koppelen aan het project.",
"The start date of the project.": "De startdatum van het project.",
"The end date of the project.": "De einddatum van het project.",
"The user to assign as the project owner.": "De gebruiker om toe te wijzen als projecteigenaar.",
"Custom fields for this project.": "Aangepaste velden voor dit project.",
"The project to create the task list in.": "Het project om de takenlijst in aan te maken.",
"The name of the task list.": "De naam van de takenlijst.",
"A description for the task list.": "Een beschrijving van de takenlijst.",
"Set to true to make the task list private.": "Zet op juist om de takenlijst privé te maken.",
"The default priority for new tasks in this list.": "De standaard prioriteit voor nieuwe taken in deze lijst.",
"Default tags for new tasks in this list.": "Standaard tags voor nieuwe taken in deze lijst.",
"The project to create the task in.": "Het project om de taak in aan te maken.",
"The task list to add the task to.": "De takenlijst waaraan de taak moet worden toegevoegd.",
"The content of the task.": "De inhoud van de taak.",
"The users responsible for the task.": "De gebruikers die verantwoordelijk zijn voor de taak.",
"The start date of the task.": "De startdatum van de taak.",
"The due date of the task.": "De vervaldatum van de taak.",
"A description for the task.": "Een beschrijving van de taak.",
"The priority of the task.": "De prioriteit van deze taak.",
"Tags to associate with the task.": "Tags om te koppelen aan de taak.",
"A file to attach to the task.": "Een bestand om aan de taak toe te voegen.",
"Custom fields for this task.": "Aangepaste velden voor deze taak.",
"The task to mark as complete.": "De taak om te markeren als voltooid.",
"Name of the company.": "Naam van het bedrijf.",
"Company's website address.": "Adres website van bedrijf",
"Primary address line.": "Primaire adresregel.",
"Secondary address line.": "Secundaire adresregel.",
"City name.": "Stad naam.",
"State or province.": "Staat of provincie.",
"Postal or zip code.": "Postcode of postcode.",
"2-letter ISO country code (e.g., US, GB).": "2-letter ISO landcode (bijv. US, GB).",
"Primary phone number.": "Primair telefoonnummer.",
"Fax number.": "Fax nummer.",
"Primary email address.": "Primair e-mailadres",
"Secondary email address.": "Tweede e-mailadres.",
"Tertiary email address.": "Tertiair e-mailadres",
"Public company profile or 'About Us' text.": "Openbaar bedrijfsprofiel of 'Over ons' tekst.",
"Notes visible only to internal users.": "Notities alleen zichtbaar voor interne gebruikers.",
"Custom fields for this company.": "Aangepaste velden voor dit bedrijf.",
"The user's first name.": "Voornaam van de gebruiker.",
"The user's last name.": "Achternaam van de gebruiker.",
"The user's email address.": "E-mailadres van de gebruiker.",
"The type of user to create.": "Het type gebruiker om aan te maken.",
"The company to associate the user with.": "Het bedrijf waarmee de gebruiker verbonden is.",
"Send an invitation email to the new user.": "Stuur een uitnodigingsmail naar de nieuwe gebruiker.",
"The user's job title.": "Titel van de gebruiker",
"The task to update.": "De taak om bij te werken.",
"The new content of the task.": "De nieuwe inhoud van de taak.",
"The new description for the task.": "De nieuwe beschrijving van de taak.",
"The new users responsible for the task.": "De nieuwe gebruikers die verantwoordelijk zijn voor de taak.",
"The new start date of the task.": "De nieuwe startdatum van de taak.",
"The new due date of the task.": "De nieuwe vervaldatum van de taak.",
"The new priority of the task.": "De nieuwe prioriteit van deze taak.",
"New tags to associate with the task.": "Nieuwe tags om te koppelen aan de taak.",
"The task to add a comment to.": "De taak om een opmerking toe te voegen.",
"The content of the comment.": "De inhoud van de opmerking.",
"A file to attach to the comment.": "Bestand om aan de opmerking toe te voegen.",
"Who to notify about this comment.": "Wie hiervan op de hoogte brengen?",
"Set to true to make the comment private.": "Zet op 'waar' om de reactie privé te maken.",
"Date of the time entry (yyyy-mm-dd)": "Datum van het invoeren van de tijd (jjj-mm-dd)",
"Time of the entry (hh:mm:ss)": "Tijd van het invoeren (hhh:mm:ss)",
"Duration in minutes": "Duur in minuten",
"The project to log the expense against.": "Het project om de kosten tegen te loggen.",
"The name of the expense.": "De naam van de uitgave.",
"The cost of the expense.": "De kosten van de kosten.",
"The date of the expense.": "De datum van de uitgave",
"A description for the expense.": "Een beschrijving van de uitgave",
"The project to upload the file to.": "Het project om het bestand naar toe te uploaden.",
"The file to upload.": "Het te uploaden bestand.",
"A description for the file.": "Beschrijving van het bestand.",
"The category to assign the file to.": "De categorie om het bestand aan toe te wijzen.",
"Set to true to make the file private.": "Zet op 'waar' om het bestand privé te maken.",
"The message to reply to.": "Het bericht waarop u wilt reageren.",
"The content of the reply.": "De inhoud van het antwoord.",
"Notify all project users of this reply.": "Informeer alle projectgebruikers over dit antwoord.",
"The project to create the milestone in.": "Het project om de mijlpaal in te maken.",
"The title of the milestone.": "De titel van de mijlpaal.",
"The due date of the milestone.": "De vervaldatum van de mijlpaal.",
"The users responsible for the milestone.": "De gebruikers die verantwoordelijk zijn voor deze mijlpaal.",
"A description for the milestone.": "Een beschrijving van de mijlpaal.",
"Notify responsible parties about the milestone.": "Informeer verantwoordelijke partijen over de mijlpaal.",
"Set to true to make the milestone private.": "Zet op 'waar' om de mijlpaal privé te maken.",
"The project to add people to.": "Het project om mensen aan toe te voegen.",
"The users to add to the project.": "De gebruikers om toe te voegen aan het project.",
"The keyword to search for.": "Het trefwoord waarnaar gezocht moet worden.",
"Limit the search to a specific project.": "Beperk de zoekopdracht tot een bepaald project.",
"The name or domain to search for.": "De naam of domein waarnaar gezocht moet worden.",
"The name or due date to search for.": "Naam of inleverdatum om naar te zoeken",
"The type of item to search for.": "Het type item waarnaar gezocht moet worden.",
"None": "geen",
"Low": "laag",
"Medium": "Middelgroot",
"High": "hoog",
"Standard User": "Standaard gebruiker",
"Collaborator": "Medewerker",
"Contact": "Contactpersoon",
"Nobody": "Niemand",
"Followers": "Volgers",
"All Project Users": "Alle projectgebruikers",
"Notebook": "Notitieboekje",
"Notebook Comment": "Notitieboekje Opmerking",
"New Task": "Nieuwe taak",
"New Person": "Nieuw persoon",
"New Comment": "Nieuwe reactie",
"New Message": "Nieuw bericht",
"New File": "Nieuw bestand",
"New Expense": "Nieuwe kosten",
"New Invoice": "Nieuwe factuur",
"Fires when a task is created.": "Vuurt af wanneer een taak is aangemaakt.",
"Fires when a new person (user/contact) is added.": "Vuurt wanneer een nieuwe persoon (gebruiker/contact) wordt toegevoegd.",
"Fires when a new comment is posted.": "Vuurt wanneer een nieuwe reactie is geplaatst.",
"Fires when a new message is posted (in project messages or discussions).": "Vuurt wanneer een nieuw bericht wordt geplaatst (in projectberichten of discussies).",
"Fires when a new file is added.": "Vuurt wanneer een nieuw bestand wordt toegevoegd.",
"Fires when a new expense entry is added.": "Vuurt wanneer een nieuwe uitgave wordt toegevoegd.",
"Fires when a new invoice is created.": "Vuurt wanneer een nieuwe factuur is aangemaakt.",
"The project to watch for new tasks. If not specified, all projects will be watched.": "Het project om nieuwe taken te bekijken. Indien niet gespecificeerd, zullen alle projecten bekeken worden.",
"The project to watch for new comments. If not specified, all projects will be watched.": "Het project om nieuwe reacties te bekijken. Indien niet opgegeven, zullen alle projecten bekeken worden.",
"The project to watch for new messages. If not specified, all projects will be watched.": "Het project om nieuwe berichten te bekijken. Indien niet opgegeven, zullen alle projecten bekeken worden.",
"The project to watch for new files. If not specified, all projects will be watched.": "Het project om nieuwe bestanden te bekijken. Indien niet opgegeven, zullen alle projecten bekeken worden.",
"The project to watch for new expenses. If not specified, all projects will be watched.": "Het project om nieuwe uitgaven te bekijken. Indien niet gespecificeerd, worden alle projecten bekeken.",
"The project to watch for new invoices. If not specified, all projects will be watched.": "Het project om nieuwe facturen te bekijken. Indien niet opgegeven, zullen alle projecten bekeken worden."
}

View File

@@ -0,0 +1,226 @@
{
"Teamwork is a work and project management tool that helps teams improve collaboration, visibility, and accountability.": "Trabalho em equipe é uma ferramenta de gerenciamento de projetos e de trabalho que ajuda equipes a melhorar a colaboração, a visibilidade e a responsabilização.",
"Username": "Usuário:",
"Password": "Senha",
"Subdomain": "Subdomínio",
"Your Teamwork email address.": "Seu endereço de e-mail da equipe.",
"Your Teamwork site subdomain (e.g., mycompany for mycompany.teamwork.com)": "Seu subdomínio do site da equipe (por exemplo, minhaempresa para minhaempresa.teamwork.com)",
"\n\tEnter your Teamwork username (email address) and password.\n\t": "\n\t\"Insira o seu nome de usuário da equipe\" (endereço de e-mail) e senha.\n\t",
"Create Project": "Criar Projeto",
"Create Task List": "Criar Lista de Tarefas",
"Create Task": "Criar tarefa",
"Mark Task Complete": "Marcar Tarefa Completa",
"Create Company": "Criar Empresa",
"Create Person": "Criar Pessoa",
"Update Task": "Atualizar Tarefa",
"Create Task Comment": "Criar Comentário de Tarefa",
"Create Time Entry on Task": "Criar Entrada de Tempo na Tarefa",
"Create Expense": "Criar Despesa",
"Upload File to Project": "Enviar Arquivo para o Projeto",
"Create Message Reply": "Criar Resposta de Mensagem",
"Create Milestone": "Criar marco",
"Add People to Project": "Adicionar pessoas ao projeto",
"Find Task": "Procurar Tarefa",
"Find Company": "Encontrar empresa",
"Find Milestone": "Encontrar marco",
"Find Notebook / Notebook Comment": "Encontrar comentário / caderno de notas",
"Create a new project (name, description, belongs to company, dates, etc.).": "Criar um novo projeto (nome, descrição, pertence a empresa, datas, etc.).",
"Add a new task list under a project.": "Adicionar uma nova lista de tarefas em um projeto.",
"Add a new task under a project with description, due date, assignee, tags, etc.": "Adicionar uma nova tarefa sob um projeto com descrição, data de vencimento, atribuído, marcações, etc.",
"Set a tasks status to complete.": "Defina o status de uma tarefa como concluído.",
"Create a new company in Teamwork.": "Criar uma nova empresa em equipe",
"Create a new user/contact (name, email, invite options).": "Criar um novo usuário/contato (nome, e-mail, opções de convite).",
"Modify a tasks fields (due date, assignee, content, priority, etc.).": "Modifica os campos de uma tarefa (data de vencimento, atribuído, conteúdo, prioridade, etc.).",
"Leave a comment in a task.": "Deixe um comentário em uma tarefa.",
"Log time spent on a task with duration, description.": "Registrar o tempo gasto em uma tarefa com duração, descrição.",
"Log new expense in a project with cost, description, date.": "Registre novas despesas em um projeto com custo, descrição, data.",
"Upload a file to a Teamwork project.": "Enviar um arquivo para um projeto de equipe.",
"Post a reply in a message thread.": "Escrever uma resposta em um tópico de mensagem.",
"Add a milestone with due date, description, responsible user, etc.": "Adicione um marco com data de vencimento, descrição, usuário responsável, etc.",
"Add existing users to a project.": "Adicionar usuários existentes a um projeto.",
"Search for tasks.": "Procurar por tarefas.",
"Search for a company by name or domain.": "Pesquisar uma empresa por nome ou domínio.",
"Find a milestone by name or due date in a project.": "Encontrar um marco por nome ou data limite em um projeto.",
"Locate notebooks or note comments by search parameters.": "Localize os notebooks ou observe comentários por parâmetros de pesquisa.",
"Name": "Nome",
"Description": "Descrição",
"Company": "Empresas",
"Category": "categoria",
"Tags": "Etiquetas",
"Start Date": "Data Inicial",
"End Date": "Data de Término",
"Project Owner": "Proprietário do projeto",
"Custom Fields": "Campos Personalizados",
"Project": "Projecto",
"Private": "Privado",
"Default Task Priority": "Prioridade Padrão da Tarefa",
"Default Task Tags": "Tags de Tarefas Padrão",
"Task List": "Lista de tarefas",
"Content": "Conteúdo",
"Responsible Parties": "Partes Responsáveis",
"Due Date": "Data de vencimento",
"Priority": "Prioridade",
"Attachment": "Anexo",
"Task": "Tarefas",
"Website": "site",
"Address 1": "Endereço 1",
"Address 2": "Complemento do Endereço",
"City": "cidade",
"State": "Estado:",
"Zip Code": "Código Postal",
"Country Code": "Código do país",
"Phone": "Smartphone",
"Fax": "Fax",
"Email 1": "E-mail 1",
"Email 2": "E-mail 2",
"Email 3": "E-mail 3",
"Profile": "Perfil",
"Private Notes": "Notas do trabalho",
"First Name": "Nome",
"Last Name": "Sobrenome",
"Email": "e-mail",
"User Type": "Tipo de usuário",
"Send Invite": "Enviar convite",
"Title": "Título",
"Comment": "Comentar",
"Notify": "Notificar",
"Date": "Encontro",
"Time": "Horário",
"Hours": "horas",
"Minutes": "minutos",
"Is Billable": "É Faturável",
"Cost": "Custo",
"File": "Arquivo",
"Message": "mensagem",
"Body": "Conteúdo",
"Notify All": "Notificar todos",
"Deadline": "Prazo",
"Users": "Usuários",
"Search Term": "Termo para pesquisa",
"Search For": "Pesquisar por",
"The name of the project.": "O nome do projeto.",
"A description for the project.": "Uma descrição para o projeto.",
"The company to associate the project with.": "A empresa a quem associar o projeto.",
"The category to assign the project to.": "A categoria para atribuir o projeto para",
"Tags to associate with the project.": "Tags para associar com o projeto.",
"The start date of the project.": "A data de início do projeto.",
"The end date of the project.": "A data de término do projeto.",
"The user to assign as the project owner.": "O usuário para atribuir como proprietário do projeto.",
"Custom fields for this project.": "Campos personalizados para este projeto.",
"The project to create the task list in.": "O projeto no qual será criado a lista de tarefas.",
"The name of the task list.": "O nome da lista de tarefas.",
"A description for the task list.": "Uma descrição para a lista de tarefas.",
"Set to true to make the task list private.": "Defina como verdadeiro para tornar a lista de tarefas privada.",
"The default priority for new tasks in this list.": "A prioridade padrão para novas tarefas nesta lista.",
"Default tags for new tasks in this list.": "Tags padrão para novas tarefas nesta lista.",
"The project to create the task in.": "O projeto para criar a tarefa.",
"The task list to add the task to.": "Lista de tarefas para adicionar a tarefa.",
"The content of the task.": "O conteúdo da tarefa.",
"The users responsible for the task.": "Os usuários responsáveis pela tarefa.",
"The start date of the task.": "A data de início da tarefa.",
"The due date of the task.": "Data de vencimento da tarefa.",
"A description for the task.": "Uma descrição para a tarefa.",
"The priority of the task.": "A prioridade da tarefa.",
"Tags to associate with the task.": "Tags para se associar à tarefa.",
"A file to attach to the task.": "Um arquivo para anexar à tarefa.",
"Custom fields for this task.": "Campos personalizados para esta tarefa.",
"The task to mark as complete.": "A tarefa a marcar como concluída.",
"Name of the company.": "Nome da empresa.",
"Company's website address.": "Endereço do site da empresa.",
"Primary address line.": "Linha de endereço primária.",
"Secondary address line.": "Linha de endereço secundário",
"City name.": "Nome da cidade",
"State or province.": "Estado ou província.",
"Postal or zip code.": "Código postal ou CEP.",
"2-letter ISO country code (e.g., US, GB).": "código ISO de país (e.g., EUA, GB).",
"Primary phone number.": "Número de telefone primário.",
"Fax number.": "Número do fax.",
"Primary email address.": "Endereço de e-mail primário.",
"Secondary email address.": "Endereço de email secundário",
"Tertiary email address.": "Endereço de e-mail terciário.",
"Public company profile or 'About Us' text.": "Perfil público da empresa ou texto 'Sobre NU'.",
"Notes visible only to internal users.": "Notas visíveis apenas para usuários internos.",
"Custom fields for this company.": "Campos personalizados para esta empresa.",
"The user's first name.": "Primeiro nome do usuário.",
"The user's last name.": "O último nome do usuário.",
"The user's email address.": "Endereço de e-mail do usuário.",
"The type of user to create.": "O tipo de usuário a criar.",
"The company to associate the user with.": "A empresa a quem associar o usuário.",
"Send an invitation email to the new user.": "Enviar um e-mail de convite para o novo usuário.",
"The user's job title.": "O título do usuário",
"The task to update.": "A tarefa a atualizar.",
"The new content of the task.": "O novo conteúdo da tarefa.",
"The new description for the task.": "A nova descrição para a tarefa.",
"The new users responsible for the task.": "Os novos usuários responsáveis pela tarefa.",
"The new start date of the task.": "A nova data de início da tarefa.",
"The new due date of the task.": "A nova data limite da tarefa.",
"The new priority of the task.": "A nova prioridade da tarefa.",
"New tags to associate with the task.": "Novas tags para se associar com a tarefa.",
"The task to add a comment to.": "A tarefa para adicionar um comentário.",
"The content of the comment.": "O conteúdo do comentário.",
"A file to attach to the comment.": "Um arquivo para anexar ao comentário.",
"Who to notify about this comment.": "Quem notificar sobre este comentário.",
"Set to true to make the comment private.": "Defina como verdadeiro para tornar o comentário privado.",
"Date of the time entry (yyyy-mm-dd)": "Data da entrada de hora (aaaa-mm-dd)",
"Time of the entry (hh:mm:ss)": "Tempo da entrada (hh:mm:ss)",
"Duration in minutes": "Duração em Minutos",
"The project to log the expense against.": "O projeto para registrar os gastos contra.",
"The name of the expense.": "O nome da despesa.",
"The cost of the expense.": "O custo da despesa.",
"The date of the expense.": "A data da despesa.",
"A description for the expense.": "Uma descrição da despesa.",
"The project to upload the file to.": "O projeto para onde fazer upload do arquivo.",
"The file to upload.": "O arquivo a ser enviado.",
"A description for the file.": "Uma descrição para o arquivo.",
"The category to assign the file to.": "A categoria para atribuir este arquivo.",
"Set to true to make the file private.": "Defina como verdadeiro para tornar o arquivo privado.",
"The message to reply to.": "A mensagem para responder.",
"The content of the reply.": "O conteúdo da resposta.",
"Notify all project users of this reply.": "Notificar todos os usuários do projeto desta resposta.",
"The project to create the milestone in.": "O projeto para criar o marco em.",
"The title of the milestone.": "O título do marco.",
"The due date of the milestone.": "O prazo do marco.",
"The users responsible for the milestone.": "Os usuários responsáveis pelo marco.",
"A description for the milestone.": "Uma descrição do marco.",
"Notify responsible parties about the milestone.": "Notificar as partes responsáveis sobre o marco.",
"Set to true to make the milestone private.": "Defina como verdadeiro para tornar privado o marco.",
"The project to add people to.": "O projeto ao qual adicionar pessoas.",
"The users to add to the project.": "Os usuários para adicionar ao projeto.",
"The keyword to search for.": "A palavra-chave para procurar.",
"Limit the search to a specific project.": "Limitar a busca a um projeto específico.",
"The name or domain to search for.": "O nome ou domínio a procurar.",
"The name or due date to search for.": "O nome ou data limite para pesquisar.",
"The type of item to search for.": "O tipo de item para procurar.",
"None": "Nenhuma",
"Low": "baixa",
"Medium": "Média",
"High": "alta",
"Standard User": "Usuário Padrão",
"Collaborator": "Colaborador",
"Contact": "contato",
"Nobody": "Nenhum",
"Followers": "Seguidores",
"All Project Users": "Todos os usuários do projeto",
"Notebook": "Caderno",
"Notebook Comment": "Comentário de Nota",
"New Task": "Nova tarefa",
"New Person": "Nova Pessoa",
"New Comment": "Novo Comentário",
"New Message": "Nova mensagem",
"New File": "Novo arquivo",
"New Expense": "Nova despesa",
"New Invoice": "Nova fatura",
"Fires when a task is created.": "Atira quando uma tarefa é criada.",
"Fires when a new person (user/contact) is added.": "Efetua quando uma nova pessoa (usuário/contato) é adicionada.",
"Fires when a new comment is posted.": "Efetua quando um novo comentário é publicado.",
"Fires when a new message is posted (in project messages or discussions).": "Efetua quando uma nova mensagem é publicada (nas mensagens ou discussões do projeto).",
"Fires when a new file is added.": "Efetua quando um novo arquivo é adicionado.",
"Fires when a new expense entry is added.": "Emite quando uma nova inscrição de despesas é adicionada.",
"Fires when a new invoice is created.": "aciona quando uma nova fatura é criada.",
"The project to watch for new tasks. If not specified, all projects will be watched.": "O projeto para assistir a novas tarefas. Se não for especificado, todos os projetos serão assistidos.",
"The project to watch for new comments. If not specified, all projects will be watched.": "O projeto para assistir aos novos comentários. Se não for especificado, todos os projetos serão assistidos.",
"The project to watch for new messages. If not specified, all projects will be watched.": "O projeto para assistir a novas mensagens. Se não for especificado, todos os projetos serão assistidos.",
"The project to watch for new files. If not specified, all projects will be watched.": "O projeto para assistir a novos arquivos. Se não for especificado, todos os projetos serão assistidos.",
"The project to watch for new expenses. If not specified, all projects will be watched.": "O projeto para assistir a novas despesas. Se não for especificado, todos os projetos serão assistidos.",
"The project to watch for new invoices. If not specified, all projects will be watched.": "O projeto para assistir a novas faturas. Se não for especificado, todos os projetos serão assistidos."
}

View File

@@ -0,0 +1,226 @@
{
"Teamwork is a work and project management tool that helps teams improve collaboration, visibility, and accountability.": "Teamwork is a work and project management tool that helps teams improve collaboration, visibility, and accountability.",
"Username": "Username",
"Password": "Password",
"Subdomain": "Subdomain",
"Your Teamwork email address.": "Your Teamwork email address.",
"Your Teamwork site subdomain (e.g., mycompany for mycompany.teamwork.com)": "Your Teamwork site subdomain (e.g., mycompany for mycompany.teamwork.com)",
"\n\tEnter your Teamwork username (email address) and password.\n\t": "\n\tEnter your Teamwork username (email address) and password.\n\t",
"Create Project": "Create Project",
"Create Task List": "Create Task List",
"Create Task": "Create Task",
"Mark Task Complete": "Mark Task Complete",
"Create Company": "Create Company",
"Create Person": "Create Person",
"Update Task": "Update Task",
"Create Task Comment": "Create Task Comment",
"Create Time Entry on Task": "Create Time Entry on Task",
"Create Expense": "Create Expense",
"Upload File to Project": "Upload File to Project",
"Create Message Reply": "Create Message Reply",
"Create Milestone": "Create Milestone",
"Add People to Project": "Add People to Project",
"Find Task": "Find Task",
"Find Company": "Find Company",
"Find Milestone": "Find Milestone",
"Find Notebook / Notebook Comment": "Find Notebook / Notebook Comment",
"Create a new project (name, description, belongs to company, dates, etc.).": "Create a new project (name, description, belongs to company, dates, etc.).",
"Add a new task list under a project.": "Add a new task list under a project.",
"Add a new task under a project with description, due date, assignee, tags, etc.": "Add a new task under a project with description, due date, assignee, tags, etc.",
"Set a tasks status to complete.": "Set a tasks status to complete.",
"Create a new company in Teamwork.": "Create a new company in Teamwork.",
"Create a new user/contact (name, email, invite options).": "Create a new user/contact (name, email, invite options).",
"Modify a tasks fields (due date, assignee, content, priority, etc.).": "Modify a tasks fields (due date, assignee, content, priority, etc.).",
"Leave a comment in a task.": "Leave a comment in a task.",
"Log time spent on a task with duration, description.": "Log time spent on a task with duration, description.",
"Log new expense in a project with cost, description, date.": "Log new expense in a project with cost, description, date.",
"Upload a file to a Teamwork project.": "Upload a file to a Teamwork project.",
"Post a reply in a message thread.": "Post a reply in a message thread.",
"Add a milestone with due date, description, responsible user, etc.": "Add a milestone with due date, description, responsible user, etc.",
"Add existing users to a project.": "Add existing users to a project.",
"Search for tasks.": "Search for tasks.",
"Search for a company by name or domain.": "Search for a company by name or domain.",
"Find a milestone by name or due date in a project.": "Find a milestone by name or due date in a project.",
"Locate notebooks or note comments by search parameters.": "Locate notebooks or note comments by search parameters.",
"Name": "Name",
"Description": "Description",
"Company": "Company",
"Category": "Category",
"Tags": "Tags",
"Start Date": "Start Date",
"End Date": "End Date",
"Project Owner": "Project Owner",
"Custom Fields": "Custom Fields",
"Project": "Project",
"Private": "Private",
"Default Task Priority": "Default Task Priority",
"Default Task Tags": "Default Task Tags",
"Task List": "Task List",
"Content": "Content",
"Responsible Parties": "Responsible Parties",
"Due Date": "Due Date",
"Priority": "Priority",
"Attachment": "Attachment",
"Task": "Task",
"Website": "Website",
"Address 1": "Address 1",
"Address 2": "Address 2",
"City": "City",
"State": "State",
"Zip Code": "Zip Code",
"Country Code": "Country Code",
"Phone": "Phone",
"Fax": "Fax",
"Email 1": "Email 1",
"Email 2": "Email 2",
"Email 3": "Email 3",
"Profile": "Profile",
"Private Notes": "Private Notes",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Email",
"User Type": "User Type",
"Send Invite": "Send Invite",
"Title": "Title",
"Comment": "Comment",
"Notify": "Notify",
"Date": "Date",
"Time": "Time",
"Hours": "Hours",
"Minutes": "Minutes",
"Is Billable": "Is Billable",
"Cost": "Cost",
"File": "File",
"Message": "Message",
"Body": "Body",
"Notify All": "Notify All",
"Deadline": "Deadline",
"Users": "Users",
"Search Term": "Search Term",
"Search For": "Search For",
"The name of the project.": "The name of the project.",
"A description for the project.": "A description for the project.",
"The company to associate the project with.": "The company to associate the project with.",
"The category to assign the project to.": "The category to assign the project to.",
"Tags to associate with the project.": "Tags to associate with the project.",
"The start date of the project.": "The start date of the project.",
"The end date of the project.": "The end date of the project.",
"The user to assign as the project owner.": "The user to assign as the project owner.",
"Custom fields for this project.": "Custom fields for this project.",
"The project to create the task list in.": "The project to create the task list in.",
"The name of the task list.": "The name of the task list.",
"A description for the task list.": "A description for the task list.",
"Set to true to make the task list private.": "Set to true to make the task list private.",
"The default priority for new tasks in this list.": "The default priority for new tasks in this list.",
"Default tags for new tasks in this list.": "Default tags for new tasks in this list.",
"The project to create the task in.": "The project to create the task in.",
"The task list to add the task to.": "The task list to add the task to.",
"The content of the task.": "The content of the task.",
"The users responsible for the task.": "The users responsible for the task.",
"The start date of the task.": "The start date of the task.",
"The due date of the task.": "The due date of the task.",
"A description for the task.": "A description for the task.",
"The priority of the task.": "The priority of the task.",
"Tags to associate with the task.": "Tags to associate with the task.",
"A file to attach to the task.": "A file to attach to the task.",
"Custom fields for this task.": "Custom fields for this task.",
"The task to mark as complete.": "The task to mark as complete.",
"Name of the company.": "Name of the company.",
"Company's website address.": "Company's website address.",
"Primary address line.": "Primary address line.",
"Secondary address line.": "Secondary address line.",
"City name.": "City name.",
"State or province.": "State or province.",
"Postal or zip code.": "Postal or zip code.",
"2-letter ISO country code (e.g., US, GB).": "2-letter ISO country code (e.g., US, GB).",
"Primary phone number.": "Primary phone number.",
"Fax number.": "Fax number.",
"Primary email address.": "Primary email address.",
"Secondary email address.": "Secondary email address.",
"Tertiary email address.": "Tertiary email address.",
"Public company profile or 'About Us' text.": "Public company profile or 'About Us' text.",
"Notes visible only to internal users.": "Notes visible only to internal users.",
"Custom fields for this company.": "Custom fields for this company.",
"The user's first name.": "The user's first name.",
"The user's last name.": "The user's last name.",
"The user's email address.": "The user's email address.",
"The type of user to create.": "The type of user to create.",
"The company to associate the user with.": "The company to associate the user with.",
"Send an invitation email to the new user.": "Send an invitation email to the new user.",
"The user's job title.": "The user's job title.",
"The task to update.": "The task to update.",
"The new content of the task.": "The new content of the task.",
"The new description for the task.": "The new description for the task.",
"The new users responsible for the task.": "The new users responsible for the task.",
"The new start date of the task.": "The new start date of the task.",
"The new due date of the task.": "The new due date of the task.",
"The new priority of the task.": "The new priority of the task.",
"New tags to associate with the task.": "New tags to associate with the task.",
"The task to add a comment to.": "The task to add a comment to.",
"The content of the comment.": "The content of the comment.",
"A file to attach to the comment.": "A file to attach to the comment.",
"Who to notify about this comment.": "Who to notify about this comment.",
"Set to true to make the comment private.": "Set to true to make the comment private.",
"Date of the time entry (yyyy-mm-dd)": "Date of the time entry (yyyy-mm-dd)",
"Time of the entry (hh:mm:ss)": "Time of the entry (hh:mm:ss)",
"Duration in minutes": "Duration in minutes",
"The project to log the expense against.": "The project to log the expense against.",
"The name of the expense.": "The name of the expense.",
"The cost of the expense.": "The cost of the expense.",
"The date of the expense.": "The date of the expense.",
"A description for the expense.": "A description for the expense.",
"The project to upload the file to.": "The project to upload the file to.",
"The file to upload.": "The file to upload.",
"A description for the file.": "A description for the file.",
"The category to assign the file to.": "The category to assign the file to.",
"Set to true to make the file private.": "Set to true to make the file private.",
"The message to reply to.": "The message to reply to.",
"The content of the reply.": "The content of the reply.",
"Notify all project users of this reply.": "Notify all project users of this reply.",
"The project to create the milestone in.": "The project to create the milestone in.",
"The title of the milestone.": "The title of the milestone.",
"The due date of the milestone.": "The due date of the milestone.",
"The users responsible for the milestone.": "The users responsible for the milestone.",
"A description for the milestone.": "A description for the milestone.",
"Notify responsible parties about the milestone.": "Notify responsible parties about the milestone.",
"Set to true to make the milestone private.": "Set to true to make the milestone private.",
"The project to add people to.": "The project to add people to.",
"The users to add to the project.": "The users to add to the project.",
"The keyword to search for.": "The keyword to search for.",
"Limit the search to a specific project.": "Limit the search to a specific project.",
"The name or domain to search for.": "The name or domain to search for.",
"The name or due date to search for.": "The name or due date to search for.",
"The type of item to search for.": "The type of item to search for.",
"None": "None",
"Low": "Low",
"Medium": "Medium",
"High": "High",
"Standard User": "Standard User",
"Collaborator": "Collaborator",
"Contact": "Contact",
"Nobody": "Nobody",
"Followers": "Followers",
"All Project Users": "All Project Users",
"Notebook": "Notebook",
"Notebook Comment": "Notebook Comment",
"New Task": "New Task",
"New Person": "New Person",
"New Comment": "New Comment",
"New Message": "New Message",
"New File": "New File",
"New Expense": "New Expense",
"New Invoice": "New Invoice",
"Fires when a task is created.": "Fires when a task is created.",
"Fires when a new person (user/contact) is added.": "Fires when a new person (user/contact) is added.",
"Fires when a new comment is posted.": "Fires when a new comment is posted.",
"Fires when a new message is posted (in project messages or discussions).": "Fires when a new message is posted (in project messages or discussions).",
"Fires when a new file is added.": "Fires when a new file is added.",
"Fires when a new expense entry is added.": "Fires when a new expense entry is added.",
"Fires when a new invoice is created.": "Fires when a new invoice is created.",
"The project to watch for new tasks. If not specified, all projects will be watched.": "The project to watch for new tasks. If not specified, all projects will be watched.",
"The project to watch for new comments. If not specified, all projects will be watched.": "The project to watch for new comments. If not specified, all projects will be watched.",
"The project to watch for new messages. If not specified, all projects will be watched.": "The project to watch for new messages. If not specified, all projects will be watched.",
"The project to watch for new files. If not specified, all projects will be watched.": "The project to watch for new files. If not specified, all projects will be watched.",
"The project to watch for new expenses. If not specified, all projects will be watched.": "The project to watch for new expenses. If not specified, all projects will be watched.",
"The project to watch for new invoices. If not specified, all projects will be watched.": "The project to watch for new invoices. If not specified, all projects will be watched."
}

View File

@@ -0,0 +1,226 @@
{
"Teamwork is a work and project management tool that helps teams improve collaboration, visibility, and accountability.": "Teamwork is a work and project management tool that helps teams improve collaboration, visibility, and accountability.",
"Username": "用户名",
"Password": "密码",
"Subdomain": "Subdomain",
"Your Teamwork email address.": "Your Teamwork email address.",
"Your Teamwork site subdomain (e.g., mycompany for mycompany.teamwork.com)": "Your Teamwork site subdomain (e.g., mycompany for mycompany.teamwork.com)",
"\n\tEnter your Teamwork username (email address) and password.\n\t": "\n\tEnter your Teamwork username (email address) and password.\n\t",
"Create Project": "Create Project",
"Create Task List": "Create Task List",
"Create Task": "Create Task",
"Mark Task Complete": "Mark Task Complete",
"Create Company": "Create Company",
"Create Person": "Create Person",
"Update Task": "Update Task",
"Create Task Comment": "Create Task Comment",
"Create Time Entry on Task": "Create Time Entry on Task",
"Create Expense": "Create Expense",
"Upload File to Project": "Upload File to Project",
"Create Message Reply": "Create Message Reply",
"Create Milestone": "Create Milestone",
"Add People to Project": "Add People to Project",
"Find Task": "Find Task",
"Find Company": "Find Company",
"Find Milestone": "Find Milestone",
"Find Notebook / Notebook Comment": "Find Notebook / Notebook Comment",
"Create a new project (name, description, belongs to company, dates, etc.).": "Create a new project (name, description, belongs to company, dates, etc.).",
"Add a new task list under a project.": "Add a new task list under a project.",
"Add a new task under a project with description, due date, assignee, tags, etc.": "Add a new task under a project with description, due date, assignee, tags, etc.",
"Set a tasks status to complete.": "Set a tasks status to complete.",
"Create a new company in Teamwork.": "Create a new company in Teamwork.",
"Create a new user/contact (name, email, invite options).": "Create a new user/contact (name, email, invite options).",
"Modify a tasks fields (due date, assignee, content, priority, etc.).": "Modify a tasks fields (due date, assignee, content, priority, etc.).",
"Leave a comment in a task.": "Leave a comment in a task.",
"Log time spent on a task with duration, description.": "Log time spent on a task with duration, description.",
"Log new expense in a project with cost, description, date.": "Log new expense in a project with cost, description, date.",
"Upload a file to a Teamwork project.": "Upload a file to a Teamwork project.",
"Post a reply in a message thread.": "Post a reply in a message thread.",
"Add a milestone with due date, description, responsible user, etc.": "Add a milestone with due date, description, responsible user, etc.",
"Add existing users to a project.": "Add existing users to a project.",
"Search for tasks.": "Search for tasks.",
"Search for a company by name or domain.": "Search for a company by name or domain.",
"Find a milestone by name or due date in a project.": "Find a milestone by name or due date in a project.",
"Locate notebooks or note comments by search parameters.": "Locate notebooks or note comments by search parameters.",
"Name": "名称",
"Description": "描述",
"Company": "Company",
"Category": "Category",
"Tags": "标签",
"Start Date": "Start Date",
"End Date": "End Date",
"Project Owner": "Project Owner",
"Custom Fields": "Custom Fields",
"Project": "项目",
"Private": "Private",
"Default Task Priority": "Default Task Priority",
"Default Task Tags": "Default Task Tags",
"Task List": "Task List",
"Content": "Content",
"Responsible Parties": "Responsible Parties",
"Due Date": "Due Date",
"Priority": "Priority",
"Attachment": "Attachment",
"Task": "Task",
"Website": "Website",
"Address 1": "Address 1",
"Address 2": "Address 2",
"City": "City",
"State": "State",
"Zip Code": "Zip Code",
"Country Code": "Country Code",
"Phone": "Phone",
"Fax": "Fax",
"Email 1": "Email 1",
"Email 2": "Email 2",
"Email 3": "Email 3",
"Profile": "Profile",
"Private Notes": "Private Notes",
"First Name": "名字",
"Last Name": "名字",
"Email": "电子邮件地址",
"User Type": "User Type",
"Send Invite": "Send Invite",
"Title": "标题",
"Comment": "Comment",
"Notify": "Notify",
"Date": "Date",
"Time": "Time",
"Hours": "Hours",
"Minutes": "Minutes",
"Is Billable": "Is Billable",
"Cost": "Cost",
"File": "文件",
"Message": "Message",
"Body": "正文内容",
"Notify All": "Notify All",
"Deadline": "Deadline",
"Users": "用户",
"Search Term": "Search Term",
"Search For": "Search For",
"The name of the project.": "The name of the project.",
"A description for the project.": "A description for the project.",
"The company to associate the project with.": "The company to associate the project with.",
"The category to assign the project to.": "The category to assign the project to.",
"Tags to associate with the project.": "Tags to associate with the project.",
"The start date of the project.": "The start date of the project.",
"The end date of the project.": "The end date of the project.",
"The user to assign as the project owner.": "The user to assign as the project owner.",
"Custom fields for this project.": "Custom fields for this project.",
"The project to create the task list in.": "The project to create the task list in.",
"The name of the task list.": "The name of the task list.",
"A description for the task list.": "A description for the task list.",
"Set to true to make the task list private.": "Set to true to make the task list private.",
"The default priority for new tasks in this list.": "The default priority for new tasks in this list.",
"Default tags for new tasks in this list.": "Default tags for new tasks in this list.",
"The project to create the task in.": "The project to create the task in.",
"The task list to add the task to.": "The task list to add the task to.",
"The content of the task.": "The content of the task.",
"The users responsible for the task.": "The users responsible for the task.",
"The start date of the task.": "The start date of the task.",
"The due date of the task.": "The due date of the task.",
"A description for the task.": "A description for the task.",
"The priority of the task.": "The priority of the task.",
"Tags to associate with the task.": "Tags to associate with the task.",
"A file to attach to the task.": "A file to attach to the task.",
"Custom fields for this task.": "Custom fields for this task.",
"The task to mark as complete.": "The task to mark as complete.",
"Name of the company.": "Name of the company.",
"Company's website address.": "Company's website address.",
"Primary address line.": "Primary address line.",
"Secondary address line.": "Secondary address line.",
"City name.": "City name.",
"State or province.": "State or province.",
"Postal or zip code.": "Postal or zip code.",
"2-letter ISO country code (e.g., US, GB).": "2-letter ISO country code (e.g., US, GB).",
"Primary phone number.": "Primary phone number.",
"Fax number.": "Fax number.",
"Primary email address.": "Primary email address.",
"Secondary email address.": "Secondary email address.",
"Tertiary email address.": "Tertiary email address.",
"Public company profile or 'About Us' text.": "Public company profile or 'About Us' text.",
"Notes visible only to internal users.": "Notes visible only to internal users.",
"Custom fields for this company.": "Custom fields for this company.",
"The user's first name.": "The user's first name.",
"The user's last name.": "The user's last name.",
"The user's email address.": "The user's email address.",
"The type of user to create.": "The type of user to create.",
"The company to associate the user with.": "The company to associate the user with.",
"Send an invitation email to the new user.": "Send an invitation email to the new user.",
"The user's job title.": "The user's job title.",
"The task to update.": "The task to update.",
"The new content of the task.": "The new content of the task.",
"The new description for the task.": "The new description for the task.",
"The new users responsible for the task.": "The new users responsible for the task.",
"The new start date of the task.": "The new start date of the task.",
"The new due date of the task.": "The new due date of the task.",
"The new priority of the task.": "The new priority of the task.",
"New tags to associate with the task.": "New tags to associate with the task.",
"The task to add a comment to.": "The task to add a comment to.",
"The content of the comment.": "The content of the comment.",
"A file to attach to the comment.": "A file to attach to the comment.",
"Who to notify about this comment.": "Who to notify about this comment.",
"Set to true to make the comment private.": "Set to true to make the comment private.",
"Date of the time entry (yyyy-mm-dd)": "Date of the time entry (yyyy-mm-dd)",
"Time of the entry (hh:mm:ss)": "Time of the entry (hh:mm:ss)",
"Duration in minutes": "Duration in minutes",
"The project to log the expense against.": "The project to log the expense against.",
"The name of the expense.": "The name of the expense.",
"The cost of the expense.": "The cost of the expense.",
"The date of the expense.": "The date of the expense.",
"A description for the expense.": "A description for the expense.",
"The project to upload the file to.": "The project to upload the file to.",
"The file to upload.": "The file to upload.",
"A description for the file.": "A description for the file.",
"The category to assign the file to.": "The category to assign the file to.",
"Set to true to make the file private.": "Set to true to make the file private.",
"The message to reply to.": "The message to reply to.",
"The content of the reply.": "The content of the reply.",
"Notify all project users of this reply.": "Notify all project users of this reply.",
"The project to create the milestone in.": "The project to create the milestone in.",
"The title of the milestone.": "The title of the milestone.",
"The due date of the milestone.": "The due date of the milestone.",
"The users responsible for the milestone.": "The users responsible for the milestone.",
"A description for the milestone.": "A description for the milestone.",
"Notify responsible parties about the milestone.": "Notify responsible parties about the milestone.",
"Set to true to make the milestone private.": "Set to true to make the milestone private.",
"The project to add people to.": "The project to add people to.",
"The users to add to the project.": "The users to add to the project.",
"The keyword to search for.": "The keyword to search for.",
"Limit the search to a specific project.": "Limit the search to a specific project.",
"The name or domain to search for.": "The name or domain to search for.",
"The name or due date to search for.": "The name or due date to search for.",
"The type of item to search for.": "The type of item to search for.",
"None": "无",
"Low": "Low",
"Medium": "Medium",
"High": "High",
"Standard User": "Standard User",
"Collaborator": "Collaborator",
"Contact": "Contact",
"Nobody": "Nobody",
"Followers": "Followers",
"All Project Users": "All Project Users",
"Notebook": "Notebook",
"Notebook Comment": "Notebook Comment",
"New Task": "New Task",
"New Person": "New Person",
"New Comment": "New Comment",
"New Message": "New Message",
"New File": "New File",
"New Expense": "New Expense",
"New Invoice": "New Invoice",
"Fires when a task is created.": "Fires when a task is created.",
"Fires when a new person (user/contact) is added.": "Fires when a new person (user/contact) is added.",
"Fires when a new comment is posted.": "Fires when a new comment is posted.",
"Fires when a new message is posted (in project messages or discussions).": "Fires when a new message is posted (in project messages or discussions).",
"Fires when a new file is added.": "Fires when a new file is added.",
"Fires when a new expense entry is added.": "Fires when a new expense entry is added.",
"Fires when a new invoice is created.": "Fires when a new invoice is created.",
"The project to watch for new tasks. If not specified, all projects will be watched.": "The project to watch for new tasks. If not specified, all projects will be watched.",
"The project to watch for new comments. If not specified, all projects will be watched.": "The project to watch for new comments. If not specified, all projects will be watched.",
"The project to watch for new messages. If not specified, all projects will be watched.": "The project to watch for new messages. If not specified, all projects will be watched.",
"The project to watch for new files. If not specified, all projects will be watched.": "The project to watch for new files. If not specified, all projects will be watched.",
"The project to watch for new expenses. If not specified, all projects will be watched.": "The project to watch for new expenses. If not specified, all projects will be watched.",
"The project to watch for new invoices. If not specified, all projects will be watched.": "The project to watch for new invoices. If not specified, all projects will be watched."
}

View File

@@ -0,0 +1,61 @@
import { createPiece } from "@activepieces/pieces-framework";
import { teamworkAuth } from "./lib/common/auth";
import { createProject } from "./lib/actions/create-project";
import { createTaskList } from "./lib/actions/create-task-list";
import { createTask } from "./lib/actions/create-task";
import { markTaskComplete } from "./lib/actions/mark-task-complete";
import { newTask } from "./lib/triggers/new-task";
import { createCompany } from "./lib/actions/create-company";
import { createPerson } from "./lib/actions/create-person";
import { updateTask } from "./lib/actions/update-task";
import { createTaskComment } from "./lib/actions/create-task-comment";
import { findTask } from "./lib/actions/find-task";
import { findCompany } from "./lib/actions/find-company";
import { findMilestone } from "./lib/actions/find-milestone";
import { findNotebookOrComment } from "./lib/actions/find-notebook-or-comment";
import { newPerson } from "./lib/triggers/new-person";
import { createTimeEntryOnTask } from "./lib/actions/create-time-entry-on-task";
import { createExpense } from "./lib/actions/create-expense";
import { uploadFileToProject } from "./lib/actions/upload-file-to-project";
import { createMessageReply } from "./lib/actions/create-message-reply";
import { createMilestone } from "./lib/actions/create-milestone";
import { addPeopleToProject } from "./lib/actions/add-people-to-project";
import { newComment } from "./lib/triggers/new-comment";
import { newMessage } from "./lib/triggers/new-message";
import { newFile } from "./lib/triggers/new-file";
import { newExpense } from "./lib/triggers/new-expense";
import { newInvoice } from "./lib/triggers/new-invoice";
import { PieceCategory } from "@activepieces/shared";
export const teamwork = createPiece({
displayName: "Teamwork",
description: "Teamwork is a work and project management tool that helps teams improve collaboration, visibility, and accountability.",
auth: teamworkAuth,
minimumSupportedRelease: '0.36.1',
logoUrl: "https://cdn.activepieces.com/pieces/teamwork.png",
authors: ['sparkybug', 'onyedikachi-david'],
categories: [PieceCategory.PRODUCTIVITY],
actions: [
createProject,
createTaskList,
createTask,
markTaskComplete,
createCompany,
createPerson,
updateTask,
createTaskComment,
createTimeEntryOnTask,
createExpense,
uploadFileToProject,
createMessageReply,
createMilestone,
addPeopleToProject,
findTask,
findCompany,
findMilestone,
findNotebookOrComment,
],
triggers: [newTask, newPerson, newComment, newMessage, newFile, newExpense, newInvoice],
});

View File

@@ -0,0 +1,84 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const addPeopleToProject = createAction({
name: 'add_people_to_project',
displayName: 'Add People to Project',
description: 'Add existing users to a project.',
auth: teamworkAuth,
props: {
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to add people to.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
userIdList: Property.MultiSelectDropdown({
auth: teamworkAuth,
displayName: 'Users',
description: 'The users to add to the project.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/people.json',
});
const options = res.data.people.map((p: { id: string; 'first-name': string; 'last-name': string }) => ({
label: `${p['first-name']} ${p['last-name']}`,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
},
async run({ auth, propsValue }) {
const body = {
add: {
userIdList: propsValue.userIdList.join(','),
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/projects/${propsValue.projectId}/people.json`,
body,
});
},
});

View File

@@ -0,0 +1,100 @@
import { createAction, Property, DynamicPropsValue, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const createCompany = createAction({
name: 'create_company',
displayName: 'Create Company',
description: 'Create a new company in Teamwork.',
auth: teamworkAuth,
props: {
name: Property.ShortText({ displayName: 'Name', description: 'Name of the company.', required: true }),
website: Property.ShortText({ displayName: 'Website', description: "Company's website address.", required: false }),
addressOne: Property.ShortText({ displayName: 'Address 1', description: 'Primary address line.', required: false }),
addressTwo: Property.ShortText({ displayName: 'Address 2', description: 'Secondary address line.', required: false }),
city: Property.ShortText({ displayName: 'City', description: 'City name.', required: false }),
state: Property.ShortText({ displayName: 'State', description: 'State or province.', required: false }),
zip: Property.ShortText({ displayName: 'Zip Code', description: 'Postal or zip code.', required: false }),
countrycode: Property.ShortText({
displayName: 'Country Code',
description: '2-letter ISO country code (e.g., US, GB).',
required: false,
}),
phone: Property.ShortText({ displayName: 'Phone', description: 'Primary phone number.', required: false }),
fax: Property.ShortText({ displayName: 'Fax', description: 'Fax number.', required: false }),
emailOne: Property.ShortText({ displayName: 'Email 1', description: 'Primary email address.', required: false }),
emailTwo: Property.ShortText({ displayName: 'Email 2', description: 'Secondary email address.', required: false }),
emailThree: Property.ShortText({ displayName: 'Email 3', description: 'Tertiary email address.', required: false }),
profile: Property.LongText({ displayName: 'Profile', description: "Public company profile or 'About Us' text.", required: false }),
privateNotes: Property.LongText({ displayName: 'Private Notes', description: 'Notes visible only to internal users.', required: false }),
customFields: Property.DynamicProperties({
auth: teamworkAuth,
displayName: 'Custom Fields',
description: 'Custom fields for this company.',
required: false,
refreshers: [],
props: async ({ auth }) => {
if (!auth) return {};
const fields: DynamicPropsValue = {};
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects/api/v3/customfields.json',
query: {
entities: 'companies',
},
});
if (res.data?.customfields) {
for (const field of res.data.customfields) {
fields[field.id] = Property.ShortText({
displayName: field.name,
required: field.required,
});
}
}
return fields;
},
}),
},
async run({ auth, propsValue }) {
const customFields = Object.entries(propsValue.customFields ?? {}).map(
([customfieldId, value]) => ({ customfieldId: parseInt(customfieldId), value })
);
const companyData: any = {
name: propsValue.name,
website: propsValue.website,
addressOne: propsValue.addressOne,
addressTwo: propsValue.addressTwo,
city: propsValue.city,
state: propsValue.state,
zip: propsValue.zip,
countrycode: propsValue.countrycode,
phone: propsValue.phone,
fax: propsValue.fax,
emailOne: propsValue.emailOne,
emailTwo: propsValue.emailTwo,
emailThree: propsValue.emailThree,
profile: propsValue.profile,
privateNotes: propsValue.privateNotes,
};
if (customFields.length > 0) {
companyData.customFields = {
Values: customFields,
};
}
const body = { company: companyData };
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/projects/api/v3/companies.json`,
body,
});
},
});

View File

@@ -0,0 +1,80 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const createExpense = createAction({
name: 'create_expense',
displayName: 'Create Expense',
description: 'Log new expense in a project with cost, description, date.',
auth: teamworkAuth,
props: {
'project-id': Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to log the expense against.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects/api/v3/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
name: Property.ShortText({
displayName: 'Name',
description: 'The name of the expense.',
required: true,
}),
cost: Property.Number({
displayName: 'Cost',
description: 'The cost of the expense.',
required: true,
}),
date: Property.DateTime({
displayName: 'Date',
description: 'The date of the expense.',
required: true,
}),
description: Property.LongText({
displayName: 'Description',
description: 'A description for the expense.',
required: false,
}),
},
async run({ auth, propsValue }) {
const date = new Date(propsValue.date).toISOString().slice(0, 10).replace(/-/g, '');
const body = {
expense: {
'project-id': propsValue['project-id'],
name: propsValue.name,
cost: String(propsValue.cost),
date: date,
description: propsValue.description,
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/expenses.json`,
body,
});
},
});

View File

@@ -0,0 +1,66 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const createMessageReply = createAction({
name: 'create_message_reply',
displayName: 'Create Message Reply',
description: 'Post a reply in a message thread.',
auth: teamworkAuth,
props: {
messageId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Message',
description: 'The message to reply to.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/posts.json',
});
const options = res.data.posts.map((p: { id: string; title: string }) => ({
label: p.title,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
body: Property.LongText({
displayName: 'Body',
description: 'The content of the reply.',
required: true,
}),
notify: Property.Checkbox({
displayName: 'Notify All',
description: 'Notify all project users of this reply.',
required: false,
}),
},
async run({ auth, propsValue }) {
const body = {
messagereply: {
body: propsValue.body,
notify: propsValue.notify ? 'All' : undefined,
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/messages/${propsValue.messageId}/messageReplies.json`,
body,
});
},
});

View File

@@ -0,0 +1,117 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const createMilestone = createAction({
name: 'create_milestone',
displayName: 'Create Milestone',
description: 'Add a milestone with due date, description, responsible user, etc.',
auth: teamworkAuth,
props: {
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to create the milestone in.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
title: Property.ShortText({
displayName: 'Title',
description: 'The title of the milestone.',
required: true,
}),
deadline: Property.DateTime({
displayName: 'Deadline',
description: 'The due date of the milestone.',
required: true,
}),
'responsible-party-ids': Property.MultiSelectDropdown({
auth: teamworkAuth,
displayName: 'Responsible Parties',
description: 'The users responsible for the milestone.',
required: true,
refreshers: ['projectId'],
options: async ({ auth, projectId }) => {
if (!auth || !projectId) {
return {
disabled: true,
placeholder: 'Please select a project.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: `/projects/${projectId}/people.json`,
});
const options = res.data.people.map((p: { id: string; 'first-name': string; 'last-name': string }) => ({
label: `${p['first-name']} ${p['last-name']}`,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
description: Property.LongText({
displayName: 'Description',
description: 'A description for the milestone.',
required: false,
}),
notify: Property.Checkbox({
displayName: 'Notify',
description: 'Notify responsible parties about the milestone.',
required: false,
}),
private: Property.Checkbox({
displayName: 'Private',
description: 'Set to true to make the milestone private.',
required: false,
}),
},
async run({ auth, propsValue }) {
const deadline = new Date(propsValue.deadline)
.toISOString()
.slice(0, 10)
.replace(/-/g, '');
const body = {
milestone: {
title: propsValue.title,
deadline: deadline,
'responsible-party-ids': propsValue['responsible-party-ids'].join(','),
description: propsValue.description,
notify: propsValue.notify,
private: propsValue.private,
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/projects/${propsValue.projectId}/milestones.json`,
body,
});
},
});

View File

@@ -0,0 +1,113 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
export const createNotebookComment = createAction({
name: 'create_notebook_comment',
displayName: 'Create Notebook Comment',
description: 'Add a comment on a notebook (collaborative document) with optional attachments.',
auth: teamworkAuth,
props: {
notebookId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Notebook',
description: 'The notebook to add a comment to.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/notebooks.json',
});
const notebooks = res.data.projects.flatMap(
(p: { notebooks: { id: string; name: string }[] }) => p.notebooks
);
const options = notebooks.map((n: { id: string; name: string }) => ({
label: n.name,
value: n.id,
}));
return {
disabled: false,
options,
};
},
}),
body: Property.LongText({
displayName: 'Comment',
description: 'The content of the comment.',
required: true,
}),
attachment: Property.File({
displayName: 'Attachment',
description: 'A file to attach to the comment.',
required: false,
}),
notify: Property.StaticDropdown({
displayName: 'Notify',
description: 'Who to notify about this comment.',
required: false,
options: {
options: [
{ label: 'Nobody', value: '' },
{ label: 'Followers', value: 'true' },
{ label: 'All Project Users', value: 'all' },
],
},
}),
isprivate: Property.Checkbox({
displayName: 'Private',
description: 'Set to true to make the comment private.',
required: false,
}),
},
async run({ auth, propsValue }) {
let pendingFileRef: string | undefined = undefined;
if (propsValue.attachment) {
const presignedUrlRes = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects/api/v1/pendingfiles/presignedurl.json',
query: {
fileName: propsValue.attachment.filename,
fileSize: propsValue.attachment.data.length.toString(),
},
});
const { ref, url } = presignedUrlRes.data;
await httpClient.sendRequest({
method: HttpMethod.PUT,
url: url,
body: propsValue.attachment.data,
headers: {
'X-Amz-Acl': 'public-read',
'Content-Length': String(propsValue.attachment.data.length),
},
});
pendingFileRef = ref;
}
const body = {
comment: {
body: propsValue.body,
notify: propsValue.notify,
isprivate: propsValue.isprivate,
pendingFileAttachments: pendingFileRef,
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/notebooks/${propsValue.notebookId}/comments.json`,
body,
});
},
});

View File

@@ -0,0 +1,98 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const createPerson = createAction({
name: 'create_person',
displayName: 'Create Person',
description: 'Create a new user/contact (name, email, invite options).',
auth: teamworkAuth,
props: {
'first-name': Property.ShortText({
displayName: 'First Name',
description: "The user's first name.",
required: true,
}),
'last-name': Property.ShortText({
displayName: 'Last Name',
description: "The user's last name.",
required: true,
}),
'email-address': Property.ShortText({
displayName: 'Email',
description: "The user's email address.",
required: true,
}),
'user-type': Property.StaticDropdown({
displayName: 'User Type',
description: 'The type of user to create.',
required: true,
options: {
options: [
{ label: 'Standard User', value: 'account' },
{ label: 'Collaborator', value: 'collaborator' },
{ label: 'Contact', value: 'contact' },
],
},
}),
'company-id': Property.Dropdown({
auth: teamworkAuth,
displayName: 'Company',
description: 'The company to associate the user with.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/companies.json',
});
const options = res.data.companies.map((c: { id: string; name: string }) => ({
label: c.name,
value: c.id,
}));
return {
disabled: false,
options,
};
},
}),
sendInvite: Property.Checkbox({
displayName: 'Send Invite',
description: 'Send an invitation email to the new user.',
required: false,
}),
title: Property.ShortText({
displayName: 'Title',
description: "The user's job title.",
required: false,
}),
},
async run({ auth, propsValue }) {
const body = {
person: {
'first-name': propsValue['first-name'],
'last-name': propsValue['last-name'],
'email-address': propsValue['email-address'],
'user-type': propsValue['user-type'],
'company-id': propsValue['company-id'],
sendInvite: propsValue.sendInvite,
title: propsValue.title,
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/people.json`,
body,
});
},
});

View File

@@ -0,0 +1,210 @@
import {
createAction,
Property,
DynamicPropsValue,
PiecePropValueSchema,
} from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamworkRequest } from '../common/client';
export const createProject = createAction({
name: 'create_project',
displayName: 'Create Project',
description: 'Create a new project (name, description, belongs to company, dates, etc.).',
auth: teamworkAuth,
props: {
name: Property.ShortText({
displayName: 'Name',
description: 'The name of the project.',
required: true,
}),
description: Property.LongText({
displayName: 'Description',
description: 'A description for the project.',
required: false,
}),
companyId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Company',
description: 'The company to associate the project with.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/companies.json',
});
const options = res.data.companies.map((c: { id: string; name: string }) => ({
label: c.name,
value: c.id,
}));
return {
disabled: false,
options,
};
},
}),
'category-id': Property.Dropdown({
auth: teamworkAuth,
displayName: 'Category',
description: 'The category to assign the project to.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects/api/v3/projectcategories.json',
});
const options = res.data.projectCategories.map((c: { id: string; name: string }) => ({
label: c.name,
value: c.id,
}));
return {
disabled: false,
options,
};
},
}),
tagIds: Property.MultiSelectDropdown({
auth: teamworkAuth,
displayName: 'Tags',
description: 'Tags to associate with the project.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/tags.json',
});
const options = res.data.tags.map((t: { id: string; name: string }) => ({
label: t.name,
value: t.id,
}));
return {
disabled: false,
options,
};
},
}),
'start-date': Property.DateTime({
displayName: 'Start Date',
description: 'The start date of the project.',
required: false,
}),
'end-date': Property.DateTime({
displayName: 'End Date',
description: 'The end date of the project.',
required: false,
}),
projectOwnerId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project Owner',
description: 'The user to assign as the project owner.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/people.json',
});
const options = res.data.people.map((p: { id: string; 'first-name': string; 'last-name': string }) => ({
label: `${p['first-name']} ${p['last-name']}`,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
customFields: Property.DynamicProperties({
displayName: 'Custom Fields',
description: 'Custom fields for this project.',
required: false,
refreshers: [],
auth: teamworkAuth,
props: async ({ auth }) => {
if (!auth) return {};
const fields: DynamicPropsValue = {};
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects/api/v3/customfields.json',
query: {
entities: 'projects',
},
});
if (res.data?.customfields) {
for (const field of res.data.customfields) {
fields[field.id] = Property.ShortText({
displayName: field.name,
required: field.required,
});
}
}
return fields;
},
}),
},
async run({ auth, propsValue }) {
const formatDate = (date: string | undefined) => {
if (!date) return undefined;
return new Date(date).toISOString().slice(0, 10).replace(/-/g, '');
};
const customFields = Object.entries(propsValue.customFields ?? {}).map(
([customFieldId, value]) => ({ customFieldId: parseInt(customFieldId), value })
);
const body = {
project: {
name: propsValue.name,
description: propsValue.description,
companyId: propsValue.companyId,
'category-id': propsValue['category-id'],
tagIds: propsValue.tagIds?.join(','),
'start-date': formatDate(propsValue['start-date']),
'end-date': formatDate(propsValue['end-date']),
projectOwnerId: propsValue.projectOwnerId,
customFields: customFields.length > 0 ? customFields : undefined,
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/projects.json`,
body,
});
},
});

View File

@@ -0,0 +1,70 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const createStage = createAction({
name: 'create_stage',
displayName: 'Create Stage',
description: 'Add a new stage in a workflow or board.',
auth: teamworkAuth,
props: {
workflowId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Workflow',
description: 'The workflow to add the stage to.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects/api/v3/workflows.json',
});
const options = res.data.workflows.map((w: { id: string; name: string }) => ({
label: w.name,
value: w.id,
}));
return {
disabled: false,
options,
};
},
}),
name: Property.ShortText({
displayName: 'Name',
description: 'The name of the stage.',
required: true,
}),
color: Property.ShortText({
displayName: 'Color',
description: 'Hex color code (e.g., #FF0000)',
required: false,
}),
},
async run({ auth, propsValue }) {
const body = {
stage: {
name: propsValue.name,
color: propsValue.color
? {
Value: propsValue.color,
}
: undefined,
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/projects/api/v3/workflows/${propsValue.workflowId}/stages.json`,
body,
});
},
});

View File

@@ -0,0 +1,110 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
export const createTaskComment = createAction({
name: 'create_task_comment',
displayName: 'Create Task Comment',
description: 'Leave a comment in a task.',
auth: teamworkAuth,
props: {
taskId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Task',
description: 'The task to add a comment to.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/tasks.json',
});
const options = res.data['todo-items'].map((task: { id: string; content: string }) => ({
label: task.content,
value: task.id,
}));
return {
disabled: false,
options,
};
},
}),
body: Property.LongText({
displayName: 'Comment',
description: 'The content of the comment.',
required: true,
}),
attachment: Property.File({
displayName: 'Attachment',
description: 'A file to attach to the comment.',
required: false,
}),
notify: Property.StaticDropdown({
displayName: 'Notify',
description: 'Who to notify about this comment.',
required: false,
options: {
options: [
{ label: 'Nobody', value: '' },
{ label: 'Followers', value: 'true' },
{ label: 'All Project Users', value: 'all' },
],
},
}),
isprivate: Property.Checkbox({
displayName: 'Private',
description: 'Set to true to make the comment private.',
required: false,
}),
},
async run({ auth, propsValue }) {
let pendingFileRef: string | undefined = undefined;
if (propsValue.attachment) {
const presignedUrlRes = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects/api/v1/pendingfiles/presignedurl.json',
query: {
fileName: propsValue.attachment.filename,
fileSize: propsValue.attachment.data.length.toString(),
},
});
const { ref, url } = presignedUrlRes.data;
await httpClient.sendRequest({
method: HttpMethod.PUT,
url: url,
body: propsValue.attachment.data,
headers: {
'X-Amz-Acl': 'public-read',
'Content-Length': String(propsValue.attachment.data.length),
},
});
pendingFileRef = ref;
}
const body = {
comment: {
body: propsValue.body,
notify: propsValue.notify,
isprivate: propsValue.isprivate,
pendingFileAttachments: pendingFileRef,
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/tasks/${propsValue.taskId}/comments.json`,
body,
});
},
});

View File

@@ -0,0 +1,117 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamworkRequest } from '../common/client';
export const createTaskList = createAction({
name: 'create_task_list',
displayName: 'Create Task List',
description: 'Add a new task list under a project.',
auth: teamworkAuth,
props: {
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to create the task list in.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
name: Property.ShortText({
displayName: 'Name',
description: 'The name of the task list.',
required: true,
}),
description: Property.LongText({
displayName: 'Description',
description: 'A description for the task list.',
required: false,
}),
private: Property.Checkbox({
displayName: 'Private',
description: 'Set to true to make the task list private.',
required: false,
}),
priority: Property.StaticDropdown({
displayName: 'Default Task Priority',
description: 'The default priority for new tasks in this list.',
required: false,
options: {
options: [
{ label: 'None', value: '' },
{ label: 'Low', value: 'low' },
{ label: 'Medium', value: 'medium' },
{ label: 'High', value: 'high' },
],
},
}),
tags: Property.MultiSelectDropdown({
auth: teamworkAuth,
displayName: 'Default Task Tags',
description: 'Default tags for new tasks in this list.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/tags.json',
});
const options = res.data.tags.map((t: { id: string; name: string }) => ({
label: t.name,
value: t.id,
}));
return {
disabled: false,
options,
};
},
}),
},
async run({ auth, propsValue }) {
const body = {
'todo-list': {
name: propsValue.name,
description: propsValue.description,
private: propsValue.private,
'new-task-defaults': {
priority: propsValue.priority,
tags: propsValue.tags?.map((tagId) => ({ id: tagId })),
},
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/projects/${propsValue.projectId}/tasklists.json`,
body,
});
},
});

View File

@@ -0,0 +1,250 @@
import {
createAction,
Property,
DynamicPropsValue,
PiecePropValueSchema,
} from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
import { teamworkRequest } from '../common/client';
export const createTask = createAction({
name: 'create_task',
displayName: 'Create Task',
description: 'Add a new task under a project with description, due date, assignee, tags, etc.',
auth: teamworkAuth,
props: {
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to create the task in.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
tasklistId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Task List',
description: 'The task list to add the task to.',
required: true,
refreshers: ['projectId'],
options: async ({ auth, projectId }) => {
if (!auth || !projectId) {
return {
disabled: true,
placeholder: 'Please select a project.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: `/projects/${projectId}/tasklists.json`,
});
const options = res.data.tasklists.map((tl: { id: string; name: string }) => ({
label: tl.name,
value: tl.id,
}));
return {
disabled: false,
options,
};
},
}),
content: Property.ShortText({
displayName: 'Content',
description: 'The content of the task.',
required: true,
}),
'responsible-party-id': Property.MultiSelectDropdown({
auth: teamworkAuth,
displayName: 'Responsible Parties',
description: 'The users responsible for the task.',
required: false,
refreshers: ['projectId'],
options: async ({ auth, projectId }) => {
if (!auth || !projectId) {
return {
disabled: true,
placeholder: 'Please select a project.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: `/projects/${projectId}/people.json`,
});
const options = res.data.people.map((p: { id: string; 'first-name': string; 'last-name': string }) => ({
label: `${p['first-name']} ${p['last-name']}`,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
'start-date': Property.DateTime({
displayName: 'Start Date',
description: 'The start date of the task.',
required: false,
}),
'due-date': Property.DateTime({
displayName: 'Due Date',
description: 'The due date of the task.',
required: false,
}),
description: Property.LongText({
displayName: 'Description',
description: 'A description for the task.',
required: false,
}),
priority: Property.StaticDropdown({
displayName: 'Priority',
description: 'The priority of the task.',
required: false,
options: {
options: [
{ label: 'None', value: '' },
{ label: 'Low', value: 'low' },
{ label: 'Medium', value: 'medium' },
{ label: 'High', value: 'high' },
],
},
}),
tagIds: Property.MultiSelectDropdown({
auth: teamworkAuth,
displayName: 'Tags',
description: 'Tags to associate with the task.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/tags.json',
});
const options = res.data.tags.map((t: { id: string; name: string }) => ({
label: t.name,
value: t.id,
}));
return {
disabled: false,
options,
};
},
}),
attachment: Property.File({
displayName: 'Attachment',
description: 'A file to attach to the task.',
required: false,
}),
customFields: Property.DynamicProperties({
auth: teamworkAuth,
displayName: 'Custom Fields',
description: 'Custom fields for this task.',
required: false,
refreshers: [],
props: async ({ auth }) => {
if (!auth) return {};
const fields: DynamicPropsValue = {};
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects/api/v3/customfields.json',
query: {
entities: 'tasks',
},
});
if (res.data?.customfields) {
for (const field of res.data.customfields) {
fields[field.id] = Property.ShortText({
displayName: field.name,
required: field.required,
});
}
}
return fields;
},
}),
},
async run({ auth, propsValue }) {
let pendingFileAttachments: string | undefined = undefined;
if (propsValue.attachment) {
const presignedUrlRes = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects/api/v1/pendingfiles/presignedurl.json',
query: {
fileName: propsValue.attachment.filename,
fileSize: propsValue.attachment.data.length.toString(),
},
});
const { ref, url } = presignedUrlRes.data;
await httpClient.sendRequest({
method: HttpMethod.PUT,
url: url,
body: propsValue.attachment.data,
headers: {
'X-Amz-Acl': 'public-read',
'Content-Length': String(propsValue.attachment.data.length),
},
});
pendingFileAttachments = ref;
}
const formatDate = (date: string | undefined) => {
if (!date) return undefined;
return new Date(date).toISOString().slice(0, 10).replace(/-/g, '');
};
const customFields = Object.entries(propsValue.customFields ?? {}).map(
([customFieldId, value]) => ({ customFieldId: parseInt(customFieldId), value })
);
const body = {
'todo-item': {
content: propsValue.content,
tasklistId: propsValue.tasklistId,
'responsible-party-id': propsValue['responsible-party-id']?.join(','),
'start-date': formatDate(propsValue['start-date']),
'due-date': formatDate(propsValue['due-date']),
description: propsValue.description,
priority: propsValue.priority,
tagIds: propsValue.tagIds?.join(','),
pendingFileAttachments: pendingFileAttachments,
customFields: customFields.length > 0 ? customFields : undefined,
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/projects/${propsValue.projectId}/tasks.json`,
body,
});
},
});

View File

@@ -0,0 +1,88 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const createTimeEntryOnTask = createAction({
name: 'create_time_entry_on_task',
displayName: 'Create Time Entry on Task',
description: 'Log time spent on a task with duration, description.',
auth: teamworkAuth,
props: {
taskId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Task',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/tasks.json',
});
const options = res.data['todo-items'].map((task: { id: string; content: string }) => ({
label: task.content,
value: task.id,
}));
return {
disabled: false,
options,
};
},
}),
date: Property.DateTime({
displayName: 'Date',
description: 'Date of the time entry (yyyy-mm-dd)',
required: true,
}),
time: Property.ShortText({
displayName: 'Time',
description: 'Time of the entry (hh:mm:ss)',
required: false,
}),
hours: Property.Number({
displayName: 'Hours',
required: true,
}),
minutes: Property.Number({
displayName: 'Minutes',
description: 'Duration in minutes',
required: true,
}),
description: Property.LongText({
displayName: 'Description',
required: false,
}),
isBillable: Property.Checkbox({
displayName: 'Is Billable',
required: false,
}),
},
async run({ auth, propsValue }) {
const date = new Date(propsValue.date).toISOString().slice(0, 10);
const body = {
timelog: {
date: date,
time: propsValue.time,
description: propsValue.description,
hasStartTime: !!propsValue.time,
hours: propsValue.hours,
minutes: propsValue.minutes,
isBillable: propsValue.isBillable,
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/projects/api/v3/tasks/${propsValue.taskId}/time.json`,
body,
});
},
});

View File

@@ -0,0 +1,58 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const findCompany = createAction({
name: 'find_company',
displayName: 'Find Company',
description: 'Search for a company by name or domain.',
auth: teamworkAuth,
props: {
searchTerm: Property.ShortText({
displayName: 'Search Term',
description: 'The name or domain to search for.',
required: true,
}),
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'Limit the search to a specific project.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
},
async run({ auth, propsValue }) {
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/search.json',
query: {
searchFor: 'companies',
searchTerm: propsValue.searchTerm,
projectId: propsValue.projectId,
},
});
return res.data;
},
});

View File

@@ -0,0 +1,60 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const findMilestone = createAction({
name: 'find_milestone',
displayName: 'Find Milestone',
description: 'Find a milestone by name or due date in a project.',
auth: teamworkAuth,
props: {
searchTerm: Property.ShortText({
displayName: 'Search Term',
description: 'The name or due date to search for.',
required: true,
}),
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'Limit the search to a specific project.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
},
async run({ auth, propsValue }) {
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/search.json',
query: {
searchFor: 'milestones',
searchTerm: propsValue.searchTerm,
projectId: propsValue.projectId,
},
});
return res.data;
},
});

View File

@@ -0,0 +1,71 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const findNotebookOrComment = createAction({
name: 'find_notebook_or_comment',
displayName: 'Find Notebook / Notebook Comment',
description: 'Locate notebooks or note comments by search parameters.',
auth: teamworkAuth,
props: {
searchFor: Property.StaticDropdown({
displayName: 'Search For',
description: 'The type of item to search for.',
required: true,
options: {
options: [
{ label: 'Notebook', value: 'notebooks' },
{ label: 'Notebook Comment', value: 'notebookComments' },
],
},
}),
searchTerm: Property.ShortText({
displayName: 'Search Term',
description: 'The keyword to search for.',
required: true,
}),
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'Limit the search to a specific project.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
},
async run({ auth, propsValue }) {
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/search.json',
query: {
searchFor: propsValue.searchFor,
searchTerm: propsValue.searchTerm,
projectId: propsValue.projectId,
},
});
return res.data;
},
});

View File

@@ -0,0 +1,58 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const findTask = createAction({
name: 'find_task',
displayName: 'Find Task',
description: 'Search for tasks.',
auth: teamworkAuth,
props: {
searchTerm: Property.ShortText({
displayName: 'Search Term',
description: 'The keyword to search for.',
required: true,
}),
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'Limit the search to a specific project.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
},
async run({ auth, propsValue }) {
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/search.json',
query: {
searchFor: 'tasks',
searchTerm: propsValue.searchTerm,
projectId: propsValue.projectId,
},
});
return res.data;
},
});

View File

@@ -0,0 +1,52 @@
import { createAction, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const markTaskComplete = createAction({
name: 'mark_task_complete',
displayName: 'Mark Task Complete',
description: 'Set a tasks status to complete.',
auth: teamworkAuth,
props: {
taskId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Task',
description: 'The task to mark as complete.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/tasks.json',
query: {
includeCompletedTasks: 'false',
},
});
const options = res.data['todo-items'].map((task: { id: string; content: string }) => ({
label: task.content,
value: task.id,
}));
return {
disabled: false,
options,
};
},
}),
},
async run({ auth, propsValue }) {
return await teamworkRequest(auth, {
method: HttpMethod.PUT,
path: `/tasks/${propsValue.taskId}/complete.json`,
});
},
});

View File

@@ -0,0 +1,188 @@
import {
createAction,
Property,
PiecePropValueSchema,
AppConnectionValueForAuthProperty,
} from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { HttpMethod } from '@activepieces/pieces-common';
import { teamworkRequest } from '../common/client';
// Helper to fetch all tasks, handling pagination
async function getAllTasks(auth: AppConnectionValueForAuthProperty<typeof teamworkAuth>) {
let allTasks: any[] = [];
let page = 1;
let moreTasks = true;
while (moreTasks) {
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/tasks.json',
query: {
page: page.toString(),
pageSize: '250',
},
});
if (res.data['todo-items'] && res.data['todo-items'].length > 0) {
allTasks = allTasks.concat(res.data['todo-items']);
page++;
} else {
moreTasks = false;
}
}
return allTasks;
}
export const updateTask = createAction({
name: 'update_task',
displayName: 'Update Task',
description: 'Modify a tasks fields (due date, assignee, content, priority, etc.).',
auth: teamworkAuth,
props: {
taskId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Task',
description: 'The task to update.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const tasks = await getAllTasks(auth);
const options = tasks.map((task: { id: string; content: string }) => ({
label: task.content,
value: task.id,
}));
return {
disabled: false,
options,
};
},
}),
content: Property.ShortText({
displayName: 'Content',
description: 'The new content of the task.',
required: false,
}),
description: Property.LongText({
displayName: 'Description',
description: 'The new description for the task.',
required: false,
}),
'responsible-party-id': Property.MultiSelectDropdown({
auth: teamworkAuth,
displayName: 'Responsible Parties',
description: 'The new users responsible for the task.',
required: false,
refreshers: ['taskId'],
options: async ({ auth, taskId }) => {
if (!auth || !taskId) {
return {
disabled: true,
placeholder: 'Please select a task.',
options: [],
};
}
const taskRes = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: `/tasks/${taskId}.json`,
});
const projectId = taskRes.data['todo-item']['project-id'];
if (!projectId) return { disabled: true, placeholder: 'Could not determine project.', options: [] };
const peopleRes = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: `/projects/${projectId}/people.json`,
});
const options = peopleRes.data.people.map((p: { id: string; 'first-name': string; 'last-name': string }) => ({
label: `${p['first-name']} ${p['last-name']}`,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
'start-date': Property.DateTime({
displayName: 'Start Date',
description: 'The new start date of the task.',
required: false,
}),
'due-date': Property.DateTime({
displayName: 'Due Date',
description: 'The new due date of the task.',
required: false,
}),
priority: Property.StaticDropdown({
displayName: 'Priority',
description: 'The new priority of the task.',
required: false,
options: {
options: [
{ label: 'None', value: '' },
{ label: 'Low', value: 'low' },
{ label: 'Medium', value: 'medium' },
{ label: 'High', value: 'high' },
],
},
}),
tagIds: Property.MultiSelectDropdown({
auth: teamworkAuth,
displayName: 'Tags',
description: 'New tags to associate with the task.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/tags.json',
});
const options = res.data.tags.map((t: { id: string; name: string }) => ({
label: t.name,
value: t.id,
}));
return {
disabled: false,
options,
};
},
}),
},
async run({ auth, propsValue }) {
const formatDate = (date: string | undefined) => {
if (!date) return undefined;
return new Date(date).toISOString().slice(0, 10).replace(/-/g, '');
};
const body: any = { 'todo-item': {} };
const item = body['todo-item'];
if (propsValue.content) item.content = propsValue.content;
if (propsValue.description) item.description = propsValue.description;
if (propsValue['responsible-party-id']) item['responsible-party-id'] = propsValue['responsible-party-id'].join(',');
if (propsValue['start-date']) item['start-date'] = formatDate(propsValue['start-date']);
if (propsValue['due-date']) item['due-date'] = formatDate(propsValue['due-date']);
if (propsValue.priority) item.priority = propsValue.priority;
if (propsValue.tagIds) item.tagIds = propsValue.tagIds.join(',');
return await teamworkRequest(auth, {
method: HttpMethod.PUT,
path: `/tasks/${propsValue.taskId}.json`,
body,
});
},
});

View File

@@ -0,0 +1,129 @@
import {
createAction,
Property,
PiecePropValueSchema,
} from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
export const uploadFileToProject = createAction({
name: 'upload_file_to_project',
displayName: 'Upload File to Project',
description: 'Upload a file to a Teamwork project.',
auth: teamworkAuth,
props: {
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to upload the file to.',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects/api/v3/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
file: Property.File({
displayName: 'File',
description: 'The file to upload.',
required: true,
}),
description: Property.LongText({
displayName: 'Description',
description: 'A description for the file.',
required: false,
}),
categoryId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Category',
description: 'The category to assign the file to.',
required: false,
refreshers: ['projectId'],
options: async ({ auth, projectId }) => {
if (!auth || !projectId) {
return {
disabled: true,
placeholder: 'Please select a project.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: `/projects/api/v3/projects/${projectId}/filecategories.json`,
});
const options = res.data.filecategories.map((c: { id: string; name: string }) => ({
label: c.name,
value: c.id,
}));
return {
disabled: false,
options,
};
},
}),
private: Property.Checkbox({
displayName: 'Private',
description: 'Set to true to make the file private.',
required: false,
}),
},
async run({ auth, propsValue }) {
// Step 1: Get presigned URL
const presignedUrlRes = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects/api/v1/pendingfiles/presignedurl.json',
query: {
fileName: propsValue.file.filename,
fileSize: propsValue.file.data.length.toString(),
},
});
const { ref, url } = presignedUrlRes.data;
// Step 2: Upload file to S3
await httpClient.sendRequest({
method: HttpMethod.PUT,
url: url,
body: propsValue.file.data,
headers: {
'X-Amz-Acl': 'public-read',
'Content-Length': String(propsValue.file.data.length),
},
});
// Step 3: Finalize file upload
const body = {
file: {
pendingFileRef: ref,
description: propsValue.description,
'category-id': propsValue.categoryId,
private: propsValue.private ? 1 : 0,
},
};
return await teamworkRequest(auth, {
method: HttpMethod.POST,
path: `/projects/${propsValue.projectId}/files.json`,
body,
});
},
});

View File

@@ -0,0 +1,55 @@
import { PieceAuth, Property } from '@activepieces/pieces-framework';
import { AuthenticationType, HttpMethod, httpClient } from '@activepieces/pieces-common';
export const teamworkAuth = PieceAuth.CustomAuth({
description: `
Enter your Teamwork username (email address) and password.
`,
props: {
username: Property.ShortText({
displayName: 'Username',
description: 'Your Teamwork email address.',
required: true,
}),
password: PieceAuth.SecretText({
displayName: 'Password',
required: true,
}),
subdomain: Property.ShortText({
displayName: 'Subdomain',
description: 'Your Teamwork site subdomain (e.g., mycompany for mycompany.teamwork.com)',
required: true,
}),
},
validate: async ({ auth }) => {
try {
await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://${auth.subdomain}.teamwork.com/projects.json`,
authentication: {
type: AuthenticationType.BASIC,
username: auth.username,
password: auth.password,
},
});
return {
valid: true,
};
} catch (e) {
return {
valid: false,
error: 'Invalid username, password, or subdomain.',
};
}
},
required: true,
});
export type TeamworkAuth = {
access_token: string;
installation: {
apiEndPoint: string;
};
};

View File

@@ -0,0 +1,91 @@
import {
AuthenticationType,
httpClient,
HttpMethod,
QueryParams,
} from '@activepieces/pieces-common';
import { AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
import { teamworkAuth } from './auth';
const MAX_RETRIES = 5;
const INITIAL_DELAY_MS = 500;
export type TeamworkRequestOptions = {
method: HttpMethod;
path: string;
body?: unknown;
query?: QueryParams;
};
function buildUrl(base: string, path: string, query?: TeamworkRequestOptions['query']): string {
const url = new URL(path.startsWith('http') ? path : `${base}${path}`);
if (query) {
Object.entries(query)
.filter(([, v]) => v !== undefined)
.forEach(([k, v]) => url.searchParams.set(k, String(v)));
}
return url.toString();
}
async function sleep(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export async function teamworkRequest(
auth: AppConnectionValueForAuthProperty<typeof teamworkAuth>,
options: TeamworkRequestOptions,
) {
const base = `https://${auth.props.subdomain}.teamwork.com`;
const url = buildUrl(base, options.path, options.query);
let attempt = 0;
let delay = INITIAL_DELAY_MS;
let retrying = true;
while (retrying) {
try {
const res = await httpClient.sendRequest({
method: options.method,
url,
headers: { 'Content-Type': 'application/json' },
body: options.body,
authentication: {
type: AuthenticationType.BASIC,
username: auth.props.username,
password: auth.props.password,
},
});
return normalizeResponse(res.body);
} catch (e: any) {
const status: number | undefined = e?.response?.status;
if (status && (status === 429 || (status >= 500 && status < 600)) && attempt < MAX_RETRIES) {
const retryAfter = Number(e?.response?.headers?.['retry-after']);
await sleep(Number.isFinite(retryAfter) ? retryAfter * 1000 : delay);
attempt++;
delay = Math.min(delay * 2, 8000);
} else {
retrying = false;
throw e;
}
}
}
throw new Error('Teamwork request failed after multiple retries.');
}
export function normalizeResponse(data: any) {
if (!data || typeof data !== 'object') {
return { success: true, data };
}
// Common Teamwork entities include id and link
const id =
data.id ||
data.todoItemId ||
data.task?.id ||
data.company?.id ||
data.project?.id ||
data.message?.id ||
data.file?.id;
const url = data['link'] || data['url'] || data?.task?.link || data?.project?.link;
return { success: true, id, url, data };
}

View File

@@ -0,0 +1,78 @@
import { createTrigger, TriggerStrategy, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const newComment = createTrigger({
name: 'new_comment',
displayName: 'New Comment',
description: 'Fires when a new comment is posted.',
auth: teamworkAuth,
props: {
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to watch for new comments. If not specified, all projects will be watched.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const res = await teamworkRequest(context.auth, {
method: HttpMethod.POST,
path: '/webhooks.json',
body: {
webhook: {
event: 'COMMENT.CREATED',
url: context.webhookUrl,
version: 'v3',
},
},
});
await context.store.put('webhookId', res.data.id);
},
async onDisable(context) {
const webhookId = await context.store.get('webhookId');
if (webhookId) {
await teamworkRequest(context.auth, {
method: HttpMethod.DELETE,
path: `/webhooks/${webhookId}.json`,
});
}
},
async run(context) {
const payload = context.payload.body as any;
if (context.propsValue.projectId) {
if (String(payload?.comment?.projectId) === context.propsValue.projectId) {
return [payload];
}
return [];
}
return [payload];
},
sampleData: {},
});

View File

@@ -0,0 +1,78 @@
import { createTrigger, TriggerStrategy, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const newExpense = createTrigger({
name: 'new_expense',
displayName: 'New Expense',
description: 'Fires when a new expense entry is added.',
auth: teamworkAuth,
props: {
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to watch for new expenses. If not specified, all projects will be watched.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const res = await teamworkRequest(context.auth, {
method: HttpMethod.POST,
path: '/webhooks.json',
body: {
webhook: {
event: 'EXPENSE.CREATED',
url: context.webhookUrl,
version: 'v3',
},
},
});
await context.store.put('webhookId', res.data.id);
},
async onDisable(context) {
const webhookId = await context.store.get('webhookId');
if (webhookId) {
await teamworkRequest(context.auth, {
method: HttpMethod.DELETE,
path: `/webhooks/${webhookId}.json`,
});
}
},
async run(context) {
const payload = context.payload.body as any;
if (context.propsValue.projectId) {
if (String(payload?.expense?.projectId) === context.propsValue.projectId) {
return [payload];
}
return [];
}
return [payload];
},
sampleData: {},
});

View File

@@ -0,0 +1,78 @@
import { createTrigger, TriggerStrategy, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const newFile = createTrigger({
name: 'new_file',
displayName: 'New File',
description: 'Fires when a new file is added.',
auth: teamworkAuth,
props: {
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to watch for new files. If not specified, all projects will be watched.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const res = await teamworkRequest(context.auth, {
method: HttpMethod.POST,
path: '/webhooks.json',
body: {
webhook: {
event: 'FILE.CREATED',
url: context.webhookUrl,
version: 'v3',
},
},
});
await context.store.put('webhookId', res.data.id);
},
async onDisable(context) {
const webhookId = await context.store.get('webhookId');
if (webhookId) {
await teamworkRequest(context.auth, {
method: HttpMethod.DELETE,
path: `/webhooks/${webhookId}.json`,
});
}
},
async run(context) {
const payload = context.payload.body as any;
if (context.propsValue.projectId) {
if (String(payload?.file?.projectId) === context.propsValue.projectId) {
return [payload];
}
return [];
}
return [payload];
},
sampleData: {},
});

View File

@@ -0,0 +1,78 @@
import { createTrigger, TriggerStrategy, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const newInvoice = createTrigger({
name: 'new_invoice',
displayName: 'New Invoice',
description: 'Fires when a new invoice is created.',
auth: teamworkAuth,
props: {
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to watch for new invoices. If not specified, all projects will be watched.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const res = await teamworkRequest(context.auth, {
method: HttpMethod.POST,
path: '/webhooks.json',
body: {
webhook: {
event: 'INVOICE.CREATED',
url: context.webhookUrl,
version: 'v3',
},
},
});
await context.store.put('webhookId', res.data.id);
},
async onDisable(context) {
const webhookId = await context.store.get('webhookId');
if (webhookId) {
await teamworkRequest(context.auth, {
method: HttpMethod.DELETE,
path: `/webhooks/${webhookId}.json`,
});
}
},
async run(context) {
const payload = context.payload.body as any;
if (context.propsValue.projectId) {
if (String(payload?.invoice?.projectId) === context.propsValue.projectId) {
return [payload];
}
return [];
}
return [payload];
},
sampleData: {},
});

View File

@@ -0,0 +1,78 @@
import { createTrigger, TriggerStrategy, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const newMessage = createTrigger({
name: 'new_message',
displayName: 'New Message',
description: 'Fires when a new message is posted (in project messages or discussions).',
auth: teamworkAuth,
props: {
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to watch for new messages. If not specified, all projects will be watched.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const res = await teamworkRequest(context.auth, {
method: HttpMethod.POST,
path: '/webhooks.json',
body: {
webhook: {
event: 'MESSAGE.CREATED',
url: context.webhookUrl,
version: 'v3',
},
},
});
await context.store.put('webhookId', res.data.id);
},
async onDisable(context) {
const webhookId = await context.store.get('webhookId');
if (webhookId) {
await teamworkRequest(context.auth, {
method: HttpMethod.DELETE,
path: `/webhooks/${webhookId}.json`,
});
}
},
async run(context) {
const payload = context.payload.body as any;
if (context.propsValue.projectId) {
if (String(payload?.message?.projectId) === context.propsValue.projectId) {
return [payload];
}
return [];
}
return [payload];
},
sampleData: {},
});

View File

@@ -0,0 +1,43 @@
import { createTrigger, TriggerStrategy, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const newPerson = createTrigger({
name: 'new_person',
displayName: 'New Person',
description: 'Fires when a new person (user/contact) is added.',
auth: teamworkAuth,
props: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const res = await teamworkRequest(context.auth, {
method: HttpMethod.POST,
path: '/webhooks.json',
body: {
webhook: {
event: 'USER.CREATED',
url: context.webhookUrl,
version: 'v3',
},
},
});
await context.store.put('webhookId', res.data.id);
},
async onDisable(context) {
const webhookId = await context.store.get('webhookId');
if (webhookId) {
await teamworkRequest(context.auth, {
method: HttpMethod.DELETE,
path: `/webhooks/${webhookId}.json`,
});
}
},
async run(context) {
const payload = context.payload.body;
return [payload];
},
sampleData: {},
});

View File

@@ -0,0 +1,78 @@
import { createTrigger, TriggerStrategy, Property, PiecePropValueSchema } from '@activepieces/pieces-framework';
import { teamworkAuth } from '../common/auth';
import { teamworkRequest } from '../common/client';
import { HttpMethod } from '@activepieces/pieces-common';
export const newTask = createTrigger({
name: 'new_task',
displayName: 'New Task',
description: 'Fires when a task is created.',
auth: teamworkAuth,
props: {
projectId: Property.Dropdown({
auth: teamworkAuth,
displayName: 'Project',
description: 'The project to watch for new tasks. If not specified, all projects will be watched.',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first.',
options: [],
};
}
const res = await teamworkRequest(auth, {
method: HttpMethod.GET,
path: '/projects.json',
});
const options = res.data.projects.map((p: { id: string; name: string }) => ({
label: p.name,
value: p.id,
}));
return {
disabled: false,
options,
};
},
}),
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
const res = await teamworkRequest(context.auth, {
method: HttpMethod.POST,
path: '/webhooks.json',
body: {
webhook: {
event: 'TASK.CREATED',
url: context.webhookUrl,
version: 'v3',
},
},
});
await context.store.put('webhookId', res.data.id);
},
async onDisable(context) {
const webhookId = await context.store.get('webhookId');
if (webhookId) {
await teamworkRequest(context.auth, {
method: HttpMethod.DELETE,
path: `/webhooks/${webhookId}.json`,
});
}
},
async run(context) {
const payload = context.payload.body as any;
if (context.propsValue.projectId) {
if (String(payload?.task?.projectId) === context.propsValue.projectId) {
return [payload];
}
return [];
}
return [payload];
},
sampleData: {},
});