diff --git a/models/scop_partner_staff.py b/models/scop_partner_staff.py index 98080c9b1a34ac77151da4d500f10b312be0b0f6..aed6a263969927b8981556a6ad6f6da01152d3e0 100644 --- a/models/scop_partner_staff.py +++ b/models/scop_partner_staff.py @@ -119,34 +119,51 @@ class ScopPartnerStaff(models.Model): # Contrains # ------------------------------------------------------ @api.one - @api.constrains('staff_count', 'staff_shareholder_count', 'staff_average') + @api.constrains('cooperative_form_id', + 'type_entry', + 'staff_count', + 'staff_shareholder_count', + 'staff_average') def _check_staff(self): """ - Interdit de créer une ligne à 0 sauf lorsque - cette ligne vient de la liste ministère - ou si ligne associés / ETP pour les SCIC - ou si ligne ETP pour les 'tracked naf' + Règles spécifiques pour les effectifs """ - if self.type_entry \ - not in ('questionnaire', 'questionnaire_inscription'): - if self.cooperative_form_id.id == self.env.ref( - 'cgscop_partner.form_scic').id: - if self.staff_count == 0: + scic = self.env.ref('cgscop_partner.form_scic').id + scop = self.env.ref('cgscop_partner.form_scop').id + + def check_staff_shareholder(): + # Effectif total >= effectif sociétaires + if self.staff_shareholder_count > 0: + if not self.staff_count >= self.staff_shareholder_count: raise ValidationError( - "La colonne Effectif (EF) doit être renseignée" - " et supérieurs à 0.") - elif self.is_partner_in_tracked_naf: - if self.staff_count == 0 or self.staff_shareholder_count == 0: + "L'effectif total doit être supérieur ou égal au nombre de sociétaires salariés") + + def check_staff_average(): + if self.staff_average > 0: + if not self.staff_count >= self.staff_average: raise ValidationError( - "Les colonnes Effectif (EF) et Nb Sociétaires Salarié" - " doivent être renseignés et supérieurs à 0.") - else: - if self.staff_shareholder_count == 0 \ - or self.cooperative_form_id == 0 \ - or self.staff_average == 0: + "L'effectif total doit être supérieur ou égal au nombre d'équivalent temps plein") + + # Les règles ne s'appliquent pas pour les entrées LM / Questionnaire + if self.type_entry not in ('questionnaire', 'questionnaire_inscription'): + # Règles pour les SCIC + if self.cooperative_form_id.id == scic: + check_staff_shareholder() + check_staff_average() + # Règles pour les SCOP + elif self.cooperative_form_id.id == scop: + # Effectif total non nul + if self.staff_count == 0: + raise ValidationError( + "L'effectif total doit être supérieur ou égal à 0 pour cette copérative de type SCOP") + check_staff_shareholder() + check_staff_average() + + # Règles sprécifiques pour les NAF suivis + if self.is_partner_in_tracked_naf: + if self.staff_average == 0: raise ValidationError( - "Tous les effectifs doivent" - " être renseignés et supérieurs à 0.") + "Le nombre d'équivalent temps plein doit être renseigné pour cette coopérative") @api.constrains('effective_date') def _check_effective_date(self): diff --git a/views/res_partner.xml b/views/res_partner.xml index c7e84b69c05aa9c2fd3825f78cf5a5c390958547..ec19ee841928ca9cdd9987c7b3f841220c78f538 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -697,9 +697,9 @@ <field name="effective_date" attrs="{'readonly':[('type_entry','in',('questionnaire', 'questionnaire_inscription'))]}"/> <field name="type_entry" attrs="{'readonly':[('type_entry','in',('questionnaire', 'questionnaire_inscription'))]}"/> <field name="staff_count" attrs="{'readonly':[('type_entry','in',('questionnaire', 'questionnaire_inscription'))]}"/> - <field name="staff_shareholder_count" attrs="{'readonly':[('type_entry','in',('questionnaire', 'questionnaire_inscription'))], 'required':[('cooperative_form_id', '!=', %(cgscop_partner.form_scic)d)]}"/> + <field name="staff_shareholder_count" attrs="{'readonly':[('type_entry','in',('questionnaire', 'questionnaire_inscription'))]}"/> <field name="staff_shareholder_total" attrs="{'readonly':[('type_entry','in',('questionnaire', 'questionnaire_inscription'))]}"/> - <field name="staff_average" attrs="{'readonly':[('type_entry','in',('questionnaire', 'questionnaire_inscription'))], 'required':[('is_partner_in_tracked_naf', '!=', True), ('cooperative_form_id', '!=', %(cgscop_partner.form_scic)d)]}"/> + <field name="staff_average" attrs="{'readonly':[('type_entry','in',('questionnaire', 'questionnaire_inscription'))], 'required':[('is_partner_in_tracked_naf', '=', True)]}"/> <field name="comment" /> <field name="user_id" readonly="1"/> <button name="edit_staff" type="object" icon="fa-pencil-square-o"/>