mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
79 lines
3.0 KiB
Python
79 lines
3.0 KiB
Python
# Copyright 2019 ForgeFlow S.L.
|
|
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
|
|
|
|
|
from odoo import _, fields
|
|
from odoo.exceptions import UserError
|
|
from odoo.tools.float_utils import float_compare
|
|
|
|
from odoo.addons.stock.models.stock_quant import StockQuant
|
|
|
|
|
|
def post_load_hook():
|
|
def _apply_inventory_discrepancy(self):
|
|
"""Override method to avoid inline group validation"""
|
|
move_vals = []
|
|
# 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.")
|
|
)
|
|
# Allow to write last_inventory_date on stock.location
|
|
self = self.sudo()
|
|
# END HOOK
|
|
for quant in self:
|
|
# Create and validate a move so that the
|
|
# quant matches its `inventory_quantity`.
|
|
if (
|
|
float_compare(
|
|
quant.inventory_diff_quantity,
|
|
0,
|
|
precision_rounding=quant.product_uom_id.rounding,
|
|
)
|
|
> 0
|
|
):
|
|
move_vals.append(
|
|
quant._get_inventory_move_values(
|
|
quant.inventory_diff_quantity,
|
|
quant.product_id.with_company(
|
|
quant.company_id
|
|
).property_stock_inventory,
|
|
quant.location_id,
|
|
package_dest_id=quant.package_id,
|
|
)
|
|
)
|
|
else:
|
|
move_vals.append(
|
|
quant._get_inventory_move_values(
|
|
-quant.inventory_diff_quantity,
|
|
quant.location_id,
|
|
quant.product_id.with_company(
|
|
quant.company_id
|
|
).property_stock_inventory,
|
|
package_id=quant.package_id,
|
|
)
|
|
)
|
|
moves = (
|
|
self.env["stock.move"].with_context(inventory_mode=False).create(move_vals)
|
|
)
|
|
moves._action_done()
|
|
self.location_id.write({"last_inventory_date": fields.Date.today()})
|
|
date_by_location = {
|
|
loc: loc._get_next_inventory_date() for loc in self.mapped("location_id")
|
|
}
|
|
for quant in self:
|
|
quant.inventory_date = date_by_location[quant.location_id]
|
|
self.write({"inventory_quantity": 0, "user_id": False})
|
|
self.write({"inventory_diff_quantity": 0})
|
|
|
|
StockQuant._apply_inventory = _apply_inventory_discrepancy
|