diff --git a/css/style.css b/css/style.css index 2aa785b..c6fdef5 100644 --- a/css/style.css +++ b/css/style.css @@ -1145,9 +1145,37 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { margin-bottom:16px; } +#module-bib .bib-preparation-groups{ + display:grid; + grid-template-columns:repeat(2, minmax(0, 1fr)); + gap:12px; +} + +#module-bib .bib-preparation-group{ + display:flex; + flex-direction:column; + gap:10px; + min-width:0; + padding:12px; + border:1px solid #c8d6e5; + border-radius:8px; + background:#f8fbfe; +} + +#module-bib .bib-preparation-group--quantities{ + background:#fafbfc; +} + +#module-bib .bib-preparation-group h3{ + margin:0; + color:#1e3a6e; + font-size:14px; + font-weight:700; +} + #module-bib .bib-preparation-stats{ display:grid; - grid-template-columns:repeat(4, minmax(0, 1fr)); + grid-template-columns:repeat(2, minmax(0, 1fr)); gap:1px; margin:0; overflow:hidden; @@ -1201,9 +1229,9 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { gap:8px; } -#module-bib .bib-tool-nav--preparation, #module-bib .bib-tool-nav--operations{ - grid-template-columns:repeat(2, minmax(0, 1fr)); + grid-template-columns:minmax(0, 1fr); + max-width:520px; } #module-bib .bib-tool-nav--settings{ @@ -1211,6 +1239,15 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { max-width:520px; } +#module-bib .bib-tool-nav--group{ + grid-template-columns:minmax(0, 1fr); + margin-top:auto; +} + +#module-bib .bib-tool-nav--group-bibs{ + grid-template-columns:repeat(2, minmax(0, 1fr)); +} + #module-bib .bib-tool-btn:nth-child(4){ grid-column:1; } @@ -1631,6 +1668,10 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { flex:1 0 auto; } + #module-bib .bib-preparation-groups{ + grid-template-columns:1fr; + } + #module-bib .bib-preparation-stats{ grid-template-columns:repeat(2, minmax(0, 1fr)); } @@ -1961,7 +2002,7 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { .bib-race-summary{ display:grid; - grid-template-columns:minmax(220px, 1.4fr) minmax(300px, 1.4fr) auto 32px; + grid-template-columns:minmax(220px, 1.2fr) minmax(180px, .9fr) minmax(270px, 1.3fr) 32px; gap:14px; align-items:center; min-height:64px; @@ -2001,6 +2042,21 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { white-space:nowrap; } +.bib-race-summary__group{ + min-width:0; + padding-left:12px; + border-left:1px solid #dbe4f3; +} + +.bib-race-summary__group h4{ + margin:0 0 5px; + color:#6c757d; + font-size:10px; + font-weight:700; + letter-spacing:.03em; + text-transform:uppercase; +} + .bib-race-summary__stats{ display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); @@ -2008,6 +2064,10 @@ ul.ms1-menu-compte li a:hover, ul.ms1-menu-compte li a:active { margin:0; } +.bib-race-summary__group--quantities .bib-race-summary__stats{ + grid-template-columns:repeat(2, minmax(0, 1fr)); +} + .bib-race-summary__stats > div{ min-width:0; } @@ -3326,15 +3386,19 @@ a.ms1-trad-link.btn-aide-trad{ grid-template-columns:minmax(0, 1fr) auto; } - .bib-race-summary__stats{ + .bib-race-summary__group{ grid-column:1 / -1; + padding:8px 0 0; + border-top:1px solid #dbe4f3; + border-left:0; + } + + .bib-race-summary__group--quantities{ grid-row:2; } - .bib-race-summary__status{ - grid-column:1; + .bib-race-summary__group--bibs{ grid-row:3; - justify-self:start; } .bib-race-toggle{ diff --git a/js/v2/bib-assignments.js b/js/v2/bib-assignments.js index ea4ba12..85c57a6 100644 --- a/js/v2/bib-assignments.js +++ b/js/v2/bib-assignments.js @@ -540,7 +540,7 @@ if (toolId === 'event_config') { return 'settings'; } - if (toolId === 'anomalies' || toolId === 'dist_print') { + if (toolId === 'global_batch') { return 'operations'; } return 'preparation'; @@ -2219,17 +2219,6 @@ function bibSyncRaceSummaryStatus(row) { if (!row) return; - var pendingEl = row.querySelector('.bib-race-summary-pending'); - var rangesEl = row.querySelector('.bib-race-summary-ranges'); - var statusEl = row.querySelector('.bib-race-summary__status'); - var pending = parseInt(pendingEl ? pendingEl.textContent : '0', 10) || 0; - var ranges = parseInt(rangesEl ? rangesEl.textContent : '0', 10) || 0; - var ready = pending === 0 && ranges > 0; - - if (statusEl) { - statusEl.classList.toggle('is-ready', ready); - statusEl.textContent = statusEl.getAttribute(ready ? 'data-label-ready' : 'data-label-incomplete') || ''; - } bibRefreshPreparationOverview(); } @@ -2315,6 +2304,12 @@ if (elRestante) { elRestante.value = row.qte_restante; } + let summaryAvailable = document.querySelector( + '.epr-row[data-epr-id="' + eprId + '"] .bib-race-summary-available' + ); + if (summaryAvailable && row.qte_restante !== undefined) { + summaryAvailable.textContent = row.qte_restante; + } let dispoBadge = document.querySelector( '.epr-row[data-epr-id="' + eprId + '"] .epr-header-summary--dispo' diff --git a/php/inc_fx_promoteur.php b/php/inc_fx_promoteur.php index 4b23fb0..b9efd7a 100644 --- a/php/inc_fx_promoteur.php +++ b/php/inc_fx_promoteur.php @@ -3566,6 +3566,9 @@ function fxBibStaticFallback($clef) { 'bib_v5_workspace_operations' => ['fr' => 'Opérations', 'en' => 'Operations'], 'bib_v5_workspace_settings' => ['fr' => 'Réglages', 'en' => 'Settings'], 'bib_v5_preparation_intro' => ['fr' => 'Préparez les épreuves et attribuez les dossards aux inscriptions.', 'en' => 'Prepare races and assign bibs to registrations.'], + 'bib_v5_group_quantities' => ['fr' => 'Quantités', 'en' => 'Quantities'], + 'bib_v5_group_bibs' => ['fr' => 'Dossards', 'en' => 'Bibs'], + 'bib_v5_modes_intro' => ['fr' => 'Utilisez les modes d’assignation qui traitent plusieurs épreuves ou des besoins particuliers.', 'en' => 'Use assignment modes that process multiple races or special requirements.'], 'bib_v5_stat_races' => ['fr' => 'Épreuves actives', 'en' => 'Active races'], 'bib_v5_stat_registered' => ['fr' => 'Inscriptions', 'en' => 'Registrations'], 'bib_v5_stat_assigned' => ['fr' => 'Dossards attribués', 'en' => 'Assigned bibs'], @@ -4813,7 +4816,7 @@ function renderBibWorkspaceTab($strWorkspace, $strTitleClef, $blnActive = false) } /** MSIN-4467 — Résumé événement affiché avant le détail des épreuves. */ -function renderBibPreparationOverview(array $tabEpreuves) { +function renderBibPreparationOverview(array $tabEpreuves, $strAnomBadges = '') { $intRegistered = 0; $intAssigned = 0; @@ -4827,9 +4830,11 @@ function renderBibPreparationOverview(array $tabEpreuves) { } $intPending = max(0, $intRegistered - $intAssigned); - $tabStats = [ + $tabQuantityStats = [ ['value' => count($tabEpreuves), 'key' => 'bib_v5_stat_races', 'tone' => ''], ['value' => $intRegistered, 'key' => 'bib_v5_stat_registered', 'tone' => ''], + ]; + $tabBibStats = [ ['value' => $intAssigned, 'key' => 'bib_v5_stat_assigned', 'tone' => 'success'], ['value' => $intPending, 'key' => 'bib_v5_stat_pending', 'tone' => $intPending > 0 ? 'warning' : 'success'], ]; @@ -4840,14 +4845,38 @@ function renderBibPreparationOverview(array $tabEpreuves) {