summaryrefslogtreecommitdiff
path: root/indoteknik_custom/models/crm_lead.py
blob: 5fb7ada9741a1dafaf2c308b9006b548dba67696 (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
119
120
121
122
123
124
125
126
127
from odoo import fields, models, api
import logging
import random
from odoo.exceptions import AccessError, UserError, ValidationError

_logger = logging.getLogger(__name__)


class CrmLead(models.Model):
    _inherit = "crm.lead"

    html_description = fields.Html(string="Descriptions")
    file_npwp = fields.Binary(string="Nomor Pokok Wajib Pajak")
    file_nib = fields.Binary(string="Nomor Induk Berusaha")
    file_tdp = fields.Binary(string="Tanda Daftar Perusahaan")
    file_siup = fields.Binary(string="Surat Izin Usaha Perdagangan")
    file_quotation = fields.Binary(string='Dokumen Quotation')
    body_html_lead = fields.Text('Body HTML', compute='compute_body_leads')
    # for wati only
    wati_notification_id = fields.One2many('wati.notification', 'lead_id', string='Wati Notification')
    ticket_id = fields.Char('Ticket ID', help='Ticket ID yang ada di WATI')
    operator_email = fields.Char('Operator Email', help='Operator yang membalas')
    operator_name = fields.Char('Operator Name', help='Operator yang membalas')
    order_id = fields.Many2one('sale.order', string='Sales Order', help='Link ke sales order id')
    reason = fields.Selection([
        ('new_so', 'Diganti SO Baru'),
        ('out_stock', 'Stock Tidak Tersedia'),
        ('wrong_price', 'Salah Memberikan Informasi Harga'),
        ('discontinue', 'Barang Discontinue'),
        ('change_of_mind', 'Konsumen Berubah Pikiran'),
        ('problematic_items', 'Barang Yang Dibeli Bermasalah'),
        ('no_tempo', 'Konsumen Tidak Mendapatkan Tempo'),
        ('payment_issues', 'Konsumen Memiliki Masalah Pembayaran'),
        ('disagree_shipping', 'Tidak Sepakat Dengan Biaya Kirim'),
        ('payment_not_received', 'Pembayaran Belum Diterima'),
        ('delivery_time', 'Tidak Sanggup Memenuhi Delivery Time'),
        ('fraud_indication', 'Indikasi Penipuan'),
        ('irrelevant_order', 'Pesanan Tidak Relevan'),
        ('cannot_processed', 'Pesanan Tidak Dapat di Proses di Indoteknik'),
    ], string='Reason Mark Lost', tracking=True)

    def action_set_lost(self):
        result = super(CrmLead, self).action_set_lost()
        if not self.reason:
            raise UserError('Jika ingin Mark as Lost, Isi Reason nya terlebih dahulu')
        return result
    
    @api.onchange('user_id')
    def _change_salesperson_so(self):
        if self.order_id:
            self.order_id.user_id = self.user_id

    def revert_to_leads(self):
        opportunities = self.env['crm.lead'].search([
            ('type', '=', 'opportunity'),
            ('active', '=', True),
            ('user_id', '=', False),
        ])
        for opportunity in opportunities:
            opportunity.type = 'lead'

    @api.onchange('stage_id')
    def update_stars(self):
        for lead in self:
            lead.priority = 0

    def compute_body_leads(self):
        for lead in self:
            mail_message = self.env['mail.message'].search([
                ('res_id', '=', lead.id),
                ('model', '=', 'crm.lead'),
                ('message_type', '=', 'email')
            ], limit=1)
            lead.body_html_lead = mail_message.body or ''

    def _update_tags_leads(self):
        leads = self.env['crm.lead'].search([
            ('active', '=', True),
            ('type', '=', 'lead'),
            ('tag_ids', '=', False),
        ], limit=1000)
        for lead in leads:
            _logger.info('processing tagged lead %s' % lead.id)
            input_tags = []
            if lead.order_id:
                last_manufacture_id = 0
                for line in lead.order_id.order_line:
                    tag = self.env['crm.tag'].search([('name', 'ilike', line.product_id.product_tmpl_id.x_manufacture.x_name)], limit=1)
                    if tag and tag.id != last_manufacture_id:
                        last_manufacture_id = tag.id
                        input_tags.append(tag.id)
                    input_tags.append(1509) #Website hastag
                    lead.tag_ids = input_tags
            else:
                tags = self.env['crm.tag'].search([('id', '>', 0)])
                for tag in tags:
                    if tag.name.lower() in lead.body_html_lead.lower():
                        input_tags.append(tag.id)
                if input_tags:
                    lead.tag_ids = input_tags
                else:
                    input_tags.append(1510) #no tag
                    lead.tag_ids = input_tags
            
            if not lead.user_id or lead.user_id.id in [2, 25]:
                partner = lead.partner_id.parent_id or lead.partner_id
                if partner.user_id and partner.user_id.id not in [2, 25]:
                    salesperson_id = partner.user_id.id
                else:
                    salesperson_id = 20
            else:
                partner = lead.partner_id.parent_id or lead.partner_id
                if partner.user_id and partner.user_id.id not in [2, 25]:
                    salesperson_id = partner.user_id.id
                else:
                    salesperson_id = 20

            lead.user_id = salesperson_id

    # def _create_testing_tags_leads(self):
    #     angka_bulat_acak = random.randint(1, 1000)
    #     self.env['crm.lead'].create([{
    #                 'name': 'testing',
    #                 'partner_id': 69
    #             }])