diff --git a/models/__init__.py b/models/__init__.py index 87ab67c3dfca5efee9aa5ce3da69bd7642370d7e..044ad61586c0c81fb2dc1ca57c041085dd2b501b 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -10,6 +10,7 @@ from . import scop_contribution from . import scop_federation_activity from . import scop_liasse_fiscale from . import scop_membership +from . import scop_partner_staff from . import scop_period from . import scop_questionnaire from . import scop_revision diff --git a/models/res_partner.py b/models/res_partner.py index fd98dcf89a98e4d1bcad0c320c2f9209e2e4a561..3f3397a5cb2ae6dde527905756107dda9376a82c 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -304,6 +304,12 @@ class ScopPartner(models.Model): is_up_to_date_ur = fields.Boolean("A jour cotisation UR") # Questionnaire + # Effectifs + staff_ids = fields.One2many( + comodel_name='scop.partner.staff', + inverse_name='partner_id', + string='Effectifs',) + # Liste Ministère direccte_id = fields.Many2one( 'res.partner', @@ -713,12 +719,12 @@ class ScopPartner(models.Model): else: return False - @api.depends('questionnaire_ids', 'questionnaire_ids.staff_count', - 'questionnaire_ids.effective_date') + @api.depends('staff_ids', 'staff_ids.staff_count', + 'staff_ids.effective_date') @api.multi def _compute_last_effective(self): for partner in self: - lm = partner.questionnaire_ids.search( + lm = partner.staff_ids.search( [['partner_id', '=', partner.id], ['staff_count', '>', 0]], limit=1, order='effective_date desc') diff --git a/models/scop_partner_staff.py b/models/scop_partner_staff.py new file mode 100644 index 0000000000000000000000000000000000000000..3780609aa7eefd34b95562a996748a5c9326b8f5 --- /dev/null +++ b/models/scop_partner_staff.py @@ -0,0 +1,41 @@ +# © 2020 Le Filament (<http://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models, fields + + +class ScopPartnerStaff(models.Model): + _name = "scop.partner.staff" + _description = "Contributions" + _rec_name = 'partner_id' + _order = 'effective_date, partner_id' + + partner_id = fields.Many2one( + comodel_name='res.partner', + string='Organisme', + domain=[('is_coopeartive', '=', True)], + ondelete='restrict', + required=True, + index=True) + user_id = fields.Many2one( + comodel_name='res.users', + string='Utilisateur', + ondelete='set null', + required=True, + default=lambda self: self.env.uid) + type_entry = fields.Selection([ + ('manual', 'Manuel'), + ('ministry_list', 'Liste Ministère')], + string="Type", + default='manual') + effective_date = fields.Date( + string="Date", + default=fields.Date.today(), + required=True,) + staff_count = fields.Integer("Effectif (EF)", required=True,) + staff_shareholder_count = fields.Integer("Eff. Sociétaires (ES)") + staff_average = fields.Integer("Eff. Moyen (EM)") + questionnaire_id = fields.Many2one( + comodel_name='scop.questionnaire', + string='Questionnaire', + ondelete='cascade') diff --git a/models/scop_questionnaire.py b/models/scop_questionnaire.py index 38ced60658b82db3c2582ff3c507a07c244a0648..0bf23085536f4effbff73e53bb84f7b68247a30c 100644 --- a/models/scop_questionnaire.py +++ b/models/scop_questionnaire.py @@ -1,13 +1,13 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from datetime import date from odoo import models, fields, api class ScopQuestionnaire(models.Model): _name = "scop.questionnaire" _description = "Questionnaire" + _rec_name = 'year' partner_id = fields.Many2one( comodel_name='res.partner', @@ -25,6 +25,47 @@ class ScopQuestionnaire(models.Model): staff_shareholder_count = fields.Integer("Eff. Sociétaires (ES)") staff_average = fields.Integer("Eff. Moyen (EM)") + # ------------------------------------------------------ + # Override ORM + # ------------------------------------------------------ + # Création d'un ligne d'effectif + @api.model_create_multi + def create(self, vals_list): + questionnaire = super(ScopQuestionnaire, self).create(vals_list) + if questionnaire.effective_date: + staff_values = { + 'partner_id': questionnaire.partner_id.id, + 'user_id': self.env.uid, + 'type_entry': 'ministry_list', + 'effective_date': questionnaire.effective_date, + 'staff_count': questionnaire.staff_count, + 'staff_shareholder_count': questionnaire.staff_shareholder_count, + 'staff_average': questionnaire.staff_average, + 'questionnaire_id': questionnaire.id, + } + self.env['scop.partner.staff'].create(staff_values) + return questionnaire + + # Mise à jour du questionnaire lors de la modification + @api.multi + def write(self, vals): + questionnaire = super(ScopQuestionnaire, self).write(vals) + staff = self.env['scop.partner.staff'].search([ + ('questionnaire_id', '=', self.id)]) + if staff: + if self.effective_date: + staff_values = { + 'partner_id': self.partner_id.id, + 'user_id': self.env.uid, + 'type_entry': 'ministry_list', + 'effective_date': self.effective_date, + 'staff_count': self.staff_count, + 'staff_shareholder_count': self.staff_shareholder_count, + 'staff_average': self.staff_average, + } + staff.write(staff_values) + return questionnaire + class ScopQuestionnaireType(models.Model): _name = "scop.questionnaire.type" diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 3f34bfa8e4ef441629d3c2af0d4387248c8a826d..aeea36997cbdb0efb230171ab04c703f8616649a 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1,7 +1,7 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_contribution_group_user,access_contribution_group_user,model_scop_contribution,base.group_user,1,0,0,0 access_liasse_fiscale_group_user,access_liasse_fiscale_group_user,model_scop_liasse_fiscale,base.group_user,1,0,0,0 -access_questionnaire_group_user,access_questionnaire_group_user,model_scop_questionnaire,base.group_user,1,1,1,1 +access_questionnaire_group_user,access_questionnaire_group_user,model_scop_questionnaire,base.group_user,1,0,0,0 access_res_partner_certification,access_res_partner_certification,model_res_partner_certification,base.group_user,1,0,0,0 access_res_partner_company_type,access_res_partner_company_type,model_res_partner_company_type,base.group_user,1,0,0,0 access_res_partner_cooperative_form,access_res_partner_cooperative_form,model_res_partner_cooperative_form,base.group_user,1,0,0,0 @@ -54,6 +54,8 @@ admin_scop_membership_period,admin_scop_membership_period,model_scop_membership_ admin_scop_membership_reason_end,admin_scop_membership_reason_end,model_scop_membership_reason_end,group_cg_administrator,1,1,1,1 admin_scop_membership_type,admin_scop_membership_type,model_scop_membership_type,group_cg_administrator,1,1,1,1 admin_scop_period,admin_scop_period,model_scop_period,group_cg_administrator,1,1,1,1 +administrative_scop_questionnaire,administrative_scop_questionnaire,model_scop_questionnaire,group_cg_administrative,1,1,1,1 +admin_scop_questionnaire,admin_scop_questionnaire,model_scop_questionnaire,group_cg_administrator,1,1,1,1 admin_scop_questionnaire_type,admin_scop_questionnaire_type,model_scop_questionnaire_type,group_cg_administrator,1,1,1,1 admin_scop_revision_format,admin_scop_revision_format,model_scop_revision_format,group_cg_administrator,1,1,1,1 admin_union_regionale,admin_union_regionale,model_union_regionale,group_cg_administrator,1,1,1,1 @@ -69,3 +71,5 @@ access_scop_federation_com_activity,access_scop_federation_com_activity,model_sc admin_scop_federation_com_activity,admin_scop_federation_com_activity,model_scop_federation_com_activity,group_federation_com,1,1,1,1 access_scop_federation_indus_activity,access_scop_federation_indus_activity,model_scop_federation_indus_activity,base.group_user,1,0,0,0 admin_scop_federation_indus_activity,admin_scop_federation_indus_activity,model_scop_federation_indus_activity,group_federation_indus,1,1,1,1 +access_scop_partner_staff,access_scop_partner_staff,model_scop_partner_staff,base.group_user,1,1,1,0 +admin_scop_partner_staff,admin_scop_partner_staff,model_scop_partner_staff,group_cg_administrator,1,1,1,1 diff --git a/views/res_partner.xml b/views/res_partner.xml index ecd76be4e42ddc7e3a7465bab97622668e5367ea..83c2dc367ca177df6043271e48528c9981bd042d 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -738,6 +738,18 @@ </tree> </field> </page> + <page name='scop_staff' string="Effectifs" attrs="{'invisible': [('project_status', '!=', '6_suivi')]}"> + <field name="staff_ids" mode="tree" context="{'default_partner_id': active_id}"> + <tree delete="false" default_order="effective_date desc" editable="top"> + <field name="effective_date"/> + <field name="type_entry" readonly="1"/> + <field name="staff_count" attrs="{'readonly':[('type_entry','=','ministry_list')]}"/> + <field name="staff_shareholder_count" attrs="{'readonly':[('type_entry','=','ministry_list')]}"/> + <field name="staff_average" attrs="{'readonly':[('type_entry','=','ministry_list')]}"/> + <field name="user_id" readonly="1"/> + </tree> + </field> + </page> <page name='scop_questionnaire' string="Listes Ministère" attrs="{'invisible': [('project_status', '!=', '6_suivi')]}"> <group> <field name="direccte_id" widget="res_partner_many2one" options="{'no_create': True}"/>