from odoo import models, fields, api from odoo.exceptions import ValidationError import logging _logger = logging.getLogger(__name__) class WhatsAppComposer(models.TransientModel): _inherit = 'whatsapp.composer' # Campo Many2one para grupos - solo disponible cuando whatsapp_web_groups está instalado whatsapp_group_id = fields.Many2one('ww.group', string='WhatsApp Group', help="Select WhatsApp group to send message to", ondelete='set null') @api.onchange('whatsapp_group_id') def _onchange_whatsapp_group_id(self): """Actualizar campos cuando se selecciona un grupo""" if self.whatsapp_group_id: self.whatsapp_group_id_char = self.whatsapp_group_id.whatsapp_web_id self.recipient_type = 'group' self.phone = False @api.onchange('recipient_type') def _onchange_recipient_type(self): """Limpiar campos al cambiar tipo de destinatario""" if self.recipient_type != 'group': self.whatsapp_group_id = False @api.constrains('recipient_type', 'phone', 'whatsapp_group_id', 'whatsapp_group_id_char', 'wa_template_id', 'body') 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.whatsapp_group_id_char: raise ValidationError("Please select a WhatsApp group or enter a Group ID when sending to groups") def _send_whatsapp_web_message(self): """Extender método para usar whatsapp_group_id si está disponible""" records = self._get_active_records() for record in records: # Determinar destinatario - priorizar whatsapp_group_id sobre whatsapp_group_id_char if self.recipient_type == 'group': if self.whatsapp_group_id: mobile_number = self.whatsapp_group_id.whatsapp_web_id elif self.whatsapp_group_id_char: mobile_number = self.whatsapp_group_id_char else: raise ValidationError("Please specify a group") else: mobile_number = self.phone if not mobile_number: raise ValidationError("Please provide a phone number") # Crear mail.message con adjuntos si existen post_values = { 'attachment_ids': [self.attachment_id.id] if self.attachment_id else [], 'body': self.body, 'message_type': 'whatsapp_message', 'partner_ids': hasattr(record, '_mail_get_partners') and record._mail_get_partners()[record.id].ids or record._whatsapp_get_responsible().partner_id.ids, } if hasattr(records, '_message_log'): message = record._message_log(**post_values) else: message = self.env['mail.message'].create( dict(post_values, res_id=record.id, model=self.res_model, subtype_id=self.env['ir.model.data']._xmlid_to_res_id("mail.mt_note")) ) # Crear mensaje WhatsApp message_vals = { 'mail_message_id': message.id, 'mobile_number': mobile_number, 'mobile_number_formatted': mobile_number, 'recipient_type': self.recipient_type, 'wa_template_id': False, 'wa_account_id': self._get_whatsapp_web_account().id, 'state': 'outgoing', } # Agregar whatsapp_group_id si está disponible if self.whatsapp_group_id: message_vals['whatsapp_group_id'] = self.whatsapp_group_id.id whatsapp_message = self.env['whatsapp.message'].create(message_vals) # Enviar mensaje whatsapp_message._send_message() return {'type': 'ir.actions.act_window_close'} def _prepare_whatsapp_message_values(self, record): """Extender método para agregar información de grupo""" values = super()._prepare_whatsapp_message_values(record) # Agregar información de grupo si está disponible if (hasattr(self, 'recipient_type') and self.recipient_type == 'group'): if self.whatsapp_group_id: values.update({ 'whatsapp_group_id': self.whatsapp_group_id.id, 'mobile_number': self.whatsapp_group_id.whatsapp_web_id, 'mobile_number_formatted': self.whatsapp_group_id.whatsapp_web_id, }) elif self.whatsapp_group_id_char: values.update({ 'mobile_number': self.whatsapp_group_id_char, 'mobile_number_formatted': self.whatsapp_group_id_char, }) return values