From 08094b7caca3d7bd8f88afaa21660d3626250075 Mon Sep 17 00:00:00 2001 From: benjamin <benjamin@le-filament.com> Date: Thu, 15 Sep 2022 15:34:07 +0200 Subject: [PATCH] [add] banking mandate change from mandate form for draft and open bordereau --- __manifest__.py | 2 + models/__init__.py | 1 + models/account_banking_mandate.py | 54 ++++++++++++++++++++++ security/ir.model.access.csv | 1 + views/account_banking_mandate.xml | 29 ++++++++++++ wizard/__init__.py | 1 + wizard/mandate_change_bordereau_wizard.py | 40 ++++++++++++++++ wizard/mandate_change_bordereau_wizard.xml | 37 +++++++++++++++ 8 files changed, 165 insertions(+) create mode 100644 models/account_banking_mandate.py create mode 100644 views/account_banking_mandate.xml create mode 100644 wizard/mandate_change_bordereau_wizard.py create mode 100644 wizard/mandate_change_bordereau_wizard.xml diff --git a/__manifest__.py b/__manifest__.py index 64b1d36..573139b 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -31,6 +31,7 @@ "templates/report_scop_bordereau_refund.xml", "templates/report_union_sociale.xml", # Views + "views/account_banking_mandate.xml", "views/account_move.xml", "views/res_config_settings.xml", "views/scop_cotisation_cg.xml", @@ -40,6 +41,7 @@ "report/scop_contribution_report.xml", # Wizards "wizard/export_journal_wizard_view.xml", + "wizard/mandate_change_bordereau_wizard.xml", "wizard/scop_cotisation_cg_regul_wizard.xml", "wizard/scop_bordereau_update_liasse_wizard.xml", "wizard/scop_bordereau_payment_mode_wizard.xml", diff --git a/models/__init__.py b/models/__init__.py index 872bf77..5694e7b 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,6 +1,7 @@ # © 2021 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import account_banking_mandate from . import account_move from . import res_company from . import res_config_settings diff --git a/models/account_banking_mandate.py b/models/account_banking_mandate.py new file mode 100644 index 0000000..44eb99c --- /dev/null +++ b/models/account_banking_mandate.py @@ -0,0 +1,54 @@ +# © 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 + + +class AccountBankingMandate(models.Model): + _inherit = "account.banking.mandate" + + # ------------------------------------------------------ + # Button functions + # ------------------------------------------------------ + def set_bordereau_mandate(self): + return { + "name": "Affectation du nouveau mandat", + "type": "ir.actions.act_window", + "res_model": "account.banking.mandate.change.bordereau.wizard", + "views": [[False, "form"]], + "target": "new", + } + + # ------------------------------------------------------ + # Business functions + # ------------------------------------------------------ + def _select_open_bordereau(self): + self.ensure_one() + bordereau_ids = self.env["scop.bordereau"].search( + [ + ("partner_id", "=", self.partner_id.id), + ("state", "not in", ("paid", "cancel")), + ] + ) + return bordereau_ids + + def _change_bordereau_mandate(self, bordereau): + """ + Affecte le mandat courant pur le bordereau passé en paramètre + et les factures associées + :param bordereau : objet scop.bordereau + """ + payment_mode = self.env["account.payment.mode"].search( + [("payment_method_id.code", "=", "sepa_direct_debit")] + ) + bordereau.update( + { + "payment_mode_id": payment_mode.id, + } + ) + invoice_ids = bordereau.invoice_ids.filtered( + lambda i: i.state in ("draft", "posted") + and i.payment_state in ("draft", "not_paid", "partial") + ) + for invoice in invoice_ids: + self._change_invoice_mandate(invoice) diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 7c925ce..3bb8d51 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -17,3 +17,4 @@ access_scop_cotisation_cg_wizard,access_scop_cotisation_cg_wizard,model_scop_cot access_export_journal_cg_wizard,access_export_journal_cg_wizard,model_export_journal_cg_wizard,base.group_user,1,1,1,1 access_scop_bordereau_change_liasse_wizard,access_scop_bordereau_change_liasse_wizard,model_scop_bordereau_change_liasse_wizard,base.group_user,1,1,1,1 access_scop_bordereau_change_payment_mode_wizard,access_scop_bordereau_change_payment_mode_wizard,model_scop_bordereau_change_payment_mode_wizard,base.group_user,1,1,1,1 +access_account_banking_mandate_change_bordereau_wizard,access_account_banking_mandate_change_bordereau_wizard,model_account_banking_mandate_change_bordereau_wizard,cgscop_cotisation_cg.group_cotisation_cg_administrative,1,1,1,1 diff --git a/views/account_banking_mandate.xml b/views/account_banking_mandate.xml new file mode 100644 index 0000000..98b2076 --- /dev/null +++ b/views/account_banking_mandate.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <!-- Copyright 2020 Le Filament + License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> + <data> + + <record id="view_mandate_cg_form_inherit" model="ir.ui.view"> + <field name="name">scop.cg.view.mandate.form</field> + <field name="model">account.banking.mandate</field> + <field + name="inherit_id" + ref="cgscop_cotisation.view_mandate_form_inherit" + /> + <field name="priority" eval="90" /> + <field name="arch" type="xml"> + <xpath expr="//div[@name='change_mandate_button']" position="inside"> + <button + name="set_bordereau_mandate" + type="object" + class="btn-outline-info" + string="Affecter ce mandat aux bordereaux" + style="margin-left: 15px; margin-right: 15px;" + attrs="{'invisible': ['|', ('state', '!=', 'valid'), ('company_id', '!=', 1)]}" + /> + </xpath> + </field> + </record> + </data> +</odoo> diff --git a/wizard/__init__.py b/wizard/__init__.py index be42db4..3a73f47 100644 --- a/wizard/__init__.py +++ b/wizard/__init__.py @@ -3,6 +3,7 @@ from . import account_move_reversal from . import export_journal_wizard +from . import mandate_change_bordereau_wizard from . import scop_bordereau_update_liasse_wizard from . import scop_bordereau_payment_mode_wizard from . import scop_bordereau_refund_wizard diff --git a/wizard/mandate_change_bordereau_wizard.py b/wizard/mandate_change_bordereau_wizard.py new file mode 100644 index 0000000..b332ccb --- /dev/null +++ b/wizard/mandate_change_bordereau_wizard.py @@ -0,0 +1,40 @@ +# © 2020 Le Filament (<http://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class AccountBankingMandateChange(models.TransientModel): + _name = "account.banking.mandate.change.bordereau.wizard" + _description = "Wizard changement mandat bordereaux" + + @api.model + def _default_mandate_id(self): + return self.env.context.get("active_id") + + @api.model + def _default_bordereau_ids(self): + bordereau_ids = ( + self.env["account.banking.mandate"] + .browse(self.env.context.get("active_id")) + ._select_open_bordereau() + ) + return bordereau_ids + + mandate_id = fields.Many2one( + comodel_name="account.banking.mandate", + string="Mandat", + default=_default_mandate_id, + required=True, + ) + partner_id = fields.Many2one(related="mandate_id.partner_id") + bordereau_ids = fields.Many2many( + relation="mandate_change_bordereau_wizard_scop_bordereau_rel", + comodel_name="scop.bordereau", + string="Bordereaux", + default=_default_bordereau_ids, + ) + + def change_mandate(self): + for bordereau in self.bordereau_ids: + self.mandate_id._change_bordereau_mandate(bordereau) diff --git a/wizard/mandate_change_bordereau_wizard.xml b/wizard/mandate_change_bordereau_wizard.xml new file mode 100644 index 0000000..8e798ae --- /dev/null +++ b/wizard/mandate_change_bordereau_wizard.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <data> + <record + id="account_banking_mandate_change_bordereau_wizard_form" + model="ir.ui.view" + > + <field + name="name" + >account.banking.mandate.change.bordereau.wizard.form</field> + <field name="model">account.banking.mandate.change.bordereau.wizard</field> + <field name="arch" type="xml"> + <form string="Changement de mandat"> + <group> + <field name="partner_id" invisible="1" /> + <field name="mandate_id" readonly="1" /> + </group> + <label for="bordereau_ids" /> + <field + name="bordereau_ids" + domain="[('partner_id', '=', partner_id), ('state', 'not in', ('paid', 'cancel'))]" + /> + <footer> + <button + name="change_mandate" + type="object" + string="Affecter le mandat" + class="btn-primary" + confirm="Valider le changement de mandat ?" + /> + <button special="cancel" string="Cancel" /> + </footer> + </form> + </field> + </record> + </data> +</odoo> -- GitLab