~alexandre-leitao/openerp.pt-br-localiz/7.0

« back to all changes in this revision

Viewing changes to l10n_br_account/partner.py

  • Committer: Raphaël Valyi
  • Date: 2010-10-25 23:08:39 UTC
  • Revision ID: rvalyi@gmail.com-20101025230839-fhn2n6qaa65dl95t
[REF] extracted l10n_br_base, l10n_sale and l10n_stock from l10n_br; renamed l10n_br into 10n_br_account. BE CAREFFUL WITH MIGRATIONS, HACK YOUR ir.model.data, XML files and module dependencies first!!

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
from osv import osv, fields
21
21
 
22
22
##############################################################################
23
 
# Parceiro Personalizado
24
 
##############################################################################
25
 
class res_partner(osv.osv):
26
 
    _inherit = 'res.partner'
27
 
    _columns = {
28
 
        'tipo_pessoa': fields.selection([('F', 'Física'), ('J', 'Jurídica')], 'Tipo de pessoa', required=True),
29
 
        'cnpj_cpf': fields.char('CNPJ/CPF', size=18),
30
 
        'inscr_est': fields.char('Inscr. Estadual', size=16),
31
 
        'inscr_mun': fields.char('Inscr. Municipal', size=18),
32
 
        'suframa': fields.char('Suframa', size=18),
33
 
        'legal_name' : fields.char('Razão Social', size=128, help="nome utilizado em documentos fiscais"),
34
 
        'partner_fiscal_type_id': fields.many2one('l10n_br.partner.fiscal.type', 'Tipo Fiscal do Parceiro'),
35
 
    }
36
 
 
37
 
    _defaults = {
38
 
        'tipo_pessoa': lambda *a: 'J',
39
 
    }
40
 
 
41
 
    def _check_cnpj_cpf(self, cr, uid, ids):
42
 
        partner = self.browse(cr, uid, ids)[0]
43
 
        if not partner.cnpj_cpf:
44
 
            return True
45
 
 
46
 
        if partner.tipo_pessoa == 'J':
47
 
            return self.validate_cnpj(partner.cnpj_cpf)
48
 
        elif partner.tipo_pessoa == 'F':
49
 
            return self.validate_cpf(partner.cnpj_cpf)
50
 
 
51
 
        return False
52
 
 
53
 
    def validate_cnpj(self, cnpj):
54
 
        # Limpando o cnpj
55
 
        if not cnpj.isdigit():
56
 
            import re
57
 
            cnpj = re.sub('[^0-9]', '', cnpj)
58
 
           
59
 
        # verificando o tamano do  cnpj
60
 
        if len(cnpj) != 14:
61
 
            return False
62
 
            
63
 
        # Pega apenas os 12 primeiros dígitos do CNPJ e gera os 2 dígitos que faltam
64
 
        cnpj= map(int, cnpj)
65
 
        novo = cnpj[:12]
66
 
 
67
 
        prod = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
68
 
        while len(novo) < 14:
69
 
            r = sum([x*y for (x, y) in zip(novo, prod)]) % 11
70
 
            if r > 1:
71
 
                f = 11 - r
72
 
            else:
73
 
                f = 0
74
 
            novo.append(f)
75
 
            prod.insert(0, 6)
76
 
 
77
 
        # Se o número gerado coincidir com o número original, é válido
78
 
        if novo == cnpj:
79
 
            return True
80
 
            
81
 
        return False
82
 
    
83
 
    def validate_cpf(self, cpf):           
84
 
        if not cpf.isdigit():
85
 
            import re
86
 
            cpf = re.sub('[^0-9]', '', cpf)
87
 
 
88
 
        if len(cpf) != 11:
89
 
            return False
90
 
 
91
 
        # Pega apenas os 9 primeiros dígitos do CPF e gera os 2 dígitos que faltam
92
 
        cpf = map(int, cpf)
