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

Proposed by Mehul Mehta(OpenERP)
Status: Needs review
Proposed branch: lp:~openerp-dev/openobject-server/trunk-res-state-cleaning-mme
Merge into: lp:openobject-server
Diff against target: 959 lines (+56/-341)
20 files modified
openerp/addons/base/__openerp__.py (+0/-1)
openerp/addons/base/report/corporate_defaults.xml (+1/-1)
openerp/addons/base/res/res.country.state.csv (+0/-52)
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/-7)
openerp/addons/base/res/res_company_view.xml (+1/-1)
openerp/addons/base/res/res_country.py (+1/-18)
openerp/addons/base/res/res_country_data.xml (+11/-11)
openerp/addons/base/res/res_country_view.xml (+0/-41)
openerp/addons/base/res/res_partner.py (+10/-16)
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 (+6/-6)
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 (+7/-146)
openerp/addons/base/tests/test_mail_examples.py (+1/-1)
openerp/addons/base/tests/test_search.py (+7/-9)
openerp/osv/expression.py (+1/-9)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/trunk-res-state-cleaning-mme
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+209912@code.launchpad.net

Description of the change

Hello,

  I have clean res.country.state.

    - remove res.country.state model
    - replace all many2one state_ids field by a char field

Thanks,
Mehul Mehta(mme)

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

[MERGE] Merged with lp:openobject-server

5111. By Mehul Mehta(OpenERP)

[IMP] improved a change as per regarding error

5112. By Mehul Mehta(OpenERP)

[MERGE] Merged with lp:openobject-server

5113. By Mehul Mehta(OpenERP)

[MERGE] Merged with lp:openobject-server

5114. By Mehul Mehta(OpenERP)

[MERGE] Merged with lp:openobject-server

5115. By Mehul Mehta(OpenERP)

[MERGE] Merged with lp:openobject-server

5116. By Mehul Mehta(OpenERP)

[IMP]improved a code for state field print issue in report

5117. By Mehul Mehta(OpenERP)

[IMP] improved address_format field in res_country_data file

5118. By Mehul Mehta(OpenERP)

[MERGE] Merged with lp:openobject-server

Revision history for this message
Ray Carnes (rcarnes) wrote :

Puerto Rico is missing from the list of 'states' (it is an unincorporated territory of the United States).

For completeness, the following list adds additional missing state equivalents:

id code name
base.state_us_52 AS American Samoa
base.state_us_53 FM Federated States of Micronesia
base.state_us_54 GU Guam
base.state_us_55 MH Marshall Islands
base.state_us_56 MP Northern Mariana Islands
base.state_us_57 PW Palau
base.state_us_58 PR Puerto Rico
base.state_us_59 VI Virgin Islands
base.state_us_60 AA Armed Forces - Americas
base.state_us_61 AE Armed Forces - Europe
base.state_us_62 AP Armed Forces - Pacific

5119. By Mehul Mehta(OpenERP)

[MERGE] Merged lp:openobject-server

5120. By Mehul Mehta(OpenERP)

[IMP] Improved minor changes in res_partner

5121. By Mehul Mehta(OpenERP)

[MERGE] Merged openobject-server

Unmerged revisions

5121. By Mehul Mehta(OpenERP)

[MERGE] Merged openobject-server

5120. By Mehul Mehta(OpenERP)

[IMP] Improved minor changes in res_partner

5119. By Mehul Mehta(OpenERP)

[MERGE] Merged lp:openobject-server

5118. By Mehul Mehta(OpenERP)

[MERGE] Merged with lp:openobject-server

5117. By Mehul Mehta(OpenERP)

[IMP] improved address_format field in res_country_data file

5116. By Mehul Mehta(OpenERP)

[IMP]improved a code for state field print issue in report

5115. By Mehul Mehta(OpenERP)

[MERGE] Merged with lp:openobject-server

5114. By Mehul Mehta(OpenERP)

[MERGE] Merged with lp:openobject-server

5113. By Mehul Mehta(OpenERP)

[MERGE] Merged with lp:openobject-server

5112. By Mehul Mehta(OpenERP)

