mirror of
https://github.com/ForgeFlow/stock-rma.git
synced 2025-01-21 12:57:49 +02:00
110 lines
3.5 KiB
Python
110 lines
3.5 KiB
Python
# Copyright 2022 ForgeFlow S.L.
|
|
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html)
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class RmaOrderLine(models.Model):
|
|
_inherit = "rma.order.line"
|
|
|
|
@api.depends(
|
|
"move_ids",
|
|
"move_ids.state",
|
|
"move_ids.is_rma_scrap",
|
|
"qty_scrap",
|
|
"scrap_policy",
|
|
"product_qty",
|
|
"scrap_ids",
|
|
"scrap_ids.state",
|
|
"scrap_ids.is_rma_scrap",
|
|
)
|
|
def _compute_qty_to_scrap(self):
|
|
for rec in self:
|
|
rec.qty_to_scrap = 0.0
|
|
if rec.scrap_policy == "ordered":
|
|
rec.qty_to_scrap = rec.product_qty - rec.qty_scrap
|
|
elif rec.scrap_policy == "received":
|
|
rec.qty_to_scrap = rec.qty_received - rec.qty_scrap
|
|
|
|
@api.depends(
|
|
"move_ids",
|
|
"move_ids.state",
|
|
"move_ids.is_rma_scrap",
|
|
"scrap_ids",
|
|
"scrap_ids.state",
|
|
"scrap_ids.is_rma_scrap",
|
|
)
|
|
def _compute_qty_in_scrap(self):
|
|
product_obj = self.env["uom.uom"]
|
|
for rec in self:
|
|
qty = 0.0
|
|
for move in self.scrap_ids.filtered(lambda m: m.state in ["draft"]):
|
|
qty += product_obj._compute_quantity(move.scrap_qty, rec.uom_id)
|
|
rec.qty_in_scrap = qty
|
|
|
|
@api.depends("scrap_ids", "scrap_ids.state", "scrap_ids.is_rma_scrap")
|
|
def _compute_qty_scrap(self):
|
|
product_obj = self.env["uom.uom"]
|
|
for rec in self:
|
|
qty = 0.0
|
|
for move in rec.move_ids.filtered(
|
|
lambda m: m.state in ["done"] and m.is_rma_scrap
|
|
):
|
|
qty += product_obj._compute_quantity(move.product_uom_qty, rec.uom_id)
|
|
rec.qty_scrap = qty
|
|
|
|
def _compute_scrap_count(self):
|
|
for line in self:
|
|
line.scrap_count = len(self.scrap_ids)
|
|
|
|
qty_to_scrap = fields.Float(
|
|
copy=False,
|
|
digits="Product Unit of Measure",
|
|
readonly=True,
|
|
compute="_compute_qty_to_scrap",
|
|
store=True,
|
|
)
|
|
qty_in_scrap = fields.Float(
|
|
copy=False,
|
|
digits="Product Unit of Measure",
|
|
readonly=True,
|
|
compute="_compute_qty_in_scrap",
|
|
store=True,
|
|
)
|
|
qty_scrap = fields.Float(
|
|
copy=False,
|
|
digits="Product Unit of Measure",
|
|
readonly=True,
|
|
compute="_compute_qty_scrap",
|
|
store=True,
|
|
)
|
|
scrap_policy = fields.Selection(
|
|
selection=[
|
|
("no", "Not required"),
|
|
("ordered", "Based on Ordered Quantities"),
|
|
("received", "Based on Received Quantities"),
|
|
],
|
|
default="no",
|
|
required=True,
|
|
readonly=False,
|
|
)
|
|
scrap_count = fields.Integer(compute="_compute_scrap_count", string="# Scraps")
|
|
scrap_ids = fields.One2many("stock.scrap", "rma_line_id")
|
|
|
|
@api.onchange("operation_id")
|
|
def _onchange_operation_id(self):
|
|
res = super(RmaOrderLine, self)._onchange_operation_id()
|
|
if self.operation_id:
|
|
self.scrap_policy = self.operation_id.scrap_policy or "no"
|
|
return res
|
|
|
|
def action_view_scrap_transfers(self):
|
|
action = self.env.ref("stock.action_stock_scrap")
|
|
result = action.sudo().read()[0]
|
|
if len(self.scrap_ids) > 1:
|
|
result["domain"] = [("id", "in", self.scrap_ids.ids)]
|
|
elif len(self.scrap_ids) == 1:
|
|
res = self.env.ref("stock.stock_scrap_form_view", False)
|
|
result["views"] = [(res and res.id or False, "form")]
|
|
result["res_id"] = self.scrap_ids.ids[0]
|
|
return result
|