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