diff --git a/CHANGELOG b/CHANGELOG index 331897b6bd625fd7c1c3a3f05a278803f109cab1..bf3aa27c6dfb6e7a5a354d918256d3310f6f670e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -11,16 +11,19 @@ author: Laurent Lécluse - DSI - Unicaen * Ajout de la dépendance à BCMath (extension PHP à installer). -* Correction de bug portant sur la validation du numéro INSEE dans les données personnelles. +* Ajout de la dépendance à GD (extension PHP à installer). -* Correction de bug portant sur la recherche d'intervenants (se produisant uniquement avec PHP 7.1). +* La validation du numéro INSEE dans les données personnelles était incorrecte dans certains cas. + +* Recherche d'intervenants inopérante (se produisant uniquement avec PHP 7.1). * Connecteurs : les disciplines remontent aussi pour les intervenants ayant une fin d'affectation en cours d'année. -* Correction de bug empêchant l'affichage de l'interface d'administration des années. +* L'affichage de l'interface d'administration des années ne fonctionnait plus. + +* à l'installation : toutes les tables étaient considérées par défaut comme synchronisées, ce qui n'était pas le cas. -* Correction de bug à l'installation : toutes les tables étaient considérées par défaut comme -synchronisées, ce qui n'était pas le cas. +* Dans l'export CSV des services, le libellé de formation n'apparaissait plus. ## Nouveautés diff --git a/composer.json b/composer.json index 75371dce402efb92fcd5024a686d66a58bcbc165..ec3ba225fcb65923b41e46472b477849055e45af 100755 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ "zf-commons/zfc-user": "0.1.3", "zendframework/zend-file": "^2.4", "unicaen/code": "1.1.5", - "unicaen/import": "1.1.5", + "unicaen/import": "1.1.6", "unicaen/tbl": "1.0.3" } } diff --git "a/data/D\303\251ploiement/Changements.pdf" "b/data/D\303\251ploiement/Changements.pdf" index 83086a140ff7c6994ce315d58a8509f08900e5ea..170d6983eba0924dd39dc4eaf44a0e7f3eec456d 100644 Binary files "a/data/D\303\251ploiement/Changements.pdf" and "b/data/D\303\251ploiement/Changements.pdf" differ diff --git "a/data/D\303\251ploiement/Proc\303\251dure d'installation.md" "b/data/D\303\251ploiement/Proc\303\251dure d'installation.md" index 5457fef6c900efee0a0c8e860dd2009d1ade8d99..f3d6d4790938339547026285750f755c220a9538 100644 --- "a/data/D\303\251ploiement/Proc\303\251dure d'installation.md" +++ "b/data/D\303\251ploiement/Proc\303\251dure d'installation.md" @@ -156,9 +156,9 @@ Dans tous les cas, c'est le script de OSE qui sera appelé. Le script est situé dans le répertoire de OSE, `bin/ose`. Il est suivi de l'action à exécuter, puis éventuellement de paramètres à préciser. -Exemple d'utilisation pour lancer une tâche de synchronisation appelée `principal`: +Exemple d'utilisation pour lancer une tâche de synchronisation appelée `synchro`: ```bash -/usr/bin/php /var/www/ose/bin/ose synchronisation principal +/usr/bin/php /var/www/ose/bin/ose synchronisation synchro ``` | Usage | Fréquence | Action de script | @@ -169,18 +169,18 @@ Exemple d'utilisation pour lancer une tâche de synchronisation appelée `princi | Calcul des tableaux de bord | Deux fois par jour sauf le dimanche (Calcul LONG) | calcul-tableaux-bord | | Calcul des heures complémentaires à l'aide de la formule (calcul LONG) | Les lundi et jeudi à 3h | formule-calcul | -Après la commande, on ajoute `1> /tmp/oselog 2>&1` pour loguer le résultat dans le fichier`/tmp/oselog`. +Après la commande, on ajoute `> /tmp/oselog 2>&1` pour loguer le résultat dans le fichier`/tmp/oselog`. A adapter le cas échéant. Voici un exemple de crontab : ```cron # m h dom mon dow command -0 5-17 * * 1-5 /usr/bin/php /var/www/ose/bin/ose notifier-indicateurs 1> /tmp/oselog 2>&1 -*/15 7-21 * * 1-6 /usr/bin/php /var/www/ose/bin/ose synchronisation job1 1> /tmp/oselog 2>&1 -0 20 * * 1-6 /usr/bin/php /var/www/ose/bin/ose chargens-calcul-effectifs 1> /tmp/oselog 2>&1 -0 6,14 * * 1-6 /usr/bin/php /var/www/ose/bin/ose calcul-tableaux-bord 1> /tmp/oselog 2>&1 -0 3 * * 1,4 /usr/bin/php /var/www/ose/bin/ose formule-calcul 1> /tmp/oselog 2>&1 +0 5-17 * * 1-5 /usr/bin/php /var/www/ose/bin/ose notifier-indicateurs > /tmp/oselog 2>&1 +*/15 7-21 * * 1-6 /usr/bin/php /var/www/ose/bin/ose synchronisation synchro > /tmp/oselog 2>&1 +0 20 * * 1-6 /usr/bin/php /var/www/ose/bin/ose chargens-calcul-effectifs > /tmp/oselog 2>&1 +0 6,14 * * 1-6 /usr/bin/php /var/www/ose/bin/ose calcul-tableaux-bord > /tmp/oselog 2>&1 +0 3 * * 1,4 /usr/bin/php /var/www/ose/bin/ose formule-calcul > /tmp/oselog 2>&1 ``` OSE est maintenant installé. diff --git "a/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" "b/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" index 3e53b89d59710eddc41943d817bc151d14f5d6f7..8c5da9e2c5aa52921782c4bdc6151f738d054ea5 100644 Binary files "a/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" and "b/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" differ diff --git "a/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" "b/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" index 575ce96a60630a0d747a69e8eeeee378f6199e74..c4be40231e8600502bd81d33b88deb4871782190 100644 Binary files "a/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" and "b/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" differ diff --git "a/data/D\303\251ploiement/ose-ddl.sql" "b/data/D\303\251ploiement/ose-ddl.sql" index eb8f92ee7c537c1072a86f991de141ef9cc518f9..c10f9d63cf0f8126dd9b019b10b15007f810117d 100755 --- "a/data/D\303\251ploiement/ose-ddl.sql" +++ "b/data/D\303\251ploiement/ose-ddl.sql" @@ -18886,46 +18886,54 @@ INSERT INTO ETAT_VOLUME_HORAIRE(ID, CODE, LIBELLE, ORDRE) VALUES (ETAT_VOLUME_HO -- Table IMPORT_TABLES -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[INTERVENANT]', q'[WHERE (IMPORT_ACTION IN ('delete','update','undelete') OR STATUT_ID IN (SELECT si.id FROM statut_intervenant si JOIN type_intervenant ti ON ti.id = si.type_intervenant_id WHERE ti.code = 'P'))]', 0, NULL, q'[UNICAEN_IMPORT.REFRESH_MV('MV_UNICAEN_STRUCTURE_CODES'); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[INTERVENANT]', q'[WHERE ( + IMPORT_ACTION IN ('delete','update','undelete') + OR STATUT_ID IN ( + SELECT si.id + FROM statut_intervenant si + JOIN type_intervenant ti ON ti.id = si.type_intervenant_id + WHERE ti.code = 'P' + ) +)]', 0, q'[synchro]', q'[UNICAEN_IMPORT.REFRESH_MV('MV_UNICAEN_STRUCTURE_CODES'); UNICAEN_IMPORT.REFRESH_MV('MV_INTERVENANT');]', NULL, 12); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[AFFECTATION_RECHERCHE]', q'[WHERE INTERVENANT_ID IS NOT NULL]', 0, NULL, NULL, NULL, 13); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[ADRESSE_INTERVENANT]', q'[WHERE INTERVENANT_ID IS NOT NULL]', 0, q'[test1]', NULL, NULL, 14); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[AFFECTATION_RECHERCHE]', q'[WHERE INTERVENANT_ID IS NOT NULL]', 0, q'[synchro]', NULL, NULL, 13); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[ADRESSE_INTERVENANT]', q'[WHERE INTERVENANT_ID IS NOT NULL]', 0, q'[synchro]', NULL, NULL, 14); INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[ELEMENT_TAUX_REGIMES]', q'[WHERE IMPORT_ACTION IN ('delete','insert','undelete')]', 0, NULL, NULL, NULL, 20); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[VOLUME_HORAIRE_ENS]', NULL, 0, q'[test1]', NULL, NULL, 22); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[TYPE_MODULATEUR_EP]', NULL, 0, q'[test1]', NULL, NULL, 27); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[TYPE_INTERVENTION_EP]', NULL, 0, q'[test1]', NULL, NULL, 26); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[TYPE_FORMATION]', NULL, 0, q'[test1]', NULL, NULL, 16); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[STRUCTURE]', NULL, 0, q'[test1]', NULL, NULL, 4); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[SCENARIO_LIEN]', NULL, 0, q'[test1]', NULL, NULL, 25); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[PAYS]', NULL, 0, q'[test1]', NULL, NULL, 1); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[NOEUD]', NULL, 0, q'[test1]', NULL, q'[UNICAEN_IMPORT.REFRESH_MV('TBL_NOEUD'); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[VOLUME_HORAIRE_ENS]', NULL, 0, q'[synchro]', NULL, NULL, 22); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[TYPE_MODULATEUR_EP]', NULL, 0, q'[synchro]', NULL, NULL, 27); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[TYPE_INTERVENTION_EP]', NULL, 0, q'[synchro]', NULL, NULL, 26); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[TYPE_FORMATION]', NULL, 0, q'[synchro]', NULL, NULL, 16); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[STRUCTURE]', NULL, 0, q'[synchro]', NULL, NULL, 4); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[SCENARIO_LIEN]', NULL, 0, q'[synchro]', NULL, NULL, 25); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[PAYS]', NULL, 0, q'[synchro]', NULL, NULL, 1); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[NOEUD]', NULL, 0, q'[synchro]', NULL, q'[UNICAEN_IMPORT.REFRESH_MV('TBL_NOEUD'); UNICAEN_TBL.CALCULER('chargens');]', 23); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[LIEN]', NULL, 0, q'[test1]', NULL, NULL, 24); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[GROUPE_TYPE_FORMATION]', NULL, 0, q'[test1]', NULL, NULL, 15); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[GRADE]', NULL, 0, q'[test1]', NULL, NULL, 11); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[ETAPE]', NULL, 0, q'[test1]', NULL, NULL, 17); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[ETABLISSEMENT]', NULL, 0, q'[test1]', NULL, NULL, 3); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[ELEMENT_PEDAGOGIQUE]', NULL, 0, q'[test1]', NULL, NULL, 18); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[EFFECTIFS]', NULL, 0, q'[test1]', NULL, NULL, 19); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[DOMAINE_FONCTIONNEL]', NULL, 0, q'[test1]', NULL, NULL, 6); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[DEPARTEMENT]', NULL, 0, q'[test1]', NULL, NULL, 2); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[CORPS]', NULL, 0, q'[test1]', NULL, NULL, 10); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[CHEMIN_PEDAGOGIQUE]', NULL, 0, NULL, NULL, NULL, 21); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[CENTRE_COUT_STRUCTURE]', NULL, 0, q'[test1]', NULL, NULL, 8); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[CENTRE_COUT]', NULL, 0, q'[test1]', NULL, NULL, 7); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[AFFECTATION]', NULL, 0, q'[test1]', q'[UNICAEN_IMPORT.REFRESH_MV('MV_AFFECTATION'); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[LIEN]', NULL, 0, q'[synchro]', NULL, NULL, 24); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[GROUPE_TYPE_FORMATION]', NULL, 0, q'[synchro]', NULL, NULL, 15); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[GRADE]', NULL, 0, q'[synchro]', NULL, NULL, 11); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[ETAPE]', NULL, 0, q'[synchro]', NULL, NULL, 17); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[ETABLISSEMENT]', NULL, 0, q'[synchro]', NULL, NULL, 3); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[ELEMENT_PEDAGOGIQUE]', NULL, 0, q'[synchro]', NULL, NULL, 18); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[EFFECTIFS]', NULL, 0, q'[synchro]', NULL, NULL, 19); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[DOMAINE_FONCTIONNEL]', NULL, 0, q'[synchro]', NULL, NULL, 6); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[DEPARTEMENT]', NULL, 0, q'[synchro]', NULL, NULL, 2); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[CORPS]', NULL, 0, q'[synchro]', NULL, NULL, 10); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[CHEMIN_PEDAGOGIQUE]', NULL, 0, q'[synchro]', NULL, NULL, 21); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[CENTRE_COUT_STRUCTURE]', NULL, 0, q'[synchro]', NULL, NULL, 8); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[CENTRE_COUT]', NULL, 0, q'[synchro]', NULL, NULL, 7); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[AFFECTATION]', NULL, 0, q'[synchro]', q'[UNICAEN_IMPORT.REFRESH_MV('MV_AFFECTATION'); /* Import automatique des users des nouveaux directeurs */ INSERT INTO utilisateur ( id, display_name, email, password, state, username ) SELECT - utilisateur_id_seq.nextval id, + utilisateur_id_seq.nextval id, aff.* -FROM +FROM (SELECT DISTINCT display_name, email, password, state, username FROM mv_affectation) aff -WHERE +WHERE username not in (select username from utilisateur);]', NULL, 9); -INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[ADRESSE_STRUCTURE]', NULL, 0, q'[test1]', NULL, NULL, 5); +INSERT INTO IMPORT_TABLES(TABLE_NAME, SYNC_FILTRE, SYNC_ENABLED, SYNC_JOB, SYNC_HOOK_BEFORE, SYNC_HOOK_AFTER, ORDRE) VALUES (q'[ADRESSE_STRUCTURE]', NULL, 0, q'[synchro]', NULL, NULL, 5); -- Table INDICATEUR diff --git "a/data/Mises \303\240 jour/06.3.sql" "b/data/Mises \303\240 jour/06.3.sql" index d13a821996930754858d34c23e23ef158cf4c44d..b874b8805966f7b1715360bd1b75f7166b64fe62 100644 --- "a/data/Mises \303\240 jour/06.3.sql" +++ "b/data/Mises \303\240 jour/06.3.sql" @@ -19,6 +19,72 @@ ALTER TABLE import_tables ADD ( sync_hook_after VARCHAR2(4000 CHAR) ); +UPDATE import_tables SET ordre = 1 WHERE table_name = 'PAYS'; +UPDATE import_tables SET ordre = 2 WHERE table_name = 'DEPARTEMENT'; +UPDATE import_tables SET ordre = 3 WHERE table_name = 'ETABLISSEMENT'; +UPDATE import_tables SET ordre = 4 WHERE table_name = 'STRUCTURE'; +UPDATE import_tables SET ordre = 5 WHERE table_name = 'ADRESSE_STRUCTURE'; +UPDATE import_tables SET ordre = 6 WHERE table_name = 'DOMAINE_FONCTIONNEL'; +UPDATE import_tables SET ordre = 7 WHERE table_name = 'CENTRE_COUT'; +UPDATE import_tables SET ordre = 8 WHERE table_name = 'CENTRE_COUT_STRUCTURE'; +UPDATE import_tables SET ordre = 9 WHERE table_name = 'AFFECTATION'; +UPDATE import_tables SET ordre = 10 WHERE table_name = 'CORPS'; +UPDATE import_tables SET ordre = 11 WHERE table_name = 'GRADE'; +UPDATE import_tables SET ordre = 12 WHERE table_name = 'INTERVENANT'; +UPDATE import_tables SET ordre = 13 WHERE table_name = 'AFFECTATION_RECHERCHE'; +UPDATE import_tables SET ordre = 14 WHERE table_name = 'ADRESSE_INTERVENANT'; +UPDATE import_tables SET ordre = 15 WHERE table_name = 'GROUPE_TYPE_FORMATION'; +UPDATE import_tables SET ordre = 16 WHERE table_name = 'TYPE_FORMATION'; +UPDATE import_tables SET ordre = 17 WHERE table_name = 'ETAPE'; +UPDATE import_tables SET ordre = 18 WHERE table_name = 'ELEMENT_PEDAGOGIQUE'; +UPDATE import_tables SET ordre = 19 WHERE table_name = 'EFFECTIFS'; +UPDATE import_tables SET ordre = 20 WHERE table_name = 'ELEMENT_TAUX_REGIMES'; +UPDATE import_tables SET ordre = 21 WHERE table_name = 'CHEMIN_PEDAGOGIQUE'; +UPDATE import_tables SET ordre = 22 WHERE table_name = 'VOLUME_HORAIRE_ENS'; +UPDATE import_tables SET ordre = 23 WHERE table_name = 'NOEUD'; +UPDATE import_tables SET ordre = 24 WHERE table_name = 'LIEN'; +UPDATE import_tables SET ordre = 25 WHERE table_name = 'SCENARIO_LIEN'; +UPDATE import_tables SET ordre = 26 WHERE table_name = 'TYPE_INTERVENTION_EP'; +UPDATE import_tables SET ordre = 27 WHERE table_name = 'TYPE_MODULATEUR_EP'; + +UPDATE import_tables SET sync_job = 'synchro' WHERE table_name IN ( +'PAYS','DEPARTEMENT','ETABLISSEMENT','STRUCTURE','ADRESSE_STRUCTURE','DOMAINE_FONCTIONNEL','CENTRE_COUT', +'CENTRE_COUT_STRUCTURE','AFFECTATION','CORPS','GRADE','INTERVENANT','AFFECTATION_RECHERCHE', +'ADRESSE_INTERVENANT','GROUPE_TYPE_FORMATION','TYPE_FORMATION','ETAPE','ELEMENT_PEDAGOGIQUE','EFFECTIFS', +'CHEMIN_PEDAGOGIQUE','VOLUME_HORAIRE_ENS','NOEUD','LIEN','SCENARIO_LIEN','TYPE_INTERVENTION_EP', +'TYPE_MODULATEUR_EP'); + +UPDATE IMPORT_TABLES SET SYNC_HOOK_BEFORE = 'UNICAEN_IMPORT.REFRESH_MV(''MV_AFFECTATION''); +/* Import automatique des users des nouveaux directeurs */ +INSERT INTO utilisateur ( + id, display_name, email, password, state, username +) +SELECT + utilisateur_id_seq.nextval id, + aff.* +FROM + (SELECT DISTINCT display_name, email, password, state, username FROM mv_affectation) aff +WHERE + username not in (select username from utilisateur);' WHERE table_name = 'AFFECTATION'; + +UPDATE IMPORT_TABLES SET SYNC_FILTRE = 'WHERE ( + IMPORT_ACTION IN (''delete'',''update'',''undelete'') + OR STATUT_ID IN ( + SELECT si.id + FROM statut_intervenant si + JOIN type_intervenant ti ON ti.id = si.type_intervenant_id + WHERE ti.code = ''P'' + ) +)', SYNC_HOOK_BEFORE = 'UNICAEN_IMPORT.REFRESH_MV(''MV_UNICAEN_STRUCTURE_CODES''); +UNICAEN_IMPORT.REFRESH_MV(''MV_INTERVENANT'');' WHERE table_name = 'INTERVENANT'; + +UPDATE IMPORT_TABLES SET SYNC_FILTRE = 'WHERE INTERVENANT_ID IS NOT NULL' WHERE table_name IN ('AFFECTATION_RECHERCHE','ADRESSE_INTERVENANT'); + +UPDATE IMPORT_TABLES SET SYNC_FILTRE = 'WHERE IMPORT_ACTION IN (''delete'',''insert'',''undelete'')' WHERE table_name = 'ELEMENT_TAUX_REGIMES'; + +UPDATE IMPORT_TABLES SET SYNC_HOOK_AFTER = 'UNICAEN_IMPORT.REFRESH_MV(''TBL_NOEUD''); +UNICAEN_TBL.CALCULER(''chargens'');' WHERE table_name = 'NOEUD'; + CREATE OR REPLACE FORCE VIEW "V_IMPORT_TAB_COLS" ("TABLE_NAME", "COLUMN_NAME", "DATA_TYPE", "LENGTH", "NULLABLE", "HAS_DEFAULT", "C_TABLE_NAME", "C_COLUMN_NAME", "IMPORT_ACTIF") AS WITH importable_tables (table_name )AS ( @@ -150,4 +216,104 @@ INSERT INTO role_privilege ( SELECT p.id FROM privilege p JOIN categorie_privilege cp ON cp.id = p.categorie_id WHERE cp.code || '/' || p.code = 'import/tables-edition' ) -); \ No newline at end of file +); + +/ + +create or replace PACKAGE UNICAEN_IMPORT AS + + z__SYNC_FILRE__z CLOB DEFAULT ''; + z__IGNORE_UPD_COLS__z CLOB DEFAULT ''; + + PROCEDURE set_current_user(p_current_user IN INTEGER); + FUNCTION get_current_user return INTEGER; + + FUNCTION get_current_annee RETURN INTEGER; + PROCEDURE set_current_annee (p_current_annee INTEGER); + + FUNCTION IN_COLUMN_LIST( VALEUR VARCHAR2, CHAMPS CLOB ) RETURN NUMERIC; + PROCEDURE REFRESH_MV( mview_name varchar2 ); + PROCEDURE SYNC_LOG( message CLOB, table_name VARCHAR2 DEFAULT NULL, source_code VARCHAR2 DEFAULT NULL ); + + PROCEDURE SYNCHRONISATION( table_name VARCHAR2, SYNC_FILRE CLOB DEFAULT '', IGNORE_UPD_COLS CLOB DEFAULT '' ); + + + +END UNICAEN_IMPORT; + +/ + +create or replace PACKAGE BODY UNICAEN_IMPORT AS + + v_current_user INTEGER; + v_current_annee INTEGER; + + + + FUNCTION get_current_user RETURN INTEGER IS + BEGIN + IF v_current_user IS NULL THEN + v_current_user := OSE_PARAMETRE.GET_OSE_USER(); + END IF; + RETURN v_current_user; + END get_current_user; + + PROCEDURE set_current_user (p_current_user INTEGER) is + BEGIN + v_current_user := p_current_user; + END set_current_user; + + + + FUNCTION get_current_annee RETURN INTEGER IS + BEGIN + IF v_current_annee IS NULL THEN + v_current_annee := OSE_PARAMETRE.GET_ANNEE_IMPORT(); + END IF; + RETURN v_current_annee; + END get_current_annee; + + PROCEDURE set_current_annee (p_current_annee INTEGER) IS + BEGIN + v_current_annee := p_current_annee; + END set_current_annee; + + + + PROCEDURE SYNCHRONISATION( table_name VARCHAR2, SYNC_FILRE CLOB DEFAULT '', IGNORE_UPD_COLS CLOB DEFAULT '' ) IS + ok NUMERIC(1); + BEGIN + SELECT COUNT(*) INTO ok FROM import_tables it WHERE it.table_name = SYNCHRONISATION.table_name AND it.sync_enabled = 1 AND rownum = 1; + + IF 1 = ok THEN + z__SYNC_FILRE__z := SYNCHRONISATION.SYNC_FILRE; + z__IGNORE_UPD_COLS__z := SYNCHRONISATION.IGNORE_UPD_COLS; + EXECUTE IMMEDIATE 'BEGIN UNICAEN_IMPORT_AUTOGEN_PROCS__.' || table_name || '(); END;'; + END IF; + END; + + + + PROCEDURE REFRESH_MV( mview_name varchar2 ) IS + BEGIN + DBMS_MVIEW.REFRESH(mview_name, 'C'); + EXCEPTION WHEN OTHERS THEN + SYNC_LOG( SQLERRM, mview_name ); + END; + + + + PROCEDURE SYNC_LOG( message CLOB, table_name VARCHAR2 DEFAULT NULL, source_code VARCHAR2 DEFAULT NULL ) IS + BEGIN + INSERT INTO SYNC_LOG("ID","DATE_SYNC","MESSAGE","TABLE_NAME","SOURCE_CODE") VALUES (SYNC_LOG_ID_SEQ.NEXTVAL, SYSDATE, message,table_name,source_code); + END SYNC_LOG; + + + + FUNCTION IN_COLUMN_LIST( VALEUR VARCHAR2, CHAMPS CLOB ) RETURN NUMERIC IS + BEGIN + IF REGEXP_LIKE(CHAMPS, '(^|,)[ \t\r\n\v\f]*' || VALEUR || '[ \t\r\n\v\f]*(,|$)') THEN RETURN 1; END IF; + RETURN 0; + END; + +END UNICAEN_IMPORT; \ No newline at end of file diff --git a/module/Application/src/Application/Service/ServiceService.php b/module/Application/src/Application/Service/ServiceService.php index 2fc4688504db44facf0424f2a7a11158730fcf82..4230114dc29f6b67381d092dd93ee37923df93ba 100644 --- a/module/Application/src/Application/Service/ServiceService.php +++ b/module/Application/src/Application/Service/ServiceService.php @@ -880,7 +880,7 @@ class ServiceService extends AbstractEntityService 'type-formation-libelle' => $d['TYPE_FORMATION_LIBELLE'], 'etape-niveau' => empty($d['ETAPE_NIVEAU']) ? null : (int)$d['ETAPE_NIVEAU'], 'etape-code' => $d['ETAPE_CODE'], - 'etape-etablissement-libelle' => $d['ETAPE_LIBELLE'] ? $d['ETAPE_LIBELLE'] : $d['SERVICE_REF_FORMATION'] ? $d['SERVICE_REF_FORMATION'] : $d['ETABLISSEMENT_LIBELLE'], + 'etape-etablissement-libelle' => $d['ETAPE_LIBELLE'] ? $d['ETAPE_LIBELLE'] : ($d['SERVICE_REF_FORMATION'] ? $d['SERVICE_REF_FORMATION'] : $d['ETABLISSEMENT_LIBELLE']), 'element-code' => $d['ELEMENT_CODE'], 'element-fonction-libelle' => $d['ELEMENT_LIBELLE'] ? $d['ELEMENT_LIBELLE'] : $d['FONCTION_REFERENTIEL_LIBELLE'], 'element-discipline-code' => $d['ELEMENT_DISCIPLINE_CODE'],