Hi DBR,

Problem becomes apparent when a "pricelist" is linked to a
"pricelist_version" and they have different "id" numbers.

Have a look at details posted here: https://answers.launchpad.net
/openobject-addons/+question/138016

There is some data and you can see in the generated sql the line:

            "AND price_version_id = 4"

It is using a value of "4" which is from a "pricelist_id" NOT a
"pricelist_version".

Hope that helps.

-- 
You received this bug notification because you are a member of C2C
OERPScenario, which is subscribed to the OpenERP Project Group.
https://bugs.launchpad.net/bugs/693056

Title:
  price_multi_get() is comparing pricelist_ids to pricelist_version_ids

Status in OpenObject Addons Modules:
  Incomplete

Bug description:
  Version 6 trunk
server revno: 3137
addons revno: 4033

I have posted a question a few days ago:
https://answers.launchpad.net/openobject-addons/+question/138016 (no response 
yet)

I think this is a real bug and deserves to be posted here.

product/pricelist.py appears to have regressed at version 3719 with the 
introduction of "price_multi_get()"

Prior to this version, the pricelist_ids argument to price_get() was translated 
to pricelist_version_ids.

In revno:3566 where "ids" are priclist_ids passed on "price_get()":

153             for id in ids:
154                 cr.execute('SELECT * ' \
155                         'FROM product_pricelist_version ' \
156                         'WHERE pricelist_id = %s AND active=True ' \
157                             'AND (date_start IS NULL OR date_start <= %s) ' 
\
158                             'AND (date_end IS NULL OR date_end >= %s) ' \
159                         'ORDER BY id LIMIT 1', (id, date, date))
160                 plversion = cr.dictfetchone()
......
190                        cr.execute(
191                             'SELECT i.*, pl.currency_id '
192                             'FROM product_pricelist_item AS i, '
193                                 'product_pricelist_version AS v, 
product_pricelist AS pl '
194                     'WHERE (product_tmpl_id IS NULL OR product_tmpl_id = 
%s) '
195                                 'AND (product_id IS NULL OR product_id = 
%s) '
196                         'AND (' + categ_where + ' OR (categ_id IS NULL)) '
197                         'AND price_version_id = %s '
198                         'AND (min_quantity IS NULL OR min_quantity <= %s) '
199                         'AND i.price_version_id = v.id AND v.pricelist_id = 
pl.id '
200                     'ORDER BY sequence',
201                     (tmpl_id, prod_id, plversion['id'], qty))
202                 res1 = cr.dictfetchall()

Above code looks okay:
1. ids are translated to pricelist versions in "plversion"
2. line 197 matches price_version_id to plversion['id']


Current version revno:4033 (since revno:3719):

167                     if pricelist_ids:
168                         pricelist_version_ids = pricelist_ids
169                     else:
170                         # all pricelists:
171                         pricelist_version_ids = 
product_pricelist_version_obj.search(cr, uid, [])

**************************
Above code stores "pricelist_ids" and "product_pricelist_version_ids" in the 
same variable "pricelist_version_ids"   ????
**************************

172             
173                     pricelist_version_ids = list(set(pricelist_version_ids))
174             
175                     plversions_search_args = [
176                         ('pricelist_id', 'in', pricelist_version_ids),
177                         '|',
178                         ('date_start', '=', False),
179                         ('date_start', '<=', date),
180                         '|',
181                         ('date_end', '=', False),
182                         ('date_end', '>=', date),
183                     ]
184             
185                     plversion_ids = 
product_pricelist_version_obj.search(cr, uid, plversions_search_args)

****************************
line 176 is matching "pricelist_id" to pricelist_version_ids (that may be 
pricelist_ids ?????)
****************************

202                     for product_id, qty, partner in 
products_by_qty_by_partner:
203                         for pricelist_id in pricelist_version_ids:
204                             price = False
205             
206                             tmpl_id = 
products_dict[product_id].product_tmpl_id and 
products_dict[product_id].product_tmpl_id.id or False
207             
208                             categ_id = products_dict[product_id].categ_id 
and products_dict[product_id].categ_id.id or False
209                             categ_ids = 
_create_parent_category_list(categ_id, [categ_id])
210                             if categ_ids:
211                                 categ_where = '(categ_id IN (' + 
','.join(map(str, categ_ids)) + '))'
212                             else:
213                                 categ_where = '(categ_id IS NULL)'
214             
215                             cr.execute(
216                                 'SELECT i.*, pl.currency_id '
217                                 'FROM product_pricelist_item AS i, '
218                                     'product_pricelist_version AS v, 
product_pricelist AS pl '
219                                 'WHERE (product_tmpl_id IS NULL OR 
product_tmpl_id = %s) '
220                                     'AND (product_id IS NULL OR product_id 
= %s) '
221                                     'AND (' + categ_where + ' OR (categ_id 
IS NULL)) '
222                                     'AND price_version_id = %s '
223                                     'AND (min_quantity IS NULL OR 
min_quantity <= %s) '
224                                     'AND i.price_version_id = v.id AND 
v.pricelist_id = pl.id '
225                                 'ORDER BY sequence',
226                                 (tmpl_id, product_id, pricelist_id, qty))
227                             res1 = cr.dictfetchall()

******************************
line 222 is matching "price_version_id" against "pricelist_id" from line 203

"pricelist_id" is derived from "pricelist_version_ids" which may contain 
pricelist_ids or pricelist_version_ids
******************************

My question at https://answers.launchpad.net/openobject-addons/+question/138016
was based on data that resulted in the above sql trying to match object ids of 
two different object (priclist_ids and pricelist_version_ids)

To me it looks like the code is broken...but my head hurts looking at it.



_______________________________________________
Mailing list: https://launchpad.net/~c2c-oerpscenario
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~c2c-oerpscenario
More help   : https://help.launchpad.net/ListHelp

Reply via email to