Merge lp:~fnegrini/openerp.pt-br-localiz/openerp.pt-br-localiz into lp:~openerp-brazil-core-team/openerp.pt-br-localiz/openerp.pt-br-localiz-v7.0

Proposed by Fabio Negrini
Status: Superseded
Proposed branch: lp:~fnegrini/openerp.pt-br-localiz/openerp.pt-br-localiz
Merge into: lp:~openerp-brazil-core-team/openerp.pt-br-localiz/openerp.pt-br-localiz-v7.0
Diff against target: 980 lines (+576/-181)
14 files modified
l10n_br_crm/crm_lead_view.xml (+3/-6)
l10n_br_crm/crm_opportunity_view.xml (+3/-6)
l10n_br_crm_zip/__init__.py (+21/-0)
l10n_br_crm_zip/__openerp__.py (+39/-0)
l10n_br_crm_zip/crm_lead.py (+75/-0)
l10n_br_crm_zip/crm_lead_view.xml (+19/-0)
l10n_br_crm_zip/crm_opportunity_view.xml (+19/-0)
l10n_br_data_zip/__openerp__.py (+3/-3)
l10n_br_data_zip/l10n_br_data_zip.py (+138/-4)
l10n_br_data_zip/l10n_br_data_zip_view.xml (+3/-1)
l10n_br_data_zip/res_partner.py (+42/-82)
l10n_br_data_zip/res_partner_view.xml (+1/-1)
l10n_br_data_zip/wizard/l10n_br_data_zip_search.py (+175/-72)
l10n_br_data_zip/wizard/l10n_br_data_zip_search_view.xml (+35/-6)
To merge this branch: bzr merge lp:~fnegrini/openerp.pt-br-localiz/openerp.pt-br-localiz
Reviewer Review Type Date Requested Status
Renato Lima - http://www.akretion.com Needs Resubmitting
Fabio Negrini Needs Resubmitting
Raphaël Valyi - http://www.akretion.com Pending
Review via email: mp+152671@code.launchpad.net

This proposal supersedes a proposal from 2013-03-08.

This proposal has been superseded by a proposal from 2013-03-15.

Description of the change

Migração do módulo ZIP e com novas funcionalidades.
Bug de não atualizar os dados do parceiro após a seleção corrigido

To post a comment you must log in.
Revision history for this message
Fabio Negrini (fnegrini) wrote : Posted in a previous version of this proposal

Ainda não está 100% quando há um retorno do wizard, mas pode melhorar até o release final.

review: Approve
Revision history for this message
Fabio Negrini (fnegrini) wrote :

Agora os dados do parceiro são atualizados imediatamente mesmo quando é aberto o wizard

review: Approve
514. By root <root@ubuntu-desktop>

CRM convertido. Novo modulo l10n_br_crm_zip.

515. By root <root@ubuntu-desktop>

Novo modulo l10n_br_crm_zip

Revision history for this message
Renato Lima - http://www.akretion.com (renatonlima) wrote :

Olá Fabio,

Mais uma vez obrigado pela contribuição, eu fiz alguns testes e existe um problema, eu tinha colocado no wizard de busca duas tela, uma com os campos do endereço principais obrigatórios para as pessoas preencherem esses campos antes da busca do ceps para reduzir o resultado da busca, porque os campos no endereço do parceiro são obrigatórios e como você eliminou no wizard a tela com os campos obrigatórios de endereço e esta pegando diretamente os campos do parceiros para aparecer o resultado diretamente (o que achei interessante), existe um problema que se você não preencher os campos do endereço como pais, estado, municio, bairro e endereço, o wizard tenta trazer todos os ceps e como a base de cep tem alguns mil registro, acaba trabando o OpenERP.

Neste casso eu sugiro no método de busca você conferir se ao pressionar o botão de busca pelo menos esses campos pais, estado, municio, bairro ou endereço ou cep estão preenchidos, caso não estejam preenchidos você pode fazer o raise falando que para busca pelo menos esses campos devem ser preenchido, uma outra solução e também no método search do cep verificar se há mais de 80 ou 100 elementos na lista com os IDs caso tenha mais você pode cortar a lista e trazer somente os 80 ou 100 primeiros

review: Needs Fixing
516. By root <root@ubuntu-desktop>

corrigido bug de tentar trazer todos os ceps. Obrigatório Estado, Município e Logradouro

Revision history for this message
Fabio Negrini (fnegrini) wrote :

Renato,

Criei uma excessão para impedir este tipo de busca. Baixe a revno 516 e pde testar novamente.

review: Needs Resubmitting
Revision history for this message
Renato Lima - http://www.akretion.com (renatonlima) wrote :

Olá Fabio,

No arquivo l10n_br_data_zip.py no inicio do arquivo você deve importar:
from openerp.tools.translate import _

Na linha onde esta:
raise osv.except_osv('Parametros insuficientes',
                                       'Necessário informar Estado, município e logradouro')

Deveria ficar assim:

l10n_br_data_zip

raise osv.except_osv(_'Parametros insuficientes',
    _'Necessário informar Estado, município e logradouro')

review: Needs Resubmitting
517. By root <root@ubuntu-desktop>

Chamada da excessão agora permite tradução. Revisão nas views do CRM

Revision history for this message
Fabio Negrini (fnegrini) wrote :

Renato,

Chamada de excessão alterada para permitir tradução.
Aproveito para informar que a branch também já está com o módulo l10n_br_crm convertido e o novo módulo l10n_br_crm_zip que integra a busca por cep nos prospectos e oportunidades do CRM. Importante testar antes de proceder com o merge.

Revno 517

Abs,

Fabio

review: Needs Resubmitting
Revision history for this message
Renato Lima - http://www.akretion.com (renatonlima) wrote :

Olá Fábio,

