23
23
# You should have received a copy of the GNU General Public License
24
24
# along with this program. If not, see <http://www.gnu.org/licenses/>.
25
25
##############################################################################
27
from osv import fields
28
from tools.translate import _
26
from openerp.osv import fields, osv
27
from openerp.tools.translate import _
29
29
import decimal_precision as dp
31
class mrp_bom(osv.osv):
32
class mrp_bom(osv.Model):
32
33
_inherit = 'mrp.bom'
34
35
def _calc_cost(self, cr, uid, ids, field_name, arg, context):
36
for i in self.browse(cr,uid,ids):
37
for i in self.browse(cr, uid, ids):
37
38
res[i.id] = self.compute_bom_cost(cr, uid, [i.id])
43
44
@cost = se almacena el costo unitario final.
44
45
@res = diccionario usado para retornar el id y el costo unitario.
47
for i in self.browse(cr,uid,ids):
48
for i in self.browse(cr, uid, ids):
49
50
cost = i.cost_t/i.product_qty
50
51
for l in i.bom_lines:
51
52
if not l.bom_lines:
52
cost = l.product_id.standard_price*l.product_qty
53
cost = l.product_id.standard_price*l.product_qty
55
cost = cost + self._calc_cost_u(cr,uid,[l.id],field_name,arg,context)[l.id]*l.product_qty
56
res[i.id]=cost/l.product_qty
56
cost = cost + self._calc_cost_u(cr, uid, [
57
l.id], field_name, arg, context)[l.id]*l.product_qty
58
res[i.id] = cost/l.product_qty
57
59
res[i.id] = i.cost_t/i.product_qty
58
if i._columns.has_key('sub_products') and i.sub_products:
59
sum_amount_subproducts=0.0
60
if 'sub_products' in i._columns and i.sub_products:
61
sum_amount_subproducts = 0.0
60
62
product_uom_obj = self.pool.get('product.uom')
61
63
for sub_prod in i.sub_products:
62
sum_amount_subproducts += (product_uom_obj._compute_price(cr, uid,sub_prod.product_id.uom_id.id , sub_prod.product_id.standard_price, sub_prod.product_uom.id) * sub_prod.product_qty)
63
res[i.id] = (i.cost_t - sum_amount_subproducts)/ i.product_qty #mrp.bom valida cantidades mayores a 0
64
sum_amount_subproducts += (product_uom_obj._compute_price(
65
cr, uid, sub_prod.product_id.uom_id.id, sub_prod.product_id.standard_price, sub_prod.product_uom.id) * sub_prod.product_qty)
66
res[i.id] = (i.cost_t - sum_amount_subproducts) / \
67
i.product_qty # mrp.bom valida cantidades mayores a 0
66
70
def _get_category(self, cr, uid, ids, field_name, arg, context):
68
72
funcion para obtener la categoria del producto y luego aplicarla para la filtracion
69
73
de las categorias de los campos product_uom y product_uos
72
for i in self.browse(cr,uid,ids):
73
res[i.id] = (i.product_id.uom_id.category_id.id,i.product_id.uom_id.category_id.name)
76
for i in self.browse(cr, uid, ids):
77
res[i.id] = (i.product_id.uom_id.category_id.id,
78
i.product_id.uom_id.category_id.name)
77
81
def _get_category_prod(self, cr, uid, ids, field_name, arg, context):
79
83
funcion para obtener la categoria del producto
82
for i in self.browse(cr,uid,ids):
83
res[i.id] = (i.product_id.product_tmpl_id.categ_id.id,i.product_id.product_tmpl_id.categ_id.name)
86
for i in self.browse(cr, uid, ids):
87
res[i.id] = (i.product_id.product_tmpl_id.categ_id.id,
88
i.product_id.product_tmpl_id.categ_id.name)
87
'cost_t': fields.function(_calc_cost, method=True, type='float', digits_compute= dp.get_precision('Cost_Bom'), string='Cost', store=False),
88
'cost_u': fields.function(_calc_cost_u, method=True, type='float',digits_compute= dp.get_precision('Cost_Bom'), string='Unit Cost', store=False),
89
'category_id': fields.function(_get_category, method=True, type='many2one',relation='product.uom.categ',string='Category Uom'),
90
'category_prod_id': fields.function(_get_category_prod, method=True, type='many2one',relation='product.category',string='Category'),
92
'cost_t': fields.function(_calc_cost, method=True, type='float', digits_compute=dp.get_precision('Cost_Bom'), string='Cost', store=False),
93
'cost_u': fields.function(_calc_cost_u, method=True, type='float', digits_compute=dp.get_precision('Cost_Bom'), string='Unit Cost', store=False),
94
'category_id': fields.function(_get_category, method=True, type='many2one', relation='product.uom.categ', string='Category Uom'),
95
'category_prod_id': fields.function(_get_category_prod, method=True, type='many2one', relation='product.category', string='Category'),
91
96
'product_uom_default_id': fields.related('product_id', 'uom_id', string="Uom Default", type='many2one', relation='product.uom'),
92
97
#~ 'bom_assets':fields.boolean('Assets', help="Determine if the bom is of type assets."),
96
100
def compute_bom_cost(self, cr, uid, ids, *args):
97
for i in self.browse(cr,uid,ids):
101
for i in self.browse(cr, uid, ids):
100
104
for l in i.bom_lines:
101
105
cost += self.compute_bom_cost(cr, uid, [l.id])
103
cost = i.product_id.standard_price*i.product_qty* i.product_uom.factor_inv * i.product_id.uom_id.factor
107
cost = i.product_id.standard_price*i.product_qty * \
108
i.product_uom.factor_inv * i.product_id.uom_id.factor
106
111
for j in i.routing_id.workcenter_lines:
107
112
cost += j.costo_total