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 à consluter sur la documentation openMairie.
2.2. Stratégie¶
Ce logiciel a été développé de façon assez pragmatique, c’est à dire souvent rustique. 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 cible est de maintenir un jeu de test de non régression de taille modeste. Il n’y a pas eu de test automatique avant la version 2, la version 1 étant à vocation éphémère. Les premiers tests automatisés pourraient apparaitre avec cette version 2, sur la base des tests manuels les plus pertinents des fonctionnalités les plus pérennes (fond et forme).
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
- …
2.3. Modèle de données¶
2.3.1. Diagramme relationnel¶
Voici pour mémoire les tables openMairie [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 tables métier, articulées autour des objets principaux: commerçants et marchés [1]
Description des tables :
civilite
: 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écommercant_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 émisesmarche
: 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édentairemsginfo
: Message unique d’information à l’attention des utilisateurs (tableau de bord)nature_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 & marchesirene_alerte
: Alerte du SIRENE associée à une fiche commerçant portant sur un établissement de l’entreprisesirene_eve
: Description des codes du champ EVE au SIRENEsirene_vmaj
: Description des codes du champ VMAJ au SIRENEtarif
: 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éetemp_sirene_xl2
: Table temporaire pour charger l’export quotidien au format XL2 du SIRENE, description sur sirene.fr ou opendata.gouv.frticket
: Tickets émis par les placiers, modifiables avant la facturationticket_histo
: Historique des valeurs prises par les ticketsticket_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.traitement
: Journalisation des traitements de données exécutés, servant également de base à l’écran de leur lancement manuel
[1] | (1, 2) 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. Il s’appuie sur l’idée qu’un gros traitement sera optimal s’il est traité par la base de données. Cela diminue la portabilité sur d’autres bases de données, mais reste cohérent sur le choix de PostGreSQL au niveau openMairie.
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ée en SQL.
2.5.3. Client mobile¶
L’utilisaton d’un 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. De plus, Chrome n’offre a priori pas l’option d’autoriser l’auto-fermeture d’onglet par Javascript, ce qui empile les onglets à chaque nouveau ticket/placement … ce qui semble générer de l’instabilité un peu après la centaine.
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
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)