From 8e5c2049b80ec7b3cf2e547e7ff2637dd4a2a355 Mon Sep 17 00:00:00 2001 From: benjamin <benjamin@le-filament.com> Date: Wed, 23 Aug 2023 16:28:59 +0200 Subject: [PATCH] [update] membership process validation --- models/res_partner.py | 81 ++++++++----------- models/scop_liasse_fiscale.py | 2 +- security/ir.model.access.csv | 2 +- wizard/scop_compulsory_fields_suivi_wizard.py | 7 ++ wizard/scop_membership_liasse_wizard.py | 27 ++++--- wizard/scop_membership_liasse_wizard.xml | 23 +++++- wizard/scop_membership_staff_wizard.py | 38 +++++++-- wizard/scop_membership_staff_wizard.xml | 30 +++++-- wizard/scop_membership_submit_wizard.py | 14 ++-- wizard/scop_membership_submit_wizard.xml | 9 +-- 10 files changed, 137 insertions(+), 96 deletions(-) diff --git a/models/res_partner.py b/models/res_partner.py index c8e0b85..817e49b 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -76,6 +76,10 @@ class ScopPartner(models.Model): string="Nb de statuts de facturation", compute="_compute_project_invoicing_status_nb", ) + liasse_membership_id = fields.Many2one( + comodel_name="scop.liasse.fiscale", + string="Liasse fiscale adhésion" + ) # Changement de statuts list_logs = fields.Text("Liste des erreurs") @@ -122,18 +126,15 @@ class ScopPartner(models.Model): ], limit=1, ) - if not staff_id: - staff_id = staff_id.create( - { - "partner_id": self.id, - "type_entry": "membership", - "effective_date": fields.Date.today(), - "staff_count": 0, - } - ) wizard = self.env["scop.membership.staff.wizard"].create( - {"partner_id": self.id, "staff_id": staff_id.id} + { + "partner_id": self.id, + "staff_id": staff_id.id if staff_id else None, + "effective_date": fields.Date.today() + if not staff_id + else staff_id.effective_date, + } ) return { "name": "Effectifs à l'adhésion", @@ -147,7 +148,10 @@ class ScopPartner(models.Model): def fill_membership_liasse(self): self.ensure_one() wizard = self.env["scop.membership.liasse.wizard"].create( - {"partner_id": self.id,} + { + "partner_id": self.id, + "liasse_id": self.liasse_membership_id.id, + } ) return { "name": "Données financières", @@ -161,29 +165,6 @@ class ScopPartner(models.Model): # ------------------------------------------------------ # Business methods # ------------------------------------------------------ - # TODO: supprimer ou modifier (suppression fonction get_liasse_adhesion) - def check_compulsory_fields(self, lm): - """ - Vérification des champs de la liste ministère et de la liasse fiscale - :param lm: - :return: - """ - res = "" - errors_lm = lm.check_compulsory_fields_lm() - if errors_lm: - res += ( - "<hr/><strong>Dossier d'Adhésion : </strong><ul>" + errors_lm + "</ul>" - ) - - - liasse_adhesion = self.get_liasse_adhesion(lm) - errors_lf = liasse_adhesion.check_compulsory_fields_lf() - if errors_lf: - res += ( - "<hr/><strong>Données financières :</strong><ul>" + errors_lf + "</ul>" - ) - return res - def create_num_adherent(self): """ Generate new num adherent with sequence @@ -330,7 +311,7 @@ class ScopPartner(models.Model): # ------------------------------------------------------ def scop_sumbit_cg(self): """ - Ouvre le wizard et vérifie les effectifs + Ouvre le wizard """ wizard = self.env["scop.membership.submit.wizard"].create( { @@ -351,23 +332,31 @@ class ScopPartner(models.Model): """ Modifie le statut de la coopérative pour transmission du dossier à la CG - positionner la date_transmission_cg avec la date du jour - - affecter la coop à sa DIRECCTE @return : True """ + # Check Staff staff_line = self.staff_ids.filtered( lambda s: s.type_entry == "membership" ).sorted(key="effective_date", reverse=True) - if staff_line and staff_line[0].staff_count > 0: - self.update( - { - "membership_status": "soumis_cg", - "date_transmission_cg": fields.Date.today(), - "list_logs": False, - } - ) - self.affectation_contact_ministere() - else: + if not (staff_line or staff_line[0].staff_count > 0): raise UserError(_("Les effectifs à l'adhésion ne sont pas renseignés.")) + # Check financial datas + if not self.liasse_membership_id: + raise UserError(_( + "Il est nécessaire de renseigner les données financières pour valider" + )) + if self.liasse_membership_id.check_compulsory_fields_lf(): + raise UserError(_( + "Les données financières ne peuvent pas être nulles." + )) + + self.update( + { + "membership_status": "soumis_cg", + "date_transmission_cg": fields.Date.today(), + "list_logs": False, + } + ) def scop_abandonne(self): """ diff --git a/models/scop_liasse_fiscale.py b/models/scop_liasse_fiscale.py index c44f147..8f1ced2 100644 --- a/models/scop_liasse_fiscale.py +++ b/models/scop_liasse_fiscale.py @@ -25,4 +25,4 @@ class ScopAdhesionLiasseFiscale(models.Model): "(CA ou VA obligatoire)</li>" ) else: - return str() + return False diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 8c6de3e..b037434 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -8,4 +8,4 @@ admin_scop_adhesion_file,admin_scop_adhesion_file,model_scop_adhesion_file,cgsco cg_access_compulsory_fields_suivi_wizard,cg_access_compulsory_fields_suivi_wizard,model_scop_compulsory_fields_suivi_wizard,base.group_user,1,1,1,0 access_scop_membership_liasse_wizard,access_scop_membership_liasse_wizard,model_scop_membership_liasse_wizard,base.group_user,1,1,1,1 access_scop_membership_staff_wizard,access_scop_membership_staff_wizard,model_scop_membership_staff_wizard,base.group_user,1,1,1,1 -access_scop_membership_submit_wizard,access_scop_membership_submit_wizard,model_scop_membership_submit_wizard,base.group_user,1,1,1,1 \ No newline at end of file +access_scop_membership_submit_wizard,access_scop_membership_submit_wizard,model_scop_membership_submit_wizard,base.group_user,1,1,1,1 diff --git a/wizard/scop_compulsory_fields_suivi_wizard.py b/wizard/scop_compulsory_fields_suivi_wizard.py index 6f3a5c9..0db63cc 100644 --- a/wizard/scop_compulsory_fields_suivi_wizard.py +++ b/wizard/scop_compulsory_fields_suivi_wizard.py @@ -47,6 +47,7 @@ class ScopCompulsoryFieldsSuiviWizard(models.TransientModel): if self.with_adhesion: self.partner_id.write({"membership_status": "adhesion"}) if form_id in form_id._get_lm_form(): + # Create extranet access self.partner_id.write({"extranet_service_access": True}) if not self.partner_id.director_ids: raise UserError( @@ -59,6 +60,12 @@ class ScopCompulsoryFieldsSuiviWizard(models.TransientModel): "extranet_update_company": True, } ) + # Create LM + self.env["scop.liste.ministere"].sudo().create_folder( + self.partner_id, self.date_1st_sign.year, "subscribe" + ) + # Set DDETS + self.partner_id.affectation_contact_ministere() return {"type": "ir.actions.act_window_close"} diff --git a/wizard/scop_membership_liasse_wizard.py b/wizard/scop_membership_liasse_wizard.py index 75b842f..df8055b 100644 --- a/wizard/scop_membership_liasse_wizard.py +++ b/wizard/scop_membership_liasse_wizard.py @@ -12,9 +12,7 @@ class ScopMembershipLiasseWizard(models.TransientModel): # Field declaration # ------------------------------------------------------ partner_id = fields.Many2one( - comodel_name="res.partner", - string="Coopérative", - required=True + comodel_name="res.partner", string="Coopérative", required=True ) liasse_id = fields.Many2one( comodel_name="scop.liasse.fiscale", @@ -36,8 +34,12 @@ class ScopMembershipLiasseWizard(models.TransientModel): av_lf = fields.Monetary(related="liasse_id.av_lf") L2052_FY = fields.Monetary(related="liasse_id.L2052_FY") L2053_HN = fields.Float(related="liasse_id.L2053_HN") - contribution_base_type = fields.Selection(related="liasse_id.contribution_base_type") - contribution_base_amount = fields.Integer(related="liasse_id.contribution_base_amount") + contribution_base_type = fields.Selection( + related="liasse_id.contribution_base_type" + ) + contribution_base_amount = fields.Integer( + related="liasse_id.contribution_base_amount" + ) contribution_cg = fields.Float(related="liasse_id.contribution_cg") # ------------------------------------------------------ @@ -45,9 +47,9 @@ class ScopMembershipLiasseWizard(models.TransientModel): # ------------------------------------------------------ def _compute_is_financial_data(self): for wizard in self: - liasse_ids = self.env["scop.liasse.fiscale"].search([ - ("partner_id", "=", wizard.partner_id.id) - ]) + liasse_ids = self.env["scop.liasse.fiscale"].search( + [("partner_id", "=", wizard.partner_id.id)] + ) wizard.is_financial_data = True if liasse_ids else False @api.depends("liasse_id") @@ -65,6 +67,7 @@ class ScopMembershipLiasseWizard(models.TransientModel): """ Sauvegarder les données même avec erreurs """ + self.partner_id.liasse_membership_id = self.liasse_id return {"type": "ir.actions.act_window_close"} def new_forecast(self): @@ -76,11 +79,10 @@ class ScopMembershipLiasseWizard(models.TransientModel): "type_id": "forecast", "is_qualified": True, } - liasse_fiscale_id = self.env["scop.liasse.fiscale"].create( - liasse_values - ) + liasse_id = self.env["scop.liasse.fiscale"].create(liasse_values) + self.partner_id.liasse_membership_id = liasse_id - return self.open_forecast(liasse_fiscale_id) + return self.open_forecast(liasse_id) def update_forecast(self): return self.open_forecast(self.liasse_id) @@ -92,6 +94,7 @@ class ScopMembershipLiasseWizard(models.TransientModel): action = self.env["ir.actions.actions"]._for_xml_id( "cgscop_liasse_fiscale.scop_liasse_fiscale_previsionnelle_act_window" ) + self.partner_id.liasse_membership_id = liasse_id action.update( { "target": "new", diff --git a/wizard/scop_membership_liasse_wizard.xml b/wizard/scop_membership_liasse_wizard.xml index 82dedd2..ac3a036 100644 --- a/wizard/scop_membership_liasse_wizard.xml +++ b/wizard/scop_membership_liasse_wizard.xml @@ -9,7 +9,11 @@ <field name="model">scop.membership.liasse.wizard</field> <field name="arch" type="xml"> <form string="Effectifs à l'adhésion"> - <h3><field name="partner_id" readonly="1" options="{'no_open': True}" /></h3> + <h3><field + name="partner_id" + readonly="1" + options="{'no_open': True}" + /></h3> <!-- Liasse existante --> <div role="alert" @@ -21,7 +25,7 @@ Si une liasse parmi les liasses déjà présentes vous semble valide pour le calcul des cotisations, vous n'avez pas d'action supplémentaire à effectuer. </div> <group> - <field name="is_financial_data" invisible="1"/> + <field name="is_financial_data" invisible="1" /> <group> <field name="liasse_id" @@ -65,7 +69,10 @@ widget="monetary" /> </group> - <group string="Simulation cotisations" attrs="{'invisible': [('liasse_id', '=', False)]}"> + <group + string="Simulation cotisations" + attrs="{'invisible': [('liasse_id', '=', False)]}" + > <field name="contribution_base_type" string="Type Assiette" @@ -77,7 +84,7 @@ <field name="contribution_cg" string="Cotisation CG Scop" /> </group> <group attrs="{'invisible': [('liasse_id', '=', False)]}"> - <field name="is_editable" invisible="1"/> + <field name="is_editable" invisible="1" /> <div class="text-center" colspan="2" @@ -135,6 +142,7 @@ <button type="action" name="%(cgscop_liasse_fiscale.scop_load_liasse_act_window)d" + context="{'membership': True}" class="btn btn-outline-info btn-lg" style="width: 250px;" > @@ -149,6 +157,13 @@ string="Sauvegarder" class="oe_highlight" /> + <button + type="action" + name="%(cgscop_liasse_fiscale.scop_load_liasse_act_window)d" + class="btn btn-outline-info" + > + Importer une nouvelle liasse + </button> <button special="cancel" string="Annuler" /> </footer> </form> diff --git a/wizard/scop_membership_staff_wizard.py b/wizard/scop_membership_staff_wizard.py index ae1497e..21c4d4d 100644 --- a/wizard/scop_membership_staff_wizard.py +++ b/wizard/scop_membership_staff_wizard.py @@ -12,17 +12,25 @@ class ScopMembershipStaffWizard(models.TransientModel): # Field declaration # ------------------------------------------------------ partner_id = fields.Many2one(comodel_name="res.partner", required=True) - staff_id = fields.Many2one(comodel_name="scop.partner.staff", required=True) - effective_date = fields.Date(related="staff_id.effective_date", readonly=False) - staff_count = fields.Integer(related="staff_id.staff_count", readonly=False) + staff_id = fields.Many2one( + comodel_name="scop.partner.staff", + ) + effective_date = fields.Date( + related="staff_id.effective_date", readonly=False, store=True + ) + staff_count = fields.Integer( + related="staff_id.staff_count", readonly=False, store=True + ) staff_shareholder_count = fields.Integer( - related="staff_id.staff_shareholder_count", readonly=False + related="staff_id.staff_shareholder_count", readonly=False, store=True ) staff_shareholder_total = fields.Integer( - related="staff_id.staff_shareholder_total", readonly=False + related="staff_id.staff_shareholder_total", readonly=False, store=True + ) + staff_average = fields.Float( + related="staff_id.staff_average", readonly=False, store=True ) - staff_average = fields.Float(related="staff_id.staff_average", readonly=False) - comment = fields.Char(related="staff_id.comment", readonly=False) + comment = fields.Char(related="staff_id.comment", readonly=False, store=True) # ------------------------------------------------------ # Actions / Buttons @@ -31,4 +39,18 @@ class ScopMembershipStaffWizard(models.TransientModel): """ Sauvegarder les données même avec erreurs """ - return {"type": "ir.actions.act_window_close"} + if self.staff_id: + return {"type": "ir.actions.act_window_close"} + else: + return self.staff_id.create( + { + "partner_id": self.partner_id.id, + "type_entry": "membership", + "effective_date": self.effective_date, + "staff_count": self.staff_count, + "staff_shareholder_count": self.staff_shareholder_count, + "staff_shareholder_total": self.staff_shareholder_total, + "staff_average": self.staff_average, + "comment": self.comment, + } + ) diff --git a/wizard/scop_membership_staff_wizard.xml b/wizard/scop_membership_staff_wizard.xml index 865e30e..eb9135d 100644 --- a/wizard/scop_membership_staff_wizard.xml +++ b/wizard/scop_membership_staff_wizard.xml @@ -9,13 +9,30 @@ <field name="model">scop.membership.staff.wizard</field> <field name="arch" type="xml"> <form string="Effectifs à l'adhésion"> - <h5><field name="partner_id" readonly="1" string="Coopérative" options="{'no_open': True}" /></h5> + <h5><field + name="partner_id" + readonly="1" + string="Coopérative" + options="{'no_open': True}" + /></h5> <group> <field name="staff_id" readonly="1" invisible="1" /> - <field name="effective_date" required="1" string="Date effective de l'information" /> - <field name="staff_count" required="1" string="Effectif total" /> + <field + name="effective_date" + required="1" + string="Date effective de l'information" + /> + <field + name="staff_count" + required="1" + string="Effectif total" + /> <field name="staff_shareholder_count" required="1" /> - <field name="staff_shareholder_total" required="1" string="Total associés y compris non salariés" /> + <field + name="staff_shareholder_total" + required="1" + string="Total associés y compris non salariés" + /> <field name="staff_average" required="1" /> <field name="comment" /> </group> @@ -32,10 +49,7 @@ </field> </record> - <record - id="scop_membership_staff_wizard_action" - model="ir.actions.act_window" - > + <record id="scop_membership_staff_wizard_action" model="ir.actions.act_window"> <field name="name">Effectifs à l'adhésion</field> <field name="type">ir.actions.act_window</field> <field name="res_model">scop.membership.staff.wizard</field> diff --git a/wizard/scop_membership_submit_wizard.py b/wizard/scop_membership_submit_wizard.py index 514b6a8..b82b9a5 100644 --- a/wizard/scop_membership_submit_wizard.py +++ b/wizard/scop_membership_submit_wizard.py @@ -11,10 +11,14 @@ class ScopMembershipSubmitWizard(models.TransientModel): partner_id = fields.Many2one( comodel_name="res.partner", string="Coop", required=True ) - ur_id = fields.Many2one(related="partner_id.ur_id", readonly=False) + list_logs = fields.Text("Liste des erreurs", compute="_compute_list_logs") - list_logs = fields.Text("Liste des erreurs") + # ------------------------------------------------------ + # Compute + # ------------------------------------------------------ + def _compute_list_logs(self): + self.list_logs = self.partner_id.liasse_membership_id.check_compulsory_fields_lf() # ------------------------------------------------------ # Actions / Buttons @@ -26,9 +30,3 @@ class ScopMembershipSubmitWizard(models.TransientModel): self.partner_id.scop_send_to_cg() return {"type": "ir.actions.act_window_close"} - - def save_data(self): - """ - Sauvegarder les données même avec erreurs - """ - return {"type": "ir.actions.act_window_close"} diff --git a/wizard/scop_membership_submit_wizard.xml b/wizard/scop_membership_submit_wizard.xml index db1cf9b..6094012 100644 --- a/wizard/scop_membership_submit_wizard.xml +++ b/wizard/scop_membership_submit_wizard.xml @@ -32,14 +32,7 @@ class="oe_highlight" attrs="{'invisible':[('list_logs', '!=', False)]}" /> - <button - name="save_data" - type="object" - string="Sauvegarder" - class="oe_highlight" - attrs="{'invisible':[('list_logs', '=', False)]}" - /> - <button special="cancel" string="Annuler" /> + <button special="cancel" string="Fermer" /> </footer> </form> </field> -- GitLab