| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- 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
|