Loading doc/Connecteurs Import/Octopus/Connecteur.md 0 → 100644 +119 −0 Changes for doc/Connecteurs Import/Octopus/Connecteur.md: 119 added lines, 0 removed lines. Original line number Diff line number Diff line # Connecteur Octopus Le connecteur Octopus permet de synchroniser en import : * les pays * les départements * les structures (composantes) * les corps et les grades * Les intervenants vacataires et permanents ## Mise en place du DbLink Le lien avec Octopus se fait au moyen d'un DbLink que vous devrez créer. Dans cet exemple, le DbLink s'appellera `octoprod`. ## Déclaration du connecteur dans OSE OSE doit lister toutes ses sources de données. Il faut donc y ajouter Harpège : ```sql BEGIN unicaen_import.add_source ('Octopus', 'Octopus'); commit; END; ``` La liste des sources de OSE est accessible ici (URL pointant vers l'instance de démonstration de OSE) : [https://\<votre ose\>/demo/import/sources](https://ose.unicaen.fr/demo/import/sources) ## Import des pays Les pays sont enregistrés dans la table PAYS. Si vous venez d'installer OSE, alors l'application est livrée avec un jeu de données par défaut, parmi lesquelles une liste des pays. Avant d'utiliser votre propre liste issue d'Harpège, vous devez impérativement vider la table PAYS, sans quoi vous vous retrouveriez avec des erreurs d'import pour cause de doublons. ```sql DELETE FROM PAYS; ``` Ensuite, créez la vue source [SRC_PAYS](SRC_PAYS.sql). [Activez-là, puis tentez une synchronisation](../activer-synchroniser.md). ## Import des départements Les départements sont enregistrés dans la table DEPARTEMENT. Comme pour les pays, si vous venez d'installer OSE, alors l'application est livrée avec un jeu de données par défaut, parmi lesquelles une liste des départements. Avant d'utiliser votre propre liste issue d'Harpège, vous devez impérativement vider la table DEPARTEMENT, sans quoi vous vous retrouveriez avec des erreurs d'import pour cause de doublons. ```sql DELETE FROM DEPARTEMENT; ``` Ensuite, créez la vue source [SRC_DEPARTEMENT](SRC_DEPARTEMENT.sql). [Activez-là, puis tentez une synchronisation](../activer-synchroniser.md). ## Import des structures Les structures dans OSE matérialisent des composantes ou des départements. Il n'y a qu'un seul niveau de structure dans OSE. Les structures portent entres autres l'offre de formation, les intervenants mais aussi les affectations (droits d'accès). Créez la vue source [SRC_STRUCTURE](SRC_STRUCTURE.sql). Dans cette vue, on importe les structures Harpège de niveau 2 et la structure Université (UNIV) de niveau 1. [Activez-là, puis tentez une synchronisation](../activer-synchroniser.md). ## Import des corps et des grades Pour chaque corps nous pouvons avoir plusieurs grades. Les corps sont enregistrés dans la table CORPS, les grades dnas la table GRADE. Comme pour les pays, si vous venez d'installer OSE, alors l'application est livrée avec un jeu de données par défaut, parmi lesquelles une liste des corps et une autre des grades. Avant d'utiliser vos propres listes de corps et de grades issues d' Harpège, vous devez impérativement vider les table GRADE et CORPS, sans quoi vous vous retrouveriez avec des erreurs d'import pour cause de doublons. ```sql DELETE FROM GRADE; DELETE FROM CORPS; ``` Ensuite, créez la vue source [SRC_CORPS](SRC_CORPS.sql), puis la vue source [SRC_GRADE](SRC_GRADE.sql). [Activez-les, puis tentez les synchronisations](../activer-synchroniser.md). ## Import des intervenants Les intervenants peuvent être indifféremment des permanents ou des vacataires. Compte tenu de la masse des données et pour des raisons d'optimisation aussi bien que de lisibilité, la vue source va s'appuyer sur une vue matérialisée qui va lui "préparer" le travail. L'ensemble de la population active dans Octopus (ou plus exactement les individus actifs 6 mois avant leur date de début et 400 jours après leur date de fin d'activité) se retrouve dans ce connecteur. Voici la vue matérialisée qui remonte les données d'Harpège : [MV_INTERVENANT](MV_INTERVENANT.sql) Les données en sortie sont préparées pour être exploitées par la vue source. [SRC_INTERVENANT](SRC_INTERVENANT.sql) La vue SRC_INTERVENANT remplit plusieurs rôles : * Elle récupère les valeurs identifiantes pour les champs faisant références à d'autres tables à l'aide des valeurs (champs z_*) transmises à cet effet par la vue matérialisée doc/Connecteurs Import/Octopus/MV_INTERVENANT_OCTO.sql +82 −53 Changes for doc/Connecteurs Import/Octopus/MV_INTERVENANT_OCTO.sql: 82 added lines, 53 removed lines. Original line number Diff line number Diff line CREATE MATERIALIZED VIEW MV_INTERVENANT_OCTO AS WITH i AS ( SELECT DISTINCT code, SELECT DISTINCT code, z_statut_id, --On prend la structure d'affectation principale sinon la première structure saisie FIRST_VALUE(structure_id) OVER (PARTITION BY code, z_statut_id ORDER BY affectation_principale DESC, id_affectation ASC) structure_id, MIN(source_code) OVER (partition by code, z_statut_id) source_code, MIN(validite_debut) OVER (partition by code, z_statut_id) validite_debut, MAX(validite_fin) OVER (partition by code, z_statut_id) validite_fin FROM(SELECT uni.c_src_individu code, icto.code_ose z_statut_id, --Voir comment récuperer les statuts OSE FROM (SELECT aff.id id_affectation, uni.c_src_individu code, aff.structure_id structure_id, CASE WHEN icto.code_ose IS NOT NULL THEN icto.code_ose ELSE 'AUTRES' END z_statut_id, COALESCE(aff.date_debut, to_date('01/01/1900', 'dd/mm/YYYY')) validite_debut, COALESCE(aff.date_fin, to_date('01/01/1900', 'dd/mm/YYYY')) validite_fin, --Voir pour le lien entre discipline et individu --il faut retrouver a.no_seq_affectation en attendant on met id_orig uni.c_individu_chaine || '-a-' || aff.id_orig source_code, --Le source code n'est plus utilisé par SRC_INTERVENANT on met donc la même valeur que code + type affectation uni.c_individu_chaine || '-a' source_code, aff.t_principale affectation_principale FROM individu_affectation@octodev aff JOIN individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') --LEFT JOIN v_individu_contrat_type_ose icto ON icto.individu_id = uni.c_individu_chaine FROM octo.individu_affectation@octodev aff JOIN octo.individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN octo.individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') LEFT JOIN octo.v_individu_contrat_type_ose@octodev icto ON icto.individu_id = uni.c_individu_chaine AND COALESCE(icto.d_fin, SYSDATE) >= SYSDATE WHERE aff.date_debut - 184 <= SYSDATE AND aft.nom = 'AFFECTATION' --Uniquement si on veut que les affectations principales Loading @@ -26,16 +30,21 @@ WITH i AS ( UNION ALL --AFFECTATION ENSEIGNEMENT SELECT uni.c_src_individu code, '**AUTRES**' z_statut_id, --Voir comment récuperer les statuts OSE SELECT aff.id id_affectation, uni.c_src_individu code, aff.structure_id structure_id, CASE WHEN icto.code_ose IS NOT NULL THEN icto.code_ose ELSE 'AUTRES' END z_statut_id, COALESCE(aff.date_debut, to_date('01/01/1900', 'dd/mm/YYYY')) validite_debut, COALESCE(aff.date_fin, to_date('01/01/1900', 'dd/mm/YYYY')) validite_fin, --il faut retrouver a.no_seq_affectation en attendant on met id_orig uni.c_individu_chaine || '-a-' || aff.id_orig source_code, --Le source code n'est plus utilisé par SRC_INTERVENANT on met donc la même valeur que code uni.c_individu_chaine || '-c' source_code, aff.t_principale affectation_principale FROM individu_affectation@octodev aff JOIN individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') FROM octo.individu_affectation@octodev aff JOIN octo.individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN octo.individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') LEFT JOIN octo.v_individu_contrat_type_ose@octodev icto ON icto.individu_id = uni.c_individu_chaine AND COALESCE(icto.d_fin, SYSDATE) >= SYSDATE WHERE aff.date_debut - 184 <= SYSDATE AND aft.nom = 'ENSEIGNEMENT' --Uniquement si on veut que les affectations principales Loading @@ -43,16 +52,21 @@ WITH i AS ( UNION ALL --AFFECTATION RECHERCHE SELECT uni.c_src_individu code, '**AUTRES**' z_statut_id, --Voir comment récuperer les statuts OSE SELECT aff.id id_affectation, uni.c_src_individu code, aff.structure_id structure_id, CASE WHEN icto.code_ose IS NOT NULL THEN icto.code_ose ELSE 'AUTRES' END z_statut_id, COALESCE(aff.date_debut, to_date('01/01/1900', 'dd/mm/YYYY')) validite_debut, COALESCE(aff.date_fin, to_date('01/01/1900', 'dd/mm/YYYY')) validite_fin, --il faut retrouver a.no_seq_affectation en attendant on met id_orig uni.c_individu_chaine || '-a-' || aff.id_orig source_code, --Le source code n'est plus utilisé par SRC_INTERVENANT on met donc la même valeur que code uni.c_individu_chaine || '-r' source_code, aff.t_principale affectation_principale FROM individu_affectation@octodev aff JOIN individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') FROM octo.individu_affectation@octodev aff JOIN octo.individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN octo.individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') LEFT JOIN octo.v_individu_contrat_type_ose@octodev icto ON icto.individu_id = uni.c_individu_chaine AND COALESCE(icto.d_fin, SYSDATE) >= SYSDATE WHERE aff.date_debut - 184 <= SYSDATE AND aft.nom = 'RECHERCHE' --Uniquement si on veut que les affectations principales Loading @@ -60,50 +74,47 @@ WITH i AS ( ) t ), telephone_pro_principal AS ( SELECT indtel.individu_id individu_id, SELECT indtel.individu_id individu_id, tel.numero numero FROM individu_telephone@octodev indtel JOIN telephone@octodev tel ON (tel.id = indtel.telephone_id AND tel.t_principal = 'O') FROM octo.individu_telephone@octodev indtel JOIN octo.telephone@octodev tel ON (tel.id = indtel.telephone_id AND tel.t_principal = 'O') ) SELECT /*Octopus id, id unique pour un individu immuable dans le temps, remplace le code harpege*/ --Octopus id, id unique pour un individu immuable dans le temps, remplace le code harpege induni.c_individu_chaine code, /* Code RH */ --Code RH de l'intervenant dans le SI harpége pour le moment SIHAM par la suite ltrim(TO_CHAR(induni.c_src_individu, '99999999')) code_rh, i.source_code source_code, /* = supannempid du LDAP Unicaen */ --UID du LDAP Unicaen indc.ldap_uid utilisateur_code, indg.structure_id z_structure_id, --Structure d'affectation principale de l'intervenant i.structure_id z_structure_id, i.z_statut_id z_statut_id, /* Récupération du grade actuel */ --pbs_divers__cicg.c_grade@harpprod(individu.no_individu, COALESCE(i.validite_fin,SYSDATE) ) z_grade_id, --Récupération du grade actuel indg.grade_id z_grade_id, /* Données nécessaires pour calculer la discipline */ --Données nécessaires pour calculer la discipline indg.cnu_id z_discipline_id_cnu, NULL z_discipline_id_sous_cnu, indg.cnu_specialite_id z_discipline_id_spe_cnu, indg.discipline_sec_id z_discipline_id_dis2deg, /* Données identifiantes de base */ --Données identifiantes de base CASE ind.sexe WHEN 'M' THEN 'M.' ELSE 'Mme' END z_civilite_id, initcap(ind.nom_usage) nom_usuel, initcap(ind.prenom) prenom, INITCAP(ind.nom_usage) nom_usuel, INITCAP(ind.prenom) prenom, ind.d_naissance date_naissance, /* Données identifiantes complémentaires */ initcap(ind.nom_famille) nom_patronymique, --Pour le moment les communes ne sont pas dans OCTOPUS commune.libelle_commune INITCAP(ind.nom_famille) nom_patronymique, ind.ville_de_naissance commune_naissance, ind.c_pays_naissance z_pays_naissance_id, ind.c_dept_naissance z_departement_naissance_id, ind.c_pays_nationalite z_pays_nationalite_id, --Données de contact pro et perso telpro.numero tel_pro, ind.tel_perso tel_perso, indc.email email_pro, ind.email_perso email_perso, /* Adresse */ --Adresse '**Adr précision**' adresse_precisions, '**Adr N° voie**' adresse_numero, '**Adr complement**' z_adresse_numero_compl_id, Loading @@ -113,20 +124,38 @@ SELECT '**Adr code postal**' adresse_code_postal, '**Adr ville**' adresse_commune, '**Adr pays**' z_adresse_pays_id, /* INSEE */ --Données INSEE '**INSEE**' numero_insee, '**INSEE provisoire**' numero_insee_provisoire, /* Banque */ --Données bancaires '**iban**' iban, '**bic**' bic, '**RIB hors sepa**' rib_hors_sepa '**RIB hors sepa**' rib_hors_sepa, --Données complémentaires CAST(NULL AS varchar2(255)) autre_1, CAST(NULL AS varchar2(255)) autre_2, CAST(NULL AS varchar2(255)) autre_3, CAST(NULL AS varchar2(255)) autre_4, CAST(NULL AS varchar2(255)) autre_5, --Données Employeur CAST(NULL AS varchar2(255)) z_employeur_id, CASE WHEN i.validite_debut = to_date('01/01/1900', 'dd/mm/YYYY') THEN NULL ELSE i.validite_debut END validite_debut, CASE WHEN i.validite_fin = to_date('01/01/9999', 'dd/mm/YYYY') THEN NULL ELSE i.validite_fin END validite_fin FROM i JOIN individu_unique@octodev induni ON (i.code = induni.c_src_individu AND induni.c_source = 'HARP') LEFT JOIN individu@octodev ind ON ind.c_individu_chaine = induni.c_individu_chaine LEFT JOIN individu_grade@octodev indg ON induni.c_individu_chaine = indg.individu_id JOIN octo.individu_unique@octodev induni ON (i.code = induni.c_src_individu AND induni.c_source = 'HARP') LEFT JOIN octo.individu@octodev ind ON ind.c_individu_chaine = induni.c_individu_chaine LEFT JOIN octo.individu_grade@octodev indg ON induni.c_individu_chaine = indg.individu_id LEFT JOIN telephone_pro_principal telpro ON telpro.individu_id = induni.c_individu_chaine LEFT JOIN individu_compte@octodev indc ON indc.individu_id = induni.c_individu_chaine -- On ne prend que les comptes qui ne sont pas étudiants dans le cas d'intervenant qui sont également étudiant LEFT JOIN octo.individu_compte@octodev indc ON indc.individu_id = induni.c_individu_chaine AND not regexp_like(ldap_uid, 'e[0-9]{8}') WHERE i.validite_fin + 1 >= (SYSDATE - (365 * 2)) --AND code = 184 --Filtre octopus id AND induni.c_individu_chaine = 247695 --Filtre code rh (harpége) --AND induni.c_src_individu = 52958 Loading
doc/Connecteurs Import/Octopus/Connecteur.md 0 → 100644 +119 −0 Changes for doc/Connecteurs Import/Octopus/Connecteur.md: 119 added lines, 0 removed lines. Original line number Diff line number Diff line # Connecteur Octopus Le connecteur Octopus permet de synchroniser en import : * les pays * les départements * les structures (composantes) * les corps et les grades * Les intervenants vacataires et permanents ## Mise en place du DbLink Le lien avec Octopus se fait au moyen d'un DbLink que vous devrez créer. Dans cet exemple, le DbLink s'appellera `octoprod`. ## Déclaration du connecteur dans OSE OSE doit lister toutes ses sources de données. Il faut donc y ajouter Harpège : ```sql BEGIN unicaen_import.add_source ('Octopus', 'Octopus'); commit; END; ``` La liste des sources de OSE est accessible ici (URL pointant vers l'instance de démonstration de OSE) : [https://\<votre ose\>/demo/import/sources](https://ose.unicaen.fr/demo/import/sources) ## Import des pays Les pays sont enregistrés dans la table PAYS. Si vous venez d'installer OSE, alors l'application est livrée avec un jeu de données par défaut, parmi lesquelles une liste des pays. Avant d'utiliser votre propre liste issue d'Harpège, vous devez impérativement vider la table PAYS, sans quoi vous vous retrouveriez avec des erreurs d'import pour cause de doublons. ```sql DELETE FROM PAYS; ``` Ensuite, créez la vue source [SRC_PAYS](SRC_PAYS.sql). [Activez-là, puis tentez une synchronisation](../activer-synchroniser.md). ## Import des départements Les départements sont enregistrés dans la table DEPARTEMENT. Comme pour les pays, si vous venez d'installer OSE, alors l'application est livrée avec un jeu de données par défaut, parmi lesquelles une liste des départements. Avant d'utiliser votre propre liste issue d'Harpège, vous devez impérativement vider la table DEPARTEMENT, sans quoi vous vous retrouveriez avec des erreurs d'import pour cause de doublons. ```sql DELETE FROM DEPARTEMENT; ``` Ensuite, créez la vue source [SRC_DEPARTEMENT](SRC_DEPARTEMENT.sql). [Activez-là, puis tentez une synchronisation](../activer-synchroniser.md). ## Import des structures Les structures dans OSE matérialisent des composantes ou des départements. Il n'y a qu'un seul niveau de structure dans OSE. Les structures portent entres autres l'offre de formation, les intervenants mais aussi les affectations (droits d'accès). Créez la vue source [SRC_STRUCTURE](SRC_STRUCTURE.sql). Dans cette vue, on importe les structures Harpège de niveau 2 et la structure Université (UNIV) de niveau 1. [Activez-là, puis tentez une synchronisation](../activer-synchroniser.md). ## Import des corps et des grades Pour chaque corps nous pouvons avoir plusieurs grades. Les corps sont enregistrés dans la table CORPS, les grades dnas la table GRADE. Comme pour les pays, si vous venez d'installer OSE, alors l'application est livrée avec un jeu de données par défaut, parmi lesquelles une liste des corps et une autre des grades. Avant d'utiliser vos propres listes de corps et de grades issues d' Harpège, vous devez impérativement vider les table GRADE et CORPS, sans quoi vous vous retrouveriez avec des erreurs d'import pour cause de doublons. ```sql DELETE FROM GRADE; DELETE FROM CORPS; ``` Ensuite, créez la vue source [SRC_CORPS](SRC_CORPS.sql), puis la vue source [SRC_GRADE](SRC_GRADE.sql). [Activez-les, puis tentez les synchronisations](../activer-synchroniser.md). ## Import des intervenants Les intervenants peuvent être indifféremment des permanents ou des vacataires. Compte tenu de la masse des données et pour des raisons d'optimisation aussi bien que de lisibilité, la vue source va s'appuyer sur une vue matérialisée qui va lui "préparer" le travail. L'ensemble de la population active dans Octopus (ou plus exactement les individus actifs 6 mois avant leur date de début et 400 jours après leur date de fin d'activité) se retrouve dans ce connecteur. Voici la vue matérialisée qui remonte les données d'Harpège : [MV_INTERVENANT](MV_INTERVENANT.sql) Les données en sortie sont préparées pour être exploitées par la vue source. [SRC_INTERVENANT](SRC_INTERVENANT.sql) La vue SRC_INTERVENANT remplit plusieurs rôles : * Elle récupère les valeurs identifiantes pour les champs faisant références à d'autres tables à l'aide des valeurs (champs z_*) transmises à cet effet par la vue matérialisée
doc/Connecteurs Import/Octopus/MV_INTERVENANT_OCTO.sql +82 −53 Changes for doc/Connecteurs Import/Octopus/MV_INTERVENANT_OCTO.sql: 82 added lines, 53 removed lines. Original line number Diff line number Diff line CREATE MATERIALIZED VIEW MV_INTERVENANT_OCTO AS WITH i AS ( SELECT DISTINCT code, SELECT DISTINCT code, z_statut_id, --On prend la structure d'affectation principale sinon la première structure saisie FIRST_VALUE(structure_id) OVER (PARTITION BY code, z_statut_id ORDER BY affectation_principale DESC, id_affectation ASC) structure_id, MIN(source_code) OVER (partition by code, z_statut_id) source_code, MIN(validite_debut) OVER (partition by code, z_statut_id) validite_debut, MAX(validite_fin) OVER (partition by code, z_statut_id) validite_fin FROM(SELECT uni.c_src_individu code, icto.code_ose z_statut_id, --Voir comment récuperer les statuts OSE FROM (SELECT aff.id id_affectation, uni.c_src_individu code, aff.structure_id structure_id, CASE WHEN icto.code_ose IS NOT NULL THEN icto.code_ose ELSE 'AUTRES' END z_statut_id, COALESCE(aff.date_debut, to_date('01/01/1900', 'dd/mm/YYYY')) validite_debut, COALESCE(aff.date_fin, to_date('01/01/1900', 'dd/mm/YYYY')) validite_fin, --Voir pour le lien entre discipline et individu --il faut retrouver a.no_seq_affectation en attendant on met id_orig uni.c_individu_chaine || '-a-' || aff.id_orig source_code, --Le source code n'est plus utilisé par SRC_INTERVENANT on met donc la même valeur que code + type affectation uni.c_individu_chaine || '-a' source_code, aff.t_principale affectation_principale FROM individu_affectation@octodev aff JOIN individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') --LEFT JOIN v_individu_contrat_type_ose icto ON icto.individu_id = uni.c_individu_chaine FROM octo.individu_affectation@octodev aff JOIN octo.individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN octo.individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') LEFT JOIN octo.v_individu_contrat_type_ose@octodev icto ON icto.individu_id = uni.c_individu_chaine AND COALESCE(icto.d_fin, SYSDATE) >= SYSDATE WHERE aff.date_debut - 184 <= SYSDATE AND aft.nom = 'AFFECTATION' --Uniquement si on veut que les affectations principales Loading @@ -26,16 +30,21 @@ WITH i AS ( UNION ALL --AFFECTATION ENSEIGNEMENT SELECT uni.c_src_individu code, '**AUTRES**' z_statut_id, --Voir comment récuperer les statuts OSE SELECT aff.id id_affectation, uni.c_src_individu code, aff.structure_id structure_id, CASE WHEN icto.code_ose IS NOT NULL THEN icto.code_ose ELSE 'AUTRES' END z_statut_id, COALESCE(aff.date_debut, to_date('01/01/1900', 'dd/mm/YYYY')) validite_debut, COALESCE(aff.date_fin, to_date('01/01/1900', 'dd/mm/YYYY')) validite_fin, --il faut retrouver a.no_seq_affectation en attendant on met id_orig uni.c_individu_chaine || '-a-' || aff.id_orig source_code, --Le source code n'est plus utilisé par SRC_INTERVENANT on met donc la même valeur que code uni.c_individu_chaine || '-c' source_code, aff.t_principale affectation_principale FROM individu_affectation@octodev aff JOIN individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') FROM octo.individu_affectation@octodev aff JOIN octo.individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN octo.individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') LEFT JOIN octo.v_individu_contrat_type_ose@octodev icto ON icto.individu_id = uni.c_individu_chaine AND COALESCE(icto.d_fin, SYSDATE) >= SYSDATE WHERE aff.date_debut - 184 <= SYSDATE AND aft.nom = 'ENSEIGNEMENT' --Uniquement si on veut que les affectations principales Loading @@ -43,16 +52,21 @@ WITH i AS ( UNION ALL --AFFECTATION RECHERCHE SELECT uni.c_src_individu code, '**AUTRES**' z_statut_id, --Voir comment récuperer les statuts OSE SELECT aff.id id_affectation, uni.c_src_individu code, aff.structure_id structure_id, CASE WHEN icto.code_ose IS NOT NULL THEN icto.code_ose ELSE 'AUTRES' END z_statut_id, COALESCE(aff.date_debut, to_date('01/01/1900', 'dd/mm/YYYY')) validite_debut, COALESCE(aff.date_fin, to_date('01/01/1900', 'dd/mm/YYYY')) validite_fin, --il faut retrouver a.no_seq_affectation en attendant on met id_orig uni.c_individu_chaine || '-a-' || aff.id_orig source_code, --Le source code n'est plus utilisé par SRC_INTERVENANT on met donc la même valeur que code uni.c_individu_chaine || '-r' source_code, aff.t_principale affectation_principale FROM individu_affectation@octodev aff JOIN individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') FROM octo.individu_affectation@octodev aff JOIN octo.individu_affectation_type@octodev aft ON (aff.type_id = aft.id) JOIN octo.individu_unique@octodev uni ON (aff.individu_id = uni.c_individu_chaine AND uni.c_source = 'HARP') LEFT JOIN octo.v_individu_contrat_type_ose@octodev icto ON icto.individu_id = uni.c_individu_chaine AND COALESCE(icto.d_fin, SYSDATE) >= SYSDATE WHERE aff.date_debut - 184 <= SYSDATE AND aft.nom = 'RECHERCHE' --Uniquement si on veut que les affectations principales Loading @@ -60,50 +74,47 @@ WITH i AS ( ) t ), telephone_pro_principal AS ( SELECT indtel.individu_id individu_id, SELECT indtel.individu_id individu_id, tel.numero numero FROM individu_telephone@octodev indtel JOIN telephone@octodev tel ON (tel.id = indtel.telephone_id AND tel.t_principal = 'O') FROM octo.individu_telephone@octodev indtel JOIN octo.telephone@octodev tel ON (tel.id = indtel.telephone_id AND tel.t_principal = 'O') ) SELECT /*Octopus id, id unique pour un individu immuable dans le temps, remplace le code harpege*/ --Octopus id, id unique pour un individu immuable dans le temps, remplace le code harpege induni.c_individu_chaine code, /* Code RH */ --Code RH de l'intervenant dans le SI harpége pour le moment SIHAM par la suite ltrim(TO_CHAR(induni.c_src_individu, '99999999')) code_rh, i.source_code source_code, /* = supannempid du LDAP Unicaen */ --UID du LDAP Unicaen indc.ldap_uid utilisateur_code, indg.structure_id z_structure_id, --Structure d'affectation principale de l'intervenant i.structure_id z_structure_id, i.z_statut_id z_statut_id, /* Récupération du grade actuel */ --pbs_divers__cicg.c_grade@harpprod(individu.no_individu, COALESCE(i.validite_fin,SYSDATE) ) z_grade_id, --Récupération du grade actuel indg.grade_id z_grade_id, /* Données nécessaires pour calculer la discipline */ --Données nécessaires pour calculer la discipline indg.cnu_id z_discipline_id_cnu, NULL z_discipline_id_sous_cnu, indg.cnu_specialite_id z_discipline_id_spe_cnu, indg.discipline_sec_id z_discipline_id_dis2deg, /* Données identifiantes de base */ --Données identifiantes de base CASE ind.sexe WHEN 'M' THEN 'M.' ELSE 'Mme' END z_civilite_id, initcap(ind.nom_usage) nom_usuel, initcap(ind.prenom) prenom, INITCAP(ind.nom_usage) nom_usuel, INITCAP(ind.prenom) prenom, ind.d_naissance date_naissance, /* Données identifiantes complémentaires */ initcap(ind.nom_famille) nom_patronymique, --Pour le moment les communes ne sont pas dans OCTOPUS commune.libelle_commune INITCAP(ind.nom_famille) nom_patronymique, ind.ville_de_naissance commune_naissance, ind.c_pays_naissance z_pays_naissance_id, ind.c_dept_naissance z_departement_naissance_id, ind.c_pays_nationalite z_pays_nationalite_id, --Données de contact pro et perso telpro.numero tel_pro, ind.tel_perso tel_perso, indc.email email_pro, ind.email_perso email_perso, /* Adresse */ --Adresse '**Adr précision**' adresse_precisions, '**Adr N° voie**' adresse_numero, '**Adr complement**' z_adresse_numero_compl_id, Loading @@ -113,20 +124,38 @@ SELECT '**Adr code postal**' adresse_code_postal, '**Adr ville**' adresse_commune, '**Adr pays**' z_adresse_pays_id, /* INSEE */ --Données INSEE '**INSEE**' numero_insee, '**INSEE provisoire**' numero_insee_provisoire, /* Banque */ --Données bancaires '**iban**' iban, '**bic**' bic, '**RIB hors sepa**' rib_hors_sepa '**RIB hors sepa**' rib_hors_sepa, --Données complémentaires CAST(NULL AS varchar2(255)) autre_1, CAST(NULL AS varchar2(255)) autre_2, CAST(NULL AS varchar2(255)) autre_3, CAST(NULL AS varchar2(255)) autre_4, CAST(NULL AS varchar2(255)) autre_5, --Données Employeur CAST(NULL AS varchar2(255)) z_employeur_id, CASE WHEN i.validite_debut = to_date('01/01/1900', 'dd/mm/YYYY') THEN NULL ELSE i.validite_debut END validite_debut, CASE WHEN i.validite_fin = to_date('01/01/9999', 'dd/mm/YYYY') THEN NULL ELSE i.validite_fin END validite_fin FROM i JOIN individu_unique@octodev induni ON (i.code = induni.c_src_individu AND induni.c_source = 'HARP') LEFT JOIN individu@octodev ind ON ind.c_individu_chaine = induni.c_individu_chaine LEFT JOIN individu_grade@octodev indg ON induni.c_individu_chaine = indg.individu_id JOIN octo.individu_unique@octodev induni ON (i.code = induni.c_src_individu AND induni.c_source = 'HARP') LEFT JOIN octo.individu@octodev ind ON ind.c_individu_chaine = induni.c_individu_chaine LEFT JOIN octo.individu_grade@octodev indg ON induni.c_individu_chaine = indg.individu_id LEFT JOIN telephone_pro_principal telpro ON telpro.individu_id = induni.c_individu_chaine LEFT JOIN individu_compte@octodev indc ON indc.individu_id = induni.c_individu_chaine -- On ne prend que les comptes qui ne sont pas étudiants dans le cas d'intervenant qui sont également étudiant LEFT JOIN octo.individu_compte@octodev indc ON indc.individu_id = induni.c_individu_chaine AND not regexp_like(ldap_uid, 'e[0-9]{8}') WHERE i.validite_fin + 1 >= (SYSDATE - (365 * 2)) --AND code = 184 --Filtre octopus id AND induni.c_individu_chaine = 247695 --Filtre code rh (harpége) --AND induni.c_src_individu = 52958