--- /dev/null
+<!--
+ ~ Copyright © FYLAB and the Conseil Régional d'Île-de-France, 2009
+ ~ This file is part of L'Interface Libre et Interactive de l'Enseignement (Lilie).
+ ~
+ ~ Lilie is free software. You can redistribute it and/or modify since
+ ~ you respect the terms of either (at least one of the both license) :
+ ~ - under the terms of the GNU Affero General Public License as
+ ~ published by the Free Software Foundation, either version 3 of the
+ ~ License, or (at your option) any later version.
+ ~ - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ ~ License, or any later version
+ ~
+ ~ There are special exceptions to the terms and conditions of the
+ ~ licenses as they are applied to this software. View the full text of
+ ~ the exception in file LICENSE.txt in the directory of this software
+ ~ distribution.
+ ~
+ ~ Lilie is distributed in the hope that it will be useful,
+ ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ ~ Licenses for more details.
+ ~
+ ~ You should have received a copy of the GNU General Public License
+ ~ and the CeCILL-C along with Lilie. If not, see :
+ ~ <http://www.gnu.org/licenses/> and
+ ~ <http://www.cecill.info/licences.fr.html>.
+ -->
+
+<databaseChangeLog
+ xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
+
+ <changeSet id="1" author="agia">
+ <comment>
+ Suppression des utilisateurs : ajout d'une donnée pour le rapport
+ </comment>
+
+ <sql>
+ DROP FUNCTION IF EXISTS suppression_utilisateurs(
+ dateDesactivation timestamp,
+ nbAutoritesASupprimer integer);
+ </sql>
+
+
+ <createProcedure>
+ <![CDATA[
+ CREATE OR REPLACE FUNCTION suppression_utilisateurs(
+ dateDesactivation timestamp,
+ nbAutoritesASupprimer integer
+ )
+ RETURNS TABLE
+ (nb_deleted_textes_preferences_ut integer,
+ nb_deleted_signature integer,
+ nb_deleted_rel_cahier_acteur integer,
+ nb_deleted_rel_activite_acteur integer,
+ nb_deleted_pref_agenda integer,
+ nb_deleted_modele_appreciation integer,
+ nb_deleted_evment integer,
+ nb_deleted_dossier integer,
+ nb_deleted_commentaire integer,
+ nb_deleted_discussion integer,
+ nb_deleted_autorisation integer,
+ nb_deleted_agenda integer,
+ nb_deleted_pref_notes integer,
+ nb_deleted_notif_pref integer,
+ nb_deleted_fiche_eleve_commentaire integer,
+ nb_deleted_acces_fonctionnalite_personne integer,
+ nb_deleted_compte_utilisateur integer,
+ nb_deleted_chapitre integer,
+ nb_deleted_question_tdbase integer,
+ nb_deleted_sujet_tdbase integer,
+ nb_deleted_ressource integer,
+ nb_deleted_date_activite integer,
+ nb_deleted_activite integer,
+ nb_deleted_cahier_de_textes integer,
+ nb_deleted_personne integer,
+ nb_deleted_autorite integer,
+ nb_personne_to_delete integer
+ ) AS $$
+ BEGIN
+ -- NB:on utilise CREATE TEMP TABLE et pas WITH car la portée d'une table temporaire créée par WITH ne concerne que la première requête
+
+ CREATE TEMP TABLE result (
+ nb_deleted_textes_preferences_ut integer,
+ nb_deleted_signature integer,
+ nb_deleted_rel_cahier_acteur integer,
+ nb_deleted_rel_activite_acteur integer,
+ nb_deleted_pref_agenda integer,
+ nb_deleted_modele_appreciation integer,
+ nb_deleted_evment integer,
+ nb_deleted_dossier integer,
+ nb_deleted_commentaire integer,
+ nb_deleted_discussion integer,
+ nb_deleted_autorisation integer,
+ nb_deleted_agenda integer,
+ nb_deleted_pref_notes integer,
+ nb_deleted_notif_pref integer,
+ nb_deleted_fiche_eleve_commentaire integer,
+ nb_deleted_acces_fonctionnalite_personne integer,
+ nb_deleted_compte_utilisateur integer,
+ nb_deleted_question_tdbase integer,
+ nb_deleted_sujet_tdbase integer,
+ nb_deleted_chapitre integer,
+ nb_deleted_ressource integer,
+ nb_deleted_date_activite integer,
+ nb_deleted_activite integer,
+ nb_deleted_cahier_de_textes integer,
+ nb_deleted_personne integer,
+ nb_deleted_autorite integer,
+ nb_personne_to_delete integer
+ );
+ INSERT INTO result
+ VALUES (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,null);
+
+ -- les utilisateurs qui sont auteurs d'un visa (ils ne seront pas supprimés)
+ CREATE TEMP TABLE auteur_visa AS
+ SELECT p.id AS personneId,
+ p.autorite_id AS autoriteId
+ FROM ent.personne p
+ INNER JOIN entcdt.visa v ON v.auteur_personne_id = p.id;
+ -- récupération des autorités à supprimer
+ CREATE TEMP TABLE autorites_a_supprimer AS
+ SELECT id FROM securite.autorite
+ WHERE date_desactivation < dateDesactivation
+ AND est_active = FALSE
+ AND etat <> 'ACCES_RESTREINT'
+ AND type = 'acteur'
+ AND id NOT IN (SELECT autoriteId FROM auteur_visa)
+ ORDER BY date_desactivation ASC
+ LIMIT nbAutoritesASupprimer;
+ -- récupération des personnes à supprimer
+ CREATE TEMP TABLE personnes_a_supprimer AS
+ SELECT id FROM ent.personne
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer);
+ -- récupération des cahiers privés non visés à supprimer
+ CREATE TEMP TABLE cahiers_a_supprimer AS
+ SELECT cdt.id AS id FROM entcdt.cahier_de_textes cdt
+ INNER JOIN securite.autorisation aut ON aut.item_id = cdt.item_id
+ WHERE cdt.annee_scolaire_id IS NULL
+ AND cdt.service_id IS NULL
+ AND est_vise = FALSE
+ AND aut.autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ AND aut.proprietaire = TRUE;
+ -- récupération des chapitres des cahiers à supprimer
+ CREATE TEMP TABLE chapitres_cahiers_a_supprimer AS
+ SELECT id FROM entcdt.chapitre
+ WHERE cahier_de_textes_id IN (SELECT id FROM cahiers_a_supprimer);
+ -- récupération des activités des cahiers à supprimer
+ CREATE TEMP TABLE activites_cahiers_a_supprimer AS
+ SELECT id FROM entcdt.activite
+ WHERE cahier_de_textes_id IN (SELECT id FROM cahiers_a_supprimer)
+ OR chapitre_id IN (SELECT id FROM chapitres_cahiers_a_supprimer);
+ --
+ CREATE TEMP TABLE commentaires_a_supprimer AS
+ SELECT id FROM forum.commentaire
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer);
+ -- récupération des dossiers à supprimer
+ CREATE TEMP TABLE dossiers_a_supprimer AS
+ SELECT id FROM entcdt.dossier
+ WHERE acteur_id IN (SELECT id FROM autorites_a_supprimer);
+ -- récupération des emplois du temps perso des enseignants à supprimer
+ CREATE TEMP TABLE edt_a_supprimer AS
+ SELECT id FROM enttemps.agenda
+ WHERE enseignant_id IN (SELECT id FROM autorites_a_supprimer);
+ -- récupération des agendas privés des autorités à supprimer
+ CREATE TEMP TABLE agendas_a_supprimer AS
+ SELECT ag.id FROM enttemps.agenda ag
+ INNER JOIN securite.autorisation aut ON aut.item_id = ag.item_id
+ WHERE ag.type_agenda_id = (SELECT id FROM enttemps.type_agenda
+ WHERE code LIKE 'STA')
+ AND aut.autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ AND aut.proprietaire = TRUE;
+ -- récupération des questions/items de tdbase à supprimer
+ CREATE TEMP TABLE questions_a_supprimer AS
+ SELECT id FROM td.question
+ WHERE proprietaire_id IN (SELECT id FROM personnes_a_supprimer)
+ AND publie = false;
+ -- récupération des questions/items de tdbase à modifier
+ CREATE TEMP TABLE questions_a_modifier AS
+ SELECT id FROM td.question
+ WHERE proprietaire_id IN (SELECT id FROM personnes_a_supprimer)
+ AND publie = true;
+ -- récupération des sujet tdbase à supprimer
+ CREATE TEMP TABLE sujets_a_supprimer AS
+ SELECT id FROM td.sujet
+ WHERE proprietaire_id IN (SELECT id FROM personnes_a_supprimer)
+ AND publie = false;
+ -- récupération des sujet tdbase à modifier
+ CREATE TEMP TABLE sujets_a_modifier AS
+ SELECT id FROM td.sujet
+ WHERE proprietaire_id IN (SELECT id FROM personnes_a_supprimer)
+ AND publie = true;
+ -- récupération de l'autorité 'système' du module textes
+ CREATE TEMP TABLE autorite_systeme_textes AS
+ SELECT id FROM securite.autorite
+ WHERE type LIKE 'eliot'
+ AND id_externe LIKE 'ELIOT-TEXTES';
+ -- récupération de l'autorité 'système' du module scolarite
+ CREATE TEMP TABLE autorite_systeme_scolarite AS
+ SELECT id FROM securite.autorite
+ WHERE type LIKE 'eliot'
+ AND id_externe LIKE 'ELIOT-SCOLARITE';
+
+ -- supprimer les PPS restantes
+ DELETE FROM ent.personne_propriete_scolarite
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer);
+
+ -- suppression des préférences textes des utilisateurs à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.textes_preferences_utilisateur
+ WHERE utilisateur_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_textes_preferences_ut = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des signatures
+ WITH deleted_rows AS (
+ DELETE FROM ent.signature
+ WHERE proprietaire_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_signature = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des relations entre les autorités à supprimer et les cahiers
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.rel_cahier_acteur
+ WHERE acteur_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_rel_cahier_acteur = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des relations entre les autorités à supprimer et les activités
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.rel_activite_acteur
+ WHERE acteur_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_rel_activite_acteur = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des préférences agenda liées aux autorités à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.preference_utilisateur_agenda
+ WHERE utilisateur_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_pref_agenda = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des modèles d'appréciation des professeurs
+ WITH deleted_rows AS (
+ DELETE FROM entnotes.modele_appreciation_professeur
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_modele_appreciation = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des événements des agendas persos créés par les autorités à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.evenement
+ WHERE auteur_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_evment = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- supprimer les relations entre les droits et les dossiers
+ DELETE FROM entcdt.rel_dossier_autorisation_cahier
+ WHERE dossier_id IN (SELECT id FROM dossiers_a_supprimer);
+
+ -- suppression des dossiers créés par les autorités à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.dossier
+ WHERE id IN (SELECT id FROM dossiers_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_dossier = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des informations de lecture des commentaires
+ DELETE FROM forum.commentaire_lu
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer);
+ DELETE FROM forum.commentaire_lu
+ WHERE commentaire_id IN (SELECT id FROM commentaires_a_supprimer);
+
+ -- suppression des commentaires
+ WITH deleted_rows AS (
+ DELETE FROM forum.commentaire
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_commentaire = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des discussions
+ WITH deleted_rows AS (
+ DELETE FROM forum.discussion
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_discussion = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des autorisations
+ WITH deleted_rows AS (
+ DELETE FROM securite.autorisation
+ WHERE autorite_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_autorisation = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des relations entre les emplois du temps perso à supprimer perso et les événements
+ DELETE FROM enttemps.rel_agenda_evenement
+ WHERE agenda_id IN (SELECT id FROM edt_a_supprimer);
+
+ -- suppression des événements liés aux emplois du temps perso à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.evenement
+ WHERE agenda_maitre_id IN (SELECT id FROM edt_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_evment = ((SELECT result.nb_deleted_evment FROM result) + (SELECT COUNT(*) FROM deleted_rows));
+
+ -- suppression des préférences liées aux emplois du temps perso à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.preference_utilisateur_agenda
+ WHERE agenda_id IN (SELECT id FROM edt_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_pref_agenda = ((SELECT result.nb_deleted_pref_agenda FROM result) + (SELECT COUNT(*) FROM deleted_rows));
+
+ -- suppression des emplois du temps persos à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.agenda
+ WHERE enseignant_id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_agenda = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des préférences d'utilisation de notes des personnes à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entnotes.preference_utilisateur_notes
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_pref_notes = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des préférences de notification de notes des personnes à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM notification.preference_utilisateur
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_notif_pref = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des commentaires de la fiche élève des personnes à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM ent.fiche_eleve_commentaire
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_fiche_eleve_commentaire = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des droits d'accès aux fonctionnalités des personnes à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM securite.acces_fonctionnalite_personne
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_acces_fonctionnalite_personne = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression du compte utilisateur des personnes à supprimer utilisé par tdbase
+ WITH deleted_rows AS (
+ DELETE FROM tice.compte_utilisateur
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_compte_utilisateur = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des liens entre les élèves et leurs responsables
+ DELETE FROM ent.responsable_eleve
+ WHERE personne_id IN (SELECT id FROM personnes_a_supprimer)
+ OR eleve_id IN (SELECT id FROM personnes_a_supprimer);
+
+ /* TD base */
+ -- suppression des liens entre sujets et questions créés par les personnes à supprimer
+ DELETE FROM td.sujet_sequence_questions
+ WHERE question_id IN (SELECT id FROM questions_a_supprimer);
+ DELETE FROM td.sujet_sequence_questions
+ WHERE sujet_id IN (SELECT id FROM sujets_a_supprimer);
+
+ -- suppression des informations d'export des questions à supprimer
+ DELETE FROM td.question_export
+ WHERE question_id IN (SELECT id FROM questions_a_supprimer);
+
+ -- suppression des liens entre compétence et les questions à supprimer
+ DELETE FROM td.question_competence
+ WHERE question_id IN (SELECT id FROM questions_a_supprimer);
+
+ -- suppression des liens entre pièces jointes et les questions à supprimer
+ DELETE FROM td.question_attachement
+ WHERE question_id IN (SELECT id FROM questions_a_supprimer);
+
+ -- suppression des questions
+ WITH deleted_rows AS (
+ DELETE FROM td.question
+ WHERE id IN (SELECT id FROM questions_a_supprimer)
+ RETURNING *
+ )
+
+ UPDATE result
+ SET nb_deleted_question_tdbase = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des sujets
+ WITH deleted_rows AS (
+ DELETE FROM td.sujet
+ WHERE id IN (SELECT id FROM sujets_a_supprimer)
+ RETURNING *
+ )
+
+ UPDATE result
+ SET nb_deleted_sujet_tdbase = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- modification des questions
+ UPDATE td.question
+ SET proprietaire_id = (SELECT id FROM autorite_systeme_scolarite)
+ WHERE id IN (SELECT id FROM questions_a_modifier);
+
+ -- modification des sujets
+ UPDATE td.sujet
+ SET proprietaire_id = (SELECT id FROM autorite_systeme_scolarite)
+ WHERE id IN (SELECT id FROM sujets_a_modifier);
+ /* */
+
+ -- suppression des relations entre les agendas privés à supprimer et les événements
+ DELETE FROM enttemps.rel_agenda_evenement
+ WHERE agenda_id IN (SELECT id FROM agendas_a_supprimer);
+
+ -- suppression des événements liés aux agendas privés à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.evenement
+ WHERE agenda_maitre_id IN (SELECT id FROM agendas_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_evment = ((SELECT result.nb_deleted_evment FROM result) + (SELECT COUNT(*) FROM deleted_rows));
+
+ -- suppression des préférences liées aux agendas privés
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.preference_utilisateur_agenda
+ WHERE agenda_id IN (SELECT id FROM agendas_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_pref_agenda = ((SELECT result.nb_deleted_pref_agenda FROM result) + (SELECT COUNT(*) FROM deleted_rows));
+
+ -- suppression des agendas privés
+ WITH deleted_rows AS (
+ DELETE FROM enttemps.agenda
+ WHERE id IN (SELECT id FROM agendas_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_agenda = ((SELECT result.nb_deleted_agenda FROM result) + (SELECT COUNT(*) FROM deleted_rows));
+
+ -- suppression des ressources liées aux activités à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.ressource
+ WHERE activite_id IN (SELECT id FROM activites_cahiers_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_ressource = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des relations entre les activités à supprimer et les utilisateurs
+ DELETE FROM entcdt.rel_activite_acteur
+ WHERE activite_id IN (SELECT id FROM activites_cahiers_a_supprimer);
+
+ -- suppression des dates des activités à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.date_activite
+ WHERE activite_id IN (SELECT id FROM activites_cahiers_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_date_activite = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des activités des cahiers à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.activite
+ WHERE id IN (SELECT id FROM activites_cahiers_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_activite = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- supprimer la relation entre les demandes de traitement et l'autorité à supprimer
+ UPDATE entdemon.demande_traitement
+ SET demandeur_autorite_id = NULL
+ WHERE demandeur_autorite_id IN (SELECT id FROM autorites_a_supprimer);
+
+ -- relier les activités créées par les autorités à supprimer à l'autorité système de textes
+ UPDATE entcdt.activite
+ SET auteur_id = (SELECT id FROM autorite_systeme_textes)
+ WHERE auteur_id IN (SELECT id FROM autorites_a_supprimer);
+
+ -- relier les chapitres créées par les autorités à supprimer à l'autorité système de textes
+ UPDATE entcdt.chapitre
+ SET auteur_id = (SELECT id FROM autorite_systeme_textes)
+ WHERE auteur_id IN (SELECT id FROM autorites_a_supprimer);
+
+ -- suppression des chapitres liés aux cahiers à supprimer
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.chapitre
+ WHERE id IN (SELECT id FROM chapitres_cahiers_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_chapitre = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- suppression des relations entre les cahiers à supprimer et les groupes
+ DELETE FROM entcdt.rel_cahier_groupe
+ WHERE cahier_de_textes_id IN (SELECT id FROM cahiers_a_supprimer);
+
+ -- suppression des relations entre les cahiers à supprimer et les utilisateurs
+ DELETE FROM entcdt.rel_cahier_acteur
+ WHERE cahier_de_textes_id IN (SELECT id FROM cahiers_a_supprimer);
+
+ -- suppression des cahiers privés non visés
+ WITH deleted_rows AS (
+ DELETE FROM entcdt.cahier_de_textes
+ WHERE id IN (SELECT id FROM cahiers_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_cahier_de_textes = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- supprimer les personnes
+ WITH deleted_rows AS (
+ DELETE FROM ent.personne
+ WHERE id IN (SELECT id FROM personnes_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_personne = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- supprimer les autorités
+ WITH deleted_rows AS (
+ DELETE FROM securite.autorite
+ WHERE id IN (SELECT id FROM autorites_a_supprimer)
+ RETURNING *)
+
+ UPDATE result
+ SET nb_deleted_autorite = (SELECT COUNT(*) FROM deleted_rows);
+
+ -- récupérer le nombre de personnes, dont la désactivation a été faite à la date donnée en paramètre, à supprimer
+ UPDATE result
+ SET nb_personne_to_delete = (SELECT COUNT(id) FROM securite.autorite
+ WHERE date_desactivation < dateDesactivation
+ AND est_active = FALSE
+ AND etat <> 'ACCES_RESTREINT'
+ AND type = 'acteur'
+ AND id NOT IN (SELECT autoriteId FROM auteur_visa));
+
+ -- suppression des tables temporaires
+ DROP TABLE IF EXISTS auteur_visa;
+ DROP TABLE IF EXISTS autorites_a_supprimer;
+ DROP TABLE IF EXISTS personnes_a_supprimer;
+ DROP TABLE IF EXISTS cahiers_a_supprimer;
+ DROP TABLE IF EXISTS dossiers_a_supprimer;
+ DROP TABLE IF EXISTS chapitres_cahiers_a_supprimer;
+ DROP TABLE IF EXISTS activites_cahiers_a_supprimer;
+ DROP TABLE IF EXISTS commentaires_a_supprimer;
+ DROP TABLE IF EXISTS edt_a_supprimer;
+ DROP TABLE IF EXISTS agendas_a_supprimer;
+ DROP TABLE IF EXISTS questions_a_supprimer;
+ DROP TABLE IF EXISTS questions_a_modifier;
+ DROP TABLE IF EXISTS sujets_a_supprimer;
+ DROP TABLE IF EXISTS sujets_a_modifier;
+ DROP TABLE IF EXISTS autorite_systeme_textes;
+ DROP TABLE IF EXISTS autorite_systeme_scolarite;
+
+ RETURN QUERY
+ SELECT * FROM result;
+
+ DROP TABLE result;
+
+ END;
+ $$ LANGUAGE plpgsql;
+ ]]>
+ </createProcedure>
+
+ </changeSet>
+
+</databaseChangeLog>
+