Newer
Older

Benjamin - Le Filament
a validé
# © 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

Benjamin - Le Filament
a validé
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

Benjamin - Le Filament
a validé
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):

Benjamin - Le Filament
a validé
"""
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