bemade-addons/bemade_purchase_warn_supplier_overdue/models/purchase_order.py
2024-10-04 12:02:28 -04:00

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