acc_crm_lead.py 7.0 KB
# -*- coding: utf-8 -*-
import logging
from odoo import api, SUPERUSER_ID, fields, models, _
import logging
from datetime import datetime
from odoo.exceptions import UserError, ValidationError
import re

_logger = logging.getLogger(__name__)

class AccCrmLead(models.Model):
    """
     库存移动继承
    """
    _inherit = "crm.lead"

    contact_id = fields.Many2one('res.partner',string='联系人')
    acc_quotation_id = fields.Many2one('acc.quotation',string='挚锦报价单',readonly=True)
    last_contact = fields.Char(string='最终用户')


    def search(self, args, offset=0, limit=None, order=None, count=False):
        args = args or []
        if self._uid == 2:
            return super(AccCrmLead, self).search(args, offset, limit, order, count)
        # 管理部门
        elif self.env.user.has_group('acct_base.acc_manage_level1_group'):
            return super(AccCrmLead, self).search(args, offset, limit, order, count)
        # 销售部经理
        elif self.env.user.has_group('acct_base.unovo_it_info_group'):
            uids = self.get_department(self._uid)
            args.extend([('user_id', 'in', uids)])
            return super(AccCrmLead, self).search(args, offset, limit, order, count)
        # 普通员工
        else:
            args.extend([('user_id', '=', self._uid)])
        return super(AccCrmLead, self).search(args, offset, limit, order, count)

    @api.multi
    def get_department(self,user_id):
        department_ids = []
        employee_id = self.env['hr.employee'].search([('user_id', '=', user_id)])
        department_id = self.env['hr.department'].search([('manager_id', '=', employee_id.id)])
        if department_id:
            for did in department_id:
                department_ids.append(did.id)
            # department_name = department_id.name
            # if department_name in ['销售一部','销售二部','销售三部']:
            uids = self.make_sale_uid(department_ids,user_id)
            return uids

    @api.multi
    def make_sale_uid(self,department_ids,user_id):
        all_ids = []
        cr = self.env.cr
        all_total = """ SELECT
                            ru.id as uid
                        FROM
                            hr_employee he
                        LEFT JOIN res_users ru ON he.user_id = ru. ID
                        WHERE
                            department_id in %s """
        # cr.execute(all_total)
        cr.execute(all_total, (tuple(department_ids),))
        result = cr.dictfetchall()
        for line in result:
            all_ids.append(line['uid'])
        all_ids.append(user_id)
        return tuple(all_ids)

    @api.multi
    def acc_quotation_list(self):
        domain = [('crm_lead_id', '=', self.id)]
        return {
            'name': _('挚锦报价单'),
            'domain': domain,
            'res_model': 'acc.quotation',
            'type': 'ir.actions.act_window',
            'view_id': False,
            'view_mode': 'tree,form',
            'view_type': 'form',
            'limit': 80,
            'context': "{'crm_lead_id': %d}" % (self.id)
        }

    @api.model
    def create(self,vals):
        res = super(AccCrmLead, self).create(vals)
        # if vals.get('user_id'):
        #     toaddrs = []
        #     toaddrs.append(res.user_id.login)
        #     toaddrs.append(self.env['res.users'].browse(self._uid).login)
        #     # toaddrs = ['jie.dong@neotel-technology.com']
        #     subjects = "商机{}创建".format(res.name)
        #     message = "商机“{}”,关联客户“{}”,销售员“{}”,已在系统创建,详细信息请在erp系统中查看".format(res.name,res.partner_id.name,res.user_id.partner_id.name)
        #     self.env['acc.tools'].send_report_email(subjects,message,toaddrs)
        #     # create = True
        #     self.sent(vals,res,create=True)
        return res

    @api.multi
    def write(self, vals):
        if vals.get('user_id'):
            changeuser = self.env['res.users'].browse(vals.get('user_id'))
            toaddrs = []
            toaddrs.append(changeuser.login)
            toaddrs.append(self.env['res.users'].browse(self._uid).login)
            # subjects = "采购单{}管理部已审批完成,请及时确认".format(self.name)
            # message = "采购单{}<br><br>标题:{}<br><br>供应商:{}<br><br>支付条款:{}<br><br>总价:{}<br><br><br>管理部审批完成,请及时处理<br><br><br>谢谢".format(self.name,self.title,self.partner_id.name,self.payment_rule,self.amount_total)
            subjects = "商机{}变更提醒".format(self.name)
            message = "关联客户名称:{}<br><br>联系人名称:{}<br><br>电话:{}<br><br>手机:{}<br><br>邮箱:{}<br><br>销售员:{}".format(self.partner_id.name,self.contact_id.name,self.contact_id.phone,self.contact_id.mobile,self.contact_id.email,changeuser.partner_id.name)
            self.env['acc.tools'].send_report_email(subjects,message,toaddrs)
            self.sent(vals,res=True,create=False)
        res = super(AccCrmLead, self).write(vals)  
        return res

    @api.multi
    def sent(self,vals,res,create):
        if create:
            contact_name = res.user_id.partner_id.name
            contact_mobile = res.user_id.partner_id.mobile
            partner_name = res.partner_id.name
            topic = res.name
        else:
            changeuser = self.env['res.users'].browse(vals.get('user_id'))
            contact_name = changeuser.partner_id.name
            contact_mobile = changeuser.partner_id.mobile
            partner_name = self.partner_id.name
            topic = self.name
        if not contact_mobile:
            raise ValidationError('销售员未填手机号,请填写销售员手机号')
        # if not contact_title:
        #     raise ValidationError('联系人称呼未正确配置!')
        ret = re.match(r"^1[35678]\d{9}$", contact_mobile)
        if not ret:
            raise ValidationError('销售员手机号填写格式不正确!')
        _logger.debug('===========%s==%s=%s============',topic,partner_name,contact_name)
        if create:
            # text = 'erp系统商机新建提醒,商机' + '“' + topic + '”' + ',关联客户' +'“' + partner_name + '”' + '销售员' + '“' + contact_name + '”'
            text = 'erp系统商机新建提醒,商机' + '“' + topic + '”' + '销售员' + '“' + contact_name + '”'
        else:
            # text = 'erp系统商机更新提醒,商机' + '“' + topic + '”' + ',关联客户' +'“' + partner_name + '”' + '销售员已变更为' + '“' + contact_name + '”'
            text = 'erp系统商机更新提醒,商机' + '“' + topic + '”' + '销售员已变更为' + '“' + contact_name + '”'
        vals = {
                'topic':topic,
                'user_name':contact_name,
                'phone':contact_mobile,
                'name':text
        }
        message = self.env['acc.message.interface'].sudo().create(vals)
        message.sms_send()
        # self.filtered(lambda r: r.state == 'draft').write({'state': 'sent','customer_state': 'sent'})
        return True