From b608f6097c853ed990c02974f236596458e0a9bd Mon Sep 17 00:00:00 2001 From: benjamin <benjamin@le-filament.com> Date: Tue, 21 Mar 2023 12:04:14 +0100 Subject: [PATCH] [update] wizard update bordereau payment mode --- wizard/scop_bordereau_payment_mode_wizard.py | 44 +++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/wizard/scop_bordereau_payment_mode_wizard.py b/wizard/scop_bordereau_payment_mode_wizard.py index 14877f2..17d7490 100644 --- a/wizard/scop_bordereau_payment_mode_wizard.py +++ b/wizard/scop_bordereau_payment_mode_wizard.py @@ -1,7 +1,8 @@ # Copyright 2021 Le Filament # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import _, fields, models +from odoo.exceptions import UserError class ScopBordereauChangePaymentMode(models.TransientModel): @@ -35,35 +36,49 @@ class ScopBordereauChangePaymentMode(models.TransientModel): # ------------------------------------------------------ def action_change_payment_mode(self): bordereau_id = self.bordereau_id - # Link new liasse fiscale to bordereau if self.change_type == "all": + # Affecte le mode de paiement par défaut au contact bordereau_id.partner_id.update( { "customer_payment_mode_id": self.payment_mode_id.id, } ) - bordereau_id.update( - { - "payment_mode_id": self.payment_mode_id.id, - } - ) - bordereau_id.invoice_ids.update( - { - "payment_mode_id": self.payment_mode_id.id, - } - ) - bordereau_id.invoice_ids.set_mandate() + # Recherche les bordereaux non payés + bordereau_ids = self.env["scop.bordereau"].search([ + ("partner_id", "=", bordereau_id.partner_id.id), + ("state", "not in", ["paid", "cancel"]), + ]) + # Recherche les factures liées aux bordereaux non payées + invoice_ids = bordereau_ids.mapped("invoice_ids").filtered( + lambda i: i.payment_state not in ["paid", "reversed"]) + else: + bordereau_ids = bordereau_id + invoice_ids = bordereau_id.invoice_ids.filtered( + lambda i: i.payment_state not in ["paid", "reversed"]) + if not invoice_ids: + raise UserError(_( + "Tous les appels liés à ce bordereau sont payés, il n'est pas possible " + "de modifier le mode de paiement" + )) + + # Met à jour le mode de paiement sur les bordereaux + bordereau_ids.update({"payment_mode_id": self.payment_mode_id.id}) + # Met à jour le mode de paiement sur les factures et attribue le mandat + invoice_ids.update({"payment_mode_id": self.payment_mode_id.id}) + invoice_ids.set_mandate() journal_ids = [ self.env.user.company_id.contribution_journal_id.id, self.env.user.company_id.journal_fede_com_id.id, self.env.user.company_id.journal_fede_cae_id.id, + self.env.user.company_id.journal_fede_indus_id.id, self.env.user.company_id.journal_ur_hdf_id.id, self.env.user.company_id.journal_ur_med_id.id, ] + # Met à jour le mode de paiement sur les écritures comptables move_line_ids = self.env["account.move.line"].search( [ - ("partner_id", "=", self.bordereau_id.partner_id.id), + ("move_id", "in", invoice_ids.ids), ("journal_id", "in", journal_ids), ("full_reconcile_id", "=", False), ("balance", "!=", 0), @@ -71,7 +86,6 @@ class ScopBordereauChangePaymentMode(models.TransientModel): ("account_id.internal_type", "=", "receivable"), ] ) - move_line_ids.update( { "payment_mode_id": self.payment_mode_id.id, -- GitLab