109 lines
3.7 KiB
SQL
109 lines
3.7 KiB
SQL
-- MSIN-4482 — Réparer liste inscriptions pour imports hors transaction
|
|
-- Contexte : données en BD mais liste / « rapport » trop bas
|
|
-- Liste = p.pec_id = e.pec_id_original AND pec_actif = 1
|
|
-- Notes : exécution UNIQUEMENT sur dev préprod ; autres env = Navicat structure + sync_static_db
|
|
--
|
|
-- AVANT : remplacer 1284 par l'eve_id concerné.
|
|
-- IMPORTANT : ne PAS forcer pec_id_original = pec_id en masse (UNIQUE pec_id_original → 1062).
|
|
|
|
SET @eve := 1284;
|
|
|
|
-- ========== DIAGNOSTIC ==========
|
|
|
|
SELECT COUNT(*) AS n_participants_import
|
|
FROM resultats_participants
|
|
WHERE eve_id = @eve AND par_origine = 'import_fichier';
|
|
|
|
SELECT COUNT(*) AS n_join_ok
|
|
FROM resultats_epreuves_commandees e, resultats_participants p
|
|
WHERE e.eve_id = @eve
|
|
AND p.pec_id = e.pec_id_original
|
|
AND p.par_origine = 'import_fichier'
|
|
AND p.rol_id NOT IN (3, 4)
|
|
AND e.is_cancelled = 0;
|
|
|
|
SELECT COUNT(*) AS n_visibles_liste
|
|
FROM resultats_epreuves_commandees e, resultats_participants p
|
|
WHERE e.eve_id = @eve
|
|
AND p.pec_id = e.pec_id_original
|
|
AND p.par_origine = 'import_fichier'
|
|
AND p.rol_id NOT IN (3, 4)
|
|
AND e.is_cancelled = 0
|
|
AND e.pec_actif = 1;
|
|
|
|
-- Accroche technique import (p.pec_id = e.pec_id) avant réparation
|
|
SELECT COUNT(*) AS n_lie_via_pec_id
|
|
FROM resultats_epreuves_commandees e
|
|
INNER JOIN resultats_participants p
|
|
ON p.eve_id = e.eve_id AND p.pec_id = e.pec_id
|
|
WHERE e.eve_id = @eve
|
|
AND p.par_origine = 'import_fichier';
|
|
|
|
-- ========== FIX A — pec_actif = 1 (AVANT de bouger p.pec_id) ==========
|
|
UPDATE resultats_epreuves_commandees e
|
|
INNER JOIN resultats_participants p
|
|
ON p.eve_id = e.eve_id
|
|
AND p.pec_id = e.pec_id
|
|
AND p.par_origine = 'import_fichier'
|
|
SET e.pec_actif = 1
|
|
WHERE e.eve_id = @eve
|
|
AND e.is_cancelled = 0
|
|
AND IFNULL(e.pec_actif, 0) <> 1;
|
|
|
|
UPDATE resultats_epreuves_commandees e
|
|
SET e.pec_actif = 1
|
|
WHERE e.eve_id = @eve
|
|
AND e.no_panier LIKE CONCAT('I', @eve, 'X%')
|
|
AND e.is_cancelled = 0
|
|
AND IFNULL(e.pec_actif, 0) <> 1;
|
|
|
|
-- ========== FIX B — join sans toucher UNIQUE pec_id_original ==========
|
|
-- L'import a souvent p.pec_id = e.pec_id alors que la liste veut p.pec_id = e.pec_id_original.
|
|
-- On aligne le participant sur pec_id_original (valeur déjà unique).
|
|
UPDATE resultats_participants p
|
|
INNER JOIN resultats_epreuves_commandees e
|
|
ON e.eve_id = p.eve_id
|
|
AND e.pec_id = p.pec_id
|
|
SET p.pec_id = e.pec_id_original
|
|
WHERE p.eve_id = @eve
|
|
AND p.par_origine = 'import_fichier'
|
|
AND e.pec_id_original > 0
|
|
AND p.pec_id <> e.pec_id_original;
|
|
|
|
-- Optionnel / sûr : pec_id_original := pec_id SEULEMENT s'il n'y a PAS de collision UNIQUE
|
|
UPDATE resultats_epreuves_commandees e
|
|
INNER JOIN resultats_participants p
|
|
ON p.eve_id = e.eve_id
|
|
AND (p.pec_id = e.pec_id OR p.pec_id = e.pec_id_original)
|
|
AND p.par_origine = 'import_fichier'
|
|
LEFT JOIN resultats_epreuves_commandees conflict
|
|
ON conflict.pec_id_original = e.pec_id
|
|
AND conflict.pec_id <> e.pec_id
|
|
SET e.pec_id_original = e.pec_id
|
|
WHERE e.eve_id = @eve
|
|
AND e.pec_id_original <> e.pec_id
|
|
AND conflict.pec_id IS NULL;
|
|
|
|
-- Si l'optionnel a bougé pec_id_original, ré-aligner p.pec_id
|
|
UPDATE resultats_participants p
|
|
INNER JOIN resultats_epreuves_commandees e
|
|
ON e.eve_id = p.eve_id
|
|
AND e.no_panier LIKE CONCAT('I', @eve, 'X%')
|
|
AND e.no_panier = p.no_panier
|
|
SET p.pec_id = e.pec_id_original
|
|
WHERE p.eve_id = @eve
|
|
AND p.par_origine = 'import_fichier'
|
|
AND e.pec_id_original > 0
|
|
AND p.pec_id <> e.pec_id_original;
|
|
|
|
-- ========== CONTRÔLE ==========
|
|
SELECT COUNT(*) AS n_visibles_liste_apres
|
|
FROM resultats_epreuves_commandees e, resultats_participants p
|
|
WHERE e.eve_id = @eve
|
|
AND p.pec_id = e.pec_id_original
|
|
AND p.par_origine = 'import_fichier'
|
|
AND p.rol_id NOT IN (3, 4)
|
|
AND e.is_cancelled = 0
|
|
AND e.pec_actif = 1;
|
|
-- Attendu : proche de n_participants_import.
|