summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/wati.py
blob: 1f694380cf2aca00947b898ed354277b1f4b0fb1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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