52 lines
No EOL
3 KiB
Python
52 lines
No EOL
3 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
|
|
if company.warn_supplier_overdue:
|
|
# Vérifier si l'avertissement s'applique à tous les fournisseurs ou seulement à certains
|
|
if company.warn_supplier_scope == 'all' or (company.warn_supplier_scope == 'specific' and supplier in company.warn_supplier_specific_ids):
|
|
if self._check_supplier_overdue_invoices(supplier):
|
|
# 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
|
|
|
|
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 |