Commit Graph

77 Commits

Author SHA1 Message Date
Colin Maudry 3034e911e7 feat(tableau): masquage du bloc de partage piloté par événements AG Grid (#112)
Remplace le verrou de dérive à compteur (suppress-next) par une détection
événementielle : eventListeners AG Grid (filterChanged/sortChanged) →
dashAgGridFunctions.hideShareOnUserAction, qui efface active-view sur action
utilisateur (source != 'api') et ignore l'écho de l'application programmatique.

Le compteur suppress-next souffrait d'une course d'ordonnancement Dash (l'écho
lisait la valeur pré-batch) et le diff de columnState était impraticable (état
réémis bruité). La visibilité du bloc bascule via la classe (d-flex/d-none) et
non le style inline, car .d-flex est display:flex !important.

Task 7 : test E2E de bout en bout (application + masquage sur action).
2026-07-13 18:41:36 +02:00
Colin Maudry 2a22951829 feat(tableau): verrou de derive + affichage du bloc de partage (#112) 2026-07-13 17:34:29 +02:00
Colin Maudry 301a8668b3 feat(tableau): resolution ?vue= + bloc URL de partage (#112) 2026-07-13 17:32:48 +02:00
Colin Maudry 10c1e45d71 Update version de Dash dans CLAUDE.md 2026-07-13 12:01:00 +02:00
Colin Maudry b4e778ab8c Mode d'emploi tableau 2026-07-13 07:50:34 +02:00
Colin Maudry 6dd7dca271 Améliorations sur le style de l'ag grid, ajout nb marchés uniques #47 2026-07-12 20:44:43 +02:00
Colin Maudry f580459bd5 Améliorations sur le style de l'ag grid #47 2026-07-11 16:58:36 +02:00
Colin Maudry 117ce9a4ab fix(tableau): filtres à conditions multiples ignorés + tri non réinitialisé (#41)
Deux bugs découverts en usage réel sur /tableau :

1. filtermodel_to_ast lisait condition1/condition2 pour un filtre à
   deux conditions (ET/OU) sur une colonne — mais AG Grid >=29.2 (la
   version 35.2.0 utilisée ici) encode ça via une liste `conditions`,
   confirmé par la doc Dash AG Grid "Filter Model & Dash Callbacks" >
   "Filter Model Multiple Conditions". Le filtre était donc
   silencieusement ignoré (colonne exclue du AST, comme si aucun
   filtre n'était posé), d'où des résultats sans rapport avec les
   valeurs saisies. Corrigé : filtermodel_to_ast lit désormais
   `conditions` (N éléments) en priorité, avec repli sur
   condition1/condition2 (forme dépréciée mais "still accepted" selon
   AG Grid). L'inverse (ast_to_filtermodel, utilisé au rappel d'une
   vue sauvegardée) produit aussi la forme `conditions`.

2. Le bouton "Réinitialiser" ("Supprime tous les filtres et les tris")
   ne réinitialisait que filterModel, jamais le tri. Corrigé via
   resetColumnState (remet les colonnes à l'état de columnDefs, qui
   reflète déjà la visibilité choisie via le sélecteur de colonnes —
   seul le tri est donc affecté).

Reproduit et corrigé en TDD (tests/test_query_ast.py,
tests/test_grid.py), vérifié manuellement en navigateur par l'auteur
du rapport de bug.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 20:21:53 +02:00
Colin Maudry 4f36022443 fix(tableau): vues sauvegardées en AST canonique, cache du comptage, synchro visibilité colonnes (#41) 2026-07-10 14:44:14 +02:00
Colin Maudry 0bfac680a5 fix(tableau): vues sauvegardées pré-migration + double comptage track_search (#41)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-10 14:34:47 +02:00
Colin Maudry 055b0edc7e docs(tableau): mode d'emploi réécrit pour AG Grid (#41)
Décrit les filtres de colonne AG Grid (flottant/entonnoir, texte/numérique/
date, combinaison ET/OU), le tri multi-colonne (Maj+clic) et le défilement
infini, à la place de l'ancienne syntaxe icontains/i</i> et des liens
d'exemple ?filtres=... (mécanisme retiré à la tâche 10). Retire la ligne
"Partager la vue" de la légende des boutons (bouton supprimé).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-10 13:53:19 +02:00
Colin Maudry 8efd8db07e feat(tableau): vues sauvegardées en JSON AST, retrait URL riche (#41)
Les vues stockent désormais {filterModel, columnState} en JSON dans
saved_views.query au lieu d'une query string DSL. Le rappel d'une vue
applique filterModel + columnState à la grille AG Grid via un nouveau
callback apply_saved_view, déclenché par pattern-matching sur les items
du menu "Mes vues" (désormais cliquables au lieu de liens href).

Retire restore_view_from_url, sync_url_and_reset_button,
show_confirmation, le bouton "Partager la vue" et le clientside
clean_filters de tableau.py - la migration AG Grid retire le mécanisme
d'URL riche sans rétrocompatibilité.

Le lien "Ouvrir" de compte/vues.py pointe maintenant vers /tableau nu
(limitation connue documentée, le rappel cross-page reste à faire).
2026-07-10 08:35:31 +02:00
Colin Maudry fbea2ebd53 feat(tableau): export Excel via DuckDB (AST->SQL) (#41)
Rewrite download_data to read filterModel/columnState from the AG Grid
component and add export_dataframe (compiles filterModel to SQL via
filtermodel_to_ast/ast_to_sql, builds ORDER BY, excludes hidden columns,
queries DuckDB via query_marches). Replaces the old Polars filter_query
pipeline tied to the removed DataTable.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-10 08:26:10 +02:00
Colin Maudry 436906911b feat(tableau): sélecteur de colonnes piloté par columnDefs (#41)
apply_hidden_columns régénère columnDefs (via grid_column_defs) sur
tableau_grid quand le Store tableau-hidden-columns change, remplaçant
store_hidden_columns qui ciblait l'ancienne prop hidden_columns de la
DataTable (supprimée en tâche 7). update_checkboxes_from_hidden_columns
lit désormais directement le Store plutôt que la prop de la DataTable
disparue, pour que la synchronisation cases à cocher <-> colonnes
masquées continue de fonctionner.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-10 08:17:44 +02:00
Colin Maudry 4c1c1cc987 feat(tableau): grille AG Grid + datasource getRows server-side (#41)
Remplace le composant DataTable et le callback update_table de tableau.py
par la grille dash-ag-grid (mode ligne infini) et un callback get_rows_tableau
piloté par getRowsRequest/getRowsResponse, plus un callback update_meta qui
synchronise nb_rows/btn-download-data/download-hint via un dcc.Store du total.

Les autres callbacks de la page (sélecteur de colonnes, vues sauvegardées,
export, restauration URL, aide) référencent encore les anciens
id/props (tableau_datatable, hidden_columns, filter_query, sort_by) et seront
mis à jour dans les tâches suivantes (8-11) du plan de migration #41.
2026-07-10 08:11:06 +02:00
Colin Maudry 9b124deeea refactor: rebrand decp.info to colibre #57
- Rename project from decp.info to colibre across all codebase
- Update domain from https://decp.info to https://colibre.fr
- Update GitHub repo references to ColinMaudry/colibre
- Rename deployment files: decpinfo-backup.* → colibre-backup.*
- Update project configuration and documentation
- Rename project assets: decp.info.png → colibre.png
- Update environment variables and constants (DOMAIN_NAME, TOKEN_PREFIX, GITHUB_REPO, etc.)
- Update URLs in all pages, tests, and configuration files
- Keep DECP acronym in text (unchanged per requirements)
- Add rebrand note to README.md

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-30 21:43:33 +02:00
Colin Maudry 8825e76101 Possible de remplacer une vue existante #95 2026-06-30 16:59:37 +02:00
Colin Maudry f04e1b4c44 Petites améliorations tableau.py 2026-06-30 15:14:43 +02:00
Colin Maudry 78534000a0 refactor(tableau): barre d'outils compacte sur une ligne + légende d'aide
Barre d'outils repensée au-dessus du tableau :
- boutons compacts (size=sm) sur une seule rangée + ligne d'infos discrète
  en dessous (2 lignes au total sur desktop)
- libellés explicites (Sauvegarder la vue, Partager la vue, Télécharger
  (Excel)), espacement homogène, couleurs conformes à la charte
  (neutre=secondary, Réinitialiser=danger outline)
- Mode d'emploi rejeté en fin de barre via CSS order (DOM/callbacks intacts)
- .table-menu (3 autres pages) laissée intacte

Téléchargement bloqué (>65 000 lignes) : la raison s'affiche en clair dans
la ligne d'infos (fiable cross-browser) plutôt que dans une infobulle sur
bouton désactivé. Override scopé au tableau via update_table ; acheteur/
titulaire non touchés.

Mode d'emploi : légende en tête listant chaque bouton reproduit (inerte)
en face de sa fonction.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 14:33:28 +02:00
Colin Maudry b2806d6176 fix: erreur rename dupliqué + feedback modal visible #95
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 16:45:47 +02:00
Colin Maudry 7c77524a3a feat: UI sauvegarde et application des vues sur /tableau #95 2026-06-29 16:29:58 +02:00
Colin Maudry 22fc0cbab2 refactor: extrait build_view_query et le réutilise dans le partage #95
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 16:19:51 +02:00
Colin Maudry a5e802d20a refactor: use write_styled_excel in all download callbacks #83 2026-06-23 17:14:16 +02:00
Colin Maudry 83d38f8489 Correction du mode d'emploi sur l'accentuation 2026-06-23 15:48:37 +02:00
Colin Maudry b8d73c7f7b fix: omettre temporalCoverage si date inconnue + TimeoutException explicite (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 17:58:23 +02:00
Colin Maudry cb93dbe05a feat: chargements de pages best-effort au boot (tableau, sources) (#78)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 13:58:50 +02:00
Colin Maudry e55f3447db Possibilité de charger les données depuis une URL, memoisation de last_modified 2026-06-04 21:34:36 +02:00
Colin Maudry d8ee6e5b37 Màj du mode d'emploi de Tableau #42 2026-04-24 12:31:46 +02:00
Colin Maudry e44fe452b2 Corrections de typage et d'appels à filter_table_data 2026-04-19 23:55:20 +02:00
Colin Maudry 0c7ca04f8e refactor: move track_search out of filter_table_data into callers (#72)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 22:32:28 +02:00
Colin Maudry e4e1438220 Refactorisation des fonctions utils 2026-04-18 18:33:09 +02:00
Colin Maudry e352624c02 Capitalisation des constantes 2026-04-18 18:09:42 +02:00
Colin Maudry 5ecfb463f3 tableau.py : migration vers query_marches et schema depuis src.db (#71) 2026-04-16 11:08:45 +02:00
Colin Maudry ade9a20926 Tableau applique bien la liste de colonnes par défaut 2026-04-14 17:39:52 +02:00
Colin Maudry 7b78e0a0ea Style, ordre des années #65 2026-03-21 12:09:00 +01:00
Colin Maudry 0ac6c55d9e Correction imports 2026-03-18 23:21:47 +01:00
Colin Maudry 4619dd2708 Correction du téléchargemnent buggé dans /tableau + test 2026-02-22 18:39:31 +01:00
Colin Maudry adda58bada Suppresion des liens canoniques, pas trouvé comment les insérer assez tôt 2026-02-17 14:24:46 +01:00
Colin Maudry 472fbb7cbb Améliorations des textes et petits ajustements 2026-02-05 17:16:31 +01:00
Colin Maudry cb885eeb90 Utilisation des options de persistence de Dash 2026-02-04 23:59:01 +01:00
Colin Maudry ad9b4f0fdf Nettoyage des filtres aussi sur acheteur (clientside callback) 2026-02-04 12:17:41 +01:00
Colin Maudry 55e2992559 id table => tableau_datatable 2026-02-02 19:51:21 +01:00
Colin Maudry deba0a244e Ajout d'un lien canonique vers chaque page dans le head #70
Dynamique, donc pas sûr que les moteurs de recherche le voit.
2026-02-02 18:28:50 +01:00
Colin Maudry ef11184286 Les colonnes masquées sont stockées en LocalStorage et correctement synchronisées 2026-02-02 17:11:32 +01:00
Colin Maudry 7b3ea9c580 Les tris sont stockés en LocalStorage 2026-01-31 19:12:34 +01:00
Colin Maudry bfc4065cbb Les filtres sont stockés en LocalStorage 2026-01-31 18:28:19 +01:00
Colin Maudry 41a832d7be Tableau de choix des colonnes aussi sur les pages acheteur et titulaire 2026-01-31 17:38:54 +01:00
Colin Maudry 1561cb3c9a Tableau de choix des colonnes => filtrable 2026-01-31 01:44:11 +01:00
Colin Maudry f1725a95f8 Une ligne de boutons 2026-01-31 01:41:08 +01:00
Colin Maudry 8f5d38ff78 Petites améliorations sur les boutons 2026-01-31 01:29:37 +01:00