CriptoMart/red-supermercados-coop#22 stock_inventory_product_exhausted: fix unlink quants from archived products
This commit is contained in:
parent
9d426ff176
commit
38d1bdec3f
1 changed files with 26 additions and 10 deletions
|
|
@ -44,7 +44,9 @@ class StockInventory(models.Model):
|
||||||
|
|
||||||
quants_to_create = []
|
quants_to_create = []
|
||||||
for location in locations:
|
for location in locations:
|
||||||
for product in products.filtered(lambda p: p.type == "product"):
|
for product in products.filtered(
|
||||||
|
lambda p: p.type == "product" and p.active
|
||||||
|
):
|
||||||
if (product.id, location.id) not in existing_combinations:
|
if (product.id, location.id) not in existing_combinations:
|
||||||
_logger.debug(
|
_logger.debug(
|
||||||
"Creating zero quant for product %s in location %s",
|
"Creating zero quant for product %s in location %s",
|
||||||
|
|
@ -103,14 +105,28 @@ class StockQuant(models.Model):
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _unlink_zero_quants(self):
|
def _unlink_zero_quants(self):
|
||||||
"""Prevent automatic unlinking of zero quants.
|
"""Override to only unlink zero quants for archived products.
|
||||||
|
|
||||||
This method overrides the default behavior to prevent
|
This method modifies the default behavior to preserve zero quants
|
||||||
zero quants from being automatically removed.
|
for active products while still removing them for archived products.
|
||||||
This may need review to ensure it doesn't conflict
|
This is useful when using the 'Include Exhausted Products' feature.
|
||||||
with standard Odoo behavior.
|
|
||||||
"""
|
"""
|
||||||
if self.product_tmpl_id.active:
|
precision_digits = max(
|
||||||
_logger.debug("Preventing automatic unlinking of zero quants")
|
6, self.sudo().env.ref("product.decimal_product_uom").digits * 2
|
||||||
else:
|
)
|
||||||
super()._unlink_zero_quants()
|
# Use a select instead of ORM search for UoM robustness.
|
||||||
|
# Join with product_product and product_template to check if product is active
|
||||||
|
query = """SELECT sq.id FROM stock_quant sq
|
||||||
|
INNER JOIN product_product pp ON sq.product_id = pp.id
|
||||||
|
INNER JOIN product_template pt ON pp.product_tmpl_id = pt.id
|
||||||
|
WHERE (round(sq.quantity::numeric, %s) = 0 OR sq.quantity IS NULL)
|
||||||
|
AND round(sq.reserved_quantity::numeric, %s) = 0
|
||||||
|
AND (round(sq.inventory_quantity::numeric, %s) = 0 OR sq.inventory_quantity IS NULL)
|
||||||
|
AND sq.user_id IS NULL
|
||||||
|
AND (pp.active = false OR pt.active = false);"""
|
||||||
|
params = (precision_digits, precision_digits, precision_digits)
|
||||||
|
self.env.cr.execute(query, params)
|
||||||
|
quant_ids = self.env["stock.quant"].browse(
|
||||||
|
[quant["id"] for quant in self.env.cr.dictfetchall()]
|
||||||
|
)
|
||||||
|
quant_ids.sudo().unlink()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue