diff --git a/crm_claim_rma/wizard/claim_make_picking.py b/crm_claim_rma/wizard/claim_make_picking.py index 3acd8faa..b4d3ae04 100644 --- a/crm_claim_rma/wizard/claim_make_picking.py +++ b/crm_claim_rma/wizard/claim_make_picking.py @@ -152,33 +152,103 @@ class claim_make_picking(orm.TransientModel): def action_cancel(self, cr, uid, ids, context=None): return {'type': 'ir.actions.act_window_close'} + def _prepare_picking_vals(self, cr, uid, claim, p_type, partner_id, wizard, + context=None): + return { + 'origin': claim.number, + 'type': p_type, + 'move_type': 'one', # direct + 'state': 'draft', + 'date': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), + 'partner_id': partner_id, + 'invoice_state': "none", + 'company_id': claim.company_id.id, + 'location_id': wizard.claim_line_source_location.id, + 'location_dest_id': wizard.claim_line_dest_location.id, + 'note': 'RMA picking %s' % p_type, + 'claim_id': claim.id, + } + + def _prepare_move_vals(self, cr, uid, wizard_line, partner_id, + picking_id, claim, wizard, context=None): + return { + 'name': wizard_line.product_id.name_template, + 'priority': '0', + 'date': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), + 'date_expected': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), + 'product_id': wizard_line.product_id.id, + 'product_qty': wizard_line.product_returned_quantity, + 'product_uom': wizard_line.product_id.uom_id.id, + 'partner_id': partner_id, + 'prodlot_id': wizard_line.prodlot_id.id, + 'picking_id': picking_id, + 'state': 'draft', + 'price_unit': wizard_line.unit_sale_price, + 'company_id': claim.company_id.id, + 'location_id': wizard.claim_line_source_location.id, + 'location_dest_id': wizard.claim_line_dest_location.id, + 'note': 'RMA move', + } + + def _create_move(self, cr, uid, wizard_line, partner_id, + picking_id, wizard, claim, context=None): + move_obj = self.pool['stock.move'] + move_vals = self._prepare_move_vals(cr, uid, wizard_line, + partner_id, picking_id, claim, wizard, context=context) + move_id = move_obj.create(cr, uid, move_vals, context=context) + return move_id + + def _prepare_procurement_vals(self, cr, uid, wizard, claim, move_id, + wizard_line, context=None): + return { + 'name': wizard_line.product_id.name_template, + 'origin': claim.number, + 'date_planned': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), + 'product_id': wizard_line.product_id.id, + 'product_qty': wizard_line.product_returned_quantity, + 'product_uom': wizard_line.product_id.uom_id.id, + 'location_id': wizard.claim_line_source_location.id, + 'procure_method': wizard_line.product_id.procure_method, + 'move_id': move_id, + 'company_id': claim.company_id.id, + 'note': 'RMA procurement', + } + + def _create_procurement(self, cr, uid, wizard, claim, move_id, + wizard_line, context=None): + proc_obj = self.pool['procurement.order'] + proc_vals = self._prepare_procurement_vals(cr, uid, wizard, claim, + move_id, wizard_line, context=context) + proc_id = proc_obj.create(cr, uid, proc_vals, context=context) + return proc_id + + # If "Create" button pressed def action_create_picking(self, cr, uid, ids, context=None): - picking_obj = self.pool.get('stock.picking') + picking_obj = self.pool['stock.picking'] + proc_obj = self.pool['procurement.order'] + line_obj = self.pool['claim.line'] + claim_obj = self.pool['crm.claim'] if context is None: context = {} - view_obj = self.pool.get('ir.ui.view') + view_obj = self.pool['ir.ui.view'] name = 'RMA picking out' if context.get('picking_type') == 'out': p_type = 'out' write_field = 'move_out_id' - note = 'RMA picking out' else: p_type = 'in' write_field = 'move_in_id' if context.get('picking_type'): - note = 'RMA picking ' + str(context.get('picking_type')) - name = note + name = 'RMA picking ' + str(context.get('picking_type')) model = 'stock.picking.' + p_type view_id = view_obj.search(cr, uid, [('model', '=', model), - ('type', '=', 'form'), - ], + ('type', '=', 'form')], context=context)[0] wizard = self.browse(cr, uid, ids[0], context=context) - claim = self.pool.get('crm.claim').browse(cr, uid, - context['active_id'], - context=context) + claim = claim_obj.browse(cr, uid, context['active_id'], + context=context) partner_id = claim.delivery_address_id.id line_ids = [x.id for x in wizard.claim_line_ids] # In case of product return, we don't allow one picking for various @@ -193,9 +263,7 @@ class claim_make_picking(orm.TransientModel): _('A product return cannot be created for various ' 'destination locations, please choose line with a ' 'same destination location.')) - self.pool.get('claim.line').auto_set_warranty(cr, uid, - line_ids, - context=context) + line_obj.auto_set_warranty(cr, uid, line_ids, context=context) common_dest_partner_id = self._get_common_partner_from_line( cr, uid, line_ids, context=context) if not common_dest_partner_id: @@ -206,54 +274,30 @@ class claim_make_picking(orm.TransientModel): 'same address.')) partner_id = common_dest_partner_id # create picking - picking_id = picking_obj.create( - cr, uid, - {'origin': claim.number, - 'type': p_type, - 'move_type': 'one', # direct - 'state': 'draft', - 'date': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), - 'partner_id': partner_id, - 'invoice_state': "none", - 'company_id': claim.company_id.id, - 'location_id': wizard.claim_line_source_location.id, - 'location_dest_id': wizard.claim_line_dest_location.id, - 'note': note, - 'claim_id': claim.id, - }, - context=context) + picking_vals = self._prepare_picking_vals( + cr, uid, claim, p_type, partner_id, wizard, context=context) + picking_id = picking_obj.create(cr, uid, picking_vals, context=context) # Create picking lines - fmt = DEFAULT_SERVER_DATETIME_FORMAT - for wizard_claim_line in wizard.claim_line_ids: - move_obj = self.pool.get('stock.move') - move_id = move_obj.create( - cr, uid, - {'name': wizard_claim_line.product_id.name_template, - 'priority': '0', - 'date': time.strftime(fmt), - 'date_expected': time.strftime(fmt), - 'product_id': wizard_claim_line.product_id.id, - 'product_qty': wizard_claim_line.product_returned_quantity, - 'product_uom': wizard_claim_line.product_id.uom_id.id, - 'partner_id': partner_id, - 'prodlot_id': wizard_claim_line.prodlot_id.id, - 'picking_id': picking_id, - 'state': 'draft', - 'price_unit': wizard_claim_line.unit_sale_price, - 'company_id': claim.company_id.id, - 'location_id': wizard.claim_line_source_location.id, - 'location_dest_id': wizard.claim_line_dest_location.id, - 'note': note, - }, - context=context) - self.pool.get('claim.line').write( - cr, uid, wizard_claim_line.id, - {write_field: move_id}, context=context) + proc_ids = [] + for wizard_line in wizard.claim_line_ids: + if wizard_line.product_id.type not in ['consu', 'product']: + continue + move_id = self._create_move(cr, uid, wizard_line, partner_id, + picking_id, wizard, claim, context=context) + line_obj.write(cr, uid, wizard_line.id, {write_field: move_id}, + context=context) + proc_id = self._create_procurement(cr, uid, wizard, claim, move_id, + wizard_line, context=context) + proc_ids.append(proc_id) wf_service = netsvc.LocalService("workflow") if picking_id: wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr) picking_obj.action_assign(cr, uid, [picking_id]) + if proc_ids: + for proc_id in proc_ids: + wf_service.trg_validate(uid, 'procurement.order', + proc_id, 'button_confirm', cr) domain = ("[('type', '=', '%s'), ('partner_id', '=', %s)]" % (p_type, partner_id)) return {