Ujjvala Collins (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-addons/trunk-bug-848867-uco into 
lp:openobject-addons.

Requested reviews:
  OpenERP Core Team (openerp)
Related bugs:
  Bug #848867 in OpenERP Addons: "sale_margin report takes price from product 
cost price"
  https://bugs.launchpad.net/openobject-addons/+bug/848867

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-848867-uco/+merge/75516

[FIX] sale_margin:
-------------------------------
* Fixed wrong cost price problem on Invoice analysis report. (lp:848867)
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-848867-uco/+merge/75516
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-addons/trunk-bug-848867-uco.
=== modified file 'sale_margin/sale_margin.py'
--- sale_margin/sale_margin.py	2011-07-01 23:41:24 +0000
+++ sale_margin/sale_margin.py	2011-09-15 10:05:36 +0000
@@ -48,6 +48,21 @@
                     res[line.id] = round((line.price_unit*line.product_uos_qty*(100.0-line.discount)/100.0) -(line.product_id.standard_price*line.product_uos_qty), 2)
         return res
 
+    def cost_price_change(self, cr, uid, sol_ids, inv_line_ids, context=None):
+        """ Changes cost price on invoice line if it is changed on sale order line. """
+        inv_line_obj = self.pool.get('account.invoice.line')
+        for sol in self.browse(cr, uid, sol_ids, context=context):
+            if sol.product_id.standard_price != sol.purchase_price:
+                for inv_line in inv_line_obj.browse(cr, uid, inv_line_ids, context=context):
+                    if inv_line.product_id.id == sol.product_id.id:
+                        inv_line_obj.write(cr, uid, [inv_line.id], {'cost_price': sol.purchase_price})
+        return True
+
+    def invoice_line_create(self, cr, uid, ids, context=None):
+        inv_line_ids = super(sale_order_line, self).invoice_line_create(cr, uid, ids, context=context)
+        self.cost_price_change(cr, uid, ids, inv_line_ids, context=context)
+        return inv_line_ids
+
     _columns = {
         'margin': fields.function(_product_margin, string='Margin', store=True),
         'purchase_price': fields.float('Cost Price', digits=(16,2))
@@ -82,11 +97,17 @@
     def action_invoice_create(self, cr, uid, ids, journal_id=False,
             group=False, type='out_invoice', context=None):
         # need to carify with new requirement
+        sol_obj = self.pool.get('sale.order.line')
+        picking_obj = self.pool.get('stock.picking')
         invoice_ids = []
-        picking_obj = self.pool.get('stock.picking')
         res = super(stock_picking, self).action_invoice_create(cr, uid, ids, journal_id=journal_id, group=group, type=type, context=context)
         invoice_ids = res.values()
         picking_obj.write(cr, uid, ids, {'invoice_ids': [[6, 0, invoice_ids]]})
+        for picking in self.browse(cr, uid, ids, context=context):
+            sol_ids = [sol.id for sol in picking.sale_id.order_line]
+            for inv in picking.invoice_ids:
+                inv_line_ids = [inv_line.id for inv_line in inv.invoice_line]
+                sol_obj.cost_price_change(cr, uid, sol_ids, inv_line_ids, context=context)
         return res
 
 stock_picking()
@@ -97,15 +118,17 @@
         'cost_price': fields.float('Cost Price', digits=(16, 2)),
     }
     def write(self, cr, uid, ids, vals, context=None):
-        if vals.get('product_id', False):
-            res = self.pool.get('product.product').read(cr, uid, [vals['product_id']], ['standard_price'])
-            vals['cost_price'] = res[0]['standard_price']
+        if not vals.get('cost_price', False):
+            if vals.get('product_id', False):
+                res = self.pool.get('product.product').read(cr, uid, [vals['product_id']], ['standard_price'])
+                vals['cost_price'] = res[0]['standard_price']
         return super(account_invoice_line, self).write(cr, uid, ids, vals, context)
 
     def create(self, cr, uid, vals, context=None):
-        if vals.get('product_id',False):
-            res = self.pool.get('product.product').read(cr, uid, [vals['product_id']], ['standard_price'])
-            vals['cost_price'] = res[0]['standard_price']
+        if not vals.get('cost_price', False):
+            if vals.get('product_id',False):
+                res = self.pool.get('product.product').read(cr, uid, [vals['product_id']], ['standard_price'])
+                vals['cost_price'] = res[0]['standard_price']
         return super(account_invoice_line, self).create(cr, uid, vals, context)
 
 account_invoice_line()

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

Reply via email to