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
1=== modified file 'l10n_br_crm/crm_lead_view.xml'
2--- l10n_br_crm/crm_lead_view.xml 2013-01-03 04:21:33 +0000
3+++ l10n_br_crm/crm_lead_view.xml 2013-03-13 12:27:20 +0000
4@@ -12,17 +12,14 @@
5 <field name="city" invisible="1" />
6 </field>
7 <field name="state_id" position="replace">
8- <field name="state_id" />
9- <field name="l10n_br_city_id" placeholder="municipio" on_change="onchange_l10n_br_city_id(l10n_br_city_id)" />
10+ <field name="state_id" placeholder="estado"/>
11+ <field name="l10n_br_city_id" placeholder="municipio"/>
12 </field>
13 <field name="street2" position="replace">
14+ <field name="district" placeholder="bairro"/>
15 <field name="number" placeholder="numero"/>
16 <field name="street2" placeholder="complemento"/>
17 </field>
18- <!-- FIXME field name="zip" position="replace">
19- <field name="zip" on_change="onchange_mask_zip(zip)" />
20- <button name="zip_search" string="Pesquisar CEP" colspan="2" type="object" icon="gtk-select-all"/>
21- </field -->
22 </field>
23 </record>
24
25
26=== modified file 'l10n_br_crm/crm_opportunity_view.xml'
27--- l10n_br_crm/crm_opportunity_view.xml 2013-01-03 04:21:33 +0000
28+++ l10n_br_crm/crm_opportunity_view.xml 2013-03-13 12:27:20 +0000
29@@ -12,17 +12,14 @@
30 <field name="city" invisible="1" />
31 </field>
32 <field name="state_id" position="replace">
33- <field name="state_id" />
34- <field name="l10n_br_city_id" placeholder="municipio" on_change="onchange_l10n_br_city_id(l10n_br_city_id)" />
35+ <field name="state_id" placeholder="estado"/>
36+ <field name="l10n_br_city_id" placeholder="municipio" />
37 </field>
38 <field name="street2" position="replace">
39+ <field name="district" placeholder="bairro"/>
40 <field name="number" placeholder="numero" />
41 <field name="street2" placeholder="complemento" />
42 </field>
43- <!-- FIXME field name="zip" position="replace">
44- <field name="zip" on_change="onchange_mask_zip(zip)" />
45- <button name="zip_search" string="Pesquisar CEP" colspan="2" type="object" icon="gtk-select-all"/>
46- </field -->
47 </field>
48 </record>
49
50
51=== added directory 'l10n_br_crm_zip'
52=== added file 'l10n_br_crm_zip/__init__.py'
53--- l10n_br_crm_zip/__init__.py 1970-01-01 00:00:00 +0000
54+++ l10n_br_crm_zip/__init__.py 2013-03-13 12:27:20 +0000
55@@ -0,0 +1,21 @@
56+# -*- encoding: utf-8 -*-
57+###############################################################################
58+# #
59+# Copyright (C) 2011 Renato Lima - Akretion #
60+# #
61+#This program is free software: you can redistribute it and/or modify #
62+#it under the terms of the GNU Affero General Public License as published by #
63+#the Free Software Foundation, either version 3 of the License, or #
64+#(at your option) any later version. #
65+# #
66+#This program is distributed in the hope that it will be useful, #
67+#but WITHOUT ANY WARRANTY; without even the implied warranty of #
68+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
69+#GNU Affero General Public License for more details. #
70+# #
71+#You should have received a copy of the GNU Affero General Public License #
72+#along with this program. If not, see <http://www.gnu.org/licenses/>. #
73+###############################################################################
74+
75+import crm_lead
76+
77
78=== added file 'l10n_br_crm_zip/__openerp__.py'
79--- l10n_br_crm_zip/__openerp__.py 1970-01-01 00:00:00 +0000
80+++ l10n_br_crm_zip/__openerp__.py 2013-03-13 12:27:20 +0000
81@@ -0,0 +1,39 @@
82+# -*- encoding: utf-8 -*-
83+###############################################################################
84+# #
85+# Copyright (C) 2011 Fabio Negrini - Akretion #
86+# #
87+#This program is free software: you can redistribute it and/or modify #
88+#it under the terms of the GNU Affero General Public License as published by #
89+#the Free Software Foundation, either version 3 of the License, or #
90+#(at your option) any later version. #
91+# #
92+#This program is distributed in the hope that it will be useful, #
93+#but WITHOUT ANY WARRANTY; without even the implied warranty of #
94+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
95+#GNU Affero General Public License for more details. #
96+# #
97+#You should have received a copy of the GNU Affero General Public License #
98+#along with this program. If not, see <http://www.gnu.org/licenses/>. #
99+###############################################################################
100+
101+{
102+ 'name': 'CRM ZIP',
103+ 'description': 'ZIP Search Integration for Brazilian Localization of CRM module',
104+ 'category': 'Localization',
105+ 'license': 'AGPL-3',
106+ 'author': 'Fabio Negrini - OpenERP Brasil',
107+ 'website': 'http://openerpbrasil.org',
108+ 'version': '0.6',
109+ 'depends': [
110+ 'l10n_br_data_zip',
111+ 'l10n_br_crm',
112+ ],
113+ 'data': [
114+ 'crm_lead_view.xml',
115+ 'crm_opportunity_view.xml',
116+ ],
117+ 'demo': [],
118+ 'installable': True,
119+ 'auto_install': True,
120+}
121
122=== added file 'l10n_br_crm_zip/crm_lead.py'
123--- l10n_br_crm_zip/crm_lead.py 1970-01-01 00:00:00 +0000
124+++ l10n_br_crm_zip/crm_lead.py 2013-03-13 12:27:20 +0000
125@@ -0,0 +1,75 @@
126+# -*- encoding: utf-8 -*-
127+###############################################################################
128+# #
129+# Copyright (C) 2012 Renato Lima - Akretion #
130+# #
131+#This program is free software: you can redistribute it and/or modify #
132+#it under the terms of the GNU Affero General Public License as published by #
133+#the Free Software Foundation, either version 3 of the License, or #
134+#(at your option) any later version. #
135+# #
136+#This program is distributed in the hope that it will be useful, #
137+#but WITHOUT ANY WARRANTY; without even the implied warranty of #
138+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
139+#GNU Affero General Public License for more details. #
140+# #
141+#You should have received a copy of the GNU Affero General Public License #
142+#along with this program. If not, see <http://www.gnu.org/licenses/>. #
143+###############################################################################
144+
145+from openerp.osv import fields, osv
146+
147+
148+class crm_lead(osv.Model):
149+ """ CRM Lead Case """
150+ _inherit = "crm.lead"
151+
152+
153+ def zip_search(self, cr, uid, ids, context=None):
154+
155+ obj_zip = self.pool.get('l10n_br_data.zip')
156+
157+ for crm_lead in self.browse(cr, uid, ids):
158+
159+ zip_ids = obj_zip.zip_search_multi(cr, uid, ids, context,
160+ country_id = crm_lead.country_id.id, \
161+ state_id = crm_lead.state_id.id, \
162+ l10n_br_city_id = crm_lead.l10n_br_city_id.id, \
163+ district = crm_lead.district, \
164+ street = crm_lead.street, \
165+ zip = crm_lead.zip,
166+ )
167+
168+ if len(zip_ids) == 1:
169+
170+ zip_read = obj_zip.set_result(cr, uid, ids, context, zip_ids[0])
171+
172+ result = {
173+ 'country_id': zip_read['country_id'],
174+ 'state_id': zip_read['state_id'],
175+ 'l10n_br_city_id': zip_read['l10n_br_city_id'],
176+ 'district': zip_read['district'],
177+ 'street': zip_read['street'],
178+ 'zip': zip_read['zip'],
179+ }
180+
181+ self.write(cr, uid, crm_lead.id, result)
182+
183+ return True
184+
185+ else:
186+
187+ if len(zip_ids) > 1:
188+
189+ return obj_zip.create_wizard(cr, uid, ids, context, self._name,
190+ country_id = crm_lead.country_id.id, \
191+ state_id = crm_lead.state_id.id, \
192+ l10n_br_city_id = crm_lead.l10n_br_city_id.id, \
193+ district = crm_lead.district, \
194+ street = crm_lead.street, \
195+ zip = crm_lead.zip,
196+ zip_ids = zip_ids
197+ )
198+ else:
199+
200+ return True
201\ No newline at end of file
202
203=== added file 'l10n_br_crm_zip/crm_lead_view.xml'
204--- l10n_br_crm_zip/crm_lead_view.xml 1970-01-01 00:00:00 +0000
205+++ l10n_br_crm_zip/crm_lead_view.xml 2013-03-13 12:27:20 +0000
206@@ -0,0 +1,19 @@
207+<?xml version="1.0" encoding="utf-8"?>
208+<openerp>
209+ <data>
210+
211+ <!-- CRM Lead Form View -->
212+ <record model="ir.ui.view" id="l10n_br_crm_case_form_view_leads1">
213+ <field name="name">l10n_br_crm.leads1</field>
214+ <field name="model">crm.lead</field>
215+ <field name="inherit_id" ref="crm.crm_case_form_view_leads" />
216+ <field name="arch" type="xml">
217+ <field name="zip" position="replace">
218+ <field name="zip"/>
219+ <button name="zip_search" string="Buscar Endereço" colspan="2" type="object" icon="gtk-select-all"/>
220+ </field>
221+ </field>
222+ </record>
223+
224+ </data>
225+</openerp>
226
227=== added file 'l10n_br_crm_zip/crm_opportunity_view.xml'
228--- l10n_br_crm_zip/crm_opportunity_view.xml 1970-01-01 00:00:00 +0000
229+++ l10n_br_crm_zip/crm_opportunity_view.xml 2013-03-13 12:27:20 +0000
230@@ -0,0 +1,19 @@
231+<?xml version="1.0" encoding="utf-8"?>
232+<openerp>
233+ <data>
234+
235+ <!-- CRM Opportunity Form View -->
236+ <record model="ir.ui.view" id="l10n_br_crm_case_form_view_oppor1">
237+ <field name="name">l10n_br_crm.opportunities1</field>
238+ <field name="model">crm.lead</field>
239+ <field name="inherit_id" ref="crm.crm_case_form_view_oppor" />
240+ <field name="arch" type="xml">
241+ <field name="zip" position="replace">
242+ <field name="zip"/>
243+ <button name="zip_search" string="Buscar Endereço" colspan="2" type="object" icon="gtk-select-all"/>
244+ </field>
245+ </field>
246+ </record>
247+
248+ </data>
249+</openerp>
250
251=== modified file 'l10n_br_data_zip/__openerp__.py'
252--- l10n_br_data_zip/__openerp__.py 2013-02-11 15:51:01 +0000
253+++ l10n_br_data_zip/__openerp__.py 2013-03-13 12:27:20 +0000
254@@ -19,7 +19,7 @@
255
256 {
257 'name': 'Brazilian Localisation Data Extension for zip codes',
258- 'description': 'Brazilian Localisation Data Extension for zip codes',
259+ 'description': 'Brazilian Localization Data Extension for zip codes',
260 'license': 'AGPL-3',
261 'author': 'Akretion, OpenERP Brasil',
262 'version': '0.1',
263@@ -27,14 +27,14 @@
264 'l10n_br_base',
265 ],
266 'data': [
267- 'zip.sql'
268+ 'zip.sql',
269 'l10n_br_data_zip_view.xml',
270 'res_partner_view.xml',
271 'wizard/l10n_br_data_zip_search_view.xml',
272 'security/ir.model.access.csv',
273 ],
274 'demo': [],
275- 'category': 'Localisation',
276+ 'category': 'Localization',
277 'active': False,
278 'installable': True
279 }
280
281=== modified file 'l10n_br_data_zip/l10n_br_data_zip.py'
282--- l10n_br_data_zip/l10n_br_data_zip.py 2013-01-19 00:22:49 +0000
283+++ l10n_br_data_zip/l10n_br_data_zip.py 2013-03-13 12:27:20 +0000
284@@ -16,9 +16,9 @@
285 #You should have received a copy of the GNU Affero General Public License #
286 #along with this program. If not, see <http://www.gnu.org/licenses/>. #
287 ###############################################################################
288-
289-from osv import osv, fields
290-
291+import re
292+from openerp.osv import osv, fields
293+from openerp.tools.translate import _
294
295 class l10n_br_data_zip(osv.Model):
296 """ Este objeto persiste todos os códigos postais que podem ser
297@@ -37,5 +37,139 @@
298 domain="[('country_id','=',country_id)]"),
299 'l10n_br_city_id': fields.many2one(
300 'l10n_br_base.city', 'Cidade',
301- required=True, domain="[('state_id','=',state_id)]")
302+ required=True, domain="[('state_id','=',state_id)]"),
303 }
304+
305+ def set_domain(self, country_id=False, state_id=False, l10n_br_city_id=False, district=False, street=False, zip=False):
306+
307+ domain = []
308+
309+ if zip:
310+ new_zip = re.sub('[^0-9]', '', zip or '')
311+ domain.append(('code', '=', new_zip))
312+ else:
313+
314+ if state_id == False or \
315+ l10n_br_city_id == False or\
316+ len(street or '') == 0:
317+ raise osv.except_osv(_('Parametros insuficientes'),
318+ _('Necessário informar Estado, município e logradouro'))
319+
320+ if country_id:
321+ domain.append(('country_id', '=', country_id))
322+
323+ if state_id:
324+ domain.append(('state_id', '=', state_id))
325+
326+ if l10n_br_city_id:
327+ domain.append(('l10n_br_city_id', '=', l10n_br_city_id))
328+
329+ if district:
330+ domain.append(('district', 'like', district))
331+
332+ if street:
333+ domain.append(('street', 'like', street))
334+
335+ return domain
336+
337+ def set_result(self, cr, uid, ids, context, zip_id=None):
338+
339+ result = {
340+ 'country_id': False,
341+ 'state_id': False,
342+ 'l10n_br_city_id': False,
343+ 'district': False,
344+ 'street': False,
345+ 'zip': False
346+ }
347+
348+ if zip_id != None:
349+
350+ zip_read = self.read(cr, uid, zip_id, [
351+ 'street_type',
352+ 'street',
353+ 'district',
354+ 'code',
355+ 'l10n_br_city_id',
356+ 'state_id',
357+ 'country_id'
358+ ],
359+ context=context)
360+
361+ zip = zip_read['code']
362+
363+ if len(zip) == 8:
364+ zip = '%s-%s' % (zip[0:5], zip[5:8])
365+
366+ result = {
367+ 'country_id': zip_read['country_id'] and zip_read['country_id'][0] or False,
368+ 'state_id': zip_read['state_id'] and zip_read['state_id'][0] or False,
369+ 'l10n_br_city_id': zip_read['l10n_br_city_id'] and zip_read['l10n_br_city_id'][0] or False,
370+ 'district': (zip_read['district'] or ''),
371+ 'street': ((zip_read['street_type'] or '') + ' ' + (zip_read['street'] or '')),
372+ 'zip': zip,
373+ }
374+
375+ return result
376+
377+
378+ 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):
379+
380+ domain = self.set_domain(country_id = country_id,
381+ state_id = state_id,
382+ l10n_br_city_id = l10n_br_city_id,
383+ district = district,
384+ street = street,
385+ zip = zip)
386+
387+ zip_id = self.search(cr, uid, domain)
388+
389+ return zip_id
390+
391+ 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):
392+
393+ result = self.set_result(cr, uid, ids, context)
394+
395+ zip_id = self.zip_search_multi(cr, uid, ids, context,
396+ country_id,
397+ state_id,
398+ l10n_br_city_id,
399+ district,
400+ street,
401+ zip)
402+
403+ if len(zip_id) == 1:
404+
405+ result = self.set_result(cr, uid, ids, context, zip_id[0])
406+
407+ return result
408+
409+ else:
410+
411+ return False
412+
413+ 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):
414+
415+ context.update({'zip': zip,
416+ 'street': street,
417+ 'district': district,
418+ 'country_id': country_id,
419+ 'state_id': state_id,
420+ 'l10n_br_city_id': l10n_br_city_id,
421+ 'zip_ids': zip_ids,
422+ 'address_id': ids[0],
423+ 'object_name': object_name})
424+
425+ result = {
426+ 'name': 'Zip Search',
427+ 'view_type': 'form',
428+ 'view_mode': 'form',
429+ 'res_model': 'l10n_br_data.zip.search',
430+ 'view_id': False,
431+ 'context': context,
432+ 'type': 'ir.actions.act_window',
433+ 'target': 'new',
434+ 'nodestroy': True,
435+ }
436+
437+ return result
438
439=== modified file 'l10n_br_data_zip/l10n_br_data_zip_view.xml'
440--- l10n_br_data_zip/l10n_br_data_zip_view.xml 2012-12-11 04:31:17 +0000
441+++ l10n_br_data_zip/l10n_br_data_zip_view.xml 2013-03-13 12:27:20 +0000
442@@ -8,6 +8,7 @@
443 <field name="arch" type="xml">
444 <tree string="CEPs">
445 <field name="code" select="1"/>
446+ <field name="district" select="1"/>
447 <field name="street_type" select="1"/>
448 <field name="street" select="1"/>
449 </tree>
450@@ -29,7 +30,8 @@
451 </form>
452 </field>
453 </record>
454-
455+
456+
457 <record model="ir.actions.act_window" id="action_l10n_br_data_zip">
458 <field name="name">CEPs</field>
459 <field name="type">ir.actions.act_window</field>
460
461=== modified file 'l10n_br_data_zip/res_partner.py'
462--- l10n_br_data_zip/res_partner.py 2013-01-20 23:42:40 +0000
463+++ l10n_br_data_zip/res_partner.py 2013-03-13 12:27:20 +0000
464@@ -18,97 +18,57 @@
465 ###############################################################################
466
467 import re
468-from osv import osv
469+from openerp.osv import osv
470
471
472 class res_partner(osv.Model):
473 _inherit = 'res.partner'
474
475- #TODO migrate
476 def zip_search(self, cr, uid, ids, context=None):
477
478- result = {
479- 'street': False,
480- 'l10n_br_city_id': False,
481- 'city': False,
482- 'state_id': False,
483- 'country_id': False,
484- 'zip': False
485- }
486-
487 obj_zip = self.pool.get('l10n_br_data.zip')
488
489 for res_partner in self.browse(cr, uid, ids):
490+
491+ zip_ids = obj_zip.zip_search_multi(cr, uid, ids, context,
492+ country_id = res_partner.country_id.id, \
493+ state_id = res_partner.state_id.id, \
494+ l10n_br_city_id = res_partner.l10n_br_city_id.id, \
495+ district = res_partner.district, \
496+ street = res_partner.street, \
497+ zip = res_partner.zip,
498+ )
499+
500+ if len(zip_ids) == 1:
501+
502+ zip_read = obj_zip.set_result(cr, uid, ids, context, zip_ids[0])
503
504- domain = []
505- if res_partner.zip:
506- zip = re.sub('[^0-9]', '', res_partner.zip or '')
507- domain.append(('code', '=', zip))
508+ result = {
509+ 'country_id': zip_read['country_id'],
510+ 'state_id': zip_read['state_id'],
511+ 'l10n_br_city_id': zip_read['l10n_br_city_id'],
512+ 'district': zip_read['district'],
513+ 'street': zip_read['street'],
514+ 'zip': zip_read['zip'],
515+ }
516+
517+ self.write(cr, uid, res_partner.id, result)
518+
519+ return True
520+
521 else:
522- domain.append(('street', '=', res_partner.street))
523- domain.append(('district', '=', res_partner.district))
524- domain.append(('country_id', '=', \
525- res_partner.country_id.id))
526- domain.append(('state_id', '=', \
527- res_partner.state_id.id))
528- domain.append(('l10n_br_city_id', '=', \
529- res_partner.l10n_br_city_id.id))
530-
531- zip_id = obj_zip.search(cr, uid, domain)
532-
533- if not len(zip_id) == 1:
534-
535- context.update({
536- 'zip': res_partner.zip,
537- 'street': res_partner.street,
538- 'district': res_partner.district,
539- 'country_id': \
540- res_partner.country_id.id,
541- 'state_id': res_partner.state_id.id,
542- 'l10n_br_city_id': \
543- res_partner.l10n_br_city_id.id,
544- 'address_id': ids,
545- 'object_name': self._name,
546- })
547-
548- result = {
549- 'name': 'Zip Search',
550- 'view_type': 'form',
551- 'view_mode': 'form',
552- 'res_model': 'l10n_br_data.zip.search',
553- 'view_id': False,
554- 'context': context,
555- 'type': 'ir.actions.act_window',
556- 'target': 'new',
557- 'nodestroy': True,
558- }
559- return result
560-
561- zip_read = obj_zip.read(cr, uid, zip_id, [
562- 'street_type',
563- 'street', 'district',
564- 'code',
565- 'l10n_br_city_id',
566- 'city', 'state_id',
567- 'country_id'
568- ],
569- context=context)[0]
570-
571- zip = re.sub('[^0-9]', '', zip_read['code'] or '')
572- if len(zip) == 8:
573- zip = '%s-%s' % (zip[0:5], zip[5:8])
574-
575- result['street'] = ((zip_read['street_type'] or '') + ' ' \
576- + (zip_read['street'] or ''))
577- result['district'] = zip_read['district']
578- result['zip'] = zip
579- result['l10n_br_city_id'] = zip_read['l10n_br_city_id'] \
580- and zip_read['l10n_br_city_id'][0] or False
581- result['city'] = zip_read['l10n_br_city_id'] \
582- and zip_read['l10n_br_city_id'][1] or ''
583- result['state_id'] = zip_read['state_id'] \
584- and zip_read['state_id'][0] or False
585- result['country_id'] = zip_read['country_id'] \
586- and zip_read['country_id'][0] or False
587- self.write(cr, uid, res_partner.id, result)
588- return False
589+
590+ if len(zip_ids) > 1:
591+
592+ return obj_zip.create_wizard(cr, uid, ids, context, self._name,
593+ country_id = res_partner.country_id.id, \
594+ state_id = res_partner.state_id.id, \
595+ l10n_br_city_id = res_partner.l10n_br_city_id.id, \
596+ district = res_partner.district, \
597+ street = res_partner.street, \
598+ zip = res_partner.zip,
599+ zip_ids = zip_ids
600+ )
601+ else:
602+
603+ return True
604
605=== modified file 'l10n_br_data_zip/res_partner_view.xml'
606--- l10n_br_data_zip/res_partner_view.xml 2012-12-11 04:31:17 +0000
607+++ l10n_br_data_zip/res_partner_view.xml 2013-03-13 12:27:20 +0000
608@@ -10,7 +10,7 @@
609 <field name="arch" type="xml">
610 <field name="zip" position="replace">
611 <field name="zip" placeholder="ZIP" on_change="onchange_mask_zip(zip)"/>
612- <button name="zip_search" string="Pesquisar CEP" type="object"/>
613+ <button name="zip_search" string="Buscar Endereço" type="object"/>
614 </field>
615 </field>
616 </record>
617
618=== modified file 'l10n_br_data_zip/wizard/l10n_br_data_zip_search.py'
619--- l10n_br_data_zip/wizard/l10n_br_data_zip_search.py 2013-01-03 04:21:33 +0000
620+++ l10n_br_data_zip/wizard/l10n_br_data_zip_search.py 2013-03-13 12:27:20 +0000
621@@ -20,13 +20,16 @@
622 import re
623 import string
624
625-from osv import osv, fields
626-
627-
628-class l10n_br_data_zip_search(osv.osv_memory):
629+from openerp.osv import osv, fields
630+
631+
632+
633+class l10n_br_data_zip_search(osv.TransientModel):
634+
635 _name = 'l10n_br_data.zip.search'
636+
637 _description = 'Zipcode Search'
638- #_inherit = 'ir.wizard.screen'
639+
640 _columns = {
641 'code': fields.char('CEP', size=8),
642 'street': fields.char('Logradouro', size=72),
643@@ -38,15 +41,28 @@
644 'l10n_br_city_id': fields.many2one(
645 'l10n_br_base.city', 'Cidade',
646 domain="[('state_id','=',state_id)]"),
647- 'zip_ids': fields.many2many('l10n_br_data.zip','zip_search',
648+
649+ 'zip_ids': fields.many2many('l10n_br_data.zip.result','zip_search',
650 'zip_id', 'zip_search_id', 'CEP',
651- readonly=True),
652+ readonly=False),
653+
654 'state':fields.selection([('init','init'),
655- ('done','done')], 'state', readonly=True)}
656+ ('done','done')], 'state', readonly=True),
657+ 'address_id': fields.integer('Id do objeto', invisible=True),
658+ 'object_name': fields.char('Nome do bjeto', size=100, invisible=True),
659+ }
660
661 _defaults = {
662 'state': 'init'}
663
664+ def create(self, cr, uid, vals, context):
665+
666+ result = super(l10n_br_data_zip_search, self).create(cr, uid, vals, context)
667+
668+ context.update({'search_id': result})
669+
670+ return result
671+
672 def default_get(self, cr, uid, fields_list, context=None):
673
674 if context is None:
675@@ -61,78 +77,165 @@
676 data['country_id'] = context.get('country_id', False)
677 data['state_id'] = context.get('state_id', False)
678 data['l10n_br_city_id'] = context.get('l10n_br_city_id', False)
679+ data['address_id'] = context.get('address_id', False)
680+ data['object_name'] = context.get('object_name', False)
681+
682+ zip_ids = context.get('zip_ids', False)
683+
684+ if zip_ids != False:
685+
686+ obj_zip_result = self.pool.get('l10n_br_data.zip.result')
687+
688+ zip_result_ids = obj_zip_result.map_to_zip_result(cr, uid, 0, context,
689+ zip_ids, data['object_name'], data['address_id'])
690+
691+ data['zip_ids'] = zip_result_ids
692+
693+ data['state'] = 'done'
694
695 return data
696-
697+
698 def zip_search(self, cr, uid, ids, context=None):
699
700 data = self.read(cr, uid, ids, [], context=context)[0]
701
702- domain = [
703- ('country_id','=',data['country_id'][0]),
704- ('state_id','=',data['state_id'][0]),
705- ('l10n_br_city_id','=',data['l10n_br_city_id'][0]),]
706-
707- if data['code']:
708- zip = re.sub('[^0-9]', '', data['code'] or '')
709- domain.append(('code','=',zip))
710-
711- if data['street']:
712- domain.append(('street','=',data['street']))
713-
714- if data['district']:
715- domain.append(('district','=',data['district']))
716-
717 obj_zip = self.pool.get('l10n_br_data.zip')
718+
719+ obj_zip_result = self.pool.get('l10n_br_data.zip.result')
720+
721+ domain = obj_zip.set_domain(country_id = data['country_id'][0], \
722+ state_id = data['state_id'][0], \
723+ l10n_br_city_id = data['l10n_br_city_id'][0],\
724+ district = data['district'], \
725+ street = data['street'], \
726+ zip = data['code'])
727+
728+ # Search zip_ids
729 zip_ids = obj_zip.search(cr, uid, domain)
730
731+ #MAP zip to zip.search.result
732+ zip_result_ids = obj_zip_result.map_to_zip_result(cr, uid, ids, context,
733+ zip_ids, data['object_name'], data['address_id'])
734+
735 self.write(cr, uid, ids,
736 {'state': 'done',
737- 'zip_ids': [[6, 0, zip_ids]]}, context=context)
738- return False
739-
740- def zip_search_end(self, cr, uid, ids, context=None):
741-
742- result = {
743- 'street': False,
744- 'l10n_br_city_id': False,
745- 'city': False,
746- 'state_id': False,
747- 'country_id': False,
748- 'zip': False
749- }
750-
751- data = self.read(cr, uid, ids, [], context=context)[0]
752-
753- if data['zip_ids']:
754- address_id = context.get('address_id', False)
755- object_name = context.get('object_name', False)
756- if address_id and object_name:
757- obj_zip = self.pool.get('l10n_br_data.zip')
758- zip_read = obj_zip.read(
759- cr, uid, data['zip_ids'], ['street_type',
760- 'street',
761- 'district',
762- 'code',
763- 'l10n_br_city_id',
764- 'city', 'state_id',
765- 'country_id'], context=context)[0]
766-
767- zip = re.sub('[^0-9]', '', zip_read['code'] or '')
768- if len(zip) == 8:
769- zip = '%s-%s' % (zip[0:5], zip[5:8])
770-
771- result['street'] = ((zip_read['street_type'] or '') + ' ' + (zip_read['street'] or ''))
772- result['district'] = zip_read['district']
773- result['zip'] = zip
774- result['l10n_br_city_id'] = zip_read['l10n_br_city_id'] and zip_read['l10n_br_city_id'][0] or False
775- result['city'] = zip_read['l10n_br_city_id'] and zip_read['l10n_br_city_id'][1] or ''
776- result['state_id'] = zip_read['state_id'] and zip_read['state_id'][0] or False
777- result['country_id'] = zip_read['country_id'] and zip_read['country_id'][0] or False
778-
779- obj_partner = self.pool.get(object_name)
780- obj_partner.write(cr, uid, address_id, result, context=context)
781-
782- return {'type': 'ir.actions.act_window_close'}
783-
784-l10n_br_data_zip_search()
785+ 'zip_ids': [[6, 0, zip_result_ids]]}, context=context)
786+
787+ return {
788+ 'type': 'ir.actions.act_window',
789+ 'res_model': 'l10n_br_data.zip.search',
790+ 'view_mode': 'form',
791+ 'view_type': 'form',
792+ 'res_id': data['id'],
793+ 'views': [(False, 'form')],
794+ 'target': 'new',
795+ 'nodestroy': True,
796+ }
797+
798+ def zip_new_search(self, cr, uid, ids, context=None):
799+
800+ data = self.read(cr, uid, ids, [], context=context)[0]
801+
802+ self.write(cr, uid, ids,
803+ {'state': 'init',
804+ 'zip_ids': [[6, 0, []]]}, context=context)
805+
806+ return {
807+ 'type': 'ir.actions.act_window',
808+ 'res_model': 'l10n_br_data.zip.search',
809+ 'view_mode': 'form',
810+ 'view_type': 'form',
811+ 'res_id': data['id'],
812+ 'views': [(False, 'form')],
813+ 'target': 'new',
814+ 'nodestroy': True
815+ }
816+
817+
818+
819+
820+class l10n_br_data_zip_result(osv.TransientModel):
821+
822+ _name = 'l10n_br_data.zip.result'
823+
824+ _description = 'Zipcode result'
825+
826+ _columns = {
827+ 'zip_id': fields.many2one('l10n_br_data.zip', 'Zipcode', readonly=True, invisible=True),
828+ 'search_id': fields.many2one('l10n_br_data.zip.search', 'Search', readonly=True, invisible=True),
829+ 'address_id': fields.integer('Id do objeto', invisible=True),
830+ 'object_name': fields.char('Nome do bjeto', size=100, invisible=True),
831+ #ZIPCODE data to be shown
832+ 'code': fields.char('CEP', size=9, readonly=True),
833+ 'street': fields.char('Logradouro', size=72, readonly=True),
834+ 'district': fields.char('Bairro', size=72, readonly=True),
835+ 'country_id': fields.many2one('res.country', 'Country', readonly=True),
836+ 'state_id': fields.many2one('res.country.state', 'Estado',
837+ domain="[('country_id','=',country_id)]", readonly=True),
838+ 'l10n_br_city_id': fields.many2one(
839+ 'l10n_br_base.city', 'Cidade',
840+ required=True, domain="[('state_id','=',state_id)]", readonly=True),
841+ }
842+
843+
844+ def map_to_zip_result(self, cr, uid, ids, context, zip_ids, object_name, address_id):
845+
846+ obj_zip = self.pool.get('l10n_br_data.zip')
847+
848+ result = []
849+
850+ for zip_id in zip_ids:
851+
852+ zip_data = obj_zip.set_result(cr, uid, ids, context, zip_id)
853+
854+ zip_result_data = {
855+ 'zip_id': False,
856+ 'code': False,
857+ 'street': False,
858+ 'district': False,
859+ 'country_id': False,
860+ 'state_id': False,
861+ 'l10n_br_city_id': False,
862+ }
863+
864+ zip_result_data['zip_id'] = zip_id
865+ zip_result_data['object_name'] = object_name
866+ zip_result_data['address_id'] = address_id
867+ zip_result_data['code'] = zip_data['zip']
868+ zip_result_data['street'] = zip_data['street']
869+ zip_result_data['district'] = zip_data['district']
870+ zip_result_data['country_id'] = zip_data['country_id']
871+ zip_result_data['state_id'] = zip_data['state_id']
872+ zip_result_data['l10n_br_city_id'] = zip_data['l10n_br_city_id']
873+
874+
875+ zip_result_id = self.create(cr, uid, zip_result_data, context=context)
876+
877+ result.append(zip_result_id)
878+
879+ return result
880+
881+ def zip_select(self, cr, uid, ids, context=None):
882+
883+ data = self.read(cr, uid, ids, [], context=context)[0]
884+
885+ address_id = data['address_id']
886+
887+ object_name = data['object_name']
888+
889+ if address_id and object_name:
890+
891+ obj = self.pool.get(object_name)
892+
893+ obj_zip = self.pool.get('l10n_br_data.zip')
894+
895+ result = obj_zip.set_result(cr, uid, ids, context, data['zip_id'][0])
896+
897+ obj.write(cr, uid, address_id, result, context=context)
898+
899+ return True
900+
901+
902+
903+
904+
905
906=== modified file 'l10n_br_data_zip/wizard/l10n_br_data_zip_search_view.xml'
907--- l10n_br_data_zip/wizard/l10n_br_data_zip_search_view.xml 2013-01-03 04:21:33 +0000
908+++ l10n_br_data_zip/wizard/l10n_br_data_zip_search_view.xml 2013-03-13 12:27:20 +0000
909@@ -1,7 +1,7 @@
910 <?xml version="1.0" encoding="utf-8"?>
911 <openerp>
912 <data noupdate="0">
913-
914+
915 <record id="view_l10n_br_data_zip_search" model="ir.ui.view">
916 <field name="name">Pesquisar CEP</field>
917 <field name="model">l10n_br_data.zip.search</field>
918@@ -19,20 +19,49 @@
919 </group>
920 <group colspan="8" col="8" states="done">
921 <!-- <separator colspan="8" string="Resuldado da Pesquisa"/> -->
922- <field colspan="8" height="130" nolabel="1" name="zip_ids" />
923+ <field colspan="8" height="130" nolabel="1" name="zip_ids" wizard="one2many_list" readonly="1"/>
924 </group>
925 <footer states="init">
926 <button name="zip_search" string="Pesquisar" type="object" class="oe_highlight"/>
927- or
928 <button special="cancel" string="Cancelar" class="oe_link"/>
929 </footer>
930 <footer states="done">
931- <button name="zip_search_end" type="object" string="Fechar" class="oe_highlight"/>
932+ <!-- <button name="zip_search_end" string="Transferir" type="object" class="oe_highlight"/> -->
933+ <button special="cancel" string="Cancelar" class="oe_link"/>
934+ <button name="zip_new_search" string="Nova Pesquisa" type="object" class="oe_highlight"/>
935 </footer>
936 </form>
937 </field>
938 </record>
939-
940+
941+ <record model="ir.ui.view" id="view_l10n_br_data_zip_result_tree">
942+ <field name="name">l10n_br_data.zip.result</field>
943+ <field name="model">l10n_br_data.zip.result</field>
944+ <field name="arch" type="xml">
945+ <tree string="CEPs">
946+ <button name="zip_select" string="Selecionar" type="object" icon="gtk-apply"/>
947+ <field name="code" select="1"/>
948+ <field name="district" select="1"/>
949+ <field name="street" select="1"/>
950+ </tree>
951+ </field>
952+ </record>
953+
954+ <record model="ir.ui.view" id="view_l10n_br_data_zip_result_form">
955+ <field name="name">l10n_br_data.zip.result</field>
956+ <field name="model">l10n_br_data.zip.result</field>
957+ <field name="arch" type="xml">
958+ <form string="CEPs">
959+ <field name="code" select="1"/>
960+ <field name="street" select="1"/>
961+ <field name="district" select="2"/>
962+ <field name="country_id" select="2"/>
963+ <field name="state_id" select="2"/>
964+ <field name="l10n_br_city_id" select="2"/>
965+ </form>
966+ </field>
967+ </record>
968+
969 <record id="action_l10n_br_data_zip_search" model="ir.actions.act_window">
970 <field name="name">Pesquisar CEP</field>
971 <field name="type">ir.actions.act_window</field>
972@@ -41,6 +70,6 @@
973 <field name="view_mode">form</field>
974 <field name="target">new</field>
975 </record>
976-
977+
978 </data>
979 </openerp>
980\ No newline at end of file