Files
manufacture/repair_refurbish/models/repair.py

95 lines
3.9 KiB
Python

# Copyright 2017-18 Eficent Business and IT Consulting Services S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
class RepairOrder(models.Model):
_inherit = 'repair.order'
to_refurbish = fields.Boolean()
location_dest_id = fields.Many2one(
string='Delivery Location', comodel_name='stock.location')
refurbish_location_dest_id = fields.Many2one(
string='Refurbished Delivery Location', comodel_name='stock.location')
refurbish_product_id = fields.Many2one(
string='Refurbished product', comodel_name='product.product')
refurbish_lot_id = fields.Many2one(
string='Refurbished Lot', comodel_name='stock.production.lot')
refurbish_move_id = fields.Many2one(
string='Refurbished Inventory Move', comodel_name='stock.move')
@api.onchange('product_id')
def onchange_product_id(self):
res = super().onchange_product_id()
self.to_refurbish = True if \
self.product_id.refurbish_product_id else False
return res
@api.onchange('to_refurbish', 'product_id')
def _onchange_to_refurbish(self):
if self.to_refurbish:
self.refurbish_product_id = self.product_id.refurbish_product_id
self.refurbish_location_dest_id = self.location_dest_id
self.location_dest_id = self.product_id.property_stock_refurbish
else:
self.location_dest_id = self.refurbish_location_dest_id
self.refurbish_product_id = False
self.refurbish_location_dest_id = False
@api.multi
def _get_refurbish_stock_move_dict(self):
return {
'name': self.name,
'product_id': self.refurbish_product_id.id,
'product_uom': self.product_uom.id or
self.refurbish_product_id.uom_id.id,
'product_uom_qty': self.product_qty,
'partner_id': self.address_id and
self.address_id.id or False,
'location_id': self.location_dest_id.id,
'location_dest_id': self.refurbish_location_dest_id.id,
'move_line_ids': [(0, 0, {
'product_id': self.refurbish_product_id.id,
'lot_id': self.refurbish_lot_id.id,
'product_uom_qty': self.product_qty,
'product_uom_id': self.product_uom.id or
self.refurbish_product_id.uom_id.id,
'qty_done': self.product_qty,
'package_id': False,
'result_package_id': False,
'location_id': self.location_dest_id.id,
'location_dest_id': self.refurbish_location_dest_id.id})]}
@api.multi
def action_repair_done(self):
res = super(RepairOrder, self.with_context(
force_refurbish_location_dest_id=self.location_dest_id.id
)).action_repair_done()
for repair in self:
if repair.to_refurbish:
move = self.env['stock.move'].create(
repair._get_refurbish_stock_move_dict())
move.quantity_done = repair.product_qty
move._action_done()
repair.refurbish_move_id = move.id
return res
class RepairLine(models.Model):
_inherit = 'repair.line'
@api.onchange('type', 'repair_id')
def onchange_operation_type(self):
res = super(RepairLine, self).onchange_operation_type()
context = self.env.context
if (self.type == 'add' and 'to_refurbish' in context and
context['to_refurbish']):
self.location_dest_id = context['refurbish_location_dest_id']
elif (self.type == 'add' and 'to_refurbish' in context and not
context['to_refurbish']):
scrap_location_id = self.env['stock.location'].search([
('usage', '=', 'customer')], limit=1)
self.location_dest_id = scrap_location_id
return res