odex25_standard/odex25_base/os_whatsapp_integration/wizard/wizard.py

73 lines
2.9 KiB
Python

from odoo import api, fields, models
import html2text
class WhatsappSendMessage(models.TransientModel):
_name = 'whatsapp.message.wizard'
user_id = fields.Many2one('res.partner', string="Recipient")
mobile = fields.Char(related='user_id.mobile', required=True)
message = fields.Text(string="Message")
model = fields.Char('mail.template.model_id')
template_id = fields.Many2one(
'mail.template', 'Use template', index=True, )
@api.onchange('template_id')
def onchange_template_id_wrapper(self):
self.ensure_one()
res_id = self._context.get('active_id') or 1
values = self.onchange_template_id(self.template_id.id, self.model, res_id)['value']
for fname, value in values.items():
setattr(self, fname, value)
def onchange_template_id(self, template_id, model, res_id):
if template_id:
values = self.generate_email_for_composer(template_id, [res_id])[res_id]
else:
default_values = self.with_context(default_model=model, default_res_id=res_id).default_get(
['model', 'res_id', 'partner_ids', 'message'])
values = dict((key, default_values[key]) for key in
['body', 'partner_ids']
if key in default_values)
values = self._convert_to_write(values)
return {'value': values}
def generate_email_for_composer(self, template_id, res_ids, fields=None):
multi_mode = True
if isinstance(res_ids, int):
multi_mode = False
res_ids = [res_ids]
if fields is None:
fields = ['body_html']
returned_fields = fields + ['partner_ids']
values = dict.fromkeys(res_ids, False)
template_values = self.env['mail.template'].with_context(tpl_partners_only=True).browse(
template_id).generate_email(res_ids, fields=fields)
for res_id in res_ids:
res_id_values = dict((field, template_values[res_id][field]) for field in returned_fields if
template_values[res_id].get(field))
res_id_values['message'] = html2text.html2text(res_id_values.pop('body_html', ''))
values[res_id] = res_id_values
return multi_mode and values or values[res_ids[0]]
def send_message(self):
if self.message and self.mobile:
message_string = ''
message = self.message.split(' ')
for msg in message:
message_string = message_string + msg + '%20'
message_string = message_string[:(len(message_string) - 3)]
number = self.user_id.mobile
link = "https://web.whatsapp.com/send?phone=" + number
send_msg = {
'type': 'ir.actions.act_url',
'url': link + "&text=" + message_string,
'target': 'new',
'res_id': self.id,
}
return send_msg