23
23
# along with this program. If not, see <http://www.gnu.org/licenses/>.
25
25
##############################################################################
26
from osv import osv,fields
27
from tools.translate import _
29
class mrp_production(osv.osv):
30
_inherit='mrp.production'
26
from openerp.osv import osv, fields
27
from openerp.tools.translate import _
31
class mrp_production(osv.Model):
32
_inherit = 'mrp.production'
33
'picking_ids' : fields.one2many('stock.picking', 'production_id', 'Picking')
35
'picking_ids': fields.one2many('stock.picking', 'production_id', 'Picking')
36
38
def action_finished_consume(self, cr, uid, ids, context=None):
37
if context is None: context = {}
39
42
stock_picking = self.pool.get('stock.picking')
40
43
mrp_production2 = self.pool.get('mrp.production')
41
44
stock_move = self.pool.get('stock.move')
42
production = self.pool.get('mrp.production').browse(cr, uid, ids, context=context)[0]
45
production = self.pool.get('mrp.production').browse(
46
cr, uid, ids, context=context)[0]
44
48
for wizard_moves in self.browse(cr, uid, ids, context=context):
45
49
context['type'] = 'return'
46
pick_id_return = mrp_production2._make_production_internal_shipment2(cr, uid, production, context=context)
47
stock_picking.write(cr, uid, pick_id_return, {'state':'draft', 'auto_picking':False, 'production_id':production.id})
50
pick_id_return = mrp_production2._make_production_internal_shipment2(
51
cr, uid, production, context=context)
52
stock_picking.write(cr, uid, pick_id_return, {
53
'state': 'draft', 'auto_picking': False, 'production_id': production.id})
48
54
for wiz_move2 in wizard_moves.move_lines:
49
55
if wiz_move2.product_qty > 0.0:
50
shipment_move_id = mrp_production2._make_production_internal_shipment_line2(cr, uid, production, wiz_move2, pick_id_return, parent_move_id=False, destination_location_id=False)
51
stock_move.write(cr, uid, shipment_move_id, {'state':'draft'})
52
res = super(mrp_production, self).action_finished_consume(cr, uid, ids, context=context)
56
shipment_move_id = mrp_production2._make_production_internal_shipment_line2(
57
cr, uid, production, wiz_move2, pick_id_return, parent_move_id=False, destination_location_id=False)
58
stock_move.write(cr, uid, shipment_move_id, {
60
res = super(mrp_production, self).action_finished_consume(
61
cr, uid, ids, context=context)
55
64
def _make_production_internal_shipment_line2(self, cr, uid, production, production_line, shipment_id, parent_move_id, destination_location_id=False, context=None):
63
72
if not destination_location_id:
64
73
destination_location_id = source_location_id
65
74
return stock_move.create(cr, uid, {
67
'picking_id': shipment_id,
68
'product_id': production_line.product_id.id,
69
'product_qty': production_line.product_qty,
70
'product_uom': production_line.product_uom.id,
71
'product_uos_qty': production_line.product_uos and production_line.product_uos_qty or False,
72
'product_uos': production_line.product_uos and production_line.product_uos.id or False,
74
'move_dest_id': parent_move_id,
75
'location_id': source_location_id,
76
'location_dest_id': destination_location_id,
78
'company_id': production.company_id.id,
76
'picking_id': shipment_id,
77
'product_id': production_line.product_id.id,
78
'product_qty': production_line.product_qty,
79
'product_uom': production_line.product_uom.id,
80
'product_uos_qty': production_line.product_uos and production_line.product_uos_qty or False,
81
'product_uos': production_line.product_uos and production_line.product_uos.id or False,
83
'move_dest_id': parent_move_id,
84
'location_id': source_location_id,
85
'location_dest_id': destination_location_id,
87
'company_id': production.company_id.id,
81
90
def _make_production_internal_shipment2(self, cr, uid, production, context=None):
82
91
ir_sequence = self.pool.get('ir.sequence')
88
97
# Take routing address as a Shipment Address.
89
# If usage of routing location is a internal, make outgoing shipment otherwise internal shipment
98
# If usage of routing location is a internal, make outgoing shipment
99
# otherwise internal shipment
90
100
if production.bom_id.routing_id and production.bom_id.routing_id.location_id:
91
101
routing_loc = production.bom_id.routing_id.location_id
92
if routing_loc.usage <> 'internal':
102
if routing_loc.usage != 'internal':
94
104
address_id = routing_loc.address_id and routing_loc.address_id.id or False
96
106
# Take next Sequence number of shipment base on type
97
107
pick_name = ir_sequence.get(cr, uid, 'stock.picking')
98
108
picking_id = stock_picking.create(cr, uid, {
99
'name': pick_name + '-' + context.get('type',''),
109
'name': pick_name + '-' + context.get('type', ''),
100
110
'origin': (production.origin or '').split(':')[0] + ':' + production.name,
101
111
'type': pick_type,
102
112
'state': 'draft',