73 lines
3.1 KiB
Python
73 lines
3.1 KiB
Python
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
|