[MERGE] Merged with lp:openobject-server

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openerp/addons/base/__openerp__.py'
2--- openerp/addons/base/__openerp__.py 2014-05-01 18:42:17 +0000
3+++ openerp/addons/base/__openerp__.py 2014-05-19 04:38:55 +0000
4@@ -41,7 +41,6 @@
5 'base_menu.xml',
6 'res/res_security.xml',
7 'res/res_config.xml',
8- 'res/res.country.state.csv',
9 'ir/ir_actions.xml',
10 'ir/ir_config_parameter_view.xml',
11 'ir/ir_cron_view.xml',
12
13=== modified file 'openerp/addons/base/report/corporate_defaults.xml'
14--- openerp/addons/base/report/corporate_defaults.xml 2012-08-20 10:20:22 +0000
15+++ openerp/addons/base/report/corporate_defaults.xml 2014-05-19 04:38:55 +0000
16@@ -8,7 +8,7 @@
17 <street type="field" name="street"/>
18 <zip type="field" name="zip"/>
19 <city type="field" name="city"/>
20- <state type="field" name="state_id.name"/>
21+ <state type="field" name="state_name"/>
22 <country type="field" name="country_id.name"/>
23 <phone type="field" name="phone"/>
24 <email type="field" name="email"/>
25
26=== removed file 'openerp/addons/base/res/res.country.state.csv'
27--- openerp/addons/base/res/res.country.state.csv 2013-10-06 11:26:08 +0000
28+++ openerp/addons/base/res/res.country.state.csv 1970-01-01 00:00:00 +0000
29@@ -1,52 +0,0 @@
30-"id","country_id:id","name","code"
31-state_us_1,us,"Alabama","AL"
32-state_us_2,us,"Alaska","AK"
33-state_us_3,us,"Arizona","AZ"
34-state_us_4,us,"Arkansas","AR"
35-state_us_5,us,"California","CA"
36-state_us_6,us,"Colorado","CO"
37-state_us_7,us,"Connecticut","CT"
38-state_us_8,us,"Delaware","DE"
39-state_us_9,us,"District of Columbia","DC"
40-state_us_10,us,"Florida","FL"
41-state_us_11,us,"Georgia","GA"
42-state_us_12,us,"Hawaii","HI"
43-state_us_13,us,"Idaho","ID"
44-state_us_14,us,"Illinois","IL"
45-state_us_15,us,"Indiana","IN"
46-state_us_16,us,"Iowa","IA"
47-state_us_17,us,"Kansas","KS"
48-state_us_18,us,"Kentucky","KY"
49-state_us_19,us,"Louisiana","LA"
50-state_us_20,us,"Maine","ME"
51-state_us_21,us,"Montana","MT"
52-state_us_22,us,"Nebraska","NE"
53-state_us_23,us,"Nevada","NV"
54-state_us_24,us,"New Hampshire","NH"
55-state_us_25,us,"New Jersey","NJ"
56-state_us_26,us,"New Mexico","NM"
57-state_us_27,us,"New York","NY"
58-state_us_28,us,"North Carolina","NC"
59-state_us_29,us,"North Dakota","ND"
60-state_us_30,us,"Ohio","OH"
61-state_us_31,us,"Oklahoma","OK"
62-state_us_32,us,"Oregon","OR"
63-state_us_33,us,"Maryland","MD"
64-state_us_34,us,"Massachusetts","MA"
65-state_us_35,us,"Michigan","MI"
66-state_us_36,us,"Minnesota","MN"
67-state_us_37,us,"Mississippi","MS"
68-state_us_38,us,"Missouri","MO"
69-state_us_39,us,"Pennsylvania","PA"
70-state_us_40,us,"Rhode Island","RI"
71-state_us_41,us,"South Carolina","SC"
72-state_us_42,us,"South Dakota","SD"
73-state_us_43,us,"Tennessee","TN"
74-state_us_44,us,"Texas","TX"
75-state_us_45,us,"Utah","UT"
76-state_us_46,us,"Vermont","VT"
77-state_us_47,us,"Virginia","VA"
78-state_us_48,us,"Washington","WA"
79-state_us_49,us,"West Virginia","WV"
80-state_us_50,us,"Wisconsin","WI"
81-state_us_51,us,"Wyoming","WY"
82
83=== modified file 'openerp/addons/base/res/res_bank.py'
84--- openerp/addons/base/res/res_bank.py 2014-05-01 18:42:17 +0000
85+++ openerp/addons/base/res/res_bank.py 2014-05-19 04:38:55 +0000
86@@ -32,8 +32,7 @@
87 'street2': fields.char('Street2', size=128),
88 'zip': fields.char('Zip', change_default=True, size=24),
89 'city': fields.char('City', size=128),
90- 'state': fields.many2one("res.country.state", 'Fed. State',
91- domain="[('country_id', '=', country)]"),
92+ 'state': fields.char('Fed. State', size=32),
93 'country': fields.many2one('res.country', 'Country'),
94 'email': fields.char('Email', size=64),
95 'phone': fields.char('Phone', size=64),
96@@ -96,7 +95,7 @@
97
98 def _default_value(self, cursor, user, field, context=None):
99 if context is None: context = {}
100- if field in ('country_id', 'state_id'):
101+ if field in ('country_id', 'state_name'):
102 value = False
103 else:
104 value = ''
105@@ -124,8 +123,7 @@
106 'city': fields.char('City', size=128),
107 'country_id': fields.many2one('res.country', 'Country',
108 change_default=True),
109- 'state_id': fields.many2one("res.country.state", 'Fed. State',
110- change_default=True, domain="[('country_id','=',country_id)]"),
111+ 'state_name': fields.char('Fed. State', size=32),
112 'company_id': fields.many2one('res.company', 'Company',
113 ondelete='cascade', help="Only if this bank account belong to your company"),
114 'partner_id': fields.many2one('res.partner', 'Account Owner', required=True,
115@@ -147,8 +145,8 @@
116 cursor, user, 'zip', context=context),
117 'country_id': lambda obj, cursor, user, context: obj._default_value(
118 cursor, user, 'country_id', context=context),
119- 'state_id': lambda obj, cursor, user, context: obj._default_value(
120- cursor, user, 'state_id', context=context),
121+ 'state_name': lambda obj, cursor, user, context: obj._default_value(
122+ cursor, user, 'state_name', context=context),
123 'name': '/'
124 }
125
126@@ -225,7 +223,7 @@
127 result['city'] = part.city or False
128 result['zip'] = part.zip or False
129 result['country_id'] = part.country_id.id
130- result['state_id'] = part.state_id.id
131+ result['state_name'] = part.state_name or False
132 return {'value': result}
133
134 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
135
136=== modified file 'openerp/addons/base/res/res_bank_view.xml'
137--- openerp/addons/base/res/res_bank_view.xml 2014-04-11 13:15:01 +0000
138+++ openerp/addons/base/res/res_bank_view.xml 2014-05-19 04:38:55 +0000
139@@ -113,7 +113,7 @@
140 <field name="zip" class="oe_inline" placeholder="ZIP"/>
141 <field name="city" class="oe_inline" placeholder="City"/>
142 </div>
143- <field name="state_id" placeholder="State" options='{"no_open": True}'/>
144+ <field name="state_name" placeholder="State"/>
145 <field name="country_id" placeholder="Country" options='{"no_open": True}'/>
146 </div>
147 </group>
148
149=== modified file 'openerp/addons/base/res/res_company.py'
150--- openerp/addons/base/res/res_company.py 2014-03-11 13:38:50 +0000
151+++ openerp/addons/base/res/res_company.py 2014-05-19 04:38:55 +0000
152@@ -139,7 +139,7 @@
153 'street2': fields.function(_get_address_data, fnct_inv=_set_address_data, size=128, type='char', string="Street2", multi='address'),
154 'zip': fields.function(_get_address_data, fnct_inv=_set_address_data, size=24, type='char', string="Zip", multi='address'),
155 'city': fields.function(_get_address_data, fnct_inv=_set_address_data, size=24, type='char', string="City", multi='address'),
156- 'state_id': fields.function(_get_address_data, fnct_inv=_set_address_data, type='many2one', relation='res.country.state', string="Fed. State", multi='address'),
157+ 'state_name': fields.function(_get_address_data, fnct_inv=_set_address_data, size=32, type='char', string="Fed. State", multi='address'),
158 'bank_ids': fields.one2many('res.partner.bank','company_id', 'Bank Accounts', help='Bank accounts related to this company'),
159 'country_id': fields.function(_get_address_data, fnct_inv=_set_address_data, type='many2one', relation='res.country', string="Country", multi='address'),
160 'email': fields.related('partner_id', 'email', size=64, type='char', string="Email", store=True),
161@@ -176,10 +176,6 @@
162 res += '\n%s: %s' % (title, ', '.join(name for id, name in account_names))
163
164 return {'value': {'rml_footer': res, 'rml_footer_readonly': res}}
165- def onchange_state(self, cr, uid, ids, state_id, context=None):
166- if state_id:
167- return {'value':{'country_id': self.pool.get('res.country.state').browse(cr, uid, state_id, context).country_id.id }}
168- return {}
169
170 def onchange_font_name(self, cr, uid, ids, font, rml_header, rml_header2, rml_header3, context=None):
171 """ To change default header style of all <para> and drawstring. """
172@@ -200,11 +196,10 @@
173 }}
174
175 def on_change_country(self, cr, uid, ids, country_id, context=None):
176- res = {'domain': {'state_id': []}}
177+ res = {}
178 currency_id = self._get_euro(cr, uid, context=context)
179 if country_id:
180 currency_id = self.pool.get('res.country').browse(cr, uid, country_id, context=context).currency_id.id
181- res['domain'] = {'state_id': [('country_id','=',country_id)]}
182 res['value'] = {'currency_id': currency_id}
183 return res
184
185
186=== modified file 'openerp/addons/base/res/res_company_view.xml'
187--- openerp/addons/base/res/res_company_view.xml 2014-04-23 13:26:35 +0000
188+++ openerp/addons/base/res/res_company_view.xml 2014-05-19 04:38:55 +0000
189@@ -48,7 +48,7 @@
190 <field name="street2"/>
191 <div>
192 <field name="city" placeholder="City" style="width: 40%%"/>
193- <field name="state_id" class="oe_no_button" placeholder="State" on_change="onchange_state(state_id)" style="width: 24%%" options='{"no_open": True}'/>
194+ <field name="state_name" placeholder="State" style="width: 24%%"/>
195 <field name="zip" placeholder="ZIP" style="width: 34%%"/>
196 </div>
197 <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": True}' on_change="on_change_country(country_id)"/>
198
199=== modified file 'openerp/addons/base/res/res_country.py'
200--- openerp/addons/base/res/res_country.py 2014-02-25 09:13:58 +0000
201+++ openerp/addons/base/res/res_country.py 2014-05-19 04:38:55 +0000
202@@ -52,7 +52,6 @@
203 addresses belonging to this country.\n\nYou can use the python-style string patern with all the field of the address \
204 (for example, use '%(street)s' to display the field 'street') plus
205 \n%(state_name)s: the name of the state
206- \n%(state_code)s: the code of the state
207 \n%(country_name)s: the name of the country
208 \n%(country_code)s: the code of the country"""),
209 'currency_id': fields.many2one('res.currency', 'Currency'),
210@@ -65,7 +64,7 @@
211 'The code of the country must be unique !')
212 ]
213 _defaults = {
214- 'address_format': "%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s",
215+ 'address_format': "%(street)s\n%(street2)s\n%(city)s %(state_name)s %(zip)s\n%(country_name)s",
216 }
217 _order='name'
218
219@@ -83,21 +82,5 @@
220 return super(Country, self).write(cursor, user, ids, vals,
221 context=context)
222
223-
224-class CountryState(osv.osv):
225- _description="Country state"
226- _name = 'res.country.state'
227- _columns = {
228- 'country_id': fields.many2one('res.country', 'Country',
229- required=True),
230- 'name': fields.char('State Name', size=64, required=True,
231- help='Administrative divisions of a country. E.g. Fed. State, Departement, Canton'),
232- 'code': fields.char('State Code', size=3,
233- help='The state code in max. three chars.', required=True),
234- }
235- _order = 'code'
236-
237- name_search = location_name_search
238-
239 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
240
241
242=== modified file 'openerp/addons/base/res/res_country_data.xml'
243--- openerp/addons/base/res/res_country_data.xml 2014-02-25 09:13:58 +0000
244+++ openerp/addons/base/res/res_country_data.xml 2014-05-19 04:38:55 +0000
245@@ -83,7 +83,7 @@
246 <field name="name">Australia</field>
247 <field name="code">au</field>
248 <field name="image" type="base64" file="base/static/img/country_flags/au.png"></field>
249- <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s'" />
250+ <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s %(state_name)s %(zip)s\n%(country_name)s'" />
251 <field name="currency_id" ref="AUD"/>
252 </record>
253 <record id="aw" model="res.country">
254@@ -126,7 +126,7 @@
255 <field name="name">Belgium</field>
256 <field name="code">be</field>
257 <field name="image" type="base64" file="base/static/img/country_flags/be.png"></field>
258- <field name="address_format" eval="'%(street)s\n%(street2)s\n%(zip)s %(city)s\n%(country_name)s'" />
259+ <field name="address_format" eval="'%(street)s\n%(street2)s\n%(zip)s %(city)s %(state_name)s\n%(country_name)s'" />
260 <field name="currency_id" ref="EUR"/>
261 </record>
262 <record id="bf" model="res.country">
263@@ -192,7 +192,7 @@
264 <field name="name">Brazil</field>
265 <field name="code">br</field>
266 <field name="image" type="base64" file="base/static/img/country_flags/br.png"></field>
267- <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s %(state_code)s\n%(zip)s\n%(country_name)s'" />
268+ <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s %(state_name)s\n %(zip)s\n%(country_name)s'" />
269 <field name="currency_id" ref="BRL"/>
270 </record>
271 <record id="bs" model="res.country">
272@@ -234,7 +234,7 @@
273 <field name="name">Canada</field>
274 <field name="code">ca</field>
275 <field name="image" type="base64" file="base/static/img/country_flags/ca.png"></field>
276- <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s'" />
277+ <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s %(state_name)s %(zip)s\n%(country_name)s'" />
278 <field name="currency_id" ref="CAD"/>
279 </record>
280 <record id="cc" model="res.country">
281@@ -349,7 +349,7 @@
282 <field name="name">Germany</field>
283 <field name="code">de</field>
284 <field name="image" type="base64" file="base/static/img/country_flags/de.png"></field>
285- <field name="address_format" eval="'%(street)s\n%(street2)s\n%(zip)s %(city)s\n%(country_name)s'" />
286+ <field name="address_format" eval="'%(street)s\n%(street2)s\n%(zip)s %(city)s %(state_name)s\n%(country_name)s'" />
287 <field name="currency_id" ref="EUR"/>
288 </record>
289 <record id="dj" model="res.country">
290@@ -415,7 +415,7 @@
291 <field name="name">Spain</field>
292 <field name="code">es</field>
293 <field name="image" type="base64" file="base/static/img/country_flags/es.png"></field>
294- <field name="address_format" eval="'%(street)s\n%(street2)s\n%(zip)s %(city)s\n%(country_name)s'" />
295+ <field name="address_format" eval="'%(street)s\n%(street2)s\n%(zip)s %(city)s %(state_name)s\n%(country_name)s'" />
296 <field name="currency_id" ref="EUR"/>
297 </record>
298 <record id="et" model="res.country">
299@@ -458,7 +458,7 @@
300 <field name="name">France</field>
301 <field name="code">fr</field>
302 <field name="image" type="base64" file="base/static/img/country_flags/fr.png"></field>
303- <field name="address_format" eval="'%(street)s\n%(street2)s\n%(zip)s %(city)s\n%(country_name)s'" />
304+ <field name="address_format" eval="'%(street)s\n%(street2)s\n%(zip)s %(city)s %(state_name)s\n%(country_name)s'" />
305 <field name="currency_id" ref="EUR"/>
306 </record>
307 <record id="ga" model="res.country">
308@@ -630,7 +630,7 @@
309 <field name="name">India</field>
310 <field name="code">in</field>
311 <field name="image" type="base64" file="base/static/img/country_flags/in.png"></field>
312- <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s %(zip)s\n%(state_name)s\n%(country_name)s'" />
313+ <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s %(zip)s\n %(state_name)s\n %(country_name)s'" />
314 <field name="currency_id" ref="INR"/>
315 </record>
316 <record id="io" model="res.country">
317@@ -996,7 +996,7 @@
318 <field name="name">Netherlands</field>
319 <field name="code">nl</field>
320 <field name="image" type="base64" file="base/static/img/country_flags/nl.png"></field>
321- <field name="address_format" eval="'%(street)s\n%(street2)s\n%(zip)s %(city)s\n%(country_name)s'" />
322+ <field name="address_format" eval="'%(street)s\n%(street2)s\n%(zip)s %(city)s %(state_name)s\n%(country_name)s'" />
323 <field name="currency_id" ref="EUR"/>
324 </record>
325 <record id="no" model="res.country">
326@@ -1393,9 +1393,9 @@
327 </record>
328 <record id="uk" model="res.country">
329 <field name="name">United Kingdom</field>
330- <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s\n%(state_name)s\n%(zip)s\n%(country_name)s'" />
331 <field name="code">gb</field>
332 <field name="image" type="base64" file="base/static/img/country_flags/gb.png"></field>
333+ <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s\n%(zip)s\n %(state_name)s\n %(country_name)s'" />
334 <field name="currency_id" ref="GBP"/>
335 </record>
336 <record id="um" model="res.country">
337@@ -1407,7 +1407,7 @@
338 <field name="name">United States</field>
339 <field name="code">us</field>
340 <field name="image" type="base64" file="base/static/img/country_flags/us.png"></field>
341- <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s, %(state_code)s %(zip)s\n%(country_name)s'" />
342+ <field name="address_format" eval="'%(street)s\n%(street2)s\n%(city)s,%(state_name)s%(zip)s\n%(country_name)s'" />
343 <field name="currency_id" ref="USD"/>
344 </record>
345 <record id="uy" model="res.country">
346
347=== modified file 'openerp/addons/base/res/res_country_view.xml'
348--- openerp/addons/base/res/res_country_view.xml 2014-04-11 13:15:01 +0000
349+++ openerp/addons/base/res/res_country_view.xml 2014-05-19 04:38:55 +0000
350@@ -50,46 +50,5 @@
351
352 <menuitem action="action_country" id="menu_country_partner" parent="menu_localisation" sequence="0" groups="base.group_no_one"/>
353
354- <!--
355- State
356- -->
357-
358- <record id="view_country_state_tree" model="ir.ui.view">
359- <field name="name">res.country.state.tree</field>
360- <field name="model">res.country.state</field>
361- <field name="arch" type="xml">
362- <tree string="State">
363- <field name="name"/>
364- <field name="code"/>
365- <field name="country_id"/>
366- </tree>
367- </field>
368- </record>
369-
370- <record id="view_country_state_form" model="ir.ui.view">
371- <field name="name">res.country.state.form</field>
372- <field name="model">res.country.state</field>
373- <field name="arch" type="xml">
374- <form string="State" version="7.0">
375- <group>
376- <field name="name"/>
377- <field name="code"/>
378- <field name="country_id" options='{"no_open": True}'/>
379- </group>
380- </form>
381- </field>
382- </record>
383-
384- <record id="action_country_state" model="ir.actions.act_window">
385- <field name="name">Fed. States</field>
386- <field name="type">ir.actions.act_window</field>
387- <field name="res_model">res.country.state</field>
388- <field name="view_type">form</field>
389- <field name="view_id" ref="view_country_state_tree"/>
390- <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>
391- </record>
392-
393- <menuitem action="action_country_state" id="menu_country_state_partner" parent="menu_localisation" sequence="1" groups="base.group_no_one"/>
394-
395 </data>
396 </openerp>
397
398=== modified file 'openerp/addons/base/res/res_partner.py'
399--- openerp/addons/base/res/res_partner.py 2014-04-17 14:55:22 +0000
400+++ openerp/addons/base/res/res_partner.py 2014-05-19 04:38:55 +0000
401@@ -37,10 +37,10 @@
402 fmt = user_obj.browse(cr, SUPERUSER_ID, uid, context).company_id.country_id
403 fmt = fmt and fmt.address_format
404 layouts = {
405- '%(city)s %(state_code)s\n%(zip)s': """
406+ '%(city)s %(state_name)s\n%(zip)s': """
407 <div class="address_format">
408 <field name="city" placeholder="City" style="width: 50%%"/>
409- <field name="state_id" class="oe_no_button" placeholder="State" style="width: 47%%" options='{"no_open": true}'/>
410+ <field name="state_name" class="oe_no_button" placeholder="State" style="width: 47%%"/>
411 <br/>
412 <field name="zip" placeholder="ZIP"/>
413 </div>
414@@ -50,13 +50,13 @@
415 <field name="zip" placeholder="ZIP" style="width: 40%%"/>
416 <field name="city" placeholder="City" style="width: 57%%"/>
417 <br/>
418- <field name="state_id" class="oe_no_button" placeholder="State" options='{"no_open": true}'/>
419+ <field name="state_name" class="oe_no_button" placeholder="State"/>
420 </div>
421 """,
422 '%(city)s\n%(state_name)s\n%(zip)s': """
423 <div class="address_format">
424 <field name="city" placeholder="City"/>
425- <field name="state_id" class="oe_no_button" placeholder="State" options='{"no_open": true}'/>
426+ <field name="state_name" class="oe_no_button" placeholder="State"/>
427 <field name="zip" placeholder="ZIP"/>
428 </div>
429 """
430@@ -70,6 +70,7 @@
431 arch = etree.tostring(doc)
432 break
433 return arch
434+
435
436
437 def _tz_get(self,cr,uid, context=None):
438@@ -161,7 +162,7 @@
439 return [(r['code'], r['name']) for r in res]
440
441 # fields copy if 'use_parent_address' is checked
442-ADDRESS_FIELDS = ('street', 'street2', 'zip', 'city', 'state_id', 'country_id')
443+ADDRESS_FIELDS = ('street', 'street2', 'zip', 'city', 'state_name', 'country_id')
444
445 class res_partner(osv.osv, format_address):
446 _description = 'Partner'
447@@ -263,7 +264,7 @@
448 'street2': fields.char('Street2', size=128),
449 'zip': fields.char('Zip', change_default=True, size=24),
450 'city': fields.char('City', size=128),
451- 'state_id': fields.many2one("res.country.state", 'State', ondelete='restrict'),
452+ 'state_name': fields.char('State', size=32),
453 'country_id': fields.many2one('res.country', 'Country', ondelete='restrict'),
454 'country': fields.related('country_id', type='many2one', relation='res.country', string='Country',
455 deprecated="This field will be removed as of OpenERP 7.1, use country_id instead"),
456@@ -388,12 +389,6 @@
457 result['value'] = {'use_parent_address': False}
458 return result
459
460- def onchange_state(self, cr, uid, ids, state_id, context=None):
461- if state_id:
462- country_id = self.pool['res.country.state'].browse(cr, uid, state_id, context).country_id.id
463- return {'value':{'country_id':country_id}}
464- return {}
465-
466 def _check_ean_key(self, cr, uid, ids, context=None):
467 for partner_o in self.pool['res.partner'].read(cr, uid, ids, ['ean13',]):
468 thisean=partner_o['ean13']
469@@ -726,7 +721,7 @@
470 # default to type 'default' or the partner itself
471 default = result.get('default', partner.id)
472 for adr_type in adr_pref:
473- result[adr_type] = result.get(adr_type) or default
474+ result[adr_type] = result.get(adr_type) or default
475 return result
476
477 def view_header_get(self, cr, uid, view_id, view_type, context):
478@@ -760,10 +755,9 @@
479 # get the information that will be injected into the display format
480 # get the address format
481 address_format = address.country_id and address.country_id.address_format or \
482- "%(street)s\n%(street2)s\n%(city)s %(state_code)s %(zip)s\n%(country_name)s"
483+ "%(street)s\n%(street2)s\n%(city)s %(state_name)s %(zip)s\n%(country_name)s"
484 args = {
485- 'state_code': address.state_id and address.state_id.code or '',
486- 'state_name': address.state_id and address.state_id.name or '',
487+ 'state_name': address.state_name or '',
488 'country_code': address.country_id and address.country_id.code or '',
489 'country_name': address.country_id and address.country_id.name or '',
490 'company_name': address.parent_id and address.parent_id.name or '',
491
492=== modified file 'openerp/addons/base/res/res_partner_demo.xml'
493--- openerp/addons/base/res/res_partner_demo.xml 2014-04-08 08:16:48 +0000
494+++ openerp/addons/base/res/res_partner_demo.xml 2014-05-19 04:38:55 +0000
495@@ -118,7 +118,6 @@
496 <field name="city">Fremont</field>
497 <field name="zip">94538</field>
498 <field name="country_id" ref="base.us"/>
499- <field model="res.country.state" name="state_id" search="[('code','ilike','ca')]"/>
500 <field name="street">3661 Station Street</field>
501 <field name="email">deltapc@yourcompany.example.com</field>
502 <field name="phone">+1 510 340 2385</field>
503@@ -132,7 +131,6 @@
504 <field name="is_company">1</field>
505 <field eval="0" name="customer"/>
506 <field name="country_id" ref="base.us"/>
507- <field model="res.country.state" name="state_id" search="[('code','ilike','il')]"/>
508 <field name="zip">60610</field>
509 <field name="city">Chicago</field>
510 <field name="email">epic@yourcompany.example.com</field>
511@@ -150,7 +148,6 @@
512 <field name="zip">90001</field>
513 <field name="city">Los Angeles</field>
514 <field name="country_id" ref="base.us"/>
515- <field model="res.country.state" name="state_id" search="[('code','ilike','ca')]"/>
516 <field name="street">23 Rockwell Lane</field>
517 <field name="email">openelecapplications@yourcompany.example.com</field>
518 <field name="phone">+1 312 349 2121</field>
519@@ -209,7 +206,6 @@
520 <field name="city">Miami</field>
521 <field name="zip">33169</field>
522 <field name="country_id" ref="base.us"/>
523- <field model="res.country.state" name="state_id" search="[('code','=','FL')]"/>
524 <field name="email">jackson@yourcompany.example.com</field>
525 <field name="phone">+1 786 525 0724</field>
526 <field name="street">3203 Lamberts Branch Road</field>
527@@ -274,7 +270,6 @@
528 <field name="city">Detroit</field>
529 <field name="zip">48212</field>
530 <field name="country_id" ref="base.us"/>
531- <field model="res.country.state" name="state_id" search="[('code','ilike','mi')]"/>
532 <field name="street">60, Rosewood Court</field>
533 <field name="email">chamberworks@yourcompany.example.com</field>
534 <field name="phone">+1 313 222 3456</field>
535@@ -349,7 +344,6 @@
536 <field name="city">Cupertino</field>
537 <field name="zip">95014</field>
538 <field name="country_id" ref="base.us"/>
539- <field model="res.country.state" name="state_id" search="[('code','ilike','ca')]"/>
540 <field name="street">10200 S. De Anza Blvd</field>
541 <field name="email">seagate@yourcompany.example.com</field>
542 <field name="phone">+1 800 732 4283</field>
543
544=== modified file 'openerp/addons/base/res/res_partner_report_address.xml'
545--- openerp/addons/base/res/res_partner_report_address.xml 2013-10-06 14:40:20 +0000
546+++ openerp/addons/base/res/res_partner_report_address.xml 2014-05-19 04:38:55 +0000
547@@ -8,7 +8,7 @@
548 <street2 type="field" name="street2"/>
549 <zip type="field" name="zip"/>
550 <city type="field" name="city"/>
551- <state type="field" name="state_id.name"/>
552+ <state type="field" name="state_name"/>
553 <country type="field" name="country_id.name"/>
554 </address>
555 </addresses>
556
557=== modified file 'openerp/addons/base/res/res_partner_view.xml'
558--- openerp/addons/base/res/res_partner_view.xml 2014-05-12 08:05:23 +0000
559+++ openerp/addons/base/res/res_partner_view.xml 2014-05-19 04:38:55 +0000
560@@ -168,7 +168,7 @@
561 <field name="street2" attrs="{'readonly': [('use_parent_address','=',True)]}"/>
562 <div class="address_format">
563 <field name="city" placeholder="City" style="width: 40%%" attrs="{'readonly': [('use_parent_address','=',True)]}"/>
564- <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)]}"/>
565+ <field name="state_name" placeholder="State" style="width: 37%%" attrs="{'readonly': [('use_parent_address','=',True)]}"/>
566 <field name="zip" placeholder="ZIP" style="width: 20%%" attrs="{'readonly': [('use_parent_address','=',True)]}"/>
567 </div>
568 <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": True}' attrs="{'readonly': [('use_parent_address','=',True)]}"/>
569@@ -190,7 +190,7 @@
570
571 <notebook colspan="4">
572 <page string="Contacts" attrs="{'invisible': [('is_company','=',False), ('child_ids', '=', [])]}" autofocus="autofocus">
573- <field name="child_ids" mode="kanban" context="{'default_parent_id': active_id, 'default_street': street, 'default_street2': street2, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_supplier': supplier, 'default_customer': customer, 'default_use_parent_address': True}">
574+ <field name="child_ids" mode="kanban" context="{'default_parent_id': active_id, 'default_street': street, 'default_street2': street2, 'default_city': city, 'default_zip': zip, 'default_state_name': state_name, 'default_country_id': country_id, 'default_supplier': supplier, 'default_customer': customer}">
575 <kanban>
576 <field name="color"/>
577 <field name="name"/>
578@@ -207,7 +207,7 @@
579 <field name="country_id"/>
580 <field name="mobile"/>
581 <field name="fax"/>
582- <field name="state_id"/>
583+ <field name="state_name"/>
584 <field name="has_image"/>
585 <templates>
586 <t t-name="kanban-box">
587@@ -279,11 +279,11 @@
588 </div>
589 <label for="street" string="Address" attrs="{'invisible': [('use_parent_address','=', True)]}"/>
590 <div attrs="{'invisible': [('use_parent_address','=', True)]}" name="div_address">
591- <field name="street" placeholder="Street..."/>
592+ <field name="street" placeholder="Street..."/>
593 <field name="street2"/>
594 <div class="address_format">
595 <field name="city" placeholder="City" style="width: 40%%"/>
596- <field name="state_id" class="oe_no_button" placeholder="State" style="width: 37%%" options='{"no_open": True}' on_change="onchange_state(state_id)"/>
597+ <field name="state_name" placeholder="State" style="width: 37%%"/>
598 <field name="zip" placeholder="ZIP" style="width: 20%%"/>
599 </div>
600 <field name="country_id" placeholder="Country" class="oe_no_button" options='{"no_open": True}'/>
601@@ -372,7 +372,7 @@
602 <field name="city"/>
603 <field name="country_id"/>
604 <field name="mobile"/>
605- <field name="state_id"/>
606+ <field name="state_name"/>
607 <field name="category_id"/>
608 <field name="has_image"/>
609 <templates>
610
611=== modified file 'openerp/addons/base/res/res_users.py'
612--- openerp/addons/base/res/res_users.py 2014-05-12 08:05:23 +0000
613+++ openerp/addons/base/res/res_users.py 2014-05-19 04:38:55 +0000
614@@ -192,10 +192,6 @@
615 return {'value': {'email': login}}
616 return {}
617
618- def onchange_state(self, cr, uid, ids, state_id, context=None):
619- partner_ids = [user.partner_id.id for user in self.browse(cr, uid, ids, context=context)]
620- return self.pool.get('res.partner').onchange_state(cr, uid, partner_ids, state_id, context=context)
621-
622 def onchange_type(self, cr, uid, ids, is_company, context=None):
623 """ Wrapper on the user.partner onchange_type, because some calls to the
624 partner form view applied to the user may trigger the
625
626=== modified file 'openerp/addons/base/security/ir.model.access.csv'
627--- openerp/addons/base/security/ir.model.access.csv 2014-03-18 00:29:54 +0000
628+++ openerp/addons/base/security/ir.model.access.csv 2014-05-19 04:38:55 +0000
629@@ -44,9 +44,7 @@
630 "access_res_company_group_erp_manager","res_company group_erp_manager","model_res_company","group_erp_manager",1,1,1,1
631 "access_res_company_group_user","res_company group_user","model_res_company",,1,0,0,0
632 "access_res_country_group_all","res_country group_user_all","model_res_country",,1,0,0,0
633-"access_res_country_state_group_all","res_country_state group_user_all","model_res_country_state",,1,0,0,0
634 "access_res_country_group_user","res_country group_user","model_res_country","group_partner_manager",1,1,1,1
635-"access_res_country_state_group_user","res_country_state group_user","model_res_country_state","group_partner_manager",1,1,1,1
636 "access_res_currency_group_all","res_currency group_all","model_res_currency",,1,0,0,0
637 "access_res_currency_rate_group_all","res_currency_rate group_all","model_res_currency_rate",,1,0,0,0
638 "access_res_currency_rate_type_group_all","res_currency_rate_type group_all","model_res_currency_rate_type",,1,0,0,0
639
640=== modified file 'openerp/addons/base/tests/test_expression.py'
641--- openerp/addons/base/tests/test_expression.py 2014-04-10 10:54:54 +0000
642+++ openerp/addons/base/tests/test_expression.py 2014-05-19 04:38:55 +0000
643@@ -129,13 +129,10 @@
644
645 # Get models
646 partner_obj = registry('res.partner')
647- state_obj = registry('res.country.state')
648 bank_obj = registry('res.partner.bank')
649
650 # Get test columns
651- partner_state_id_col = partner_obj._columns.get('state_id') # many2one on res.partner to res.country.state
652 partner_parent_id_col = partner_obj._columns.get('parent_id') # many2one on res.partner to res.partner
653- state_country_id_col = state_obj._columns.get('country_id') # many2one on res.country.state on res.country
654 partner_child_ids_col = partner_obj._columns.get('child_ids') # one2many on res.partner to res.partner
655 partner_bank_ids_col = partner_obj._columns.get('bank_ids') # one2many on res.partner to res.partner.bank
656 category_id_col = partner_obj._columns.get('category_id') # many2many on res.partner to res.partner.category
657@@ -144,14 +141,13 @@
658 bank_type = bank_obj._bank_type_get(cr, uid)[0]
659 # Get country/state data
660 country_us_id = registry('res.country').search(cr, uid, [('code', 'like', 'US')])[0]
661- state_ids = registry('res.country.state').search(cr, uid, [('country_id', '=', country_us_id)], limit=2)
662
663 # Create demo data: partners and bank object
664- p_a = partner_obj.create(cr, uid, {'name': 'test__A', 'state_id': state_ids[0]})
665- p_b = partner_obj.create(cr, uid, {'name': 'test__B', 'state_id': state_ids[1]})
666- p_aa = partner_obj.create(cr, uid, {'name': 'test__AA', 'parent_id': p_a, 'state_id': state_ids[0]})
667- p_ab = partner_obj.create(cr, uid, {'name': 'test__AB', 'parent_id': p_a, 'state_id': state_ids[1]})
668- p_ba = partner_obj.create(cr, uid, {'name': 'test__BA', 'parent_id': p_b, 'state_id': state_ids[0]})
669+ p_a = partner_obj.create(cr, uid, {'name': 'test__A'})
670+ p_b = partner_obj.create(cr, uid, {'name': 'test__B'})
671+ p_aa = partner_obj.create(cr, uid, {'name': 'test__AA', 'parent_id': p_a})
672+ p_ab = partner_obj.create(cr, uid, {'name': 'test__AB', 'parent_id': p_a})
673+ p_ba = partner_obj.create(cr, uid, {'name': 'test__BA', 'parent_id': p_b})
674 b_aa = bank_obj.create(cr, uid, {'name': '__bank_test_a', 'state': bank_type[0], 'partner_id': p_aa, 'acc_number': '1234'})
675 b_ab = bank_obj.create(cr, uid, {'name': '__bank_test_b', 'state': bank_type[0], 'partner_id': p_ab, 'acc_number': '5678'})
676 b_ba = bank_obj.create(cr, uid, {'name': '__bank_test_b', 'state': bank_type[0], 'partner_id': p_ba, 'acc_number': '9876'})
677@@ -276,116 +272,7 @@
678 "_auto_join on: ('child_ids.bank_ids.id', 'in', [..]) query incorrect parameter")
679
680 # --------------------------------------------------
681- # Test3: many2one
682- # --------------------------------------------------
683-
684- name_test = 'US'
685-
686- # Do: many2one without _auto_join
687- self._reinit_mock()
688- partner_ids = partner_obj.search(cr, uid, [('state_id.country_id.code', 'like', name_test)])
689- # Test result: at least our added data + demo data
690- self.assertTrue(set([p_a, p_b, p_aa, p_ab, p_ba]).issubset(set(partner_ids)),
691- "_auto_join off: ('state_id.country_id.code', 'like', '..') incorrect result")
692- # Test produced queries
693- self.assertEqual(len(self.query_list), 3,
694- "_auto_join off: ('state_id.country_id.code', 'like', '..') should produce 3 queries (1 on res_country, 1 on res_country_state, 1 on res_partner)")
695-
696- # Do: many2one with 1 _auto_join on the first many2one
697- partner_state_id_col._auto_join = True
698- self._reinit_mock()
699- partner_ids = partner_obj.search(cr, uid, [('state_id.country_id.code', 'like', name_test)])
700- # Test result: at least our added data + demo data
701- self.assertTrue(set([p_a, p_b, p_aa, p_ab, p_ba]).issubset(set(partner_ids)),
702- "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') incorrect result")
703- # Test produced queries
704- self.assertEqual(len(self.query_list), 2,
705- "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') should produce 2 query")
706- sql_query = self.query_list[0].get_sql()
707- self.assertIn('"res_country"', sql_query[0],
708- "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect main table")
709-
710- expected = "%s::text like %s" % (unaccent('"res_country"."code"'), unaccent('%s'))
711- self.assertIn(expected, sql_query[1],
712- "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect where condition")
713-
714- self.assertEqual(['%' + name_test + '%'], sql_query[2],
715- "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect parameter")
716- sql_query = self.query_list[1].get_sql()
717- self.assertIn('"res_partner"', sql_query[0],
718- "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 2 incorrect main table")
719- self.assertIn('"res_country_state" as "res_partner__state_id"', sql_query[0],
720- "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 2 incorrect join")
721- self.assertIn('"res_partner__state_id"."country_id" in (%s)', sql_query[1],
722- "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 2 incorrect where condition")
723- self.assertIn('"res_partner"."state_id"="res_partner__state_id"."id"', sql_query[1],
724- "_auto_join on for state_id: ('state_id.country_id.code', 'like', '..') query 2 incorrect join condition")
725-
726- # Do: many2one with 1 _auto_join on the second many2one
727- partner_state_id_col._auto_join = False
728- state_country_id_col._auto_join = True
729- self._reinit_mock()
730- partner_ids = partner_obj.search(cr, uid, [('state_id.country_id.code', 'like', name_test)])
731- # Test result: at least our added data + demo data
732- self.assertTrue(set([p_a, p_b, p_aa, p_ab, p_ba]).issubset(set(partner_ids)),
733- "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') incorrect result")
734- # Test produced queries
735- self.assertEqual(len(self.query_list), 2,
736- "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') should produce 2 query")
737- # -- first query
738- sql_query = self.query_list[0].get_sql()
739- self.assertIn('"res_country_state"', sql_query[0],
740- "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect main table")
741- self.assertIn('"res_country" as "res_country_state__country_id"', sql_query[0],
742- "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect join")
743-
744- expected = "%s::text like %s" % (unaccent('"res_country_state__country_id"."code"'), unaccent('%s'))
745- self.assertIn(expected, sql_query[1],
746- "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect where condition")
747-
748- self.assertIn('"res_country_state"."country_id"="res_country_state__country_id"."id"', sql_query[1],
749- "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect join condition")
750- self.assertEqual(['%' + name_test + '%'], sql_query[2],
751- "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 1 incorrect parameter")
752- # -- second query
753- sql_query = self.query_list[1].get_sql()
754- self.assertIn('"res_partner"', sql_query[0],
755- "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 2 incorrect main table")
756- self.assertIn('"res_partner"."state_id" in', sql_query[1],
757- "_auto_join on for country_id: ('state_id.country_id.code', 'like', '..') query 2 incorrect where condition")
758-
759- # Do: many2one with 2 _auto_join
760- partner_state_id_col._auto_join = True
761- state_country_id_col._auto_join = True
762- self._reinit_mock()
763- partner_ids = partner_obj.search(cr, uid, [('state_id.country_id.code', 'like', name_test)])
764- # Test result: at least our added data + demo data
765- self.assertTrue(set([p_a, p_b, p_aa, p_ab, p_ba]).issubset(set(partner_ids)),
766- "_auto_join on: ('state_id.country_id.code', 'like', '..') incorrect result")
767- # Test produced queries
768- self.assertEqual(len(self.query_list), 1,
769- "_auto_join on: ('state_id.country_id.code', 'like', '..') should produce 1 query")
770- sql_query = self.query_list[0].get_sql()
771- self.assertIn('"res_partner"', sql_query[0],
772- "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect main table")
773- self.assertIn('"res_country_state" as "res_partner__state_id"', sql_query[0],
774- "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join")
775- self.assertIn('"res_country" as "res_partner__state_id__country_id"', sql_query[0],
776- "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join")
777-
778- expected = "%s::text like %s" % (unaccent('"res_partner__state_id__country_id"."code"'), unaccent('%s'))
779- self.assertIn(expected, sql_query[1],
780- "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect where condition")
781-
782- self.assertIn('"res_partner"."state_id"="res_partner__state_id"."id"', sql_query[1],
783- "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join condition")
784- self.assertIn('"res_partner__state_id"."country_id"="res_partner__state_id__country_id"."id"', sql_query[1],
785- "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect join condition")
786- self.assertEqual(['%' + name_test + '%'], sql_query[2],
787- "_auto_join on: ('state_id.country_id.code', 'like', '..') query incorrect parameter")
788-
789- # --------------------------------------------------
790- # Test4: domain attribute on one2many fields
791+ # Test3: domain attribute on one2many fields
792 # --------------------------------------------------
793
794 partner_child_ids_col._auto_join = True
795@@ -418,46 +305,20 @@
796 "_auto_join on one2many with domains incorrect result")
797
798 # ----------------------------------------
799- # Test5: result-based tests
800+ # Test4: result-based tests
801 # ----------------------------------------
802
803 partner_bank_ids_col._auto_join = False
804 partner_child_ids_col._auto_join = False
805- partner_state_id_col._auto_join = False
806 partner_parent_id_col._auto_join = False
807- state_country_id_col._auto_join = False
808 partner_child_ids_col._domain = []
809 partner_bank_ids_col._domain = []
810
811- # Do: ('child_ids.state_id.country_id.code', 'like', '..') without _auto_join
812- self._reinit_mock()
813- partner_ids = partner_obj.search(cr, uid, [('child_ids.state_id.country_id.code', 'like', name_test)])
814- # Test result: at least our added data + demo data
815- self.assertTrue(set([p_a, p_b]).issubset(set(partner_ids)),
816- "_auto_join off: ('child_ids.state_id.country_id.code', 'like', '..') incorrect result")
817- # Test produced queries
818- self.assertEqual(len(self.query_list), 5,
819- "_auto_join off: ('child_ids.state_id.country_id.code', 'like', '..') number of queries incorrect")
820-
821- # Do: ('child_ids.state_id.country_id.code', 'like', '..') with _auto_join
822- partner_child_ids_col._auto_join = True
823- partner_state_id_col._auto_join = True
824- state_country_id_col._auto_join = True
825- self._reinit_mock()
826- partner_ids = partner_obj.search(cr, uid, [('child_ids.state_id.country_id.code', 'like', name_test)])
827- # Test result: at least our added data + demo data
828- self.assertTrue(set([p_a, p_b]).issubset(set(partner_ids)),
829- "_auto_join on: ('child_ids.state_id.country_id.code', 'like', '..') incorrect result")
830- # Test produced queries
831- self.assertEqual(len(self.query_list), 1,
832- "_auto_join on: ('child_ids.state_id.country_id.code', 'like', '..') number of queries incorrect")
833
834 # Remove mocks and modifications
835 partner_bank_ids_col._auto_join = False
836 partner_child_ids_col._auto_join = False
837- partner_state_id_col._auto_join = False
838 partner_parent_id_col._auto_join = False
839- state_country_id_col._auto_join = False
840
841 def test_30_normalize_domain(self):
842 expression = openerp.osv.expression
843
844=== modified file 'openerp/addons/base/tests/test_mail_examples.py'
845--- openerp/addons/base/tests/test_mail_examples.py 2014-02-09 00:37:45 +0000
846+++ openerp/addons/base/tests/test_mail_examples.py 2014-05-19 04:38:55 +0000
847@@ -49,7 +49,7 @@
848 ${object.company_id.street}<br/>
849 ${object.company_id.street2}<br/>
850 ${object.company_id.zip} ${object.company_id.city}<br/>
851- ${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''}<br/>
852+ ${('%s, ' % object.company_id.state_name) or ''} ${object.company_id.country_id.name or ''}<br/>
853 </span>
854 <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; ">
855 Phone:&nbsp; ${object.company_id.phone}
856
857=== modified file 'openerp/addons/base/tests/test_search.py'
858--- openerp/addons/base/tests/test_search.py 2012-12-07 15:58:25 +0000
859+++ openerp/addons/base/tests/test_search.py 2014-05-19 04:38:55 +0000
860@@ -68,15 +68,13 @@
861
862 # Get country/state data
863 country_us_id = registry('res.country').search(cr, uid, [('code', 'like', 'US')])[0]
864- state_ids = registry('res.country.state').search(cr, uid, [('country_id', '=', country_us_id)], limit=2)
865 country_be_id = registry('res.country').search(cr, uid, [('code', 'like', 'BE')])[0]
866
867 # Create test users
868 search_user = users_obj.create(cr, uid, {'name': '__search', 'login': '__search', 'groups_id': [(6, 0, [group_employee_id])]})
869- a = users_obj.create(cr, uid, {'name': '__test_A', 'login': '__test_A', 'country_id': country_be_id, 'state_id': country_be_id})
870- b = users_obj.create(cr, uid, {'name': '__test_B', 'login': '__a_test_B', 'country_id': country_us_id, 'state_id': state_ids[1]})
871- c = users_obj.create(cr, uid, {'name': '__test_B', 'login': '__z_test_B', 'country_id': country_us_id, 'state_id': state_ids[0]})
872-
873+ a = users_obj.create(cr, uid, {'name': '__test_A', 'login': '__test_A', 'country_id': country_be_id})
874+ b = users_obj.create(cr, uid, {'name': '__test_B', 'login': '__a_test_B', 'country_id': country_us_id})
875+ c = users_obj.create(cr, uid, {'name': '__test_B', 'login': '__z_test_B', 'country_id': country_us_id})
876 # Do: search on res.users, order on a field on res.partner to try inherits'd fields, then res.users
877 user_ids = users_obj.search(cr, search_user, [], order='name asc, login desc')
878 expected_ids = [search_user, a, c, b]
879@@ -84,14 +82,14 @@
880 self.assertEqual(test_user_ids, expected_ids, 'search on res_users did not provide expected ids or expected order')
881
882 # Do: order on many2one and inherits'd fields
883- user_ids = users_obj.search(cr, search_user, [], order='state_id asc, country_id desc, name asc, login desc')
884- expected_ids = [c, b, a, search_user]
885+ user_ids = users_obj.search(cr, search_user, [], order='country_id desc, name asc, login desc')
886+ expected_ids = [search_user, c, b, a]
887 test_user_ids = filter(lambda x: x in expected_ids, user_ids)
888 self.assertEqual(test_user_ids, expected_ids, 'search on res_users did not provide expected ids or expected order')
889
890 # Do: order on many2one and inherits'd fields
891- user_ids = users_obj.search(cr, search_user, [], order='country_id desc, state_id desc, name asc, login desc')
892- expected_ids = [search_user, b, c, a]
893+ user_ids = users_obj.search(cr, search_user, [], order='country_id desc, name asc, login desc')
894+ expected_ids = [search_user, c, b, a]
895 test_user_ids = filter(lambda x: x in expected_ids, user_ids)
896 self.assertEqual(test_user_ids, expected_ids, 'search on res_users did not provide expected ids or expected order')
897
898
899=== modified file 'openerp/osv/expression.py'
900--- openerp/osv/expression.py 2014-04-09 15:35:27 +0000
901+++ openerp/osv/expression.py 2014-05-19 04:38:55 +0000
902@@ -449,25 +449,20 @@
903 # running examples:
904 # - res_users.name, like, foo: name is on res_partner, not on res_users
905 # - res_partner.bank_ids.name, like, foo: bank_ids is a one2many with _auto_join
906- # - res_partner.state_id.name, like, foo: state_id is a many2one with _auto_join
907 # A join:
908 # - link between src_table and dst_table, using src_field and dst_field
909 # i.e.: inherits: res_users.partner_id = res_partner.id
910 # i.e.: one2many: res_partner.id = res_partner_bank.partner_id
911- # i.e.: many2one: res_partner.state_id = res_country_state.id
912 # - done in the context of a field
913 # i.e.: inherits: 'partner_id'
914 # i.e.: one2many: 'bank_ids'
915- # i.e.: many2one: 'state_id'
916 # - table names use aliases: initial table followed by the context field
917 # names, joined using a '__'
918 # i.e.: inherits: res_partner as res_users__partner_id
919 # i.e.: one2many: res_partner_bank as res_partner__bank_ids
920- # i.e.: many2one: res_country_state as res_partner__state_id
921 # - join condition use aliases
922 # i.e.: inherits: res_users.partner_id = res_users__partner_id.id
923 # i.e.: one2many: res_partner.id = res_partner__bank_ids.parr_id
924- # i.e.: many2one: res_partner.state_id = res_partner__state_id.id
925 # Variables explanation:
926 # - src_table: working table before the join
927 # -> res_users, res_partner, res_partner
928@@ -477,7 +472,6 @@
929 # necessarily a field (because 'id' is not a field instance)
930 # i.e.: inherits: 'partner_id', found in the inherits of the current table
931 # i.e.: one2many: 'id', not a field
932- # i.e.: many2one: 'state_id', the current field name
933 # - dst_table_link_name: field name used to link the dst table, not
934 # necessarily a field (because 'id' is not a field instance)
935 # i.e.: inherits: 'id', not a field
936@@ -486,7 +480,6 @@
937 # - context_field_name: field name used as a context to make the alias
938 # i.e.: inherits: 'partner_id': found in the inherits of the current table
939 # i.e.: one2many: 'bank_ids': current field name
940- # i.e.: many2one: 'state_id': current field name
941 # --------------------------------------------------
942
943 def __init__(self, leaf, model, join_context=None):
944@@ -629,7 +622,7 @@
945 :attr list result: list that will hold the result of the parsing
946 as a list of ExtendedLeaf
947 :attr list joins: list of join conditions, such as
948- (res_country_state."id" = res_partner."state_id")
949+ (res_country_state."id" = res_partner."state_name")
950 :attr root_model: base model for the query
951 :attr list expression: the domain expression, that will be normalized
952 and prepared
953@@ -822,7 +815,6 @@
954 # ----------------------------------------
955
956 elif len(field_path) > 1 and field._type == 'many2one' and field._auto_join:
957- # res_partner.state_id = res_partner__state_id.id
958 leaf.add_join_context(relational_model, field_path[0], 'id', field_path[0])
959 push(create_substitution_leaf(leaf, (field_path[1], operator, right), relational_model))
960