Código fonte para l10n_br_crm.models.crm_lead

# -*- coding: utf-8 -*-
# Copyright (C) 2012 - TODAY  Renato Lima - Akretion
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html

import re

from openerp import models, fields, api
from openerp.addons.l10n_br_base.tools import fiscal
from openerp.exceptions import ValidationError
from openerp.tools.translate import _


[documentos]class CrmLead(models.Model): """ CRM Lead Case """ _inherit = "crm.lead" legal_name = fields.Char( u'Razão Social', size=128, help="nome utilizado em documentos fiscais") cnpj = fields.Char('CNPJ', size=18) inscr_est = fields.Char('Inscr. Estadual/RG', size=16) inscr_mun = fields.Char('Inscr. Municipal', size=18) suframa = fields.Char('Suframa', size=18) l10n_br_city_id = fields.Many2one( 'l10n_br_base.city', 'Municipio', domain="[('state_id','=',state_id)]") district = fields.Char('Bairro', size=32) number = fields.Char(u'Número', size=10) name_surname = fields.Char(u'Nome e sobrenome', size=128, help="Nome utilizado em documentos fiscais") cpf = fields.Char('CPF', size=18) rg = fields.Char('RG', size=16) @api.multi @api.constrains('cnpj') def _check_cnpj(self): for record in self: country_code = record.country_id.code or '' if record.cnpj and country_code.upper() == 'BR': cnpj = re.sub('[^0-9]', '', record.cnpj) if not fiscal.validate_cnpj(cnpj): raise ValidationError(_(u'CNPJ inválido!')) return True @api.multi @api.constrains('cpf') def _check_cpf(self): for record in self: country_code = record.country_id.code or '' if record.cpf and country_code.upper() == 'BR': cpf = re.sub('[^0-9]', '', record.cpf) if not fiscal.validate_cpf(cpf): raise ValidationError(_(u'CPF inválido!')) return True @api.multi @api.constrains('inscr_est') def _check_ie(self): """Checks if company register number in field insc_est is valid, this method call others methods because this validation is State wise :Return: True or False. """ for record in self: result = True if record.inscr_est and record.cnpj and record.state_id: state_code = record.state_id.code or '' uf = state_code.lower() result = fiscal.validate_ie(uf, record.inscr_est) if not result: raise ValidationError(u"Inscrição Estadual Invalida!") @api.onchange('cnpj', 'country_id') def _onchange_cnpj(self): cnpj = None country_code = self.country_id.code or '' if self.cnpj and country_code.upper() == 'BR': val = re.sub('[^0-9]', '', self.cnpj) if len(val) == 14: cnpj = "%s.%s.%s/%s-%s" % ( val[0:2], val[2:5], val[5:8], val[8:12], val[12:14]) self.cnpj = cnpj @api.onchange('cpf', 'country_id')
[documentos] def onchange_mask_cpf(self): cpf = None country_code = self.country_id.code or '' if self.cpf and country_code.upper() == 'BR': val = re.sub('[^0-9]', '', self.cpf) if len(val) == 11: cpf = "%s.%s.%s-%s"\ % (val[0:3], val[3:6], val[6:9], val[9:11]) self.cpf = cpf
@api.onchange('l10n_br_city_id')
[documentos] def onchange_l10n_br_city_id(self): """ Ao alterar o campo l10n_br_city_id que é um campo relacional com o l10n_br_base.city que são os municípios do IBGE, copia o nome do município para o campo city que é o campo nativo do módulo base para manter a compatibilidade entre os demais módulos que usam o campo city. param int l10n_br_city_id: id do l10n_br_city_id digitado. return: dicionário com o nome e id do município. """ if self.l10n_br_city_id: self.city = self.l10n_br_city_id.name self.l10n_br_city_id = self.l10n_br_city_id
@api.onchange('zip') def _onchange_zip(self): if self.zip: val = re.sub('[^0-9]', '', self.zip) if len(val) == 8: self.zip = "%s-%s" % (val[0:5], val[5:8]) @api.multi
[documentos] def on_change_partner(self, partner_id): result = super(CrmLead, self).on_change_partner(partner_id) if partner_id: partner = self.pool.get('res.partner').browse(partner_id) result['value']['legal_name'] = partner.legal_name result['value']['cnpj_cpf'] = partner.cnpj_cpf result['value']['inscr_est'] = partner.inscr_est result['value']['suframa'] = partner.suframa result['value']['number'] = partner.number result['value']['district'] = partner.district result['value']['l10n_br_city_id'] = partner.l10n_br_city_id.id return result
@api.model def _lead_create_contact(self, lead, name, is_company, parent_id=False): result = super(CrmLead, self)._lead_create_contact( lead, name, is_company, parent_id) value = { 'number': lead.number, 'district': lead.district, 'l10n_br_city_id': lead.l10n_br_city_id.id } if is_company: value.update({ 'legal_name': lead.legal_name, 'cnpj_cpf': lead.cnpj, 'inscr_est': lead.inscr_est, 'inscr_mun': lead.inscr_mun, 'suframa': lead.suframa, }) else: value.update({ 'legal_name': lead.name_surname, 'cnpj_cpf': lead.cpf, 'inscr_est': lead.rg, }) if result: partner = self.env['res.partner'].browse(result) partner.write(value) return result