Matteo Baccan
← Original Article

ZipBooks: time tracking, gestione clienti, commesse e stampa fatture .. tutto gratis

ZipBooks: time tracking, gestione clienti, commesse e stampa fatture .. tutto gratis

Ci sono molti software che promettono di essere gratuiti e alla portata di tutti, questa settimana ho provato ZipBooks: gratuito, aperto tramite API, essenziale ed estremamente efficace.

Spesso mi capita di dover tener traccia delle ore dedicate a un particolare cliente, in modo da poterle raggruppare e a fine mese staccare una fattura.

E' il classico lavoro del consulente: tanti progetti aperti, tante ore fatturate su un numero sempre crescente di clienti, tanti pezzi di carta, fogli di calcolo, note, eventi a calendario che girano fra scrivania e computer.

Siamo nel 2015 (quasi 2016) e ormai i contatti avvengono in molti modi diversi: telefonata, chat, email, social network, sessioni di coworking, trasferte, riunioni e così via.

Per mia scelta, per non aumentare il livello di entropia del mio lavoro, ho deciso di non impazzire con le consuntivazioni e gestire semplicemente una lista di ore lavorate e di attività fatte: cliente, data, durata e descrizione del lavoro. Nulla che non si possa risolvere con un foglio di calcolo.

Da foglio di calcolo locale è ben presto diventato un foglio di calcolo online, in modo da poterlo gestire anche in mobilità.

La soluzione era semplice, ma sicuramente non ottimale. Per questo motivo questa settimana ho cercato qualcosa di semplice, magari opensource, che potesse fare al caso mio.

Durante questa ricerca mi sono imbattuto in questo prodotto: ZipBooks

Non è nulla di eccezionale, nel senso che paragonato ad altri prodotti del genere non fa molto. Quello che permette di fare è però esattamente quello che serve:

Dal mio punto di vista, anche troppo rispetto a quanto facevo adesso.

Per curiosità ho provato ad adottare questo prodotto, inserendo dei dati consolidati, in modo da capire quanto fosse complesso e adatto al mio scopo.

Tutto è andato in modo abbastanza lineare: ho trovato dei punti in cui avrei inserito qualche funzionalità in più, ma quello che c'era ha fatto il suo sporco lavoro.

Cose che avrei aggiunto

Ci sono delle funzionalità che, in questo momento, sento mancare al prodotto:

Cosa mi è piaciuto

Alcune cose invece mi sono piaciute molto:

Interessante: ma tu cosa ci hai fatto?

Giusto per far capire di cosa parlo quando parlo di API aperte, voglio farvi vedere il batch che ho realizzato per esportare l'elenco delle ore lavorare da ZipBooks, in modo da comprendere quanto sia semplice interfacciarlo, anche da un non programmatore

Prima di tutto, per evitare che il batch risulti del tutto incomprensibile, indicherò subito i programmi che ho utilizzato per prendere e inviare dati verso ZipBooks e soprattutto per interpretare quanto ricevuto.

Il primo programma è Curl. Curl permette di scaricare una pagina da Internet e, nel nostro caso, di invocare le API JSON/REST fornite da ZipBooks.

Il secondo programma è JQ. Questa volta si tratta di un programma non molto conosciuto, ma estremamente necessario in questa situazione. JQ è un programma in grado di manipolare file JSON.

Perché mi è servito questo programma? Semplicemente perché le API fornite funzionano tramite JSON.

Bene non resta ora che utilizzare questi due programmi per fare accesso al sito ed estrarre la lista delle ore lavorate.

Un po' di API

La prima chiamata necessaria per il nostro scopo è quella di autenticazione al servizio:

https://api.zipbooks.com/v1/auth/login

Login riceve come parametri l'utente e la password col quale ci si è registrati e restituisce un JSON di informazioni, nelle quali è presente un TOKEN da utilizzare in ogni chiamata successiva. Il TOKEN è in grado di mantenere una sessione fra il client chiamante e il server e ci evita di ripetere continuamente l'invio di login e password al sistema.

set email=completare a piacere

set password=la vostra password

curl --insecure https://api.zipbooks.com/v1/auth/login --data "email=%email%&password=%password%" > login.json

Una volta invocato il login, ho proceduto a redirigere l'output di curl su un file : login.json.

In questo modo potevo, sia analizzare il contenuto del file per assicurarmi che tutto fosse andato come doveva, ma soprattutto potevo passare il file a jq in modo da estrarre il token che avevo ricevuto dalla prima chiamata

jq -r ".token" login.json > token

A sua volta il token era scritto in un secondo file chiamato "token", in modo da poterlo rileggere all'interno di una variabile

set /p token=< token

Ora che avevo in memoria la variabile "token", potevo riutilizzarla per tutte le estrazioni successive, come appunto quella con l'elenco delle entri del Time Tracking

curl --insecure https://api.zipbooks.com/v1/time_entries?token=%token% > time.json

Infine, per non farmi mancare nulla, ho invocato nuovamente jq per produrre un foglio di calcolo dal json ricevuto

jq -r ". | map(.duration), map(.date), map(.note) | @csv" time.json

Questo semplice batch mi permette quindi di esportare i dati inseriti nel programma e tutelarmi doppiamente: da un lato ho un backup giornaliero delle consuntivazioni, facilmente trasformabile in foglio di calcolo, da un altro punto di vista, se ZipBooks dovesse chiudere dalla sera alla mattina, non perderei neppure un giorno di lavoro.

Conclusioni

A volte le soluzioni semplici fanno esattamente quello che serve. Per un consulente che deve solo tenere traccia dei minuti lavorati e staccare fattura a fine mese, ZipBooks potrebbe essere già il programma giusto.