bemade-addons/replace_invoicing_user/wizard/sale_make_invoice_advance.py
2025-05-29 21:35:47 -04:00

62 lines
2.9 KiB
Python

from odoo import models
class SaleMakeInvoiceAdvance(models.TransientModel):
_inherit = "sale.advance.payment.inv"
def _prepare_invoice_values(self, order, so_lines, accounts):
invoice_vals = super()._prepare_invoice_values(order, so_lines, accounts)
# On utilise le contexte actuel qui doit déjà contenir les bonnes valeurs de _create_invoices
use_current_user = self.env.context.get('use_current_user', self.env['ir.config_parameter'].sudo().get_param(
'current_user_as_invoice_user.use_current_user', 'True'
).lower() == 'true')
# Determine which user to use
if use_current_user:
# Utiliser l'utilisateur qui crée la facture
user_id = self.env.uid
else:
# Utiliser l'utilisateur spécifique
specific_user_id = self.env.context.get('specific_invoice_user_id') or int(self.env['ir.config_parameter'].sudo().get_param(
'current_user_as_invoice_user.specific_user_id', '0'
))
user_id = specific_user_id if specific_user_id else self.env.uid
invoice_vals.update({
'invoice_user_id': user_id,
'user_id': user_id,
})
return invoice_vals
def _create_invoices(self, sale_orders):
# Gestion du contexte pour les followers et utilisateurs de facture
use_current_user = self.env['ir.config_parameter'].sudo().get_param(
'current_user_as_invoice_user.use_current_user', 'True'
).lower() == 'true'
# Vérifier si on doit ajouter l'utilisateur courant comme follower
current_user_as_follower = self.env['ir.config_parameter'].sudo().get_param(
'current_user_as_invoice_user.current_user_as_follower', 'False'
).lower() == 'true'
# Dans tous les cas, on utilise no_follower_tracking=True pour désactiver le comportement standard
# et appliquer notre propre logique dans account_move.py
ctx = {
'no_follower_tracking': True,
'use_current_user': use_current_user,
'current_user_as_follower': current_user_as_follower,
# Passer explicitement l'ID de l'utilisateur courant dans le contexte
# Cela permet de garantir que c'est bien l'utilisateur spécifié dans with_user() qui est utilisé
'explicit_user_id': self.env.user.id
}
if not use_current_user:
# Si on utilise un utilisateur spécifique, on l'ajoute au contexte
specific_user_id = int(self.env['ir.config_parameter'].sudo().get_param(
'current_user_as_invoice_user.specific_user_id', '0'
))
ctx['specific_invoice_user_id'] = specific_user_id
self = self.with_context(**ctx)
return super()._create_invoices(sale_orders)