from odoo import models, fields, api from odoo.exceptions import ValidationError import logging _logger = logging.getLogger(__name__) class WhatsAppMessage(models.Model): _inherit = 'whatsapp.message' # Campo Many2one para grupos - solo disponible cuando whatsapp_web_groups está instalado whatsapp_group_id = fields.Many2one('ww.group', string='WhatsApp Group', help="WhatsApp group to send message to (if recipient_type is group)", ondelete='set null') @api.depends('recipient_type', 'mobile_number', 'whatsapp_group_id') def _compute_final_recipient(self): """Compute the final recipient based on type - extiende la lógica base""" # Primero ejecutar la lógica base de whatsapp_web super()._compute_final_recipient() # Si hay grupo seleccionado, usar su ID (sobrescribe la lógica base) for record in self: if record.recipient_type == 'group' and record.whatsapp_group_id: record.final_recipient = record.whatsapp_group_id.whatsapp_web_id @api.onchange('whatsapp_group_id') def _onchange_whatsapp_group_id(self): """Actualizar mobile_number cuando se selecciona un grupo""" if self.whatsapp_group_id: self.mobile_number = self.whatsapp_group_id.whatsapp_web_id self.recipient_type = 'group' @api.constrains('recipient_type', 'mobile_number', 'whatsapp_group_id') def _check_recipient_configuration(self): """Extender validación para incluir whatsapp_group_id""" super()._check_recipient_configuration() for record in self: if record.recipient_type == 'group': if not record.whatsapp_group_id and not (record.mobile_number and record.mobile_number.endswith('@g.us')): raise ValidationError("Para mensajes a grupos, debe seleccionar un grupo o proporcionar un ID de grupo válido (@g.us)") def _get_final_destination(self): """Método mejorado para obtener destino final - extiende la lógica base""" self.ensure_one() # Si hay grupo seleccionado, usar su ID if self.recipient_type == 'group' and self.whatsapp_group_id: return self.whatsapp_group_id.whatsapp_web_id # De lo contrario, usar la lógica base (incluye verificación de mobile_number @g.us) result = super()._get_final_destination() if result: return result # Fallback adicional si no hay resultado return False def _send_message(self, with_commit=False): """Extender método _send_message para manejar whatsapp_group_id""" # El método _get_final_destination ya maneja whatsapp_group_id, # así que la lógica base funcionará correctamente return super()._send_message(with_commit)