49
49
def action_confirm(self, cr, uid, ids, context=None):
50
50
registry = self.browse(cr,uid,ids,context)[0]
51
51
for workcenter_line in registry.workcenter_lines:
52
sql = "SELECT MAX(sequence) FROM mrp_production_workcenter_line WHERE production_id = %s" % (workcenter_line.production_id.id)
54
sequence = cr.fetchone()[0]
55
prod_obj = self.pool.get('mrp.production')
56
stock_obj = self.pool.get('stock.move')
57
prod_obj.action_in_production(cr,uid,workcenter_line.production_id.id)
58
if sequence == workcenter_line.workcenter_line_id.sequence:
59
if workcenter_line.go_product_qty > 0:
60
prod_obj.action_produce(cr, uid,workcenter_line.production_id.id,workcenter_line.go_product_qty,'consume_produce',context)
63
if workcenter_line.recorte_fleje > 0:
64
mrp_routing_id = self.pool.get('mrp.routing.workcenter').search(cr,uid,[('routing_id','=',workcenter_line.production_id.routing_id.id),('workcenter_id','=',workcenter_line.workcenter_id.id)], context=context)
66
product_line_id = self.pool.get('mrp.production.product.line').search(cr, uid, [('production_id','=',workcenter_line.production_id.id),('consumed_on','=',mrp_routing_id[0])], context=context)
68
product_line = self.pool.get('mrp.production.product.line').browse(cr, uid, product_line_id, context)[0]
70
move_name = 'PROD:'+workcenter_line.production_id.name
72
stock_move_id = stock_obj.search(cr,uid,[('product_id','=',product_line.product_id.id),('state','=','assigned'),('name','=',move_name)],context=context)
74
bom_id = self.pool.get('mrp.bom').search(cr, uid, [('bom_id','=',workcenter_line.production_id.bom_id.id),('product_id','=',product_line.product_id.id),('consumed_on','=',mrp_routing_id[0])], context=context)
75
bom = self.pool.get('mrp.bom').browse(cr, uid, bom_id, context)[0]
76
kilo = (workcenter_line.recorte_fleje*1000*product_line.product_id.wide*product_line.product_id.thickness*7.85)/1000000
77
context = {'operator_registry':1,'location_src':workcenter_line.production_id.location_src_id.id}
78
stock_obj.action_scrap(cr, uid,stock_move_id,kilo,4,context)
80
for workcenter_line2 in registry.workcenter_lines:
81
if workcenter_line.production_id.id == workcenter_line2.production_id.id:
82
if workcenter_line2.workcenter_line_id.sequence <= workcenter_line.workcenter_line_id.sequence:
83
if workcenter_line.de_product_qty > 0:
84
mrp_routing_id = self.pool.get('mrp.routing.workcenter').search(cr,uid,[('routing_id','=',workcenter_line2.production_id.routing_id.id),('workcenter_id','=',workcenter_line2.workcenter_id.id)], context=context)
86
product_line_id = self.pool.get('mrp.production.product.line').search(cr, uid, [('production_id','=',workcenter_line2.production_id.id),('consumed_on','=',mrp_routing_id[0])], context=context)
88
product_line = self.pool.get('mrp.production.product.line').browse(cr, uid, product_line_id, context)[0]
90
move_name = 'PROD:'+workcenter_line2.production_id.name
92
stock_move_id = stock_obj.search(cr,uid,[('product_id','=',product_line.product_id.id),('state','=','assigned'),('name','=',move_name)],context=context)
94
bom_id = self.pool.get('mrp.bom').search(cr, uid, [('bom_id','=',workcenter_line2.production_id.bom_id.id),('product_id','=',product_line.product_id.id),('consumed_on','=',mrp_routing_id[0])], context=context)
95
bom = self.pool.get('mrp.bom').browse(cr, uid, bom_id, context)[0]
96
defective_qty = bom.product_qty*bom.product_efficiency*workcenter_line.de_product_qty
97
context = {'operator_registry':1,'location_src':workcenter_line2.production_id.location_src_id.id}
98
stock_obj.action_scrap(cr, uid,stock_move_id,defective_qty,4,context)
52
if workcenter_line.production_id.id:
53
sql = "SELECT MAX(sequence) FROM mrp_production_workcenter_line WHERE production_id = %s" % (workcenter_line.production_id.id)
55
sequence = cr.fetchone()[0]
56
prod_obj = self.pool.get('mrp.production')
57
stock_obj = self.pool.get('stock.move')
58
prod_obj.action_in_production(cr,uid,workcenter_line.production_id.id)
59
if sequence == workcenter_line.workcenter_line_id.sequence:
60
if workcenter_line.go_product_qty > 0:
61
prod_obj.action_produce(cr, uid,workcenter_line.production_id.id,workcenter_line.go_product_qty,'consume_produce',context)
63
for workcenter_line2 in registry.workcenter_lines:
64
if workcenter_line.production_id.id == workcenter_line2.production_id.id:
65
if workcenter_line2.workcenter_line_id.sequence <= workcenter_line.workcenter_line_id.sequence:
66
if workcenter_line.de_product_qty > 0:
67
mrp_routing_id = self.pool.get('mrp.routing.workcenter').search(cr,uid,[('routing_id','=',workcenter_line2.production_id.routing_id.id),('workcenter_id','=',workcenter_line2.workcenter_id.id)], context=context)
69
product_line_id = self.pool.get('mrp.production.product.line').search(cr, uid, [('production_id','=',workcenter_line2.production_id.id),('consumed_on','=',mrp_routing_id[0])], context=context)
71
product_line = self.pool.get('mrp.production.product.line').browse(cr, uid, product_line_id, context)[0]
73
move_name = 'PROD:'+workcenter_line2.production_id.name
75
stock_move_id = stock_obj.search(cr,uid,[('product_id','=',product_line.product_id.id),('state','=','assigned'),('name','=',move_name)],context=context)
77
bom_id = self.pool.get('mrp.bom').search(cr, uid, [('bom_id','=',workcenter_line2.production_id.bom_id.id),('product_id','=',product_line.product_id.id),('consumed_on','=',mrp_routing_id[0])], context=context)
78
bom = self.pool.get('mrp.bom').browse(cr, uid, bom_id, context)[0]
79
defective_qty = bom.product_qty*bom.product_efficiency*workcenter_line.de_product_qty
80
context = {'operator_registry':1,'location_src':workcenter_line2.production_id.location_src_id.id}
81
stock_obj.action_scrap(cr, uid,stock_move_id,defective_qty,4,context)
100
83
self.write(cr, uid, ids, {'state': 'confirmed'})
267
250
wf_service.trg_validate(uid, 'mrp.production', production_id, 'button_produce_done', cr)
270
#def action_produce(self, cr, uid, production_id, production_qty, production_mode, operator, context=None):
271
#""" To produce final product based on production mode (consume/consume&produce).
272
#If Production mode is consume, all stock move lines of raw materials will be done/consumed.
273
#If Production mode is consume & produce, all stock move lines of raw materials will be done/consumed
274
#and stock move lines of final product will be also done/produced.
275
#@param production_id: the ID of mrp.production object
276
#@param production_qty: specify qty to produce
277
#@param production_mode: specify production mode (consume/consume&produce).
281
#stock_mov_obj = self.pool.get('stock.move')
282
#production = self.browse(cr, uid, production_id, context=context)
284
#final_product_todo = []
287
#if production_mode == 'consume_produce':
288
#produced_qty = production_qty
290
#for produced_product in production.move_created_ids2:
291
#if (produced_product.scrapped) or (produced_product.product_id.id<>production.product_id.id):
293
#produced_qty += produced_product.product_qty
295
#if production_mode in ['consume','consume_produce']:
296
#consumed_products = {}
298
#scrapped = map(lambda x:x.scrapped,production.move_lines2).count(True)
300
#for consumed_product in production.move_lines2:
301
#consumed = consumed_product.product_qty
302
#if consumed_product.scrapped:
304
#if not consumed_products.get(consumed_product.product_id.id, False):
305
#consumed_products[consumed_product.product_id.id] = consumed_product.product_qty
306
#check[consumed_product.product_id.id] = 0
307
#for f in production.product_lines:
308
#if f.product_id.id == consumed_product.product_id.id:
309
#if (len(production.move_lines2) - scrapped) > len(production.product_lines):
310
#check[consumed_product.product_id.id] += consumed_product.product_qty
311
#consumed = check[consumed_product.product_id.id]
312
#rest_consumed = produced_qty * f.product_qty / production.product_qty - consumed
313
#consumed_products[consumed_product.product_id.id] = rest_consumed
315
#for raw_product in production.move_lines:
316
#for f in production.product_lines:
317
#if f.product_id.id == raw_product.product_id.id:
318
#consumed_qty = consumed_products.get(raw_product.product_id.id, 0)
319
#if consumed_qty == 0:
320
#consumed_qty = production_qty * f.product_qty / production.product_qty
321
#if consumed_qty > 0:
322
#stock_mov_obj.action_consume(cr, uid, [raw_product.id], consumed_qty, raw_product.location_id.id, context=context)
324
#if production_mode == 'consume_produce':
325
## To produce remaining qty of final product
326
#vals = {'state':'confirmed'}
327
##final_product_todo = [x.id for x in production.move_created_ids]
328
##stock_mov_obj.write(cr, uid, final_product_todo, vals)
329
##stock_mov_obj.action_confirm(cr, uid, final_product_todo, context)
330
#produced_products = {}
331
#for produced_product in production.move_created_ids2:
332
#if produced_product.scrapped:
334
#if not produced_products.get(produced_product.product_id.id, False):
335
#produced_products[produced_product.product_id.id] = 0
336
#produced_products[produced_product.product_id.id] += produced_product.product_qty
338
#for produce_product in production.move_created_ids:
339
#produced_qty = produced_products.get(produce_product.product_id.id, 0)
340
#rest_qty = production.product_qty - produced_qty
341
#if rest_qty <= production_qty:
342
#production_qty = rest_qty
344
#stock_mov_obj.action_consume(cr, uid, [produce_product.id], production_qty, context=context)
346
#for raw_product in production.move_lines2:
348
#parent_move_ids = [x.id for x in raw_product.move_history_ids]
349
#for final_product in production.move_created_ids2:
350
#if final_product.id not in parent_move_ids:
351
#new_parent_ids.append(final_product.id)
352
#for new_parent_id in new_parent_ids:
353
#stock_mov_obj.write(cr, uid, [raw_product.id], {'move_history_ids': [(4,new_parent_id)]})
355
#self.pool.get('mrp.operator.registry').create(cr, uid, {'name':'/','mrp_production_id':production.id,'operator_id':operator,'product_qty':production_qty},{'mrp.operator.registry':True})
357
#wf_service = netsvc.LocalService("workflow")
358
#wf_service.trg_validate(uid, 'mrp.production', production_id, 'button_produce_done', cr)
363
255
class mrp_routing_workcenter(osv.osv):