Loading doc/Connecteurs-Import/Générique/SRC_INTERVENANT.sql +1 −0 Original line number Diff line number Diff line Loading @@ -217,6 +217,7 @@ FROM ( s.utilisateur_code s_utilisateur_code, CASE WHEN i.sync_structure = 0 THEN i.structure_id ELSE str.id END structure_id, i.structure_id intervenant_structure_id, mi.structure_id mission_structure_id, ssi.id statut_source_id, i.statut_id statut_intervenant_id, g.id grade_id, Loading doc/Connecteurs-Import/Octopus/SRC_INTERVENANT.sql +66 −21 Original line number Diff line number Diff line Loading @@ -5,13 +5,14 @@ SELECT code, code_rh, CASE WHEN sync_utilisateur_code = 1 THEN COALESCE(s_utilisateur_code,i_utilisateur_code) ELSE i_utilisateur_code END utilisateur_code, CASE WHEN annee_id < current_annee_id THEN intervenant_structure_id ELSE structure_id END structure_id, CASE WHEN mission_structure_id IS NOT NULL THEN mission_structure_id WHEN annee_id < current_annee_id THEN intervenant_structure_id ELSE structure_id END structure_id, CASE WHEN action = 'insert' OR intervenant_histo = 1 THEN statut_source_id WHEN action = 'update-no-statut' OR sync_statut = 0 OR annee_id < current_annee_id THEN statut_intervenant_id WHEN (action = 'update-no-statut' OR sync_statut = 0 OR annee_id < current_annee_id) AND statut_intervenant_id IS NOT NULL THEN statut_intervenant_id ELSE statut_source_id END statut_id, CASE WHEN annee_id < current_annee_id THEN intervenant_grade_id ELSE grade_id END grade_id, CASE WHEN annee_id < current_annee_id AND intervenant_id IS NOT NULL THEN intervenant_grade_id ELSE grade_id END grade_id, discipline_id, civilite_id, nom_usuel, Loading @@ -37,15 +38,21 @@ SELECT adresse_pays_id, numero_insee, numero_insee_provisoire, iban, bic, --rib_hors_sepa, --numero_pec, -- Pour synchroniser les coord. bancaires uniquement sur l'année n, il faut décommenter les 3 lignes ci-dessous et commenter les trois lignes d'après --CASE WHEN annee_id < current_annee_id AND intervenant_id IS NOT NULL THEN i_iban ELSE s_iban END iban, --CASE WHEN annee_id < current_annee_id AND intervenant_id IS NOT NULL THEN i_bic ELSE s_bic END bic, --CASE WHEN annee_id < current_annee_id AND intervenant_id IS NOT NULL THEN i_rib_hors_sepa ELSE s_rib_hors_sepa END rib_hors_sepa, s_iban iban, s_bic bic, -- s_rib_hors_sepa rib_hors_sepa, --autre_1, --autre_2, --autre_3, --autre_4, --autre_5, --employeur_id, affectation_fin, employeur_id, CASE WHEN statuts_identiques = 0 AND i_source_id IS NOT NULL AND action <> 'insert' THEN i_source_id ELSE s_source_id END source_id, source_code, CASE WHEN statuts_identiques = 0 AND intervenant_local = 1 AND action <> 'insert' THEN i_validite_debut ELSE s_validite_debut END validite_debut, Loading @@ -57,7 +64,7 @@ FROM ( CASE -- Cas 1 : Si on est sur un statut multiple avec un non-autorisé et un autre statut, alors le non autorisé est supprimé WHEN statut_intervenant_nautorise = 1 AND intervenant_local = 0 AND nb_intervenants > 1 AND intervenant_histo = 0 THEN 'drop' WHEN statut_source_nautorise = 1 AND nb_sources > 1 THEN 'drop' -- Cas 2 : Si on est sur les mêmes fiches, alors on synchronise tout le temps Loading Loading @@ -131,19 +138,37 @@ FROM ( END -- Cas 9 : Quand il y a plusieurs sources pour un seul intervenant et qu'une au moins matche -- Cas 9 : Quand il y a plusieurs sources et aucun intervenant WHEN nb_sources > 1 AND nb_intervenants = 0 THEN CASE -- Si un des statuts est NON AUTORISE WHEN statut_source_nautorise = 1 THEN 'drop' -- Si on est sur un statut "Autres" et qu'il y a un autre statut du même type WHEN types_identiques = 1 AND statut_source_autre = 1 THEN 'drop' -- sinon on laisse passer ELSE 'insert' END -- Cas 10 : Quand il y a plusieurs sources pour un seul intervenant et qu'une au moins matche WHEN nb_sources > 1 AND nb_intervenants = 1 AND nb_statuts_egaux = 1 THEN CASE -- Si le nouveau statut est de type différent, alors on ajoute une nouvelle fiche WHEN types_identiques = 0 THEN 'insert' -- Si on a AUTRE+ NA en source et NA en intervenant => on transforme WHEN nb_statut_source_nautorise > 0 AND statut_intervenant_nautorise = 1 THEN 'update' -- Sinon, on ne prend pas en compte pour éviter tout problème ELSE 'drop' END -- Cas 10 : Quand il y a plusieurs sources pour un seul intervenant et qu'aucun ne matche -- Cas 11 : Quand il y a plusieurs sources pour un seul intervenant et qu'aucun ne matche WHEN nb_sources > 1 AND nb_intervenants = 1 AND nb_statuts_egaux = 0 THEN CASE -- Cas typique du vacataire qui a renseigné des données personnelles WHEN intervenant_local = 0 AND types_identiques = 1 AND statut_source_autre = 1 AND statut_intervenant_autre = 0 AND sync_statut = 0 THEN 'update' Loading @@ -157,7 +182,7 @@ FROM ( END -- Cas 11 : Quand il y a 2 sources et 2 intervenants et qu'un seul matche -- Cas 12 : Quand il y a 2 sources et 2 intervenants et qu'un seul matche WHEN nb_sources = 2 AND nb_intervenants = 2 THEN CASE -- Autres fiches de même type Loading @@ -170,7 +195,7 @@ FROM ( END -- Cas 12 : Pour le reste -- Cas 13 : Pour le reste ELSE CASE -- Cas typique du vacataire qui a renseigné des données personnelles Loading @@ -192,6 +217,7 @@ FROM ( s.utilisateur_code s_utilisateur_code, CASE WHEN i.sync_structure = 0 THEN i.structure_id ELSE str.id END structure_id, i.structure_id intervenant_structure_id, mi.structure_id mission_structure_id, ssi.id statut_source_id, i.statut_id statut_intervenant_id, g.id grade_id, Loading Loading @@ -221,14 +247,19 @@ FROM ( padr.id adresse_pays_id, s.numero_insee numero_insee, COALESCE(s.numero_insee_provisoire,i.numero_insee_provisoire,0) numero_insee_provisoire, s.iban iban, s.bic bic, s.rib_hors_sepa rib_hors_sepa, --CASE WHEN i.sync_pec = 0 THEN i.numero_pec ELSE s.numero_pec END nunmero_pec, s.iban s_iban, s.bic s_bic, s.rib_hors_sepa s_rib_hors_sepa, i.iban i_iban, i.bic i_bic, i.rib_hors_sepa i_rib_hors_sepa, s.autre_1 autre_1, s.autre_2 autre_2, s.autre_3 autre_3, s.autre_4 autre_4, s.autre_5 autre_5, s.affectation_fin affectation_fin, empl.id employeur_id, isrc.id i_source_id, ssrc.id s_source_id, Loading @@ -247,18 +278,21 @@ FROM ( CASE WHEN ssi.type_intervenant_id = isi.type_intervenant_id THEN 1 ELSE 0 END types_identiques, COALESCE(i.sync_statut,1) sync_statut, COALESCE(i.sync_utilisateur_code,1) sync_utilisateur_code, -- COALESCE(i.sync_pec,1) sync_pec, CASE WHEN COALESCE(isrc.importable,1) = 1 THEN 0 ELSE 1 END intervenant_local, CASE WHEN idata.intervenant_id IS NULL THEN 0 ELSE 1 END intervenant_donnees, CASE WHEN i.histo_destruction IS NULL THEN 0 ELSE 1 END intervenant_histo, COUNT(DISTINCT ssi.id) OVER (PARTITION BY s.code, a.id) nb_sources, COUNT(DISTINCT i.id) OVER (PARTITION BY i.code, i.annee_id) nb_intervenants, SUM(CASE WHEN ssi.id = i.statut_id THEN 1 ELSE 0 END) OVER (PARTITION BY s.code, a.id) nb_statuts_egaux, COUNT(CASE WHEN ssi.code = 'AUTRES' THEN 1 ELSE 0 END) OVER (PARTITION BY s.code, a.id) nb_statut_source_autre, COUNT(CASE WHEN ssi.code = 'NON_AUTORISE' THEN 1 ELSE 0 END) OVER (PARTITION BY s.code, a.id) nb_statut_source_nautorise, MAX(CASE WHEN ssi.id = i.statut_id THEN ssi.id ELSE 0 END) OVER (PARTITION BY s.code, a.id) statuts_egaux_id FROM mv_intervenant s JOIN (SELECT unicaen_import.get_current_annee id FROM dual) current_annee ON 1=1 JOIN annee a ON a.id >= current_annee.id - 1 AND a.active = 1 AND COALESCE(s.validite_debut,a.date_fin-1) < a.date_fin AND COALESCE(s.validite_fin,a.date_debut+1) > a.date_debut JOIN statut ssi ON ssi.code = s.z_statut_id JOIN annee a ON a.id >= current_annee.id - 1 AND a.active = 1 AND COALESCE(s.validite_debut,a.date_fin) <= a.date_fin AND COALESCE(s.validite_fin,a.date_debut) >= a.date_debut JOIN statut ssi ON ssi.code = s.z_statut_id and ssi.annee_id = a.id JOIN source ssrc ON ssrc.code = s.z_source_id LEFT JOIN intervenant i ON i.code = s.code AND i.annee_id = a.id LEFT JOIN source isrc ON isrc.id = i.source_id Loading @@ -274,6 +308,17 @@ FROM ( LEFT JOIN voirie v ON v.source_code = s.z_adresse_voirie_id LEFT JOIN pays padr ON padr.source_code = s.z_adresse_pays_id LEFT JOIN employeur empl ON empl.source_code = s.z_employeur_id LEFT JOIN ( SELECT m.intervenant_id intervenant_id, m.structure_id structure_id FROM mission m JOIN validation_mission vm ON vm.mission_id = m.id JOIN validation v2 ON v2.id = vm.validation_id AND v2.histo_destruction IS NULL WHERE m.histo_destruction IS NULL GROUP BY m.intervenant_id, m.structure_id HAVING COUNT(DISTINCT m.structure_id) = 1 ) mi ON mi.intervenant_id = i.id LEFT JOIN ( SELECT DISTINCT intervenant_id FROM ( select intervenant_id from AGREMENT where histo_destruction is null Loading Loading
doc/Connecteurs-Import/Générique/SRC_INTERVENANT.sql +1 −0 Original line number Diff line number Diff line Loading @@ -217,6 +217,7 @@ FROM ( s.utilisateur_code s_utilisateur_code, CASE WHEN i.sync_structure = 0 THEN i.structure_id ELSE str.id END structure_id, i.structure_id intervenant_structure_id, mi.structure_id mission_structure_id, ssi.id statut_source_id, i.statut_id statut_intervenant_id, g.id grade_id, Loading
doc/Connecteurs-Import/Octopus/SRC_INTERVENANT.sql +66 −21 Original line number Diff line number Diff line Loading @@ -5,13 +5,14 @@ SELECT code, code_rh, CASE WHEN sync_utilisateur_code = 1 THEN COALESCE(s_utilisateur_code,i_utilisateur_code) ELSE i_utilisateur_code END utilisateur_code, CASE WHEN annee_id < current_annee_id THEN intervenant_structure_id ELSE structure_id END structure_id, CASE WHEN mission_structure_id IS NOT NULL THEN mission_structure_id WHEN annee_id < current_annee_id THEN intervenant_structure_id ELSE structure_id END structure_id, CASE WHEN action = 'insert' OR intervenant_histo = 1 THEN statut_source_id WHEN action = 'update-no-statut' OR sync_statut = 0 OR annee_id < current_annee_id THEN statut_intervenant_id WHEN (action = 'update-no-statut' OR sync_statut = 0 OR annee_id < current_annee_id) AND statut_intervenant_id IS NOT NULL THEN statut_intervenant_id ELSE statut_source_id END statut_id, CASE WHEN annee_id < current_annee_id THEN intervenant_grade_id ELSE grade_id END grade_id, CASE WHEN annee_id < current_annee_id AND intervenant_id IS NOT NULL THEN intervenant_grade_id ELSE grade_id END grade_id, discipline_id, civilite_id, nom_usuel, Loading @@ -37,15 +38,21 @@ SELECT adresse_pays_id, numero_insee, numero_insee_provisoire, iban, bic, --rib_hors_sepa, --numero_pec, -- Pour synchroniser les coord. bancaires uniquement sur l'année n, il faut décommenter les 3 lignes ci-dessous et commenter les trois lignes d'après --CASE WHEN annee_id < current_annee_id AND intervenant_id IS NOT NULL THEN i_iban ELSE s_iban END iban, --CASE WHEN annee_id < current_annee_id AND intervenant_id IS NOT NULL THEN i_bic ELSE s_bic END bic, --CASE WHEN annee_id < current_annee_id AND intervenant_id IS NOT NULL THEN i_rib_hors_sepa ELSE s_rib_hors_sepa END rib_hors_sepa, s_iban iban, s_bic bic, -- s_rib_hors_sepa rib_hors_sepa, --autre_1, --autre_2, --autre_3, --autre_4, --autre_5, --employeur_id, affectation_fin, employeur_id, CASE WHEN statuts_identiques = 0 AND i_source_id IS NOT NULL AND action <> 'insert' THEN i_source_id ELSE s_source_id END source_id, source_code, CASE WHEN statuts_identiques = 0 AND intervenant_local = 1 AND action <> 'insert' THEN i_validite_debut ELSE s_validite_debut END validite_debut, Loading @@ -57,7 +64,7 @@ FROM ( CASE -- Cas 1 : Si on est sur un statut multiple avec un non-autorisé et un autre statut, alors le non autorisé est supprimé WHEN statut_intervenant_nautorise = 1 AND intervenant_local = 0 AND nb_intervenants > 1 AND intervenant_histo = 0 THEN 'drop' WHEN statut_source_nautorise = 1 AND nb_sources > 1 THEN 'drop' -- Cas 2 : Si on est sur les mêmes fiches, alors on synchronise tout le temps Loading Loading @@ -131,19 +138,37 @@ FROM ( END -- Cas 9 : Quand il y a plusieurs sources pour un seul intervenant et qu'une au moins matche -- Cas 9 : Quand il y a plusieurs sources et aucun intervenant WHEN nb_sources > 1 AND nb_intervenants = 0 THEN CASE -- Si un des statuts est NON AUTORISE WHEN statut_source_nautorise = 1 THEN 'drop' -- Si on est sur un statut "Autres" et qu'il y a un autre statut du même type WHEN types_identiques = 1 AND statut_source_autre = 1 THEN 'drop' -- sinon on laisse passer ELSE 'insert' END -- Cas 10 : Quand il y a plusieurs sources pour un seul intervenant et qu'une au moins matche WHEN nb_sources > 1 AND nb_intervenants = 1 AND nb_statuts_egaux = 1 THEN CASE -- Si le nouveau statut est de type différent, alors on ajoute une nouvelle fiche WHEN types_identiques = 0 THEN 'insert' -- Si on a AUTRE+ NA en source et NA en intervenant => on transforme WHEN nb_statut_source_nautorise > 0 AND statut_intervenant_nautorise = 1 THEN 'update' -- Sinon, on ne prend pas en compte pour éviter tout problème ELSE 'drop' END -- Cas 10 : Quand il y a plusieurs sources pour un seul intervenant et qu'aucun ne matche -- Cas 11 : Quand il y a plusieurs sources pour un seul intervenant et qu'aucun ne matche WHEN nb_sources > 1 AND nb_intervenants = 1 AND nb_statuts_egaux = 0 THEN CASE -- Cas typique du vacataire qui a renseigné des données personnelles WHEN intervenant_local = 0 AND types_identiques = 1 AND statut_source_autre = 1 AND statut_intervenant_autre = 0 AND sync_statut = 0 THEN 'update' Loading @@ -157,7 +182,7 @@ FROM ( END -- Cas 11 : Quand il y a 2 sources et 2 intervenants et qu'un seul matche -- Cas 12 : Quand il y a 2 sources et 2 intervenants et qu'un seul matche WHEN nb_sources = 2 AND nb_intervenants = 2 THEN CASE -- Autres fiches de même type Loading @@ -170,7 +195,7 @@ FROM ( END -- Cas 12 : Pour le reste -- Cas 13 : Pour le reste ELSE CASE -- Cas typique du vacataire qui a renseigné des données personnelles Loading @@ -192,6 +217,7 @@ FROM ( s.utilisateur_code s_utilisateur_code, CASE WHEN i.sync_structure = 0 THEN i.structure_id ELSE str.id END structure_id, i.structure_id intervenant_structure_id, mi.structure_id mission_structure_id, ssi.id statut_source_id, i.statut_id statut_intervenant_id, g.id grade_id, Loading Loading @@ -221,14 +247,19 @@ FROM ( padr.id adresse_pays_id, s.numero_insee numero_insee, COALESCE(s.numero_insee_provisoire,i.numero_insee_provisoire,0) numero_insee_provisoire, s.iban iban, s.bic bic, s.rib_hors_sepa rib_hors_sepa, --CASE WHEN i.sync_pec = 0 THEN i.numero_pec ELSE s.numero_pec END nunmero_pec, s.iban s_iban, s.bic s_bic, s.rib_hors_sepa s_rib_hors_sepa, i.iban i_iban, i.bic i_bic, i.rib_hors_sepa i_rib_hors_sepa, s.autre_1 autre_1, s.autre_2 autre_2, s.autre_3 autre_3, s.autre_4 autre_4, s.autre_5 autre_5, s.affectation_fin affectation_fin, empl.id employeur_id, isrc.id i_source_id, ssrc.id s_source_id, Loading @@ -247,18 +278,21 @@ FROM ( CASE WHEN ssi.type_intervenant_id = isi.type_intervenant_id THEN 1 ELSE 0 END types_identiques, COALESCE(i.sync_statut,1) sync_statut, COALESCE(i.sync_utilisateur_code,1) sync_utilisateur_code, -- COALESCE(i.sync_pec,1) sync_pec, CASE WHEN COALESCE(isrc.importable,1) = 1 THEN 0 ELSE 1 END intervenant_local, CASE WHEN idata.intervenant_id IS NULL THEN 0 ELSE 1 END intervenant_donnees, CASE WHEN i.histo_destruction IS NULL THEN 0 ELSE 1 END intervenant_histo, COUNT(DISTINCT ssi.id) OVER (PARTITION BY s.code, a.id) nb_sources, COUNT(DISTINCT i.id) OVER (PARTITION BY i.code, i.annee_id) nb_intervenants, SUM(CASE WHEN ssi.id = i.statut_id THEN 1 ELSE 0 END) OVER (PARTITION BY s.code, a.id) nb_statuts_egaux, COUNT(CASE WHEN ssi.code = 'AUTRES' THEN 1 ELSE 0 END) OVER (PARTITION BY s.code, a.id) nb_statut_source_autre, COUNT(CASE WHEN ssi.code = 'NON_AUTORISE' THEN 1 ELSE 0 END) OVER (PARTITION BY s.code, a.id) nb_statut_source_nautorise, MAX(CASE WHEN ssi.id = i.statut_id THEN ssi.id ELSE 0 END) OVER (PARTITION BY s.code, a.id) statuts_egaux_id FROM mv_intervenant s JOIN (SELECT unicaen_import.get_current_annee id FROM dual) current_annee ON 1=1 JOIN annee a ON a.id >= current_annee.id - 1 AND a.active = 1 AND COALESCE(s.validite_debut,a.date_fin-1) < a.date_fin AND COALESCE(s.validite_fin,a.date_debut+1) > a.date_debut JOIN statut ssi ON ssi.code = s.z_statut_id JOIN annee a ON a.id >= current_annee.id - 1 AND a.active = 1 AND COALESCE(s.validite_debut,a.date_fin) <= a.date_fin AND COALESCE(s.validite_fin,a.date_debut) >= a.date_debut JOIN statut ssi ON ssi.code = s.z_statut_id and ssi.annee_id = a.id JOIN source ssrc ON ssrc.code = s.z_source_id LEFT JOIN intervenant i ON i.code = s.code AND i.annee_id = a.id LEFT JOIN source isrc ON isrc.id = i.source_id Loading @@ -274,6 +308,17 @@ FROM ( LEFT JOIN voirie v ON v.source_code = s.z_adresse_voirie_id LEFT JOIN pays padr ON padr.source_code = s.z_adresse_pays_id LEFT JOIN employeur empl ON empl.source_code = s.z_employeur_id LEFT JOIN ( SELECT m.intervenant_id intervenant_id, m.structure_id structure_id FROM mission m JOIN validation_mission vm ON vm.mission_id = m.id JOIN validation v2 ON v2.id = vm.validation_id AND v2.histo_destruction IS NULL WHERE m.histo_destruction IS NULL GROUP BY m.intervenant_id, m.structure_id HAVING COUNT(DISTINCT m.structure_id) = 1 ) mi ON mi.intervenant_id = i.id LEFT JOIN ( SELECT DISTINCT intervenant_id FROM ( select intervenant_id from AGREMENT where histo_destruction is null Loading