Eu testei a revisão #517 e existe um problema de encoding se você digitar uma rua, bairro ou complemento usando por exemplo: "ç" gera um erro. Eu não tive tenho de olhar com detalhes, mas parece que o problema esta quando você procura o CEP no método search ou quando você volta o resultado da busca do cep para o endereço do parceiro.

review: Needs Resubmitting
Revision history for this message
Fabio Negrini (fnegrini) wrote :

Renato,

Não consegui reproduzir o Erro. Fiz vários testes e todos retornaram sem problemas. Um dos testes que fiz foi fazer a seguinte busca:
Endereço: José
Bairro: Ahú
Cidade: Curitiba
Estado: Paraná

A busca retorna três endereços listados pelo Wizard. Testei o retorno dos três e todos funcionaram corretamente. Tem como passar um passo-a-passo para reproduzir o erro?

Abs,

Fabio

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'l10n_br_crm/crm_lead_view.xml'
--- l10n_br_crm/crm_lead_view.xml 2013-01-03 04:21:33 +0000
+++ l10n_br_crm/crm_lead_view.xml 2013-03-13 12:27:20 +0000
@@ -12,17 +12,14 @@
12 <field name="city" invisible="1" />12 <field name="city" invisible="1" />
13 </field>13 </field>
14 <field name="state_id" position="replace">14 <field name="state_id" position="replace">
15 <field name="state_id" />15 <field name="state_id" placeholder="estado"/>
16 <field name="l10n_br_city_id" placeholder="municipio" on_change="onchange_l10n_br_city_id(l10n_br_city_id)" />16 <field name="l10n_br_city_id" placeholder="municipio"/>
17 </field>17 </field>
18 <field name="street2" position="replace">18 <field name="street2" position="replace">
19 <field name="district" placeholder="bairro"/>
19 <field name="number" placeholder="numero"/>20 <field name="number" placeholder="numero"/>
20 <field name="street2" placeholder="complemento"/>21 <field name="street2" placeholder="complemento"/>
21 </field>22 </field>
22 <!-- FIXME field name="zip" position="replace">
23 <field name="zip" on_change="onchange_mask_zip(zip)" />
24 <button name="zip_search" string="Pesquisar CEP" colspan="2" type="object" icon="gtk-select-all"/>
25 </field -->
26 </field>23 </field>
27 </record>24 </record>
28 25
2926
=== modified file 'l10n_br_crm/crm_opportunity_view.xml'
--- l10n_br_crm/crm_opportunity_view.xml 2013-01-03 04:21:33 +0000
+++ l10n_br_crm/crm_opportunity_view.xml 2013-03-13 12:27:20 +0000
@@ -12,17 +12,14 @@
12 <field name="city" invisible="1" />12 <field name="city" invisible="1" />
13 </field>13 </field>
14 <field name="state_id" position="replace">14 <field name="state_id" position="replace">
15 <field name="state_id" />15 <field name="state_id" placeholder="estado"/>
16 <field name="l10n_br_city_id" placeholder="municipio" on_change="onchange_l10n_br_city_id(l10n_br_city_id)" />16 <field name="l10n_br_city_id" placeholder="municipio" />
17 </field>17 </field>
18 <field name="street2" position="replace">18 <field name="street2" position="replace">
19 <field name="district" placeholder="bairro"/>
19 <field name="number" placeholder="numero" />20 <field name="number" placeholder="numero" />
20 <field name="street2" placeholder="complemento" />21 <field name="street2" placeholder="complemento" />
21 </field>22 </field>
22 <!-- FIXME field name="zip" position="replace">
23 <field name="zip" on_change="onchange_mask_zip(zip)" />
24 <button name="zip_search" string="Pesquisar CEP" colspan="2" type="object" icon="gtk-select-all"/>
25 </field -->
26 </field>23 </field>
27 </record>24 </record>
28 25
2926
=== added directory 'l10n_br_crm_zip'
=== added file 'l10n_br_crm_zip/__init__.py'
--- l10n_br_crm_zip/__init__.py 1970-01-01 00:00:00 +0000
+++ l10n_br_crm_zip/__init__.py 2013-03-13 12:27:20 +0000
@@ -0,0 +1,21 @@
1# -*- encoding: utf-8 -*-
2###############################################################################
3# #
4# Copyright (C) 2011 Renato Lima - Akretion #
5# #
6#This program is free software: you can redistribute it and/or modify #
7#it under the terms of the GNU Affero General Public License as published by #
8#the Free Software Foundation, either version 3 of the License, or #
9#(at your option) any later version. #
10# #
11#This program is distributed in the hope that it will be useful, #
12#but WITHOUT ANY WARRANTY; without even the implied warranty of #
13#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14#GNU Affero General Public License for more details. #
15# #
16#You should have received a copy of the GNU Affero General Public License #
17#along with this program. If not, see <http://www.gnu.org/licenses/>. #
18###############################################################################
19
20import crm_lead
21
022
=== added file 'l10n_br_crm_zip/__openerp__.py'
--- l10n_br_crm_zip/__openerp__.py 1970-01-01 00:00:00 +0000
+++ l10n_br_crm_zip/__openerp__.py 2013-03-13 12:27:20 +0000
@@ -0,0 +1,39 @@
1# -*- encoding: utf-8 -*-
2###############################################################################
3# #
4# Copyright (C) 2011 Fabio Negrini - Akretion #
5# #
6#This program is free software: you can redistribute it and/or modify #
7#it under the terms of the GNU Affero General Public License as published by #
8#the Free Software Foundation, either version 3 of the License, or #
9#(at your option) any later version. #
10# #
11#This program is distributed in the hope that it will be useful, #
12#but WITHOUT ANY WARRANTY; without even the implied warranty of #
13#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14#GNU Affero General Public License for more details. #
15# #
16#You should have received a copy of the GNU Affero General Public License #
17#along with this program. If not, see <http://www.gnu.org/licenses/>. #
18###############################################################################
19
20{
21 'name': 'CRM ZIP',
22 'description': 'ZIP Search Integration for Brazilian Localization of CRM module',
23 'category': 'Localization',
24 'license': 'AGPL-3',
25 'author': 'Fabio Negrini - OpenERP Brasil',
26 'website': 'http://openerpbrasil.org',
27 'version': '0.6',
28 'depends': [
29 'l10n_br_data_zip',
30 'l10n_br_crm',
31 ],
32 'data': [
33 'crm_lead_view.xml',
34 'crm_opportunity_view.xml',
35 ],
36 'demo': [],
37 'installable': True,
38 'auto_install': True,
39}
040
=== added file 'l10n_br_crm_zip/crm_lead.py'
--- l10n_br_crm_zip/crm_lead.py 1970-01-01 00:00:00 +0000
+++ l10n_br_crm_zip/crm_lead.py 2013-03-13 12:27:20 +0000
@@ -0,0 +1,75 @@
1# -*- encoding: utf-8 -*-
2###############################################################################
3# #
4# Copyright (C) 2012 Renato Lima - Akretion #
5# #
6#This program is free software: you can redistribute it and/or modify #
7#it under the terms of the GNU Affero General Public License as published by #
8#the Free Software Foundation, either version 3 of the License, or #
9#(at your option) any later version. #
10# #
11#This program is distributed in the hope that it will be useful, #
12#but WITHOUT ANY WARRANTY; without even the implied warranty of #
13#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14#GNU Affero General Public License for more details. #
15# #
16#You should have received a copy of the GNU Affero General Public License #
17#along with this program. If not, see <http://www.gnu.org/licenses/>. #
18###############################################################################
19
20from openerp.osv import fields, osv
21
22
23class crm_lead(osv.Model):
24 """ CRM Lead Case """
25 _inherit = "crm.lead"
26
27
28 def zip_search(self, cr, uid, ids, context=None):
29
30 obj_zip = self.pool.get('l10n_br_data.zip')
31
32 for crm_lead in self.browse(cr, uid, ids):
33
34 zip_ids = obj_zip.zip_search_multi(cr, uid, ids, context,
35 country_id = crm_lead.country_id.id, \
36 state_id = crm_lead.state_id.id, \
37 l10n_br_city_id = crm_lead.l10n_br_city_id.id, \
38 district = crm_lead.district, \
39 street = crm_lead.street, \
40 zip = crm_lead.zip,
41 )
42
43 if len(zip_ids) == 1:
44
45 zip_read = obj_zip.set_result(cr, uid, ids, context, zip_ids[0])
46
47 result = {
48 'country_id': zip_read['country_id'],
49 'state_id': zip_read['state_id'],
50 'l10n_br_city_id': zip_read['l10n_br_city_id'],
51 'district': zip_read['district'],
52 'street': zip_read['street'],
53 'zip': zip_read['zip'],
54 }
55
56 self.write(cr, uid, crm_lead.id, result)
57
58 return True
59
60 else:
61
62 if len(zip_ids) > 1:
63
64 return obj_zip.create_wizard(cr, uid, ids, context, self._name,
65 country_id = crm_lead.country_id.id, \
66 state_id = crm_lead.state_id.id, \
67 l10n_br_city_id = crm_lead.l10n_br_city_id.id, \
68 district = crm_lead.district, \
69 street = crm_lead.street, \
70 zip = crm_lead.zip,
71 zip_ids = zip_ids
72 )
73 else:
74
75 return True
0\ No newline at end of file76\ No newline at end of file
177
=== added file 'l10n_br_crm_zip/crm_lead_view.xml'
--- l10n_br_crm_zip/crm_lead_view.xml 1970-01-01 00:00:00 +0000
+++ l10n_br_crm_zip/crm_lead_view.xml 2013-03-13 12:27:20 +0000
@@ -0,0 +1,19 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4
5 <!-- CRM Lead Form View -->
6 <record model="ir.ui.view" id="l10n_br_crm_case_form_view_leads1">
7 <field name="name">l10n_br_crm.leads1</field>
8 <field name="model">crm.lead</field>
9 <field name="inherit_id" ref="crm.crm_case_form_view_leads" />
10 <field name="arch" type="xml">
11 <field name="zip" position="replace">
12 <field name="zip"/>
13 <button name="zip_search" string="Buscar Endereço" colspan="2" type="object" icon="gtk-select-all"/>
14 </field>
15 </field>
16 </record>
17
18 </data>
19</openerp>
020
=== added file 'l10n_br_crm_zip/crm_opportunity_view.xml'
--- l10n_br_crm_zip/crm_opportunity_view.xml 1970-01-01 00:00:00 +0000
+++ l10n_br_crm_zip/crm_opportunity_view.xml 2013-03-13 12:27:20 +0000
@@ -0,0 +1,19 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4
5 <!-- CRM Opportunity Form View -->
6 <record model="ir.ui.view" id="l10n_br_crm_case_form_view_oppor1">
7 <field name="name">l10n_br_crm.opportunities1</field>
8 <field name="model">crm.lead</field>
9 <field name="inherit_id" ref="crm.crm_case_form_view_oppor" />
10 <field name="arch" type="xml">
11 <field name="zip" position="replace">
12 <field name="zip"/>
13 <button name="zip_search" string="Buscar Endereço" colspan="2" type="object" icon="gtk-select-all"/>
14 </field>
15 </field>
16 </record>
17
18 </data>
19</openerp>
020
=== modified file 'l10n_br_data_zip/__openerp__.py'
--- l10n_br_data_zip/__openerp__.py 2013-02-11 15:51:01 +0000
+++ l10n_br_data_zip/__openerp__.py 2013-03-13 12:27:20 +0000
@@ -19,7 +19,7 @@
1919
20{20{
21 'name': 'Brazilian Localisation Data Extension for zip codes',21 'name': 'Brazilian Localisation Data Extension for zip codes',
22 'description': 'Brazilian Localisation Data Extension for zip codes',22 'description': 'Brazilian Localization Data Extension for zip codes',
23 'license': 'AGPL-3',23 'license': 'AGPL-3',
24 'author': 'Akretion, OpenERP Brasil',24 'author': 'Akretion, OpenERP Brasil',
25 'version': '0.1',25 'version': '0.1',
@@ -27,14 +27,14 @@
27 'l10n_br_base',27 'l10n_br_base',
28 ],28 ],
29 'data': [29 'data': [
30 'zip.sql'30 'zip.sql',
31 'l10n_br_data_zip_view.xml',31 'l10n_br_data_zip_view.xml',
32 'res_partner_view.xml',32 'res_partner_view.xml',
33 'wizard/l10n_br_data_zip_search_view.xml',33 'wizard/l10n_br_data_zip_search_view.xml',
34 'security/ir.model.access.csv',34 'security/ir.model.access.csv',
35 ],35 ],
36 'demo': [],36 'demo': [],
37 'category': 'Localisation',37 'category': 'Localization',
38 'active': False,38 'active': False,
39 'installable': True39 'installable': True
40}40}
4141
=== modified file 'l10n_br_data_zip/l10n_br_data_zip.py'
--- l10n_br_data_zip/l10n_br_data_zip.py 2013-01-19 00:22:49 +0000
+++ l10n_br_data_zip/l10n_br_data_zip.py 2013-03-13 12:27:20 +0000
@@ -16,9 +16,9 @@
16#You should have received a copy of the GNU Affero General Public License #16#You should have received a copy of the GNU Affero General Public License #
17#along with this program. If not, see <http://www.gnu.org/licenses/>. #17#along with this program. If not, see <http://www.gnu.org/licenses/>. #
18###############################################################################18###############################################################################
1919import re
20from osv import osv, fields20from openerp.osv import osv, fields
2121from openerp.tools.translate import _
2222
23class l10n_br_data_zip(osv.Model):23class l10n_br_data_zip(osv.Model):
24 """ Este objeto persiste todos os códigos postais que podem ser24 """ Este objeto persiste todos os códigos postais que podem ser
@@ -37,5 +37,139 @@
37 domain="[('country_id','=',country_id)]"),37 domain="[('country_id','=',country_id)]"),
38 'l10n_br_city_id': fields.many2one(38 'l10n_br_city_id': fields.many2one(
39 'l10n_br_base.city', 'Cidade',39 'l10n_br_base.city', 'Cidade',
40 required=True, domain="[('state_id','=',state_id)]")40 required=True, domain="[('state_id','=',state_id)]"),
41 }41 }
42
43 def set_domain(self, country_id=False, state_id=False, l10n_br_city_id=False, district=False, street=False, zip=False):
44
45 domain = []
46
47 if zip:
48 new_zip = re.sub('[^0-9]', '', zip or '')
49 domain.append(('code', '=', new_zip))
50 else:
51
52 if state_id == False or \
53 l10n_br_city_id == False or\
54 len(street or '') == 0:
55 raise osv.except_osv(_('Parametros insuficientes'),
56 _('Necessário informar Estado, município e logradouro'))
57
58 if country_id:
59 domain.append(('country_id', '=', country_id))
60
61 if state_id:
62 domain.append(('state_id', '=', state_id))
63
64 if l10n_br_city_id:
65 domain.append(('l10n_br_city_id', '=', l10n_br_city_id))
66
67 if district:
68 domain.append(('district', 'like', district))
69
70 if street:
71 domain.append(('street', 'like', street))
72
73 return domain
74
75 def set_result(self, cr, uid, ids, context, zip_id=None):
76
77 result = {
78 'country_id': False,
79 'state_id': False,
80 'l10n_br_city_id': False,
81 'district': False,
82 'street': False,
83 'zip': False
84 }
85
86 if zip_id != None:
87
88 zip_read = self.read(cr, uid, zip_id, [
89 'street_type',
90 'street',
91 'district',
92 'code',
93 'l10n_br_city_id',
94 'state_id',
95 'country_id'
96 ],
97 context=context)
98
99 zip = zip_read['code']
100
101 if len(zip) == 8:
102 zip = '%s-%s' % (zip[0:5], zip[5:8])
103
104 result = {
105 'country_id': zip_read['country_id'] and zip_read['country_id'][0] or False,
106 'state_id': zip_read['state_id'] and zip_read['state_id'][0] or False,
107 'l10n_br_city_id': zip_read['l10n_br_city_id'] and zip_read['l10n_br_city_id'][0] or False,
108 'district': (zip_read['district'] or ''),
109 'street': ((zip_read['street_type'] or '') + ' ' + (zip_read['street'] or '')),
110 'zip': zip,
111 }
112
113 return result
114
115
116 def zip_search_multi(self, cr, uid, ids, context, country_id=False, state_id=False, l10n_br_city_id=False, district=False, street=False, zip=False):
117
118 domain = self.set_domain(country_id = country_id,
119 state_id = state_id,
120 l10n_br_city_id = l10n_br_city_id,
121 district = district,
122 street = street,
123 zip = zip)
124
125 zip_id = self.search(cr, uid, domain)
126
127 return zip_id
128
129 def zip_search(self, cr, uid, ids, context, country_id=False, state_id=False, l10n_br_city_id=False, district=False, street=False, zip=False):
130
131 result = self.set_result(cr, uid, ids, context)
132
133 zip_id = self.zip_search_multi(cr, uid, ids, context,
134 country_id,
135 state_id,
136 l10n_br_city_id,
137 district,
138 street,
139 zip)
140
141 if len(zip_id) == 1:
142
143 result = self.set_result(cr, uid, ids, context, zip_id[0])
144
145 return result
146
147 else:
148
149 return False
150
151 def create_wizard(self, cr, uid, ids, context, object_name, country_id=False, state_id=False, l10n_br_city_id=False, district=False, street=False, zip=False, zip_ids=False):
152
153 context.update({'zip': zip,
154 'street': street,
155 'district': district,
156 'country_id': country_id,
157 'state_id': state_id,
158 'l10n_br_city_id': l10n_br_city_id,
159 'zip_ids': zip_ids,
160 'address_id': ids[0],
161 'object_name': object_name})
162
163 result = {
164 'name': 'Zip Search',
165 'view_type': 'form',
166 'view_mode': 'form',
167 'res_model': 'l10n_br_data.zip.search',
168 'view_id': False,
169 'context': context,
170 'type': 'ir.actions.act_window',
171 'target': 'new',
172 'nodestroy': True,
173 }
174
175 return result
42176
=== modified file 'l10n_br_data_zip/l10n_br_data_zip_view.xml'
--- l10n_br_data_zip/l10n_br_data_zip_view.xml 2012-12-11 04:31:17 +0000
+++ l10n_br_data_zip/l10n_br_data_zip_view.xml 2013-03-13 12:27:20 +0000
@@ -8,6 +8,7 @@
8 <field name="arch" type="xml">8 <field name="arch" type="xml">
9 <tree string="CEPs">9 <tree string="CEPs">
10 <field name="code" select="1"/>10 <field name="code" select="1"/>
11 <field name="district" select="1"/>
11 <field name="street_type" select="1"/>12 <field name="street_type" select="1"/>
12 <field name="street" select="1"/>13 <field name="street" select="1"/>
13 </tree>14 </tree>
@@ -29,7 +30,8 @@
29 </form>30 </form>
30 </field>31 </field>
31 </record>32 </record>
32 33
34
33 <record model="ir.actions.act_window" id="action_l10n_br_data_zip">35 <record model="ir.actions.act_window" id="action_l10n_br_data_zip">
34 <field name="name">CEPs</field>36 <field name="name">CEPs</field>
35 <field name="type">ir.actions.act_window</field>37 <field name="type">ir.actions.act_window</field>
3638
=== modified file 'l10n_br_data_zip/res_partner.py'
--- l10n_br_data_zip/res_partner.py 2013-01-20 23:42:40 +0000
+++ l10n_br_data_zip/res_partner.py 2013-03-13 12:27:20 +0000
@@ -18,97 +18,57 @@
18###############################################################################18###############################################################################
1919
20import re20import re
21from osv import osv21from openerp.osv import osv
2222
2323
24class res_partner(osv.Model):24class res_partner(osv.Model):
25 _inherit = 'res.partner'25 _inherit = 'res.partner'
2626
27 #TODO migrate
28 def zip_search(self, cr, uid, ids, context=None):27 def zip_search(self, cr, uid, ids, context=None):
2928
30 result = {
31 'street': False,
32 'l10n_br_city_id': False,
33 'city': False,
34 'state_id': False,
35 'country_id': False,
36 'zip': False
37 }
38
39 obj_zip = self.pool.get('l10n_br_data.zip')29 obj_zip = self.pool.get('l10n_br_data.zip')
4030
41 for res_partner in self.browse(cr, uid, ids):31 for res_partner in self.browse(cr, uid, ids):
32
33 zip_ids = obj_zip.zip_search_multi(cr, uid, ids, context,
34 country_id = res_partner.country_id.id, \
35 state_id = res_partner.state_id.id, \
36 l10n_br_city_id = res_partner.l10n_br_city_id.id, \
37 district = res_partner.district, \
38 street = res_partner.street, \
39 zip = res_partner.zip,
40 )
41
42 if len(zip_ids) == 1:
43
44 zip_read = obj_zip.set_result(cr, uid, ids, context, zip_ids[0])
4245
43 domain = []46 result = {
44 if res_partner.zip:47 'country_id': zip_read['country_id'],
45 zip = re.sub('[^0-9]', '', res_partner.zip or '')48 'state_id': zip_read['state_id'],
46 domain.append(('code', '=', zip))49 'l10n_br_city_id': zip_read['l10n_br_city_id'],
50 'district': zip_read['district'],
51 'street': zip_read['street'],
52 'zip': zip_read['zip'],
53 }
54
55 self.write(cr, uid, res_partner.id, result)
56
57 return True
58
47 else:59 else:
48 domain.append(('street', '=', res_partner.street))60
49 domain.append(('district', '=', res_partner.district))61 if len(zip_ids) > 1:
50 domain.append(('country_id', '=', \62
51 res_partner.country_id.id))63 return obj_zip.create_wizard(cr, uid, ids, context, self._name,
52 domain.append(('state_id', '=', \64 country_id = res_partner.country_id.id, \
53 res_partner.state_id.id))65 state_id = res_partner.state_id.id, \
54 domain.append(('l10n_br_city_id', '=', \66 l10n_br_city_id = res_partner.l10n_br_city_id.id, \
55 res_partner.l10n_br_city_id.id))67 district = res_partner.district, \
5668 street = res_partner.street, \
57 zip_id = obj_zip.search(cr, uid, domain)69 zip = res_partner.zip,
5870 zip_ids = zip_ids
59 if not len(zip_id) == 1:71 )
6072 else:
61 context.update({73
62 'zip': res_partner.zip,74 return True
63 'street': res_partner.street,
64 'district': res_partner.district,
65 'country_id': \
66 res_partner.country_id.id,
67 'state_id': res_partner.state_id.id,
68 'l10n_br_city_id': \
69 res_partner.l10n_br_city_id.id,
70 'address_id': ids,
71 'object_name': self._name,
72 })
73
74 result = {
75 'name': 'Zip Search',
76 'view_type': 'form',
77 'view_mode': 'form',
78 'res_model': 'l10n_br_data.zip.search',
79 'view_id': False,
80 'context': context,
81 'type': 'ir.actions.act_window',
82 'target': 'new',
83 'nodestroy': True,
84 }
85 return result
86
87 zip_read = obj_zip.read(cr, uid, zip_id, [
88 'street_type',
89 'street', 'district',
90 'code',
91 'l10n_br_city_id',
92 'city', 'state_id',
93 'country_id'
94 ],
95 context=context)[0]
96
97 zip = re.sub('[^0-9]', '', zip_read['code'] or '')
98 if len(zip) == 8:
99 zip = '%s-%s' % (zip[0:5], zip[5:8])
100
101 result['street'] = ((zip_read['street_type'] or '') + ' ' \
102 + (zip_read['street'] or ''))
103 result['district'] = zip_read['district']
104 result['zip'] = zip
105 result['l10n_br_city_id'] = zip_read['l10n_br_city_id'] \
106 and zip_read['l10n_br_city_id'][0] or False
107 result['city'] = zip_read['l10n_br_city_id'] \
108 and zip_read['l10n_br_city_id'][1] or ''
109 result['state_id'] = zip_read['state_id'] \
110 and zip_read['state_id'][0] or False
111 result['country_id'] = zip_read['country_id'] \
112 and zip_read['country_id'][0] or False
113 self.write(cr, uid, res_partner.id, result)
114 return False
11575
=== modified file 'l10n_br_data_zip/res_partner_view.xml'
--- l10n_br_data_zip/res_partner_view.xml 2012-12-11 04:31:17 +0000
+++ l10n_br_data_zip/res_partner_view.xml 2013-03-13 12:27:20 +0000
@@ -10,7 +10,7 @@
10 <field name="arch" type="xml">10 <field name="arch" type="xml">
11 <field name="zip" position="replace">11 <field name="zip" position="replace">
12 <field name="zip" placeholder="ZIP" on_change="onchange_mask_zip(zip)"/>12 <field name="zip" placeholder="ZIP" on_change="onchange_mask_zip(zip)"/>
13 <button name="zip_search" string="Pesquisar CEP" type="object"/>13 <button name="zip_search" string="Buscar Endereço" type="object"/>
14 </field>14 </field>
15 </field>15 </field>
16 </record>16 </record>
1717
=== modified file 'l10n_br_data_zip/wizard/l10n_br_data_zip_search.py'
--- l10n_br_data_zip/wizard/l10n_br_data_zip_search.py 2013-01-03 04:21:33 +0000
+++ l10n_br_data_zip/wizard/l10n_br_data_zip_search.py 2013-03-13 12:27:20 +0000
@@ -20,13 +20,16 @@
20import re20import re
21import string21import string
2222
23from osv import osv, fields23from openerp.osv import osv, fields
2424
2525
26class l10n_br_data_zip_search(osv.osv_memory):26
27class l10n_br_data_zip_search(osv.TransientModel):
28
27 _name = 'l10n_br_data.zip.search'29 _name = 'l10n_br_data.zip.search'
30
28 _description = 'Zipcode Search'31 _description = 'Zipcode Search'
29 #_inherit = 'ir.wizard.screen'32
30 _columns = {33 _columns = {
31 'code': fields.char('CEP', size=8),34 'code': fields.char('CEP', size=8),
32 'street': fields.char('Logradouro', size=72),35 'street': fields.char('Logradouro', size=72),
@@ -38,15 +41,28 @@
38 'l10n_br_city_id': fields.many2one(41 'l10n_br_city_id': fields.many2one(
39 'l10n_br_base.city', 'Cidade',42 'l10n_br_base.city', 'Cidade',
40 domain="[('state_id','=',state_id)]"),43 domain="[('state_id','=',state_id)]"),
41 'zip_ids': fields.many2many('l10n_br_data.zip','zip_search',44
45 'zip_ids': fields.many2many('l10n_br_data.zip.result','zip_search',
42 'zip_id', 'zip_search_id', 'CEP',46 'zip_id', 'zip_search_id', 'CEP',
43 readonly=True),47 readonly=False),
48
44 'state':fields.selection([('init','init'),49 'state':fields.selection([('init','init'),
45 ('done','done')], 'state', readonly=True)}50 ('done','done')], 'state', readonly=True),
51 'address_id': fields.integer('Id do objeto', invisible=True),
52 'object_name': fields.char('Nome do bjeto', size=100, invisible=True),
53 }
46 54
47 _defaults = {55 _defaults = {
48 'state': 'init'}56 'state': 'init'}
4957
58 def create(self, cr, uid, vals, context):
59
60 result = super(l10n_br_data_zip_search, self).create(cr, uid, vals, context)
61
62 context.update({'search_id': result})
63
64 return result
65
50 def default_get(self, cr, uid, fields_list, context=None):66 def default_get(self, cr, uid, fields_list, context=None):
51 67
52 if context is None:68 if context is None:
@@ -61,78 +77,165 @@
61 data['country_id'] = context.get('country_id', False)77 data['country_id'] = context.get('country_id', False)
62 data['state_id'] = context.get('state_id', False)78 data['state_id'] = context.get('state_id', False)
63 data['l10n_br_city_id'] = context.get('l10n_br_city_id', False)79 data['l10n_br_city_id'] = context.get('l10n_br_city_id', False)
80 data['address_id'] = context.get('address_id', False)
81 data['object_name'] = context.get('object_name', False)
82
83 zip_ids = context.get('zip_ids', False)
84
85 if zip_ids != False:
86
87 obj_zip_result = self.pool.get('l10n_br_data.zip.result')
88
89 zip_result_ids = obj_zip_result.map_to_zip_result(cr, uid, 0, context,
90 zip_ids, data['object_name'], data['address_id'])
91
92 data['zip_ids'] = zip_result_ids
93
94 data['state'] = 'done'
64 95
65 return data96 return data
6697
67 def zip_search(self, cr, uid, ids, context=None):98 def zip_search(self, cr, uid, ids, context=None):
6899
69 data = self.read(cr, uid, ids, [], context=context)[0]100 data = self.read(cr, uid, ids, [], context=context)[0]
70101
71 domain = [
72 ('country_id','=',data['country_id'][0]),
73 ('state_id','=',data['state_id'][0]),
74 ('l10n_br_city_id','=',data['l10n_br_city_id'][0]),]
75
76 if data['code']:
77 zip = re.sub('[^0-9]', '', data['code'] or '')
78 domain.append(('code','=',zip))
79
80 if data['street']:
81 domain.append(('street','=',data['street']))
82
83 if data['district']:
84 domain.append(('district','=',data['district']))
85
86 obj_zip = self.pool.get('l10n_br_data.zip')102 obj_zip = self.pool.get('l10n_br_data.zip')
103
104 obj_zip_result = self.pool.get('l10n_br_data.zip.result')
105
106 domain = obj_zip.set_domain(country_id = data['country_id'][0], \
107 state_id = data['state_id'][0], \
108 l10n_br_city_id = data['l10n_br_city_id'][0],\
109 district = data['district'], \
110 street = data['street'], \
111 zip = data['code'])
112
113 # Search zip_ids
87 zip_ids = obj_zip.search(cr, uid, domain)114 zip_ids = obj_zip.search(cr, uid, domain)
88 115
116 #MAP zip to zip.search.result
117 zip_result_ids = obj_zip_result.map_to_zip_result(cr, uid, ids, context,
118 zip_ids, data['object_name'], data['address_id'])
119
89 self.write(cr, uid, ids, 120 self.write(cr, uid, ids,
90 {'state': 'done',121 {'state': 'done',
91 'zip_ids': [[6, 0, zip_ids]]}, context=context)122 'zip_ids': [[6, 0, zip_result_ids]]}, context=context)
92 return False123
93 124 return {
94 def zip_search_end(self, cr, uid, ids, context=None):125 'type': 'ir.actions.act_window',
95126 'res_model': 'l10n_br_data.zip.search',
96 result = {127 'view_mode': 'form',
97 'street': False, 128 'view_type': 'form',
98 'l10n_br_city_id': False, 129 'res_id': data['id'],
99 'city': False, 130 'views': [(False, 'form')],
100 'state_id': False, 131 'target': 'new',
101 'country_id': False, 132 'nodestroy': True,
102 'zip': False133 }
103 }134
104135 def zip_new_search(self, cr, uid, ids, context=None):
105 data = self.read(cr, uid, ids, [], context=context)[0]136
106137 data = self.read(cr, uid, ids, [], context=context)[0]
107 if data['zip_ids']:138
108 address_id = context.get('address_id', False)139 self.write(cr, uid, ids,
109 object_name = context.get('object_name', False)140 {'state': 'init',
110 if address_id and object_name:141 'zip_ids': [[6, 0, []]]}, context=context)
111 obj_zip = self.pool.get('l10n_br_data.zip')142
112 zip_read = obj_zip.read(143 return {
113 cr, uid, data['zip_ids'], ['street_type', 144 'type': 'ir.actions.act_window',
114 'street',145 'res_model': 'l10n_br_data.zip.search',
115 'district', 146 'view_mode': 'form',
116 'code',147 'view_type': 'form',
117 'l10n_br_city_id', 148 'res_id': data['id'],
118 'city', 'state_id', 149 'views': [(False, 'form')],
119 'country_id'], context=context)[0]150 'target': 'new',
120151 'nodestroy': True
121 zip = re.sub('[^0-9]', '', zip_read['code'] or '')152 }
122 if len(zip) == 8:153
123 zip = '%s-%s' % (zip[0:5], zip[5:8])154
124155
125 result['street'] = ((zip_read['street_type'] or '') + ' ' + (zip_read['street'] or ''))156
126 result['district'] = zip_read['district']157class l10n_br_data_zip_result(osv.TransientModel):
127 result['zip'] = zip158
128 result['l10n_br_city_id'] = zip_read['l10n_br_city_id'] and zip_read['l10n_br_city_id'][0] or False159 _name = 'l10n_br_data.zip.result'
129 result['city'] = zip_read['l10n_br_city_id'] and zip_read['l10n_br_city_id'][1] or ''160
130 result['state_id'] = zip_read['state_id'] and zip_read['state_id'][0] or False161 _description = 'Zipcode result'
131 result['country_id'] = zip_read['country_id'] and zip_read['country_id'][0] or False162
132163 _columns = {
133 obj_partner = self.pool.get(object_name)164 'zip_id': fields.many2one('l10n_br_data.zip', 'Zipcode', readonly=True, invisible=True),
134 obj_partner.write(cr, uid, address_id, result, context=context)165 'search_id': fields.many2one('l10n_br_data.zip.search', 'Search', readonly=True, invisible=True),
135166 'address_id': fields.integer('Id do objeto', invisible=True),
136 return {'type': 'ir.actions.act_window_close'}167 'object_name': fields.char('Nome do bjeto', size=100, invisible=True),
137168 #ZIPCODE data to be shown
138l10n_br_data_zip_search()169 'code': fields.char('CEP', size=9, readonly=True),
170 'street': fields.char('Logradouro', size=72, readonly=True),
171 'district': fields.char('Bairro', size=72, readonly=True),
172 'country_id': fields.many2one('res.country', 'Country', readonly=True),
173 'state_id': fields.many2one('res.country.state', 'Estado',
174 domain="[('country_id','=',country_id)]", readonly=True),
175 'l10n_br_city_id': fields.many2one(
176 'l10n_br_base.city', 'Cidade',
177 required=True, domain="[('state_id','=',state_id)]", readonly=True),
178 }
179
180
181 def map_to_zip_result(self, cr, uid, ids, context, zip_ids, object_name, address_id):
182
183 obj_zip = self.pool.get('l10n_br_data.zip')
184
185 result = []
186
187 for zip_id in zip_ids:
188
189 zip_data = obj_zip.set_result(cr, uid, ids, context, zip_id)
190
191 zip_result_data = {
192 'zip_id': False,
193 'code': False,
194 'street': False,
195 'district': False,
196 'country_id': False,
197 'state_id': False,
198 'l10n_br_city_id': False,
199 }
200
201 zip_result_data['zip_id'] = zip_id
202 zip_result_data['object_name'] = object_name
203 zip_result_data['address_id'] = address_id
204 zip_result_data['code'] = zip_data['zip']
205 zip_result_data['street'] = zip_data['street']
206 zip_result_data['district'] = zip_data['district']
207 zip_result_data['country_id'] = zip_data['country_id']
208 zip_result_data['state_id'] = zip_data['state_id']
209 zip_result_data['l10n_br_city_id'] = zip_data['l10n_br_city_id']
210
211
212 zip_result_id = self.create(cr, uid, zip_result_data, context=context)
213
214 result.append(zip_result_id)
215
216 return result
217
218 def zip_select(self, cr, uid, ids, context=None):
219
220 data = self.read(cr, uid, ids, [], context=context)[0]
221
222 address_id = data['address_id']
223
224 object_name = data['object_name']
225
226 if address_id and object_name:
227
228 obj = self.pool.get(object_name)
229
230 obj_zip = self.pool.get('l10n_br_data.zip')
231
232 result = obj_zip.set_result(cr, uid, ids, context, data['zip_id'][0])
233
234 obj.write(cr, uid, address_id, result, context=context)
235
236 return True
237
238
239
240
241
139242
=== modified file 'l10n_br_data_zip/wizard/l10n_br_data_zip_search_view.xml'
--- l10n_br_data_zip/wizard/l10n_br_data_zip_search_view.xml 2013-01-03 04:21:33 +0000
+++ l10n_br_data_zip/wizard/l10n_br_data_zip_search_view.xml 2013-03-13 12:27:20 +0000
@@ -1,7 +1,7 @@
1<?xml version="1.0" encoding="utf-8"?>1<?xml version="1.0" encoding="utf-8"?>
2<openerp>2<openerp>
3 <data noupdate="0">3 <data noupdate="0">
4 4
5 <record id="view_l10n_br_data_zip_search" model="ir.ui.view">5 <record id="view_l10n_br_data_zip_search" model="ir.ui.view">
6 <field name="name">Pesquisar CEP</field>6 <field name="name">Pesquisar CEP</field>
7 <field name="model">l10n_br_data.zip.search</field>7 <field name="model">l10n_br_data.zip.search</field>
@@ -19,20 +19,49 @@
19 </group>19 </group>
20 <group colspan="8" col="8" states="done">20 <group colspan="8" col="8" states="done">
21 <!-- <separator colspan="8" string="Resuldado da Pesquisa"/> -->21 <!-- <separator colspan="8" string="Resuldado da Pesquisa"/> -->
22 <field colspan="8" height="130" nolabel="1" name="zip_ids" />22 <field colspan="8" height="130" nolabel="1" name="zip_ids" wizard="one2many_list" readonly="1"/>
23 </group>23 </group>
24 <footer states="init">24 <footer states="init">
25 <button name="zip_search" string="Pesquisar" type="object" class="oe_highlight"/>25 <button name="zip_search" string="Pesquisar" type="object" class="oe_highlight"/>
26 or
27 <button special="cancel" string="Cancelar" class="oe_link"/>26 <button special="cancel" string="Cancelar" class="oe_link"/>
28 </footer>27 </footer>
29 <footer states="done">28 <footer states="done">
30 <button name="zip_search_end" type="object" string="Fechar" class="oe_highlight"/>29 <!-- <button name="zip_search_end" string="Transferir" type="object" class="oe_highlight"/> -->
30 <button special="cancel" string="Cancelar" class="oe_link"/>
31 <button name="zip_new_search" string="Nova Pesquisa" type="object" class="oe_highlight"/>
31 </footer>32 </footer>
32 </form>33 </form>
33 </field>34 </field>
34 </record>35 </record>
35 36
37 <record model="ir.ui.view" id="view_l10n_br_data_zip_result_tree">
38 <field name="name">l10n_br_data.zip.result</field>
39 <field name="model">l10n_br_data.zip.result</field>
40 <field name="arch" type="xml">
41 <tree string="CEPs">
42 <button name="zip_select" string="Selecionar" type="object" icon="gtk-apply"/>
43 <field name="code" select="1"/>
44 <field name="district" select="1"/>
45 <field name="street" select="1"/>
46 </tree>
47 </field>
48 </record>
49
50 <record model="ir.ui.view" id="view_l10n_br_data_zip_result_form">
51 <field name="name">l10n_br_data.zip.result</field>
52 <field name="model">l10n_br_data.zip.result</field>
53 <field name="arch" type="xml">
54 <form string="CEPs">
55 <field name="code" select="1"/>
56 <field name="street" select="1"/>
57 <field name="district" select="2"/>
58 <field name="country_id" select="2"/>
59 <field name="state_id" select="2"/>
60 <field name="l10n_br_city_id" select="2"/>
61 </form>
62 </field>
63 </record>
64
36 <record id="action_l10n_br_data_zip_search" model="ir.actions.act_window">65 <record id="action_l10n_br_data_zip_search" model="ir.actions.act_window">
37 <field name="name">Pesquisar CEP</field>66 <field name="name">Pesquisar CEP</field>
38 <field name="type">ir.actions.act_window</field>67 <field name="type">ir.actions.act_window</field>
@@ -41,6 +70,6 @@
41 <field name="view_mode">form</field>70 <field name="view_mode">form</field>
42 <field name="target">new</field>71 <field name="target">new</field>
43 </record>72 </record>
44 73
45 </data>74 </data>
46</openerp>75</openerp>
47\ No newline at end of file76\ No newline at end of file