Add Activepieces integration for workflow automation
- Add Activepieces fork with SmoothSchedule custom piece - Create integrations app with Activepieces service layer - Add embed token endpoint for iframe integration - Create Automations page with embedded workflow builder - Add sidebar visibility fix for embed mode - Add list inactive customers endpoint to Public API - Include SmoothSchedule triggers: event created/updated/cancelled - Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,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 task’s 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 task’s 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."
|
||||
}
|
||||
@@ -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 task’s 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 task’s 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."
|
||||
}
|
||||
@@ -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 task’s 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 task’s 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."
|
||||
}
|
||||
@@ -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 task’s status to complete.": "タスクの状態を設定して完了します。",
|
||||
"Create a new company in Teamwork.": "Teamwork で新しい会社を作成します。",
|
||||
"Create a new user/contact (name, email, invite options).": "新しいユーザー/連絡先(名前、メールアドレス、招待オプション)を作成します。",
|
||||
"Modify a task’s 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.": "新しい請求書を監視するプロジェクト。指定しない場合は、すべてのプロジェクトが監視されます。"
|
||||
}
|
||||
@@ -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 task’s 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 task’s 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."
|
||||
}
|
||||
@@ -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 task’s 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 task’s 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."
|
||||
}
|
||||
@@ -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 task’s status to complete.": "Set a task’s 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 task’s fields (due date, assignee, content, priority, etc.).": "Modify a task’s 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."
|
||||
}
|
||||
@@ -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 task’s status to complete.": "Set a task’s 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 task’s fields (due date, assignee, content, priority, etc.).": "Modify a task’s 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."
|
||||
}
|
||||
@@ -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],
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
@@ -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 task’s 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`,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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 task’s 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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -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 };
|
||||
}
|
||||
|
||||
|
||||
@@ -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: {},
|
||||
});
|
||||
|
||||
|
||||
@@ -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: {},
|
||||
});
|
||||
|
||||
|
||||
@@ -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: {},
|
||||
});
|
||||
|
||||
|
||||
@@ -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: {},
|
||||
});
|
||||
|
||||
|
||||
@@ -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: {},
|
||||
});
|
||||
|
||||
|
||||
@@ -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: {},
|
||||
});
|
||||
|
||||
|
||||
@@ -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: {},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user