~acysos-team/acysos/openerp-addons-6.0

« back to all changes in this revision

Viewing changes to acy_mrp_operator/mrp_operator.py

  • Committer: Ignacio Ibeas - Acysos S.L.
  • Date: 2012-11-25 23:39:59 UTC
  • Revision ID: ignacio@acysos.com-20121125233959-u8q2nupf5ix7wsxq
[FIX] acy_mrp_operator: Bug when the key don't need a workcenter

Show diffs side-by-side

added added

removed removed

Lines of Context:
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)
53
 
            cr.execute(sql)
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)
61
 
            
62
 
            #Recorte fleje
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)
65
 
                
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)
67
 
                
68
 
                product_line = self.pool.get('mrp.production.product.line').browse(cr, uid, product_line_id, context)[0]
69
 
                
70
 
                move_name = 'PROD:'+workcenter_line.production_id.name
71
 
                
72
 
                stock_move_id = stock_obj.search(cr,uid,[('product_id','=',product_line.product_id.id),('state','=','assigned'),('name','=',move_name)],context=context)
73
 
 
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)
79
 
                
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)
85
 
                            
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)
87
 
                            
88
 
                            product_line = self.pool.get('mrp.production.product.line').browse(cr, uid, product_line_id, context)[0]
89
 
                            
90
 
                            move_name = 'PROD:'+workcenter_line2.production_id.name
91
 
                            
92
 
                            stock_move_id = stock_obj.search(cr,uid,[('product_id','=',product_line.product_id.id),('state','=','assigned'),('name','=',move_name)],context=context)
93
 
 
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)
 
54
                cr.execute(sql)
 
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)
 
62
                        
 
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)
 
68
    
 
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)
 
70
                                
 
71
                                product_line = self.pool.get('mrp.production.product.line').browse(cr, uid, product_line_id, context)[0]
 
72
                                
 
73
                                move_name = 'PROD:'+workcenter_line2.production_id.name
 
74
                                
 
75
                                stock_move_id = stock_obj.search(cr,uid,[('product_id','=',product_line.product_id.id),('state','=','assigned'),('name','=',move_name)],context=context)
 
76
    
 
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)
99
82
        
100
83
        self.write(cr, uid, ids, {'state': 'confirmed'})
101
84
        return True
143
126
    
144
127
    _columns = {
145
128
        'key': fields.many2one('mrp.workcenter.registry.key','Key'),
146
 
        'workcenter_line_id': fields.many2one('mrp.production.workcenter.line', 'Workcenter', required=True),
 
129
        'workcenter_line_id': fields.many2one('mrp.production.workcenter.line', 'Workcenter'),
147
130
        'product_id': fields.many2one('product.product', 'Product'),
148
131
        'name': fields.char('Operation Code', size=64, required=True),
149
132
        'workcenter_id': fields.many2one('mrp.workcenter', 'Resource'),
267
250
        wf_service.trg_validate(uid, 'mrp.production', production_id, 'button_produce_done', cr)
268
251
        return True
269
252
 
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).
278
 
        #@return: True
279
 
        #"""
280
 
 
281
 
        #stock_mov_obj = self.pool.get('stock.move')
282
 
        #production = self.browse(cr, uid, production_id, context=context)
283
 
 
284
 
        #final_product_todo = []
285
 
 
286
 
        #produced_qty = 0
287
 
        #if production_mode == 'consume_produce':
288
 
            #produced_qty = production_qty
289
 
 
290
 
        #for produced_product in production.move_created_ids2:
291
 
            #if (produced_product.scrapped) or (produced_product.product_id.id<>production.product_id.id):
292
 
                #continue
293
 
            #produced_qty += produced_product.product_qty
294
 
 
295
 
        #if production_mode in ['consume','consume_produce']:
296
 
            #consumed_products = {}
297
 
            #check = {}
298
 
            #scrapped = map(lambda x:x.scrapped,production.move_lines2).count(True)
299
 
 
300
 
            #for consumed_product in production.move_lines2:
301
 
                #consumed = consumed_product.product_qty
302
 
                #if consumed_product.scrapped:
303
 
                    #continue
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
314
 
 
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)
323
 
 
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:
333
 
                    #continue
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
337
 
 
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
343
 
                #if rest_qty > 0 :
344
 
                    #stock_mov_obj.action_consume(cr, uid, [produce_product.id], production_qty, context=context)
345
 
 
346
 
        #for raw_product in production.move_lines2:
347
 
            #new_parent_ids = []
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)]})
354
 
 
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})
356
 
 
357
 
        #wf_service = netsvc.LocalService("workflow")
358
 
        #wf_service.trg_validate(uid, 'mrp.production', production_id, 'button_produce_done', cr)
359
 
        #return True
360
 
 
361
253
mrp_production()
362
254
 
363
255
class mrp_routing_workcenter(osv.osv):