dimanche 10 janvier 2010

CMS Buddy v1.00b

Bon, j'ai été occupé en fin de semaine.

En fait, j'ai travaillé hier de ~8h45 à ~20h50, et aujourd'hui de ~9h30 à ~15h50. On a un deadline qui arrive, et "malheureusement" ce qui arrive à grands pas est quelque chose sur quoi j'ai travaillé exclusivement depuis que je suis arrivé. Je me trouve à être la personne la mieux placée pour faire ce qu'il y a à faire en tant que producteur (versus gestionnaire de projet ou quelqu'un comme ça). En tout cas... j'ai travaillé pas mal, et je n'ai pas eu beaucoup de temps libre.

Le 30 décembre, je me suis trouvé un projet à faire en Java. C'est tout simple: à la job, comme c'est de la consultation, toutes les heures travaillées, sauf quelques exceptions évidemment, sont chargées à des clients (ou à tout le moins sont comptabilisées). Ces heures doivent être rentrées dans un logiciel centralisé à une certaine fréquence, typiquement hebdomadairement (sauf aux fins de mois et pendant les Fêtes, mais je vous épargne les détails).

Pour faire un suivi assez fin des heures travaillées sur chaque projet, tous et chacun (sauf moi) utilisent un truc qu'ils se sont faits ou qu'ils ont volé de quelqu'un (et c'est toujours fait en Excel là). Simon m'a montré le sien et j'ai bien aimé, mais je me suis dit que ce serait l'occasion rêvée de programmer quelque chose en Java. "Rêvée" parce que ça sert vraiment à quelque chose et que j'en ai vraiment besoin ("je vais m'en servir").

J'ai commencé ce projet, que j'ai baptisé CMS Buddy, le 30 décembre dernier. Ça s'appelle comme ça parce que le logiciel centralisé pour comptabiliser les heures s'appelait classiquement "CMS". Le "Buddy", c'est parce que c'est fait pour aider... vous comprenez? J'ai passé plusieurs jours là-dessus.

J'ai fini par finir. J'ai fait la programmation en deux jets: 1) Tout coder pour que tout fonctionne (cliquer des boutons, rentrer des tâches, etc.), et 2) arranger la présentation graphique. J'ai commencé et terminé le point 2) ce soir, et cela signifie donc que mon application (en date de la version 1.00b) est terminée et prête à être utilisée. J'ai exporté ce projet en une archive exécutable "jar", ce qui signifie que l'on peut simplement double-cliquer dessus pour que l'application démarre.



Quand je lance l'application, comme je n'ai encore aucun profil utilisateur, on m'en crée un automatiquement. Pour fins de simplicité, le fichier est placé dans le même répertoire que l'archive.



Vous pouvez en profiter pour regarder l'interface en même temps. On voit qu'il y a deux onglets: l'un pour entrer les heures, et l'autre (que nous verrons plus tard) permet de gérer les clients et tâches pour chaque client qui sont stockés dans le profil de l'utilisateur.

Chaque tâche a deux informations principales qui lui sont liées: un code client (un client) et un code de tâche (qui ressemble à quelque chose comme Axxx.Axxx). Pour chaque tâche, on peut ajouter une description pour soi-même. Je vais donc créer deux clients: Client 1 et Client 2, et créer deux tâches pour chacun des clients.



Bon, disons que je commence une tâche pour Client 1 qui se trouve à être de l'analyse de données. Je clique sur "Début" pour remplir automatiquement le champ d'heure du début (j'aurais pu le faire à la main). Une fois que j'ai terminé, j'appuie sur "Fin" pour rentrer l'heure. J'appuie ensuite sur "Ajouter" et une ligne se remplira dans la matrice à la droite.



Pour le moment, on ne peut pas supprimer de ligne dans la table, et les données sont stockées nulle part. En gros, si l'ordinateur plante ou quelque chose du genre, on perd tout. Je vais peut-être corriger ce problème dans une version ultérieure, mais je ne sais pas encore (le problème c'est que la table ne stocke réellement pas les données... je ne peux pas, dans le code, accéder à la valeur de chaque cellule. Il faudrait alors que je garde synchronisée une variable avec la table, et que cette variable soit modifiée dès qu'un champ dans la table est modifié... ce qui veut dire que je dois implémenter dans mon modèle de table des écouteurs de modification et tout ça... bref, rien de joli, alors ça va attendre).

Voyons voir l'autre onglet, "Clients / Tâches".



Les boutons "Créer un client", "Créer une tâche" et "Modifier client" ouvrent des dialogues modaux (qui monopolisent les ressources du programme, c'est-à-dire qui requièrent une action immédiate de l'utilisateur) pour faire ce que le texte du bouton dit (d'uh). Certains de ces boutons utilisent l'information de l'autre onglet, qui est très trompeur. Si je clique sur "Modifier client" par exemple, ça modifie le client qui est actuellement sélectionné dans le premier onglet. (La raison pour laquelle c'est moins grave que ce que l'on pourrait croire c'est que ces évènements d'ajout et de suppression de tâches ou de clients sont très rares une fois le profil bien établi en fonction de l'utilisateur).



Comme vous pouvez voir, on peut modifier le nom du client ainsi que ses tâches actuelles. On ne peut pas ni supprimer le client, ni supprimer de tâches à partir de cette fenêtre-là (il faut utiliser les boutons dédiés pour ça).

Les boutons de suppression font apparaître une boîte de confirmation qui demande si l'on veut supprimer telle ou telle affaire.



Et voilà... je suis cool hein?

En passant, je n'ai pas mis de Easter eggs encore. :P Pour ceux qui se le demandent, le programme tient présentement sur 16 ko d'espace, tandis que le fichier de profil c'est simplement un fichier texte... alors pas réellement plus probablement.

3 commentaires:

Anonyme a dit...

Félicitation Phil, comme ça tu n'as pas eu de week-end...As-tu fais ton soir de poker pareil?

Patrick a dit...

vraiment nice phil.. il a fallu que je check sur wikipedia cétait quoi un easter egg !!!!!! ten feras un pour montrer ton amour pour moi stp.. ok bye bonne journée

Seigneur a dit...

poker night = mercredi, pas le samedi...

j'ai vraiment rien fait de la fin de semaine, et je pense que mes soirées s'annoncent comblées jusqu'au 15 :\