mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-12 06:01:46 +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.meta import get_field_precision
|
||||
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
|
||||
|
||||
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")
|
||||
valuation_rate = (
|
||||
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))
|
||||
).run()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user