| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- 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)
|