[MIG] stock_inventory_discrepancy: Migration to 13.0

This commit is contained in:
hveficent
2020-01-07 14:03:21 +01:00
committed by Mateu Griful
parent bc1b2c267f
commit 2edeafa057
14 changed files with 282 additions and 61 deletions

View 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)