From 7c16c150e504bcd7dcd11a3d4e67010ee46f0ad5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laurent=20L=C3=A9cluse?= <laurent.lecluse@unicaen.fr> Date: Thu, 11 Mar 2021 17:01:16 +0100 Subject: [PATCH] MAJ doc --- CHANGELOG.md | 63 +- .../Cr\303\251ation tables/EMPLOYEUR.md" | 30 +- .../Cr\303\251ation tables/INTERVENANT.md" | 4 +- doc/Divers/migration-bdd-14-vers-15.sql | 2629 +++++++++++++++++ doc/Stockage-fichiers.md | 63 + doc/service_correction_bdd.md | 79 - doc/service_correction_bdd.png | Bin 83021 -> 0 bytes 7 files changed, 2778 insertions(+), 90 deletions(-) create mode 100644 doc/Divers/migration-bdd-14-vers-15.sql create mode 100644 doc/Stockage-fichiers.md delete mode 100644 doc/service_correction_bdd.md delete mode 100644 doc/service_correction_bdd.png diff --git a/CHANGELOG.md b/CHANGELOG.md index da456cac15..c6633c9a2b 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,20 +40,67 @@ Objectif : Doubles statuts et refonte des données personnelles ## Notes de mise à jour -* PHP 7.4 minimum requis : attention à bien mettre à jour vos serveurs +Merci de lire ceci **AVANT** d'entamer la mise à jour!! -* Cette version comporte de nombreux changements en particulier sur la gestion des intervenants. -La migration ne sera possible qu'à partir de la version 14.11. -Si vous êtes sur une version antérieure à la 14, merci de migrer en 14.11 **AVANT** de migrer vers la 15. +La mise à jour n'est en effet pas réversible. -* La base de données ayant été remaniée, il vous faudra adapter vos connecteurs RH. En particulier les vues sources visant les tables INTERVENANT, STRUCTURE, PAYS et DEPARTEMENT. -Une nouvelle documentation sur les connecteurs est disponible ici : [Import de données via les connecteurs](doc/Connecteurs%20Import/Connecteurs%20IMPORT.md). +Nous vous recommandons en outre de vous entrainer au préalable sur une instance de préproduction avant de passer en production. -* Lors de la mise à jour, les différents objets qui concernent vos connecteurs et sur lesquels il y a des changements à faire s'afficheront en erreur. Il vous revient de mettre à jour par vous-mêmes ces connecteurs. +### 1. PHP7.4 +PHP 7.4 est maintenant requis : attention à bien mettre à jour vos serveurs -* Attention : un bug est connu et en cours de résolution : il se produit lorsqu'en tant qu'intervenant vous saisissez vos données personnelles. Une page d'erreur s'affiche au moment ou vous sélectionnez votre statut. Une mise à jour de la page suffit pour pouvoir continuer la saisie du formulaire. +### 2. OSE 14.11 minimum +Pour cette version, il n'est pas possible de migrer depuis dde trop anciennes instances de OSE. +Avant la V15, vous devrez préalablement migrer en version 14.16. +Et ce n'est qu'à partir de la 14.16 que vous pourrez migrer vers la 15. +### 3. Connecteurs + +La structure de la base de données OSE a évolué. +Voici pour information la liste des changements opérés au niveau des structures de données : ([Changements de structures BDD 14->15](doc/Divers/migration-bdd-14-vers-15.sql)). +Ce script ne doit pas être exécuté, la procédure de migration se chargera de cela toute seule. + +Certains de vos connecteurs devront être adaptés, en particulier au niveau RH. +De même, si vous avez créé des requêtes personnalisées, des états de sortie, attention à bien tenir compte ces changmements! + +Niveau connecteurs, les changements à faire sont les suivants : +* Vue source [SRC_PAYS](doc/Connecteurs%20Import/Création%20tables/PAYS.md) : + * LIBELLE_COURT et LIBELLE_LONG disparaissent au profit de LIBELLE + * nouvelle colonne CODE +* Vue source [SRC_DEPARTEMENT](doc/Connecteurs%20Import/Création%20tables/DEPARTEMENT.md) : + * LIBELLE_COURT et LIBELLE_LONG disparaissent au profit de LIBELLE + * nouvelle colonne CODE +* Nouvelle table [VOIRIE](doc/Connecteurs%20Import/Création%20tables/VOIRIE.md) : + * Possibilité d'importer les voiries en provenance de votre système d'information. +* Vue source [SRC_STRUCTURE](doc/Connecteurs%20Import/Création%20tables/STRUCTURE.md) : + * Changement du format des adresses. Vouc pourrez vous inspirer des différents connecteurs existants pour adapter le votre. +* Vue source [SRC_INTERVENANT](doc/Connecteurs%20Import/Générique/SRC_INTERVENANT.sql) : + * Il y a ici de nombreux changements. + * La vue matérialisée [MV_INTERVENANT](doc/Connecteurs%20Import/Création%20tables/INTERVENANT.md) devra être adaptée pour fournir toutes les colonnes nécessaires. + * La vue [SRC_INTERVENANT](doc/Connecteurs%20Import/Générique/SRC_INTERVENANT.sql) doit être utilisée telle quelle, sans adaptation de votre part +* Suppression d'anciennes tables, dont les vues sources correspondantes doivent être supprimées par vos soins : + * DROP VIEW V_DIFF_ADRESSE_INTERVENANT + * DROP VIEW SRC_ADRESSE_INTERVENANT + * DROP VIEW V_DIFF_ADRESSE_STRUCTURE + * DROP VIEW SRC_ADRESSE_STRUCTURE + * Ces vues devront être supprimées AVANT la mise à jour. Le script de migration ne le fait pas automatiquement afin de vous laisser le temps de les sauvegarder le cas échéant. + +Plus généralement, [une nouvelle documentation sur les connecteurs est disponible](doc/Connecteurs Import/Connecteurs IMPORT.md). + +### 4. Activation du stockage des fichiers dans le filesystem + +Pas obligatoire, mais recommandé (sur votre instance de production). + +* [Activer le stockage des fichiers dans le système de fichiers plutôt qu'en base de données (recommandé pour la production)](doc/Stockage-fichiers.md) + +### 5. Gestion des employeurs + +OSE peut maintenant gérer un référentiel des employeurs +Vous avez deux options au choix : + * soit importer votre propre liste d'employeurs via une vue source [SRC_EMPLOYEUR](doc/Connecteurs%20Import/Création%20tables/EMPLOYEUR.md) dédiée, à l'instar des autres connecteurs + * soit injecter dans OSE la totalité des employeurs de France, liste issue du référentiel SIRENE via la commande `./bin/ose update-employeur` +Cette commande devra être exécutée de manière régulière, une fois par mois environ si vous voulez que votre référentiel d'employeurs soit à jour. # OSE 14.17 (en cours de développement) diff --git "a/doc/Connecteurs Import/Cr\303\251ation tables/EMPLOYEUR.md" "b/doc/Connecteurs Import/Cr\303\251ation tables/EMPLOYEUR.md" index 4acfede741..73f9acbe0a 100644 --- "a/doc/Connecteurs Import/Cr\303\251ation tables/EMPLOYEUR.md" +++ "b/doc/Connecteurs Import/Cr\303\251ation tables/EMPLOYEUR.md" @@ -10,6 +10,34 @@ Colonnes nécessaires : |RAISON_SOCIALE |VARCHAR2|250 |Non | | |NOM_COMMERCIAL |VARCHAR2|250 |Oui | | |IDENTIFIANT_ASSOCIATION|VARCHAR2|250 |Oui | | -|CRITERE_RECHERCHE |VARCHAR2|500 |Oui | | |Z_SOURCE_ID |NUMBER | |Non |==> SOURCE.CODE| |SOURCE_CODE |VARCHAR2|100 |Oui | | + +Voici ci-dessous un prototype de vue qui pourra vous inspirer : + +```sql +CREATE OR REPLACE FORCE VIEW SRC_EMPLOYEUR AS +WITH source_query AS ( + SELECT + 'votre SIREN' siren, + 'votre RAISON_SOCIALE' raison_sociale, + 'votre NOM_COMMERCIAL' nom_commercial, + 'votre IDENTIFIANT_ASSOCIATION' identifiant_association, + 'votre Z_SOURCE_ID' z_source_id, + 'votre SOURCE_CODE' source_code + FROM + dual +) +SELECT + sq.siren siren, + sq.raison_sociale raison_sociale, + sq.nom_commercial nom_commercial, + sq.identifiant_association identifiant_association, + -- optimisation pour accélérer les recherches + ose_divers.str_reduce( sq.raison_sociale || ' ' || sq.nom_commercial || ' ' || sq.identifiant_association ) critere_recherche, + s.id source_id, + sq.source_code source_code +FROM + source_query sq + JOIN source s ON s.code = sq.z_source_id +``` \ No newline at end of file diff --git "a/doc/Connecteurs Import/Cr\303\251ation tables/INTERVENANT.md" "b/doc/Connecteurs Import/Cr\303\251ation tables/INTERVENANT.md" index 87a95296c0..a798599f95 100644 --- "a/doc/Connecteurs Import/Cr\303\251ation tables/INTERVENANT.md" +++ "b/doc/Connecteurs Import/Cr\303\251ation tables/INTERVENANT.md" @@ -9,6 +9,8 @@ Ici, principalement pour des raisons de performances, ilest recommandé de proc * Utiliser [SRC_INTERVENANT](../Générique/SRC_INTERVENANT.sql) en tant que vue source. Cette vue SRC_INTERVENANT est commune à tous les connecteurs. Vous devez l'utiliser telle quelle. +Votre vue matérialisée MV_INTERVENANT devra contenir les colonnes suivantes : + |Colonne |Type |Longueur|Nullable|Commentaire | |--------------------------|--------|--------|--------|-----------------------------| |CODE |VARCHAR2|60 |Non | Identifiant unique de l'individu dans le système d'information l'individu | @@ -69,5 +71,3 @@ Par défaut, c'est `supannEmpId`, mais vous pouvez le personnaliser dans le fich Exemple de vue matérialisée : [MV_INTERVENANT](../Harpège/MV_INTERVENANT.sql) - -Attention : il faudra adapter le code permettant de faire le mapping au niveau du statut ainsi que de la discipline. \ No newline at end of file diff --git a/doc/Divers/migration-bdd-14-vers-15.sql b/doc/Divers/migration-bdd-14-vers-15.sql new file mode 100644 index 0000000000..48a9844f1b --- /dev/null +++ b/doc/Divers/migration-bdd-14-vers-15.sql @@ -0,0 +1,2629 @@ +-------------------------------------------------- +-- view.drop +-------------------------------------------------- + +DROP VIEW V_INDIC_DIFF_DOSSIER; +/ + + + + +-------------------------------------------------- +-- materialized-view.drop +-------------------------------------------------- + +DROP MATERIALIZED VIEW MV_EXT_SERVICE; +/ + + + + +-------------------------------------------------- +-- table.create +-------------------------------------------------- + +CREATE TABLE "ADRESSE_NUMERO_COMPL" + ( "ID" NUMBER NOT NULL ENABLE, + "CODE" VARCHAR2(5 CHAR) NOT NULL ENABLE, + "LIBELLE" VARCHAR2(120 CHAR) NOT NULL ENABLE + ); +/ + +CREATE TABLE "DOSSIER_CHAMP_AUTRE" + ( "ID" NUMBER NOT NULL ENABLE, + "DOSSIER_CHAMP_AUTRE_TYPE_ID" NUMBER DEFAULT 1 NOT NULL ENABLE, + "LIBELLE" VARCHAR2(200 CHAR), + "CONTENU" CLOB, + "OBLIGATOIRE" NUMBER(1) DEFAULT 1 NOT NULL ENABLE, + "SQL_VALUE" VARCHAR2(4000 CHAR), + "JSON_VALUE" CLOB, + "DESCRIPTION" VARCHAR2(3000 CHAR) + ); +/ + +CREATE TABLE "DOSSIER_CHAMP_AUTRE_PAR_STATUT" + ( "DOSSIER_CHAMP_AUTRE_ID" NUMBER(*,0) NOT NULL ENABLE, + "STATUT_ID" NUMBER(*,0) NOT NULL ENABLE + ); +/ + +CREATE TABLE "DOSSIER_CHAMP_AUTRE_TYPE" + ( "ID" NUMBER NOT NULL ENABLE, + "CODE" VARCHAR2(15 CHAR) NOT NULL ENABLE, + "LIBELLE" VARCHAR2(50 CHAR) NOT NULL ENABLE + ); +/ + +CREATE TABLE "EMPLOYEUR" + ( "ID" NUMBER NOT NULL ENABLE, + "SIREN" VARCHAR2(100 CHAR) NOT NULL ENABLE, + "RAISON_SOCIALE" VARCHAR2(250 CHAR) NOT NULL ENABLE, + "NOM_COMMERCIAL" VARCHAR2(250 CHAR), + "IDENTIFIANT_ASSOCIATION" VARCHAR2(250 CHAR), + "CRITERE_RECHERCHE" VARCHAR2(500 CHAR), + "SOURCE_ID" NUMBER(*,0) NOT NULL ENABLE, + "SOURCE_CODE" VARCHAR2(100 CHAR), + "HISTO_CREATION" DATE DEFAULT SYSDATE NOT NULL ENABLE, + "HISTO_CREATEUR_ID" NUMBER(*,0) NOT NULL ENABLE, + "HISTO_MODIFICATION" DATE DEFAULT SYSDATE NOT NULL ENABLE, + "HISTO_MODIFICATEUR_ID" NUMBER(*,0) NOT NULL ENABLE, + "HISTO_DESTRUCTION" DATE, + "HISTO_DESTRUCTEUR_ID" NUMBER(*,0) + ); +/ + +CREATE TABLE "INTERVENANT_DOSSIER" + ( "ID" NUMBER(*,0) NOT NULL ENABLE, + "INTERVENANT_ID" NUMBER(*,0) NOT NULL ENABLE, + "STATUT_ID" NUMBER(*,0) NOT NULL ENABLE, + "CIVILITE_ID" NUMBER(*,0), + "NOM_USUEL" VARCHAR2(60 CHAR), + "PRENOM" VARCHAR2(60 CHAR), + "DATE_NAISSANCE" DATE, + "NOM_PATRONYMIQUE" VARCHAR2(60 CHAR), + "COMMUNE_NAISSANCE" VARCHAR2(60 CHAR), + "PAYS_NAISSANCE_ID" NUMBER(*,0), + "DEPARTEMENT_NAISSANCE_ID" NUMBER(*,0), + "PAYS_NATIONALITE_ID" NUMBER(*,0), + "TEL_PRO" VARCHAR2(30 CHAR), + "TEL_PERSO" VARCHAR2(30 CHAR), + "EMAIL_PRO" VARCHAR2(255 CHAR), + "EMAIL_PERSO" VARCHAR2(255 CHAR), + "ADRESSE_PRECISIONS" VARCHAR2(240 CHAR), + "ADRESSE_NUMERO" VARCHAR2(4 CHAR), + "ADRESSE_NUMERO_COMPL_ID" NUMBER, + "ADRESSE_VOIRIE_ID" NUMBER(*,0), + "ADRESSE_VOIE" VARCHAR2(60 CHAR), + "ADRESSE_LIEU_DIT" VARCHAR2(60 CHAR), + "ADRESSE_CODE_POSTAL" VARCHAR2(15 CHAR), + "ADRESSE_COMMUNE" VARCHAR2(100 CHAR), + "ADRESSE_PAYS_ID" NUMBER(*,0), + "NUMERO_INSEE" VARCHAR2(20 CHAR), + "NUMERO_INSEE_PROVISOIRE" NUMBER(1) DEFAULT 0 NOT NULL ENABLE, + "IBAN" VARCHAR2(50 CHAR), + "BIC" VARCHAR2(20 CHAR), + "RIB_HORS_SEPA" NUMBER(1) DEFAULT 0 NOT NULL ENABLE, + "AUTRE_1" VARCHAR2(1000 CHAR), + "AUTRE_2" VARCHAR2(1000 CHAR), + "AUTRE_3" VARCHAR2(1000 CHAR), + "AUTRE_4" VARCHAR2(1000 CHAR), + "AUTRE_5" VARCHAR2(1000 CHAR), + "EMPLOYEUR_ID" NUMBER(*,0), + "HISTO_CREATION" DATE DEFAULT SYSDATE NOT NULL ENABLE, + "HISTO_CREATEUR_ID" NUMBER(*,0) NOT NULL ENABLE, + "HISTO_MODIFICATION" DATE DEFAULT SYSDATE NOT NULL ENABLE, + "HISTO_MODIFICATEUR_ID" NUMBER(*,0) NOT NULL ENABLE, + "HISTO_DESTRUCTION" DATE, + "HISTO_DESTRUCTEUR_ID" NUMBER(*,0) + ); +/ + +CREATE TABLE "INTERVENANT_PAR_DEFAUT" + ( "ID" NUMBER NOT NULL ENABLE, + "INTERVENANT_ID" NUMBER NOT NULL ENABLE, + "INTERVENANT_CODE" VARCHAR2(60 CHAR) NOT NULL ENABLE, + "ANNEE_ID" NUMBER NOT NULL ENABLE + ); +/ + +CREATE TABLE "VOIRIE" + ( "ID" NUMBER NOT NULL ENABLE, + "CODE" VARCHAR2(5 CHAR) NOT NULL ENABLE, + "LIBELLE" VARCHAR2(120 CHAR) NOT NULL ENABLE, + "SOURCE_ID" NUMBER(*,0) NOT NULL ENABLE, + "SOURCE_CODE" VARCHAR2(100 CHAR) NOT NULL ENABLE, + "HISTO_CREATION" DATE DEFAULT SYSDATE NOT NULL ENABLE, + "HISTO_CREATEUR_ID" NUMBER(*,0) NOT NULL ENABLE, + "HISTO_MODIFICATION" DATE DEFAULT SYSDATE NOT NULL ENABLE, + "HISTO_MODIFICATEUR_ID" NUMBER(*,0) NOT NULL ENABLE, + "HISTO_DESTRUCTION" DATE, + "HISTO_DESTRUCTEUR_ID" NUMBER(*,0) + ); +/ + + + + +-------------------------------------------------- +-- table.alter +-------------------------------------------------- + +COMMENT ON TABLE "CIVILITE" IS 'columns-order=ID,SEXE,LIBELLE_COURT,LIBELLE_LONG; +Liste des civilités'; +/ + +ALTER TABLE "DEPARTEMENT" ADD ("LIBELLE" VARCHAR2(120 CHAR) NOT NULL ENABLE); +/ + +ALTER TABLE "DEPARTEMENT" MODIFY ("CODE" NOT NULL); +/ + +ALTER TABLE "DEPARTEMENT" DROP COLUMN "LIBELLE_COURT"; +/ + +ALTER TABLE "DEPARTEMENT" DROP COLUMN "LIBELLE_LONG"; +/ + +ALTER TABLE "IMPORT_TABLES" ADD ("KEY_COLUMNS" VARCHAR2(1000 CHAR)); +/ + +ALTER TABLE "IMPORT_TABLES" ADD ("SYNC_NON_IMPORTABLES" NUMBER(1) DEFAULT 0 NOT NULL ENABLE); +/ + +ALTER TABLE "INTERVENANT" ADD ("ADRESSE_CODE_POSTAL" VARCHAR2(15 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("ADRESSE_COMMUNE" VARCHAR2(50 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("ADRESSE_LIEU_DIT" VARCHAR2(60 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("ADRESSE_NUMERO" VARCHAR2(4 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("ADRESSE_NUMERO_COMPL_ID" NUMBER); +/ + +ALTER TABLE "INTERVENANT" ADD ("ADRESSE_PAYS_ID" NUMBER); +/ + +ALTER TABLE "INTERVENANT" ADD ("ADRESSE_PRECISIONS" VARCHAR2(240 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("ADRESSE_VOIE" VARCHAR2(60 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("ADRESSE_VOIRIE_ID" NUMBER); +/ + +ALTER TABLE "INTERVENANT" ADD ("AUTRE_1" VARCHAR2(1000 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("AUTRE_2" VARCHAR2(1000 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("AUTRE_3" VARCHAR2(1000 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("AUTRE_4" VARCHAR2(1000 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("AUTRE_5" VARCHAR2(1000 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("CODE_RH" VARCHAR2(60 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("COMMUNE_NAISSANCE" VARCHAR2(60 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("DEPARTEMENT_NAISSANCE_ID" NUMBER(*,0)); +/ + +ALTER TABLE "INTERVENANT" ADD ("EMAIL_PERSO" VARCHAR2(255 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("EMAIL_PRO" VARCHAR2(255 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("EMPLOYEUR_ID" NUMBER); +/ + +ALTER TABLE "INTERVENANT" ADD ("SYNC_STATUT" NUMBER(1) DEFAULT 1 NOT NULL ENABLE); +/ + +ALTER TABLE "INTERVENANT" ADD ("SYNC_STRUCTURE" NUMBER(1) DEFAULT 1 NOT NULL ENABLE); +/ + +ALTER TABLE "INTERVENANT" ADD ("SYNC_UTILISATEUR_CODE" NUMBER(1) DEFAULT 1 NOT NULL ENABLE); +/ + +ALTER TABLE "INTERVENANT" ADD ("TEL_PERSO" VARCHAR2(30 CHAR)); +/ + +ALTER TABLE "INTERVENANT" ADD ("VALIDITE_DEBUT" DATE); +/ + +ALTER TABLE "INTERVENANT" ADD ("VALIDITE_FIN" DATE); +/ + +ALTER TABLE "INTERVENANT" MODIFY ("CODE" NOT NULL); +/ + +ALTER TABLE "INTERVENANT" MODIFY ("NUMERO_INSEE" VARCHAR2(20 CHAR)); +/ + +ALTER TABLE "INTERVENANT" MODIFY ("NUMERO_INSEE_PROVISOIRE" NOT NULL); +/ + +ALTER TABLE "INTERVENANT" MODIFY ("NUMERO_INSEE_PROVISOIRE" DEFAULT 0 ); +/ + +ALTER TABLE "INTERVENANT" MODIFY ("SOURCE_CODE" NOT NULL); +/ + +ALTER TABLE "INTERVENANT" MODIFY ("TEL_PRO" VARCHAR2(30 CHAR)); +/ + +ALTER TABLE "INTERVENANT" DROP COLUMN "DEP_NAISSANCE_ID"; +/ + +ALTER TABLE "INTERVENANT" DROP COLUMN "EMAIL"; +/ + +ALTER TABLE "INTERVENANT" DROP COLUMN "NUMERO_INSEE_CLE"; +/ + +ALTER TABLE "INTERVENANT" DROP COLUMN "PREMIER_RECRUTEMENT"; +/ + +ALTER TABLE "INTERVENANT" DROP COLUMN "TEL_MOBILE"; +/ + +ALTER TABLE "INTERVENANT" DROP COLUMN "VILLE_NAISSANCE_CODE_INSEE"; +/ + +ALTER TABLE "INTERVENANT" DROP COLUMN "VILLE_NAISSANCE_LIBELLE"; +/ + +COMMENT ON TABLE "INTERVENANT" IS 'columns-order=ID,ANNEE_ID,CODE,UTILISATEUR_CODE,STRUCTURE_ID,STATUT_ID,GRADE_ID,DISCIPLINE_ID,CIVILITE_ID,NOM_USUEL,PRENOM,DATE_NAISSANCE,NOM_PATRONYMIQUE,COMMUNE_NAISSANCE,PAYS_NAISSANCE_ID,DEPARTEMENT_NAISSANCE_ID,PAYS_NATIONALITE_ID,TEL_PRO,TEL_PERSO,EMAIL_PRO,EMAIL_PERSO,ADDR_PRECISIONS,ADDR_NUMERO,ADDR_NUMERO_COMPL_ID,ADDR_VOIRIE_ID,ADDR_VOIE,ADDR_LIEU_DIT,ADDR_CODE_POSTAL,ADDR_COMMUNE,ADDR_PAYS_ID,NUMERO_INSEE,NUMERO_INSEE_PROVISOIRE,IBAN,BIC,RIB_HORS_SEPA,AUTRE_1,AUTRE_2,AUTRE_3,AUTRE_4,AUTRE_5,EMPLOYEUR_ID,MONTANT_INDEMNITE_FC,CRITERE_RECHERCHE,SOURCE_ID,SOURCE_CODE,SYNC_STATUT,SYNC_STRUCTURE,HISTO_CREATION,HISTO_CREATEUR_ID,HISTO_MODIFICATION,HISTO_MODIFICATEUR_ID,HISTO_DESTRUCTION,HISTO_DESTRUCTEUR_ID;'; +/ + +ALTER TABLE "PAYS" ADD ("CODE" VARCHAR2(15 CHAR) NOT NULL ENABLE); +/ + +ALTER TABLE "PAYS" ADD ("LIBELLE" VARCHAR2(120 CHAR) NOT NULL ENABLE); +/ + +ALTER TABLE "PAYS" DROP COLUMN "LIBELLE_COURT"; +/ + +ALTER TABLE "PAYS" DROP COLUMN "LIBELLE_LONG"; +/ + +ALTER TABLE "STATUT_INTERVENANT" ADD ("CODE" VARCHAR2(50 CHAR) NOT NULL ENABLE); +/ + +ALTER TABLE "STATUT_INTERVENANT" ADD ("DOSSIER_ADRESSE" NUMBER(1) DEFAULT 1 NOT NULL ENABLE); +/ + +ALTER TABLE "STATUT_INTERVENANT" ADD ("DOSSIER_CONTACT" NUMBER(1) DEFAULT 1 NOT NULL ENABLE); +/ + +ALTER TABLE "STATUT_INTERVENANT" ADD ("DOSSIER_EMAIL_PERSO" NUMBER(1) DEFAULT 0 NOT NULL ENABLE); +/ + +ALTER TABLE "STATUT_INTERVENANT" ADD ("DOSSIER_EMPLOYEUR" NUMBER(1) DEFAULT 0 NOT NULL ENABLE); +/ + +ALTER TABLE "STATUT_INTERVENANT" ADD ("DOSSIER_IBAN" NUMBER(1) DEFAULT 1 NOT NULL ENABLE); +/ + +ALTER TABLE "STATUT_INTERVENANT" ADD ("DOSSIER_IDENTITE_COMP" NUMBER(1) DEFAULT 1 NOT NULL ENABLE); +/ + +ALTER TABLE "STATUT_INTERVENANT" ADD ("DOSSIER_INSEE" NUMBER(1) DEFAULT 1 NOT NULL ENABLE); +/ + +ALTER TABLE "STATUT_INTERVENANT" ADD ("DOSSIER_TEL_PERSO" NUMBER(1) DEFAULT 0 NOT NULL ENABLE); +/ + +ALTER TABLE "STATUT_INTERVENANT" DROP COLUMN "SOURCE_CODE"; +/ + +ALTER TABLE "STATUT_INTERVENANT" DROP COLUMN "SOURCE_ID"; +/ + +ALTER TABLE "STRUCTURE" ADD ("ADRESSE_CODE_POSTAL" VARCHAR2(15 CHAR)); +/ + +ALTER TABLE "STRUCTURE" ADD ("ADRESSE_COMMUNE" VARCHAR2(50 CHAR)); +/ + +ALTER TABLE "STRUCTURE" ADD ("ADRESSE_LIEU_DIT" VARCHAR2(60 CHAR)); +/ + +ALTER TABLE "STRUCTURE" ADD ("ADRESSE_NUMERO" VARCHAR2(4 CHAR)); +/ + +ALTER TABLE "STRUCTURE" ADD ("ADRESSE_NUMERO_COMPL_ID" NUMBER); +/ + +ALTER TABLE "STRUCTURE" ADD ("ADRESSE_PAYS_ID" NUMBER(*,0)); +/ + +ALTER TABLE "STRUCTURE" ADD ("ADRESSE_PRECISIONS" VARCHAR2(240 CHAR)); +/ + +ALTER TABLE "STRUCTURE" ADD ("ADRESSE_VOIE" VARCHAR2(60 CHAR)); +/ + +ALTER TABLE "STRUCTURE" ADD ("ADRESSE_VOIRIE_ID" NUMBER(*,0)); +/ + +ALTER TABLE "TBL" ADD ("PARAMETRES" VARCHAR2(500 CHAR)); +/ + +ALTER TABLE "TBL_AGREMENT" MODIFY ("CODE_INTERVENANT" NOT NULL); +/ + +ALTER TABLE "TBL_AGREMENT" MODIFY ("DUREE_VIE" NOT NULL); +/ + +ALTER TABLE "TBL_AGREMENT" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_CHARGENS" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_CHARGENS_SEUILS_DEF" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_CLOTURE_REALISE" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_CONTRAT" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_DMEP_LIQUIDATION" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_DOSSIER" ADD ("COMPLETUDE_ADRESSE" NUMBER(*,0) DEFAULT 0); +/ + +ALTER TABLE "TBL_DOSSIER" ADD ("COMPLETUDE_AUTRES" NUMBER(*,0) DEFAULT 0); +/ + +ALTER TABLE "TBL_DOSSIER" ADD ("COMPLETUDE_CONTACT" NUMBER(*,0) DEFAULT 0); +/ + +ALTER TABLE "TBL_DOSSIER" ADD ("COMPLETUDE_EMPLOYEUR" NUMBER(*,0) DEFAULT 0); +/ + +ALTER TABLE "TBL_DOSSIER" ADD ("COMPLETUDE_IBAN" NUMBER(*,0) DEFAULT 0); +/ + +ALTER TABLE "TBL_DOSSIER" ADD ("COMPLETUDE_IDENTITE" NUMBER(*,0) DEFAULT 0); +/ + +ALTER TABLE "TBL_DOSSIER" ADD ("COMPLETUDE_IDENTITE_COMP" NUMBER(*,0) DEFAULT 0); +/ + +ALTER TABLE "TBL_DOSSIER" ADD ("COMPLETUDE_INSEE" NUMBER(*,0) DEFAULT 0); +/ + +ALTER TABLE "TBL_DOSSIER" ADD ("COMPLETUDE_STATUT" NUMBER(*,0) DEFAULT 0); +/ + +ALTER TABLE "TBL_DOSSIER" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_LIEN" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_PAIEMENT" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_PIECE_JOINTE" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_PIECE_JOINTE_DEMANDE" MODIFY ("CODE_INTERVENANT" NOT NULL); +/ + +ALTER TABLE "TBL_PIECE_JOINTE_DEMANDE" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_PIECE_JOINTE_FOURNIE" MODIFY ("CODE_INTERVENANT" NOT NULL); +/ + +ALTER TABLE "TBL_PIECE_JOINTE_FOURNIE" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_SERVICE" MODIFY ("TYPE_VOLUME_HORAIRE_CODE" NOT NULL); +/ + +ALTER TABLE "TBL_SERVICE" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_SERVICE_REFERENTIEL" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_SERVICE_SAISIE" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_VALIDATION_ENSEIGNEMENT" DROP COLUMN "TO_DELETE"; +/ + +ALTER TABLE "TBL_VALIDATION_REFERENTIEL" DROP COLUMN "TO_DELETE"; +/ + + + + +-------------------------------------------------- +-- view.alter +-------------------------------------------------- + +CREATE OR REPLACE FORCE VIEW V_AGREMENT_EXPORT_CSV AS +WITH heures_s AS ( + SELECT + i.id intervenant_id, + COALESCE(ep.structure_id,i.structure_id) structure_id, + SUM(frs.service_fi) service_fi, + SUM(frs.service_fa) service_fa, + SUM(frs.service_fc) service_fc, + SUM(frs.heures_compl_fi) heures_compl_fi, + SUM(frs.heures_compl_fa) heures_compl_fa, + SUM(frs.heures_compl_fc) heures_compl_fc, + SUM(frs.heures_compl_fc_majorees) heures_compl_fc_majorees, + SUM(frs.total) total + FROM + formule_resultat_service frs + JOIN type_volume_horaire tvh ON tvh.code = 'PREVU' + JOIN etat_volume_horaire evh ON evh.code = 'valide' + JOIN formule_resultat fr ON fr.id = frs.formule_resultat_id + AND fr.type_volume_horaire_id = tvh.id + AND fr.etat_volume_horaire_id = evh.id + JOIN intervenant i ON i.id = fr.intervenant_id + JOIN service s ON s.id = frs.service_id + LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + GROUP BY + i.id, + ep.structure_id, + i.structure_id +) +SELECT + a.id annee_id, + i.id intervenant_id, + s.id structure_id, + + a.libelle annee, + s.libelle_court structure_libelle, + i.code intervenant_code, + i.nom_usuel intervenant_nom_usuel, + i.nom_patronymique intervenant_nom_patronymique, + i.prenom intervenant_prenom, + + si.libelle intervenant_statut_libelle, + d.libelle_court discipline, + + COALESCE(heures_s.service_fi, fr.service_fi) + + COALESCE(heures_s.heures_compl_fi, fr.heures_compl_fi) + hetd_fi, + COALESCE(heures_s.service_fa, fr.service_fa) + + COALESCE(heures_s.heures_compl_fa, fr.heures_compl_fa) + hetd_fa, + COALESCE(heures_s.service_fc, fr.service_fc) + + COALESCE(heures_s.heures_compl_fc, fr.heures_compl_fc) + + COALESCE(heures_s.heures_compl_fc_majorees, fr.heures_compl_fc_majorees) + hetd_fc, + COALESCE(heures_s.total, fr.total) hetd_total, + + + + + tagr.libelle type_agrement, + CASE WHEN agr.id IS NULL THEN 0 ELSE 1 END agree, + agr.date_decision date_decision, + u.display_name modificateur, + agr.histo_modification date_modification +FROM + tbl_agrement ta + JOIN intervenant i ON i.id = ta.intervenant_id + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN annee a ON a.id = ta.annee_id + JOIN type_agrement tagr ON tagr.id = ta.type_agrement_id + JOIN type_volume_horaire tvh ON tvh.code = 'PREVU' + JOIN etat_volume_horaire evh ON evh.code = 'valide' + + + LEFT JOIN STRUCTURE s ON s.id = ta.structure_id + LEFT JOIN agrement agr ON agr.id = ta.agrement_id + LEFT JOIN utilisateur u ON u.id = agr.histo_modificateur_id + LEFT JOIN discipline d ON d.id = i.discipline_id + + LEFT JOIN formule_resultat fr ON fr.intervenant_id = i.id + AND fr.type_volume_horaire_id = tvh.id + AND fr.etat_volume_horaire_id = evh.id + + LEFT JOIN heures_s ON heures_s.intervenant_id = i.id + AND heures_s.structure_id = s.id; +/ + +CREATE OR REPLACE FORCE VIEW V_CONTRAT_MAIN AS +WITH hs AS ( + SELECT contrat_id, SUM(heures) "serviceTotal" FROM V_CONTRAT_SERVICES GROUP BY contrat_id +) +SELECT + ct.annee_id, + ct.structure_id, + ct.intervenant_id, + ct.formule_resultat_id, + ct.id contrat_id, + + ct."annee", + ct."nom", + ct."prenom", + ct."civilite", + ct."e", + ct."dateNaissance", + ct."adresse", + ct."numInsee", + ct."statut", + ct."totalHETD", + ct."tauxHoraireValeur", + ct."tauxHoraireDate", + ct."dateSignature", + ct."modifieComplete", + CASE WHEN ct.est_contrat=1 THEN 1 ELSE NULL END "contrat1", + CASE WHEN ct.est_contrat=1 THEN NULL ELSE 1 END "avenant1", + CASE WHEN ct.est_contrat=1 THEN '3' ELSE '2' END "n", + to_char(SYSDATE, 'dd/mm/YYYY - hh24:mi:ss') "horodatage", + 'Exemplaire à conserver' "exemplaire1", + 'Exemplaire à retourner' || ct."exemplaire2" "exemplaire2", + ct."serviceTotal", + + CASE ct.est_contrat + WHEN 1 THEN -- contrat + 'Contrat de travail' + ELSE + 'Avenant au contrat de travail initial modifiant le volume horaire initial' + || ' de recrutement en qualité' + END "titre", + CASE WHEN ct.est_atv = 1 THEN + 'd''agent temporaire vacataire' + ELSE + 'de chargé' || ct."e" || ' d''enseignement vacataire' + END "qualite", + + CASE + WHEN ct.est_projet = 1 AND ct.est_contrat = 1 THEN 'Projet de contrat' + WHEN ct.est_projet = 0 AND ct.est_contrat = 1 THEN 'Contrat n°' || ct.id + WHEN ct.est_projet = 1 AND ct.est_contrat = 0 THEN 'Projet d''avenant' + WHEN ct.est_projet = 0 AND ct.est_contrat = 0 THEN 'Avenant n°' || ct.contrat_id || '.' || ct.numero_avenant + END "titreCourt" +FROM +( + SELECT + c.*, + i.annee_id annee_id, + fr.id formule_resultat_id, + a.libelle "annee", + COALESCE(d.nom_usuel,i.nom_usuel) "nom", + COALESCE(d.prenom,i.prenom) "prenom", + civ.libelle_court "civilite", + CASE WHEN civ.sexe = 'F' THEN 'e' ELSE '' END "e", + to_char(COALESCE(d.date_naissance,i.date_naissance), 'dd/mm/YYYY') "dateNaissance", + COALESCE( + ose_divers.formatted_adresse( + d.adresse_precisions, d.adresse_lieu_dit, + d.adresse_numero, d.adresse_numero_compl_id, d.adresse_voirie_id, d.adresse_voie, + d.adresse_code_postal, d.adresse_commune, d.adresse_pays_id + ), + ose_divers.formatted_adresse( + i.adresse_precisions, i.adresse_lieu_dit, + i.adresse_numero, i.adresse_numero_compl_id, i.adresse_voirie_id, i.adresse_voie, + i.adresse_code_postal, i.adresse_commune, i.adresse_pays_id + ) + ) "adresse", + COALESCE(d.numero_insee,i.numero_insee) "numInsee", + si.libelle "statut", + REPLACE(ltrim(to_char(COALESCE(c.total_hetd, fr.total,0), '999999.00')),'.',',') "totalHETD", + REPLACE(ltrim(to_char(COALESCE(th.valeur,0), '999999.00')),'.',',') "tauxHoraireValeur", + COALESCE(to_char(th.histo_creation, 'dd/mm/YYYY'), 'TAUX INTROUVABLE') "tauxHoraireDate", + to_char(COALESCE(v.histo_creation, c.histo_creation), 'dd/mm/YYYY') "dateSignature", + CASE WHEN c.structure_id <> COALESCE(cp.structure_id,0) THEN 'modifié' ELSE 'complété' END "modifieComplete", + CASE WHEN s.aff_adresse_contrat = 1 THEN + ' signé à l''adresse suivante :' || CHR(13) || CHR(10) || + s.libelle_court || ' - ' || REPLACE(ose_divers.formatted_adresse( + s.adresse_precisions, s.adresse_lieu_dit, + s.adresse_numero, s.adresse_numero_compl_id, s.adresse_voirie_id, s.adresse_voie, + s.adresse_code_postal, s.adresse_commune, s.adresse_pays_id + ), CHR(13), ' - ') + ELSE '' END "exemplaire2", + REPLACE(ltrim(to_char(COALESCE(hs."serviceTotal",0), '999999.00')),'.',',') "serviceTotal", + CASE WHEN c.contrat_id IS NULL THEN 1 ELSE 0 END est_contrat, + CASE WHEN v.id IS NULL THEN 1 ELSE 0 END est_projet, + si.tem_atv est_atv + + FROM + contrat c + JOIN type_contrat tc ON tc.id = c.type_contrat_id + JOIN intervenant i ON i.id = c.intervenant_id + JOIN annee a ON a.id = i.annee_id + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN STRUCTURE s ON s.id = c.structure_id + LEFT JOIN intervenant_dossier d ON d.intervenant_id = i.id AND d.histo_destruction IS NULL + JOIN civilite civ ON civ.id = COALESCE(d.civilite_id,i.civilite_id) + LEFT JOIN validation v ON v.id = c.validation_id AND v.histo_destruction IS NULL + JOIN type_volume_horaire tvh ON tvh.code = 'PREVU' + JOIN etat_volume_horaire evh ON evh.code = 'valide' + LEFT JOIN formule_resultat fr ON fr.intervenant_id = i.id AND fr.type_volume_horaire_id = tvh.id AND fr.etat_volume_horaire_id = evh.id + LEFT JOIN taux_horaire_hetd th ON c.histo_creation BETWEEN th.histo_creation AND COALESCE(th.histo_destruction,SYSDATE) + LEFT JOIN hs ON hs.contrat_id = c.id + LEFT JOIN contrat cp ON cp.id = c.contrat_id + WHERE + c.histo_destruction IS NULL +) ct; +/ + +CREATE OR REPLACE FORCE VIEW V_CONTRAT_SERVICES AS +SELECT + c.id contrat_id, + str.libelle_court "serviceComposante", + ep.code "serviceCode", + ep.libelle "serviceLibelle", + SUM(vh.heures) heures, + REPLACE(ltrim(to_char(SUM(vh.heures), '999999.00')),'.',',') "serviceHeures" +FROM + contrat c + JOIN STRUCTURE str ON str.id = c.structure_id + JOIN volume_horaire vh ON vh.contrat_id = c.id AND vh.histo_destruction IS NULL + JOIN service s ON s.id = vh.service_id + LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id +GROUP BY + c.id, str.libelle_court, ep.code, ep.libelle; +/ + +CREATE OR REPLACE FORCE VIEW V_ETAT_PAIEMENT AS +SELECT + annee_id, + type_intervenant_id, + structure_id, + periode_id, + intervenant_id, + centre_cout_id, + domaine_fonctionnel_id, + + annee_id || '/' || (annee_id+1) annee, + etat, + composante, + date_mise_en_paiement, + periode, + statut, + intervenant_code, + intervenant_nom, + intervenant_numero_insee, + centre_cout_code, + centre_cout_libelle, + domaine_fonctionnel_code, + domaine_fonctionnel_libelle, + hetd, + CASE WHEN pourc_ecart >= 0 THEN + CASE WHEN RANK() OVER (PARTITION BY periode_id, intervenant_id, etat, structure_id ORDER BY CASE WHEN (pourc_ecart >= 0 AND pourc_diff >= 0) OR (pourc_ecart < 0 AND pourc_diff < 0) THEN pourc_diff ELSE -1 END DESC) <= (ABS(pourc_ecart) / 0.001) THEN hetd_pourc + (pourc_ecart / ABS(pourc_ecart) * 0.001) ELSE hetd_pourc END + ELSE + CASE WHEN RANK() OVER (PARTITION BY periode_id, intervenant_id, etat, structure_id ORDER BY CASE WHEN (pourc_ecart >= 0 AND pourc_diff >= 0) OR (pourc_ecart < 0 AND pourc_diff < 0) THEN pourc_diff ELSE -1 END) <= (ABS(pourc_ecart) / 0.001) THEN hetd_pourc + (pourc_ecart / ABS(pourc_ecart) * 0.001) ELSE hetd_pourc END + END hetd_pourc, + hetd_montant, + rem_fc_d714, + exercice_aa, + exercice_aa_montant, + exercice_ac, + exercice_ac_montant + FROM + ( + SELECT + dep3.*, + + 1-CASE WHEN hetd > 0 THEN SUM( hetd_pourc ) OVER ( PARTITION BY periode_id, intervenant_id, etat, structure_id) ELSE 0 END pourc_ecart + + + FROM ( + + SELECT + periode_id, + structure_id, + type_intervenant_id, + intervenant_id, + annee_id, + centre_cout_id, + domaine_fonctionnel_id, + etat, + composante, + date_mise_en_paiement, + periode, + statut, + intervenant_code, + intervenant_nom, + intervenant_numero_insee, + centre_cout_code, + centre_cout_libelle, + domaine_fonctionnel_code, + domaine_fonctionnel_libelle, + hetd, + ROUND( CASE WHEN hetd > 0 THEN hetd / SUM( hetd ) OVER( PARTITION BY periode_id, intervenant_id, etat, structure_id) ELSE 0 END, 3 ) hetd_pourc, + ROUND( hetd * taux_horaire, 2 ) hetd_montant, + ROUND( fc_majorees * taux_horaire, 2 ) rem_fc_d714, + exercice_aa, + ROUND( exercice_aa * taux_horaire, 2 ) exercice_aa_montant, + exercice_ac, + ROUND( exercice_ac * taux_horaire, 2 ) exercice_ac_montant, + + + (CASE WHEN hetd > 0 THEN hetd / SUM( hetd ) OVER( PARTITION BY periode_id, intervenant_id, etat, structure_id) ELSE 0 END) + - + ROUND( CASE WHEN hetd > 0 THEN hetd / SUM( hetd ) OVER( PARTITION BY periode_id, intervenant_id, etat, structure_id) ELSE 0 END, 3 ) pourc_diff + + FROM ( + WITH dep AS ( -- détails par état de paiement + SELECT + CASE WHEN th.code = 'fc_majorees' THEN 1 ELSE 0 END is_fc_majoree, + p.id periode_id, + s.id structure_id, + i.id intervenant_id, + i.annee_id annee_id, + cc.id centre_cout_id, + df.id domaine_fonctionnel_id, + ti.id type_intervenant_id, + CASE + WHEN mep.date_mise_en_paiement IS NULL THEN 'a-mettre-en-paiement' + ELSE 'mis-en-paiement' + END etat, + + TRIM(p.libelle_long || ' ' || to_char( add_months( a.date_debut, p.ecart_mois ), 'yyyy' )) periode, + mep.date_mise_en_paiement date_mise_en_paiement, + s.libelle_court composante, + ti.libelle statut, + i.source_code intervenant_code, + i.nom_usuel || ' ' || i.prenom intervenant_nom, + i.numero_insee intervenant_numero_insee, + cc.source_code centre_cout_code, + cc.libelle centre_cout_libelle, + df.source_code domaine_fonctionnel_code, + df.libelle domaine_fonctionnel_libelle, + CASE WHEN th.code = 'fc_majorees' THEN 0 ELSE mep.heures END hetd, + CASE WHEN th.code = 'fc_majorees' THEN mep.heures ELSE 0 END fc_majorees, + mep.heures * 4 / 10 exercice_aa, + mep.heures * 6 / 10 exercice_ac, + --CASE WHEN th.code = 'fc_majorees' THEN 0 ELSE mep.heures END * 4 / 10 exercice_aa, + --CASE WHEN th.code = 'fc_majorees' THEN 0 ELSE mep.heures END * 6 / 10 exercice_ac, + OSE_FORMULE.GET_TAUX_HORAIRE_HETD( NVL(mep.date_mise_en_paiement,SYSDATE) ) taux_horaire + FROM + v_mep_intervenant_structure mis + JOIN mise_en_paiement mep ON mep.id = mis.mise_en_paiement_id AND mep.histo_destruction IS NULL + JOIN type_heures th ON th.id = mep.type_heures_id + JOIN centre_cout cc ON cc.id = mep.centre_cout_id -- pas d'historique pour les centres de coût, qui devront tout de même apparaitre mais en erreur + JOIN intervenant i ON i.id = mis.intervenant_id AND i.histo_destruction IS NULL + JOIN annee a ON a.id = i.annee_id + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN type_intervenant ti ON ti.id = si.type_intervenant_id + JOIN STRUCTURE s ON s.id = mis.structure_id + LEFT JOIN validation v ON v.id = mep.validation_id AND v.histo_destruction IS NULL + LEFT JOIN domaine_fonctionnel df ON df.id = mis.domaine_fonctionnel_id + LEFT JOIN periode p ON p.id = mep.periode_paiement_id + ) + SELECT + periode_id, + structure_id, + type_intervenant_id, + intervenant_id, + annee_id, + centre_cout_id, + domaine_fonctionnel_id, + etat, + periode, + composante, + date_mise_en_paiement, + statut, + intervenant_code, + intervenant_nom, + intervenant_numero_insee, + centre_cout_code, + centre_cout_libelle, + domaine_fonctionnel_code, + domaine_fonctionnel_libelle, + SUM( hetd ) hetd, + SUM( fc_majorees ) fc_majorees, + SUM( exercice_aa ) exercice_aa, + SUM( exercice_ac ) exercice_ac, + taux_horaire + FROM + dep + GROUP BY + periode_id, + structure_id, + type_intervenant_id, + intervenant_id, + annee_id, + centre_cout_id, + domaine_fonctionnel_id, + etat, + periode, + composante, + date_mise_en_paiement, + statut, + intervenant_code, + intervenant_nom, + intervenant_numero_insee, + centre_cout_code, + centre_cout_libelle, + domaine_fonctionnel_code, + domaine_fonctionnel_libelle, + taux_horaire, + is_fc_majoree + ) + dep2 + ) + dep3 + ) + dep4 + ORDER BY + annee_id, + type_intervenant_id, + structure_id, + periode_id, + intervenant_nom; +/ + +CREATE OR REPLACE FORCE VIEW V_EXPORT_PAIEMENT_WINPAIE AS +SELECT + annee_id, + type_intervenant_id, + structure_id, + periode_id, + intervenant_id, + + insee, + nom, + '20' carte, + code_origine, + CASE WHEN type_intervenant_code = 'P' THEN '0204' ELSE '2251' END retenue, + '0' sens, + 'B' mc, + nbu, + montant, + libelle || ' ' || LPAD(TO_CHAR(FLOOR(nbu)),2,'00') || ' H' || + CASE to_char(ROUND( nbu-FLOOR(nbu), 2 )*100,'00') + WHEN ' 00' THEN '' ELSE ' ' || LPAD(ROUND( nbu-FLOOR(nbu), 2 )*100,2,'00') END libelle +FROM ( + SELECT + i.annee_id annee_id, + ti.id type_intervenant_id, + ti.code type_intervenant_code, + t2.structure_id structure_id, + t2.periode_paiement_id periode_id, + i.id intervenant_id, + CASE WHEN i.numero_insee IS NULL THEN '''' ELSE + '''' || TRIM(i.numero_insee) + END insee, + i.nom_usuel || ',' || i.prenom nom, + t2.code_origine code_origine, + CASE WHEN ind <> CEIL(t2.nbu/max_nbu) THEN max_nbu ELSE t2.nbu - max_nbu*(ind-1) END nbu, + t2.nbu tnbu, + OSE_FORMULE.GET_TAUX_HORAIRE_HETD( NVL(t2.date_mise_en_paiement,SYSDATE) ) montant, + COALESCE(t2.unite_budgetaire,'') || ' ' || to_char(i.annee_id) || ' ' || to_char(i.annee_id+1) libelle + FROM ( + SELECT + structure_id, + periode_paiement_id, + intervenant_id, + code_origine, + ROUND( SUM(nbu), 2) nbu, + unite_budgetaire, + date_mise_en_paiement + FROM ( + WITH mep AS ( + SELECT + -- pour les filtres + mep.id, + mis.structure_id, + mep.periode_paiement_id, + mis.intervenant_id, + mep.heures, + cc.unite_budgetaire, + mep.date_mise_en_paiement + FROM + v_mep_intervenant_structure mis + JOIN mise_en_paiement mep ON mep.id = mis.mise_en_paiement_id AND mep.histo_destruction IS NULL + JOIN centre_cout cc ON cc.id = mep.centre_cout_id + JOIN type_heures th ON th.id = mep.type_heures_id + WHERE + mep.date_mise_en_paiement IS NOT NULL + AND mep.periode_paiement_id IS NOT NULL + AND th.eligible_extraction_paie = 1 + ) + SELECT + mep.id, + mep.structure_id, + mep.periode_paiement_id, + mep.intervenant_id, + 2 code_origine, + mep.heures * 4 / 10 nbu, + mep.unite_budgetaire, + mep.date_mise_en_paiement + FROM + mep + WHERE + mep.heures * 4 / 10 > 0 + + UNION + + SELECT + mep.id, + mep.structure_id, + mep.periode_paiement_id, + mep.intervenant_id, + 1 code_origine, + mep.heures * 6 / 10 nbu, + mep.unite_budgetaire, + mep.date_mise_en_paiement + FROM + mep + WHERE + mep.heures * 6 / 10 > 0 + ) t1 + GROUP BY + structure_id, + periode_paiement_id, + intervenant_id, + code_origine, + unite_budgetaire, + date_mise_en_paiement + ) t2 + JOIN (SELECT level ind, 99 max_nbu FROM dual CONNECT BY 1=1 AND LEVEL <= 11) tnbu ON CEIL(t2.nbu / max_nbu) >= ind + JOIN intervenant i ON i.id = t2.intervenant_id + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN type_intervenant ti ON ti.id = si.type_intervenant_id + JOIN STRUCTURE s ON s.id = t2.structure_id +) t3 +ORDER BY + annee_id, type_intervenant_id, structure_id, periode_id, nom, code_origine, nbu DESC; +/ + +CREATE OR REPLACE FORCE VIEW V_EXPORT_SERVICE AS +WITH t AS ( SELECT + 'vh_' || vh.id id, + s.id service_id, + NULL service_referentiel_id, + s.intervenant_id intervenant_id, + vh.type_volume_horaire_id type_volume_horaire_id, + fr.etat_volume_horaire_id etat_volume_horaire_id, + s.element_pedagogique_id element_pedagogique_id, + s.etablissement_id etablissement_id, + NULL structure_aff_id, + NULL structure_ens_id, + vh.periode_id periode_id, + vh.type_intervention_id type_intervention_id, + NULL fonction_referentiel_id, + NULL motif_non_paiement_id, + + s.description service_description, + + vh.heures heures, + 0 heures_ref, + 0 heures_non_payees, + NULL motif_non_paiement, + frvh.service_fi service_fi, + frvh.service_fa service_fa, + frvh.service_fc service_fc, + 0 service_referentiel, + frvh.heures_compl_fi heures_compl_fi, + frvh.heures_compl_fa heures_compl_fa, + frvh.heures_compl_fc heures_compl_fc, + frvh.heures_compl_fc_majorees heures_compl_fc_majorees, + 0 heures_compl_referentiel, + frvh.total total, + fr.solde solde, + NULL service_ref_formation, + NULL commentaires +FROM + formule_resultat_vh frvh + JOIN formule_resultat fr ON fr.id = frvh.formule_resultat_id + JOIN volume_horaire vh ON vh.id = frvh.volume_horaire_id AND vh.motif_non_paiement_id IS NULL AND vh.histo_destruction IS NULL + JOIN service s ON s.id = vh.service_id AND s.intervenant_id = fr.intervenant_id AND s.histo_destruction IS NULL + +UNION ALL + +SELECT + 'vh_' || vh.id id, + s.id service_id, + NULL service_referentiel_id, + s.intervenant_id intervenant_id, + vh.type_volume_horaire_id type_volume_horaire_id, + vhe.etat_volume_horaire_id etat_volume_horaire_id, + s.element_pedagogique_id element_pedagogique_id, + s.etablissement_id etablissement_id, + NULL structure_aff_id, + NULL structure_ens_id, + vh.periode_id periode_id, + vh.type_intervention_id type_intervention_id, + NULL fonction_referentiel_id, + mnp.id motif_non_paiement_id, + + s.description service_description, + + vh.heures heures, + 0 heures_ref, + 1 heures_non_payees, + mnp.libelle_court motif_non_paiement, + 0 service_fi, + 0 service_fa, + 0 service_fc, + 0 service_referentiel, + 0 heures_compl_fi, + 0 heures_compl_fa, + 0 heures_compl_fc, + 0 heures_compl_fc_majorees, + 0 heures_compl_referentiel, + 0 total, + COALESCE(fr.solde,0) solde, + NULL service_ref_formation, + NULL commentaires +FROM + volume_horaire vh + JOIN service s ON s.id = vh.service_id + JOIN v_vol_horaire_etat_multi vhe ON vhe.volume_horaire_id = vh.id + JOIN motif_non_paiement mnp ON mnp.id = vh.motif_non_paiement_id + LEFT JOIN formule_resultat fr ON fr.intervenant_id = s.intervenant_id AND fr.type_volume_horaire_id = vh.type_volume_horaire_id AND fr.etat_volume_horaire_id = vhe.etat_volume_horaire_id +WHERE + vh.histo_destruction IS NULL + AND s.histo_destruction IS NULL + +UNION ALL + +SELECT + 'vh_ref_' || vhr.id id, + NULL service_id, + sr.id service_referentiel_id, + sr.intervenant_id intervenant_id, + fr.type_volume_horaire_id type_volume_horaire_id, + fr.etat_volume_horaire_id etat_volume_horaire_id, + NULL element_pedagogique_id, + OSE_PARAMETRE.GET_ETABLISSEMENT etablissement_id, + NULL structure_aff_id, + sr.structure_id structure_ens_id, + NULL periode_id, + NULL type_intervention_id, + sr.fonction_id fonction_referentiel_id, + NULL motif_non_paiement_id, + + NULL service_description, + + 0 heures, + vhr.heures heures_ref, + 0 heures_non_payees, + NULL motif_non_paiement, + 0 service_fi, + 0 service_fa, + 0 service_fc, + frvr.service_referentiel service_referentiel, + 0 heures_compl_fi, + 0 heures_compl_fa, + 0 heures_compl_fc, + 0 heures_compl_fc_majorees, + frvr.heures_compl_referentiel heures_compl_referentiel, + frvr.total total, + fr.solde solde, + sr.formation service_ref_formation, + sr.commentaires commentaires +FROM + formule_resultat_vh_ref frvr + JOIN formule_resultat fr ON fr.id = frvr.formule_resultat_id + JOIN volume_horaire_ref vhr ON vhr.id = frvr.volume_horaire_ref_id AND vhr.histo_destruction IS NULL + JOIN service_referentiel sr ON sr.id = vhr.service_referentiel_id AND sr.intervenant_id = fr.intervenant_id AND sr.histo_destruction IS NULL + +UNION ALL + +SELECT + 'vh_0_' || i.id id, + NULL service_id, + NULL service_referentiel_id, + i.id intervenant_id, + tvh.id type_volume_horaire_id, + evh.id etat_volume_horaire_id, + NULL element_pedagogique_id, + OSE_PARAMETRE.GET_ETABLISSEMENT etablissement_id, + NULL structure_aff_id, + NULL structure_ens_id, + NULL periode_id, + NULL type_intervention_id, + NULL fonction_referentiel_id, + NULL motif_non_paiement_id, + + NULL service_description, + + 0 heures, + 0 heures_ref, + 0 heures_non_payees, + NULL motif_non_paiement, + 0 service_fi, + 0 service_fa, + 0 service_fc, + 0 service_referentiel, + 0 heures_compl_fi, + 0 heures_compl_fa, + 0 heures_compl_fc, + 0 heures_compl_fc_majorees, + NULL heures_compl_referentiel, + 0 total, + 0 solde, + NULL service_ref_formation, + NULL commentaires +FROM + intervenant i + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN etat_volume_horaire evh ON evh.code IN ('saisi','valide') + JOIN type_volume_horaire tvh ON tvh.code IN ('PREVU','REALISE') + LEFT JOIN modification_service_du msd ON msd.intervenant_id = i.id AND msd.histo_destruction IS NULL + LEFT JOIN motif_modification_service mms ON mms.id = msd.motif_id +WHERE + i.histo_destruction IS NULL + AND si.service_statutaire > 0 +GROUP BY + i.id, si.service_statutaire, evh.id, tvh.id +HAVING + si.service_statutaire + SUM(msd.heures * mms.multiplicateur) = 0 + + +), ponds AS ( +SELECT + ep.id element_pedagogique_id, + MAX(COALESCE( m.ponderation_service_du, 1)) ponderation_service_du, + MAX(COALESCE( m.ponderation_service_compl, 1)) ponderation_service_compl +FROM + element_pedagogique ep + LEFT JOIN element_modulateur em ON em.element_id = ep.id + AND em.histo_destruction IS NULL + LEFT JOIN modulateur m ON m.id = em.modulateur_id +WHERE + ep.histo_destruction IS NULL +GROUP BY + ep.id +) +SELECT + t.id id, + t.service_id service_id, + t.service_referentiel_id service_referentiel_id, + i.id intervenant_id, + si.id statut_intervenant_id, + ti.id type_intervenant_id, + i.annee_id annee_id, + t.type_volume_horaire_id type_volume_horaire_id, + t.etat_volume_horaire_id etat_volume_horaire_id, + etab.id etablissement_id, + saff.id structure_aff_id, + sens.id structure_ens_id, + gtf.id groupe_type_formation_id, + tf.id type_formation_id, + CASE + WHEN 1 <> gtf.pertinence_niveau OR etp.niveau IS NULL OR etp.niveau < 1 OR gtf.id < 1 THEN NULL + ELSE gtf.id * 256 + niveau END niveau_formation_id, + etp.id etape_id, + ep.id element_pedagogique_id, + t.periode_id periode_id, + t.type_intervention_id type_intervention_id, + t.fonction_referentiel_id fonction_referentiel_id, + di.id intervenant_discipline_id, + de.id element_discipline_id, + t.motif_non_paiement_id motif_non_paiement_id, + + tvh.libelle || ' ' || evh.libelle type_etat, + his.histo_modification service_date_modification, + + i.source_code intervenant_code, + i.nom_usuel || ' ' || i.prenom intervenant_nom, + i.date_naissance intervenant_date_naissance, + si.libelle intervenant_statut_libelle, + ti.code intervenant_type_code, + ti.libelle intervenant_type_libelle, + g.source_code intervenant_grade_code, + g.libelle_court intervenant_grade_libelle, + di.source_code intervenant_discipline_code, + di.libelle_court intervenant_discipline_libelle, + saff.libelle_court service_structure_aff_libelle, + + sens.libelle_court service_structure_ens_libelle, + etab.libelle etablissement_libelle, + gtf.libelle_court groupe_type_formation_libelle, + tf.libelle_court type_formation_libelle, + etp.niveau etape_niveau, + etp.source_code etape_code, + etp.libelle etape_libelle, + ep.source_code element_code, + COALESCE(ep.libelle,to_char(t.service_description)) element_libelle, + de.source_code element_discipline_code, + de.libelle_court element_discipline_libelle, + fr.libelle_long fonction_referentiel_libelle, + ep.taux_fi element_taux_fi, + ep.taux_fc element_taux_fc, + ep.taux_fa element_taux_fa, + t.service_ref_formation service_ref_formation, + t.commentaires commentaires, + p.libelle_court periode_libelle, + CASE WHEN ponds.ponderation_service_compl = 1 THEN NULL ELSE ponds.ponderation_service_compl END element_ponderation_compl, + src.libelle element_source_libelle, + + t.heures heures, + t.heures_ref heures_ref, + t.heures_non_payees heures_non_payees, + t.motif_non_paiement motif_non_paiement, + si.service_statutaire service_statutaire, + fi.heures_service_modifie service_du_modifie, + t.service_fi service_fi, + t.service_fa service_fa, + t.service_fc service_fc, + t.service_referentiel service_referentiel, + t.heures_compl_fi heures_compl_fi, + t.heures_compl_fa heures_compl_fa, + t.heures_compl_fc heures_compl_fc, + t.heures_compl_fc_majorees heures_compl_fc_majorees, + t.heures_compl_referentiel heures_compl_referentiel, + t.total total, + t.solde solde, + v.histo_modification date_cloture_realise + +FROM + t + JOIN intervenant i ON i.id = t.intervenant_id AND i.histo_destruction IS NULL + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN type_intervenant ti ON ti.id = si.type_intervenant_id + JOIN etablissement etab ON etab.id = t.etablissement_id + JOIN type_volume_horaire tvh ON tvh.id = t.type_volume_horaire_id + JOIN etat_volume_horaire evh ON evh.id = t.etat_volume_horaire_id + LEFT JOIN histo_intervenant_service his ON his.intervenant_id = i.id AND his.type_volume_horaire_id = tvh.id AND his.referentiel = 0 + LEFT JOIN grade g ON g.id = i.grade_id + LEFT JOIN discipline di ON di.id = i.discipline_id + LEFT JOIN STRUCTURE saff ON saff.id = i.structure_id AND ti.code = 'P' + LEFT JOIN element_pedagogique ep ON ep.id = t.element_pedagogique_id + LEFT JOIN discipline de ON de.id = ep.discipline_id + LEFT JOIN STRUCTURE sens ON sens.id = NVL(t.structure_ens_id, ep.structure_id) + LEFT JOIN periode p ON p.id = t.periode_id + LEFT JOIN SOURCE src ON src.id = ep.source_id OR (ep.source_id IS NULL AND src.code = 'OSE') + LEFT JOIN etape etp ON etp.id = ep.etape_id + LEFT JOIN type_formation tf ON tf.id = etp.type_formation_id AND tf.histo_destruction IS NULL + LEFT JOIN groupe_type_formation gtf ON gtf.id = tf.groupe_id AND gtf.histo_destruction IS NULL + LEFT JOIN v_formule_intervenant fi ON fi.intervenant_id = i.id + LEFT JOIN ponds ponds ON ponds.element_pedagogique_id = ep.id + LEFT JOIN fonction_referentiel fr ON fr.id = t.fonction_referentiel_id + LEFT JOIN type_validation tv ON tvh.code = 'REALISE' AND tv.code = 'CLOTURE_REALISE' + LEFT JOIN validation v ON v.intervenant_id = i.id AND v.type_validation_id = tv.id AND v.histo_destruction IS NULL; +/ + +CREATE OR REPLACE FORCE VIEW V_FR_SERVICE_CENTRE_COUT AS +SELECT + frs.id formule_resultat_service_id, cc.id centre_cout_id +FROM + formule_resultat_service frs + JOIN parametre p ON p.nom = 'centres_couts_paye' + JOIN service s ON s.id = frs.service_id + JOIN intervenant i ON i.id = s.intervenant_id + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN type_intervenant ti ON ti.id = si.type_intervenant_id + JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + JOIN centre_cout cc ON cc.histo_destruction IS NULL + + JOIN centre_cout_structure ccs ON ccs.centre_cout_id = cc.id + AND ccs.structure_id = CASE WHEN p.valeur = 'enseignement' OR ti.code = 'E' THEN ep.structure_id ELSE COALESCE(i.structure_id,ep.structure_id) END + AND ccs.histo_destruction IS NULL + + JOIN cc_activite a ON a.id = cc.activite_id + AND a.histo_destruction IS NULL + + JOIN type_ressource tr ON tr.id = cc.type_ressource_id + AND tr.histo_destruction IS NULL +WHERE + ( + (frs.heures_compl_fi > 0 AND tr.fi = 1 AND a.fi = 1 ) + OR (frs.heures_compl_fa > 0 AND tr.fa = 1 AND a.fa = 1 ) + OR (frs.heures_compl_fc > 0 AND tr.fc = 1 AND a.fc = 1 ) + OR (frs.heures_compl_fc_majorees > 0 AND tr.fc_majorees = 1 AND a.fc_majorees = 1 ) + ) + +UNION + +SELECT + frs.id formule_resultat_service_id, cc.id centre_cout_id +FROM + formule_resultat_service frs + JOIN service s ON s.id = frs.service_id + AND s.element_pedagogique_id IS NULL + + JOIN intervenant i ON i.id = s.intervenant_id + JOIN centre_cout cc ON cc.histo_destruction IS NULL + + JOIN centre_cout_structure ccs ON ccs.centre_cout_id = cc.id + AND ccs.structure_id = i.structure_id + AND ccs.histo_destruction IS NULL + + JOIN cc_activite a ON a.id = cc.activite_id + AND a.histo_destruction IS NULL + + JOIN type_ressource tr ON tr.id = cc.type_ressource_id + AND tr.histo_destruction IS NULL +WHERE + ( + (frs.heures_compl_fi > 0 AND tr.fi = 1 AND a.fi = 1 ) + OR (frs.heures_compl_fa > 0 AND tr.fa = 1 AND a.fa = 1 ) + OR (frs.heures_compl_fc > 0 AND tr.fc = 1 AND a.fc = 1 ) + OR (frs.heures_compl_fc_majorees > 0 AND tr.fc_majorees = 1 AND a.fc_majorees = 1 ) + ); +/ + +CREATE OR REPLACE FORCE VIEW V_IMPORT_TAB_COLS AS +WITH importable_tables (TABLE_NAME )AS ( + SELECT + t.table_name +FROM + user_tab_cols c + JOIN user_tables t ON t.table_name = c.table_name +WHERE + c.column_name = 'SOURCE_CODE' + +MINUS + +SELECT + mview_name TABLE_NAME +FROM + USER_MVIEWS +), c_values (TABLE_NAME, column_name, c_table_name, c_column_name) AS ( +SELECT + tc.table_name, + tc.column_name, + pcc.table_name c_table_name, + pcc.column_name c_column_name +FROM + user_tab_cols tc + JOIN USER_CONS_COLUMNS cc ON cc.table_name = tc.table_name AND cc.column_name = tc.column_name + JOIN USER_CONSTRAINTS c ON c.constraint_name = cc.constraint_name + JOIN USER_CONSTRAINTS pc ON pc.constraint_name = c.r_constraint_name + JOIN USER_CONS_COLUMNS pcc ON pcc.constraint_name = pc.constraint_name +WHERE + c.constraint_type = 'R' AND pc.constraint_type = 'P' +) +SELECT + tc.table_name, + tc.column_name, + CASE WHEN ',' || it.key_columns || ',' LIKE '%,' || tc.column_name || ',%' THEN 1 ELSE 0 END is_key, + tc.data_type, + CASE WHEN tc.char_length = 0 THEN NULL ELSE tc.char_length END LENGTH, + CASE WHEN tc.nullable = 'Y' THEN 1 ELSE 0 END NULLABLE, + CASE WHEN tc.data_default IS NOT NULL THEN 1 ELSE 0 END has_default, + cv.c_table_name, + cv.c_column_name, + CASE WHEN stc.table_name IS NULL THEN 0 ELSE 1 END AS import_actif +FROM + user_tab_cols tc + JOIN importable_tables t ON t.table_name = tc.table_name + LEFT JOIN import_tables it ON it.table_name = tc.table_name + LEFT JOIN c_values cv ON cv.table_name = tc.table_name AND cv.column_name = tc.column_name + LEFT JOIN user_tab_cols stc ON stc.table_name = 'SRC_' || tc.table_name AND stc.column_name = tc.column_name +WHERE + tc.column_name NOT LIKE 'HISTO_%' + AND tc.column_name <> 'ID' + AND tc.table_name <> 'SYNC_LOG' +ORDER BY + it.ordre, tc.table_name, tc.column_id; +/ + +CREATE OR REPLACE FORCE VIEW V_INDICATEUR_340 AS +SELECT + rownum id, + s.annee_id, + s.intervenant_id, + s.structure_id +FROM + tbl_service s + JOIN tbl_workflow w ON w.intervenant_id = s.intervenant_id AND w.structure_id = s.structure_id +WHERE + s.type_intervenant_code = 'V' + AND s.type_volume_horaire_code = 'PREVU' + AND nbvh <> valide + AND w.etape_code = 'CONTRAT' + AND w.atteignable = 1 + AND w.objectif > 0 + AND w.realisation = w.objectif; +/ + +CREATE OR REPLACE FORCE VIEW V_INDICATEUR_361 AS +SELECT + rownum id, + t."INTERVENANT_ID",t."ANNEE_ID",t."STRUCTURE_ID",t."CONTRAT_ID" +FROM ( +SELECT DISTINCT + i.id intervenant_id, + i.annee_id annee_id, + c.structure_id structure_id, + c.id contrat_id +FROM + contrat c + JOIN intervenant i ON i.id = c.intervenant_id + JOIN tbl_workflow w ON w.intervenant_id = i.id AND w.structure_id = c.structure_id AND w.etape_code = 'CONTRAT' AND w.atteignable = 1 + JOIN validation v ON v.id = c.validation_id AND v.histo_destruction IS NULL + LEFT JOIN contrat_fichier cf ON cf.contrat_id = c.id + LEFT JOIN fichier f ON f.id = cf.fichier_id AND f.histo_destruction IS NULL +WHERE + c.histo_destruction IS NULL + AND f.id IS NULL + AND c.date_envoi_email IS NOT NULL +) t; +/ + +CREATE OR REPLACE FORCE VIEW V_INDICATEUR_410 AS +SELECT + rownum id, + d.annee_id, + d.intervenant_id, + i.structure_id +FROM + tbl_dossier d + JOIN intervenant i ON i.id = d.intervenant_id +WHERE + d.dossier_id IS NOT NULL + /*Complétude des différents bloc dossier*/ + AND d.completude_identite = 1 + AND d.completude_identite_comp = 1 + AND d.completude_contact = 1 + AND d.completude_adresse = 1 + AND d.completude_insee = 1 + AND d.completude_iban = 1 + AND d.completude_employeur = 1 + AND d.completude_autres = 1 + AND d.completude_statut = 1 + AND d.validation_id IS NULL + AND d.peut_saisir_dossier = 1; +/ + +CREATE OR REPLACE FORCE VIEW V_INDICATEUR_730 AS +SELECT rownum id, t."ANNEE_ID", t."INTERVENANT_ID", t."STRUCTURE_ID" +FROM ( + SELECT DISTINCT w.annee_id, + w.intervenant_id, + w.structure_id + FROM tbl_workflow w + WHERE w.etape_code = 'SERVICE_VALIDATION' + AND w.type_intervenant_code = 'P' + AND w.atteignable = 1 + AND w.objectif > w.realisation + ) t; +/ + +CREATE OR REPLACE FORCE VIEW V_INDICATEUR_740 AS +SELECT rownum id, t."ANNEE_ID", t."INTERVENANT_ID", t."STRUCTURE_ID" +FROM ( + SELECT DISTINCT w.annee_id, + w.intervenant_id, + w.structure_id + FROM tbl_workflow w + WHERE w.etape_code = 'SERVICE_VALIDATION_REALISE' + AND w.type_intervenant_code = 'P' + AND w.atteignable = 1 + AND w.objectif > w.realisation + ) t; +/ + +CREATE OR REPLACE FORCE VIEW V_NIVEAU_FORMATION AS +SELECT DISTINCT + CASE + WHEN 1 <> gtf.pertinence_niveau OR e.niveau IS NULL OR e.niveau < 1 OR gtf.id < 1 THEN NULL + ELSE gtf.id * 256 + niveau END id, + gtf.libelle_court || e.niveau code, + gtf.libelle_long, + e.niveau, + gtf.id groupe_type_formation_id +FROM + etape e + JOIN type_formation tf ON tf.id = e.type_formation_id AND tf.histo_destruction IS NULL + JOIN groupe_type_formation gtf ON gtf.id = tf.groupe_id AND gtf.histo_destruction IS NULL +WHERE + e.histo_destruction IS NULL + AND CASE + WHEN 1 <> gtf.pertinence_niveau OR e.niveau IS NULL OR e.niveau < 1 OR gtf.id < 1 THEN NULL + ELSE gtf.id * 256 + niveau END IS NOT NULL +ORDER BY + gtf.libelle_long, e.niveau; +/ + +CREATE OR REPLACE FORCE VIEW V_PRIVILEGES_ROLES AS +WITH statuts_roles AS ( +SELECT + rp.privilege_id, + r.code ROLE +FROM + role_privilege rp + JOIN ROLE r ON r.id = rp.role_id AND r.histo_destruction IS NULL + +UNION ALL + +SELECT + sp.privilege_id, + 'statut/' || s.code ROLE +FROM + statut_privilege sp + JOIN statut_intervenant s ON s.id = sp.statut_id AND s.histo_destruction IS NULL +) +SELECT + cp.code || '-' || p.code privilege, + sr.role +FROM + privilege p + JOIN categorie_privilege cp ON cp.id = p.categorie_id + LEFT JOIN statuts_roles sr ON sr.privilege_id = p.id; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_AGREMENT AS +WITH i_s AS ( + SELECT + fr.intervenant_id, + ep.structure_id structure_id + FROM + formule_resultat fr + JOIN type_volume_horaire tvh ON tvh.code = 'PREVU' AND tvh.id = fr.type_volume_horaire_id + JOIN etat_volume_horaire evh ON evh.code = 'valide' AND evh.id = fr.etat_volume_horaire_id + + JOIN formule_resultat_service frs ON frs.formule_resultat_id = fr.id + JOIN service s ON s.id = frs.service_id + JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + WHERE + frs.total > 0 + /*@INTERVENANT_ID=fr.intervenant_id*/ +), +avi AS ( + SELECT + i.code intervenant_code, + i.annee_id annee_id, + a.type_agrement_id type_agrement_id, + a.id agrement_id, + a.structure_id structure_id + FROM intervenant i + JOIN agrement a ON a.intervenant_id = i.id + WHERE + a.histo_destruction IS NULL +) +SELECT DISTINCT "ANNEE_ID","ANNEE_AGREMENT","TYPE_AGREMENT_ID","INTERVENANT_ID","CODE_INTERVENANT","STRUCTURE_ID","OBLIGATOIRE","AGREMENT_ID","DUREE_VIE" FROM ( + SELECT + i.annee_id annee_id, + CASE + WHEN COALESCE (avi.agrement_id,0) = 0 + THEN NULL + ELSE NVL(avi.annee_id, i.annee_id) END annee_agrement, + tas.type_agrement_id type_agrement_id, + i.id intervenant_id, + i.code code_intervenant, + NULL structure_id, + tas.obligatoire obligatoire, + avi.agrement_id agrement_id, + tas.duree_vie duree_vie, + RANK() OVER( + PARTITION BY i.code,i.annee_id ORDER BY + CASE + WHEN COALESCE (avi.agrement_id,0) = 0 + THEN NULL + ELSE NVL(avi.annee_id, i.annee_id) END DESC + ) rank + FROM + type_agrement ta + JOIN type_agrement_statut tas ON tas.type_agrement_id = ta.id + AND tas.histo_destruction IS NULL + + JOIN intervenant i ON i.histo_destruction IS NULL + AND i.statut_id = tas.statut_intervenant_id + + JOIN i_s ON i_s.intervenant_id = i.id + + LEFT JOIN avi ON i.code = avi.intervenant_code + AND avi.type_agrement_id = tas.type_agrement_id + AND i.annee_id < avi.annee_id + tas.duree_vie + AND i.annee_id >= avi.annee_id + + + WHERE + ta.code = 'CONSEIL_ACADEMIQUE' + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ + ) +WHERE + rank = 1 + +UNION ALL +SELECT DISTINCT "ANNEE_ID","ANNEE_AGREMENT","TYPE_AGREMENT_ID","INTERVENANT_ID","CODE_INTERVENANT","STRUCTURE_ID","OBLIGATOIRE","AGREMENT_ID","DUREE_VIE" FROM ( + SELECT + i.annee_id annee_id, + CASE + WHEN COALESCE (avi.agrement_id,0) = 0 + THEN NULL + ELSE NVL(avi.annee_id, i.annee_id) END annee_agrement, + tas.type_agrement_id type_agrement_id, + i.id intervenant_id, + i.code code_intervenant, + i_s.structure_id structure_id, + tas.obligatoire obligatoire, + avi.agrement_id agrement_id, + tas.duree_vie duree_vie, + RANK() OVER( + PARTITION BY i.code,i.annee_id,i_s.structure_id ORDER BY + CASE + WHEN COALESCE (avi.agrement_id,0) = 0 + THEN NULL + ELSE NVL(avi.annee_id, i.annee_id) END DESC + ) rank + FROM + type_agrement ta + JOIN type_agrement_statut tas ON tas.type_agrement_id = ta.id + AND tas.histo_destruction IS NULL + + JOIN intervenant i ON i.histo_destruction IS NULL + AND i.statut_id = tas.statut_intervenant_id + + JOIN i_s ON i_s.intervenant_id = i.id + + LEFT JOIN avi ON i.code = avi.intervenant_code + AND avi.type_agrement_id = tas.type_agrement_id + AND COALESCE(avi.structure_id,0) = COALESCE(i_s.structure_id,0) + AND i.annee_id < avi.annee_id + tas.duree_vie + AND i.annee_id >= avi.annee_id + + + WHERE + ta.code = 'CONSEIL_RESTREINT' + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ + ) +WHERE + rank = 1; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_CHARGENS AS +WITH t AS ( +SELECT + n.annee_id annee_id, + n.noeud_id noeud_id, + sn.scenario_id scenario_id, + sne.type_heures_id type_heures_id, + ti.id type_intervention_id, + + n.element_pedagogique_id element_pedagogique_id, + n.element_pedagogique_etape_id etape_id, + sne.etape_id etape_ens_id, + n.structure_id structure_id, + n.groupe_type_formation_id groupe_type_formation_id, + + vhe.heures heures, + vhe.heures * ti.taux_hetd_service hetd, + + GREATEST(COALESCE(sns.ouverture, 1),1) ouverture, + GREATEST(COALESCE(sns.dedoublement, snsetp.dedoublement, csdd.dedoublement,1),1) dedoublement, + COALESCE(sns.assiduite,1) assiduite, + sne.effectif*COALESCE(sns.assiduite,1) effectif, + + SUM(sne.effectif*COALESCE(sns.assiduite,1)) OVER (PARTITION BY n.noeud_id, sn.scenario_id, ti.id) t_effectif + +FROM + scenario_noeud_effectif sne + JOIN etape e ON e.id = sne.etape_id + AND e.histo_destruction IS NULL + + JOIN scenario_noeud sn ON sn.id = sne.scenario_noeud_id + AND sn.histo_destruction IS NULL + /*@NOEUD_ID=sn.noeud_id*/ + /*@SCENARIO_ID=sn.scenario_id*/ + + JOIN tbl_noeud n ON n.noeud_id = sn.noeud_id + /*@ANNEE_ID=n.annee_id*/ + /*@ELEMENT_PEDAGOGIQUE_ID=n.element_pedagogique_id*/ + /*@ETAPE_ID=n.element_pedagogique_etape_id*/ + + JOIN volume_horaire_ens vhe ON vhe.element_pedagogique_id = n.element_pedagogique_id + AND vhe.histo_destruction IS NULL + AND vhe.heures > 0 + + JOIN type_intervention ti ON ti.id = vhe.type_intervention_id + + LEFT JOIN tbl_noeud netp ON netp.etape_id = e.id + + LEFT JOIN scenario_noeud snetp ON snetp.scenario_id = sn.scenario_id + AND snetp.noeud_id = netp.noeud_id + AND snetp.histo_destruction IS NULL + + LEFT JOIN scenario_noeud_seuil snsetp ON snsetp.scenario_noeud_id = snetp.id + AND snsetp.type_intervention_id = ti.id + + LEFT JOIN tbl_chargens_seuils_def csdd ON csdd.annee_id = n.annee_id + AND csdd.scenario_id = sn.scenario_id + AND csdd.type_intervention_id = ti.id + AND csdd.groupe_type_formation_id = n.groupe_type_formation_id + AND csdd.structure_id = n.structure_id + + LEFT JOIN scenario_noeud_seuil sns ON sns.scenario_noeud_id = sn.id + AND sns.type_intervention_id = ti.id +WHERE + 1=1 + /*@ETAPE_ENS_ID=sne.etape_id*/ +) +SELECT + annee_id, + noeud_id, + scenario_id, + type_heures_id, + type_intervention_id, + + element_pedagogique_id, + etape_id, + etape_ens_id, + structure_id, + groupe_type_formation_id, + + ouverture, + dedoublement, + assiduite, + effectif, + heures heures_ens, + --t_effectif, + + CASE WHEN t_effectif < ouverture THEN 0 ELSE + CEIL( t_effectif / dedoublement ) * effectif / t_effectif + END groupes, + + CASE WHEN t_effectif < ouverture THEN 0 ELSE + CEIL( t_effectif / dedoublement ) * heures * effectif / t_effectif + END heures, + + CASE WHEN t_effectif < ouverture THEN 0 ELSE + CEIL( t_effectif / dedoublement ) * hetd * effectif / t_effectif + END hetd + +FROM + t; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_CLOTURE_REALISE AS +WITH t AS ( + SELECT + i.annee_id annee_id, + i.id intervenant_id, + si.peut_cloturer_saisie peut_cloturer_saisie, + CASE WHEN v.id IS NULL THEN 0 ELSE 1 END cloture + FROM + intervenant i + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN type_validation tv ON tv.code = 'CLOTURE_REALISE' + + LEFT JOIN validation v ON v.intervenant_id = i.id + AND v.type_validation_id = tv.id + AND v.histo_destruction IS NULL + + WHERE + i.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ +) +SELECT + annee_id, + intervenant_id, + peut_cloturer_saisie, + CASE WHEN SUM(cloture) = 0 THEN 0 ELSE 1 END cloture +FROM + t +GROUP BY + annee_id, + intervenant_id, + peut_cloturer_saisie; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_CONTRAT AS +WITH t AS ( + SELECT + i.annee_id annee_id, + i.id intervenant_id, + si.peut_avoir_contrat peut_avoir_contrat, + NVL(ep.structure_id, i.structure_id) structure_id, + CASE WHEN evh.code IN ('contrat-edite','contrat-signe') THEN 1 ELSE 0 END edite, + CASE WHEN evh.code IN ('contrat-signe') THEN 1 ELSE 0 END signe + FROM + intervenant i + + JOIN statut_intervenant si ON si.id = i.statut_id + + JOIN service s ON s.intervenant_id = i.id + AND s.histo_destruction IS NULL + + JOIN type_volume_horaire tvh ON tvh.code = 'PREVU' + + JOIN volume_horaire vh ON vh.service_id = s.id + AND vh.histo_destruction IS NULL + AND vh.heures <> 0 + AND vh.type_volume_horaire_id = tvh.id + AND vh.motif_non_paiement_id IS NULL + + JOIN v_volume_horaire_etat vhe ON vhe.volume_horaire_id = vh.id + + JOIN etat_volume_horaire evh ON evh.id = vhe.etat_volume_horaire_id + AND evh.code IN ('valide', 'contrat-edite', 'contrat-signe') + + JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + + WHERE + i.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ + AND NOT (si.peut_avoir_contrat = 0 AND evh.code = 'valide') + + UNION ALL + + SELECT + i.annee_id annee_id, + i.id intervenant_id, + si.peut_avoir_contrat peut_avoir_contrat, + s.structure_id structure_id, + CASE WHEN evh.code IN ('contrat-edite','contrat-signe') THEN 1 ELSE 0 END edite, + CASE WHEN evh.code IN ('contrat-signe') THEN 1 ELSE 0 END signe + FROM + intervenant i + + JOIN statut_intervenant si ON si.id = i.statut_id + + JOIN service_referentiel s ON s.intervenant_id = i.id + AND s.histo_destruction IS NULL + + JOIN type_volume_horaire tvh ON tvh.code = 'PREVU' + + JOIN volume_horaire_ref vh ON vh.service_referentiel_id = s.id + AND vh.histo_destruction IS NULL + AND vh.heures <> 0 + AND vh.type_volume_horaire_id = tvh.id + + JOIN v_volume_horaire_ref_etat vhe ON vhe.volume_horaire_ref_id = vh.id + + JOIN etat_volume_horaire evh ON evh.id = vhe.etat_volume_horaire_id + AND evh.code IN ('valide', 'contrat-edite', 'contrat-signe') + + WHERE + i.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ + AND NOT (si.peut_avoir_contrat = 0 AND evh.code = 'valide') +) +SELECT + annee_id, + intervenant_id, + peut_avoir_contrat, + structure_id, + COUNT(*) AS nbvh, + SUM(edite) AS edite, + SUM(signe) AS signe +FROM + t +GROUP BY + annee_id, + intervenant_id, + peut_avoir_contrat, + structure_id; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_DMEP_LIQUIDATION AS +SELECT + annee_id, + type_ressource_id, + structure_id, + SUM(heures) heures +FROM +( + SELECT + i.annee_id, + cc.type_ressource_id, + COALESCE( ep.structure_id, i.structure_id ) structure_id, + mep.heures + FROM + mise_en_paiement mep + JOIN centre_cout cc ON cc.id = mep.centre_cout_id + JOIN formule_resultat_service frs ON frs.id = mep.formule_res_service_id + JOIN service s ON s.id = frs.service_id + JOIN intervenant i ON i.id = s.intervenant_id + LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + WHERE + mep.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ + + UNION ALL + + SELECT + i.annee_id, + cc.type_ressource_id, + sr.structure_id structure_id, + heures + FROM + mise_en_paiement mep + JOIN centre_cout cc ON cc.id = mep.centre_cout_id + JOIN formule_resultat_service_ref frsr ON frsr.id = mep.formule_res_service_ref_id + JOIN service_referentiel sr ON sr.id = frsr.service_referentiel_id + JOIN intervenant i ON i.id = sr.intervenant_id + + WHERE + mep.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ + +) t1 +GROUP BY + annee_id, type_ressource_id, structure_id; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_DOSSIER AS +SELECT + i.annee_id, + i.id intervenant_id, + si.peut_saisir_dossier, + d.id dossier_id, + v.id validation_id, + /*Complétude statut*/ + CASE WHEN si.code = 'AUTRES' THEN 0 + ELSE 1 END completude_statut, + /*Complétude identité*/ + CASE WHEN + ( + d.civilite_id IS NOT NULL + AND d.nom_usuel IS NOT NULL + AND d.prenom IS NOT NULL + ) THEN 1 ELSE 0 END completude_identite, + /*Complétude identité complémentaire*/ + CASE WHEN si.dossier_identite_comp = 0 THEN 1 + ELSE + CASE WHEN + ( + d.date_naissance IS NOT NULL + AND NOT (OSE_DIVERS.str_reduce(pn.LIBELLE) = 'france' AND d.departement_naissance_id IS NULL) + AND d.pays_naissance_id IS NOT NULL + AND d.pays_nationalite_id IS NOT NULL + AND d.commune_naissance IS NOT NULL + ) THEN 1 ELSE 0 END + END completude_identite_comp, + /*Complétude contact*/ + CASE WHEN si.dossier_contact = 0 THEN 1 + ELSE + ( + CASE WHEN + ( + (CASE WHEN si.dossier_email_perso = 1 THEN + CASE WHEN d.email_perso IS NOT NULL THEN 1 ELSE 0 END + ELSE + CASE WHEN d.email_pro IS NOT NULL OR d.email_perso IS NOT NULL THEN 1 ELSE 0 END + END) = 1 + AND + (CASE WHEN si.dossier_tel_perso = 1 THEN + CASE WHEN d.tel_perso IS NOT NULL AND d.tel_pro IS NOT NULL THEN 1 ELSE 0 END + ELSE + CASE WHEN d.tel_pro IS NOT NULL OR d.tel_perso IS NOT NULL THEN 1 ELSE 0 END + END) = 1 + ) THEN 1 ELSE 0 END + ) END completude_contact, + /*Complétude adresse*/ + CASE WHEN si.dossier_adresse = 0 THEN 1 + ELSE + ( + CASE WHEN + ( + d.adresse_precisions IS NOT NULL + OR d.adresse_lieu_dit IS NOT NULL + OR (d.adresse_voie IS NOT NULL AND d.adresse_numero IS NOT NULL) + ) AND + ( + d.adresse_commune IS NOT NULL + AND d.adresse_code_postal IS NOT NULL + ) THEN 1 ELSE 0 END + ) END completude_adresse, + /*Complétude INSEE*/ + CASE WHEN si.dossier_insee = 0 THEN 1 + ELSE + ( + CASE WHEN + ( + d.numero_insee IS NOT NULL OR COALESCE(d.numero_insee_provisoire,0) = 1 + ) THEN 1 ELSE 0 END + ) END completude_insee, + /*Complétude IBAN*/ + CASE WHEN si.dossier_iban = 0 THEN 1 + ELSE + ( + CASE WHEN + ( + (d.iban IS NOT NULL + AND d.bic IS NOT NULL) + OR COALESCE(d.rib_hors_sepa,0) = 1 + ) THEN 1 ELSE 0 END + ) END completude_iban, + /*Complétude employeur*/ + CASE WHEN si.dossier_employeur = 0 THEN 1 + ELSE + ( + CASE WHEN + ( + d.employeur_id IS NOT NULL + ) THEN 1 ELSE 0 END + ) END completude_employeur, + /*Complétude champs autres*/ + CASE WHEN + ( + NOT (d.autre_1 IS NULL AND COALESCE(dca1.obligatoire,0) = 1) + AND NOT (d.autre_2 IS NULL AND COALESCE(dca2.obligatoire,0) = 1) + AND NOT (d.autre_3 IS NULL AND COALESCE(dca3.obligatoire,0) = 1) + AND NOT (d.autre_4 IS NULL AND COALESCE(dca4.obligatoire,0) = 1) + AND NOT (d.autre_5 IS NULL AND COALESCE(dca5.obligatoire,0) = 1) + ) THEN 1 ELSE 0 END completude_autres + +FROM + intervenant i + JOIN statut_intervenant si ON si.id = i.statut_id + LEFT JOIN intervenant_dossier d ON d.intervenant_id = i.id + AND d.histo_destruction IS NULL + LEFT JOIN pays pn ON pn.id = d.pays_naissance_id + + JOIN type_validation tv ON tv.code = 'DONNEES_PERSO_PAR_COMP' + LEFT JOIN validation v ON v.intervenant_id = i.id + AND v.type_validation_id = tv.id + AND v.histo_destruction IS NULL + /*Champs autre 1*/ + LEFT JOIN dossier_champ_autre_par_statut dcas1 ON dcas1.dossier_champ_autre_id = 1 AND dcas1.statut_id = si.id + LEFT JOIN dossier_champ_autre dca1 ON dca1.id = 1 AND dcas1.dossier_champ_autre_id = dca1.id + /*Champs autre 2*/ + LEFT JOIN dossier_champ_autre_par_statut dcas2 ON dcas2.dossier_champ_autre_id = 2 AND dcas2.statut_id = si.id + LEFT JOIN dossier_champ_autre dca2 ON dca2.id = 2 AND dcas2.dossier_champ_autre_id = dca2.id + /*Champs autre 3*/ + LEFT JOIN dossier_champ_autre_par_statut dcas3 ON dcas3.dossier_champ_autre_id = 3 AND dcas3.statut_id = si.id + LEFT JOIN dossier_champ_autre dca3 ON dca3.id = 3 AND dcas3.dossier_champ_autre_id = dca3.id + /*Champs autre 4*/ + LEFT JOIN dossier_champ_autre_par_statut dcas4 ON dcas4.dossier_champ_autre_id = 4 AND dcas4.statut_id = si.id + LEFT JOIN dossier_champ_autre dca4 ON dca4.id = 4 AND dcas4.dossier_champ_autre_id = dca4.id + /*Champs autre 5*/ + LEFT JOIN dossier_champ_autre_par_statut dcas5 ON dcas5.dossier_champ_autre_id = 5 AND dcas5.statut_id = si.id + LEFT JOIN dossier_champ_autre dca5 ON dca5.id = 5 AND dcas5.dossier_champ_autre_id = dca5.id +WHERE + i.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_PAIEMENT AS +SELECT + i.annee_id annee_id, + frs.service_id service_id, + NULL service_referentiel_id, + frs.id formule_res_service_id, + NULL formule_res_service_ref_id, + i.id intervenant_id, + COALESCE( ep.structure_id, i.structure_id ) structure_id, + mep.id mise_en_paiement_id, + mep.periode_paiement_id periode_paiement_id, + frs.heures_compl_fi + frs.heures_compl_fc + frs.heures_compl_fa + frs.heures_compl_fc_majorees heures_a_payer, + COUNT(*) OVER(PARTITION BY frs.id) heures_a_payer_pond, + NVL(mep.heures,0) heures_demandees, + CASE WHEN mep.periode_paiement_id IS NULL THEN 0 ELSE mep.heures END heures_payees +FROM + formule_resultat_service frs + JOIN type_volume_horaire tvh ON tvh.code = 'REALISE' + JOIN etat_volume_horaire evh ON evh.code = 'valide' + JOIN formule_resultat fr ON fr.id = frs.formule_resultat_id + AND fr.type_volume_horaire_id = tvh.id + AND fr.etat_volume_horaire_id = evh.id + + JOIN intervenant i ON i.id = fr.intervenant_id /*@INTERVENANT_ID=i.id*/ /*@ANNEE_ID=a.annee_id*/ + JOIN service s ON s.id = frs.service_id + LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + LEFT JOIN mise_en_paiement mep ON mep.formule_res_service_id = frs.id + AND mep.histo_destruction IS NULL + +UNION ALL + +SELECT + i.annee_id annee_id, + NULL service_id, + frs.service_referentiel_id service_referentiel_id, + NULL formule_res_service_id, + frs.id formule_res_service_ref_id, + i.id intervenant_id, + s.structure_id structure_id, + mep.id mise_en_paiement_id, + mep.periode_paiement_id periode_paiement_id, + frs.heures_compl_referentiel heures_a_payer, + COUNT(*) OVER(PARTITION BY frs.id) heures_a_payer_pond, + NVL(mep.heures,0) heures_demandees, + CASE WHEN mep.periode_paiement_id IS NULL THEN 0 ELSE mep.heures END heures_payees +FROM + formule_resultat_service_ref frs + JOIN type_volume_horaire tvh ON tvh.code = 'REALISE' + JOIN etat_volume_horaire evh ON evh.code = 'valide' + JOIN formule_resultat fr ON fr.id = frs.formule_resultat_id + AND fr.type_volume_horaire_id = tvh.id + AND fr.etat_volume_horaire_id = evh.id + + JOIN intervenant i ON i.id = fr.intervenant_id /*@INTERVENANT_ID=i.id*/ /*@ANNEE_ID=a.annee_id*/ + JOIN service_referentiel s ON s.id = frs.service_referentiel_id + LEFT JOIN mise_en_paiement mep ON mep.formule_res_service_ref_id = frs.id + AND mep.histo_destruction IS NULL; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_PIECE_JOINTE AS +WITH t AS ( + SELECT + pjd.annee_id annee_id, + pjd.type_piece_jointe_id type_piece_jointe_id, + pjd.intervenant_id intervenant_id, + CASE WHEN pjd.intervenant_id IS NULL THEN 0 ELSE 1 END demandee, + SUM(CASE WHEN pjf.id IS NULL THEN 0 ELSE 1 END) fournie, + SUM(CASE WHEN pjf.validation_id IS NULL THEN 0 ELSE 1 END) validee, + COALESCE(pjd.heures_pour_seuil,0) heures_pour_seuil, + COALESCE(pjd.obligatoire,1) obligatoire + FROM + tbl_piece_jointe_demande pjd + LEFT JOIN tbl_piece_jointe_fournie pjf ON pjf.code_intervenant = pjd.code_intervenant + AND pjf.type_piece_jointe_id = pjd.type_piece_jointe_id + AND pjd.annee_id BETWEEN pjf.annee_id AND COALESCE(pjf.date_archive - 1,(pjf.annee_id + pjf.duree_vie - 1)) + WHERE + 1=1 + /*@INTERVENANT_ID=pjd.intervenant_id*/ + /*@ANNEE_ID=pjd.annee_id*/ + GROUP BY + pjd.annee_id, pjd.type_piece_jointe_id, pjd.intervenant_id, pjd.intervenant_id, pjd.heures_pour_seuil, pjd.obligatoire + + UNION ALL + + SELECT + pjf.annee_id annee_id, + pjf.type_piece_jointe_id type_piece_jointe_id, + pjf.intervenant_id intervenant_id, + 0 demandee, + 1 fournie, + SUM(CASE WHEN pjf.validation_id IS NULL THEN 0 ELSE 1 END) validee, + 0 heures_pour_seuil, + 0 obligatoire + FROM + tbl_piece_jointe_fournie pjf + LEFT JOIN tbl_piece_jointe_demande pjd ON pjd.intervenant_id = pjf.intervenant_id + AND pjd.type_piece_jointe_id = pjf.type_piece_jointe_id + WHERE + pjd.id IS NULL + /*@INTERVENANT_ID=pjf.intervenant_id*/ + /*@ANNEE_ID=pjf.annee_id*/ + GROUP BY + pjf.annee_id, pjf.type_piece_jointe_id, pjf.intervenant_id +) +SELECT + annee_id, + type_piece_jointe_id, + intervenant_id, + demandee, + CASE WHEN fournie <> 0 THEN 1 ELSE 0 END fournie, + CASE WHEN validee <> 0 THEN 1 ELSE 0 END validee, + heures_pour_seuil, + obligatoire +FROM + t; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_PIECE_JOINTE_DEMANDE AS +WITH i_h AS ( + SELECT + s.intervenant_id, + SUM(CASE WHEN vh.MOTIF_NON_PAIEMENT_ID IS NULL THEN vh.heures ELSE 0 END) heures, + SUM(CASE WHEN vh.MOTIF_NON_PAIEMENT_ID IS NOT NULL THEN vh.heures ELSE 0 END) heures_non_payables, + SUM(ep.taux_fc) fc + FROM + service s + JOIN type_volume_horaire tvh ON tvh.code = 'PREVU' + JOIN volume_horaire vh ON vh.service_id = s.id + AND vh.type_volume_horaire_id = tvh.id + AND vh.histo_destruction IS NULL + JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id -- Service sur l'établissement + WHERE + s.histo_destruction IS NULL + /*@INTERVENANT_ID=s.intervenant_id*/ + GROUP BY + s.intervenant_id +) +SELECT + i.annee_id annee_id, + i.code code_intervenant, + i.id intervenant_id, + tpj.id type_piece_jointe_id, + MAX(COALESCE(i_h.heures, 0)) heures_pour_seuil, + tpjs.obligatoire obligatoire +FROM + intervenant i + + LEFT JOIN intervenant_dossier d ON d.intervenant_id = i.id + AND d.histo_destruction IS NULL + + JOIN type_piece_jointe_statut tpjs ON tpjs.statut_intervenant_id = i.statut_id + AND tpjs.histo_destruction IS NULL + AND i.annee_id BETWEEN COALESCE(tpjs.annee_debut_id,i.annee_id) AND COALESCE(tpjs.annee_fin_id,i.annee_id) + + JOIN type_piece_jointe tpj ON tpj.id = tpjs.type_piece_jointe_id + AND tpj.histo_destruction IS NULL + + LEFT JOIN i_h ON i_h.intervenant_id = i.id +WHERE + -- Gestion de l'historique + i.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ + + -- Seuil HETD ou PJ obligatoire meme avec des heures non payables + AND (COALESCE(i_h.heures,0) > COALESCE(tpjs.seuil_hetd,-1) OR (COALESCE(i_h.heures_non_payables,0) > 0 AND tpjs.obligatoire_hnp = 1 )) + + + -- Le RIB n'est demandé QUE s'il est différent!! + AND CASE + WHEN tpjs.changement_rib = 0 OR d.id IS NULL THEN 1 + ELSE CASE WHEN REPLACE(i.bic, ' ', '') = REPLACE(d.bic, ' ', '') AND REPLACE(i.iban, ' ', '') = REPLACE(d.iban, ' ', '') THEN 0 ELSE 1 END + END = 1 + + -- Filtre FC + AND (tpjs.fc = 0 OR i_h.fc > 0) +GROUP BY + i.annee_id, + i.id, + i.code, + tpj.id, + tpjs.obligatoire; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_PIECE_JOINTE_FOURNIE AS +SELECT + i.annee_id, + i.code code_intervenant, + pj.type_piece_jointe_id, + pj.intervenant_id, + pj.id piece_jointe_id, + v.id validation_id, + f.id fichier_id, + CASE WHEN MIN(COALESCE(tpjs.duree_vie,1)) IS NULL THEN 1 ELSE MIN(COALESCE(tpjs.duree_vie,1)) END duree_vie, + CASE WHEN MIN(COALESCE(tpjs.duree_vie,1)) IS NULL THEN i.annee_id+1 ELSE MIN(i.annee_id+COALESCE(tpjs.duree_vie,1)) END date_validite, + pj.date_archive date_archive +FROM + piece_jointe pj + JOIN intervenant i ON i.id = pj.intervenant_id + AND i.histo_destruction IS NULL + JOIN piece_jointe_fichier pjf ON pjf.piece_jointe_id = pj.id + JOIN fichier f ON f.id = pjf.fichier_id + AND f.histo_destruction IS NULL + LEFT JOIN type_piece_jointe_statut tpjs ON tpjs.statut_intervenant_id = i.statut_id + AND tpjs.type_piece_jointe_id = pj.type_piece_jointe_id + AND tpjs.HISTO_DESTRUCTION IS NULL + + LEFT JOIN validation v ON v.id = pj.validation_id + AND v.histo_destruction IS NULL +WHERE + pj.histo_destruction IS NULL +GROUP BY +i.annee_id, + i.code, + pj.type_piece_jointe_id, + pj.intervenant_id, + pj.id, + v.id, + f.id, + pj.date_archive; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_SERVICE AS +WITH t AS ( +SELECT + s.id service_id, + s.intervenant_id intervenant_id, + ep.structure_id structure_id, + ep.id element_pedagogique_id, + ep.periode_id element_pedagogique_periode_id, + etp.id etape_id, + + vh.type_volume_horaire_id type_volume_horaire_id, + vh.heures heures, + tvh.code type_volume_horaire_code, + + CASE WHEN ep.histo_destruction IS NULL THEN 1 ELSE 0 END element_pedagogique_histo, + CASE WHEN etp.histo_destruction IS NULL OR cp.id IS NOT NULL THEN 1 ELSE 0 END etape_histo, + + CASE WHEN ep.periode_id IS NOT NULL THEN + SUM( CASE WHEN vh.periode_id <> ep.periode_id THEN 1 ELSE 0 END ) OVER( PARTITION BY vh.service_id, vh.periode_id, vh.type_volume_horaire_id, vh.type_intervention_id ) + ELSE 0 END has_heures_mauvaise_periode, + + CASE WHEN v.id IS NULL AND vh.auto_validation=0 THEN 0 ELSE 1 END valide +FROM + service s + LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + LEFT JOIN etape etp ON etp.id = ep.etape_id + LEFT JOIN chemin_pedagogique cp ON cp.etape_id = etp.id + AND cp.element_pedagogique_id = ep.id + AND cp.histo_destruction IS NULL + + JOIN volume_horaire vh ON vh.service_id = s.id + AND vh.histo_destruction IS NULL + + JOIN type_volume_horaire tvh ON tvh.id = vh.type_volume_horaire_id + + LEFT JOIN validation_vol_horaire vvh ON vvh.volume_horaire_id = vh.id + + LEFT JOIN validation v ON v.id = vvh.validation_id + AND v.histo_destruction IS NULL +WHERE + s.histo_destruction IS NULL + /*@INTERVENANT_ID=s.intervenant_id*/ +) +SELECT + i.annee_id annee_id, + i.id intervenant_id, + i.structure_id intervenant_structure_id, + NVL( t.structure_id, i.structure_id ) structure_id, + ti.id type_intervenant_id, + ti.code type_intervenant_code, + si.peut_saisir_service peut_saisir_service, + + t.element_pedagogique_id, + t.service_id, + t.element_pedagogique_periode_id, + t.etape_id, + t.type_volume_horaire_id, + t.type_volume_horaire_code, + t.element_pedagogique_histo, + t.etape_histo, + + CASE WHEN SUM(t.has_heures_mauvaise_periode) > 0 THEN 1 ELSE 0 END has_heures_mauvaise_periode, + + CASE WHEN type_volume_horaire_id IS NULL THEN 0 ELSE COUNT(*) END nbvh, + CASE WHEN type_volume_horaire_id IS NULL THEN 0 ELSE SUM(t.heures) END heures, + SUM(valide) valide +FROM + t + JOIN intervenant i ON i.id = t.intervenant_id + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN type_intervenant ti ON ti.id = si.type_intervenant_id +WHERE + 1=1 + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ +GROUP BY + i.annee_id, + i.id, + i.structure_id, + t.structure_id, + i.structure_id, + ti.id, + ti.code, + si.peut_saisir_service, + t.element_pedagogique_id, + t.service_id, + t.element_pedagogique_periode_id, + t.etape_id, + t.type_volume_horaire_id, + t.type_volume_horaire_code, + t.element_pedagogique_histo, + t.etape_histo; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_SERVICE_REFERENTIEL AS +WITH t AS ( + + SELECT + i.annee_id, + i.id intervenant_id, + si.peut_saisir_referentiel peut_saisir_service, + vh.type_volume_horaire_id, + s.structure_id, + CASE WHEN v.id IS NULL AND vh.auto_validation=0 THEN 0 ELSE 1 END valide + FROM + intervenant i + + JOIN statut_intervenant si ON si.id = i.statut_id + + LEFT JOIN service_referentiel s ON s.intervenant_id = i.id + AND s.histo_destruction IS NULL + + LEFT JOIN volume_horaire_ref vh ON vh.service_referentiel_id = s.id + AND vh.histo_destruction IS NULL + + LEFT JOIN validation_vol_horaire_ref vvh ON vvh.volume_horaire_ref_id = vh.id + + LEFT JOIN validation v ON v.id = vvh.validation_id + AND v.histo_destruction IS NULL + WHERE + i.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ +) +SELECT + annee_id, + intervenant_id, + peut_saisir_service, + type_volume_horaire_id, + structure_id, + CASE WHEN type_volume_horaire_id IS NULL THEN 0 ELSE COUNT(*) END nbvh, + SUM(valide) valide +FROM + t +WHERE + NOT (structure_id IS NOT NULL AND type_volume_horaire_id IS NULL) +GROUP BY + annee_id, + intervenant_id, + peut_saisir_service, + type_volume_horaire_id, + structure_id; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_SERVICE_SAISIE AS +SELECT + i.annee_id, + i.id intervenant_id, + si.peut_saisir_service, + si.peut_saisir_referentiel, + SUM( CASE WHEN tvhs.code = 'PREVU' THEN NVL(vh .heures,0) ELSE 0 END ) heures_service_prev, + SUM( CASE WHEN tvhs.code = 'PREVU' THEN NVL(vhr.heures,0) ELSE 0 END ) heures_referentiel_prev, + SUM( CASE WHEN tvhs.code = 'REALISE' THEN NVL(vh .heures,0) ELSE 0 END ) heures_service_real, + SUM( CASE WHEN tvhs.code = 'REALISE' THEN NVL(vhr.heures,0) ELSE 0 END ) heures_referentiel_real +FROM + intervenant i + JOIN statut_intervenant si ON si.id = i.statut_id + LEFT JOIN service s ON s.intervenant_id = i.id AND s.histo_destruction IS NULL + LEFT JOIN volume_horaire vh ON vh.service_id = s.id AND vh.histo_destruction IS NULL + LEFT JOIN type_volume_horaire tvhs ON tvhs.id = vh.type_volume_horaire_id + + LEFT JOIN service_referentiel sr ON sr.intervenant_id = i.id AND sr.histo_destruction IS NULL + LEFT JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL + LEFT JOIN type_volume_horaire tvhrs ON tvhrs.id = vhr.type_volume_horaire_id +WHERE + i.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/ +GROUP BY + i.annee_id, + i.id, + si.peut_saisir_service, + si.peut_saisir_referentiel; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_VALIDATION_ENSEIGNEMENT AS +SELECT DISTINCT + i.annee_id, + i.id intervenant_id, + CASE WHEN rsv.priorite = 'affectation' THEN + COALESCE( i.structure_id, ep.structure_id ) + ELSE + COALESCE( ep.structure_id, i.structure_id ) + END structure_id, + vh.type_volume_horaire_id, + s.id service_id, + vh.id volume_horaire_id, + vh.auto_validation, + v.id validation_id +FROM + service s + JOIN volume_horaire vh ON vh.service_id = s.id AND vh.histo_destruction IS NULL + JOIN intervenant i ON i.id = s.intervenant_id AND i.histo_destruction IS NULL + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN regle_structure_validation rsv ON rsv.type_intervenant_id = si.type_intervenant_id AND rsv.type_volume_horaire_id = vh.type_volume_horaire_id + LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + LEFT JOIN validation_vol_horaire vvh ON vvh.volume_horaire_id = vh.id + LEFT JOIN validation v ON v.id = vvh.validation_id AND v.histo_destruction IS NULL +WHERE + s.histo_destruction IS NULL + AND NOT (vvh.validation_id IS NOT NULL AND v.id IS NULL) + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_VALIDATION_REFERENTIEL AS +SELECT DISTINCT + i.annee_id, + i.id intervenant_id, + CASE WHEN rsv.priorite = 'affectation' THEN + COALESCE( i.structure_id, s.structure_id ) + ELSE + COALESCE( s.structure_id, i.structure_id ) + END structure_id, + vh.type_volume_horaire_id, + s.id service_referentiel_id, + vh.id volume_horaire_ref_id, + vh.auto_validation, + v.id validation_id +FROM + service_referentiel s + JOIN volume_horaire_ref vh ON vh.service_referentiel_id = s.id AND vh.histo_destruction IS NULL + JOIN intervenant i ON i.id = s.intervenant_id AND i.histo_destruction IS NULL + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN regle_structure_validation rsv ON rsv.type_intervenant_id = si.type_intervenant_id AND rsv.type_volume_horaire_id = vh.type_volume_horaire_id + LEFT JOIN validation_vol_horaire_ref vvh ON vvh.volume_horaire_ref_id = vh.id + LEFT JOIN validation v ON v.id = vvh.validation_id AND v.histo_destruction IS NULL +WHERE + s.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/; +/ + +CREATE OR REPLACE FORCE VIEW V_TBL_VOLUME_HORAIRE AS +WITH has_cp AS ( +SELECT + etape_id +FROM + chemin_pedagogique cp +WHERE + cp.histo_destruction IS NULL +GROUP BY + etape_id +) +SELECT + i.annee_id annee_id, + i.id intervenant_id, + i.structure_id intervenant_structure_id, + NVL(ep.structure_id, i.structure_id) structure_id, + ti.id type_intervenant_id, + s.id service_id, + vh.id volume_horaire_id, + vh.type_intervention_id type_intervention_id, + vh.motif_non_paiement_id motif_non_paiement_id, + vh.periode_id volume_horaire_periode_id, + tvh.id type_volume_horaire_id, + evh.id etat_volume_horaire_id, + ep.id element_pedagogique_id, + ep.periode_id element_pedagogique_periode_id, + etp.id etape_id, + + ti.code type_intervenant_code, + tvh.code type_volume_horaire_code, + evh.code etat_volume_horaire_code, + si.peut_saisir_service peut_saisir_service, + vh.heures heures, + + CASE WHEN ep.histo_destruction IS NULL THEN 1 ELSE 0 END element_pedagogique_histo, + CASE WHEN etp.histo_destruction IS NULL OR has_cp.etape_id IS NOT NULL THEN 1 ELSE 0 END etape_histo, + CASE WHEN ep.periode_id IS NOT NULL AND vh.periode_id <> ep.periode_id THEN 0 ELSE 1 END periode_corresp + +FROM + intervenant i + JOIN statut_intervenant si ON si.id = i.statut_id + JOIN type_intervenant ti ON ti.id = si.type_intervenant_id + JOIN service s ON s.intervenant_id = i.id + AND s.histo_destruction IS NULL + JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + JOIN etape etp ON etp.id = ep.etape_id + JOIN volume_horaire vh ON vh.service_id = s.id + AND vh.histo_destruction IS NULL + JOIN type_volume_horaire tvh ON tvh.id = vh.type_volume_horaire_id + JOIN v_volume_horaire_etat vhe ON vhe.volume_horaire_id = vh.id + JOIN etat_volume_horaire evh ON evh.id = vhe.etat_volume_horaire_id + LEFT JOIN has_cp ON has_cp.etape_id = etp.id +WHERE + i.histo_destruction IS NULL + /*@INTERVENANT_ID=i.id*/ + /*@ANNEE_ID=i.annee_id*/; +/ + + + + +-------------------------------------------------- +-- table.drop +-------------------------------------------------- + +DROP TABLE ADRESSE_INTERVENANT; +/ + +DROP TABLE ADRESSE_STRUCTURE; +/ + +DROP TABLE DOSSIER; +/ + +DROP TABLE INTERVENANT_SAISIE; +/ + +DROP TABLE TBL_DEMS; +/ \ No newline at end of file diff --git a/doc/Stockage-fichiers.md b/doc/Stockage-fichiers.md new file mode 100644 index 0000000000..463c951970 --- /dev/null +++ b/doc/Stockage-fichiers.md @@ -0,0 +1,63 @@ +# Stockage des fichiers + +## Présentation + +Dans OSE, les fichiers, que ce soient les pièces justificatives ou les contrats ou tout autre fichier téléversé, +sont par défaut stockés dans la table FICHIER et leur contenu dans la colonne CONTENU. + +Au bout de plusieures années d'exploitation, cela devient problématique, car le tablespace Oracle est extensible jusqu'à 32Go, mais par au-delà. + +Il existe donc une alternative qui permet de stocker ces données directement dans le système de fichiers de votre serveur. + + +## Mise en œuvre du stockage dans le système de fichiers + +Le stockage dans le système de fichiers est recommandé pour une instance de production uniquement. + +Deux opérations sont nécessaires pour pouvoir stocker vos données dans votre système de fichiers : + +### 1. Configuration + +Dans votre fichier config.local.php, la rubrique "fichiers" doit être personnalisée. +Si vous avez un ancien fichier config.local.php qui ne comporte pas cette ubrique, veuillez copier/coller cette dernière depuis le fichier [config.local.php.default](../config.local.php.default). + +Exemple de configuration : +```php + /* Fichiers */ + 'fichiers' => [ + /* file => dans le système de fichiers par défaut, bdd => en base de données par défaut */ + 'stockage' => 'file', + + /* Répertoire où seront stockés les fichiers (pièces justificatives, contrats déposés, etc. + * A savoir : le répertoire par défaut data/fichiers est ignoré par GIT. + * Il est nécessaire de prévoir une sauvegarde de ce répertoire. + * IMPORTANT : ce répertoire doit être accéssible en lecture/écriture par l'utilisateur www-data d'Apache. + */ + 'dir' => __DIR__ . '/data/fichiers', + ], +``` + +Paramètre "stockage" : + - bdd => Stockage par défaut directement dans la base de données + - file => Stockage dans le système de fichiers, dans un répertoire spécifique + +Paramètre "dir" : + - Ce paramètre vous permet de préciser dans quel répertoire stocker ces fichiers. Vous pouvez utiliser + comme ci-dessus la variable magique __DIR__ qui permet de partir du répertoire OSE, ou alors opter pour un chemin absolu en débutant par "/". + +A Caen, nous avons opté pour un répertoire data de OSE lié symboliquement à un répertoire monté en réseau sur un espace de stockage distinct du serveur et sauvegardé régulièrement. + +Au cas ou le fichier ne pourrait pas être enregistré (espace disque insuffisant, problème réseau, droits mal configurés, etc.), alors le contenu sera stocké en base de données afin de ne pas être perdu. + +### 2. Transfert des données en base vers le système de fichiers + +Une fois votre configuration OK, un script vous permet de transférer tous les fichiers stockés dans votre base de données vers le système de fichiers, soulageant ainsi votre tablespace. + +```bash +./bin/ose fichiers-vers-filesystem +``` + +### 3. Exploitation + +Si OSE a besoin d'accéder au contenu d'un fichier, en mode "file", l'application ira chercher d'abord le contenu dans le système de fichier et s'il ne trouve rien il cherchera dans FICHIER.CONTENU. + diff --git a/doc/service_correction_bdd.md b/doc/service_correction_bdd.md deleted file mode 100644 index 238baef27c..0000000000 --- a/doc/service_correction_bdd.md +++ /dev/null @@ -1,79 +0,0 @@ -# OSE : Correction d’une fiche de service - -## Étape 1 : récupérer l’ID du service concerné -Dans la fiche service de l’intervenant, placer le curseur de la souris sur l’icône « Modifier » représentée par un crayon. - -Ensuite, dans l’URL du lien qui s’affiche dans le bas de la fenêtre du navigateur, identifier l’ID (110746 dans l’exemple ci-dessus) et le mémoriser. - -![Identifier un ID de service][service_correction_bdd] - -## Étape 2 : Aller dans la base de données pour récupérer les volumes horaires concernés -Exécuter la requête suivante pour récupérer toutes les informations nécessaires à la suite de la procédure : - -```sql -SELECT - /* Libellés pour retrouver la bonne ligne */ - tvh.libelle type_vh, - ep.code element, - str.libelle_court structure, - p.libelle_court semestre, - ti.code type_intervention, - mnp.libelle_court motif_non_paiement, - src.code source, - vh.horaire_debut horaire_debut, - vh.horaire_fin horaire_fin, - /* Identifiants */ - s.id service_id, - vh.id volume_horaire_id, - vh.auto_validation auto_validation, - vvh.validation_id validation_id, - vh.contrat_id contrat_id, - /* Heures */ - vh.heures heures -FROM - volume_horaire vh - JOIN service s ON s.id = vh.service_id AND s.histo_destruction IS NULL - JOIN type_volume_horaire tvh on tvh.id = vh.TYPE_VOLUME_HORAIRE_ID - JOIN periode p on p.id = vh.periode_id - JOIN type_intervention ti on ti.id = vh.type_intervention_id - JOIN source src ON src.id = vh.source_id - LEFT JOIN motif_non_paiement mnp ON mnp.id = vh.motif_non_paiement_id - LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id - LEFT JOIN structure str ON str.id = ep.structure_id - LEFT JOIN VALIDATION_VOL_HORAIRE vvh on VVH.VOLUME_HORAIRE_ID = vh.id - LEFT JOIN validation v ON v.id = VVH.VALIDATION_ID AND v.histo_destruction IS NULL -WHERE - vh.histo_destruction IS NULL - AND s.id = /* ID DU SERVICE */ -; -``` - -## Étape 3 : intervention en base de données -### Procédure - -Une fois que vous avez identifié le ou les volumes horaires à traiter, plusieurs cas de figure se présentent : -* Si le volume horaire a un contrat, alors il est impossible de le modifier, il faut donc supprimer d’abord le contrat correspondant dans OSE avant de pouvoir le modifier. -* Si le volume horaire a une validation, alors il faut - * Soit supprimer la validation dans OSE (mais cela va impacter aussi d’autres volumes horaires) - * Soit retirer un volume horaire spécifique d’une validation (procédure ci-dessous). - -Ensuite, procéder aux opérations suivantes : -* Historiser le volume horaire (procédure ci-dessous) -* Recalculer la feuille de route de l’intervenant : la fiche de service ayant changé, il convient de recalculer la feuille de route de l’intervenant, car cela peut avoir de l’influence sur l’état d’avancement du Workflow. - -### Requêtes : - -Retirer un volume horaire d’une validation (s’il ne fait pas l’objet d’un contrat) : -```sql -DELETE FROM VALIDATION_VOL_HORAIRE WHERE volume_horaire_id = /*VOLUME_HORAIRE ID*/ -``` - -Historiser un volume horaire : -```sql -UPDATE volume_horaire SET histo_destruction=SYSDATE, histo_destructeur_id=/*UTILISATEUR_ID*/ WHERE volume_horaire_id = /*VOLUME_HORAIRE ID*/; -``` - -L’UTILISATEUR_ID doit être le vôtre. Il correspond à une valeur de la colonne UTILISATEUR.ID - - -[service_correction_bdd]: ./service_correction_bdd.png \ No newline at end of file diff --git a/doc/service_correction_bdd.png b/doc/service_correction_bdd.png deleted file mode 100644 index 961354607fd743912cb9d7e65fe05dd9a9991a9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83021 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�?EK}rs?$Xu>s*LAeP7#GB<=Qw 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%0AI{u7 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 -- GitLab