86 lines
3.7 KiB
Python
86 lines
3.7 KiB
Python
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
|
|
|
from flectra import api, fields, models, _
|
|
|
|
|
|
class StockReturnWeb(models.TransientModel):
|
|
_name = 'stock.return.web'
|
|
|
|
order_id = fields.Many2one('sale.order', string='SO Number')
|
|
product_id = fields.Many2one('product.product', string='Product')
|
|
uom_id = fields.Many2one('product.uom', string='UOM')
|
|
qty_return = fields.Float(string='Return Quantity')
|
|
picking_type_id = fields.Many2one('stock.picking.type',
|
|
string='Picking Type')
|
|
source_location_id = fields.Many2one('stock.location',
|
|
sting='Source Location')
|
|
destination_location_id = fields.Many2one('stock.location',
|
|
sting='Destination Location')
|
|
rma_id = fields.Many2one('rma.request', string='Return Request Number')
|
|
|
|
@api.model
|
|
def default_get(self, fields):
|
|
res = super(StockReturnWeb, self).default_get(fields)
|
|
return_id = self.env['rma.request'].browse(
|
|
self._context.get('active_id'))
|
|
picking_id = return_id.sale_order_id.picking_ids.filtered(
|
|
lambda pick: pick.state == 'done' and pick.picking_type_id.code ==
|
|
'outgoing').sorted(key=lambda pick_id: pick_id.id)[0]
|
|
res.update({
|
|
'order_id': return_id.sale_order_id and
|
|
return_id.sale_order_id.id or False,
|
|
'rma_id': return_id and return_id.id or False,
|
|
'source_location_id': picking_id.location_dest_id and
|
|
picking_id.location_dest_id.id or False,
|
|
'destination_location_id': picking_id.location_id and
|
|
picking_id.location_id.id or False,
|
|
})
|
|
|
|
for line in return_id.rma_line:
|
|
res.update({
|
|
'product_id': line.product_id and line.product_id.id or False,
|
|
'qty_return': line.qty_return or 0.0,
|
|
'uom_id': line.uom_id and line.uom_id.id or False,
|
|
})
|
|
return res
|
|
|
|
def return_product(self):
|
|
picking_id = self.env['stock.picking'].create({
|
|
'picking_type_id': self.env.ref('stock.picking_type_in').id,
|
|
'partner_id': self.rma_id.partner_id.id,
|
|
'location_id': self.source_location_id.id,
|
|
'location_dest_id': self.destination_location_id.id,
|
|
'rma_id': self.rma_id.id,
|
|
|
|
})
|
|
|
|
new_move_id = self.env['stock.move'].create({
|
|
'name': _('New Move:') + self.product_id.display_name,
|
|
'product_id': self.product_id.id,
|
|
'product_uom_qty': self.qty_return,
|
|
'product_uom': self.uom_id.id,
|
|
'location_id': self.source_location_id.id,
|
|
'location_dest_id': self.destination_location_id.id,
|
|
'has_tracking': self.product_id.tracking,
|
|
'origin': self.rma_id.name,
|
|
'date': self.rma_id.date,
|
|
'picking_id': picking_id.id,
|
|
'picking_type_id': self.env.ref('stock.picking_type_in').id,
|
|
'group_id': self.order_id.procurement_group_id and
|
|
self.order_id.procurement_group_id.id or False
|
|
})
|
|
new_move_id._action_confirm()
|
|
picking_id.action_confirm()
|
|
|
|
move_line_id = self.env['stock.move.line'].create({
|
|
'move_id': new_move_id and new_move_id.id or False,
|
|
'product_id': new_move_id.product_id.id,
|
|
'product_uom_id': new_move_id.product_uom.id,
|
|
'date': new_move_id.date,
|
|
'location_id': new_move_id.location_id.id,
|
|
'location_dest_id': new_move_id.location_dest_id.id,
|
|
'product_uom_qty': new_move_id.product_uom_qty or 0.0,
|
|
})
|
|
|
|
self.rma_id.state = "rma_created"
|