From 902ddec45f400c8ca9a887a08c3df2003aa3cd3f Mon Sep 17 00:00:00 2001
From: gauthierb <gauthierb@d57fa8bc-6af1-4de9-8b7d-78e900e231e7>
Date: Wed, 2 Jul 2014 09:21:46 +0000
Subject: [PATCH] =?UTF-8?q?Correction=20:=20Une=20reponsabilit=C3=A9=20str?=
 =?UTF-8?q?ucturelle=20n'est=20prise=20en=20compte=20que=20si=20la=20struc?=
 =?UTF-8?q?ture=20(OU=20L'UNE=20DE=20SES=20SOUS-STRUCTURES)=20poss=C3=A8de?=
 =?UTF-8?q?=20une=20offre=20de=20formation.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 data/ose_schema.sql                           |  23 ++++
 data/sauv.sql                                 |  66 ++++++++++++
 doc/utilisateurs-ose.xls                      | Bin 16896 -> 32768 bytes
 ...plication.Entity.Db.VRolePersonnel.dcm.xml |  27 +++++
 .../Application/Entity/Db/VRolePersonnel.php  |  99 ++++++++++++++++++
 .../Provider/Role/RoleProvider.php            |  25 +----
 .../Provider/Role/RoleProviderFactory.php     |   3 +-
 .../src/Application/Service/Role.php          |  44 ++++----
 8 files changed, 242 insertions(+), 45 deletions(-)
 create mode 100644 module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.VRolePersonnel.dcm.xml
 create mode 100644 module/Application/src/Application/Entity/Db/VRolePersonnel.php

diff --git a/data/ose_schema.sql b/data/ose_schema.sql
index eefdd81fb6..309ef26ecb 100644
--- a/data/ose_schema.sql
+++ b/data/ose_schema.sql
@@ -1,3 +1,26 @@
+create or replace view v_role_personnel as
+  select r.id, p.id personnel_id, p.NOM_USUEL, p.PRENOM, p.EMAIL, tr.id type_role_id, tr.CODE, tr.LIBELLE, s.id structure_id, s.LIBELLE_COURT, trpr.php_role_id 
+  from ROLE r
+  inner join PERSONNEL p on r.PERSONNEL_ID = p.ID
+  inner join STRUCTURE s on r.STRUCTURE_ID = s.ID
+  inner join TYPE_ROLE tr on r.TYPE_ID = tr.ID
+  inner join TYPE_ROLE_PHP_ROLE trpr on r.TYPE_ID = trpr.TYPE_ROLE_ID 
+  where s.STRUCTURE_NIV2_ID in (
+    -- liste des ids des structures de niveau 2 qui possèdent, elles-mêmes ou l'une de leurs sous-structures, au moins 1 élément pédagogique
+    SELECT DISTINCT sniv2.ID
+    FROM STRUCTURE sniv2
+    INNER JOIN STRUCTURE stmp ON (sniv2.ID = stmp.STRUCTURE_NIV2_ID) AND (stmp.HISTO_DESTRUCTION IS NULL AND stmp.HISTO_DESTRUCTEUR_ID IS NULL)
+    INNER JOIN ELEMENT_PEDAGOGIQUE ep ON (stmp.ID = ep.STRUCTURE_ID) AND (ep.HISTO_DESTRUCTION IS NULL AND ep.HISTO_DESTRUCTEUR_ID IS NULL)
+    WHERE (sniv2.HISTO_DESTRUCTION IS NULL AND sniv2.HISTO_DESTRUCTEUR_ID IS NULL)
+  );
+
+
+
+
+
+
+
+
 
 CREATE TABLE "OSE"."DOSSIER" (	
   "ID" NUMBER(*,0) NOT NULL, 
diff --git a/data/sauv.sql b/data/sauv.sql
index f86801ab8e..d349f905b8 100644
--- a/data/sauv.sql
+++ b/data/sauv.sql
@@ -1,4 +1,70 @@
 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '21255' and s.source_code = 'I11' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '26771' and s.source_code = 'I12' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '4173' and s.source_code = 'I13' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '65415' and s.source_code = 'M17' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '255' and s.source_code = 'M17' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '2489' and s.source_code = 'M17' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '63573' and s.source_code = 'M17' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '52917' and s.source_code = 'M17' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '4552' and s.source_code = 'U01' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '2311' and s.source_code = 'U02' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '5781' and s.source_code = 'U02' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '987' and s.source_code = 'U02' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '26902' and s.source_code = 'U02' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '26902' and s.source_code = 'U26' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '25236' and s.source_code = 'U03' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '25428' and s.source_code = 'U04' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '476' and s.source_code = 'U07' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '46070' and s.source_code = 'U09' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '154' and s.source_code = 'U10' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '5471' and s.source_code = 'U10' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '27' and s.source_code = 'U10' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '15139' and s.source_code = 'U10' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '26899' and s.source_code = 'U10' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '68179' and s.source_code = 'U26' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '4640' and s.source_code = 'U26' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '5177' and s.source_code = 'U26' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '4628' and s.source_code = 'U36' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '5170' and s.source_code = 'U36' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '63191' and s.source_code = 'U55' union 
+select 'insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, '||p.id||', '||s.id||');' from personnel p, structure s where p.source_code = '5378' and s.source_code = 'U55' 
+; 
+
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 1008, 8680);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 1242, 8468);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 1247, 8495);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 1371, 8757);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 1476, 8472);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 1560, 8474);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 1711, 8473);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 2000, 8474);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 2132, 8467);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 221, 8529);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 2515, 8498);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 2599, 8529);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 261, 8498);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 2775, 8467);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 2807, 8494);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 2843, 8474);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 297, 8467);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 3004, 8469);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 3199, 8474);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 353, 8466);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 357, 8529);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 3766, 8493);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 3853, 8467);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 3853, 8529);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 3866, 8498);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 4030, 8498);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 4057, 8474);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 702, 8498);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 800, 8757);
+insert into role (ID , TYPE_ID , SOURCE_CODE , SOURCE_ID , HISTO_CREATEUR_ID, HISTO_MODIFICATEUR_ID, PERSONNEL_ID , STRUCTURE_ID) values (role_id_seq.nextval, 8, 10000+role_id_seq.currval, 2, 1, 1, 911, 8680);
+
+
+
+
 delete from TYPE_PIECE_JOINTE_STATUT;
 
 INSERT INTO TYPE_PIECE_JOINTE_STATUT (ID,TYPE_PIECE_JOINTE_ID,STATUT_INTERVENANT_ID,OBLIGATOIRE,SEUIL_HETD) VALUES (
diff --git a/doc/utilisateurs-ose.xls b/doc/utilisateurs-ose.xls
index dda8e3840de7608cc29f50fbfff1661f6f2b5067..202f0abe1815b5ad0440790b5a571469fd303e03 100644
GIT binary patch
literal 32768
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
a$X*yGMh~b>MT|OP)xhiq(ZuLMwjTh1Fg+Cj

literal 16896
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

diff --git a/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.VRolePersonnel.dcm.xml b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.VRolePersonnel.dcm.xml
new file mode 100644
index 0000000000..8298c86515
--- /dev/null
+++ b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.VRolePersonnel.dcm.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+  <entity name="Application\Entity\Db\VRolePersonnel" table="V_ROLE_PERSONNEL">
+    <id name="id" type="integer" column="ID" />
+    <field name="phpRoleId" type="string" column="PHP_ROLE_ID" length="64" nullable="false"/>
+    <many-to-one field="role" target-entity="Application\Entity\Db\Role">
+      <join-columns>
+        <join-column name="ID" referenced-column-name="ID"/>
+      </join-columns>
+    </many-to-one>
+    <many-to-one field="structure" target-entity="Application\Entity\Db\Structure">
+      <join-columns>
+        <join-column name="STRUCTURE_ID" referenced-column-name="ID"/>
+      </join-columns>
+    </many-to-one>
+    <many-to-one field="typeRole" target-entity="Application\Entity\Db\TypeRole">
+      <join-columns>
+        <join-column name="TYPE_ROLE_ID" referenced-column-name="ID"/>
+      </join-columns>
+    </many-to-one>
+    <many-to-one field="personnel" target-entity="Application\Entity\Db\Personnel">
+      <join-columns>
+        <join-column name="PERSONNEL_ID" referenced-column-name="ID"/>
+      </join-columns>
+    </many-to-one>
+  </entity>
+</doctrine-mapping>
diff --git a/module/Application/src/Application/Entity/Db/VRolePersonnel.php b/module/Application/src/Application/Entity/Db/VRolePersonnel.php
new file mode 100644
index 0000000000..2614b7b828
--- /dev/null
+++ b/module/Application/src/Application/Entity/Db/VRolePersonnel.php
@@ -0,0 +1,99 @@
+<?php
+
+namespace Application\Entity\Db;
+
+/**
+ * VRolePersonnel
+ */
+class VRolePersonnel
+{
+    /**
+     * @var integer
+     */
+    protected $id;
+
+    /**
+     * @var \Application\Entity\Db\Role
+     */
+    protected $role;
+
+    /**
+     * @var \Application\Entity\Db\Structure
+     */
+    protected $structure;
+
+    /**
+     * @var \Application\Entity\Db\TypeRole
+     */
+    protected $typeRole;
+
+    /**
+     * @var \Application\Entity\Db\Personnel
+     */
+    protected $personnel;
+
+    /**
+     * @var string
+     */
+    protected $phpRoleId;
+
+    /**
+     * Get id
+     *
+     * @return integer 
+     */
+    public function getId()
+    {
+        return $this->id;
+    }
+
+    /**
+     * Get role
+     *
+     * @return \Application\Entity\Db\Role 
+     */
+    public function getRole()
+    {
+        return $this->role;
+    }
+
+    /**
+     * Get structure
+     *
+     * @return \Application\Entity\Db\Structure 
+     */
+    public function getStructure()
+    {
+        return $this->structure;
+    }
+
+    /**
+     * Get typeRole
+     *
+     * @return \Application\Entity\Db\TypeRoleVRolePersonnel 
+     */
+    public function getTypeRole()
+    {
+        return $this->typeRole;
+    }
+
+    /**
+     * Get personnel
+     *
+     * @return \Application\Entity\Db\Personnel 
+     */
+    public function getPersonnel()
+    {
+        return $this->personnel;
+    }
+
+    /**
+     * Get phpRoleId
+     *
+     * @return string 
+     */
+    public function getPhpRoleId()
+    {
+        return $this->phpRoleId;
+    }
+}
diff --git a/module/Application/src/Application/Provider/Role/RoleProvider.php b/module/Application/src/Application/Provider/Role/RoleProvider.php
index 4667a37065..d61cfd774e 100644
--- a/module/Application/src/Application/Provider/Role/RoleProvider.php
+++ b/module/Application/src/Application/Provider/Role/RoleProvider.php
@@ -11,7 +11,6 @@ use Application\Acl\ComposanteRole;
 use Application\Acl\ComposanteDbRole;
 use Application\Entity\Db\Role as RoleEntity;
 use Application\Service\Role as RoleService;
-use Application\Service\TypeRolePhpRole as TypeRolePhpRoleService;
 use Application\Service\RoleUtilisateur as RoleUtilisateurService;
 use Zend\Permissions\Acl\Role\GenericRole;
 
@@ -37,19 +36,16 @@ class RoleProvider implements ProviderInterface
     /**
      * Constructeur.
      * 
-     * @param TypeRolePhpRoleService $typeRolePhpRole
      * @param RoleService $serviceRole
      * @param RoleUtilisateurService $serviceRoleUtilisateur
      * @param array $config
      */
     public function __construct(
-            TypeRolePhpRoleService $typeRolePhpRole, 
             RoleService $serviceRole, 
             RoleUtilisateurService $serviceRoleUtilisateur, 
             $config = null)
     {
         $this
-                ->setServiceTypeRolePhpRole($typeRolePhpRole)
                 ->setServiceRole($serviceRole)
                 ->setServiceRoleUtilisateur($serviceRoleUtilisateur);
         
@@ -76,14 +72,12 @@ class RoleProvider implements ProviderInterface
             // rôle père
             $roleComposante = new ComposanteRole();
             // rôles métier (importés d'Harpege) correspondant au ROLE_ID PHP
-            $qb = $this->serviceTypeRolePhpRole->finderByPhpRole($roleComposante->getRoleId());
+            $qb = $this->serviceRole->finderRolePersonnelByRole($roleComposante->getRoleId());
             $rolesComposante = array();
-            foreach ($qb->getQuery()->getResult() as $trpr) { /* @var $trpr \Application\Entity\Db\TypeRolePhpRole */
-                $qb2 = $this->serviceRole->finderByTypeRole($trpr->getTypeRole());
-                $qb2 = $this->serviceRole->finderByOffreFormationExistante($qb2); // la structure doit avoir une offre de formation
-                $rolesComposante += $this->serviceRole->getList($qb2);
+            foreach ($qb->getQuery()->getResult() as $vrp) { /* @var $vrp \Application\Entity\Db\VRolePersonnel */
+                $rolesComposante[] = $vrp->getRole();
             }
-            
+
             /**
              * Rôles utilisateurs au sein de l'application (tables UTILISATEUR, ROLE_UTILISATEUR et ROLE_UTILISATEUR_LINKER)
              */
@@ -131,11 +125,6 @@ class RoleProvider implements ProviderInterface
         return new GenericRole($roleId);
     }
     
-    /**
-     * @var TypeRolePhpRoleService
-     */
-    private $serviceTypeRolePhpRole;
-    
     /**
      * @var RoleService
      */
@@ -146,12 +135,6 @@ class RoleProvider implements ProviderInterface
      */
     private $serviceRoleUtilisateur;
     
-    public function setServiceTypeRolePhpRole(TypeRolePhpRoleService $serviceTypeRolePhpRole)
-    {
-        $this->serviceTypeRolePhpRole = $serviceTypeRolePhpRole;
-        return $this;
-    }
-    
     public function setServiceRole(RoleService $serviceRole)
     {
         $this->serviceRole = $serviceRole;
diff --git a/module/Application/src/Application/Provider/Role/RoleProviderFactory.php b/module/Application/src/Application/Provider/Role/RoleProviderFactory.php
index 9b6992e2f7..323e1f232b 100644
--- a/module/Application/src/Application/Provider/Role/RoleProviderFactory.php
+++ b/module/Application/src/Application/Provider/Role/RoleProviderFactory.php
@@ -21,7 +21,6 @@ class RoleProviderFactory implements FactoryInterface
      */
     public function createService(ServiceLocatorInterface $serviceLocator)
     {
-        $serviceTypeRolePhpRole = $serviceLocator->get('applicationTypeRolePhpRole'); /* @var $serviceTypeRolePhpRole \Application\Service\TypeRolePhpRole */
         $serviceRole            = $serviceLocator->get('applicationRole');            /* @var $serviceRole \Application\Service\Role */
         $serviceUtilisateurRole = $serviceLocator->get('applicationRoleUtilisateur'); /* @var $serviceUtilisateurRole \Application\Service\RoleUtilisateur */
         $config                 = $serviceLocator->get('BjyAuthorize\Config');
@@ -34,6 +33,6 @@ class RoleProviderFactory implements FactoryInterface
 
         $providerConfig = $config['role_providers']['ApplicationRoleProvider'];
         
-        return new RoleProvider($serviceTypeRolePhpRole, $serviceRole, $serviceUtilisateurRole, $providerConfig);
+        return new RoleProvider($serviceRole, $serviceUtilisateurRole, $providerConfig);
     }
 }
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/Role.php b/module/Application/src/Application/Service/Role.php
index f968169051..dcf2a5df0f 100644
--- a/module/Application/src/Application/Service/Role.php
+++ b/module/Application/src/Application/Service/Role.php
@@ -70,28 +70,6 @@ class Role extends AbstractEntityService
         return $qb;
     }
     
-    /**
-     * 
-     * @param QueryBuilder $qb
-     * @param string $alias
-     * @return QueryBuilder
-     */
-    public function finderByOffreFormationExistante(QueryBuilder $qb = null, $alias = null)
-    {
-        list($qb, $alias) = $this->initQuery($qb, $alias);
-        
-        $qb
-                ->select("$alias, tr123, s")
-                ->distinct()
-                ->innerJoin('r.type', 'tr123')
-                ->innerJoin('r.structure', 's')
-                ->innerJoin('s.elementPedagogique', 'ep');
-//                ->where('tr.code <> :code')->setParameter('code', 'IND')
-//                ->andWhere('s.niveau = :niv')->setParameter('niv', 2);
-        
-        return $qb;
-    }
-    
     /**
      * Retourne une liste d'entités en fonction du QueryBuilder donné
      *
@@ -115,4 +93,26 @@ class Role extends AbstractEntityService
         
         return parent::getList($qb);
     }
+    
+    /**
+     * @param \Zend\Permissions\Acl\Role\RoleInterface|string $role
+     * @return QueryBuilder
+     */
+    public function finderRolePersonnelByRole($role)
+    {
+        if ($role instanceof \Zend\Permissions\Acl\Role\RoleInterface) {
+            $role = $role->getRoleId();
+        }
+        
+        $qb = $this->getEntityManager()->createQueryBuilder()
+                ->from("Application\Entity\Db\VRolePersonnel", "v")
+                ->select("v, tr, s, p")
+                ->join("v.typeRole", "tr")
+                ->join("v.structure", "s")
+                ->join("v.personnel", "p")
+                ->orderBy("v.structure, v.typeRole")
+                ->andWhere("v.phpRoleId = :roleId")->setParameter('roleId', $role);
+        
+        return $qb;
+    }
 }
\ No newline at end of file
-- 
GitLab