mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
119 lines
4.4 KiB
Python
119 lines
4.4 KiB
Python
# Copyright 2020 ForgeFlow 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
|
|
|
|
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,
|
|
},
|
|
)
|
|
],
|
|
}
|
|
|
|
def action_repair_done(self):
|
|
res = super(
|
|
RepairOrder,
|
|
self.with_context(
|
|
force_refurbish_location_dest_id=self.location_dest_id.id,
|
|
to_refurbish=self.to_refurbish,
|
|
),
|
|
).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(
|
|
[
|
|
("scrap_location", "=", True),
|
|
("company_id", "in", [self.repair_id.company_id.id, False]),
|
|
],
|
|
limit=1,
|
|
)
|
|
.id
|
|
)
|
|
self.location_dest_id = scrap_location_id
|
|
return res
|