~avanzosc-manufactuaring-team/avanzosc/manufacturing-6.0

« back to all changes in this revision

Viewing changes to mrp_master_extension/mrp_production.py

  • Committer: alfredodelafuente
  • Date: 2013-11-13 14:34:45 UTC
  • Revision ID: alfredodelafuente@avanzosc.es-20131113143445-vta97484lk01r2yl
[MOD mrp_master_extension, mrp_advanced_operations]

Show diffs side-by-side

added added

removed removed

Lines of Context:
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:
1136
1136
            })
1137
1137
        return True
1138
1138
    
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']
1146
 
                    if not move_ids:
1147
 
                        raise osv.except_osv(_('Warning !'),_('Not enough stock, unable to reserve the products.'))
1148
 
                    move_obj.action_assign(cr, uid, move_ids)
1149
 
        
1150
 
        return True 
1151
 
    
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)
1160
 
        
1161
 
        return True 
1162
 
    
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')
1166
 
        partial_datas = {
1167
 
            'delivery_date' : time.strftime('%Y-%m-%d %H:%M:%S')
1168
 
        }
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))
1185
 
        
1186
 
                        #Adding a check whether any move line contains qty less than zero
1187
 
                        if calc_qty < 0:
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))
1192
 
        
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,
1198
 
                        }
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,
1203
 
                                                            })
1204
 
                            
1205
 
                    picking_obj.do_partial(cr, uid, [pick.id], partial_datas, context={})
1206
 
        
1207
 
        return True     
1208
 
     
1209
 
    
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:
1252
1181
#                    if line.product_id.id != production.product_id.id:
1253
1182
#                        res = False
1254
1183
        return res
1255
 
    
1256
 
    #
1257
 
    def button_return_products(self, cr, uid, ids, context=None):
1258
 
        move_obj = self.pool.get('stock.move')
1259
 
        
1260
 
        simulation_cost = self.browse(cr, uid, ids[0])
1261
 
        if simulation_cost.products_to_return_ids:
1262
 
            for move in simulation_cost.products_to_return_ids:
1263
 
                if move.state == 'assigned':
1264
 
                    move_obj.action_done(cr, uid, [move.id], context)
1265
1184
 
1266
 
        return True
1267
1185
    
1268
1186
mrp_production()