39 Commits

Author SHA1 Message Date
Thomas Fransolet
762448c654 Lot F : écran d'audit log et compteur d'utilisateurs
Écran « Activité » sur GET /api/Audit, réservé au SuperAdmin comme la policy
de l'endpoint (menuId 13, conditionné à role.value == 0). Filtres instance,
type d'entité, utilisateur et plage de dates, pagination 50, clic sur une
ligne pour le détail avant/après en table plutôt que le JSON brut. Les ids
d'instance et d'utilisateur sont résolus en noms, un id absent de l'annuaire
restant affiché tel quel : le journal doit rester lisible après la
suppression de ce qu'il décrit.

manager_api_new n'est pas touché. L'écran passe par un http.get direct au
Bearer, comme _loadKnowledge / _loadInsights / _reindex du Guide IA : une
lecture seule ne justifie pas d'étendre un client qui s'édite à la main, et
le déclencheur de génération n'existe plus depuis le lot A.

Côté utilisateurs, compteur « X / 5 » et bouton d'ajout désactivé au
plafond. Le SuperAdmin en est exclu : son GET /api/User renvoie toutes les
instances, compter cette liste contre un plafond par instance n'aurait
aucun sens. Le masquage du rôle SuperAdmin pour un InstanceAdmin, resté en
question dans todo-features.md, était déjà fait — _allowedRoles filtre sur
r >= callerRole.

Trois pièges relevés en câblant :

- AuditController renvoie les entités brutes, pas un DTO — les champs sont
  ceux d'AuditLog en camelCase.
- invokeAPI ne lève pas sur un code d'erreur et son résultat était ignoré
  dans users_screen : un e-mail déjà utilisé (409) ou un rôle refusé (403)
  ne produisait aucun message. Le statut est désormais testé et le corps
  affiché, ce qui rendra visible sans retouche le futur 422 du plafond.
- DropdownButtonFormField ne relit pas initialValue sur reconstruction
  (FormField.didUpdateWidget ne traite que forceErrorText) : « Réinitialiser
  les filtres » vidait la requête sans vider l'affichage. Remplacé par un
  DropdownButton piloté.

40 clés i18n FR/EN/NL, flutter gen-l10n relancé. flutter analyze propre sur
les dossiers travaillés, flutter build web vert.

Deux dettes serveur restent ouvertes, hors périmètre de ce commit : le
plafond de 5 n'est pas appliqué par UserController (ce qui est livré ici est
un garde-fou d'interface, un POST direct passe toujours), et aucune section
n'est journalisée — AuditedTypes.Contains exige l'égalité exacte alors que
Section est abstraite. Détail dans DOCS/todo-features.md et v1-plan.md lot F.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 11:04:40 +02:00
Thomas Fransolet
bb4d4fe2d5 Écran Statistiques refondu + Guide IA + onboarding (auth, abonnement) + i18n FR/EN/NL
Statistiques — refonte complète, aucun changement backend
  statistics_screen.dart réécrit (+1832) : barres horizontales monochromes à la place
  des barres verticales tronquées et des deux anneaux, barre de filtres unique avec les
  volumes par canal, règle mono-canal, 4 KPI portant chacun leur variation, bandeau
  « à retenir », courbe en aire avec bandes de week-end. La période précédente s'obtient
  en rappelant le même endpoint.
  statistics_report.dart : export PDF généré côté client (paquet pdf Dart), il partage
  les valeurs calculées de l'écran — un chiffre ne peut pas diverger entre l'écran et le
  document envoyé à la commune. Deux puces du sommaire promettaient des données
  inexistantes (parcours terminés, questions au guide IA), retirées.
  ⚠️ Jamais ouvert dans un navigateur. Cases de test : test-plan.md §8bis / §8ter.

Guide IA
  Screens/GuideIa/guide_ia_screen.dart — onglet Configuration. Menu conditionné à
  isAssistant, le même drapeau que la garde d'AiController. L'onglet « Ce que demandent
  vos visiteurs » n'est pas dans ce commit : le schéma backend est prêt, l'UI non.

Onboarding self-service
  Screens/Auth/ (mot de passe oublié, définition du mot de passe),
  Screens/Billing/subscription_screen.dart, ai_quota_hint.dart.
  ⚠️ Aucun parcours joué de bout en bout — test-plan.md §18.

Parcours guidés
  progression_mode.dart : 9 booléens sur 3 niveaux remplacés par 3 questions.
  Popups GuidedPath / GuidedStep / QuizQuestion mises à jour en conséquence.

Client API (manager_api_new) — édité À LA MAIN, ne pas relancer la génération
  onboarding_api.dart, authentication_api.dart (+80), instance_dto (champs Guide*),
  guided_step / quiz_question_guided_step (flags morts retirés).
  Le // @dart=2.18 manquant dans onboarding_api.dart cassait les 3 apps Flutter d'un
  coup — corrigé ici.

i18n : ~180 clés par langue (FR/EN/NL) + fichiers générés.
Tests : progression_mode_test, statistics_report_test (le second a attrapé deux
plantages qui seraient sortis au premier clic).

flutter build web . flutter analyze : 68 erreurs, toutes dans les fichiers modèle
orphelins de manager_api_new — dette connue, pas une régression, ces fichiers ne sont
pas dans le graphe de compilation.
2026-08-09 22:14:37 +02:00
Thomas Fransolet
8073cced5e refacto to aitoken 2026-07-17 15:20:41 +02:00
Thomas Fransolet
205f1ec933 Misc 2026-05-09 00:23:04 +02:00
Thomas Fransolet
2e8b82aa80 Wip manager app, update to support web + fix section event layout 2026-05-07 16:48:58 +02:00
Thomas Fransolet
0059582e9f Multi langues + Assign plan dialog + display quotas + translator IA 2026-04-10 17:17:49 +02:00
Thomas Fransolet
f90f014f36 Add roles garde fou + update gradle + wip sectionAgenda (online and manual) + update EventConfig + missing fields in GuidedSteps update popup + updates in stats screen 2026-03-25 17:41:32 +01:00
Thomas Fransolet
b7bd8588fe To test - role and switch instance 2026-03-13 17:40:55 +01:00
Thomas Fransolet
b9ab5238ba Add stat screen (wip) to be tested + ia assistant activation for mobile (todo add to tablet) + SERVICE GENERATION 2026-03-13 15:07:39 +01:00
Thomas Fransolet
61b3289e35 Wip manager, mobile layout + login and added logo + finetuning menu and drawer etc 2025-10-04 23:24:46 +02:00
Thomas Fransolet
4501aaac9c clean code (main screen) + support routes navigation (not yet detail) 2025-08-20 18:15:00 +02:00
Thomas Fransolet
61fd4a44a1 Fix session not working 2025-08-14 23:24:18 +02:00
Thomas Fransolet
2b0ac1ed0b wip support appconfigLink + update min size for elements in main views 2025-08-14 22:25:33 +02:00
Thomas Fransolet
e2edbfd596 wip mobile submenu + service generation + misc 2025-08-14 16:29:40 +02:00
Thomas Fransolet
4ab7b56046 update menu 2025-08-13 16:23:19 +02:00
Thomas Fransolet
dc2ef710f8 Update menu to support drawer for mobile and added new submenu (application) 2025-08-01 16:24:34 +02:00
Thomas Fransolet
4818a1af52 Configuration (create, update, del) + Section (create, update, del)
more test to be sure for section but should be ok
2025-05-13 17:12:04 +02:00
Thomas Fransolet
5564810e75 Update gradle, kotlin version to match docker build 2024-06-21 09:47:55 +02:00
Thomas Fransolet
09c8cc7cfd Added JsonUrl (to test) 2024-01-24 17:08:06 +01:00
Thomas Fransolet
a646adc550 update service generation + Update Quiz + Puzzle + Map 2023-12-27 18:11:25 +01:00
Thomas Fransolet
9d099a201c Wip handle new entities and updates for visitNamur 2023-12-15 17:00:57 +01:00
Thomas Fransolet
dca7474551 Init version 2.0.0 + wip visitNamur request + wip upload resource to firebase 2023-12-14 17:52:07 +01:00
Thomas Fransolet
ff18f37b1b Add pinCode to manager + show devices tab (fort logic) 2023-12-05 14:38:47 +01:00
Thomas Fransolet
2bef54f267 HTML component test + responsive test 2023-06-21 17:21:59 +02:00
a3a62d1903 Null safety ! 2023-04-01 16:52:13 +02:00
ed9c4bfc15 Update openapi generation .. + update code + fix issue on authenticate try on build 2022-12-22 17:30:37 +01:00
99aaad3f50 Add local storage + update audioIds for Article + fix small layout bugs 2022-12-22 14:32:43 +01:00
eddc4005ae Add audio in web + update code for resource .. 2022-10-27 17:32:44 +02:00
e6e20d1a0e Fix label in french + resolve qrcodes font issue 2022-10-21 17:54:19 +02:00
164f904f13 Update layout + remove Devices in menu 2022-10-13 17:30:37 +02:00
d30223eb1f Clean code + add icons (mymuseum) 2022-09-14 17:48:58 +02:00
98e066c712 PDF QRCode download + code clean 2022-06-23 17:48:02 +02:00
Thomas Fransolet
4a516d8d29 Add msix, translate in french (wip) 2021-08-25 18:12:49 +02:00
Thomas Fransolet
86e4beb362 Remember me + encrypt password in json file ! 2021-07-29 16:14:39 +02:00
Thomas Fransolet
fe6fe9edc5 Clean code 2021-07-26 18:52:33 +02:00
Thomas Fransolet
9a80df689f Add logout 2021-06-19 14:57:31 +02:00
Thomas Fransolet
1ed3912b27 Configuration detail page + navigation between list and detail + confirm dialog + color picker + string input container 2021-04-29 21:32:00 +02:00
Thomas Fransolet
1a043ec675 Add side menu + children (devices, configurations & resources) 2021-04-21 18:26:37 +02:00
Thomas Fransolet
ea7f3876c1 Add login screen + logic + appcontext + redirection to main 2021-04-20 17:10:15 +02:00