Merge lp:~openerp-dev/openobject-server/trunk-res-country-state-cleaning-mme into lp:openobject-server

Proposed by Thibault Delavallée (OpenERP)
Status: Needs review
Proposed branch: lp:~openerp-dev/openobject-server/trunk-res-country-state-cleaning-mme
Merge into: lp:openobject-server
Diff against target: 584 lines (+29/-139)
21 files modified
doc/03_module_dev_02.rst (+0/-1)
doc/03_module_dev_03.rst (+1/-1)
doc/form-view-guidelines.rst (+1/-1)
openerp/addons/base/__openerp__.py (+0/-1)
openerp/addons/base/report/corporate_defaults.xml (+1/-1)
openerp/addons/base/res/res_bank.py (+6/-8)
openerp/addons/base/res/res_bank_view.xml (+1/-1)
openerp/addons/base/res/res_company.py (+2/-15)
openerp/addons/base/res/res_company_view.xml (+1/-1)
openerp/addons/base/res/res_country.py (+0/-16)
openerp/addons/base/res/res_country_view.xml (+0/-42)
openerp/addons/base/res/res_partner.py (+7/-15)
openerp/addons/base/res/res_partner_demo.xml (+0/-6)
openerp/addons/base/res/res_partner_report_address.xml (+1/-1)
openerp/addons/base/res/res_partner_view.xml (+2/-2)
openerp/addons/base/res/res_users.py (+0/-4)
openerp/addons/base/security/ir.model.access.csv (+0/-2)
openerp/addons/base/tests/test_expression.py (+0/-4)
openerp/addons/base/tests/test_mail_examples.py (+1/-1)
openerp/addons/base/tests/test_search.py (+5/-6)
openerp/osv/expression.py (+0/-10)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/trunk-res-country-state-cleaning-mme
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+208115@code.launchpad.net

Description of the change

[Fix] remove res.country.state model and replace all many2one state by a char field

To post a comment you must log in.
5092. By Mehul Mehta(OpenERP)

[IMP] improvement in code

Unmerged revisions

5092. By Mehul Mehta(OpenERP)

[IMP] improvement in code

5091. By Mehul Mehta(OpenERP)

[MERGE] Merged lp:openobject-server

5090. By Mehul Mehta(OpenERP)

[Fix] remove res.country.state model and replace all many2one state by a char field

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'doc/03_module_dev_02.rst'
2--- doc/03_module_dev_02.rst 2013-06-19 09:13:32 +0000
3+++ doc/03_module_dev_02.rst 2014-02-26 13:35:37 +0000
4@@ -600,7 +600,6 @@
5 the Country from a City, you can define a field as below in the City object::
6
7 'country_id': fields.related(
8- 'state_id',
9 'country_id',
10 type="many2one",
11 relation="res.country",
12
13=== modified file 'doc/03_module_dev_03.rst'
14--- doc/03_module_dev_03.rst 2013-09-04 12:58:42 +0000
15+++ doc/03_module_dev_03.rst 2014-02-26 13:35:37 +0000
16@@ -878,7 +878,7 @@
17 <field name="city" select="2"/>
18 <newline/>
19 <field completion="1" name="country_id" select="2"/>
20- <field name="state_id" select="2"/>
21+ <field name="state" select="2"/>
22 <newline/>
23 <field name="phone"/>
24 <field name="fax"/>
25
26=== modified file 'doc/form-view-guidelines.rst'
27--- doc/form-view-guidelines.rst 2013-03-28 16:30:59 +0000
28+++ doc/form-view-guidelines.rst 2014-02-26 13:35:37 +0000
29@@ -228,7 +228,7 @@
30 <field name="zip" class="oe_inline" placeholder="ZIP"/>
31 <field name="city" class="oe_inline" placeholder="City"/>
32 </div>
33- <field name="state_id" placeholder="State"/>
34+ <field name="state" placeholder="State"/>
35 <field name="country_id" placeholder="Country"/>
36 </div>
37 </group>
38
39=== modified file 'openerp/addons/base/__openerp__.py'
40--- openerp/addons/base/__openerp__.py 2014-02-09 00:37:45 +0000
41+++ openerp/addons/base/__openerp__.py 2014-02-26 13:35:37 +0000
42@@ -41,7 +41,6 @@
43 'base_menu.xml',
44 'res/res_security.xml',
45 'res/res_config.xml',
46- 'res/res.country.state.csv',
47 'ir/ir_actions.xml',
48 'ir/ir_config_parameter_view.xml',
49 'ir/ir_cron_view.xml',
50
51=== modified file 'openerp/addons/base/report/corporate_defaults.xml'
52--- openerp/addons/base/report/corporate_defaults.xml 2012-08-20 10:20:22 +0000
53+++ openerp/addons/base/report/corporate_defaults.xml 2014-02-26 13:35:37 +0000
54@@ -8,7 +8,7 @@
55 <street type="field" name="street"/>
56 <zip type="field" name="zip"/>
57 <city type="field" name="city"/>
58- <state type="field" name="state_id.name"/>
59+ <state type="field" name="state"/>
60 <country type="field" name="country_id.name"/>
61 <phone type="field" name="phone"/>
62 <email type="field" name="email"/>
63
64=== modified file 'openerp/addons/base/res/res_bank.py'
65--- openerp/addons/base/res/res_bank.py 2013-04-12 13:30:08 +0000
66+++ openerp/addons/base/res/res_bank.py 2014-02-26 13:35:37 +0000
67@@ -32,8 +32,7 @@
68 'street2': fields.char('Street2', size=128),
69 'zip': fields.char('Zip', change_default=True, size=24),
70 'city': fields.char('City', size=128),
71- 'state': fields.many2one("res.country.state", 'Fed. State',
72- domain="[('country_id', '=', country)]"),
73+ 'state': fields.char('Fed. State'),
74 'country': fields.many2one('res.country', 'Country'),
75 'email': fields.char('Email', size=64),
76 'phone': fields.char('Phone', size=64),
77@@ -102,7 +101,7 @@
78
79 def _default_value(self, cursor, user, field, context=None):
80 if context is None: context = {}
81- if field in ('country_id', 'state_id'):
82+ if field in ('country_id'):
83 value = False
84 else:
85 value = ''
86@@ -130,8 +129,7 @@
87 'city': fields.char('City', size=128),
88 'country_id': fields.many2one('res.country', 'Country',
89 change_default=True),
90- 'state_id': fields.many2one("res.country.state", 'Fed. State',
91- change_default=True, domain="[('country_id','=',country_id)]"),
92+ 'state': fields.char('Fed. State'),
93 'company_id': fields.many2one('res.company', 'Company',
94 ondelete='cascade', help="Only if this bank account belong to your company"),
95 'partner_id': fields.many2one('res.partner', 'Account Owner', required=True,
96@@ -153,8 +151,8 @@
97 cursor, user, 'zip', context=context),
98 'country_id': lambda obj, cursor, user, context: obj._default_value(
99 cursor, user, 'country_id', context=context),
100- 'state_id': lambda obj, cursor, user, context: obj._default_value(
101- cursor, user, 'state_id', context=context),
102+ 'state': lambda obj, cursor, user, context: obj._default_value(
103+ cursor, user, 'state', context=context),
104 'name': '/'
105 }
106
107@@ -231,7 +229,7 @@
108 result['city'] = part.city or False
109 result['zip'] = part.zip or False
110 result['country_id'] = part.country_id.id
111- result['state_id'] = part.state_id.id
112+ result['state'] = part.state
113 return {'value': result}
114
115 res_partner_bank()
116
117=== modified file 'openerp/addons/base/res/res_bank_view.xml'
118--- openerp/addons/base/res/res_bank_view.xml 2013-06-13 17:54:53 +0000
119+++ openerp/addons/base/res/res_bank_view.xml 2014-02-26 13:35:37 +0000
120@@ -112,7 +112,7 @@
121 <field name="zip" class="oe_inline" placeholder="ZIP"/>
122 <field name="city" class="oe_inline" placeholder="City"/>
123 </div>
124- <field name="state_id" placeholder="State" options='{"no_open": True}'/>
125+ <field name="state" placeholder="State"/>
126 <field name="country_id" placeholder="Country" options='{"no_open": True}'/>
127 </div>
128 </group>
129
130=== modified file 'openerp/addons/base/res/res_company.py'
131--- openerp/addons/base/res/res_company.py 2014-02-20 16:05:48 +0000
132+++ openerp/addons/base/res/res_company.py 2014-02-26 13:35:37 +0000
133@@ -139,7 +139,7 @@
134 'street2': fields.function(_get_address_data, fnct_inv=_set_address_data, size=128, type='char', string="Street2", multi='address'),
135 'zip': fields.function(_get_address_data, fnct_inv=_set_address_data, size=24, type='char', string="Zip", multi='address'),
136 'city': fields.function(_get_address_data, fnct_inv=_set_address_data, size=24, type='char', string="City", multi='address'),
137- 'state_id': fields.function(_get_address_data, fnct_inv=_set_address_data, type='many2one', relation='res.country.state', string="Fed. State", multi='address'),
138+ 'state': fields.function(_get_address_data, fnct_inv=_set_address_data, type='char', string="Fed. State", multi='address'),
139 'bank_ids': fields.one2many('res.partner.bank','company_id', 'Bank Accounts', help='Bank accounts related to this company'),
140 'country_id': fields.function(_get_address_data, fnct_inv=_set_address_data, type='many2one', relation='res.country', string="Country", multi='address'),
141 'email': fields.related('partner_id', 'email', size=64, type='char', string="Email", store=True),
142@@ -176,11 +176,7 @@
143 res += '\n%s: %s' % (title, ', '.join(name for id, name in account_names))
144
145 return {'value': {'rml_footer': res, 'rml_footer_readonly': res}}
146- def onchange_state(self, cr, uid, ids, state_id, context=None):
147- if state_id:
148- return {'value':{'country_id': self.pool.get('res.country.state').browse(cr, uid, state_id, context).country_id.id }}
149- return {}
150-
151+
152 def onchange_font_name(self, cr, uid, ids, font, rml_header, rml_header2, rml_header3, context=None):
153 """ To change default header style of all <para> and drawstring. """
154
155@@ -199,15 +195,6 @@
156 'rml_header3':_change_header(rml_header3, fontname)
157 }}
158
159- def on_change_country(self, cr, uid, ids, country_id, context=None):
160- res = {'domain': {'state_id': []}}
161- currency_id = self._get_euro(cr, uid, context=context)
162- if country_id:
163- currency_id = self.pool.get('res.country').browse(cr, uid, country_id, context=context).currency_id.id
164- res['domain'] = {'state_id': [('country_id','=',country_id)]}
165- res['value'] = {'currency_id': currency_id}
166- return res
167-
168 def _search(self, cr, uid, args, offset=0, limit=None, order=None,
169 context=None, count=False, access_rights_uid=None):
170 if context is None:
171
172=== modified file 'openerp/addons/base/res/res_company_view.xml'
173--- openerp/addons/base/res/res_company_view.xml 2014-02-20 16:05:48 +0000
174+++ openerp/addons/base/res/res_company_view.xml 2014-02-26 13:35:37 +0000
175@@ -48,7 +48,7 @@
176 <field name="street2"/>
177 <div>
178 <field name="city" placeholder="City" style="width: 40%%"/>
179- <field name="state_id" class="oe_no_button" placeholder="State" on_change="onchange_state(state_id)" style="width: 24%%" options='{"no_open": True}'/>
180+ <field name="state" placeholder="State" style="width: 24%%"/>
181 <field name="zip" placeholder="ZIP" style="width: 34%%"/>
182 </div>
183 <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": True}' on_change="on_change_country(country_id)"/>
184
185=== modified file 'openerp/addons/base/res/res_country.py'
186--- openerp/addons/base/res/res_country.py 2014-01-07 14:15:24 +0000
187+++ openerp/addons/base/res/res_country.py 2014-02-26 13:35:37 +0000
188@@ -82,21 +82,5 @@
189 return super(Country, self).write(cursor, user, ids, vals,
190 context=context)
191
192-
193-class CountryState(osv.osv):
194- _description="Country state"
195- _name = 'res.country.state'
196- _columns = {
197- 'country_id': fields.many2one('res.country', 'Country',
198- required=True),
199- 'name': fields.char('State Name', size=64, required=True,
200- help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton'),
201- 'code': fields.char('State Code', size=3,
202- help='The state code in max. three chars.', required=True),
203- }
204- _order = 'code'
205-
206- name_search = location_name_search
207-
208 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
209
210
211=== modified file 'openerp/addons/base/res/res_country_view.xml'
212--- openerp/addons/base/res/res_country_view.xml 2012-10-26 06:51:43 +0000
213+++ openerp/addons/base/res/res_country_view.xml 2014-02-26 13:35:37 +0000
214@@ -47,47 +47,5 @@
215 <menuitem id="menu_localisation" name="Localization" parent="menu_config_address_book" sequence="1" groups="base.group_no_one"/>
216
217 <menuitem action="action_country" id="menu_country_partner" parent="menu_localisation" sequence="0" groups="base.group_no_one"/>
218-
219- <!--
220- State
221- -->
222-
223- <record id="view_country_state_tree" model="ir.ui.view">
224- <field name="name">res.country.state.tree</field>
225- <field name="model">res.country.state</field>
226- <field name="arch" type="xml">
227- <tree string="State">
228- <field name="name"/>
229- <field name="code"/>
230- <field name="country_id"/>
231- </tree>
232- </field>
233- </record>
234-
235- <record id="view_country_state_form" model="ir.ui.view">
236- <field name="name">res.country.state.form</field>
237- <field name="model">res.country.state</field>
238- <field name="arch" type="xml">
239- <form string="State" version="7.0">
240- <group>
241- <field name="name"/>
242- <field name="code"/>
243- <field name="country_id" options='{"no_open": True}'/>
244- </group>
245- </form>
246- </field>
247- </record>
248-
249- <record id="action_country_state" model="ir.actions.act_window">
250- <field name="name">Fed. States</field>
251- <field name="type">ir.actions.act_window</field>
252- <field name="res_model">res.country.state</field>
253- <field name="view_type">form</field>
254- <field name="view_id" ref="view_country_state_tree"/>
255- <field name="help">If you are working on the American market, you can manage the different federal states you are working on from here. Each state is attached to one country.</field>
256- </record>
257-
258- <menuitem action="action_country_state" id="menu_country_state_partner" parent="menu_localisation" sequence="1" groups="base.group_no_one"/>
259-
260 </data>
261 </openerp>
262
263=== modified file 'openerp/addons/base/res/res_partner.py'
264--- openerp/addons/base/res/res_partner.py 2014-02-12 08:03:31 +0000
265+++ openerp/addons/base/res/res_partner.py 2014-02-26 13:35:37 +0000
266@@ -36,10 +36,10 @@
267 fmt = user_obj.browse(cr, SUPERUSER_ID, uid, context).company_id.country_id
268 fmt = fmt and fmt.address_format
269 layouts = {
270- '%(city)s %(state_code)s\n%(zip)s': """
271+ '%(city)s\n%(zip)s': """
272 <div class="address_format">
273 <field name="city" placeholder="City" style="width: 50%%"/>
274- <field name="state_id" class="oe_no_button" placeholder="State" style="width: 47%%" options='{"no_open": true}'/>
275+ <field name="state" placeholder="State" style="width: 47%%"/>
276 <br/>
277 <field name="zip" placeholder="ZIP"/>
278 </div>
279@@ -49,13 +49,13 @@
280 <field name="zip" placeholder="ZIP" style="width: 40%%"/>
281 <field name="city" placeholder="City" style="width: 57%%"/>
282 <br/>
283- <field name="state_id" class="oe_no_button" placeholder="State" options='{"no_open": true}'/>
284+ <field name="state" placeholder="State"/>
285 </div>
286 """,
287- '%(city)s\n%(state_name)s\n%(zip)s': """
288+ '%(city)s\n%(zip)s': """
289 <div class="address_format">
290 <field name="city" placeholder="City"/>
291- <field name="state_id" class="oe_no_button" placeholder="State" options='{"no_open": true}'/>
292+ <field name="state" placeholder="State"/>
293 <field name="zip" placeholder="ZIP"/>
294 </div>
295 """
296@@ -262,7 +262,7 @@
297 'street2': fields.char('Street2', size=128),
298 'zip': fields.char('Zip', change_default=True, size=24),
299 'city': fields.char('City', size=128),
300- 'state_id': fields.many2one("res.country.state", 'State', ondelete='restrict'),
301+ 'state_id': fields.char('State'),
302 'country_id': fields.many2one('res.country', 'Country', ondelete='restrict'),
303 'country': fields.related('country_id', type='many2one', relation='res.country', string='Country',
304 deprecated="This field will be removed as of OpenERP 7.1, use country_id instead"),
305@@ -384,12 +384,6 @@
306 result['value'] = {'use_parent_address': False}
307 return result
308
309- def onchange_state(self, cr, uid, ids, state_id, context=None):
310- if state_id:
311- country_id = self.pool['res.country.state'].browse(cr, uid, state_id, context).country_id.id
312- return {'value':{'country_id':country_id}}
313- return {}
314-
315 def _check_ean_key(self, cr, uid, ids, context=None):
316 for partner_o in self.pool['res.partner'].read(cr, uid, ids, ['ean13',]):
317 thisean=partner_o['ean13']
318@@ -749,10 +743,8 @@
319 # get the information that will be injected into the display format
320 # get the address format
321 address_format = address.country_id and address.country_id.address_format or \
322- "%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s"
323+ "%(street)s\n%(street2)s\n%(city)s %(zip)s\n%(country_name)s"
324 args = {
325- 'state_code': address.state_id and address.state_id.code or '',
326- 'state_name': address.state_id and address.state_id.name or '',
327 'country_code': address.country_id and address.country_id.code or '',
328 'country_name': address.country_id and address.country_id.name or '',
329 'company_name': address.parent_id and address.parent_id.name or '',
330
331=== modified file 'openerp/addons/base/res/res_partner_demo.xml'
332--- openerp/addons/base/res/res_partner_demo.xml 2014-01-16 09:17:16 +0000
333+++ openerp/addons/base/res/res_partner_demo.xml 2014-02-26 13:35:37 +0000
334@@ -118,7 +118,6 @@
335 <field name="city">Fremont</field>
336 <field name="zip">94538</field>
337 <field name="country_id" ref="base.us"/>
338- <field model="res.country.state" name="state_id" search="[('code','ilike','ca')]"/>
339 <field name="street">3661 Station Street</field>
340 <field name="email">deltapc@yourcompany.example.com</field>
341 <field name="phone">+1 510 340 2385</field>
342@@ -132,7 +131,6 @@
343 <field name="is_company">1</field>
344 <field eval="0" name="customer"/>
345 <field name="country_id" ref="base.us"/>
346- <field model="res.country.state" name="state_id" search="[('code','ilike','il')]"/>
347 <field name="zip">60610</field>
348 <field name="city">Chicago</field>
349 <field name="email">epic@yourcompany.example.com</field>
350@@ -150,7 +148,6 @@
351 <field name="zip">90001</field>
352 <field name="city">Los Angeles</field>
353 <field name="country_id" ref="base.us"/>
354- <field model="res.country.state" name="state_id" search="[('code','ilike','ca')]"/>
355 <field name="street">23 Rockwell Lane</field>
356 <field name="email">openelecapplications@yourcompany.example.com</field>
357 <field name="phone">+1 312 349 2121</field>
358@@ -209,7 +206,6 @@
359 <field name="city">Miami</field>
360 <field name="zip">33169</field>
361 <field name="country_id" ref="base.us"/>
362- <field model="res.country.state" name="state_id" search="[('code','=','FL')]"/>
363 <field name="email">jackson@yourcompany.example.com</field>
364 <field name="phone">+1 786 525 0724</field>
365 <field name="street">3203 Lamberts Branch Road</field>
366@@ -274,7 +270,6 @@
367 <field name="city">Detroit</field>
368 <field name="zip">48212</field>
369 <field name="country_id" ref="base.us"/>
370- <field model="res.country.state" name="state_id" search="[('code','ilike','mi')]"/>
371 <field name="street">60, Rosewood Court</field>
372 <field name="email">chamberworks@yourcompany.example.com</field>
373 <field name="phone">+1 313 222 3456</field>
374@@ -349,7 +344,6 @@
375 <field name="city">Cupertino</field>
376 <field name="zip">95014</field>
377 <field name="country_id" ref="base.us"/>
378- <field model="res.country.state" name="state_id" search="[('code','ilike','ca')]"/>
379 <field name="street">10200 S. De Anza Blvd</field>
380 <field name="email">seagate@yourcompany.example.com</field>
381 <field name="phone">+1 800 732 4283</field>
382
383=== modified file 'openerp/addons/base/res/res_partner_report_address.xml'
384--- openerp/addons/base/res/res_partner_report_address.xml 2013-10-06 14:40:20 +0000
385+++ openerp/addons/base/res/res_partner_report_address.xml 2014-02-26 13:35:37 +0000
386@@ -8,7 +8,7 @@
387 <street2 type="field" name="street2"/>
388 <zip type="field" name="zip"/>
389 <city type="field" name="city"/>
390- <state type="field" name="state_id.name"/>
391+ <state type="field" name="state"/>
392 <country type="field" name="country_id.name"/>
393 </address>
394 </addresses>
395
396=== modified file 'openerp/addons/base/res/res_partner_view.xml'
397--- openerp/addons/base/res/res_partner_view.xml 2014-02-03 16:30:52 +0000
398+++ openerp/addons/base/res/res_partner_view.xml 2014-02-26 13:35:37 +0000
399@@ -166,7 +166,7 @@
400 <field name="street2" attrs="{'readonly': [('use_parent_address','=',True)]}"/>
401 <div class="address_format">
402 <field name="city" placeholder="City" style="width: 40%%" attrs="{'readonly': [('use_parent_address','=',True)]}"/>
403- <field name="state_id" class="oe_no_button" placeholder="State" style="width: 37%%" options='{"no_open": True}' on_change="onchange_state(state_id)" attrs="{'readonly': [('use_parent_address','=',True)]}"/>
404+ <field name="state_id" placeholder="State" style="width: 37%%" attrs="{'readonly': [('use_parent_address','=',True)]}"/>
405 <field name="zip" placeholder="ZIP" style="width: 20%%" attrs="{'readonly': [('use_parent_address','=',True)]}"/>
406 </div>
407 <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": True}' attrs="{'readonly': [('use_parent_address','=',True)]}"/>
408@@ -281,7 +281,7 @@
409 <field name="street2"/>
410 <div class="address_format">
411 <field name="city" placeholder="City" style="width: 40%%"/>
412- <field name="state_id" class="oe_no_button" placeholder="State" style="width: 37%%" options='{"no_open": True}' on_change="onchange_state(state_id)"/>
413+ <field name="state_id" placeholder="State" style="width: 37%%"/>
414 <field name="zip" placeholder="ZIP" style="width: 20%%"/>
415 </div>
416 <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": True}'/>
417
418=== modified file 'openerp/addons/base/res/res_users.py'
419--- openerp/addons/base/res/res_users.py 2014-02-19 14:06:17 +0000
420+++ openerp/addons/base/res/res_users.py 2014-02-26 13:35:37 +0000
421@@ -172,10 +172,6 @@
422 v = {'email': login} if tools.single_email_re.match(login) else {}
423 return {'value': v}
424
425- def onchange_state(self, cr, uid, ids, state_id, context=None):
426- partner_ids = [user.partner_id.id for user in self.browse(cr, uid, ids, context=context)]
427- return self.pool.get('res.partner').onchange_state(cr, uid, partner_ids, state_id, context=context)
428-
429 def onchange_type(self, cr, uid, ids, is_company, context=None):
430 """ Wrapper on the user.partner onchange_type, because some calls to the
431 partner form view applied to the user may trigger the
432
433=== modified file 'openerp/addons/base/security/ir.model.access.csv'
434--- openerp/addons/base/security/ir.model.access.csv 2014-01-16 14:06:21 +0000
435+++ openerp/addons/base/security/ir.model.access.csv 2014-02-26 13:35:37 +0000
436@@ -44,9 +44,7 @@
437 "access_res_company_group_erp_manager","res_company group_erp_manager","model_res_company","group_erp_manager",1,1,1,1
438 "access_res_company_group_user","res_company group_user","model_res_company",,1,0,0,0
439 "access_res_country_group_all","res_country group_user_all","model_res_country",,1,0,0,0
440-"access_res_country_state_group_all","res_country_state group_user_all","model_res_country_state",,1,0,0,0
441 "access_res_country_group_user","res_country group_user","model_res_country","group_partner_manager",1,1,1,1
442-"access_res_country_state_group_user","res_country_state group_user","model_res_country_state","group_partner_manager",1,1,1,1
443 "access_res_currency_group_all","res_currency group_all","model_res_currency",,1,0,0,0
444 "access_res_currency_rate_group_all","res_currency_rate group_all","model_res_currency_rate",,1,0,0,0
445 "access_res_currency_rate_type_group_all","res_currency_rate_type group_all","model_res_currency_rate_type",,1,0,0,0
446
447=== modified file 'openerp/addons/base/tests/test_expression.py'
448--- openerp/addons/base/tests/test_expression.py 2014-02-09 00:37:45 +0000
449+++ openerp/addons/base/tests/test_expression.py 2014-02-26 13:35:37 +0000
450@@ -127,13 +127,10 @@
451
452 # Get models
453 partner_obj = registry('res.partner')
454- state_obj = registry('res.country.state')
455 bank_obj = registry('res.partner.bank')
456
457 # Get test columns
458- partner_state_id_col = partner_obj._columns.get('state_id') # many2one on res.partner to res.country.state
459 partner_parent_id_col = partner_obj._columns.get('parent_id') # many2one on res.partner to res.partner
460- state_country_id_col = state_obj._columns.get('country_id') # many2one on res.country.state on res.country
461 partner_child_ids_col = partner_obj._columns.get('child_ids') # one2many on res.partner to res.partner
462 partner_bank_ids_col = partner_obj._columns.get('bank_ids') # one2many on res.partner to res.partner.bank
463 category_id_col = partner_obj._columns.get('category_id') # many2many on res.partner to res.partner.category
464@@ -142,7 +139,6 @@
465 bank_type = bank_obj._bank_type_get(cr, uid)[0]
466 # Get country/state data
467 country_us_id = registry('res.country').search(cr, uid, [('code', 'like', 'US')])[0]
468- state_ids = registry('res.country.state').search(cr, uid, [('country_id', '=', country_us_id)], limit=2)
469
470 # Create demo data: partners and bank object
471 p_a = partner_obj.create(cr, uid, {'name': 'test__A', 'state_id': state_ids[0]})
472
473=== modified file 'openerp/addons/base/tests/test_mail_examples.py'
474--- openerp/addons/base/tests/test_mail_examples.py 2014-02-09 00:37:45 +0000
475+++ openerp/addons/base/tests/test_mail_examples.py 2014-02-26 13:35:37 +0000
476@@ -49,7 +49,7 @@
477 ${object.company_id.street}<br/>
478 ${object.company_id.street2}<br/>
479 ${object.company_id.zip} ${object.company_id.city}<br/>
480- ${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''}<br/>
481+ ${object.company_id.state}<br/>
482 </span>
483 <div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
484 Phone:&nbsp; ${object.company_id.phone}
485
486=== modified file 'openerp/addons/base/tests/test_search.py'
487--- openerp/addons/base/tests/test_search.py 2012-12-07 15:58:25 +0000
488+++ openerp/addons/base/tests/test_search.py 2014-02-26 13:35:37 +0000
489@@ -68,14 +68,13 @@
490
491 # Get country/state data
492 country_us_id = registry('res.country').search(cr, uid, [('code', 'like', 'US')])[0]
493- state_ids = registry('res.country.state').search(cr, uid, [('country_id', '=', country_us_id)], limit=2)
494 country_be_id = registry('res.country').search(cr, uid, [('code', 'like', 'BE')])[0]
495
496 # Create test users
497 search_user = users_obj.create(cr, uid, {'name': '__search', 'login': '__search', 'groups_id': [(6, 0, [group_employee_id])]})
498- a = users_obj.create(cr, uid, {'name': '__test_A', 'login': '__test_A', 'country_id': country_be_id, 'state_id': country_be_id})
499- b = users_obj.create(cr, uid, {'name': '__test_B', 'login': '__a_test_B', 'country_id': country_us_id, 'state_id': state_ids[1]})
500- c = users_obj.create(cr, uid, {'name': '__test_B', 'login': '__z_test_B', 'country_id': country_us_id, 'state_id': state_ids[0]})
501+ a = users_obj.create(cr, uid, {'name': '__test_A', 'login': '__test_A', 'country_id': country_be_id})
502+ b = users_obj.create(cr, uid, {'name': '__test_B', 'login': '__a_test_B', 'country_id': country_us_id})
503+ c = users_obj.create(cr, uid, {'name': '__test_B', 'login': '__z_test_B', 'country_id': country_us_id})
504
505 # Do: search on res.users, order on a field on res.partner to try inherits'd fields, then res.users
506 user_ids = users_obj.search(cr, search_user, [], order='name asc, login desc')
507@@ -84,13 +83,13 @@
508 self.assertEqual(test_user_ids, expected_ids, 'search on res_users did not provide expected ids or expected order')
509
510 # Do: order on many2one and inherits'd fields
511- user_ids = users_obj.search(cr, search_user, [], order='state_id asc, country_id desc, name asc, login desc')
512+ user_ids = users_obj.search(cr, search_user, [], order='country_id desc, name asc, login desc')
513 expected_ids = [c, b, a, search_user]
514 test_user_ids = filter(lambda x: x in expected_ids, user_ids)
515 self.assertEqual(test_user_ids, expected_ids, 'search on res_users did not provide expected ids or expected order')
516
517 # Do: order on many2one and inherits'd fields
518- user_ids = users_obj.search(cr, search_user, [], order='country_id desc, state_id desc, name asc, login desc')
519+ user_ids = users_obj.search(cr, search_user, [], order='country_id desc, name asc, login desc')
520 expected_ids = [search_user, b, c, a]
521 test_user_ids = filter(lambda x: x in expected_ids, user_ids)
522 self.assertEqual(test_user_ids, expected_ids, 'search on res_users did not provide expected ids or expected order')
523
524=== modified file 'openerp/osv/expression.py'
525--- openerp/osv/expression.py 2014-02-06 11:04:23 +0000
526+++ openerp/osv/expression.py 2014-02-26 13:35:37 +0000
527@@ -445,25 +445,20 @@
528 # running examples:
529 # - res_users.name, like, foo: name is on res_partner, not on res_users
530 # - res_partner.bank_ids.name, like, foo: bank_ids is a one2many with _auto_join
531- # - res_partner.state_id.name, like, foo: state_id is a many2one with _auto_join
532 # A join:
533 # - link between src_table and dst_table, using src_field and dst_field
534 # i.e.: inherits: res_users.partner_id = res_partner.id
535 # i.e.: one2many: res_partner.id = res_partner_bank.partner_id
536- # i.e.: many2one: res_partner.state_id = res_country_state.id
537 # - done in the context of a field
538 # i.e.: inherits: 'partner_id'
539 # i.e.: one2many: 'bank_ids'
540- # i.e.: many2one: 'state_id'
541 # - table names use aliases: initial table followed by the context field
542 # names, joined using a '__'
543 # i.e.: inherits: res_partner as res_users__partner_id
544 # i.e.: one2many: res_partner_bank as res_partner__bank_ids
545- # i.e.: many2one: res_country_state as res_partner__state_id
546 # - join condition use aliases
547 # i.e.: inherits: res_users.partner_id = res_users__partner_id.id
548 # i.e.: one2many: res_partner.id = res_partner__bank_ids.parr_id
549- # i.e.: many2one: res_partner.state_id = res_partner__state_id.id
550 # Variables explanation:
551 # - src_table: working table before the join
552 # -> res_users, res_partner, res_partner
553@@ -473,7 +468,6 @@
554 # necessarily a field (because 'id' is not a field instance)
555 # i.e.: inherits: 'partner_id', found in the inherits of the current table
556 # i.e.: one2many: 'id', not a field
557- # i.e.: many2one: 'state_id', the current field name
558 # - dst_table_link_name: field name used to link the dst table, not
559 # necessarily a field (because 'id' is not a field instance)
560 # i.e.: inherits: 'id', not a field
561@@ -482,7 +476,6 @@
562 # - context_field_name: field name used as a context to make the alias
563 # i.e.: inherits: 'partner_id': found in the inherits of the current table
564 # i.e.: one2many: 'bank_ids': current field name
565- # i.e.: many2one: 'state_id': current field name
566 # --------------------------------------------------
567
568 def __init__(self, leaf, model, join_context=None):
569@@ -624,8 +617,6 @@
570
571 :attr list result: list that will hold the result of the parsing
572 as a list of ExtendedLeaf
573- :attr list joins: list of join conditions, such as
574- (res_country_state."id" = res_partner."state_id")
575 :attr root_model: base model for the query
576 :attr list expression: the domain expression, that will be normalized
577 and prepared
578@@ -818,7 +809,6 @@
579 # ----------------------------------------
580
581 elif len(field_path) > 1 and field._type == 'many2one' and field._auto_join:
582- # res_partner.state_id = res_partner__state_id.id
583 leaf.add_join_context(relational_model, field_path[0], 'id', field_path[0])
584 push(create_substitution_leaf(leaf, (field_path[1], operator, right), relational_model))
585