diff --git a/__manifest__.py b/__manifest__.py index 48871ab39c74d4c163fe6f25e3978a112e37386e..c105b7d7d6c73c624dce8cf4722ab0c4ca3a894e 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 0000000000000000000000000000000000000000..853092def4b79b0058b6bbf789d72d8e0296d421 --- /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 5d1076b22d51ed11efa53973f81dc412d702b697..081c66c1d51c54d399a562fc76a439573f56d6f4 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 7f0817c82d0d6b48abf64014ca7f981c3f95c54a..8a065bec26690e68548f6c682b404d1e3e14b00d 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 dca823f7aa804ff82eec9946abab23e2b5c5610c..ce353a14d38b66f6fca5de25a3179b02eb6b3703 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 f618b87401ecd012b86d1e3316b5c13237b053f3..0359c86e40ccb1319fa4d8a637ce9f68b51de107 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 0000000000000000000000000000000000000000..ab52b5cfe4651a6d2225db20331496b18db473c7 --- /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 a68168923b248011f6f9854e16e50c87622dad21..7ce5d9f9b19195bff87171a9d83605eff676a7bf 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 fbc6f8fd4494c23b536125e112f21169fd450026..3d58a19155fa11a6585ed39d336a5adec3410fbb 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 0000000000000000000000000000000000000000..ce723e7b11ebe50ff0a114129c10f58b66960051 --- /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 493063691c37c3a030f72707c1817651fccb137f..b878374c19d98f65a0b8a3862386d89f3e2be530 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" />