Files
stock-logistics-warehouse/stock_inventory/models/stock_quant.py

75 lines
2.6 KiB
Python

from odoo import _, api, fields, models
class StockQuant(models.Model):
_inherit = "stock.quant"
to_do = fields.Boolean(default=False)
stock_inventory_ids = fields.Many2many(
"stock.inventory",
"stock_inventory_stock_quant_rel",
string="Stock Inventories",
copy=False,
)
current_inventory_id = fields.Many2one(
"stock.inventory",
string="Current Inventory",
store=True,
)
def _apply_inventory(self):
res = super()._apply_inventory()
record_moves = self.env["stock.move.line"]
adjustment = self.env["stock.inventory"].browse()
for rec in self:
adjustment = rec.current_inventory_id
moves = record_moves.search(
[
("product_id", "=", rec.product_id.id),
("lot_id", "=", rec.lot_id.id),
"|",
("location_id", "=", rec.location_id.id),
("location_dest_id", "=", rec.location_id.id),
],
order="create_date asc",
).filtered(
lambda x: not x.company_id.id
or not rec.company_id.id
or rec.company_id.id == x.company_id.id
)
if len(moves) == 0:
raise ValueError(_("No move lines have been created"))
move = moves[len(moves) - 1]
adjustment.stock_move_ids |= move
reference = move.reference
if adjustment.name and move.reference:
reference = adjustment.name + ": " + move.reference
elif adjustment.name:
reference = adjustment.name
move.write(
{
"inventory_adjustment_id": adjustment.id,
"reference": reference,
}
)
rec.to_do = False
rec.current_inventory_id = False
if adjustment and self.env.company.stock_inventory_auto_complete:
adjustment.action_auto_state_to_done()
return res
def _get_inventory_fields_write(self):
return super()._get_inventory_fields_write() + ["to_do"]
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
if self.env.context.get(
"active_model", False
) == "stock.inventory" and self.env.context.get("active_id", False):
self.env["stock.inventory"].browse(
self.env.context.get("active_id")
).refresh_stock_quant_ids()
return res