=== modified file 'product_pricelist_fixed_price/pricelist.py'
--- product_pricelist_fixed_price/pricelist.py	2012-06-20 18:24:47 +0000
+++ product_pricelist_fixed_price/pricelist.py	2012-11-05 21:38:26 +0000
@@ -67,34 +67,27 @@
 
         currency_obj = self.pool.get('res.currency')
         product_obj = self.pool.get('product.product')
+        product_template_obj = self.pool.get('product.template')
         product_category_obj = self.pool.get('product.category')
         product_uom_obj = self.pool.get('product.uom')
         supplierinfo_obj = self.pool.get('product.supplierinfo')
         price_type_obj = self.pool.get('product.price.type')
-        product_pricelist_version_obj = self.pool.get('product.pricelist.version')
 
         # product.pricelist.version:
-        if pricelist_ids:
-            pricelist_version_ids = pricelist_ids
-        else:
-            # all pricelists:
-            pricelist_version_ids = self.pool.get('product.pricelist').search(cr, uid, [], context=context)
-
-        pricelist_version_ids = list(set(pricelist_version_ids))
-        plversions_search_args = [
-            ('pricelist_id', 'in', pricelist_version_ids),
-            '|',
-            ('date_start', '=', False),
-            ('date_start', '<=', date),
-            '|',
-            ('date_end', '=', False),
-            ('date_end', '>=', date),
-        ]
-
-        plversion_ids = product_pricelist_version_obj.search(cr, uid, plversions_search_args)
-        if len(pricelist_version_ids) != len(plversion_ids):
-            msg = "At least one pricelist has no active version !\nPlease create or activate one."
-            raise osv.except_osv(_('Warning !'), _(msg))
+        if not pricelist_ids:
+            pricelist_ids = self.pool.get('product.pricelist').search(cr, uid, [], context=context)
+
+        pricelist_version_ids = self.pool.get('product.pricelist.version').search(cr, uid, [
+                                                        ('pricelist_id', 'in', pricelist_ids),
+                                                        '|',
+                                                        ('date_start', '=', False),
+                                                        ('date_start', '<=', date),
+                                                        '|',
+                                                        ('date_end', '=', False),
+                                                        ('date_end', '>=', date),
+                                                    ])
+        if len(pricelist_ids) != len(pricelist_version_ids):
+            raise osv.except_osv(_('Warning !'), _("At least one pricelist has no active version !\nPlease create or activate one."))
 
         # product.product:
         product_ids = [i[0] for i in products_by_qty_by_partner]
@@ -109,7 +102,7 @@
 
         results = {}
         for product_id, qty, partner in products_by_qty_by_partner:
-            for pricelist_id in pricelist_version_ids:
+            for pricelist_id in pricelist_ids:
                 price = False
 
                 tmpl_id = products_dict[product_id].product_tmpl_id and products_dict[product_id].product_tmpl_id.id or False
@@ -121,6 +114,13 @@
                 else:
                     categ_where = '(categ_id IS NULL)'
 
+                if partner:
+                    partner_where = 'base <> -2 OR %s IN (SELECT name FROM product_supplierinfo WHERE product_id = %s) '
+                    partner_args = (partner, product_id)
+                else:
+                    partner_where = 'base <> -2 '
+                    partner_args = ()
+
                 cr.execute(
                     'SELECT i.*, pl.currency_id '
                     'FROM product_pricelist_item AS i, '
@@ -128,11 +128,12 @@
                     'WHERE (product_tmpl_id IS NULL OR product_tmpl_id = %s) '
                         'AND (product_id IS NULL OR product_id = %s) '
                         'AND (' + categ_where + ' OR (categ_id IS NULL)) '
+                        'AND (' + partner_where + ') '
                         'AND price_version_id = %s '
                         'AND (min_quantity IS NULL OR min_quantity <= %s) '
                         'AND i.price_version_id = v.id AND v.pricelist_id = pl.id '
                     'ORDER BY sequence',
-                    (tmpl_id, product_id, plversion_ids[0], qty))
+                    (tmpl_id, product_id) + partner_args + (pricelist_version_ids[0], qty))
                 res1 = cr.dictfetchall()
                 uom_price_already_computed = False
                 for res in res1:
@@ -145,6 +146,7 @@
                                         [res['base_pricelist_id']], product_id,
                                         qty, context=context)[res['base_pricelist_id']]
                                 ptype_src = self.browse(cr, uid, res['base_pricelist_id']).currency_id.id
+                                uom_price_already_computed = True
                                 price = currency_obj.compute(cr, uid, ptype_src, res['currency_id'], price_tmp, round=False)
                         elif res['base'] == -2:
                             # this section could be improved by moving the queries outside the loop:
@@ -156,8 +158,9 @@
                             price = 0.0
                             if sinfo:
                                 qty_in_product_uom = qty
-                                product_default_uom = product_obj.read(cr, uid, [tmpl_id], ['uom_id'])[0]['uom_id'][0]
-                                seller_uom = supplierinfo_obj.read(cr, uid, sinfo, ['product_uom'])[0]['product_uom'][0]
+                                product_default_uom = product_template_obj.read(cr, uid, [tmpl_id], ['uom_id'])[0]['uom_id'][0]
+                                supplier = supplierinfo_obj.browse(cr, uid, sinfo, context=context)[0]
+                                seller_uom = supplier.product_uom and supplier.product_uom.id or False
                                 if seller_uom and product_default_uom and product_default_uom != seller_uom:
                                     uom_price_already_computed = True
                                     qty_in_product_uom = product_uom_obj._compute_qty(cr, uid, product_default_uom, qty, to_uom_id=seller_uom)
@@ -178,16 +181,16 @@
 
                         else:
                             price_type = price_type_obj.browse(cr, uid, int(res['base']))
+                            uom_price_already_computed = True
                             price = currency_obj.compute(cr, uid,
                                     price_type.currency_id.id, res['currency_id'],
                                     product_obj.price_get(cr, uid, [product_id],
-                                        price_type.field,context=context)[product_id], round=False, context=context)
+                                    price_type.field, context=context)[product_id], round=False, context=context)
 
-                        if price and res['base'] != -3: #Modified by product_pricelist_fixed_price
+                        if price is not False and res['base'] != -3: #Modified by product_pricelist_fixed_price
                             price_limit = price
-
                             price = price * (1.0+(res['price_discount'] or 0.0))
-                            price = rounding(price, res['price_round'])
+                            price = rounding(price, res['price_round']) #TOFIX: rounding with tools.float_rouding
                             price += (res['price_surcharge'] or 0.0)
                             if res['price_min_margin']:
                                 price = max(price, price_limit+res['price_min_margin'])
@@ -201,10 +204,11 @@
                         price = False
 
                 if price:
+                    results['item_id'] = res['id']
                     if 'uom' in context and not uom_price_already_computed:
                         product = products_dict[product_id]
                         uom = product.uos_id or product.uom_id
-                        price = self.pool.get('product.uom')._compute_price(cr, uid, uom.id, price, context['uom'])
+                        price = product_uom_obj._compute_price(cr, uid, uom.id, price, context['uom'])
 
                 if results.get(product_id):
                     results[product_id][pricelist_id] = price
@@ -212,5 +216,5 @@
                     results[product_id] = {pricelist_id: price}
 
         return results
-
+    
 product_pricelist()

