Tempora API
Tempora API è una API di tipo REST che permette di accedere ai dati di Tempora da codice di programmazione, script o applicazioni.
L’API scambia dati in formato JSON
con codifica UTF-8
.
Richieste e risposte si intendono tutte in formato JSON. Eventuali eccezioni sono indicate ove opportuno.
Risorse disponibili
Tempora API copre attualmente un nucleo di risorse fondamentali di Tempora in sola lettura.
Progressivamente verrà reso accessibile un numero più ampio di dati, anche in modifica, seguendo le esigenze espresse dagli utenti di Tempora interessati all’utilizzo delle API.
Utilizi comuni
Gli utilizzi più comuni di una API includono:
-
Esecuzione di operazioni ripetitive
-
Aggiornamento automatico di certe informazioni
-
Sincronizzazione dei dati con quelli di un software esterno
-
Generazione di report
-
Creazione di nuove funzionalità
-
Personalizzazioni del flusso di lavoro (workflow)
Autenticazione - OAuth 2.0
Tempora API supporta il metodo di autenticazione OAuth 2.0.
Il procedimento per l’abilitazione e l’autenticazione alle API comprende questi passaggi, illustrati nei paragrafi successivi:
-
Registrazione di una Applicazione API in Tempora e rilascio delle credenziali
-
Utilizzo delle credenziali per ottenere un token temporaneo di autenticazione
-
Utilizzo del token per accedere alle API
Registrare un’Applicazione API
I seguenti paragrafi illustrano i passaggi necessari a registrare un’Applicazione API, configurarne le autorizzazioni e ottenere le credenziali di accesso.
Applicazione API
In Tempora, dalle funzioni di amministrazione, aprire la pagina delle Applicazioni API. Creare una nuova Applicazione API e fornire un nome descrittivo.
Impostarne le autorizzazioni di accesso, tenendo presente che, per ragioni di sicurezza, è sempre bene limitare le autorizzazioni allo stretto necessario. In ogni caso è sempre possibile ampliarle in un momento successivo. Se opportuno, definire più applicazioni API, ognuna con le autorizzazioni minime necessarie alle operazioni da eseguire.
Se, ad esempio, si vogliono utilizzare le credenziali di accesso sia per uno script che per un’applicazione web, è consigliabile definire due diverse applicazioni API, ognuna con le autorizzazioni essenziali alle operazioni da eseguire. Oltre che dal punto di vista della sicurezza, è opportuno farlo anche per semplificare la diagnosi di possibili problemi. Infatti, in caso di problemi, il servizio di supporto sarà in grado di individuare quali operazioni sono state eseguite da quale Applicazione API.
Restrizioni e Autorizzazioni
È possibile limitare l’accesso dell’Applicazione API a uno specifico gruppo di aziende. In caso contrario l’impostazione predefinita autorizza l’accesso a tutte le aziende del dominio.
Le autorizzazioni richiedono di specificare quali risorse sono accessibili e se l’accesso è in lettura o in scrittura. Accesso in lettura e scrittura sono indipendenti: questo vuol dire che l’accesso in scrittura non implica l’accesso in lettura. Esempio: se si fornisce l’accesso in scrittura, ma non in lettura, alle timbrature, sarà possibile usare le API per registrare una nuova timbratura, ma non per leggere le timbrature esistenti.
Le autorizzazioni sono indicate secondo il formato nome_risorsa:accesso
.
Il nome della risorsa è anche detto “scope” perché individua un ambito di accesso.
Ad esempio clockings:read
individua la risorsa “timbrature” (clockings) e il livello di accesso “lettura” (read), mentre clockings:write
individua il livello di accesso scrittura (write). Per fornire accesso in lettura e scrittura sulle timbrature bisognerà selezionare clockings:read
e clockings:write
.
Non per tutte le risorse sono disponibili sia il livello di accesso in lettura che in scrittura.
Applicazione nuove autorizzazioni
Le modifiche alle autorizzazioni potrebbero non venire rilevate immediatamente dalla API, perché, per ragioni di efficienza, le autorizzazioni vengono memorizzate in una cache e rilette dopo un certo intervallo di tempo.
Per assicurarsi che le nuove autorizzazioni vengano rilevate immediatamente si può inviare una richiesta alla risorsa /auth/refreshrequests
. Per dettagli consultare la documentazione corrispondente.
Credenziali di accesso
Le credenziali di accesso sono disponibili nella finestra di registrazione dell’Applicazione API.
Le credenziali sono composte da un ClientId
, un nome utente che identifica l’applicazione, e da un ClientSecret
, una password.
Attenzione
ClientId
e ClientSecret
forniscono l’accesso ai vostri dati, in lettura o scrittura, secondo quanto configurato nell’Applicazione API registrata in Tempora. Devono perciò essere usati con tutta la cautela necessaria: non devono essere condivisi ne inclusi in codice caricato lato client (ad es. in un browser) e non devono essere accessibili a personale non autorizzato.
Ogni danno derivante dall’utilizzo non corretto di questi dati di accesso (es. sottrazione o perdita di dati) è responsabilità esclusiva del cliente.
Autenticazione - Bearer token
Le credenziali (ClientId e ClientSecret) non vengono usate direttamente per autorizzare le richieste inviate alle API. Vengono invece usate per ottenere un token (una chiave) che deve essere utilizzato per autorizzare le richieste.
Il token così rilasciato ha una validità temporanea di 48 ore. Entro questo periodo di tempo è necessario richiedere un nuovo token di autenticazione. Il nuovo token può essere richiesto anche prima della scadenza del token in uso.
Il token che viene rilasciato è in formato JWT - JSON Web Token.
Viene chiamato “bearer” (al portatore) perché ogni richiesta inviata alle API deve essere accompagnata un token di autenticazione (valido).
Ottenere il Bearer token
Per ottenere il token di autenticazione inoltrare una richiesta all’endpoint di autenticazione (vedi i messaggi nella sezione Autenticazione).
Autorizzare le richieste
Tutte le richieste inviata alle API, tranne quelle dirette all’endpoint di autenticazione, devono essere accompagnate da un token valido. Il token deve essere indicato nell’intestazione della richiesta nel modo seguente:
Authorization: bearer {token}
dove {token} è il token ottenuto in precedenza.
Limitazioni
Per garantire l’efficienza del servizio e la disponibilità per tutti i clienti, l’utilizzo delle Tempora API è sottoposto a limiti di utilizzo.
Il numero massimo di richieste che è possibile inviare è di 100 ogni 60 secondi
.
Questo livello di risposta non è garantito e dipende dal carico dei server. Questo vuol dire che il limite massimo è questo, ma non è sicuro che i server siano in ogni momento in grado di supportare un carico di questo numero di richieste nel tempo indicato.
Una volta superato tale limite, le successive richieste non verranno elaborate e verrà restituito un errore HTTP 429
e un header Retry-After
con l’indicazione del tempo, espresso in secondi, dopo il quale sarà di nuovo possibile inviare richieste al server.
Il tipo di limitazione può essere soggetta a revisione, in base a valutazioni legate all’efficienza del sistema. Se si dovessere ricevere l’errore HTTP 429
in modo inaspettato, tornare prima di tutto a verificare eventuali variazioni nelle limitazioni indicate in questo paragrafo.
Informazioni sullo stato attuale di erosione delle limitazioni vengono fornite nelle intestazioni delle risposte HTTP, nel modo seguente:
X-Rate-Limit-Limit: 60s
Indica l’intervallo di tempo a cui si riferisce il limite. In questo caso 60 secondi.
X-Rate-Limit-Remaining: 99
Indica il numero di richieste che è ancora possibile fare prima di raggiungere il limite.
X-Rate-Limit-Reset: 2018-01-18T11:44:13.8466754Z
Indica il momento in cui il limite verrà reimpostato (cioè trascorso il tempo indicato da X-Rate-Limit-Limit)
Intestazioni delle richieste
L’unica intestazione obbligatoria per tutte le richieste (tranne quella per la generazione del token di autenticazione) è quella che indica il token per l’autorizzazione della richiesta:
Authorization: bearer {token}
Altre intestazioni sono opzionali, perché se omesse vengono usati i valori predefiniti, o perché al momento non sono disponibili valori differenti:
Content-Type: application/json
Accept: application/json
Errori e codici di stato
Le risposte includono sempre un codice di stato HTTP. A volte una richiesta inviata alla API può non essere elaborata correttamente. In questi casi la riposta conterrà un codice di stato HTTP che permette di identificare il problema.
In linea generale, ai fini di queste API, sono rilevanti tre classi di codici di stato. Classe 2xx - indica la corretta elaborazione della richiesta Classe 4xx - indica un problema con la richiesta dovuto alla richiesta stessa Classe 5xx - indica un problema causato da un errore imprevisto del server
Quello che segue è un elenco dei codici di stato più comuni.
Codice | Significato | Descrizione |
---|---|---|
200 | OK | La richiesta è stata elaborata correttamente |
201 | Created | La richiesta è stata elaborata correttamente e una nuova risorsa è stata creata |
204 | No Content | La richiesta è stata elaborata e la risposta non include dati da elaborare |
400 | Bad Request | La richiesta non era valida |
401 | Unauthorized | La richiesta è stata ignorata perché il richiedente non è autenticato |
403 | Forbidden | Autorizzazione negata per l’operazione richiesta |
404 | Not Found | La richiesta faceva riferimento a una risorsa che non esiste |
409 | Conflict | Si è cercato di creare una risorsa che esiste già |
422 | Unprocessable entity | La convalida dei dati ha dato esito negativo |
500 | Internal Server Error | Un errore imprevisto del server ha impedito la corretta elaborazione della richiesta |
Paginazione dei dati
Tutte le risorse restituiscono risultati paginati.
Questo è necessario per permettere di richiedere e ottenere i dati in modo rapido ed efficiente, soprattutto con riguardo alle collezioni di risorse molto numerose come, ad esempio, quella delle timbrature.
Le risposte ottenute da richieste inoltrate a una risorsa paginata contengono un’intestazione X-Pagination che contiene le informazioni necessarie a procedere attraverso le pagine dei dati.
Ad esempio, se si invia una richiesta a una risorsa paginata senza fornire informazioni sulla pagina di dati richiesti, verrà restituita la prima pagina di dati e l’intestazione X-Pagination conterrà dei valori simili ai seguenti:
{
"TotalCount":91,
"PageSize":20,
"CurrentPage":1,
"TotalPages":5,
"PreviousPageLink":"https://temporasystem.com/api/companiesgroups/1/basevoices?pageNumber=0&pageSize=20",
"NextPageLink":"https://temporasystem.com/api/companiesgroups/1/basevoices?pageNumber=2&pageSize=20"
}
TotalCount: indica il numero totale di elementi presenti nella risorsa. In questo caso 91 basevoices (causali).
PageSize: è la dimensione attuale della pagina dati. In questo caso 20 elementi.
CurrentPage: è la pagina che è stata restituita.
TotalPages: è il numero totale di pagine dati disponibili.
PreviousPageLink e NextPageLink: contengono rispettivamente l’URL che punta alla pagina precedente e successiva a quella corrente (se non è disponibile una delle due - ad esempio perché la pagina corrente è la prima e non esiste una pagina precedente - contengono l’URL alla pagina corrente).
Per richiedere una specifica pagina dati utilizzare i seguenti argomenti da aggiungere nell’URL della richiesta:
pageSize: permette di personalizzare la dimensione della pagina dati. Il valore massimo è 1000.
pageNumber: è la pagina dati da restituire.
Condizioni filtro
Esistono due meccanismi per filtrare gli elementi di una risorsa.
Alcune risorse accettano argomenti aggiuntivi che possono essere indicati nell’URL. Per sapere se una risorsa espone questo tipo di argomenti consultare la sua documentazione.
Se ad esempio una risorsa accetta gli argomenti fromDate
e toDate
, sarà possibile utilizzarli per indicare che si vogliono ottenere gli elementi inclusi in un certo intervallo di tempo, nel modo seguente:
/nome-risorsa/?fromDate=2017-01-01&toDate=2017-01-30
Più in generale tutte le risorse supportano un meccanismo generico di condizioni filtro.
Per filtrare i risultati aggiungere all’URL della richiesta un’espressione con il seguente formato:
filter=({nome-proprieta} {operatore} {valore})
Gli operatori utilizzabili sono i seguenti:
Operatore | Significato | Descrizione |
---|---|---|
eq | Equal | I due termini sono uguali |
ne | Not equal | I due termini sono differenti |
gt | Greater than | Il primo termine è più grande del secondo |
ge | Greater or equal than | Il primo termine è più grande o uguale al secondo |
lt | Lesser than | Il primo termine è più piccolo del secondo |
le | Lesser or equal than | Il primo termine è più piccolo o uguale al secondo |
contains(…) | Contains | Applicato a proprietà di tipo testo: proprieta.contains(‘x’) |
startsWith(…) | Starts with | Applicato a proprietà di tipo testo: proprieta.startsWith(‘prefix’) |
endsWith(…) | Ends with | Applicato a proprietà di tipo testo: proprieta. endsWith(‘suffiix’) |
Alcuni esempi di filtro:
filter=(computingType eq 'AsHours')
filter=(badge eq '123456')
filter=(badge.contains('123'))
filter=(idClockingCausal gt 100)
filter=(souceDateTimeClocking gt '2018-01-01T08:00:00')
filter=(lastName gt 'g')
Data e ora nei filtri
Nei filtri si usa lo stesso formato di data e ora usato nel resto di queste API ma, oltre al formato “completo” 2018-01-01T08:00:00
, per brevità si possono usare anche i seguenti due formati:
2018-01-01 (sola data)
2018-01-01T08:00 (con l'ora ma omettendo i secondi)
Valori di enumerazione nei filtri
Alcune proprietà delle entità restituite dalla API possono avere solo alcuni valori. Questi valori sono definiti da alcune costanti. L’insieme delle costanti applicabili a una certa proprietà definiscono una enumerazione.
Un esempio di enumerazione è dato dai valori della proprietà SourceDirection
dell’entità Clocking
, che descrivono la direzione di entrata o uscita della timbratura come è stata registrata. I valori disponibili, cioè i valori dell’enumerazione, sono tre: In
, Out
, Undefined
.
Se si vogliono usare questi valori nei filtri bisogna indicarli all’interno di apici semplici, in questo modo: filter=(sourceDirection eq 'Out')
, per ottenere solo le timbrature con direzione di uscita.
Ordinamento dei dati
È possibile, e può anche diventare necessario, indicare l’ordine in cui restituire gli elementi di una risorsa. In particolare diventa necessario in relazione alla paginazione dei risultati.
Per indicare l’ordine aggiungere un’espressione del tipo seguente all’URL:
orderBy={order-expression1},{order-expression2},{order-expressionN}
Dove {order-expression}
è il nome di una proprietà semplice, oppure prefissato con i segni +
e -
per indicarne rispettivamente l’ordine crescente e o descrescente.
Esempi:
orderBy=description (equivalente a: orderBy=+description)
orderBy=-description (ordinamento decrescente)
Dati da restituire
Per ragioni di efficiente è possibile specificare quali dati restituire degli elementi di una risorsa. Certe risorse dispongono di molti dati (ad esempio i dipendenti), ma per l’elaborazione da eseguire potrebbero servirne molto pochi. In tal caso è conveniente istruire il server a restituire solo i campi necessari.
Per farlo aggiungere un’espressione del tipo seguente all’URL:
fields=fieldName1,fieldName2,fieldNameN
Ad esempio:
fields=id,code,description
Formato delle date
Il formato normalmente utilizzato per le informazioni di data e ora è ISO-8601
, in particolare nella seguente versione “completa”:
Alcuni esempi di valori di data e ora:
2016-06-06T04:05:05
- Una data e ora senza indicazione di fuso orario.
2018-02-20T10:26:16Z
- Una data e ora in tempo UTC
Autenticazione ¶
Bearer Token ¶
Ottenere il tokenPOST/token
clientId
e clientSecret
sono le credenziali, mentre granttype
deve essere sempre uguale a client_credentials
. La risposta contiene il token e la data/ora di termine validità.
Example URI
with body
Headers
Content-Type: application/json
Body
{
"clientId": "20051c7f098214832f3b37291401",
"clientSecret": "A9t7aygLM7iThfAH2yOMvDka6XKp1koM+5/Y29ga6pA=",
"granttype": "client_credentials"
}
200
Body
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVC....",
"expiration": "2018-02-20T10:26:16Z"
}
Autorizzazioni: richiesta aggiornamento ¶
Richieste aggiornamento autorizzazioniPOST/auth/refreshrequests
Se si sono appena modificate le autorizzazioni assegnate a una Applicazione API, perché le nuove autorizzazioni siano immediatamente riconosciute, bisogna inviare una richiesta di aggiornamento autorizzazioni. In questo modo la cache delle autorizzazioni viene rimossa e le nuove autorizzazioni verranno immediatamente caricate.
Example URI
Richiesta aggiornamento autorizzazioni.
Body
{}
200
Dominio ¶
Il dominio
rappresenta la raccolta di tutte le informazioni gestite da Tempora per il cliente.
Il dominio è identificato da un nome.
All’interno del dominio sono definiti i gruppi di aziende e le singole aziende.
Il dominio è accompagnato dalle informazioni di licenza, che indicano quali moduli sono abilitati e altre risorse sono disponibili.
Il dominio corrente ¶
È quello all’interno del quale è stata registrata l’Applicazione API le cui credenziali sono state usate per l’autenticazione.
DominioGET/domain
Example URI
200
Body
{
"name": "azienda",
"displayName": "AZIENDA SRL",
"guid": "112e2343"
}
Schema
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"displayName": {
"type": "string"
},
"guid": {
"type": "string",
"description": "e09e-47d3-a31e-78cf5fedf885 (string)"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Gruppo aziende ¶
All’interno del dominio le aziende sono organizzate in gruppi di aziende. Se non si utilizzano i gruppi di aziende, esisterà comunque un gruppo predefinito del quale faranno parte tutte le aziende gestite nel dominio.
Tutte le aziende all’interno di uno stesso gruppo condividono una serie di informazioni: causali di presenza, tipi di qualifiche, livello dipendenti, ecc.
Gruppi aziende ¶
Gruppi aziendeGET/companiesgroups
Example URI
200
Body
[
{
"id": 1,
"name": "FILIALI",
"isDomainDefault": true
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"isDomainDefault": {
"type": "boolean"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Gruppo aziende ¶
Gruppo aziendeGET/companiesgroups/{id}
Example URI
- id
number
(required) Example: 1ID del gruppo aziende.
200
Body
{
"id": 1,
"name": "FILIALI",
"isDomainDefault": true
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"isDomainDefault": {
"type": "boolean"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Centri di costo ¶
Centri di costoGET/companiesgroups/{idCompaniesGroup}/costcenters
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartengono i centri di costo.
200
Body
[
{
"id": 1,
"code": "AMMIN",
"name": "AMMINISTRAZIONE"
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"code": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Centro di costo ¶
Centro di costoGET/companiesgroups/{idCompaniesGroup}/costcenters/{id}
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartiene il centro di costo.
- id
number
(required) Example: 1ID del centro di costo.
200
Body
{
"id": 1,
"code": "AMMIN",
"name": "AMMINISTRAZIONE"
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"code": {
"type": "string"
},
"name": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Livelli dipendenti ¶
Livelli dipendentiGET/companiesgroups/{idCompaniesGroup}/employeelevels
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartengono i livelli dipendenti.
200
Body
[
{
"id": 1,
"code": "Liv.1",
"name": "LIVELLO 1"
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"code": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Livello dipendenti ¶
Livello dipendentiGET/companiesgroups/{idCompaniesGroup}/employeelevels/{id}
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartiene il livello dipendenti.
- id
number
(required) Example: 1ID del livello dipendenti.
200
Body
{
"id": 1,
"code": "Liv.1",
"name": "LIVELLO 1"
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"code": {
"type": "string"
},
"name": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Mansioni ¶
MansioniGET/companiesgroups/{idCompaniesGroup}/employeetasks
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartengono le mansioni.
200
Body
[
{
"id": 1,
"code": "FATT",
"name": "FATTURAZIONE"
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"code": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Mansioni ¶
MansioneGET/companiesgroups/{idCompaniesGroup}/employeetasks/{id}
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartiene la mansione.
- id
number
(required) Example: 1ID della mansione.
200
Body
{
"id": 1,
"code": "FATT",
"name": "FATTURAZIONE"
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"code": {
"type": "string"
},
"name": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Qualifiche ¶
QualificheGET/companiesgroups/{idCompaniesGroup}/qualifications
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartengono le qualifiche.
200
Body
[
{
"id": 1,
"code": "OP",
"name": "OPERAIO"
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"code": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Qualifica ¶
QualificaGET/companiesgroups/{idCompaniesGroup}/qualifications/{id}
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartiene la qualifica.
- id
number
(required) Example: 1ID della qualifica.
200
Body
{
"id": 1,
"code": "OP",
"name": "OPERAIO"
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"code": {
"type": "string"
},
"name": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Tipi contratto ¶
Tipi contrattoGET/companiesgroups/{idCompaniesGroup}/contracttypes
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartengono i tipi contratto.
200
Body
[
{
"id": 1,
"name": "METALMECCANICI"
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Tipo contratto ¶
Tipo contrattoGET/companiesgroups/{idCompaniesGroup}/contracttypes/{id}
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartiene il tipo contratto.
- id
number
(required) Example: 1ID del tipo contratto.
200
Body
{
"id": 1,
"name": "METALMECCANICI"
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Azienda ¶
Aziende ¶
AziendeGET/companies
Example URI
200
Body
[
{
"id": 1,
"idCompaniesGroup": 3,
"address": "Via dei tigli 12",
"city": "Milano",
"clockingsFilesPrefix1": "az",
"clockingsFilesPrefix2": "",
"clockingsFilesSuffix1": "trn",
"clockingsFilesSuffix2": "",
"configurationNotes": "",
"name": "Azienda Srl",
"notes": "",
"payCode": "A001",
"postalCode": "40121"
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"idCompaniesGroup": {
"type": "number"
},
"address": {
"type": "string"
},
"city": {
"type": "string"
},
"clockingsFilesPrefix1": {
"type": "string"
},
"clockingsFilesPrefix2": {
"type": "string"
},
"clockingsFilesSuffix1": {
"type": "string"
},
"clockingsFilesSuffix2": {
"type": "string"
},
"configurationNotes": {
"type": "string"
},
"name": {
"type": "string"
},
"notes": {
"type": "string"
},
"payCode": {
"type": "string"
},
"postalCode": {
"type": "string"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Azienda ¶
AziendaGET/companies/{id}
Example URI
- id
number
(required) Example: 1ID dell’azienda.
200
Body
{
"id": 1,
"idCompaniesGroup": 3,
"address": "Via dei tigli 12",
"city": "Milano",
"clockingsFilesPrefix1": "az",
"clockingsFilesPrefix2": "",
"clockingsFilesSuffix1": "trn",
"clockingsFilesSuffix2": "",
"configurationNotes": "",
"name": "Azienda Srl",
"notes": "",
"payCode": "A001",
"postalCode": "40121"
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"idCompaniesGroup": {
"type": "number"
},
"address": {
"type": "string"
},
"city": {
"type": "string"
},
"clockingsFilesPrefix1": {
"type": "string"
},
"clockingsFilesPrefix2": {
"type": "string"
},
"clockingsFilesSuffix1": {
"type": "string"
},
"clockingsFilesSuffix2": {
"type": "string"
},
"configurationNotes": {
"type": "string"
},
"name": {
"type": "string"
},
"notes": {
"type": "string"
},
"payCode": {
"type": "string"
},
"postalCode": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Dipendenti ¶
DipendentiGET/companies/{idCompany}/employees
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono i dipendenti.
200
Body
[
{
"id": 31,
"address": "Via Giulio Ceradini, 3",
"badge1": "63262",
"badge2": "",
"birthCity": "Torino",
"birthDate": "1992-02-22T00:00:00",
"birthDistrict": "TO",
"branchCode": "001",
"cellphone": "324 649999",
"city": "Pavia",
"code": "01",
"dismissalDate": "2015-05-04T00:00:00",
"district": "PV",
"firstName": "JAVIER",
"hiringDate": "2009-09-14T00:00:00",
"hourlyCost": 20.8,
"idContractType": 32,
"idCostCenter": 9,
"idEmployeeCategory": 5,
"idEmployeeLevel": 11,
"idEmployeeTask": 56,
"idQualification": 18,
"lastName": "ALVAREZ",
"legalIdentificationCode": "LXXJVR88D12L682X",
"mail": "javialva@email.it",
"omitFromAttendancesReport": false,
"postCode": "20129",
"registrationNumber": "000141",
"sex": 0,
"telephone": "0331 345732"
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"address": {
"type": "string"
},
"badge1": {
"type": "string"
},
"badge2": {
"type": "string"
},
"birthCity": {
"type": "string"
},
"birthDate": {
"type": "string"
},
"birthDistrict": {
"type": "string"
},
"branchCode": {
"type": "string"
},
"cellphone": {
"type": "string"
},
"city": {
"type": "string"
},
"code": {
"type": "string"
},
"dismissalDate": {
"type": "string"
},
"district": {
"type": "string"
},
"firstName": {
"type": "string"
},
"hiringDate": {
"type": "string"
},
"hourlyCost": {
"type": "number"
},
"idContractType": {
"type": "number"
},
"idCostCenter": {
"type": "number"
},
"idEmployeeCategory": {
"type": "number"
},
"idEmployeeLevel": {
"type": "number"
},
"idEmployeeTask": {
"type": "number"
},
"idQualification": {
"type": "number"
},
"lastName": {
"type": "string"
},
"legalIdentificationCode": {
"type": "string"
},
"mail": {
"type": "string"
},
"omitFromAttendancesReport": {
"type": "boolean"
},
"postCode": {
"type": "string"
},
"registrationNumber": {
"type": "string"
},
"sex": {
"enum": [
0,
1,
2
],
"description": "0=Undefined, 1=Female, 2=Male"
},
"telephone": {
"type": "string"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Dipendente ¶
DipendenteGET/companies/{idCompany}/employees/{id}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartiene il dipendente.
- id
number
(required) Example: 1ID del dipendente.
200
Body
{
"id": 31,
"address": "Via Giulio Ceradini, 3",
"badge1": "63262",
"badge2": "",
"birthCity": "Torino",
"birthDate": "1992-02-22T00:00:00",
"birthDistrict": "TO",
"branchCode": "001",
"cellphone": "324 649999",
"city": "Pavia",
"code": "01",
"dismissalDate": "2015-05-04T00:00:00",
"district": "PV",
"firstName": "JAVIER",
"hiringDate": "2009-09-14T00:00:00",
"hourlyCost": 20.8,
"idContractType": 32,
"idCostCenter": 9,
"idEmployeeCategory": 5,
"idEmployeeLevel": 11,
"idEmployeeTask": 56,
"idQualification": 18,
"lastName": "ALVAREZ",
"legalIdentificationCode": "LXXJVR88D12L682X",
"mail": "javialva@email.it",
"omitFromAttendancesReport": false,
"postCode": "20129",
"registrationNumber": "000141",
"sex": 0,
"telephone": "0331 345732"
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"address": {
"type": "string"
},
"badge1": {
"type": "string"
},
"badge2": {
"type": "string"
},
"birthCity": {
"type": "string"
},
"birthDate": {
"type": "string"
},
"birthDistrict": {
"type": "string"
},
"branchCode": {
"type": "string"
},
"cellphone": {
"type": "string"
},
"city": {
"type": "string"
},
"code": {
"type": "string"
},
"dismissalDate": {
"type": "string"
},
"district": {
"type": "string"
},
"firstName": {
"type": "string"
},
"hiringDate": {
"type": "string"
},
"hourlyCost": {
"type": "number"
},
"idContractType": {
"type": "number"
},
"idCostCenter": {
"type": "number"
},
"idEmployeeCategory": {
"type": "number"
},
"idEmployeeLevel": {
"type": "number"
},
"idEmployeeTask": {
"type": "number"
},
"idQualification": {
"type": "number"
},
"lastName": {
"type": "string"
},
"legalIdentificationCode": {
"type": "string"
},
"mail": {
"type": "string"
},
"omitFromAttendancesReport": {
"type": "boolean"
},
"postCode": {
"type": "string"
},
"registrationNumber": {
"type": "string"
},
"sex": {
"enum": [
0,
1,
2
],
"description": "0=Undefined, 1=Female, 2=Male"
},
"telephone": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Dipendenti ¶
Categorie dipendentiGET/companies/{idCompany}/employeecategories
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono le categorie dipendenti.
200
Body
[
{
"id": "12",
"idParent": "0",
"name": "Ufficio tecnico",
"payCode": ""
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"idParent": {
"type": "string"
},
"name": {
"type": "string"
},
"payCode": {
"type": "string"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Categoria dipendenti ¶
Categoria dipendentiGET/companies/{idCompany}/employeecategories/{id}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartiene la categoria dipendenti.
- id
number
(required) Example: 1ID della categoria dipendenti.
200
Body
{
"id": "12",
"idParent": "0",
"name": "Ufficio tecnico",
"payCode": ""
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"idParent": {
"type": "string"
},
"name": {
"type": "string"
},
"payCode": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Presenze ¶
Raccoglie le risorse relative ai dati di presenza.
Giustificativi ¶
GiustificativiGET/companies/{idCompany}/absenceproofs?fromDate={fromDate}&toDate={toDate}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono i giustificativi.
- fromDate
string
(required) Example: 2021-01-01Prima data da cui restituire i giustificativi.
- toDate
string
(required) Example: 2021-02-28Ultima data da cui restituire i giustificativi.
200
Body
[
{
"id": 1,
"idEmployee": 132,
"idVoice": 17,
"beginTime": "2018-01-04T08:00:00",
"endTime": "2018-01-04T10:00:00",
"maxDuration": 120,
"proofType": 0,
"idSourceEmployeeRequest": 0,
"overwritePrecedingUserRequested": false
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"idEmployee": {
"type": "number"
},
"idVoice": {
"type": "number"
},
"beginTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"maxDuration": {
"type": "number"
},
"proofType": {
"enum": [
0,
1,
2,
3,
4,
5,
6
],
"description": "0=Assigned, 1=Complete, 2=CompleteRigid, 3=PartialFlexible, 4=PartialRigid, 5=CompleteNoClockings, 6=CompleteFlexible"
},
"idSourceEmployeeRequest": {
"type": "number"
},
"overwritePrecedingUserRequested": {
"type": "boolean"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Causali di presenza ¶
Causali di presenzaGET/companiesgroups/{idCompaniesGroup}/basevoices
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartengono le causali di presenza.
200
Body
[
{
"id": 1,
"code": "STR15",
"description": "STRAORDINARIO 15",
"voiceType": 0,
"computingType": 0,
"forInternalUse": false,
"printOnAttendancesReport": false,
"showInSummaries": false
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"code": {
"type": "string"
},
"description": {
"type": "string"
},
"voiceType": {
"enum": [
0,
1,
2,
3,
4
],
"description": "0=Presence, 1=Absence, 2=Overtime, 3=Other, 4=Numeric"
},
"computingType": {
"enum": [
0,
1,
2
],
"description": "0=AsHours, 1=AsDays, 2=Numeric"
},
"forInternalUse": {
"type": "boolean"
},
"printOnAttendancesReport": {
"type": "boolean"
},
"showInSummaries": {
"type": "boolean"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Causale di presenza ¶
Causale di presenzaGET/companiesgroups/{idCompaniesGroup}/basevoices/{id}
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartiene la causale di presenza.
- id
number
(required) Example: 1ID della causale di presenza.
200
Body
{
"id": 1,
"code": "STR15",
"description": "STRAORDINARIO 15",
"voiceType": 0,
"computingType": 0,
"forInternalUse": false,
"printOnAttendancesReport": false,
"showInSummaries": false
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"code": {
"type": "string"
},
"description": {
"type": "string"
},
"voiceType": {
"enum": [
0,
1,
2,
3,
4
],
"description": "0=Presence, 1=Absence, 2=Overtime, 3=Other, 4=Numeric"
},
"computingType": {
"enum": [
0,
1,
2
],
"description": "0=AsHours, 1=AsDays, 2=Numeric"
},
"forInternalUse": {
"type": "boolean"
},
"printOnAttendancesReport": {
"type": "boolean"
},
"showInSummaries": {
"type": "boolean"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Timbrature ¶
TimbratureGET/companies/{idCompany}/clockings?fromDate={fromDate}&toDate={toDate}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono le timbrature.
- fromDate
string
(required) Example: 2021-01-01Data inizio intervallo timbrature
- toDate
string
(required) Example: 2021-02-28Data fine intervallo timbrature
200
Body
[
{
"id": 1,
"badge": "35",
"causalCode": "CORSO",
"dateCreated": "2018-01-04T08:13:25",
"finalDateTimeClocking": "2018",
"finalDirection": 0,
"idAssociatedEmployee": 143,
"idClockingCausal": 7,
"idSourceEmployeeRequest": 0,
"source": 0,
"sourceDateTimeClocking": "2018",
"sourceDirection": 0,
"terminalId": "00",
"idJob": 36,
"latitude": 45.488984,
"longitude": 9.234843
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"badge": {
"type": "string"
},
"causalCode": {
"type": "string"
},
"dateCreated": {
"type": "string"
},
"finalDateTimeClocking": {
"type": "string",
"description": "01-04T08:10:00 (string)"
},
"finalDirection": {
"enum": [
0,
1,
2
],
"description": "0=In, 1=Out, 2=Undefined"
},
"idAssociatedEmployee": {
"type": "number"
},
"idClockingCausal": {
"type": "number"
},
"idSourceEmployeeRequest": {
"type": "number"
},
"source": {
"enum": [
0,
1,
2,
3,
4,
5,
6,
7,
8
],
"description": "0=Terminal, 1=Manual, 2=Imported, 3=Web, 4=EmployeeRequest, 5=ImportedSms. 6=ImportedMail, 7=WebMobile, 8=MobileApp"
},
"sourceDateTimeClocking": {
"type": "string",
"description": "01-04T08:10:45 (string)"
},
"sourceDirection": {
"enum": [
0,
1,
2
],
"description": "0=In, 1=Out, 2=Undefined"
},
"terminalId": {
"type": "string"
},
"idJob": {
"type": "number"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Timbratura ¶
TimbraturaGET/companies/{idCompany}/clockings/{id}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartiene la timbratura.
- id
number
(required) Example: 1ID della timbratura.
200
Body
{
"id": 1,
"badge": "35",
"causalCode": "CORSO",
"dateCreated": "2018-01-04T08:13:25",
"finalDateTimeClocking": "2018",
"finalDirection": 0,
"idAssociatedEmployee": 143,
"idClockingCausal": 7,
"idSourceEmployeeRequest": 0,
"source": 0,
"sourceDateTimeClocking": "2018",
"sourceDirection": 0,
"terminalId": "00",
"idJob": 36,
"latitude": 45.488984,
"longitude": 9.234843
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"badge": {
"type": "string"
},
"causalCode": {
"type": "string"
},
"dateCreated": {
"type": "string"
},
"finalDateTimeClocking": {
"type": "string",
"description": "01-04T08:10:00 (string)"
},
"finalDirection": {
"enum": [
0,
1,
2
],
"description": "0=In, 1=Out, 2=Undefined"
},
"idAssociatedEmployee": {
"type": "number"
},
"idClockingCausal": {
"type": "number"
},
"idSourceEmployeeRequest": {
"type": "number"
},
"source": {
"enum": [
0,
1,
2,
3,
4,
5,
6,
7,
8
],
"description": "0=Terminal, 1=Manual, 2=Imported, 3=Web, 4=EmployeeRequest, 5=ImportedSms. 6=ImportedMail, 7=WebMobile, 8=MobileApp"
},
"sourceDateTimeClocking": {
"type": "string",
"description": "01-04T08:10:45 (string)"
},
"sourceDirection": {
"enum": [
0,
1,
2
],
"description": "0=In, 1=Out, 2=Undefined"
},
"terminalId": {
"type": "string"
},
"idJob": {
"type": "number"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Causali di timbratura ¶
Causali di timbraturaGET/companiesgroups/{idCompaniesGroup}/clockingcausals
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartengono le causali di timbratura.
200
Body
[
{
"id": 1,
"causalType": 0,
"code": "EXT",
"computeWithoutRounding": false,
"description": "ATTIVITA' ESTERNA",
"doNotPrintOnTimeSheet": false,
"doNotRemoveClockings": true,
"doNotShowOnTimeSheet": false,
"excludeFromAbsenceCounters": true,
"idBaseVoice": 37,
"ignoreForAbsentsPresentsComputation": false,
"ignoreForComputation": false,
"idReclassificationSchema": 0,
"parameters": "",
"value": 0
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"causalType": {
"enum": [
0,
1,
2,
3,
4,
5,
6
],
"description": "0=Reclassification, 1=JustifyFullInterval, 2=GenerateVoice, 3=Mark, 4=MarkAndRemove, 5=GenerateVoiceFixedValue, 6=CanteenReservation"
},
"code": {
"type": "string"
},
"computeWithoutRounding": {
"type": "boolean"
},
"description": {
"type": "string"
},
"doNotPrintOnTimeSheet": {
"type": "boolean"
},
"doNotRemoveClockings": {
"type": "boolean"
},
"doNotShowOnTimeSheet": {
"type": "boolean"
},
"excludeFromAbsenceCounters": {
"type": "boolean"
},
"idBaseVoice": {
"type": "number"
},
"ignoreForAbsentsPresentsComputation": {
"type": "boolean"
},
"ignoreForComputation": {
"type": "boolean"
},
"idReclassificationSchema": {
"type": "number"
},
"parameters": {
"type": "string"
},
"value": {
"type": "number"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Causale di timbratura ¶
Causale di timbraturaGET/companiesgroups/{idCompaniesGroup}/clockingcausals/{id}
Example URI
- idCompaniesGroup
number
(required) Example: 123ID del gruppo aziende a cui appartiene la causale di timbratura.
- id
number
(required) Example: 1ID della causale di timbratura.
200
Body
{
"id": 1,
"causalType": 0,
"code": "EXT",
"computeWithoutRounding": false,
"description": "ATTIVITA' ESTERNA",
"doNotPrintOnTimeSheet": false,
"doNotRemoveClockings": true,
"doNotShowOnTimeSheet": false,
"excludeFromAbsenceCounters": true,
"idBaseVoice": 37,
"ignoreForAbsentsPresentsComputation": false,
"ignoreForComputation": false,
"idReclassificationSchema": 0,
"parameters": "",
"value": 0
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"causalType": {
"enum": [
0,
1,
2,
3,
4,
5,
6
],
"description": "0=Reclassification, 1=JustifyFullInterval, 2=GenerateVoice, 3=Mark, 4=MarkAndRemove, 5=GenerateVoiceFixedValue, 6=CanteenReservation"
},
"code": {
"type": "string"
},
"computeWithoutRounding": {
"type": "boolean"
},
"description": {
"type": "string"
},
"doNotPrintOnTimeSheet": {
"type": "boolean"
},
"doNotRemoveClockings": {
"type": "boolean"
},
"doNotShowOnTimeSheet": {
"type": "boolean"
},
"excludeFromAbsenceCounters": {
"type": "boolean"
},
"idBaseVoice": {
"type": "number"
},
"ignoreForAbsentsPresentsComputation": {
"type": "boolean"
},
"ignoreForComputation": {
"type": "boolean"
},
"idReclassificationSchema": {
"type": "number"
},
"parameters": {
"type": "string"
},
"value": {
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Richieste dipendenti ¶
Richieste dipendentiGET/companies/{idCompany}/employeerequests?fromDate={fromDate}&toDate={toDate}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono le richieste.
- fromDate
string
(required) Example: 2021-01-01Prima data da cui restituire le richieste.
- toDate
string
(required) Example: 2021-02-28Ultima data da cui restituire le richieste.
200
Body
[
{
"id": 1,
"idEmployee": 132,
"idVoice": 17,
"clockingDirection": 0,
"dateTime1": "2018-01-04T08:00:00",
"dateTime2": "2018-01-08T10:00:00",
"notes": "Per visita medica",
"requestType": 0,
"minutes": 120,
"state": 0,
"approvalState": 0,
"idClockingCausal": 23,
"idJob": 1,
"forDeletion": false,
"dateCreated": "2018",
"approvalComment": "",
"overwritePreceding": false,
"isCancelled": false,
"idEmployeeRequestToCancel": 1,
"approvalDate": "2018"
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"idEmployee": {
"type": "number"
},
"idVoice": {
"type": "number"
},
"clockingDirection": {
"enum": [
0,
1,
2
],
"description": "0=In, 1=Out, 2=Undefined"
},
"dateTime1": {
"type": "string"
},
"dateTime2": {
"type": "string"
},
"notes": {
"type": "string"
},
"requestType": {
"enum": [
0,
1,
2,
3,
4,
5
],
"description": "0=AbsenceProof, 1=Clocking, 2=Overtime, 3=FreeRequest, 4=Cancellation, 5=Availability"
},
"minutes": {
"type": "number"
},
"state": {
"enum": [
0,
1,
2
],
"description": "0=WaitingApproval, 1=Approved, 2=Rejected"
},
"approvalState": {
"enum": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9
],
"description": "0=WaitingApprovalByResponsible, 1=WaitingApprovalByOffice, 2=AutomaticallyApproved, 3=ApprovedByResponsible, 4=ApprovedByOffice, 5=RejectedByResponsible, 6=RejectedByOffice, 7=WaitingApprovalBySupervisor, 8=ApprovedBySupervisor, 9=RejectedBySupervisor"
},
"idClockingCausal": {
"type": "number"
},
"idJob": {
"type": [
"number",
"null"
]
},
"forDeletion": {
"type": "boolean"
},
"dateCreated": {
"type": "string",
"description": "01-03T15:32:24 (string)"
},
"approvalComment": {
"type": "string"
},
"overwritePreceding": {
"type": "boolean"
},
"isCancelled": {
"type": "boolean"
},
"idEmployeeRequestToCancel": {
"type": [
"number",
"null"
]
},
"approvalDate": {
"type": "string",
"description": "01-03T18:02:56 (string, nullable)"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Risultati ¶
RisultatiGET/companies/{idCompany}/results?fromDate={fromDate}&toDate={toDate}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono i risultati.
- fromDate
string
(required) Example: 2021-01-01Prima data da cui restituire i risultati.
- toDate
string
(required) Example: 2021-02-28Ultima data da cui restituire i risultati.
200
Body
[
{
"id": 1,
"idVoice": 72,
"idWorkingDay": 1143,
"resultValue": 480
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"idVoice": {
"type": "number"
},
"idWorkingDay": {
"type": "number"
},
"resultValue": {
"type": "number"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Giornate ¶
GiornateGET/companies/{idCompany}/workingdays?fromDate={fromDate}&toDate={toDate}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono i risultati.
- fromDate
string
(required) Example: 2021-01-01Data inizio intervallo giornate
- toDate
string
(required) Example: 2021-02-28Data fine intervallo giornate
200
Body
[
{
"id": 1,
"idEmployee": 143,
"dayDate": "2018-01-04T00:00:00",
"dayState": 0,
"isRecalculated": true,
"isPrecompiled": false,
"idTimetable": 1732,
"idUserTimetable": 324,
"timetableTime": 480,
"overtimeUnauthorized": 30,
"isHoliday": false,
"idUserUpdated": 123
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"idEmployee": {
"type": "number"
},
"dayDate": {
"type": "string"
},
"dayState": {
"enum": [
0,
1,
2,
3,
4
],
"description": "0=ToBeComputed, 1=Computed, 2=Anomalous, 3=Signals, 4=Manual"
},
"isRecalculated": {
"type": "boolean"
},
"isPrecompiled": {
"type": "boolean"
},
"idTimetable": {
"type": "number"
},
"idUserTimetable": {
"type": "number"
},
"timetableTime": {
"type": "number"
},
"overtimeUnauthorized": {
"type": "number"
},
"isHoliday": {
"type": "boolean"
},
"idUserUpdated": {
"type": "number"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Giornate e Risultati ¶
Giornate e RisultatiPOST/companies/{idCompany}/workingdaysupdates
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda per cui modificare le giornate.
Crea o modifica giornate manuali con risultati
Body
[
{
"idEmployee": 143,
"dayDate": "2018-01-04T00:00:00",
"results": [
{
"idVoice": 72,
"resultValue": 480
}
]
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"idEmployee": {
"type": "number"
},
"dayDate": {
"type": "string"
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"idVoice": {
"type": "number"
},
"resultValue": {
"type": "number"
}
}
}
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
200
Progetti ¶
Clienti ¶
ClientiGET/companies/{idCompany}/customers
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono i clienti.
200
Body
[
{
"id": 1,
"name": "Azienda Cliente Srl",
"externalReference": "CA0012"
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"externalReference": {
"type": "string"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Cliente ¶
ClienteGET/companies/{idCompany}/customers/{id}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartiene il cliente.
- id
number
(required) Example: 1ID del cliente.
200
Body
{
"id": 1,
"name": "Azienda Cliente Srl",
"externalReference": "CA0012"
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"externalReference": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Progetti dipendenti ¶
Progetti dipendentiGET/companies/{idCompany}/employeejobs
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono le associazioni dipendenti-progetti.
200
Body
[
{
"idEmployee": 132,
"idJob": 32
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"idEmployee": {
"type": "number"
},
"idJob": {
"type": "number"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Configurazione progetti ¶
Configurazione progettiGET/companies/{idCompany}/jobsconfiguration
Example URI
- idCompany
number
(required) Example: 1ID dell’azienda.
200
Body
{
"jobsResultRoundingType": 0,
"jobsResultRoundingInterval": 15,
"jobsResultRoundingTolerance": 3,
"idAdditionalVoicesToShowAsTime": "1223,3075",
"idAdditionalVoicesToShowAsOvertime": "223,1675",
"approvalHyerarchy": 0,
"jobComputationMode": 0
}
Schema
{
"type": "object",
"properties": {
"jobsResultRoundingType": {
"enum": [
0,
1,
2
],
"description": "0=Excess, 1=Defect, 2=ToleranceInterval"
},
"jobsResultRoundingInterval": {
"type": "number"
},
"jobsResultRoundingTolerance": {
"type": "number"
},
"idAdditionalVoicesToShowAsTime": {
"type": "string"
},
"idAdditionalVoicesToShowAsOvertime": {
"type": "string"
},
"approvalHyerarchy": {
"enum": [
0,
1
],
"description": "0=Main, 1=Secondary"
},
"jobComputationMode": {
"enum": [
0,
1
],
"description": "0=ByAttendanceBands, 1=ByClockings"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Progetti ¶
ProgettiGET/companies/{idCompany}/jobs
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono i progetti.
200
Body
[
{
"id": 1,
"idCustomer": 21,
"idSecondaryCustomer": 27,
"idJobResponsible": 735,
"code": "MANUT",
"name": "Manutezione periodica",
"notes": "Note",
"externalReference": "",
"latitude": 45.488984,
"longitude": 9.234843,
"closed": false,
"jobValue": 5000,
"idJobType": 5,
"idJobArea": 3
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"idCustomer": {
"type": "number"
},
"idSecondaryCustomer": {
"type": [
"number",
"null"
]
},
"idJobResponsible": {
"type": [
"number",
"null"
],
"description": "ID of an employee"
},
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"notes": {
"type": "string"
},
"externalReference": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"closed": {
"type": "boolean"
},
"jobValue": {
"type": "number"
},
"idJobType": {
"type": "number"
},
"idJobArea": {
"type": "number"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Progetto ¶
ProgettoGET/companies/{idCompany}/jobs/{id}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartiene il progetto.
- id
number
(required) Example: 1ID del progetto.
200
Body
{
"id": 1,
"idCustomer": 21,
"idSecondaryCustomer": 27,
"idJobResponsible": 735,
"code": "MANUT",
"name": "Manutezione periodica",
"notes": "Note",
"externalReference": "",
"latitude": 45.488984,
"longitude": 9.234843,
"closed": false,
"jobValue": 5000,
"idJobType": 5,
"idJobArea": 3
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"idCustomer": {
"type": "number"
},
"idSecondaryCustomer": {
"type": [
"number",
"null"
]
},
"idJobResponsible": {
"type": [
"number",
"null"
],
"description": "ID of an employee"
},
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"notes": {
"type": "string"
},
"externalReference": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"closed": {
"type": "boolean"
},
"jobValue": {
"type": "number"
},
"idJobType": {
"type": "number"
},
"idJobArea": {
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Area di progetto ¶
Aree di progettoGET/companies/{idCompany}/jobareas
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono le aree di progetto.
200
Body
[
{
"id": 1,
"name": "R & D"
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Area di progetto ¶
Area di progettoGET/companies/{idCompany}/jobareas/{id}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartiene l’area di progetto.
- id
number
(required) Example: 1ID dell’area di progetto.
200
Body
{
"id": 1,
"name": "R & D"
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Tipi di progetto ¶
Tipi di progettoGET/companies/{idCompany}/jobtypes
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono i tipi di progetto.
200
Body
[
{
"id": 1,
"name": "Progetto interno"
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Tipo di progetto ¶
Tipo di progettoGET/companies/{idCompany}/jobtypes/{id}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartiene il tipo di progetto.
- id
number
(required) Example: 1ID del tipo di progetto.
200
Body
{
"id": 1,
"name": "Progetto interno"
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Registrazioni di progetto ¶
Registrazioni di progettoGET/companies/{idCompany}/jobentries?fromDate={fromDate}&toDate={toDate}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono le registrazioni.
- fromDate
string
(required) Example: 2021-01-01Data inizio intervallo registrazioni
- toDate
string
(required) Example: 2021-02-28Data fine intervallo registrazioni
200
Body
[
{
"id": 1,
"idEmployee": 132,
"idJob": 3754,
"approvalActor": 0,
"approvalState": 0,
"entryDate": "2018-01-04T08:10:00",
"minutes": 240,
"overtimeMinutes": 0,
"notes": "",
"generated": false,
"hourlyCost": 20.8,
"totalCost": 83.2
}
]
Schema
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "number"
},
"idEmployee": {
"type": "number"
},
"idJob": {
"type": "number"
},
"approvalActor": {
"enum": [
0,
1,
2,
3
],
"description": "0=None, 1=ProjectResponsible, 2=EmployeeResponsible, 3=Office"
},
"approvalState": {
"enum": [
0,
1,
2
],
"description": "0=New, 1=Approved, 2=Rejected"
},
"entryDate": {
"type": "string"
},
"minutes": {
"type": "number"
},
"overtimeMinutes": {
"type": "number"
},
"notes": {
"type": "string"
},
"generated": {
"type": "boolean"
},
"hourlyCost": {
"type": "number"
},
"totalCost": {
"type": "number"
}
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}
Registrazione di progetto ¶
Registrazione di progettoGET/companies/{idCompany}/jobentries/{id}
Example URI
- idCompany
number
(required) Example: 123ID dell’azienda a cui appartengono le registrazioni.
- id
number
(required) Example: 1ID della registrazione.
200
Body
{
"id": 1,
"idEmployee": 132,
"idJob": 3754,
"approvalActor": 0,
"approvalState": 0,
"entryDate": "2018-01-04T08:10:00",
"minutes": 240,
"overtimeMinutes": 0,
"notes": "",
"generated": false,
"hourlyCost": 20.8,
"totalCost": 83.2
}
Schema
{
"type": "object",
"properties": {
"id": {
"type": "number"
},
"idEmployee": {
"type": "number"
},
"idJob": {
"type": "number"
},
"approvalActor": {
"enum": [
0,
1,
2,
3
],
"description": "0=None, 1=ProjectResponsible, 2=EmployeeResponsible, 3=Office"
},
"approvalState": {
"enum": [
0,
1,
2
],
"description": "0=New, 1=Approved, 2=Rejected"
},
"entryDate": {
"type": "string"
},
"minutes": {
"type": "number"
},
"overtimeMinutes": {
"type": "number"
},
"notes": {
"type": "string"
},
"generated": {
"type": "boolean"
},
"hourlyCost": {
"type": "number"
},
"totalCost": {
"type": "number"
}
},
"$schema": "http://json-schema.org/draft-04/schema#"
}