From 79d6fbfed8dd5535825b5df6567cd2c0d3cdec39 Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 30 Jul 2026 11:56:22 -0400 Subject: [PATCH] =?UTF-8?q?MSIN-4534=20=E2=80=94=20Refactor=20bib=20assign?= =?UTF-8?q?ment=20logic=20to=20streamline=20refresh=20processes,=20ensurin?= =?UTF-8?q?g=20a=20single=20paint=20operation=20post-GO=20and=20deferring?= =?UTF-8?q?=20UI=20state=20synchronization=20until=20final=20stats=20are?= =?UTF-8?q?=20available.=20Update=20version=20code=20to=204.72.918.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/v2/bib-assignments.js | 65 +++++++++++++++-------- php/inc_fx_promoteur.php | 4 +- php/inc_settings.php | 2 +- sql/MSIN-4534-bib-sort-labels-niveaux.sql | 30 +++++++++++ 4 files changed, 78 insertions(+), 23 deletions(-) create mode 100644 sql/MSIN-4534-bib-sort-labels-niveaux.sql diff --git a/js/v2/bib-assignments.js b/js/v2/bib-assignments.js index cac8edb..96eeee8 100644 --- a/js/v2/bib-assignments.js +++ b/js/v2/bib-assignments.js @@ -117,14 +117,16 @@ } } - // Après reset : refresh lite sans loader plein écran ni panneau anomalies. - if (isResetMode) { - options.loader = false; - options.skipAnomalies = true; - options.refreshLite = true; + // MSIN-4534 — Après GO : une seule paint (refresh lite + stats), pas de hop-hop menus. + options.skipAnomalies = true; + options.skipQtySummary = true; + options.refreshLite = true; + options.skipSync = true; + if (options.loader === undefined) { + options.loader = !isResetMode; } - bibAfterBatchGoRefreshOnly(row, isResetMode, options); + return bibAfterBatchGoRefreshOnly(row, isResetMode, options); } function bibAfterBatchGoRefreshOnly(row, isResetMode, options) { @@ -163,11 +165,12 @@ cb.disabled = false; }); - syncBibUiState(row); - + // MSIN-4534 — Pas de syncBibUiState ici (stats encore stale → Réinit en retard). var useLoader = options.loader !== false; var skipAnomalies = options.skipAnomalies === true; + var skipQtySummary = options.skipQtySummary === true; var refreshLite = options.refreshLite === true || isResetMode === true; + var skipSyncUntilStats = options.skipSync === true; return bibFetch('/ajax_bib_range.php', { method: 'POST', @@ -191,7 +194,11 @@ return; } - let containerRef = setBibContainerFromAjax(row, refresh, { skipAnomalies: skipAnomalies }); + let containerRef = setBibContainerFromAjax(row, refresh, { + skipAnomalies: skipAnomalies, + skipQtySummary: skipQtySummary, + skipSync: skipSyncUntilStats + }); if (!containerRef) { return; } @@ -209,11 +216,9 @@ .then(function (res) { return res.json(); }) .then(function (stats) { - if (!stats.success) { - return; + if (stats && stats.success) { + bibSyncEprBibStats(row, stats.info); } - - bibSyncEprBibStats(row, stats.info); syncBibUiState(row); }); }); @@ -381,9 +386,18 @@ if (data.complete) { if (showResult) { - bibAfterBatchGoSuccess(row, data, false); - } else if (!deferUiRefresh) { - bibAfterBatchGoRefreshOnly(row, false, { loader: false, skipAnomalies: true }); + // MSIN-4534 — Attendre refresh+stats avant de baisser le loader (pas de hop-hop menus). + return bibAfterBatchGoSuccess(row, data, false, { loader: false }) + .then(function () { return data; }); + } + if (!deferUiRefresh) { + return bibAfterBatchGoRefreshOnly(row, false, { + loader: false, + skipAnomalies: true, + skipQtySummary: true, + refreshLite: true, + skipSync: true + }).then(function () { return data; }); } return data; } @@ -1628,7 +1642,10 @@ } return bibAfterBatchGoRefreshOnly(row, false, { loader: false, - skipAnomalies: true + skipAnomalies: true, + skipQtySummary: true, + refreshLite: true, + skipSync: true }); }); }); @@ -1745,7 +1762,10 @@ } return bibAfterBatchGoRefreshOnly(row, false, { loader: false, - skipAnomalies: true + skipAnomalies: true, + skipQtySummary: true, + refreshLite: true, + skipSync: true }); }); }); @@ -3307,7 +3327,10 @@ initModuleBibTippy(row); initBibRangeRows(container); } - syncBibUiState(row); + // MSIN-4534 — skipSync : différer syncBibUiState jusqu'aux stats finales (évite menus en retard). + if (!opts.skipSync) { + syncBibUiState(row); + } if (!opts.skipAnomalies) { refreshBibAnomaliesPanel(); } @@ -4199,7 +4222,7 @@ } // MSIN-4528 — même chemin que reset séquence (pas de grille HTML). - bibAfterBatchGoSuccess(row, data, true); + return bibAfterBatchGoSuccess(row, data, true); }); return; @@ -4715,7 +4738,7 @@ return; } - bibAfterBatchGoSuccess(row, data, true); + return bibAfterBatchGoSuccess(row, data, true); }); return; diff --git a/php/inc_fx_promoteur.php b/php/inc_fx_promoteur.php index 1bbedc9..e7e63fd 100644 --- a/php/inc_fx_promoteur.php +++ b/php/inc_fx_promoteur.php @@ -3869,7 +3869,9 @@ function fxBibStaticFallback($clef) { 'bib_v4_global_batch_free_plan_invalid' => ['fr' => 'Sélection invalide : Début, Fin (ou Qté) et au moins une épreuve avec inscriptions à assigner.', 'en' => 'Invalid selection: Start, End (or Qty) and at least one race with registrations to assign.'], 'bib_v4_ajax_global_free_analysis' => ['fr' => '%d épreuve(s) · plage %d → %d · %d à assigner · %s', 'en' => '%d race(s) · range %d → %d · %d to assign · %s'], 'bib_v4_ajax_global_free_sim_summary' => ['fr' => '%d épreuve(s) · %d dossards · %d à assigner · %s', 'en' => '%d race(s) · %d bibs · %d to assign · %s'], - 'bib_v4_batch_order_2' => ['fr' => 'Tri secondaire', 'en' => 'Secondary sort'], + // MSIN-4534 — Libellés homogènes niveau 1–4 + 'bib_v4_batch_order' => ['fr' => 'Tri niveau 1', 'en' => 'Sort level 1'], + 'bib_v4_batch_order_2' => ['fr' => 'Tri niveau 2', 'en' => 'Sort level 2'], 'bib_v4_batch_order_3' => ['fr' => 'Tri niveau 3', 'en' => 'Sort level 3'], 'bib_v4_batch_order_4' => ['fr' => 'Tri niveau 4', 'en' => 'Sort level 4'], 'bib_v4_batch_order_none' => ['fr' => '— Aucun —', 'en' => '— None —'], diff --git a/php/inc_settings.php b/php/inc_settings.php index 8e8d869..541d3d4 100644 --- a/php/inc_settings.php +++ b/php/inc_settings.php @@ -7,7 +7,7 @@ * Constantes * * **************/ -define('_VERSION_CODE', '4.72.917'); // MSIN-4530 — 4 niveaux visibles comme 4514 + fix reset hide-all +define('_VERSION_CODE', '4.72.918'); // MSIN-4534 — fin GO sans hop-hop + libellés Tri niveau 1/2 define('_DATE_CODE', '2026-07-30'); //MSIN-4290 define('QR_SECRET_KEY', 'ms1_qr_2026_cle_secrete_longue_et_fixe'); diff --git a/sql/MSIN-4534-bib-sort-labels-niveaux.sql b/sql/MSIN-4534-bib-sort-labels-niveaux.sql new file mode 100644 index 0000000..ee9521d --- /dev/null +++ b/sql/MSIN-4534-bib-sort-labels-niveaux.sql @@ -0,0 +1,30 @@ +-- MSIN-4534 — Libellés tris batch : Tri niveau 1 / 2 (alignés sur 3 / 4) +-- Notes : exécution UNIQUEMENT sur dev préprod ; autres env = Navicat structure + sync_static_db + +UPDATE info +SET info_texte = 'Tri niveau 1', + info_aide = 'Premier critère de tri avant d''attribuer les dossards.' +WHERE info_clef = 'bib_v4_batch_order' + AND info_langue = 'fr' + AND info_prg = 'compte.php'; + +UPDATE info +SET info_texte = 'Sort level 1', + info_aide = 'Primary sort before assigning bibs.' +WHERE info_clef = 'bib_v4_batch_order' + AND info_langue = 'en' + AND info_prg = 'compte.php'; + +UPDATE info +SET info_texte = 'Tri niveau 2', + info_aide = 'Critère optionnel après le tri niveau 1.' +WHERE info_clef = 'bib_v4_batch_order_2' + AND info_langue = 'fr' + AND info_prg = 'compte.php'; + +UPDATE info +SET info_texte = 'Sort level 2', + info_aide = 'Optional criterion after sort level 1.' +WHERE info_clef = 'bib_v4_batch_order_2' + AND info_langue = 'en' + AND info_prg = 'compte.php';