from odoo import models, fields, api, _ class PurchaseOrder(models.Model): _inherit = "purchase.order" @api.model def _check_supplier_overdue_invoices(self, partner): """Vérifie si le fournisseur a des factures impayées en retard""" overdue_invoices = self.env["account.move"].search( [ ("partner_id", "=", partner.id), ("move_type", "=", "in_invoice"), # Facture fournisseur ( "invoice_date_due", "<", fields.Date.today(), ), # Date d'échéance dépassée ("payment_state", "!=", "paid"), # Non payée ] ) return len(overdue_invoices) > 0 def button_confirm(self): """Surcharger la confirmation de commande pour intégrer l'avertissement""" # Appel de la méthode standard de confirmation de commande res = super(PurchaseOrder, self).button_confirm() for order in self: supplier = order.partner_id company = order.company_id # Vérifier si la fonctionnalité d'avertissement est activée # et si le fournisseur a des factures en souffrance warn = company.warn_overdue_for_supplier( supplier ) and self._check_supplier_overdue_invoices(supplier) if warn: user_to_notify = order._get_user_to_notify() if user_to_notify: # Création de l'activité de type "To-Do" (mail.activity) activity_vals = { "res_model_id": self.env["ir.model"] .search([("model", "=", "purchase.order")], limit=1) .id, "res_id": order.id, # L'ID du bon de commande "activity_type_id": self.env.ref( "mail.mail_activity_data_todo" ).id, # Type d'activité "To-Do" "summary": _("Overdue Invoices for Supplier %s") % supplier.name, "note": _( "The supplier %s has overdue invoices. Please follow up before proceeding with the order %s." ) % (supplier.name, order.name), "user_id": user_to_notify.id, # Utilisateur assigné à l'activité "date_deadline": fields.Date.today(), # La date limite de l'activité } self.env["mail.activity"].create(activity_vals) return res def _get_user_to_notify(self): self.ensure_one() company = self.company_id # Déterminer quel utilisateur doit être averti if company.warn_supplier_overdue_user_type == "current": user_to_notify = self.env.user elif company.warn_supplier_overdue_user_type == "specific": user_to_notify = company.warn_supplier_overdue_user_id else: user_to_notify = self.env.user # Par défaut, utilisateur courant return user_to_notify