2010-03-26 10:15:01 +00:00
# -*- 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/>.
#
##############################################################################
2012-12-06 14:56:32 +00:00
from openerp . osv import fields , osv
2010-03-26 10:15:01 +00:00
2014-05-27 07:42:52 +00:00
class product_template ( osv . osv ) :
_inherit = " product.template "
def _bom_orders_count ( self , cr , uid , ids , field_name , arg , context = None ) :
Bom = self . pool ( ' mrp.bom ' )
res = { }
for product_tmpl_id in ids :
nb = Bom . search_count ( cr , uid , [ ( ' product_tmpl_id ' , ' = ' , product_tmpl_id ) ] , context = context )
res [ product_tmpl_id ] = {
' bom_count ' : nb ,
}
return res
def _bom_orders_count_mo ( self , cr , uid , ids , name , arg , context = None ) :
res = { }
for product_tmpl_id in self . browse ( cr , uid , ids ) :
res [ product_tmpl_id . id ] = sum ( [ p . mo_count for p in product_tmpl_id . product_variant_ids ] )
return res
_columns = {
2014-06-26 15:52:37 +00:00
' bom_ids ' : fields . one2many ( ' mrp.bom ' , ' product_tmpl_id ' , ' Bill of Materials ' ) ,
2014-05-27 07:42:52 +00:00
' bom_count ' : fields . function ( _bom_orders_count , string = ' # Bill of Material ' , type = ' integer ' , multi = " _bom_order_count " ) ,
' mo_count ' : fields . function ( _bom_orders_count_mo , string = ' # Manufacturing Orders ' , type = ' integer ' ) ,
2014-06-26 16:12:10 +00:00
' produce_delay ' : fields . float ( ' Manufacturing Lead Time ' , help = " Average delay in days to produce this product. In the case of multi-level BOM, the manufacturing lead times of the components will be added. " ) ,
' track_production ' : fields . boolean ( ' Track Manufacturing Lots ' , help = " Forces to specify a Serial Number for all moves containing this product and generated by a Manufacturing Order " ) ,
}
2014-06-26 15:52:37 +00:00
_defaults = {
2014-07-07 19:45:11 +00:00
' produce_delay ' : 1 ,
2014-06-26 15:52:37 +00:00
}
2014-07-07 21:33:47 +00:00
def action_view_mos ( self , cr , uid , ids , context = None ) :
products = self . _get_products ( cr , uid , ids , context = context )
2014-07-16 09:58:22 +00:00
result = self . _get_act_window_dict ( cr , uid , ' mrp.act_product_mrp_production ' , context = context )
2014-08-06 12:44:45 +00:00
if len ( ids ) == 1 and len ( products ) == 1 :
result [ ' context ' ] = " { ' default_product_id ' : " + str ( products [ 0 ] ) + " , ' search_default_product_id ' : " + str ( products [ 0 ] ) + " } "
else :
result [ ' domain ' ] = " [( ' product_id ' , ' in ' ,[ " + ' , ' . join ( map ( str , products ) ) + " ])] "
result [ ' context ' ] = " {} "
2014-07-07 21:33:47 +00:00
return result
2014-06-26 15:52:37 +00:00
2014-07-07 21:33:47 +00:00
2014-05-27 07:42:52 +00:00
2010-03-26 10:15:01 +00:00
class product_product ( osv . osv ) :
2014-05-27 07:42:52 +00:00
_inherit = " product.product "
def _bom_orders_count ( self , cr , uid , ids , field_name , arg , context = None ) :
Production = self . pool ( ' mrp.production ' )
res = { }
for product_id in ids :
res [ product_id ] = Production . search_count ( cr , uid , [ ( ' product_id ' , ' = ' , product_id ) ] , context = context )
return res
2010-06-14 10:28:26 +00:00
_columns = {
2014-05-27 07:42:52 +00:00
' mo_count ' : fields . function ( _bom_orders_count , string = ' # Manufacturing Orders ' , type = ' integer ' ) ,
2013-10-29 07:48:15 +00:00
}
2014-07-07 21:33:47 +00:00
def action_view_bom ( self , cr , uid , ids , context = None ) :
tmpl_obj = self . pool . get ( " product.template " )
products = set ( )
for product in self . browse ( cr , uid , ids , context = context ) :
products . add ( product . product_tmpl_id . id )
2014-07-16 09:58:22 +00:00
result = tmpl_obj . _get_act_window_dict ( cr , uid , ' mrp.product_open_bom ' , context = context )
2014-08-04 09:42:40 +00:00
# bom specific to this variant or global to template
domain = [
' | ' ,
( ' product_id ' , ' in ' , ids ) ,
' & ' ,
( ' product_id ' , ' = ' , False ) ,
( ' product_tmpl_id ' , ' in ' , list ( products ) ) ,
]
2015-07-24 05:49:09 +00:00
result [ ' context ' ] = " { ' default_product_id ' : active_id, ' search_default_product_id ' : active_id, ' default_product_tmpl_id ' : %s } " % ( len ( products ) and products . pop ( ) or ' False ' )
2014-08-04 09:42:40 +00:00
result [ ' domain ' ] = str ( domain )
2014-07-07 21:33:47 +00:00
return result
2011-11-22 08:51:38 +00:00
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: