-- nouvel employe = XXX -- dossiers = Y1 et y2 -- nouvelle affectation = ZZZ -- ancienne affectation = TTT set client_encoding to latin1; BEGIN; -- CAS PARTICULIER : changement de proprietaire de toutes les actions : UPDATE action SET ref_employe=XXX, codemodif='patch_mv_folder' WHERE ref_dossier=Y1 OR ref_dossier=Y2; -- SINON que les actions a effectuer seulement: UPDATE action SET ref_employe=XXX, codemodif='patch_mv_folder' WHERE ref_statut=3 AND (ref_dossier=Y1 OR ref_dossier=Y2); -- couper/coller des dossiers : UPDATE dossier SET ref_affectation=ZZZ, codemodif='patch_mv_folder' WHERE uid=Y1 OR uid=Y2; -- migration des cibles des dossiers : UPDATE prospection SET fin=now(), codemodif='patch_mv_folder', datemodif=now() WHERE ref_cible IN (SELECT DISTINCT ref_cible FROM action WHERE ref_dossier=Y1 OR ref_dossier=Y2) AND fin IS NULL; INSERT INTO prospection (ref_cible, ref_employe, codecrea) SELECT DISTINCT ON (ref_cible) ref_cible, XXX, 'patch_mv_folder' FROM action WHERE ref_dossier=Y1 OR ref_dossier=Y2; -- creation d'un dossier d'import : INSERT INTO dossier (ref_affectation, ztitle, ref_statut, commentaire, codecrea, authcrea) VALUES (ZZZ, 'transfert d\'action', 3, 'Lors de la migration d\'opérations, de nouvelles actions vous ont été attribuées', 'patch_mv_folder', 0); -- migration des autres actions a effectuer dans un dossier 'import' UPDATE action SET ref_dossier=(SELECT max(uid) FROM dossier WHERE ref_affectation=ZZZ AND codecrea='patch_mv_folder'), ref_employe=XXX, codemodif='patch_mv_folder' WHERE ref_statut=3 AND ref_cible in (SELECT DISTINCT ref_cible FROM action WHERE ref_dossier=Y1 OR ref_dossier=Y2) AND ref_employe != XXX; -- suppression du dossier d'import si vide : DELETE FROM dossier WHERE uid=(SELECT max(uid) FROM dossier WHERE ref_affectation=ZZZ AND codecrea='patch_mv_folder') AND NOT EXISTS (SELECT uid FROM action WHERE ref_dossier=dossier.uid); -- suppression dans les listes de travail UPDATE list_element SET ref_statut=1, datemodif=now(), codemodif='patch_mv_folder' FROM contact_employe_list l, cible c WHERE list_element.ref_list = l.uid AND list_element.ref_object = c.ref_contact AND c.ref_statut = 0 AND l.ref_statut != 1 AND c.uid IN (SELECT DISTINCT ref_cible FROM action WHERE ref_dossier=Y1 OR ref_dossier=Y2) AND l.ref_affectation=TTT; END;