2. Développement¶
Sommaire
2.1. Introduction¶
Cette section vise à décrire brièvement les éléments techniques permettant de comprendre les éléments logiciels spécifiques à cette application. Les éléments génériques openMairie sont à consulter sur la documentation openMairie.
2.2. Stratégie¶
Ce logiciel a été développé de façon assez artisanale, avec une orientation plus sur le résultat à court terme pour la collectivité utilisatrice que sur la généricité ou l’évolution. La volonté de rester en phase avec le coeur openMairie a cependant poussé à utiliser des approches qui devraient laisser le code assez évolutif, et faciliter une exploitation industrielle.
2.2.1. Test automatique¶
La stratégie initiale de maintenir un jeu de test de non régression de taille modeste bute sur le problème de disposer de données récentes et sensibles aux jours calendaires. Le coût de tests étant élevé, il n’y a pas de tests automatiques maintenus.
2.2.2. Optimisation¶
Il serait peut-être opportun :
d’alléger les pages à destination des mobiles, théoriquement:
- Une page opeMarchéforain pèse un peu moins de 1 Mo avec de nombreux éléments inutiles pour les écrans ordiphones: JavaScript tinyMCE, …
- Si le cache du javascript, du css et des images est bien permanent sur le navigateur pour une version donnée, chaque page ne pèse plus que le poids du HTML, soit environ 30 ko, qui compressés ne prennent que 5ko environ, soit + pour 100 tickets saisis par jour : 200 pages par jour + pour 20 jours par mois: 4 000 pages par mois + un consommation d’environ 20 000 ko par mois + en ajoutant 25% de marge comprenant les autres pages (connexion, info, placement, …) : 30 Mo par mois
- L’allègement aurait donc surtout pour objectif une exécution plus rapide sur le terminal
d’harmoniser les codes PHP qui sollicitent la base de données, notamment la gestion des erreurs
de moderniser le code Javascript qui réalise la prise de photo depuis la webcam
2.2.3. Surcharges OpenMairie¶
Certaines surcharges historiques ont été supprimées en passant d’OM 4.6 à OM 4.9. D’autres ont été ajoutées dont certaines qui sont très utiles pour faciliter notre exploitation.
2.3. Modèle de données¶
2.3.1. Diagramme relationnel¶
Nous utilisons toutes les tables openMairie sauf celles sur le SIG et celle sur les permissions [1]
Description des tables :
om_collectivite
: Organisation à laquelle est lié le paramétrage (possibilité de partage collectivité / sous-collectivité)om_dashboard
: Paramétrage du tableau de bord par profilom_droit
: Droits accordés aux profilsom_etat
: Editions - Paramétrage des états (équivalents aux lettre-type)om_lettretype
: Editions - Paramétrage des lettre-types (équivalents aux états)om_logo
: Editions -Paramétrage des logos de lettre-types et étatsom_parametre
: Paramétrage de l’applicationom_profil
: Profils proposés aux utilisateurs, conditionnant les droits et le tableau de bordom_requete
: Editions - Paramétrage des requêtes utilisées par les lettre-types et les étatsom_sousetat
: Editions - Etats (tableaux) utilisés par les lettre-type ou étatsom_utilisateur
: Utilisateurs locaux ou synchronisés depuis l’annuaire d’entrepriseom_widget
: Widgets pour les tableaux de bord des profils
Voici les principales tables métier, articulées autour des objets principaux: commerçants, autorisations et marchés [1] Le type de vente est la catégorisaion centrale, elle conditionne le tarif et le mode de facturation, le marché, l’autorisation et le commerçant.
Description des tables :
autorisation
: Autorisation de place fixe ou abonnée, avec un mini flux de validationcivilite
: Liste de référence des civilitéscommercant_marche
: Lien entre commerçant et marché par jour hebdomadaire, avec date de début de fréquentation du marché conditionnant le droit d’accès journaliercommercant_marche_jour
: Element d’autorisation de place fixe ou abonnée pour un commerçant sur un marché étant donné un jour hebdomadairecommercant_nonsed
: Commerçants non sédentaires (forains)document
: Documents télé-versés au dossier des commerçants non sédentairesdocument_type
: Liste de référence des types de documents versés au dossier du commerçantemploye
: Employés d’un commercant non sédentaire, ou collaborateurfacture
: Factures émises pouvant être composées de tickets ou de lignesfacture_ligne
: Lignes de facturation pour les abonnés, cumulant les éléments d’autorisation par tarif et métrageimputation _budgetaire
: Imputation nécessaire à lémission de titres de recettemarche
: Liste de référence des marchés, avec leurs jours d’ouverturemotif
: Liste de référence des motifs de blocage d’un commerçant non sédentairenature_vente
: Liste de référence des natures de produits vendus, une est associée à chaque commerçantplacement
: Enrolement sur la liste de placements des commerçants non sédentaire par jour & marchetarif
: Liste de référence des jeux de tarifs pour les marchéstarif_montant
: Montants pour un jeu de tarif, sur une période donnéeticket
: Tickets émis par les placiers, modifiables avant la facturationticket_import
: Lot de reprise de tickets, fixant les paramètres communs au lot de tickets qui sera importéticket_import_releve
: Relevés des métrages et des commerçants pour un import de tickets.tiers_anomalie
: Anomalie détectée sur un tiers financier pour la facturation abonné.type_vente
: Catégorie de vente conditionnant la compatibilité d’un commerçant avec les marchés, les tarifs et le mode de facturation.
Voici les autres tables métier, indépendantes, notamment celles utilisée pour l’archivage des commerçants [1]
Description des tables :
commercant_archive
: Commerçants non sédentaires archivés sans oubli d’un éventuel impayéfacture_archive
: Factures des commerçant archivésfacture_ligne_archive
: Lignes de facturation des factures archivéesmsginfo
: Message unique d’information à l’attention des utilisateurs (tableau de bord)ticket_archive
: Tickets archivés, encore pris en compte pour statisitquesticket_histo
: Historique des valeurs prises par les tickets, même suppriméstiers
: Tiers financiers, importés du logiciel de gestion financièretitre
: Titres de recette émis, importés du logiciel de gestion financièretraitement
: Journalisation des traitements de données exécutés, servant également de base à l’écran de leur lancement manuel
[1] | (1, 2, 3) Diagrammes produits avec DBvisualizer |
2.3.2. Dimensionnement¶
Limites de numérotation:
- La numérotation des tickets posera problème au delà de
- rang de l’utilisateur n°99 (U)
- rang du marché n°99 (M)
Car les numéros de tickets sont batis, avec la date, sur le modèle: UU-MM-AAMMJJHHMISS
- La numérotation des factures posera problème au delà de 999 999 factures par mois
Pour une année, on supporte facilement:
- 1 500 commerçants
- 20 marchés
- 12 000 factures,
- 100 000 tickets
2.5. Particularités¶
2.5.1. Traitements¶
Le choix d’utiliser une procédure PL/SQL pour le traitement de facturation est historique. Cela diminue la portabilité sur d’autres bases de données, mais reste cohérent sur le choix de PostGreSQL au niveau openMairie pour sa liberté et ses capacités SIG.
2.5.2. Requêtes des éditions¶
Le développement a débuté avant que les requêtes puissent être typée objet, les requêtes sont donc restées en SQL.
2.5.3. Client mobile¶
L’utilisaton d’une application web et non d’une application Android a pour but de :
- simplifier le développement, le déploiement, … en restant dans une application web centrale
- ne pas ajouter d’adhérence à Android, même si actuellement c’est le système d’exploitation très majoritaire des ordiphones avec NFC en accès libre
L’utilisation de Firefox mobile est un choix d’harmonisation avec le client PC, l’essentiel pour que l’ergonomie mobile reste efficacce est que le navigateur autorise un onglet à se fermer lui-même en JavaScript.
Le stylage des écrans pour les mobiles est effectué par « media query » et utilise essentiellement la règle :
display: none;
Pour éviter de restyler le menu, on a préféré utiliser un widget.
Pour être cohérent avec l’ouverture d’un onglet à chaque scan NFC, on a :
- forcé des ouvertures en nouvel onglet depuis le widget « menu placier »
- substitué la fermeture de l’onglet à un chargement de la page d’accueil quand on clique dans le logo sommital, sauf pour la page d’accueil
Pour éviter la surcharge en onglets du navigateur mobile, on a donné la possiblité d’activer un minuteur qui ferme le formulaire (pas la liste) en consultation au bout d’un délai paramétrable (par défaut 60s)
2.5.4. NFC¶
Le choix des badges NFC visait une lecture plus simple que les codes barres ou QRC. Un QRC imprimé sur le badge peut permettre au commerçant d’aller consulter son compte. Il n’y avait pas de solution robuste pour utiliser le lecteur NFC d’un un ordiphone en émulateur clavier comme un lecteur USB de PC. Nous nous sommes donc appuyés sur la détection standard de badge NFC (forum type 2) qui ouvre une fenêtre de navigateur avec l’URL lue sur le badge.
2.5.5. objets spéciques pour l’utilisation sur téléphone¶
Après une première tentative d’utiliser le même objet sur PC et téléphone mobile, on a réalisé que les usages étaient distincts, les quantités de contenu très différentes … bref qu’il était pertinent de gérer un objet pour chaque type de support :
- extension « _par_pc » ou sans extension: à destination des agents administratifs sur écran large (22 pouces)
- extension « _par_telephone » : à destination des agents placier sur le terrain, sur écran réduit (5 pouces)