From 5730a94f807ac22f5425612558b975160abf810f Mon Sep 17 00:00:00 2001
From: Benjamin <35699580+benj-filament@users.noreply.github.com>
Date: Tue, 18 Jun 2019 15:46:26 +0200
Subject: [PATCH] =?UTF-8?q?ajout=20securit=C3=A9=20+=20modif=20tbles=20cou?=
 =?UTF-8?q?rse=20et=20course.session=20(ajout=20many2many=20relation)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 __manifest__.py                  |  5 ++-
 data/ir_module_category.xml      | 12 ++++++
 models/training_course.py        | 14 ++++---
 models/training_session.py       |  1 +
 models/training_training.py      |  9 ++---
 security/ir.model.access.csv     |  6 ++-
 security/training_security.xml   | 15 ++++++++
 views/partner_view.xml           |  2 +-
 views/training_course_view.xml   | 40 ++++++++++++++++---
 views/training_session_view.xml  | 66 ++++++++++++++++++++++++++++++++
 views/training_training_view.xml |  3 +-
 11 files changed, 153 insertions(+), 20 deletions(-)
 create mode 100644 data/ir_module_category.xml
 create mode 100644 security/training_security.xml
 create mode 100644 views/training_session_view.xml

diff --git a/__manifest__.py b/__manifest__.py
index 48871ab..c105b7d 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -13,7 +13,9 @@
     ],
     'website': 'http://www.le-filament.com',
     'data': [
-        # 'security/ir.model.access.csv',
+        'data/ir_module_category.xml',
+        'security/training_security.xml',
+        'security/ir.model.access.csv',
         'data/training_data.xml',
         'views/account_invoice_view.xml',
         'views/assets.xml',
@@ -21,6 +23,7 @@
         'views/sale_order_view.xml',
         'views/training_course_view.xml',
         'views/training_training_view.xml',
+        'views/training_session_view.xml',
         'report/layout_template.xml',
         'report/report_agreement.xml',
         'report/report_attendance_sheet.xml',
diff --git a/data/ir_module_category.xml b/data/ir_module_category.xml
new file mode 100644
index 0000000..853092d
--- /dev/null
+++ b/data/ir_module_category.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2019 Le Filament (<https://www.le-filament.com>)
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+<odoo>
+	<data>
+	  <record model="ir.module.category" id="module_category_training">
+	    <field name="name">Formation</field>
+	    <field name="description">Gestionnaire de formation</field>
+	    <field name="sequence">230</field>
+	  </record>
+	</data>
+</odoo>
diff --git a/models/training_course.py b/models/training_course.py
index 5d1076b..081c66c 100644
--- a/models/training_course.py
+++ b/models/training_course.py
@@ -18,9 +18,11 @@ class TrainingProgram(models.Model):
     control = fields.Text(string='Suivi')
     evaluation = fields.Text(string='Modalités évaluation')
     students_profile = fields.Text(string='Profil des stagiaires')
-    session_ids = fields.One2many(
+    session_ids = fields.Many2many(
         comodel_name='training.course.session',
-        inverse_name='course_id',
+        relation='program_course_rel',
+        column1='program_id',
+        column2='course_id',
         string='Sessions',)
     duration_total = fields.Integer(
         string='Durée totale',
@@ -45,9 +47,11 @@ class TrainingProgramSession(models.Model):
 
     name = fields.Char(string='Nom', required=True,)
     description = fields.Text(string='Description')
-    course_id = fields.Many2one(
+    course_id = fields.Many2many(
         comodel_name='training.course',
-        string='Programme',
-        required=True)
+        relation='program_course_rel',
+        column1='course_id',
+        column2='program_id',
+        string='Programmes',)
     duration = fields.Integer(string='Durée (h)', default=4)
     sequence = fields.Integer(string='Séquence', default=10)
diff --git a/models/training_session.py b/models/training_session.py
index 7f0817c..8a065be 100644
--- a/models/training_session.py
+++ b/models/training_session.py
@@ -23,3 +23,4 @@ class TrainingSession(models.Model):
         comodel_name='res.users',
         string='Formateur')
     date_delay = fields.Integer(string='Durée (h)')
+    sequence = fields.Integer(string='Séquence', default=10)
diff --git a/models/training_training.py b/models/training_training.py
index dca823f..ce353a1 100644
--- a/models/training_training.py
+++ b/models/training_training.py
@@ -42,7 +42,7 @@ class Training(models.Model):
         states={'draft': [('readonly', False)]},
         index=True,
         default='Brouillon')
-    payment = fields.Boolean(string="Pris en charge par l'OPCO ?")
+    payment = fields.Boolean(string="Subrogation de paiement")
     date_begin = fields.Date(string='Début de la formation')
     date_end = fields.Date(string='Fin de la formation')
     convention = fields.Binary(string="Convention")
@@ -134,16 +134,13 @@ class Training(models.Model):
     @api.onchange('course_id')
     def _onchange_session_ids(self):
         # Delete all training session
-        old_session_ids = self.env['training.session'].search(
-            [['training_id', '=', self.id]])
-        if old_session_ids:
-            old_session_ids.unlink()
+        self.session_ids.unlink()
         # Populate sessions from course
         for session in self.course_id.session_ids:
             self.env['training.session'].create({
                 'session_id': session.id,
                 'training_id': self._origin.id,
-                'duration': session.duration,
+                'date_delay': session.duration,
             })
 
     @api.multi
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index f618b87..0359c86 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -1,2 +1,6 @@
 id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_lefilament_maintenance_group_user,project.maintenance,model_project_maintenance,project.group_project_manager,1,1,1,1
\ No newline at end of file
+access_training_training_group_user,training.training,model_training_training,group_training,1,1,1,1
+access_training_session_group_user,training.session,model_training_session,group_training,1,1,1,1
+access_training_student_group_user,training.student,model_training_student,group_training,1,1,1,1
+access_training_course_group_user,training.course,model_training_course,group_training,1,1,1,1
+access_training_course_session_group_user,training.course.session,model_training_course_session,group_training,1,1,1,1
\ No newline at end of file
diff --git a/security/training_security.xml b/security/training_security.xml
new file mode 100644
index 0000000..ab52b5c
--- /dev/null
+++ b/security/training_security.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2017 Le Filament (<https://www.le-filament.com>)
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+<odoo>
+	<data noupdate="0">
+
+		<!-- Définition des groupes utilisateurs -->
+        <record id="group_training" model="res.groups">
+            <field name="name">Gestionnaire de Formation</field>
+            <field name="category_id" ref="module_category_training"/>
+            <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
+        </record>
+
+	</data>
+</odoo>
\ No newline at end of file
diff --git a/views/partner_view.xml b/views/partner_view.xml
index a681689..7ce5d9f 100644
--- a/views/partner_view.xml
+++ b/views/partner_view.xml
@@ -9,7 +9,7 @@
 		    <field name="model">res.partner</field>
 		    <field name="inherit_id" ref="base.view_partner_form"/>
 		    <field name="arch" type="xml" >
-                <xpath expr="//field[@name='customer']" position="after">
+                <xpath expr="//group[@name='sale']" position="inside">
                     <field name="is_opco" />
                 </xpath>
 		    </field>
diff --git a/views/training_course_view.xml b/views/training_course_view.xml
index fbc6f8f..3d58a19 100644
--- a/views/training_course_view.xml
+++ b/views/training_course_view.xml
@@ -8,17 +8,17 @@
             <field name="arch" type="xml">
             <form string="Fomration">
                 <sheet>
-                    <div class="col-xs-12">
-                        <field name="name" />
-                    </div>
                     <group>
+                        <field name="name" />
                         <field name="description" />
+                        <field name="objective" />
                         <field name="duration_total" />
                     </group>
                     <notebook>
                         <page name="sessions" string="Sessions">
                             <field name="session_ids" context="{'default_course_id': active_id,}">
                                 <tree>
+                                    <field name="sequence" widget="handle"/>
                                     <field name="name" />
                                     <field name="duration" />
                                 </tree>
@@ -26,7 +26,6 @@
                         </page>
                          <page name="detail" string="Détail">
                              <group>
-                                 <field name="objective" />
                                  <field name="method" />
                                  <field name="means" />
                                  <field name="control" />
@@ -45,7 +44,7 @@
         </record>
 
 
-        <!-- Tree View Projects -->
+        <!-- Tree View Programs -->
         <record id="training_course_tree" model="ir.ui.view">
             <field name="name">Training Course Tree View</field>
             <field name="model">training.course</field>
@@ -74,6 +73,37 @@
               </field>
         </record>
 
+        <record id="training_course_session_form" model="ir.ui.view">
+            <field name="name">Training Course Session Form View</field>
+            <field name="model">training.course.session</field>
+            <field name="arch" type="xml">
+            <form string="Fomration">
+                <sheet>
+                    <group>
+                        <field name="name" />
+                        <field name="description" />
+                        <field name="duration" />
+                        <field name="course_id" widget="many2many_tags"/>
+                    </group>
+                </sheet>
+            </form> 
+        </field>
+        </record>
+
+
+        <!-- Tree View Programs -->
+        <record id="training_course_session_tree" model="ir.ui.view">
+            <field name="name">Training Course Session Tree View</field>
+            <field name="model">training.course.session</field>
+            <field name="arch" type="xml">
+              <tree string="Modules">
+                  <field name="name" />
+                  <field name="duration" />
+                  <field name="course_id" />
+              </tree> 
+            </field>
+        </record>
+
         <!-- ACTIONS -->
         <act_window id="action_training_course" name="Catalogue de Formations" res_model="training.course" view_mode="tree,form,pivot,graph" />
         <act_window id="action_training_course_session" name="Sessions de Formations" res_model="training.course.session" view_mode="tree,form,pivot,graph" />
diff --git a/views/training_session_view.xml b/views/training_session_view.xml
new file mode 100644
index 0000000..ce723e7
--- /dev/null
+++ b/views/training_session_view.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<odoo>
+	<data>
+		<record id="training_session_form" model="ir.ui.view">
+			<field name="name">Training Session Form View</field>
+			<field name="model">training.session</field>
+			<field name="arch" type="xml">
+			<form string="Formation">
+				<sheet>
+					<group>
+						<field name="session_id" />
+						<field name="date" />
+						<field name="date_delay" />
+						<field name="training_id" />
+						<field name="user_id" />
+					</group>	
+				</sheet>
+			</form>	
+		</field>
+		</record>
+
+
+		<!-- Tree View -->
+		<record id="training_session_tree" model="ir.ui.view">
+			<field name="name">Training session Tree View</field>
+			<field name="model">training.session</field>
+			<field name="arch" type="xml">
+			<tree string="Liste des Sessions">
+				<field name="date" />
+				<field name="session_id" />
+				<field name="training_id" />
+				<field name="user_id" />
+			</tree>	
+		</field>
+		</record>
+
+		<!-- Filtres et Champ de Recherche -->
+		<record id="training_session_search" model="ir.ui.view">
+			  <field name="name">Training session Search View</field>
+			  <field name="model">training.session</field>
+			  <field name="arch" type="xml">
+				    <search>
+						<!-- Champs de recherche -->
+				     	<field name="session_id"/>
+				     	<field name="user_id"/>
+				     	<field name="training_id"/>
+						<!-- Filtres -->
+
+				    	
+				    	<!-- Groupes -->
+				    	<group expand="0" name="group_by" string="Group By">
+	                       <filter string="Formateur" domain="[]" context="{'group_by' : 'user_id'}" />
+	                       <filter string="Formation" domain="[]" context="{'group_by' : 'training_id'}" />
+	                       <filter string="Mois" domain="[]" context="{'group_by' : 'date'}" />
+	                   </group>
+				    </search>
+			  </field>
+		</record>
+		
+		<act_window id="action_training_session" name="Sessions" res_model="training.session" view_mode="tree,form,calendar,pivot,graph" />
+		<!-- MENU --> 
+	    <menuitem id="menu_training_session" name="Sessions" sequence="20" parent="menu_training_training_parent" action="action_training_session" />
+
+	</data>
+</odoo>
diff --git a/views/training_training_view.xml b/views/training_training_view.xml
index 4930636..b878374 100644
--- a/views/training_training_view.xml
+++ b/views/training_training_view.xml
@@ -58,7 +58,8 @@
 						</page>
 						<page name="sessions" string="Sessions">
 							<field name="session_ids">
-								<tree>
+								<tree editable="bottom">
+									<field name="sequence" widget="handle"/>
 									<field name="session_id" />
 									<field name="date" />
 									<field name="user_id" />
-- 
GitLab