- Alle Zeiteinträge auflisten
- Alle Zeiteinträge eines Tages auflisten
- Zeiteinträge gruppieren
- Einzelnen Zeiteintrag anzeigen
- Einen Zeiteintrag erstellen
- Einen Zeiteintrag bearbeiten
- Einen Zeiteintrag löschen
- Abgeschlossene Zeiteinträge
Bitte beachten: Ein Benutzer mit der Rolle Zeiterfasser hat nur Zugriff auf seine eigenen Zeiteinträge. Nur Administratoren können die Einträge anderer Nutzer modifizieren, löschen und für diese auch neue erstellen.
Alle Zeiteinträge auflisten
Listet alle Zeiteinträge aller Benutzer absteigend sortiert nach dem Datum (date_at) auf. Ein Zeiterfasser hat hingegen nur Zugriff auf die eigenen Zeiteinträge.
GET /time_entries.xml
GET /time_entries.json
Parameter
user_id | Filtere die Liste nach dem Benutzer. Erlaubt sind eine einzelne ID, current für den angemeldeten Benutzer sowie mehrere durch Komma getrennte IDs. |
customer_id | Filtere die Liste nach dem Kunden. Erlaubt sind eine einzelne ID sowie mehrere durch Komma getrennte IDs. |
project_id | Filtere die Liste nach dem Projekt. Erlaubt sind eine einzelne ID sowie mehrere durch Komma getrennte IDs. |
service_id | Filtere die Liste nach der Leistung. Erlaubt sind eine einzelne ID sowie mehrere durch Komma getrennte IDs. |
note | Freitextsuche in der Bemerkung. Um nach mehreren mit ODER verknüpften Kriterien zu filtern, gib den Parameter als note[] mehrfach an. |
at | Datum des Zeiteintrages today, yesterday, this_week, last_week, this_month, last_month, this_year, last_year oder Datum im Format YYYY-MM-DD |
from,to | Zeiteinträge innerhalb der Zeitspanne – beide im gleichen Format wie at |
billable | Ist der Zeiteintrag verrechenbar oder nicht? true oder false |
locked | Ist der Zeiteintrag bereits abgeschlossen? true oder false |
tracking | Läuft auf dem Zeiteintrag eine Stoppuhr? true oder false |
sort | Erlaubt die Einträge sortiert auszugeben. Möglich sind date, user, customer, project, service, note, minutes und revenue. Default: date |
direction | Die Richtung der Sortierung. Möglich sind asc oder desc. Default: hängt von sort ab: bei date, minutes und revenue ist es desc, sonst asc. |
group_by | Erlaubt die Einträge gruppiert auszugeben. Details |
limit | Mit dem Parameter limit ist es möglich, die maximale Anzahl der ausgegebenen Einträge zu begrenzen. Default: unbegrenzt |
page | In Kombination mit dem Parameter limit können Folgeseiten ausgegeben werden. Default: 1 |
Antwort
[ { "time_entry": {...} }, { "time_entry": {...} } ]
<?xml version="1.0" encoding="UTF-8"?> <time-entries type="array"> <time-entry> ... </time-entry> <time-entry> ... </time-entry> </time_entries>
Alle Zeiteinträge eines Tages auflisten
Listet alle Zeiteinträge des aktuellen Benutzers am heutigen Tag auf.
GET /daily.xml
GET /daily.json
Was einfach ein Alias für die längere Variante mit Parametern ist:
GET /time_entries.xml?user_id=current&at=today
GET /time_entries.json?user_id=current&at=today
Listet alle Zeiteinträge des aktuellen Benutzers am 7. Februar 2015 auf.
GET /daily/2015/2/7.xml
GET /daily/2015/2/7.json
Was wiederum das gleiche Ergebnis liefert wie:
GET /time_entries.xml?user_id=current&at=2015-02-07
GET /time_entries.json?user_id=current&at=2015-02-07
Zeiteinträge gruppieren
Mit dem Parameter group_by können Zeiteinträge gruppiert werden. Mögliche Gruppierungen sind user, customer, project, service, day, week, month und year.
Beispiel
GET /time_entries.xml?group_by=user
GET /time_entries.json?group_by=user
Antwort
[ { "time_entry_group": { "minutes": 10733, "revenue": 91568.333333333, "user_id": 26144, "user_name": "August Ausgedacht", "from": "2014-05-03", "to": "2014-09-23", "time_entries_params": { "user_id": 26144 } } }, { "time_entry_group": { "minutes": 57289, "revenue": 788439.3666668, "user_id": 246, "user_name": "Jette Jemand", "from": "2013-04-19", "to": "2015-08-19", "time_entries_params": { "user_id": 246 } } } ]
<?xml version="1.0" encoding="UTF-8"?> <time-entry-groups type="array"> <time-entry-group> <minutes type="integer">10733</minutes> <revenue type="float">91568.3333333334</revenue> <user-id type="integer">26144</user-id> <user-name>August Ausgedacht</user-name> <from type="date">2014-05-03</from> <to type="date">2014-09-23</to> <time-entries-params> <user-id>26144</user-id> </time-entries-params> </time-entry-group> <time-entry-group> <minutes type="integer">57289</minutes> <revenue type="float">788439.36666681</revenue> <user-id type="integer">246</user-id> <user-name>Jette Jemand</user-name> <from type="date">2013-04-19</from> <to type="date">2015-08-19</to> <time-entries-params> <user-id>246</user-id> </time-entries-params> </time-entry-group> <time-entry-groups type="array">
Die Antwort enthält neben den Summen der Arbeitszeit und des Umsatzes die gemeinsamen Werte der Gruppe, beispielsweise die user_id und den user_name, wenn wie in unserem Beispiel nach dem Benutzer gruppiert wurde. Zusätzlich werden unter time_entries_params alle Parameter zum Aufruf der einzelnen Zeiteinträge der Gruppe aufgelistet.
Mehrere Werte können mit Komma getrennt miteinander kombiniert werden. Die Reihenfolge entscheidet dabei über die Sortierung der Ergebnisse.
Um beispielsweise die letzte Woche jedes Nutzers als Gruppe zu erhalten:
GET /time_entries.xml?group_by=user,week&at=last_week
GET /time_entries.json?group_by=user,week&at=last_week
Oder für die einzelnen Monate aller Projekte eines Kunden:
GET /time_entries.xml?group_by=project,month&customer_id=123
GET /time_entries.json?group_by=project,month&customer_id=123
Einzelnen Zeinteintrag anzeigen
Gibt einen einzelnen Zeiteintrag zurück. Dieser kann einem beliebigen Benutzer des Accounts gehören, solange der aktuelle Benutzer kein Zeiterfasser ist.
GET /time_entries/:id.xml
GET /time_entries/:id.json
Antwort
{ "time_entry": { "id": 36159117, "minutes": 15, "date_at": "2015-10-16", "note": "Feedback einarbeiten", "billable": true, "locked": false, "revenue": null, "hourly_rate": 0, "user_id": 211, "user_name": "Fridolin Frei", "project_id": 88309, "project_name": "API v2", "customer_id": 3213, "customer_name": "König", "service_id": 12984, "service_name": "Entwurf", "created_at": "2015-10-16T12:39:00+02:00", "updated_at": "2015-10-16T12:39:00+02:00" } }
<?xml version="1.0" encoding="UTF-8"?> <time-entry> <id type="integer">36159117</id> <date-at type="date">2015-10-16</date-at> <minutes type="integer">15</minutes> <revenue type="float" nil="true"></revenue> <hourly-rate type="integer">0</hourly-rate> <billable type="boolean">true</billable> <note></note> <user-id type="integer">211</user-id> <user-name>Fridolin Frei</user-name> <project-id type="integer">88309</project-id> <project-name>API v2</project-name> <service-id type="integer">12984</service-id> <service-name>Entwurf</service-name> <customer-id type="integer">3213</customer-id> <customer-name>König</customer-name> <locked type="boolean">false</locked> <created-at type="datetime">2015-10-16T12:39:00+02:00</created-at> <updated-at type="datetime">2015-10-16T12:39:00+02:00</updated-at> </time-entry>
Läuft auf dem angeforderten Zeiteintrag die Stoppuhr, wird zusätzlich ausgegeben, seit wann diese läuft und wie viele Minuten akkumuliert auf dem Zeiteintrag gestoppt wurden (gemessene + bereits vorhandene Minuten).
{ "time_entry": { ... "tracking": { "since": "2015-10-16T12:44:17+02:00", "minutes": 12 } } }
<?xml version="1.0" encoding="UTF-8"?> <time-entry> ... <tracking> <since type="datetime">2015-01-22T14:58:13+01:00</since> <minutes type="integer">12</minutes> </tracking> </time-entry>
Einen Zeiteintrag erstellen
Erstellt einen neuen Zeiteintrag. Alle Attribute sind optional.
POST /time_entries.xml
POST /time_entries.json
Attribute
date_at | Datum des Zeiteintrages im Format YYYY-MM-DD. Default: Heute |
minutes | Default: 0 |
note | Default: "" (leerer String) |
user_id | Kann nur von Administratoren gesetzt werden. Default: ID des aktuellen Benutzers |
project_id | Default: null (keinem Projekt zugeordnet) |
service_id | Default: null (keiner Leistung zugeordnet) |
locked | Kann nur von Administratoren gesetzt werden. Ein abgeschlossener Zeiteintrag kann nicht mehr bearbeitet oder gelöscht werden. Details false (Default) oder true |
Anfrage
{ "time_entry": { "date_at": "2015-9-15", "minutes": 185, "service_id": 243 } }
<time-entry> <date-at>2015-9-12</date-at> <minutes>185</minutes> <service-id>243</service-id> </time-entry>
Antwort
Location: https://demo.mite.de/time_entries/52324.json
{ "time_entry": { "id": 52324, "minutes": 185, "date_at": "2015-9-12", "note": "", "billable": true, "locked": false, "revenue": null, "hourly_rate": 0, "user_id": 211, "user_name": "Fridolin Frei", "project_id": null, "service_id": 243, "service_name": "Dokumentation", "created_at": "2015-09-13T18:54:45+02:00", "updated_at": "2015-09-13T18:54:45+02:00" } }
Location: https://demo.mite.de/time_entries/52324.xml
<?xml version="1.0" encoding="UTF-8"?> <time-entry> <id type="integer">52324</id> <date-at type="date">2015-9-12</date-at> <minutes type="integer">185</minutes> <revenue type="float" nil="true"></revenue> <hourly-rate type="integer">0</hourly-rate> <billable type="boolean">true</billable> <note></note> <user-id type="integer">211</user-id> <user-name>Fridolin Fremd</user-name> <project-id type="integer" nil="true"/> <service-id type="integer">243</service-id> <service-name>Dokumentation</service-name> <locked type="boolean">false</locked> <created-at type="datetime">2015-09-13T18:54:45+02:00</created-at> <updated-at type="datetime">2015-09-13T18:54:45+02:00</updated-at> </time-entry>
Einen Zeiteintrag bearbeiten
Aktualisiere einen Zeiteintrag mit den übergebenen Attributen. Nur Administratoren können auch Einträge anderer Benutzer bearbeiten; alle anderen nur die eigenen.
PATCH /time_entries/:id.xml
PATCH /time_entries/:id.json
{ "time_entry": { "minutes": 120, "service_id": 3124 } }
<time-entry> <minutes>120</minutes> <service-id>3124</service-id> </time-entry>
Antwort
{leer}
Einen Zeiteintrag löschen
Lösche einen Zeiteintrag:
DELETE /time_entries/:id.xml
DELETE /time_entries/:id.json
Antwort
{leer}
Auch beim Löschen gilt: Nur Administratoren können auch Einträge anderer Benutzer löschen; alle anderen nur die eigenen. Der Versuch beispielsweise als Standard-Nutzer einen Zeiteintrag eines anderen Nutzers zu löschen gibt daher ein 404 Not Found zurück.
Abgeschlossene Zeiteinträge
Wenn ein Administrator das Attribut locked eines Zeiteintrages auf true gesetzt hat, gilt dieser als abgeschlossen und kann von niemandem mehr bearbeitet oder gelöscht werden. Der Versuch einen Eintrag dennoch zu ändern gibt folgenden Fehler zurück:
{ "error": "Der Zeiteintrag wurde als abgeschlossen markiert und kann daher nicht bearbeitet werden." }
<?xml version="1.0" encoding="UTF-8"?> <errors> <error>Der Zeiteintrag wurde als abgeschlossen markiert und kann daher nicht bearbeitet werden.</error> </errors>}
Genauso beim Versuch einen abgeschlossenen Zeiteintrag zu löschen:
{ "error": "Der Zeiteintrag wurde als abgeschlossen markiert und kann daher nicht gelöscht werden." }
<?xml version="1.0" encoding="UTF-8"?> <errors> <error>Der Zeiteintrag wurde als abgeschlossen markiert und kann daher nicht gelöscht werden.</error> </errors>}
Administratoren können dies mit dem Attribut force jedoch umgehen und damit beispielsweise locked wieder auf false setzen:
PATCH /time_entries/:id.xml
PATCH /time_entries/:id.json
{ "time_entry": { "force": true, "locked": false } }
<time-entry> <force>true</force> <locked>false</locked> </time-entry>
Antwort
{leer}
Oder den Eintrag löschen:
DELETE /time_entries/:id.xml
DELETE /time_entries/:id.json
{ "time_entry": { "force": true } }
<time-entry> <force>true</force> </time-entry>
Antwort
{leer}