694
694
if (next_operation) and (next_operation.location_id.usage == 'supplier') and (not next_operation.location_id.address_id):
695
695
raise osv.except_osv(_('External Operation'), _('External operation location must be set !'))
696
696
if (i == 0) and (operation.location_id.usage == 'supplier'):
697
picking_id = self.create_picking(cr, uid, 'out', 'direct', production, operation)
697
picking_id = self.create_picking(cr, uid, 'out', 'one', production, operation)
698
698
self.pool.get('stock.picking').write(cr, uid, [picking_id], {'production_id': production.id})
699
699
self.create_purchase(cr, uid, operation)
700
700
for line in operation.components_used_ids:
770
770
res_final_ids.append(data)
771
771
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
772
772
if (next_operation) and (next_operation.location_id.usage == 'supplier'):
773
picking_id = self.create_picking(cr, uid, 'out', 'direct', production, next_operation)
773
picking_id = self.create_picking(cr, uid, 'out', 'one', production, next_operation)
774
774
self.pool.get('stock.picking').write(cr, uid, [picking_id], {'production_id': production.id})
775
775
self.create_purchase(cr, uid, next_operation)
776
776
for line in next_operation.components_used_ids:
1139
def button_check_internal_pickings(self, cr, uid, ids, *args):
1140
move_obj = self.pool.get('stock.move')
1141
production = self.browse(cr,uid,ids[0])
1142
if production.picking_ids:
1143
for picking in production.picking_ids:
1144
if picking.internal_type == 'input':
1145
move_ids = [x.id for x in picking.move_lines if x.state == 'confirmed']
1147
raise osv.except_osv(_('Warning !'),_('Not enough stock, unable to reserve the products.'))
1148
move_obj.action_assign(cr, uid, move_ids)
1152
def button_force_internal_pickings(self, cr, uid, ids, *args):
1153
picking_obj = self.pool.get('stock.picking')
1154
production = self.browse(cr,uid,ids[0])
1155
# Si no se han procesado fuerzo su disponibilidad
1156
if production.picking_ids:
1157
for picking in production.picking_ids:
1158
if picking.internal_type == 'input' and picking.state == 'confirmed':
1159
picking_obj.force_assign(cr, uid, [picking.id], *args)
1163
def button_process_internal_pickings(self, cr, uid, ids, *args):
1164
picking_obj = self.pool.get('stock.picking')
1165
uom_obj = self.pool.get('product.uom')
1167
'delivery_date' : time.strftime('%Y-%m-%d %H:%M:%S')
1169
production = self.browse(cr,uid,ids[0])
1170
if production.picking_ids:
1171
for pick in production.picking_ids:
1172
if pick.internal_type == 'input' and pick.state == 'assigned':
1173
picking_type = self.production_get_picking_type(cr, uid, pick, context={})
1174
for move in pick.move_lines:
1175
calc_qty = uom_obj._compute_qty(cr, uid, move.product_uom.id, \
1176
move.product_qty, move.product_uom.id)
1177
#Adding a check whether any move line contains exceeding qty to original moveline
1178
product_uom = self.pool.get('decimal.precision').precision_get(cr, uid, 'Product UOM')
1179
if round(calc_qty, product_uom) > round(move.product_qty, product_uom):
1180
precision = '%0.' + str(dp.get_precision('Product UoM')(cr)[1] or 0) + 'f'
1181
raise osv.except_osv(_('Processing Error'),
1182
_('Processing quantity %s %s for %s is larger than the available quantity %s %s !')\
1183
% (precision % calc_qty, move.product_uom.name, move.product_id.name,\
1184
precision % move.product_qty, move.product_uom.name))
1186
#Adding a check whether any move line contains qty less than zero
1188
precision = '%0.' + str(dp.get_precision('Product UoM')(cr)[1] or 0) + 'f'
1189
raise osv.except_osv(_('Processing Error'), \
1190
_('Can not process quantity %s for Product %s !') \
1191
% (precision % move.product_qty, move.product_id.name))
1193
partial_datas['move%s' % (move.id)] = {
1194
'product_id': move.product_id.id,
1195
'product_qty': calc_qty,
1196
'product_uom': move.product_uom.id,
1197
'prodlot_id': move.prodlot_id.id,
1199
if (picking_type == 'in') and (move.product_id.cost_method == 'average'):
1200
partial_datas['move%s' % (move.id)].update({
1201
'product_price' : move.cost,
1202
'product_currency': move.currency.id,
1205
picking_obj.do_partial(cr, uid, [pick.id], partial_datas, context={})
1210
1139
def production_get_picking_type(self, cr, uid, picking, context=None):
1211
1140
picking_type = picking.type
1212
1141
for move in picking.move_lines: