Ogni tanto mi salta fuori la passione per i tool a riga di comando. Sono semplici e leggeri e, soprattutto, possono essere schedulati. Sembra una cosa da poco, però mettetevi nella mia situazione. Lavoro come libero professionista, e come consulente presso una software-house a Milano. Ciò significa che quando lavoro, guadagno. Quando me ne sto a casa, come in questi giorni che sono piuttosto malridotto, non guadagno nulla. Ma lasciamo perdere il lato economico, voglio parlare di un'altra cosa. All'inizio di ogni mese, devo fare quanto segue:
- contare quante giornate ho lavorato nel mese (per esempio: gennaio)
- riempire un foglio Excel indicando le giornate nelle quali ho lavorato, mettendoci un bel "8" (ore lavorative giornaliere)
- fare la fattura corrispondente, moltiplicando la tariffa giornaliera per il numero di giorni lavorativi
- inviare il tutto via e-mail a capi/responsabili/amministrazione
Il tool a riga di comando che mi sono creato - RapportinoMaker - fa tutto questo in modo completamente automatico. Voglio raccontarvelo, giusto per annoiarvi un po' :-), e per descrivere uno scenario che mette insieme Windows Mobile, Microsoft Outlook, Reporting Services e via dicendo.
Contare le giornate in cui ho lavorato? Windows Mobile e Microsoft Outlook
Dunque, è ormai abitudine che alle 18, quando esco dall'ufficio ed entro in metropolitana, tiro fuori il mio palmare ed apro Agenda Fusion. E' un software che potete immaginare come l'Outlook per dispositivi mobili: ha i contatti, il calendario, il To-Do e così via. Dopo averlo aperto, vado sulla giornata odierna ed aggiungo un appuntamento nel calendario. Tale appuntamento è caratterizzato dal fatto che l'oggetto è il nome della società (una stringa da 3 caratteri), ora di inizio 9:00, ora di fine 18:00.
Non lo faccio tutte le sere, ma quando mi ricordo sincronizzo il mio palmare con il desktop a casa. In questo modo tutti gli appuntamenti che ho marcato in Agenda Fusion finiscono direttamente - con le stesse caratteristiche - nel mio Microsoft Outlook.
Contare le giornate in cui ho lavorato quindi diventa cosa banale: in giro per la Rete si trovano un gran numero di esempi su come fare Interop con Microsoft Office 2007. Con il termine "contare" non intendo solo un banale numero, ma l'elenco di tutti i giorni del mese in cui ho lavorato.
Scrivere il rapportino in Excel
RapportinoMaker sa dove reperire il template del foglio Excel dal quale partire. Una volta aperto il template, sa anche dove deve andare a scrivere il mio nome, il mese, il nome della società, la data corrente e così via. Inoltre, con un banale algoritmo va a scrivere nelle opportune celle il numero "8", in base ai giorni in cui ero fisicamente in ufficio. Excel fa tutto il resto: calcola il numero totale di ore lavorative, etc. etc. Al termine della generazione del foglio Excel, RapportinoMaker lo salva automaticamente in una directory opportuna.
Fare la fattura
Chi mi ha seguito nei mesi precedenti, sa che ho scritto un semplice programma di fatturazione. Programma che è lo stesso che uso io per le mie fatture. Programma che è anche disponibile per il download qua. Fatturazione dispone di un domain model, che ho semplicemente riciclato con un guadagno di tempo terrificante. Ho voluto solo riscrivere il DAL ed utilizzare questa volta NHibernate. Per creare una fattura con una sola riga di dettaglio ci vogliono qualcosa come 5 righe. Per salvarla ho interpellato il mio DAL con un metodo statico ed il gioco è fatto.
Inviare rapportino & fattura a chi di dovere
Facendo ancora un po' di Interop con Microsoft Outlook, è banale creare un MailItem, aggiungere i destinatari giusti, scrivere oggetto e testo e mettere in allegato sia il rapportino in Excel che la fattura in formato PDF. L'e-mail non viene spedita automaticamente, viene salvata nelle Bozze di Outlook in attesa che io possa vederla e validarla. Perchè, vabbè che sono un bravo developer, ma l'errore è sempre dietro l'angolo!!! :-)
Conclusione
Ce ne sarebbero di cose da dire. Avrei voluto postare un po' di codice, ma il post sarebbe diventato lungo un chilometro. Voglio solo dire una cosa: prima i passi dall'1 al 4 li facevo a mano e chissà perchè commettevo sempre qualche errore. Una volta contavo male i giorni, l'altra volta sballavo una cosa e così via. Adesso non devo far più nulla, devo solo stare attento in Agenda Fusion ad inserire le date corrette. RapportinoMaker può essere schedulato, non ha alcuna interazione con l'utente, perciò adesso ogni 5 del mese io mi ritrovo l'e-mail già bella pronta per essere spedita senza più troppi sbattimenti. Solo la stampa cartacea della fattura la devo fare a mano, ma grazie all'intervento del buon Davide sto risolvendo anche questo, usando Reporting Services ed uno speciale add-on. Magari ne parlerò in seguito.