96 lines
3.9 KiB
SQL
96 lines
3.9 KiB
SQL
-- ============================================================================
|
|
-- PTA V7.5 - Quota PTA sur l'année civile
|
|
-- MySQL 8+
|
|
-- À exécuter après la V7 / V7.4.
|
|
-- ============================================================================
|
|
-- Règle métier :
|
|
-- * 1607 h à 100 % sont planifiées sur l'année civile : 01/01 -> 31/12.
|
|
-- * la date de début du contrat reste une information RH et ne décale plus
|
|
-- la période annuelle du PTA ;
|
|
-- * un agent peut participer à des équipes périscolaires ET extrascolaires.
|
|
-- Aucun type périscolaire/extrascolaire n'est porté par l'agent.
|
|
--
|
|
-- Cette migration ne supprime pas les anciens PTA construits sur une période
|
|
-- contractuelle. Elle crée, si besoin, une ligne civile équivalente afin de
|
|
-- conserver l'historique et d'éviter une migration destructive.
|
|
-- ============================================================================
|
|
|
|
START TRANSACTION;
|
|
|
|
UPDATE quota_agent_annuel
|
|
SET commentaire = 'Quota PTA de référence - année civile'
|
|
WHERE commentaire IS NULL
|
|
OR commentaire LIKE '%contrat%'
|
|
OR commentaire LIKE '%période%';
|
|
|
|
-- Recrée une ligne PTA civile à partir des anciennes lignes non civiles.
|
|
-- INSERT IGNORE évite tout conflit si la ligne annuelle existe déjà.
|
|
INSERT IGNORE INTO pta_annuel (
|
|
id_agent,
|
|
date_debut,
|
|
date_fin,
|
|
quotite_travail,
|
|
quota_reference_minutes,
|
|
quota_cible_minutes,
|
|
enveloppe_formation_minutes,
|
|
conges_annuels_jours_cible,
|
|
jours_fractionnement_cible,
|
|
statut,
|
|
commentaire,
|
|
date_validation
|
|
)
|
|
SELECT
|
|
pa.id_agent,
|
|
STR_TO_DATE(CONCAT(YEAR(pa.date_debut), '-01-01'), '%Y-%m-%d') AS date_debut,
|
|
STR_TO_DATE(CONCAT(YEAR(pa.date_debut), '-12-31'), '%Y-%m-%d') AS date_fin,
|
|
pa.quotite_travail,
|
|
pa.quota_reference_minutes,
|
|
pa.quota_cible_minutes,
|
|
pa.enveloppe_formation_minutes,
|
|
pa.conges_annuels_jours_cible,
|
|
pa.jours_fractionnement_cible,
|
|
pa.statut,
|
|
CONCAT(
|
|
COALESCE(NULLIF(pa.commentaire, ''), ''),
|
|
CASE WHEN COALESCE(NULLIF(pa.commentaire, ''), '') = '' THEN '' ELSE ' - ' END,
|
|
'Période convertie en année civile par migration V7.5'
|
|
),
|
|
pa.date_validation
|
|
FROM pta_annuel pa
|
|
WHERE pa.date_debut <> STR_TO_DATE(CONCAT(YEAR(pa.date_debut), '-01-01'), '%Y-%m-%d')
|
|
OR pa.date_fin <> STR_TO_DATE(CONCAT(YEAR(pa.date_debut), '-12-31'), '%Y-%m-%d');
|
|
|
|
-- La vue de synthèse ne présente désormais que les PTA civils.
|
|
CREATE OR REPLACE VIEW v_pta_annuel_synthese AS
|
|
SELECT
|
|
pa.id_pta,
|
|
pa.id_agent,
|
|
a.matricule,
|
|
a.nom,
|
|
a.prenom,
|
|
po.code AS poste_code,
|
|
po.libelle AS poste_libelle,
|
|
a.type_contrat,
|
|
pa.date_debut,
|
|
pa.date_fin,
|
|
pa.quotite_travail,
|
|
pa.quota_cible_minutes,
|
|
COALESCE(SUM(CASE WHEN mp.compte_dans_quota = TRUE THEN TIMESTAMPDIFF(MINUTE, CONCAT(ch.date_jour, ' ', ch.heure_debut), CONCAT(ch.date_jour, ' ', ch.heure_fin)) ELSE 0 END), 0) AS minutes_decomptees,
|
|
pa.quota_cible_minutes - COALESCE(SUM(CASE WHEN mp.compte_dans_quota = TRUE THEN TIMESTAMPDIFF(MINUTE, CONCAT(ch.date_jour, ' ', ch.heure_debut), CONCAT(ch.date_jour, ' ', ch.heure_fin)) ELSE 0 END), 0) AS minutes_restantes,
|
|
pa.statut
|
|
FROM pta_annuel pa
|
|
JOIN agent a ON a.id_agent = pa.id_agent
|
|
LEFT JOIN poste_agent po ON po.id_poste = a.id_poste
|
|
LEFT JOIN planning p ON p.id_agent = pa.id_agent
|
|
LEFT JOIN creneau_horaire ch
|
|
ON ch.id_planning = p.id_planning
|
|
AND ch.date_jour BETWEEN pa.date_debut AND pa.date_fin
|
|
LEFT JOIN motif_planning mp ON mp.id_motif = ch.id_motif
|
|
WHERE pa.date_debut = STR_TO_DATE(CONCAT(YEAR(pa.date_debut), '-01-01'), '%Y-%m-%d')
|
|
AND pa.date_fin = STR_TO_DATE(CONCAT(YEAR(pa.date_debut), '-12-31'), '%Y-%m-%d')
|
|
GROUP BY pa.id_pta, pa.id_agent, a.matricule, a.nom, a.prenom, po.code, po.libelle,
|
|
a.type_contrat, pa.date_debut, pa.date_fin, pa.quotite_travail,
|
|
pa.quota_cible_minutes, pa.statut;
|
|
|
|
COMMIT;
|