[IMP] mrp: if cost price of component is changed, also change cost price of main product
bzr revid: hmo@tinyerp.com-20100326101501-vlreabb9h6ishpqf
This commit is contained in:
parent
f688de89c1
commit
17968f108d
|
@ -21,6 +21,7 @@
|
|||
|
||||
import mrp
|
||||
import stock
|
||||
import product
|
||||
import installer
|
||||
import wizard
|
||||
import report
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
from tools.translate import _
|
||||
|
||||
|
||||
class product_product(osv.osv):
|
||||
_inherit = "product.product"
|
||||
|
||||
def do_change_standard_price(self, cr, uid, ids, datas, context={}):
|
||||
#TODO : TO Check
|
||||
res = super(product_product, self).do_change_standard_price(cr, uid, ids, datas, context=context)
|
||||
bom_obj = self.pool.get('mrp.bom')
|
||||
product_uom_obj = self.pool.get('product.uom')
|
||||
|
||||
def _compute_price(bom):
|
||||
price = 0
|
||||
if bom.bom_lines:
|
||||
for sbom in bom.bom_lines:
|
||||
price += _compute_price(sbom) * sbom.product_qty
|
||||
else:
|
||||
|
||||
no_child_bom = bom_obj.search(cr, uid, [('product_id', '=', bom.product_id.id), ('bom_id', '=', False)])
|
||||
if no_child_bom and bom.id not in no_child_bom:
|
||||
other_bom = bom_obj.browse(cr, uid, no_child_bom)[0]
|
||||
if not other_bom.product_id.calculate_price:
|
||||
price += _compute_price(other_bom) * other_bom.product_qty
|
||||
else:
|
||||
price += other_bom.product_id.standard_price
|
||||
else:
|
||||
price += bom.product_id.standard_price
|
||||
|
||||
if bom.routing_id:
|
||||
for wline in bom.routing_id.workcenter_lines:
|
||||
wc = wline.workcenter_id
|
||||
cycle = wline.cycle_nbr
|
||||
hour = (wc.time_start + wc.time_stop + cycle * wc.time_cycle) * (wc.time_efficiency or 1.0)
|
||||
price += wc.costs_cycle * cycle + wc.costs_hour * hour
|
||||
price = product_uom_obj._compute_price(cr, uid, bom.product_uom.id, price, bom.product_id.uom_id.id)
|
||||
if bom.bom_lines:
|
||||
self.write(cr, uid, [bom.product_id.id], {'standard_price' : price/bom.product_qty})
|
||||
if bom.product_uom.id != bom.product_id.uom_id.id:
|
||||
price = product_uom_obj._compute_price(cr, uid, bom.product_uom.id, price, bom.product_id.uom_id.id)
|
||||
return price
|
||||
|
||||
|
||||
bom_ids = bom_obj.search(cr, uid, [('product_id', 'in', ids)])
|
||||
for bom in bom_obj.browse(cr, uid, bom_ids):
|
||||
_compute_price(bom)
|
||||
return res
|
||||
product_product()
|
Loading…
Reference in New Issue