mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
80 lines
2.9 KiB
Python
80 lines
2.9 KiB
Python
# Copyright 2019 Eficent Business and IT Consulting Services S.L.
|
|
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
|
|
|
|
|
from odoo import _
|
|
from odoo.exceptions import UserError
|
|
from odoo.tools.float_utils import float_compare
|
|
|
|
from odoo.addons.stock.models.stock_inventory import Inventory
|
|
|
|
|
|
def post_load_hook():
|
|
def action_validate_discrepancy(self):
|
|
"""Override method to avoid inline group validation"""
|
|
if not self.exists():
|
|
return
|
|
self.ensure_one()
|
|
# START HOOK: - Allow specific group to validate inventory
|
|
# - Allow validate on pending status
|
|
if (
|
|
not self.user_has_groups("stock.group_stock_manager")
|
|
and not self.user_has_groups(
|
|
"stock_inventory_discrepancy.group_stock_inventory_validation"
|
|
)
|
|
and not self.user_has_groups(
|
|
"stock_inventory_discrepancy.group_stock_inventory_validation_always"
|
|
)
|
|
):
|
|
raise UserError(
|
|
_("Only a stock manager can validate an inventory adjustment.")
|
|
)
|
|
if self.state not in ["confirm", "pending"]:
|
|
raise UserError(
|
|
_(
|
|
"You can't validate the inventory '%s', maybe this inventory "
|
|
+ "has been already validated or isn't ready."
|
|
)
|
|
% (self.name)
|
|
)
|
|
# END HOOK
|
|
inventory_lines = self.line_ids.filtered(
|
|
lambda l: l.product_id.tracking in ["lot", "serial"]
|
|
and not l.prod_lot_id
|
|
and l.theoretical_qty != l.product_qty
|
|
)
|
|
lines = self.line_ids.filtered(
|
|
lambda l: float_compare(
|
|
l.product_qty, 1, precision_rounding=l.product_uom_id.rounding
|
|
)
|
|
> 0
|
|
and l.product_id.tracking == "serial"
|
|
and l.prod_lot_id
|
|
)
|
|
if inventory_lines and not lines:
|
|
wiz_lines = [
|
|
(0, 0, {"product_id": product.id, "tracking": product.tracking})
|
|
for product in inventory_lines.mapped("product_id")
|
|
]
|
|
wiz = self.env["stock.track.confirmation"].create(
|
|
{"inventory_id": self.id, "tracking_line_ids": wiz_lines}
|
|
)
|
|
return {
|
|
"name": _("Tracked Products in Inventory Adjustment"),
|
|
"type": "ir.actions.act_window",
|
|
"view_mode": "form",
|
|
"views": [(False, "form")],
|
|
"res_model": "stock.track.confirmation",
|
|
"target": "new",
|
|
"res_id": wiz.id,
|
|
}
|
|
self._action_done()
|
|
self.line_ids._check_company()
|
|
self._check_company()
|
|
return True
|
|
|
|
if not hasattr(Inventory, "action_validate_original"):
|
|
Inventory.action_validate_original = Inventory.action_validate
|
|
|
|
Inventory._patch_method("action_validate", action_validate_discrepancy)
|