93
 
        novo = cpf[:9]
94
 
 
95
 
        while len(novo) < 11:
96
 
            r = sum([(len(novo)+1-i)*v for i,v in enumerate(novo)]) % 11
97
 
 
98
 
            if r > 1:
99
 
                f = 11 - r
100
 
            else:
101
 
                f = 0
102
 
            novo.append(f)
103
 
 
104
 
        # Se o número gerado coincidir com o número original, é válido
105
 
        if novo == cpf:
106
 
            return True
107
 
            
108
 
        return False
109
 
 
110
 
    _constraints = [(_check_cnpj_cpf, 'CNPJ/CPF invalido!', ['cnpj_cpf'])]
111
 
 
112
 
    def on_change_mask_cnpj_cpf(self, cr, uid, ids, tipo_pessoa, cnpj_cpf):
113
 
        if not cnpj_cpf or not tipo_pessoa:
114
 
            return {}
115
 
 
116
 
        import re
117
 
        val = re.sub('[^0-9]', '', cnpj_cpf)
118
 
 
119
 
        if tipo_pessoa == 'J' and len(val) == 14:            
120
 
            cnpj_cpf = "%s.%s.%s/%s-%s" % (val[0:2], val[2:5], val[5:8], val[8:12], val[12:14])
121
 
        
122
 
        elif tipo_pessoa == 'F' and len(val) == 11:
123
 
            cnpj_cpf = "%s.%s.%s-%s" % (val[0:3], val[3:6], val[6:9], val[9:11])
124
 
        
125
 
        return {'value': {'tipo_pessoa': tipo_pessoa, 'cnpj_cpf': cnpj_cpf}}
126
 
    
127
 
    def zip_search(self, cr, uid, ids, context={}):
128
 
        return True    
129
 
    
130
 
res_partner()
131
 
 
132
 
##############################################################################
133
 
# Contato do Parceiro Personalizado
134
 
##############################################################################
135
 
class res_partner_address(osv.osv):
136
 
    _inherit = 'res.partner.address'
137
 
    _columns = {
138
 
        'city_id': fields.many2one('l10n_br.city', 'Municipio', domain="[('state_id','=',state_id)]"),
139
 
    'number': fields.char('Número', size=10),
140
 
    }
141
 
 
142
 
    def on_change_city_id(self, cr, uid, ids, city_id):
143
 
        
144
 
        result = {'value': {'city': None}}
145
 
 
146
 
        if not city_id:
147
 
            return result
148
 
 
149
 
        obj_city = self.pool.get('l10n_br.city').read(cr, uid, city_id, ['name'])
150
 
        
151
 
        if obj_city:
152
 
            result['value'] = {'city': obj_city['name']}
153
 
        
154
 
        return result
155
 
 
156
 
    def on_change_zip(self, cr, uid, ids, zip):
157
 
        
158
 
        result = {'value': {'street': None, 'city_id': None, 'city': None, 'state_id': None, 'country_id': None, 'zip': None }}
159
 
 
160
 
        if not zip:
161
 
            return result
162
 
        
163
 
        obj_cep = self.pool.get('l10n_br.cep').browse(cr, uid, zip)
164
 
        
165
 
        print obj_cep
166
 
        result['value']['street'] = obj_cep.street_type + ' ' + obj_cep.street
167
 
        result['value']['city_id'] = obj_cep.city_id.id
168
 
        result['value']['city'] = obj_cep.city_id.name
169
 
        result['value']['state_id'] = obj_cep.state_id.id
170
 
        result['value']['country_id'] = obj_cep.state_id.country_id.id
171
 
        result['value']['zip'] = obj_cep.code
172
 
        
173
 
        return result
174
 
 
175
 
res_partner_address()
176
 
 
177
 
##############################################################################
178
23
# Posição Fiscal Personalizada
179
24
##############################################################################
180
25
class account_fiscal_position(osv.osv):