Merge branch 'develop' into fix-return-pr-serial-no
This commit is contained in:
commit
50dc0c18eb
@ -6,7 +6,7 @@ import frappe
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.model.mapper import get_mapped_doc
|
from frappe.model.mapper import get_mapped_doc
|
||||||
from frappe.utils import cint, cstr, flt
|
from frappe.utils import cint, cstr, flt, get_number_format_info
|
||||||
|
|
||||||
from erpnext.stock.doctype.quality_inspection_template.quality_inspection_template import (
|
from erpnext.stock.doctype.quality_inspection_template.quality_inspection_template import (
|
||||||
get_template_details,
|
get_template_details,
|
||||||
@ -156,7 +156,9 @@ class QualityInspection(Document):
|
|||||||
for i in range(1, 11):
|
for i in range(1, 11):
|
||||||
reading_value = reading.get("reading_" + str(i))
|
reading_value = reading.get("reading_" + str(i))
|
||||||
if reading_value is not None and reading_value.strip():
|
if reading_value is not None and reading_value.strip():
|
||||||
result = flt(reading.get("min_value")) <= flt(reading_value) <= flt(reading.get("max_value"))
|
result = (
|
||||||
|
flt(reading.get("min_value")) <= parse_float(reading_value) <= flt(reading.get("max_value"))
|
||||||
|
)
|
||||||
if not result:
|
if not result:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
@ -196,7 +198,7 @@ class QualityInspection(Document):
|
|||||||
# numeric readings
|
# numeric readings
|
||||||
for i in range(1, 11):
|
for i in range(1, 11):
|
||||||
field = "reading_" + str(i)
|
field = "reading_" + str(i)
|
||||||
data[field] = flt(reading.get(field))
|
data[field] = parse_float(reading.get(field))
|
||||||
data["mean"] = self.calculate_mean(reading)
|
data["mean"] = self.calculate_mean(reading)
|
||||||
|
|
||||||
return data
|
return data
|
||||||
@ -210,7 +212,7 @@ class QualityInspection(Document):
|
|||||||
for i in range(1, 11):
|
for i in range(1, 11):
|
||||||
reading_value = reading.get("reading_" + str(i))
|
reading_value = reading.get("reading_" + str(i))
|
||||||
if reading_value is not None and reading_value.strip():
|
if reading_value is not None and reading_value.strip():
|
||||||
readings_list.append(flt(reading_value))
|
readings_list.append(parse_float(reading_value))
|
||||||
|
|
||||||
actual_mean = mean(readings_list) if readings_list else 0
|
actual_mean = mean(readings_list) if readings_list else 0
|
||||||
return actual_mean
|
return actual_mean
|
||||||
@ -324,3 +326,19 @@ def make_quality_inspection(source_name, target_doc=None):
|
|||||||
)
|
)
|
||||||
|
|
||||||
return doc
|
return doc
|
||||||
|
|
||||||
|
|
||||||
|
def parse_float(num: str) -> float:
|
||||||
|
"""Since reading_# fields are `Data` field they might contain number which
|
||||||
|
is representation in user's prefered number format instead of machine
|
||||||
|
readable format. This function converts them to machine readable format."""
|
||||||
|
|
||||||
|
number_format = frappe.db.get_default("number_format") or "#,###.##"
|
||||||
|
decimal_str, comma_str, _number_format_precision = get_number_format_info(number_format)
|
||||||
|
|
||||||
|
if decimal_str == "," and comma_str == ".":
|
||||||
|
num = num.replace(",", "#$")
|
||||||
|
num = num.replace(".", ",")
|
||||||
|
num = num.replace("#$", ".")
|
||||||
|
|
||||||
|
return flt(num)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# See license.txt
|
# See license.txt
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe.tests.utils import FrappeTestCase
|
from frappe.tests.utils import FrappeTestCase, change_settings
|
||||||
from frappe.utils import nowdate
|
from frappe.utils import nowdate
|
||||||
|
|
||||||
from erpnext.controllers.stock_controller import (
|
from erpnext.controllers.stock_controller import (
|
||||||
@ -216,6 +216,40 @@ class TestQualityInspection(FrappeTestCase):
|
|||||||
qa.save()
|
qa.save()
|
||||||
self.assertEqual(qa.status, "Accepted")
|
self.assertEqual(qa.status, "Accepted")
|
||||||
|
|
||||||
|
@change_settings("System Settings", {"number_format": "#.###,##"})
|
||||||
|
def test_diff_number_format(self):
|
||||||
|
self.assertEqual(frappe.db.get_default("number_format"), "#.###,##") # sanity check
|
||||||
|
|
||||||
|
# Test QI based on acceptance values (Non formula)
|
||||||
|
dn = create_delivery_note(item_code="_Test Item with QA", do_not_submit=True)
|
||||||
|
readings = [
|
||||||
|
{
|
||||||
|
"specification": "Iron Content", # numeric reading
|
||||||
|
"min_value": 60,
|
||||||
|
"max_value": 100,
|
||||||
|
"reading_1": "70,000",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"specification": "Iron Content", # numeric reading
|
||||||
|
"min_value": 60,
|
||||||
|
"max_value": 100,
|
||||||
|
"reading_1": "1.100,00",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
qa = create_quality_inspection(
|
||||||
|
reference_type="Delivery Note", reference_name=dn.name, readings=readings, do_not_save=True
|
||||||
|
)
|
||||||
|
|
||||||
|
qa.save()
|
||||||
|
|
||||||
|
# status must be auto set as per formula
|
||||||
|
self.assertEqual(qa.readings[0].status, "Accepted")
|
||||||
|
self.assertEqual(qa.readings[1].status, "Rejected")
|
||||||
|
|
||||||
|
qa.delete()
|
||||||
|
dn.delete()
|
||||||
|
|
||||||
|
|
||||||
def create_quality_inspection(**args):
|
def create_quality_inspection(**args):
|
||||||
args = frappe._dict(args)
|
args = frappe._dict(args)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user