mirror of
https://github.com/ForgeFlow/stock-rma.git
synced 2025-01-21 12:57:49 +02:00
[ADD] rma_put_away
This commit is contained in:
committed by
DavidJForgeFlow
parent
48b5cd7e64
commit
ce71a05b8a
119
rma_put_away/models/rma_order_line.py
Normal file
119
rma_put_away/models/rma_order_line.py
Normal file
@@ -0,0 +1,119 @@
|
||||
# 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_put_away",
|
||||
"qty_put_away",
|
||||
"put_away_policy",
|
||||
"product_qty",
|
||||
)
|
||||
def _compute_qty_to_put_away(self):
|
||||
for rec in self:
|
||||
rec.qty_to_put_away = 0.0
|
||||
if rec.put_away_policy == "ordered":
|
||||
rec.qty_to_put_away = rec.product_qty - rec.qty_put_away
|
||||
elif rec.put_away_policy == "received":
|
||||
rec.qty_to_put_away = rec.qty_received - rec.qty_put_away
|
||||
|
||||
@api.depends("move_ids", "move_ids.state", "move_ids.is_rma_put_away")
|
||||
def _compute_qty_in_put_away(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 ["draft", "confirmed", "assigned"]
|
||||
and m.is_rma_put_away
|
||||
):
|
||||
qty += product_obj._compute_quantity(move.product_uom_qty, rec.uom_id)
|
||||
rec.qty_in_put_away = qty
|
||||
|
||||
@api.depends("move_ids", "move_ids.state", "move_ids.is_rma_put_away")
|
||||
def _compute_qty_put_away(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_put_away
|
||||
):
|
||||
qty += product_obj._compute_quantity(move.product_uom_qty, rec.uom_id)
|
||||
rec.qty_put_away = qty
|
||||
|
||||
def _compute_put_away_count(self):
|
||||
for line in self:
|
||||
pickings = self.move_ids.filtered(lambda m: m.is_rma_put_away).mapped(
|
||||
"picking_id"
|
||||
)
|
||||
line.put_away_count = len(pickings)
|
||||
|
||||
qty_to_put_away = fields.Float(
|
||||
string="Qty To Put Away",
|
||||
copy=False,
|
||||
digits="Product Unit of Measure",
|
||||
readonly=True,
|
||||
compute="_compute_qty_to_put_away",
|
||||
store=True,
|
||||
)
|
||||
qty_in_put_away = fields.Float(
|
||||
string="Qty In Put Away",
|
||||
copy=False,
|
||||
digits="Product Unit of Measure",
|
||||
readonly=True,
|
||||
compute="_compute_qty_in_put_away",
|
||||
store=True,
|
||||
)
|
||||
qty_put_away = fields.Float(
|
||||
string="Qty Put Away",
|
||||
copy=False,
|
||||
digits="Product Unit of Measure",
|
||||
readonly=True,
|
||||
compute="_compute_qty_put_away",
|
||||
store=True,
|
||||
)
|
||||
put_away_policy = fields.Selection(
|
||||
selection=[
|
||||
("no", "Not required"),
|
||||
("ordered", "Based on Ordered Quantities"),
|
||||
("received", "Based on Received Quantities"),
|
||||
],
|
||||
string="Put Away Policy",
|
||||
default="no",
|
||||
required=True,
|
||||
readonly=False,
|
||||
)
|
||||
put_away_count = fields.Integer(
|
||||
compute="_compute_put_away_count", string="# Put Aways"
|
||||
)
|
||||
|
||||
@api.onchange("operation_id")
|
||||
def _onchange_operation_id(self):
|
||||
res = super(RmaOrderLine, self)._onchange_operation_id()
|
||||
if self.operation_id:
|
||||
self.put_away_policy = self.operation_id.put_away_policy or "no"
|
||||
return res
|
||||
|
||||
def action_view_put_away_transfers(self):
|
||||
action = self.env.ref("stock.action_picking_tree_all")
|
||||
result = action.sudo().read()[0]
|
||||
pickings = self.env["stock.picking"]
|
||||
for line in self:
|
||||
if line.lot_id:
|
||||
line.move_ids.lot_ids |= line.lot_id
|
||||
line.move_ids.move_line_ids.lot_id = line.lot_id
|
||||
pickings |= line.move_ids.filtered(lambda m: m.is_rma_put_away).mapped(
|
||||
"picking_id"
|
||||
)
|
||||
# choose the view_mode accordingly
|
||||
if len(pickings) != 1:
|
||||
result["domain"] = "[('id', 'in', " + str(pickings.ids) + ")]"
|
||||
elif len(pickings) == 1:
|
||||
res = self.env.ref("stock.view_picking_form", False)
|
||||
result["views"] = [(res and res.id or False, "form")]
|
||||
result["res_id"] = pickings.ids[0]
|
||||
return result
|
||||
Reference in New Issue
Block a user