oca-warehouse/odoo-bringout-oca-stock-logistics-barcode-stock_barcodes/stock_barcodes/models/stock_quant.py
2025-08-29 15:43:06 +02:00

80 lines
2.7 KiB
Python

# Copyright 2023 Tecnativa - Sergio Teruel
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import models
MODEL_UPDATE_INVENTORY = ["wiz.stock.barcodes.read.inventory"]
class StockQuant(models.Model):
_name = "stock.quant"
_inherit = ["stock.quant", "barcodes.barcode_events_mixin"]
def action_barcode_inventory_quant_unlink(self):
self.with_context(inventory_mode=True).action_set_inventory_quantity_to_zero()
context = dict(self.env.context)
params = context.get("params", {})
res_model = params.get("model", False)
res_id = params.get("id", False)
if res_id and res_model in MODEL_UPDATE_INVENTORY:
wiz_id = self.env[params["model"]].browse(params["id"])
wiz_id._compute_count_inventory_quants()
wiz_id.send_bus_done(
"stock_barcodes_form_update",
"count_apply_inventory",
{"count": wiz_id.count_inventory_quants},
)
def _get_fields_to_edit(self):
return [
"location_id",
"product_id",
"product_uom_id",
"lot_id",
"package_id",
]
def action_barcode_inventory_quant_edit(self):
wiz_barcode_id = self.env.context.get("wiz_barcode_id", False)
wiz_barcode = self.env["wiz.stock.barcodes.read.inventory"].browse(
wiz_barcode_id
)
for quant in self:
# Try to assign fields with the same name between quant and the scan wizard
for fname in self._get_fields_to_edit():
wiz_barcode[fname] = quant[fname]
wiz_barcode.product_qty = quant.inventory_quantity
wiz_barcode.manual_entry = True
self.send_bus_done(
"stock_barcodes_scan",
"stock_barcodes_edit_manual",
{
"manual_entry": True,
},
)
def enable_current_operations(self):
self.send_bus_done(
"stock_barcodes_kanban_update",
"enable_operations",
{
"id": self.id,
},
)
def operation_quantities_rest(self):
self.write({"inventory_quantity": self.inventory_quantity - 1})
self.enable_current_operations()
def operation_quantities(self):
self.write({"inventory_quantity": self.inventory_quantity + 1})
self.enable_current_operations()
def action_apply_inventory(self):
res = super().action_apply_inventory()
self.send_bus_done(
"stock_barcodes_scan",
"actions_barcode",
{"apply_inventory": True},
)
return res