mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
[MIG] stock_inventory_discrepancy: Migration to 13.0
This commit is contained in:
79
stock_inventory_discrepancy/hooks.py
Normal file
79
stock_inventory_discrepancy/hooks.py
Normal file
@@ -0,0 +1,79 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user