[ Fix ] UOM Conversion fix (#14768)

* increase precision for conversion value

* inverse the conversion data

* update uom data

* rectify conversion logic according to inversion of values

* rectify test case for uom conversion

* patch improv to correct conversion data
This commit is contained in:
Zarrar 2018-07-01 16:45:53 +05:30 committed by Nabin Hait
parent 4dc5721ba5
commit dfe897b888
7 changed files with 268 additions and 252 deletions

View File

@ -520,7 +520,7 @@ erpnext.patches.v11_0.move_leave_approvers_from_employee #13-06-2018
erpnext.patches.v11_0.update_department_lft_rgt erpnext.patches.v11_0.update_department_lft_rgt
erpnext.patches.v11_0.add_default_email_template_for_leave erpnext.patches.v11_0.add_default_email_template_for_leave
erpnext.patches.v11_0.set_default_email_template_in_hr #08-06-2018 erpnext.patches.v11_0.set_default_email_template_in_hr #08-06-2018
erpnext.patches.v11_0.uom_conversion_data erpnext.patches.v11_0.uom_conversion_data #30-06-2018
erpnext.patches.v10_0.taxes_issue_with_pos erpnext.patches.v10_0.taxes_issue_with_pos
erpnext.patches.v11_0.update_account_type_in_party_type erpnext.patches.v11_0.update_account_type_in_party_type
erpnext.patches.v10_1.transfer_subscription_to_auto_repeat erpnext.patches.v10_1.transfer_subscription_to_auto_repeat

View File

@ -9,3 +9,13 @@ def execute():
if not frappe.db.a_row_exists("UOM Conversion Factor"): if not frappe.db.a_row_exists("UOM Conversion Factor"):
add_uom_data() add_uom_data()
else:
# delete conversion data and insert again
frappe.db.sql("delete from `tabUOM Conversion Factor`")
try:
frappe.delete_doc('UOM', 'Hundredweight')
frappe.delete_doc('UOM', 'Pound Cubic Yard')
except frappe.LinkExistsError:
pass
add_uom_data()

View File

@ -163,7 +163,7 @@
"length": 0, "length": 0,
"no_copy": 0, "no_copy": 0,
"permlevel": 0, "permlevel": 0,
"precision": "", "precision": "9",
"print_hide": 0, "print_hide": 0,
"print_hide_if_no_value": 0, "print_hide_if_no_value": 0,
"read_only": 0, "read_only": 0,
@ -186,7 +186,7 @@
"issingle": 0, "issingle": 0,
"istable": 0, "istable": 0,
"max_attachments": 0, "max_attachments": 0,
"modified": "2018-06-05 12:50:02.648100", "modified": "2018-06-29 15:35:34.580831",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Setup", "module": "Setup",
"name": "UOM Conversion Factor", "name": "UOM Conversion Factor",
@ -220,5 +220,6 @@
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC", "sort_order": "DESC",
"track_changes": 1, "track_changes": 1,
"track_seen": 0 "track_seen": 0,
"track_views": 0
} }

File diff suppressed because it is too large Load Diff

View File

@ -261,7 +261,11 @@
"must_be_whole_number": 0 "must_be_whole_number": 0
}, },
{ {
"uom_name": "Hundredweight", "uom_name": "Hundredweight (UK)",
"must_be_whole_number": 0
},
{
"uom_name": "Hundredweight (US)",
"must_be_whole_number": 0 "must_be_whole_number": 0
}, },
{ {
@ -789,7 +793,7 @@
"must_be_whole_number": 0 "must_be_whole_number": 0
}, },
{ {
"uom_name": "Pound Cubic Yard", "uom_name": "Pound/Cubic Yard",
"must_be_whole_number": 0 "must_be_whole_number": 0
}, },
{ {

View File

@ -934,10 +934,11 @@ def get_uom_conv_factor(uom, stock_uom):
for d in uom_details: for d in uom_details:
if d.from_uom == stock_uom and d.to_uom == uom: if d.from_uom == stock_uom and d.to_uom == uom:
value = d.value
elif d.from_uom == uom and d.to_uom == stock_uom:
value = 1/flt(d.value) value = 1/flt(d.value)
else: elif d.from_uom == uom and d.to_uom == stock_uom:
value = d.value
if not value:
uom_stock = frappe.db.get_value("UOM Conversion Factor", {"to_uom": stock_uom}, ["from_uom", "value"], as_dict=1) uom_stock = frappe.db.get_value("UOM Conversion Factor", {"to_uom": stock_uom}, ["from_uom", "value"], as_dict=1)
uom_row = frappe.db.get_value("UOM Conversion Factor", {"to_uom": uom}, ["from_uom", "value"], as_dict=1) uom_row = frappe.db.get_value("UOM Conversion Factor", {"to_uom": uom}, ["from_uom", "value"], as_dict=1)

View File

@ -255,9 +255,9 @@ class TestItem(unittest.TestCase):
d.conversion_factor = value d.conversion_factor = value
self.assertEqual(item_doc.uoms[0].uom, "Carat") self.assertEqual(item_doc.uoms[0].uom, "Carat")
self.assertEqual(item_doc.uoms[0].conversion_factor, 5) self.assertEqual(item_doc.uoms[0].conversion_factor, 0.2)
self.assertEqual(item_doc.uoms[1].uom, "Kg") self.assertEqual(item_doc.uoms[1].uom, "Kg")
self.assertEqual(item_doc.uoms[1].conversion_factor, 0.001) self.assertEqual(item_doc.uoms[1].conversion_factor, 1000)
def test_item_variant_by_manufacturer(self): def test_item_variant_by_manufacturer(self):
fields = [{'field_name': 'description'}, {'field_name': 'variant_based_on'}] fields = [{'field_name': 'description'}, {'field_name': 'variant_based_on'}]