tag:linuxfr.org,2005:/tags/frais/publicLinuxFr.org : les contenus étiquetés avec « frais »2020-06-04T13:49:41+02:00/favicon.pngtag:linuxfr.org,2005:Diary/391782020-05-30T12:17:03+02:002020-05-30T13:03:31+02:00La petite histoire de la naissance d'un logiciel libre de Notes de Frais : DoliSCANLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li>
<a href="#toc-cest-la-petite-histoire-de-doliscan">C'est "La petite histoire de DoliSCAN"</a><ul>
<li><a href="#toc-le-dev-serveur--laravel">Le dev serveur : laravel</a></li>
<li><a href="#toc-le-dev-du-client--cordova">Le dev du client : cordova</a></li>
<li><a href="#toc-loffre-commerciale">L'offre commerciale</a></li>
<li><a href="#toc-la-libert%C3%A9-dans-tout-%C3%A7a-%C3%A7a-se-prouve">La liberté dans tout ça, ça se prouve !</a></li>
</ul>
</li>
<li><a href="#toc-en-r%C3%A9sum%C3%A9">En résumé:</a></li>
</ul>
<p>Salut à toi Journal,<br>
je vais te raconter une petite histoire, celle de la naissance d'un logiciel libre qui prends son envol et pour lequel j'ai envie de garder une trace avant qu'il ne soit trop tard ;-)</p>
<h2 id="toc-cest-la-petite-histoire-de-doliscan">C'est "La petite histoire de DoliSCAN"</h2>
<p>Après avoir développé plein d'outils en php3 il y a de (très) longues années, puis porté plus ou moins tout ça en php4 et maintenu du code pendant tout ce temps j'ai eu envie de me lancer dans un nouveau projet avec des technologies actuelles tout en restant sur PHP (je vois venir les sarcasmes "tu repassera pour les technologies actuelles avec ce vieux langage") :-)</p>
<p>J'ai passé quelques semaines à regarder les différents frameworks et me suis finalement posé sur Laravel, j'ai acheté le bouquin en français sur le sujet histoire d'avoir une vue d'ensemble et je me suis lancé dans l'aventure.</p>
<p>Après quelques micro-poc je me suis attelé à une idée un peu plus conséquente : créer un logiciel libre de notes de frais. Dolibarr mon compagnon historique propose bien un module en ce sens mais je souhaite "creuser une idée" un peu originale.</p>
<p>Et puis surtout j'ai croisé des gens qui utilisent des services "cloud" de gestion de notes de frais sans avoir aucune idée de l'exploitation probable des données qu'ils collectent … ça c'est pour ma motivation profonde, celle qui ne changera pas et qui n'a pas vraiment changée depuis plus de 20 ans (hé merde cher lecteur tu sais maintenant que je suis vieux).</p>
<p>J'ai eu pour idée de faire un modèle client/serveur "hybride" : backend en php et éventuellement frontend web mais surtout frontend "application sur smartphone" car ce qui m'intéresse est de pouvoir prendre en photo mon justificatif de frais au moment où il est entre mes mains au lieu de tout faire à la fin du mois et de perdre du temps à chercher mes facturettes, les scanner (et hurler contre ce papier et cette encre qui s'efface au bout de quelques semaines et je ne parle pas de leur capacité de froissage instantané ou de résistance à l'humidité).</p>
<p>Comme j'avais une petite expérience de cordova pour faire des appli simplissimes sur smartphone je me suis demandé s'il ne serait pas possible de mixer tout ça: cordova sur le smartphone et laravel sur le serveur + une interface web en complément.</p>
<h3 id="toc-le-dev-serveur--laravel">Le dev serveur : laravel</h3>
<p>Que dire de plus que "RAS" ou bien "ça marche, ça fait ce qu'on lui demande et c'est vraiment efficace" ? Lister les problèmes rencontrés ? Analyser les solutions ? Je ne sais pas ce qui pourrait vous intéresser donc je passe en revue rapide les éléments qui me semblent importants:</p>
<ul>
<li>Concernant le dev de base laravel on sent bien que je suis débutant, j'ai eu du mal à piger pas mal de choses et le code s'en ressent :-)</li>
<li>Pour le backend à proprement parler je suis tombé sur une pépite développée par une boite française (découvert au hasard d'ailleurs) : <a href="https://sharp.code16.fr/docs/guide/#terminology-general-concept">https://sharp.code16.fr/docs/guide/#terminology-general-concept</a>
</li>
<li>La gestion des rôles et des permissions s'appuie sur <a href="https://docs.spatie.be/laravel-permission/v3/installation-laravel/">https://docs.spatie.be/laravel-permission/v3/installation-laravel/</a>
</li>
<li>Et la gestion des fake-id via <a href="https://github.com/Propaganistas/Laravel-FakeId">https://github.com/Propaganistas/Laravel-FakeId</a>
</li>
<li>Et plein d'autres bricoles qu'on ajoute au fur et à mesure des besoins, j'ai noté beaucoup de libs de symfony au passage aussi :)</li>
</ul>
<p>Si je résume laravel je vois ça non pas comme seulement un framework mais plus comme une énorme source de solutions … Par exemple j'ai envie de rédiger de la doc propre … direction <a href="https://github.com/saleem-hadad/larecipe">https://github.com/saleem-hadad/larecipe</a> ou de faire des requêtes sur des webservices ? <a href="https://github.com/guzzle/guzzle">https://github.com/guzzle/guzzle</a> et ainsi de suite … au final on a certes un bon gros paquet de modules qui pèsent lourd et je pense que ça doit faire grincer les dents des puristes de la légèretés … mais du point de vue du développeur qui a déjà fort à faire c'est un énorme gain de temps !</p>
<p>Tiens un autre exemple, je lance mon application en pré-prod et je me dis que ça serait pas mal d'avoir des logs "applicatifs" pour savoir par exemple que la personne X (qui a les droits en modification sur les notes de frais de l'utilisateur Y) a modifié la note Z le 12 janvier à 18h pour remplacer le montant de la TVA qui était de 2,3€ par 23€ … disons même que c'est le genre de chose quasi indispensable dans ce genre d'outil … rapide recherche, analyse des différentes solutions et j'implémente ça en m'appuyant sur <a href="https://github.com/spatie/laravel-activitylog">https://github.com/spatie/laravel-activitylog</a> (ce sont les mêmes que pour la gestion des permissions).</p>
<p>De fil en aiguille le projet avance, il tourne et je commence à avoir des clients sans avoir fait de publicité, on est loin de l'équilibre par rapport au temps passé en R&D mais je compte sur toi journal pour lui donner une visibilité planétaire (francophone déjà ça serait bien) et me proposer des associés ou commerciaux … voir même des contributeurs :)</p>
<h3 id="toc-le-dev-du-client--cordova">Le dev du client : cordova</h3>
<p>Alors sur ce sujet j'ai lu tout et son contraire, ceux qui prédisent que cordova est foutu car apple et google poussent cette techno vers la sortie … ceux qui disent que ça marche et qu'il n'y a pas de raison que ça change …</p>
<p>Mon point de vue est clair : à partir du moment où on s'aventure sur ces écosystèmes on est forcément esclaves de ces deux géants. Alors autant tenter le coup avec une application multiplateforme et rapide à développer. Bon pour "rapide" vu le temps passé je pense qu'on pourrait en reparler mais en tout cas je n'ai pas à redévelopper la même chose en code natif objective-c d'un côté et kotlin de l'autre (de mémoire).</p>
<p>Au niveau de cordova, j'aurais bien aimé pouvoir utiliser OpenCV sur l'acquisition directe des images, ça semble vraiment complexe et lourdingue alors je suis resté le plus léger possible:</p>
<ul>
<li>L'appli fait des photos via l'application photo que l'usager décide d'utiliser (merci cordova-plugin-camera), pour android je conseille très fortement l'excellente application OpenNoteScanner <a href="https://github.com/ctodobom/OpenNoteScanner">https://github.com/ctodobom/OpenNoteScanner</a> qui permet de transformer la facturette en noir & blanc, léger à transporter sur le réseau et plus propre à envoyer dans un OCR quand ça sera prêt</li>
<li>Il faut quand même pouvoir découper (cropper) les photos, direction le plugin cordova-plugin-image-cropper</li>
<li>J'ai eu besoin de faire des tests DNS, le plugin cordova-plugin-dns apporte une solution</li>
<li>Du stockage "permanent" de données hop cordova-sqlite-storage</li>
</ul>
<p>Et c'est tout, tout le reste est codé en html5 + jquery + l'excellent onsen.ui dont je suis absolument fan du nom à la française :-)</p>
<p>L'interface est sobre, dépouillée même, mon objectif n'est pas de faire sexy mais d'avoir un outil fonctionnel.</p>
<p>Je prévois quand même de faire une autre version avec un autre toolkit qui serait moins sur la voie de l'expulsion par Apple vu que j'ai des clients ça serait con de leur dire "pardon l'expérience se termine brutalement" :-)</p>
<h3 id="toc-loffre-commerciale">L'offre commerciale</h3>
<p>Même si mon but est qu'on puisse auto-héberger tout ça la demande en solution hébergée existe (et puis finalement auto-hébeger le serveur et mettre tout en place demande quand même pas mal de temps et de compétences).</p>
<p>C'est même elle qui permettra de continuer la petite histoire … le prix de départ est de 5€/mois/utilisateur. 5€ pour économiser des heures d'emmerdes à la fin du mois ça me semble être correct, dis moi toi lecteur quel est ton avis à ce sujet ?</p>
<p>Il faudra avoir un paquet de clients pour que ça puisse payer le salaire du développeur mais j'y crois :-)</p>
<p>Là où ça marque des points c'est que DoliSCAN génère le fichiers des écritures comptables et les envoie tout seul à ton expert comptable à la fin du mois, il n'a donc plus le tas de facturettes scotchées sur des feuilles A4 avec un tableau récapitulatif à re-saisir … il n'a qu'a importer le fichier et valider les écritures … gain de temps énorme et là c'est bien plus de 5€ qu'il économise …</p>
<h3 id="toc-la-liberté-dans-tout-ça-ça-se-prouve">La liberté dans tout ça, ça se prouve !</h3>
<p>Ha oui pardon, je viens de mettre en place <a href="https://doliscan.org">https://doliscan.org</a> c'est même uniquement ça qui motive l'annonce sur linuxfr … jusqu'à présent j'avais tout sur ma forge logicielle (redmine auto hébergée) mais là on change de catégorie.</p>
<h2 id="toc-en-résumé">En résumé:</h2>
<ul>
<li>Le site communautaire: <a href="https://doliscan.org">https://doliscan.org</a>
</li>
<li>Le site commercial en prod: <a href="https://doliscan.fr">https://doliscan.fr</a>
</li>
<li>Le site de test : <a href="https://doliscan.devtemp.fr/">https://doliscan.devtemp.fr/</a>
</li>
<li>Le code du serveur : <a href="https://doliscan.org/fr/serveur">https://doliscan.org/fr/serveur</a>
</li>
<li>Le code du client : <a href="https://doliscan.org/fr/client">https://doliscan.org/fr/client</a>
</li>
<li>La documentation utilisateur <a href="https://doliscan.org/fr/documentation">https://doliscan.org/fr/documentation</a>
</li>
</ul>
<p>Une petite larme coule, la première ligne de code de doliscan remonte au 25/02/2019 pour le serveur et 05/02/2019 pour l'appli cliente … je laisse ici une petite trace dans le cosmos de linuxfr ,-)</p>
<div><a href="https://linuxfr.org/users/erics/journaux/la-petite-histoire-de-la-naissance-d-un-logiciel-libre-de-notes-de-frais-doliscan.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/120621/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/erics/journaux/la-petite-histoire-de-la-naissance-d-un-logiciel-libre-de-notes-de-frais-doliscan#comments">ouvrir dans le navigateur</a>
</p>
ryckshttps://linuxfr.org/nodes/120621/comments.atom