from odoo import fields, models, api from datetime import datetime, timedelta import logging import json _logger = logging.getLogger(__name__) class WatiNotification(models.Model): _name = 'wati.notification' lead_id = fields.Many2one('crm.lead', string='Lead Id') ticket_id = fields.Char(string='Ticked Id') mobile = fields.Char(string='Mobile') sender_name = fields.Char(string='Sender Name') text = fields.Char(string='Text Message') text_time = fields.Datetime(string='Text Time') text_type = fields.Char(string='Text Type') json_raw = fields.Char(string='JSON Raw Text') is_parsed = fields.Boolean(string='Is Parsed') is_lead = fields.Boolean(string='To Leads', help='apakah sudah ter-convert jadi leads') def _cleanup(self): current_time = datetime.now() delta_time = current_time - timedelta(days=15) delta_time = delta_time.strftime('%Y-%m-%d %H:%M:%S') self.env['wati.notification'].search([ ('create_date', '<', delta_time), ('is_lead', '=', True), ]).unlink() _logger.info('Success Cleanup WATI Notification') def _parse_notification(self, limit = 0): domain = [('is_parsed', '=', False)] notifications = self.search(domain, order='id desc', limit=limit) notification_not_parsed_count = self.search_count(domain) i = 0 for notification in notifications: i += 1 _logger.info('[Parse Notification][%s] Process: %s/%s | Not Parsed: %s' % (notification.id, i, str(limit), str(notification_not_parsed_count))) notification_json = json.loads(notification.json_raw) sender_name = 'Indoteknik' if 'senderName' in notification_json: sender_name = notification_json['senderName'] notification.ticket_id = notification_json['ticketId'] notification.mobile = notification_json['waId'] notification.sender_name = sender_name notification.text = notification_json['text'] notification.text_time = datetime.fromtimestamp(float(notification_json['timestamp'])) notification.text_type = notification_json['type'] notification.is_parsed = True return def _convert_to_leads(self): query = [ ('is_lead', '=', False) ] watis = self.env['wati.notification'].search(query, order='id') for wati in watis: _logger.info('Convert to Lead WATI Notification ID %s' % wati.id) ticket_id = json.loads(wati.json_raw)['ticketId'] text = json.loads(wati.json_raw)['text'] current_lead = self.env['crm.lead'].search([('ticket_id', '=', ticket_id)], limit=1) operator_email = json.loads(wati.json_raw)['operatorEmail'] operator_name = json.loads(wati.json_raw)['operatorName'] event_type = json.loads(wati.json_raw)['eventType'] if event_type == 'sessionMessageSent': if 'Saya *Eko*' in str(text): sales = 11 elif 'Saya *Nabila*' in str(text): sales = 20 elif 'Saya *Novita*' in str(text): sales = 377 elif 'Saya *Putri*' in str(text): sales = 10 elif 'Saya *Heriyanto*' in str(text): sales = 375 elif 'Saya *Ade*' in str(text): sales = 9 elif 'Saya *Adela*' in str(text): sales = 8 elif 'Saya *Jananto*' in str(text): sales = 376 elif 'Saya *Dwi*' in str(text): sales = 24 else: sales = 25 #System current_lead.description = str(current_lead.description)+ "| i:" + str(text) current_lead.operator_email = operator_email current_lead.operator_name = operator_name current_lead.user_id = sales elif current_lead: # must append internal notes as a reply here current_lead.description = str(current_lead.description) + " | c:" +str(text) current_lead.operator_email = operator_email current_lead.operator_name = operator_name else: # create new leads contact_name = json.loads(wati.json_raw)['senderName'] phone = json.loads(wati.json_raw)['waId'] name = 'Ada pesan dari WATI '+str(phone)+' '+str(contact_name) current_lead = self.env['crm.lead'].create([{ 'name': name, 'ticket_id': ticket_id, 'operator_email': operator_email, 'operator_name': operator_name, 'contact_name': contact_name, 'phone': phone, 'description': "c:" +str(text) }]) wati.is_lead = True wati.lead_id = current_lead.id