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

