mirror of
https://github.com/frappe/erpnext.git
synced 2026-09-03 16:40:19 +00:00
fix(stock): guard non-stock valuation-rate division against a zero divisor (Postgres)
The non-stock-item valuation rate divides Sum(base_net_amount) by Sum(qty * conversion_factor) over Purchase Invoice Items. A line with qty 0 zeroes the divisor. MariaDB returns NULL for x/0 (the caller maps it via `or 0.0`); PostgreSQL raises `division by zero` and aborts. Wrap the divisor in NullIf(Sum(qty * conversion_factor), 0): unchanged on MariaDB, valid on Postgres.
This commit is contained in:
@@ -11,7 +11,7 @@ from frappe.model import child_table_fields, default_fields
|
|||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.model.meta import get_field_precision
|
from frappe.model.meta import get_field_precision
|
||||||
from frappe.model.utils import get_fetch_values
|
from frappe.model.utils import get_fetch_values
|
||||||
from frappe.query_builder.functions import IfNull, Sum
|
from frappe.query_builder.functions import IfNull, NullIf, Sum
|
||||||
from frappe.utils import add_days, add_months, cint, cstr, flt, get_link_to_form, getdate, parse_json
|
from frappe.utils import add_days, add_months, cint, cstr, flt, get_link_to_form, getdate, parse_json
|
||||||
|
|
||||||
import erpnext
|
import erpnext
|
||||||
@@ -1734,7 +1734,7 @@ def get_valuation_rate(item_code: str, company: str, warehouse: str | None = Non
|
|||||||
pi_item = frappe.qb.DocType("Purchase Invoice Item")
|
pi_item = frappe.qb.DocType("Purchase Invoice Item")
|
||||||
valuation_rate = (
|
valuation_rate = (
|
||||||
frappe.qb.from_(pi_item)
|
frappe.qb.from_(pi_item)
|
||||||
.select(Sum(pi_item.base_net_amount) / Sum(pi_item.qty * pi_item.conversion_factor))
|
.select(Sum(pi_item.base_net_amount) / NullIf(Sum(pi_item.qty * pi_item.conversion_factor), 0))
|
||||||
.where((pi_item.docstatus == 1) & (pi_item.item_code == item_code))
|
.where((pi_item.docstatus == 1) & (pi_item.item_code == item_code))
|
||||||
).run()
|
).run()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user