Merge lp:~numerigraphe/openobject-addons/trunk-extra-city into lp:openobject-addons/extra-trunk

Proposed by Numérigraphe
Status: Merged
Merged at revision: 5623
Proposed branch: lp:~numerigraphe/openobject-addons/trunk-extra-city
Merge into: lp:openobject-addons/extra-trunk
Diff against target: 632 lines (+106/-287)
13 files modified
city/__openerp__.py (+4/-4)
city/city.py (+27/-119)
city/city_view.xml (+58/-147)
city/i18n/bg.po (+1/-1)
city/i18n/ca.po (+2/-2)
city/i18n/city.pot (+2/-2)
city/i18n/es.po (+1/-1)
city/i18n/fi.po (+1/-1)
city/i18n/fr.po (+2/-2)
city/i18n/fr_BE.po (+2/-2)
city/i18n/ru.po (+2/-2)
city/i18n/sv.po (+2/-2)
city/i18n/vi.po (+2/-2)
To merge this branch: bzr merge lp:~numerigraphe/openobject-addons/trunk-extra-city
Reviewer Review Type Date Requested Status
OpenERP Committers Pending
Jordi Esteve (www.zikzakmedia.com) Pending
Review via email: mp+83201@code.launchpad.net

Description of the change

This branch contains a bit of refactoring to the city module:
- rename "zipcode" to "zip" and "location" to "city_id" for consistency
- bump version number to 2.0 to reflect the migration work needed
- use xpath for view inheritance

This branch also re-introduces changes I made to city in v5.0 & 6.0
- usable in countries without states
- uses "related" fields

To post a comment you must log in.
Revision history for this message
Numérigraphe (numerigraphe) wrote :

I'm merging this myself, fault of any negative review.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'city/__openerp__.py'
2--- city/__openerp__.py 2011-02-18 20:19:20 +0000
3+++ city/__openerp__.py 2011-11-23 17:28:12 +0000
4@@ -21,13 +21,13 @@
5 #
6 ##############################################################################
7 {
8- "name" : "City-Helps to keep Homogenous address data in the Database",
9- "version" : "1.0",
10+ "name" : "City-Helps to keep Homogeneous address data in the Database",
11+ "version" : "2.0",
12 "author" : "Pablo Rocandio",
13- "category" : "Generic Modules/Base",
14+ "category" : "Hidden",
15 "description": """Creates a model for storing cities
16 Zip code, city, state and country fields are replaced with a location field in partner and partner contact forms.
17-This module helps to keep homogenous address data in the database.""",
18+This module helps to keep homogeneous address data in the database.""",
19 "depends" : ["base"],
20 "init_xml" : [],
21 "update_xml" : [
22
23=== modified file 'city/city.py'
24--- city/city.py 2011-03-28 05:05:51 +0000
25+++ city/city.py 2011-11-23 17:28:12 +0000
26@@ -31,11 +31,15 @@
27 if not len(ids):
28 return []
29 res = []
30- for line in self.browse(cr, uid, ids):
31- state = line.state_id.name
32- country = line.state_id.country_id.name
33- location = "%s %s, %s, %s" %(line.zipcode, line.name, state, country)
34- res.append((line['id'], location))
35+ for line in self.browse(cr, uid, ids, context=context):
36+ name = line.name
37+ if line.zip:
38+ name = "%s %s" % (line.zip, name)
39+ if line.state_id:
40+ name = "%s, %s" % (name, line.state_id.name)
41+ if line.country_id:
42+ name = "%s, %s" % (name, line.country_id.name)
43+ res.append((line['id'], name))
44 return res
45
46 def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
47@@ -45,7 +49,7 @@
48 context = {}
49 ids = []
50 if name:
51- ids = self.search(cr, uid, [('zipcode', 'ilike', name)]+ args, limit=limit)
52+ ids = self.search(cr, uid, [('zip', 'ilike', name)]+ args, limit=limit)
53 if not ids:
54 ids = self.search(cr, uid, [('name', operator, name)]+ args, limit=limit)
55 return self.name_get(cr, uid, ids, context=context)
56@@ -53,9 +57,13 @@
57 _name = 'city.city'
58 _description = 'City'
59 _columns = {
60- 'state_id': fields.many2one('res.country.state', 'State', required=True, select=1),
61+ 'state_id': fields.many2one('res.country.state', 'State',
62+ domain="[('country_id','=',country_id)]", select=1),
63 'name': fields.char('City', size=64, required=True, select=1),
64- 'zipcode': fields.char('ZIP', size=64, required=True, select=1),
65+ 'zip': fields.char('ZIP', size=64, required=True, select=1),
66+ 'country_id': fields.many2one('res.country', 'Country', select=1),
67+ 'code': fields.char('City Code', size=64,
68+ help="The official code for the city"),
69 }
70 city()
71
72@@ -70,117 +78,17 @@
73
74 class res_partner_address(osv.osv):
75 _inherit = "res.partner.address"
76-
77- def _get_zip(self, cr, uid, ids, field_name, arg, context):
78- res={}
79- for obj in self.browse(cr,uid,ids):
80- if obj.location:
81- res[obj.id] = obj.location.zipcode
82- else:
83- res[obj.id] = ""
84- return res
85-
86- def _zip_search(self, cr, uid, obj, name, args, context):
87- if not len(args):
88- return []
89- new_args = []
90- for argument in args:
91- operator = argument[1]
92- value = argument[2]
93- ids = self.pool.get('city.city').search(cr, uid, [('zipcode',operator,value)], context=context)
94- new_args.append( ('location','in',ids) )
95- if new_args:
96- # We need to ensure that locatio is NOT NULL. Otherwise all addresses
97- # that have no location will 'match' current search pattern.
98- new_args.append( ('location','!=',False) )
99- return new_args
100-
101- def _get_city(self, cr, uid, ids, field_name, arg, context):
102- res={}
103- for obj in self.browse(cr,uid,ids):
104- if obj.location:
105- res[obj.id] = obj.location.name
106- else:
107- res[obj.id] = ""
108- return res
109-
110- def _city_search(self, cr, uid, obj, name, args, context):
111- if not len(args):
112- return []
113- new_args = []
114- for argument in args:
115- operator = argument[1]
116- value = argument[2]
117- ids = self.pool.get('city.city').search(cr, uid, [('name',operator,value)], context=context)
118- new_args.append( ('location','in',ids) )
119- if new_args:
120- # We need to ensure that locatio is NOT NULL. Otherwise all addresses
121- # that have no location will 'match' current search pattern.
122- new_args.append( ('location','!=',False) )
123- return new_args
124-
125- def _get_state(self, cr, uid, ids, field_name, arg, context):
126- res={}
127- for obj in self.browse(cr,uid,ids):
128- if obj.location:
129- res[obj.id] = [obj.location.state_id.id, obj.location.state_id.name]
130- else:
131- res[obj.id] = False
132- return res
133-
134- def _state_id_search(self, cr, uid, obj, name, args, context):
135- if not len(args):
136- return []
137- new_args = []
138- for argument in args:
139- operator = argument[1]
140- value = argument[2]
141- ids = self.pool.get('city.city').search(cr, uid, [('state_id',operator,value)], context=context)
142- new_args.append( ('location','in',ids) )
143- if new_args:
144- # We need to ensure that locatio is NOT NULL. Otherwise all addresses
145- # that have no location will 'match' current search pattern.
146- new_args.append( ('location','!=',False) )
147- return new_args
148-
149- def _get_country(self, cr, uid, ids, field_name, arg, context):
150- res={}
151- for obj in self.browse(cr,uid,ids):
152- if obj.location:
153- res[obj.id] = [obj.location.state_id.country_id.id, obj.location.state_id.country_id.name]
154- else:
155- res[obj.id] = False
156- return res
157-
158- def _country_id_search(self, cr, uid, obj, name, args, context):
159- if not len(args):
160- return []
161- new_args = []
162- for argument in args:
163- operator = argument[1]
164- value = argument[2]
165- ids = self.pool.get('res.country.state').search(cr, uid, [('country_id',operator,value)], context=context)
166- address_ids = []
167- for country in self.pool.get('res.country.state').browse(cr, uid, ids, context):
168- ids += [city.id for city in country.city_ids]
169- new_args.append( ('location','in',tuple(ids)) )
170- if new_args:
171- # We need to ensure that locatio is NOT NULL. Otherwise all addresses
172- # that have no location will 'match' current search pattern.
173- new_args.append( ('location','!=',False) )
174- return new_args
175-
176 _columns = {
177- 'location': fields.many2one('city.city', 'Location'),
178- 'zip': fields.function(_get_zip, fnct_search=_zip_search, method=True, type="char", string='Zip', size=24),
179- 'city': fields.function(_get_city, fnct_search=_city_search, method=True, type="char", string='City', size=128),
180- 'state_id': fields.function(_get_state, fnct_search=_state_id_search, obj="res.country.state", method=True, type="many2one", string='State'),
181- 'country_id': fields.function(_get_country, fnct_search=_country_id_search, obj="res.country" ,method=True, type="many2one", string='Country'),
182+ 'city_id': fields.many2one('city.city', 'Location', select=1),
183+ 'zip': fields.related('city_id', 'zip', type="char", string="Zip",
184+ store=False),
185+ 'city': fields.related('city_id', 'name', type="char", string="City",
186+ store=False),
187+ 'state_id': fields.related('city_id', 'state_id', type="many2one",
188+ relation="res.country.state", string="State",
189+ store=False),
190+ 'country_id': fields.related('city_id', 'country_id', type="many2one",
191+ relation="res.country", string="Country",
192+ store=False),
193 }
194 res_partner_address()
195-
196-
197-
198-
199-
200-
201
202=== modified file 'city/city_view.xml'
203--- city/city_view.xml 2011-02-18 20:19:20 +0000
204+++ city/city_view.xml 2011-11-23 17:28:12 +0000
205@@ -2,146 +2,58 @@
206 <openerp>
207 <data>
208
209-<!-- Partner -->
210- <record model="ir.ui.view" id="partners_form_add_location">
211- <field name="name">partners_form_add_location</field>
212- <field name="model">res.partner</field>
213- <field name="inherit_id" ref="base.view_partner_form"/>
214- <field name="arch" type="xml">
215- <field name="country_id" position="replace">
216- <field name="location" colspan="4" />
217- </field>
218- </field>
219- </record>
220-
221- <record model="ir.ui.view" id="partners_form_del_city">
222- <field name="name">partners_form_del_city</field>
223- <field name="model">res.partner</field>
224- <field name="inherit_id" ref="base.view_partner_form"/>
225- <field name="arch" type="xml">
226- <field name="city" position="replace"/>
227- </field>
228- </record>
229-
230- <!-- We need to city replaces to remove it -->
231- <record model="ir.ui.view" id="partners_form_del_citycity">
232- <field name="name">partners_form_del_citycity</field>
233- <field name="model">res.partner</field>
234- <field name="inherit_id" ref="base.view_partner_form"/>
235- <field name="arch" type="xml">
236- <field name="city" position="replace"/>
237- </field>
238- </record>
239-
240- <record model="ir.ui.view" id="partners_form_del_zip">
241- <field name="name">partners_form_del_zip</field>
242- <field name="model">res.partner</field>
243- <field name="inherit_id" ref="base.view_partner_form"/>
244- <field name="arch" type="xml">
245- <field name="zip" position="replace"/>
246- </field>
247- </record>
248-
249- <record model="ir.ui.view" id="partners_form_del_state">
250- <field name="name">partners_form_del_state</field>
251- <field name="model">res.partner</field>
252- <field name="inherit_id" ref="base.view_partner_form"/>
253- <field name="arch" type="xml">
254- <field name="state_id" position="replace"/>
255- </field>
256- </record>
257-
258-
259-<!-- Partner Address 1 -->
260- <record model="ir.ui.view" id="partners_form_add_location1">
261- <field name="name">partners_form_add_location1</field>
262- <field name="model">res.partner.address</field>
263- <field name="inherit_id" ref="base.view_partner_address_form1"/>
264- <field name="arch" type="xml">
265- <field name="state_id" position="replace">
266- <field name="location" colspan="4" />
267- </field>
268- </field>
269- </record>
270-
271- <record model="ir.ui.view" id="partners_form_del_city1">
272- <field name="name">partners_form_del_city1</field>
273- <field name="model">res.partner.address</field>
274- <field name="inherit_id" ref="base.view_partner_address_form1"/>
275- <field name="arch" type="xml">
276- <field name="city" position="replace">
277- </field>
278- </field>
279- </record>
280-
281- <record model="ir.ui.view" id="partners_form_del_zip1">
282- <field name="name">partners_form_del_zip1</field>
283- <field name="model">res.partner.address</field>
284- <field name="inherit_id" ref="base.view_partner_address_form1"/>
285- <field name="arch" type="xml">
286- <field name="zip" position="replace">
287- </field>
288- </field>
289- </record>
290-
291- <record model="ir.ui.view" id="partners_form_del_country1">
292- <field name="name">partners_form_del_country1</field>
293- <field name="model">res.partner.address</field>
294- <field name="inherit_id" ref="base.view_partner_address_form1"/>
295- <field name="arch" type="xml">
296- <field name="country_id" position="replace">
297- </field>
298- </field>
299- </record>
300-
301-
302-<!-- Partner Address 2 -->
303- <record model="ir.ui.view" id="partners_form_add_location2">
304- <field name="name">partners_form_add_location2</field>
305- <field name="model">res.partner.address</field>
306- <field name="inherit_id" ref="base.view_partner_address_form2"/>
307- <field name="arch" type="xml">
308- <field name="state_id" position="replace">
309- <field name="location" colspan="4" />
310- </field>
311- </field>
312- </record>
313-
314- <record model="ir.ui.view" id="partners_form_del_city2">
315- <field name="name">partners_form_del_city2</field>
316- <field name="model">res.partner.address</field>
317- <field name="inherit_id" ref="base.view_partner_address_form2"/>
318- <field name="arch" type="xml">
319- <field name="city" position="replace">
320- </field>
321- </field>
322- </record>
323-
324- <record model="ir.ui.view" id="partners_form_del_zip2">
325- <field name="name">partners_form_del_zip2</field>
326- <field name="model">res.partner.address</field>
327- <field name="inherit_id" ref="base.view_partner_address_form2"/>
328- <field name="arch" type="xml">
329- <field name="zip" position="replace">
330- </field>
331- </field>
332- </record>
333-
334- <record model="ir.ui.view" id="partners_form_del_country2">
335- <field name="name">partners_form_del_country2</field>
336- <field name="model">res.partner.address</field>
337- <field name="inherit_id" ref="base.view_partner_address_form2"/>
338- <field name="arch" type="xml">
339- <field name="country_id" position="replace">
340- </field>
341- </field>
342- </record>
343-
344-
345- <!--
346- State
347- -->
348-
349+ <!-- Add location to the Partner form -->
350+ <record model="ir.ui.view" id="view_partner_form_city">
351+ <field name="name">res.partner.form.city</field>
352+ <field name="model">res.partner</field>
353+ <field name="inherit_id" ref="base.view_partner_form"/>
354+ <field name="arch" type="xml">
355+ <data>
356+ <xpath expr="//field[@name='address']//field[@name='city']" position="replace">
357+ <field name="city_id" colspan="4" />
358+ </xpath>
359+ <xpath expr="//field[@name='address']//field[@name='country_id']" position="replace"/>
360+ <xpath expr="//field[@name='address']//field[@name='zip']" position="replace"/>
361+ <xpath expr="//field[@name='address']//field[@name='state_id']" position="replace"/>
362+ </data>
363+ </field>
364+ </record>
365+
366+ <!-- Add location to the Partner Address form 1 -->
367+ <record model="ir.ui.view" id="view_partner_address_form1_city">
368+ <field name="name">res.partner.address.form1.city</field>
369+ <field name="model">res.partner.address</field>
370+ <field name="inherit_id" ref="base.view_partner_address_form1"/>
371+ <field name="arch" type="xml">
372+ <data>
373+ <xpath expr="//field[@name='city']" position="replace">
374+ <field name="city_id" colspan="4" />
375+ </xpath>
376+ <xpath expr="//field[@name='country_id']" position="replace"/>
377+ <xpath expr="//field[@name='zip']" position="replace"/>
378+ <xpath expr="//field[@name='state_id']" position="replace"/>
379+ </data>
380+ </field>
381+ </record>
382+
383+ <!-- Add location to the Partner Address form 2 -->
384+ <record model="ir.ui.view" id="view_partner_address_form2_city">
385+ <field name="name">res.partner.address.form2.city</field>
386+ <field name="model">res.partner.address</field>
387+ <field name="inherit_id" ref="base.view_partner_address_form2"/>
388+ <field name="arch" type="xml">
389+ <data>
390+ <xpath expr="//field[@name='city']" position="replace">
391+ <field name="city_id" colspan="4" />
392+ </xpath>
393+ <xpath expr="//field[@name='country_id']" position="replace"/>
394+ <xpath expr="//field[@name='zip']" position="replace"/>
395+ <xpath expr="//field[@name='state_id']" position="replace"/>
396+ </data>
397+ </field>
398+ </record>
399+
400+ <!-- Add cities to the State form -->
401 <record model="ir.ui.view" id="view_country_state_form2">
402 <field name="name">view_country_state_form2</field>
403 <field name="model">res.country.state</field>
404@@ -153,20 +65,17 @@
405 </field>
406 </record>
407
408-
409- <!--
410- City
411- -->
412-
413+ <!-- City -->
414 <record model="ir.ui.view" id="view_city_tree">
415 <field name="name">city.city.tree</field>
416 <field name="model">city.city</field>
417 <field name="type">tree</field>
418 <field name="arch" type="xml">
419 <tree string="City">
420- <field name="zipcode"/>
421+ <field name="zip"/>
422 <field name="name"/>
423 <field name="state_id"/>
424+ <field name="country_id"/>
425 </tree>
426 </field>
427 </record>
428@@ -177,9 +86,11 @@
429 <field name="type">form</field>
430 <field name="arch" type="xml">
431 <form string="City">
432- <field name="zipcode" select="1"/>
433+ <field name="zip" select="1"/>
434 <field name="name" select="1"/>
435+ <field name="country_id" />
436 <field name="state_id" select="1"/>
437+ <field name="code" select="2"/>
438 </form>
439 </field>
440 </record>
441
442=== modified file 'city/i18n/bg.po'
443--- city/i18n/bg.po 2011-11-10 05:13:15 +0000
444+++ city/i18n/bg.po 2011-11-23 17:28:12 +0000
445@@ -72,7 +72,7 @@
446 msgstr "Име на град"
447
448 #. module: city
449-#: field:res.partner.address,location:0
450+#: field:res.partner.address,city_id:0
451 msgid "Location"
452 msgstr "Местоположение"
453
454
455=== modified file 'city/i18n/ca.po'
456--- city/i18n/ca.po 2011-11-10 05:13:15 +0000
457+++ city/i18n/ca.po 2011-11-23 17:28:12 +0000
458@@ -39,7 +39,7 @@
459 "especial !"
460
461 #. module: city
462-#: field:city.city,zipcode:0
463+#: field:city.city,zip:0
464 msgid "ZIP"
465 msgstr "Codi postal"
466
467@@ -78,7 +78,7 @@
468 msgstr "Nom de la ciutat"
469
470 #. module: city
471-#: field:res.partner.address,location:0
472+#: field:res.partner.address,city_id:0
473 msgid "Location"
474 msgstr "Ubicació"
475
476
477=== modified file 'city/i18n/city.pot'
478--- city/i18n/city.pot 2010-07-06 05:10:58 +0000
479+++ city/i18n/city.pot 2011-11-23 17:28:12 +0000
480@@ -34,7 +34,7 @@
481 msgstr ""
482
483 #. module: city
484-#: field:city.city,zipcode:0
485+#: field:city.city,zip:0
486 msgid "ZIP"
487 msgstr ""
488
489@@ -66,7 +66,7 @@
490 msgstr ""
491
492 #. module: city
493-#: field:res.partner.address,location:0
494+#: field:res.partner.address,city_id:0
495 msgid "Location"
496 msgstr ""
497
498
499=== modified file 'city/i18n/es.po'
500--- city/i18n/es.po 2011-11-10 05:13:15 +0000
501+++ city/i18n/es.po 2011-11-23 17:28:12 +0000
502@@ -78,7 +78,7 @@
503 msgstr "Nombre de la ciudad"
504
505 #. module: city
506-#: field:res.partner.address,location:0
507+#: field:res.partner.address,city_id:0
508 msgid "Location"
509 msgstr "Ubicación"
510
511
512=== modified file 'city/i18n/fi.po'
513--- city/i18n/fi.po 2011-11-10 05:13:15 +0000
514+++ city/i18n/fi.po 2011-11-23 17:28:12 +0000
515@@ -72,7 +72,7 @@
516 msgstr "Kaupungin nimi"
517
518 #. module: city
519-#: field:res.partner.address,location:0
520+#: field:res.partner.address,city_id:0
521 msgid "Location"
522 msgstr "Sijainti"
523
524
525=== modified file 'city/i18n/fr.po'
526--- city/i18n/fr.po 2011-11-10 05:13:15 +0000
527+++ city/i18n/fr.po 2011-11-23 17:28:12 +0000
528@@ -38,7 +38,7 @@
529 "spéciaux !"
530
531 #. module: city
532-#: field:city.city,zipcode:0
533+#: field:city.city,zip:0
534 msgid "ZIP"
535 msgstr "Code postal"
536
537@@ -77,7 +77,7 @@
538 msgstr "Nom de la ville"
539
540 #. module: city
541-#: field:res.partner.address,location:0
542+#: field:res.partner.address,city_id:0
543 msgid "Location"
544 msgstr "Localisation"
545
546
547=== modified file 'city/i18n/fr_BE.po'
548--- city/i18n/fr_BE.po 2010-07-06 05:10:58 +0000
549+++ city/i18n/fr_BE.po 2011-11-23 17:28:12 +0000
550@@ -34,7 +34,7 @@
551 msgstr "Le nom de l'objet doit commencer avec x_ et ne pas contenir de charactères spéciaux !"
552
553 #. module: city
554-#: field:city.city,zipcode:0
555+#: field:city.city,zip:0
556 msgid "ZIP"
557 msgstr "Code postal"
558
559@@ -68,7 +68,7 @@
560 msgstr "Nom de la ville"
561
562 #. module: city
563-#: field:res.partner.address,location:0
564+#: field:res.partner.address,city_id:0
565 msgid "Location"
566 msgstr "Localisation"
567
568
569=== modified file 'city/i18n/ru.po'
570--- city/i18n/ru.po 2011-11-10 05:13:15 +0000
571+++ city/i18n/ru.po 2011-11-23 17:28:12 +0000
572@@ -39,7 +39,7 @@
573 "символов!"
574
575 #. module: city
576-#: field:city.city,zipcode:0
577+#: field:city.city,zip:0
578 msgid "ZIP"
579 msgstr "Почтовый индекс"
580
581@@ -73,7 +73,7 @@
582 msgstr "Название города"
583
584 #. module: city
585-#: field:res.partner.address,location:0
586+#: field:res.partner.address,city_id:0
587 msgid "Location"
588 msgstr "Расположение"
589
590
591=== modified file 'city/i18n/sv.po'
592--- city/i18n/sv.po 2011-11-10 05:13:15 +0000
593+++ city/i18n/sv.po 2011-11-23 17:28:12 +0000
594@@ -36,7 +36,7 @@
595 msgstr ""
596
597 #. module: city
598-#: field:city.city,zipcode:0
599+#: field:city.city,zip:0
600 msgid "ZIP"
601 msgstr "Postnummer"
602
603@@ -70,7 +70,7 @@
604 msgstr "Stadens namn"
605
606 #. module: city
607-#: field:res.partner.address,location:0
608+#: field:res.partner.address,city_id:0
609 msgid "Location"
610 msgstr "Plats"
611
612
613=== modified file 'city/i18n/vi.po'
614--- city/i18n/vi.po 2011-11-10 05:13:15 +0000
615+++ city/i18n/vi.po 2011-11-23 17:28:12 +0000
616@@ -39,7 +39,7 @@
617 "nào!"
618
619 #. module: city
620-#: field:city.city,zipcode:0
621+#: field:city.city,zip:0
622 msgid "ZIP"
623 msgstr "Mã bưu chính"
624
625@@ -73,7 +73,7 @@
626 msgstr "Tên Thành phố"
627
628 #. module: city
629-#: field:res.partner.address,location:0
630+#: field:res.partner.address,city_id:0
631 msgid "Location"
632 msgstr "Địa điểm"
633

Subscribers

People subscribed via source and target branches