|
|
@@ -0,0 +1,115 @@
|
|
|
+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"""
|
|
|
+ super()._onchange_recipient_type()
|
|
|
+ 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
|
|
|
+
|