Skip to content
Extraits de code Groupes Projets
account_banking_mandate.py 3,13 ko
Newer Older
  • Learn to ignore specific revisions
  • # © 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
    from odoo.exceptions import UserError
    
    
    
    class AccountBankingMandate(models.Model):
        _inherit = "account.banking.mandate"
    
        # ------------------------------------------------------
        # Button functions
        # ------------------------------------------------------
    
        def set_payment_order(self):
            self.ensure_one()
            payment_mode = self.env["account.payment.mode"].search(
                [("payment_method_id.code", "=", "sepa_direct_debit")]
            )
            if not payment_mode:
                raise UserError(_("Aucun mode de prélèvement SEPA configuré."))
            self.partner_id.customer_payment_mode_id = payment_mode
    
    
        def set_invoice_mandate(self):
            return {
                "name": "Affectation du nouveau mandat",
                "type": "ir.actions.act_window",
                "res_model": "account.banking.mandate.change.wizard",
                "views": [[False, "form"]],
                "target": "new",
            }
    
        # ------------------------------------------------------
        # Business functions
        # ------------------------------------------------------
        def _select_open_invoices(self):
            self.ensure_one()
            invoice_ids = self.env["account.move"].search(
                [
                    ("partner_id", "=", self.partner_id.id),
                    ("move_type", "in", ("out_invoice", "out_refund")),
                    ("state", "in", ("draft", "posted")),
                    ("payment_state", "in", ("draft", "not_paid", "partial")),
                ]
            )
            return invoice_ids
    
    
        def _change_invoice_mandate(self, invoice_ids):
    
            """
            Affecte le mandat courant pur la facture passée en paramètre
            :param invoice : objet account.move
            """
    
            payment_mode = self.env["account.payment.mode"].search(
                [
                    ("payment_method_id.code", "=", "sepa_direct_debit"),
                    ("company_id", "=", self.env.company.id),
                ]
            )
    
            if not payment_mode:
                raise UserError(_("Aucun mode de prélèvement SEPA configuré."))
    
    
            for invoice in invoice_ids:
                invoice.update(
                    {
                        "payment_mode_id": payment_mode.id,
                        "partner_bank_id": self.partner_bank_id.id,
                        "mandate_id": self.id,
                    }
                )
    
        def _remove_invoice_mandate(self, invoice_ids):
            """
            Supprime le mandat courant pur la facture passée en paramètre
            :param invoice : objet account.move
            """
    
            payment_mode = self.env["account.payment.mode"].search(
                [("name", "ilike", "Virement"), ("company_id", "=", self.env.company.id)],
                limit=1,
            )
    
            for invoice in invoice_ids:
                invoice.update(
                    {
    
                        "payment_mode_id": payment_mode.id if payment_mode else None,
    
                        "partner_bank_id": False,
                        "mandate_id": False,
                    }
                )
            self.partner_id.customer_payment_mode_id = payment_mode