From 59af3a0296878e0702e873b7be4851885b858691 Mon Sep 17 00:00:00 2001 From: Shreya Shah Date: Wed, 6 Jun 2018 09:44:46 +0530 Subject: [PATCH] [Enhancement] UOM Conversion Factors (#13853) * new doctype UOM category * new doctype UOM Conversion Factor * bootstrap json data for uom conversions * uom conversion in item * Patch to add all conversions and categories * Fetch conversions multi-way * fix codacy * Rebase with develop * [minor] Fix * Add a test case * Improvise as per review comment * Add json data for UOMs * Commonify function and call from patch * Update uom_conversion_data.py --- erpnext/patches.txt | 1 + erpnext/patches/v11_0/uom_conversion_data.py | 11 + .../doctype/uom_conversion_factor/__init__.py | 0 .../test_uom_conversion_factor.js | 23 + .../test_uom_conversion_factor.py | 9 + .../uom_conversion_factor.js | 8 + .../uom_conversion_factor.json | 224 +++ .../uom_conversion_factor.py | 9 + .../data/uom_conversion_data.json | 1575 +++++++++++++++++ erpnext/setup/setup_wizard/data/uom_data.json | 952 ++++++++++ .../operations/install_fixtures.py | 40 +- erpnext/stock/doctype/item/item.js | 20 + erpnext/stock/doctype/item/item.py | 31 + erpnext/stock/doctype/item/test_item.py | 22 +- .../stock/doctype/uom_category/__init__.py | 0 .../doctype/uom_category/test_uom_category.js | 23 + .../doctype/uom_category/test_uom_category.py | 9 + .../doctype/uom_category/uom_category.js | 8 + .../doctype/uom_category/uom_category.json | 93 + .../doctype/uom_category/uom_category.py | 9 + 20 files changed, 3050 insertions(+), 17 deletions(-) create mode 100644 erpnext/patches/v11_0/uom_conversion_data.py create mode 100644 erpnext/setup/doctype/uom_conversion_factor/__init__.py create mode 100644 erpnext/setup/doctype/uom_conversion_factor/test_uom_conversion_factor.js create mode 100644 erpnext/setup/doctype/uom_conversion_factor/test_uom_conversion_factor.py create mode 100644 erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.js create mode 100644 erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.json create mode 100644 erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.py create mode 100644 erpnext/setup/setup_wizard/data/uom_conversion_data.json create mode 100644 erpnext/setup/setup_wizard/data/uom_data.json create mode 100644 erpnext/stock/doctype/uom_category/__init__.py create mode 100644 erpnext/stock/doctype/uom_category/test_uom_category.js create mode 100644 erpnext/stock/doctype/uom_category/test_uom_category.py create mode 100644 erpnext/stock/doctype/uom_category/uom_category.js create mode 100644 erpnext/stock/doctype/uom_category/uom_category.json create mode 100644 erpnext/stock/doctype/uom_category/uom_category.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index d68603e834..8e9de968dd 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -520,6 +520,7 @@ erpnext.patches.v11_0.move_leave_approvers_from_employee erpnext.patches.v11_0.update_department_lft_rgt erpnext.patches.v11_0.add_default_email_template_for_leave erpnext.patches.v11_0.set_default_email_template_in_hr +erpnext.patches.v11_0.uom_conversion_data erpnext.patches.v10_0.taxes_issue_with_pos erpnext.patches.v11_0.update_account_type_in_party_type erpnext.patches.v10_1.transfer_subscription_to_auto_repeat diff --git a/erpnext/patches/v11_0/uom_conversion_data.py b/erpnext/patches/v11_0/uom_conversion_data.py new file mode 100644 index 0000000000..41876d6e02 --- /dev/null +++ b/erpnext/patches/v11_0/uom_conversion_data.py @@ -0,0 +1,11 @@ +import frappe, json + +def execute(): + from erpnext.setup.setup_wizard.operations.install_fixtures import add_uom_data + + frappe.reload_doc("setup", "doctype", "UOM Conversion Factor") + frappe.reload_doc("setup", "doctype", "UOM") + frappe.reload_doc("stock", "doctype", "UOM Category") + + if not frappe.db.a_row_exists("UOM Conversion Factor"): + add_uom_data() diff --git a/erpnext/setup/doctype/uom_conversion_factor/__init__.py b/erpnext/setup/doctype/uom_conversion_factor/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/setup/doctype/uom_conversion_factor/test_uom_conversion_factor.js b/erpnext/setup/doctype/uom_conversion_factor/test_uom_conversion_factor.js new file mode 100644 index 0000000000..afcf74ccb4 --- /dev/null +++ b/erpnext/setup/doctype/uom_conversion_factor/test_uom_conversion_factor.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: UOM Conversion Factor", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new UOM Conversion Factor + () => frappe.tests.make('UOM Conversion Factor', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/setup/doctype/uom_conversion_factor/test_uom_conversion_factor.py b/erpnext/setup/doctype/uom_conversion_factor/test_uom_conversion_factor.py new file mode 100644 index 0000000000..04596efbca --- /dev/null +++ b/erpnext/setup/doctype/uom_conversion_factor/test_uom_conversion_factor.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import unittest + +class TestUOMConversionFactor(unittest.TestCase): + pass diff --git a/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.js b/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.js new file mode 100644 index 0000000000..e734d83500 --- /dev/null +++ b/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.js @@ -0,0 +1,8 @@ +// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('UOM Conversion Factor', { + refresh: function() { + + } +}); diff --git a/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.json b/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.json new file mode 100644 index 0000000000..294cd07aa3 --- /dev/null +++ b/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.json @@ -0,0 +1,224 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "UOM.#####", + "beta": 0, + "creation": "2018-04-30 17:37:02.347217", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "category", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Category", + "length": 0, + "no_copy": 0, + "options": "UOM Category", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_2", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "from_uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "From", + "length": 0, + "no_copy": 0, + "options": "UOM", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "to_uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 1, + "label": "To", + "length": 0, + "no_copy": 0, + "options": "UOM", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "value", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Value", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2018-06-05 12:50:02.648100", + "modified_by": "Administrator", + "module": "Setup", + "name": "UOM Conversion Factor", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.py b/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.py new file mode 100644 index 0000000000..3566c537c6 --- /dev/null +++ b/erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class UOMConversionFactor(Document): + pass diff --git a/erpnext/setup/setup_wizard/data/uom_conversion_data.json b/erpnext/setup/setup_wizard/data/uom_conversion_data.json new file mode 100644 index 0000000000..7e8ce1030f --- /dev/null +++ b/erpnext/setup/setup_wizard/data/uom_conversion_data.json @@ -0,0 +1,1575 @@ +[ + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Meter", + "abbr": "m", + "value": "1" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Barleycorn", + "value": "0.008467" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Calibre", + "abbr": "cal", + "value": "0.0254" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Cable Length (UK)", + "abbr": "cables", + "value": "182.88" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Cable Length (US)", + "abbr": "cables", + "value": "219.456" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Cable Length", + "abbr": "cables", + "value": "185.2" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Centimeter", + "abbr": "cm", + "value": "0.01" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Chain", + "abbr": "ch", + "value": "20.1168" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Decimeter", + "abbr": "dm", + "value": "0.1" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Ells (UK)", + "abbr": "ells", + "value": "0.875" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Ems(Pica)", + "abbr": "ems", + "value": "0.004233" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Fathom", + "abbr": "fm", + "value": "1.8288" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Foot", + "abbr": "ft", + "value": "0.3048" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Furlong", + "abbr": "fur", + "value": "201.168" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Hand", + "abbr": "hand", + "value": "0.1016" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Hectometer", + "abbr": "hm", + "value": "100" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Inch", + "abbr": "in", + "value": "0.0254" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Kilometer", + "abbr": "km", + "value": "1000" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Link", + "abbr": "li", + "value": "0.201168" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Micrometer", + "abbr": "µm", + "value": "0.000001" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Mile", + "abbr": "mi", + "value": "1609.344" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Mile (Nautical)", + "abbr": "nmi(NM)", + "value": "1852" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Millimeter", + "abbr": "mm", + "value": "0.001" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Nanometer", + "abbr": "nm", + "value": "0.000000001" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Rod", + "abbr": "rd", + "value": "5.02921" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Vara", + "abbr": "V", + "value": "0.835906" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Versta", + "value": "1066.8" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Yard", + "abbr": "yd", + "value": "0.9144" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Arshin", + "value": "0.7112" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Sazhen", + "value": "2.1336" + }, + { + "category": "Length", + "from_uom": "Meter", + "to_uom": "Medio Metro", + "abbr": "mediom", + "value": "0.5" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Square Meter", + "value": "1" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Centiarea", + "abbr": "CentArea", + "value": "1" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Area", + "abbr": "Area", + "value": "100" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Manzana", + "abbr": "Mz", + "value": "6987.388" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Caballeria", + "abbr": "Cbll", + "value": "447192.86" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Square Kilometer", + "value": "1000000" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Are", + "abbr": "a", + "value": "100" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Acre", + "abbr": "ac", + "value": "4046.856422" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Acre (US)", + "abbr": "ac", + "value": "4046.87261" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Hectare", + "abbr": "ha", + "value": "10000" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Square Yard", + "value": "0.83612736" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Square Foot", + "value": "0.09290304" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Square Inch", + "value": "0.00064516" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Square Centimeter", + "value": "0.0001" + }, + { + "category": "Area", + "from_uom": "Square Meter", + "to_uom": "Square Mile", + "value": "2589988.11" + }, + { + "category": "Speed", + "from_uom": "Meter/Second", + "to_uom": "Meter/Second", + "abbr": "m/s", + "value": "1" + }, + { + "category": "Speed", + "from_uom": "Meter/Second", + "to_uom": "Inch/Minute", + "abbr": "ipm", + "value": "0.000423333" + }, + { + "category": "Speed", + "from_uom": "Meter/Second", + "to_uom": "Foot/Minute", + "abbr": "fpm", + "value": "0.00508" + }, + { + "category": "Speed", + "from_uom": "Meter/Second", + "to_uom": "Inch/Second", + "abbr": "ips", + "value": "0.0254" + }, + { + "category": "Speed", + "from_uom": "Meter/Second", + "to_uom": "Kilometer/Hour", + "abbr": "km/h", + "value": "0.277777778" + }, + { + "category": "Speed", + "from_uom": "Meter/Second", + "to_uom": "Foot/Second", + "abbr": "fps", + "value": "0.3048" + }, + { + "category": "Speed", + "from_uom": "Meter/Second", + "to_uom": "Mile/Hour", + "abbr": "mph", + "value": "0.44704" + }, + { + "category": "Speed", + "from_uom": "Meter/Second", + "to_uom": "Knot", + "abbr": "kn", + "value": "0.514444" + }, + { + "category": "Speed", + "from_uom": "Meter/Second", + "to_uom": "Mile/Minute", + "abbr": "mpm", + "value": "26.8224" + }, + { + "category": "Speed", + "from_uom": "Meter/Second", + "to_uom": "Mile/Second", + "abbr": "mps", + "value": "1609.344" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Carat", + "abbr": "carat", + "value": "0.0002" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Cental", + "abbr": "cental", + "value": "45.359237" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Dram", + "abbr": "dr", + "value": "0.001771845" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Grain", + "abbr": "gr", + "value": "0.000065" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Gram", + "abbr": "g", + "value": "0.001" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Hundredweight", + "abbr": "cwt", + "value": "45.359237" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Quintal", + "abbr": "qq", + "value": "45.359237" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Kg", + "abbr": "kg", + "value": "1" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Microgram", + "value": "0.000000001" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Milligram", + "abbr": "mg", + "value": "0.000001" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Ounce", + "abbr": "oz", + "value": "0.02835" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Pood", + "abbr": "pood", + "value": "16.3805" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Pound", + "abbr": "lbm", + "value": "0.45359237" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Slug", + "abbr": "slug", + "value": "14.5939029" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Stone", + "abbr": "stone", + "value": "6.350293" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Tonne", + "abbr": "t", + "value": "1000" + }, + { + "category": "Mass", + "from_uom": "Kg", + "to_uom": "Kip", + "abbr": "kip", + "value": "453.59237" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Barrel(Beer)", + "abbr": "bbl", + "value": "117.3478" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Barrel (Oil)", + "abbr": "bbl", + "value": "158.987295" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Bushel (UK)", + "abbr": "bu", + "value": "36.36872" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Bushel (US Dry Level)", + "abbr": "bu", + "value": "35.23907017" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Centilitre", + "abbr": "cl", + "value": "0.01" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Cubic Centimeter", + "value": "0.001" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Cubic Decimeter", + "value": "1" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Cubic Foot", + "value": "28.31684659" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Cubic Inch", + "value": "0.016387064" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Cubic Meter", + "value": "1000" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Cubic Millimeter", + "value": "0.000001" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Cubic Yard", + "value": "764.554858" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Cup", + "abbr": "cp", + "value": "0.236588" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Decilitre", + "abbr": "dl", + "value": "0.1" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Fluid Ounce (UK)", + "abbr": "fl oz", + "value": "0.028413" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Fluid Ounce (US)", + "abbr": "fl oz", + "value": "0.029574" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Gallon (UK)", + "abbr": "gal", + "value": "4.54609" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Gallon Dry (US)", + "abbr": "gal", + "value": "4.404884" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Gallon Liquid (US)", + "abbr": "gal", + "value": "3.785411784" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Litre", + "abbr": "L", + "value": "1" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Millilitre", + "abbr": "ml", + "value": "0.001" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Peck", + "abbr": "pk", + "value": "8.809768" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Pint (UK)", + "abbr": "pt", + "value": "0.568261" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Pint, Dry (US)", + "abbr": "pt", + "value": "0.55061" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Pint, Liquid (US)", + "abbr": "pt", + "value": "0.473176475" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Quart (UK)", + "abbr": "qt", + "value": "1.136523" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Quart Dry (US)", + "abbr": "qt", + "value": "1.136523" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Quart Liquid (US)", + "abbr": "qt", + "value": "1.136523" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Tablespoon (US)", + "abbr": "tbsp", + "value": "0.014787" + }, + { + "category": "Volume", + "from_uom": "Litre", + "to_uom": "Teaspoon", + "abbr": "tsp", + "value": "0.004929" + }, + { + "category": "Time", + "from_uom": "Second", + "to_uom": "Day", + "value": "86400" + }, + { + "category": "Time", + "from_uom": "Second", + "to_uom": "Hour", + "abbr": "h", + "value": "3600" + }, + { + "category": "Time", + "from_uom": "Second", + "to_uom": "Minute", + "abbr": "min", + "value": "60" + }, + { + "category": "Time", + "from_uom": "Second", + "to_uom": "Second", + "abbr": "s", + "value": "1" + }, + { + "category": "Time", + "from_uom": "Second", + "to_uom": "Millisecond", + "abbr": "ms", + "value": "0.001" + }, + { + "category": "Time", + "from_uom": "Second", + "to_uom": "Microsecond", + "value": "0.000001" + }, + { + "category": "Time", + "from_uom": "Second", + "to_uom": "Nanosecond", + "abbr": "ns", + "value": "0.000000001" + }, + { + "category": "Time", + "from_uom": "Second", + "to_uom": "Week", + "value": "604800" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Atmosphere", + "abbr": "atm", + "value": "101325" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Pascal", + "abbr": "Pa", + "value": "1" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Bar", + "abbr": "bar", + "value": "100000" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Foot Of Water", + "abbr": "ftH2O", + "value": "2989.06692" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Hectopascal", + "abbr": "hPa", + "value": "100" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Iches Of Water", + "abbr": "inH2O", + "value": "249.08891" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Inches Of Mercury", + "abbr": "inHg", + "value": "3386.388" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Kilopascal", + "abbr": "kPa", + "value": "1000" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Meter Of Water", + "abbr": "mH2O", + "value": "9806.65" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Microbar", + "value": "0.1" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Milibar", + "abbr": "mbar", + "value": "100" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Millimeter Of Mercury", + "abbr": "mmHg", + "value": "133.322" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Millimeter Of Water", + "abbr": "mmH2O", + "value": "9.80665" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Technical Atmosphere", + "abbr": "at", + "value": "98066.5" + }, + { + "category": "Pressure", + "from_uom": "Pascal", + "to_uom": "Torr", + "abbr": "torr", + "value": "133.322" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Dyne", + "abbr": "dyn", + "value": "0.00001" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Gram-Force", + "abbr": "gf", + "value": "0.00980665" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Joule/Meter", + "abbr": "J/m", + "value": "1" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Kilogram-Force", + "abbr": "kgf", + "value": "9.80665" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Kilopond", + "abbr": "kp", + "value": "9.80665" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Kilopound-Force", + "abbr": "kipf", + "value": "4448.221615" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Newton", + "abbr": "N", + "value": "1" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Ounce-Force", + "abbr": "ozf", + "value": "0.278013851" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Pond", + "abbr": "p", + "value": "0.00980665" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Pound-Force", + "abbr": "lbf", + "value": "4.448222" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Poundal", + "abbr": "pdl", + "value": "0.138254954" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Tonne-Force(Metric)", + "abbr": "tf", + "value": "9806.65" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Ton-Force (UK)", + "abbr": "tf(UK)", + "value": "9964.016418" + }, + { + "category": "Force", + "from_uom": "Newton", + "to_uom": "Ton-Force (US)", + "abbr": "tf(US)", + "value": "8896.443231" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Btu (It)", + "abbr": "dyn", + "value": "1055.056" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Btu (Th)", + "value": "1054.35" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Btu (Mean)", + "value": "1055.87" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Calorie (It)", + "abbr": "cal", + "value": "4.1868" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Calorie (Th)", + "value": "4.184" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Calorie (Mean)", + "value": "4.19002" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Calorie (Food)", + "value": "4186" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Erg", + "abbr": "erg", + "value": "0.0000001" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Horsepower-Hours", + "abbr": "hph", + "value": "2684520" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Inch Pound-Force", + "abbr": "in lbf", + "value": "0.112985" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Joule", + "abbr": "J", + "value": "1" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Kilojoule", + "abbr": "kJ", + "value": "1000" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Kilocalorie", + "abbr": "kcal", + "value": "4184" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Kilowatt-Hour", + "abbr": "kWh", + "value": "3600000" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Litre-Atmosphere", + "abbr": "litre-atm", + "value": "101.3253354" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Megajoule", + "abbr": "MJ", + "value": "1000000" + }, + { + "category": "Energy", + "from_uom": "Joule", + "to_uom": "Watt-Hour", + "abbr": "Wh", + "value": "3600" + }, + { + "category": "Power", + "from_uom": "Watt", + "to_uom": "Btu/Hour", + "abbr": "B/h", + "value": "0.29301067" + }, + { + "category": "Power", + "from_uom": "Watt", + "to_uom": "Btu/Minutes", + "abbr": "B/min", + "value": "17.56863" + }, + { + "category": "Power", + "from_uom": "Watt", + "to_uom": "Btu/Seconds", + "abbr": "B/s", + "value": "1055.056" + }, + { + "category": "Power", + "from_uom": "Watt", + "to_uom": "Calorie/Seconds", + "abbr": "cal/s", + "value": "4.183076" + }, + { + "category": "Power", + "from_uom": "Watt", + "to_uom": "Horsepower", + "abbr": "hp", + "value": "745.6998716" + }, + { + "category": "Power", + "from_uom": "Watt", + "to_uom": "Kilowatt", + "abbr": "kW", + "value": "1000" + }, + { + "category": "Power", + "from_uom": "Watt", + "to_uom": "Megawatt", + "abbr": "MW", + "value": "1000000" + }, + { + "category": "Power", + "from_uom": "Watt", + "to_uom": "Volt-Ampere", + "abbr": "VA", + "value": "1" + }, + { + "category": "Power", + "from_uom": "Watt", + "to_uom": "Watt", + "abbr": "W", + "value": "1" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Centigram/Litre", + "abbr": "cg/l", + "value": "0.01" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Decigram/Litre", + "abbr": "dg/l", + "value": "0.1" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Dekagram/Litre", + "abbr": "dag/l", + "value": "10" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Hectogram/Litre", + "abbr": "hg/l", + "value": "100" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Gram/Cubic Meter", + "value": "0.001" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Gram/Cubic Centimeter", + "value": "1000" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Gram/Cubic Millimeter", + "value": "1000000" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Gram/Litre", + "abbr": "g/l", + "value": "1" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Grain/Gallon (US)", + "value": "0.017118061" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Grain/Gallon (UK)", + "value": "0.014253768" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Grain/Cubic Foot", + "value": "0.002288352" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Kilogram/Cubic Meter", + "value": "1" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Kilogram/Cubic Centimeter", + "value": "1000000" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Kilogram/Litre", + "abbr": "kg/l", + "value": "1000" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Milligram/Cubic Meter", + "value": "0.000001" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Milligram/Cubic Centimeter", + "value": "1" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Milligram/Cubic Millimeter", + "value": "1000" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Megagram/Litre", + "abbr": "Mg/l", + "value": "1000000" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Milligram/Litre", + "abbr": "mg/l", + "value": "0.001" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Microgram/Litre", + "abbr": "µm/l", + "value": "0.000001" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Nanogram/Litre", + "abbr": "ng/l", + "value": "0.000000001" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Ounce/Cubic Inch", + "value": "1729.994044" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Ounce/Cubic Foot", + "value": "1.001153961" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Ounce/Gallon (US)", + "abbr": "oz/gal(US)", + "value": "7.489151707" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Ounce/Gallon (UK)", + "abbr": "oz/gal(UK)", + "value": "6.236023291" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Pound/Cubic Inch", + "value": "27679.90471" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Pound/Cubic Foot", + "value": "16.01846337" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Pound Cubic Yard", + "value": "0.593276421" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Pound/Gallon (US)", + "abbr": "lb/gal(US)", + "value": "119.8264273" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Pound/Gallon (UK)", + "abbr": "lb/gal(UK)", + "value": "99.77637266" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Psi/1000 Feet", + "abbr": "psi/1000 ft", + "value": "2.306658726" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Slug/Cubic Foot", + "value": "515.3788184" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Ton (Short)/Cubic Yard", + "abbr": "ton(short)/yd³", + "value": "1186.552843" + }, + { + "category": "Density", + "from_uom": "Gram/Litre", + "to_uom": "Ton (Long)/Cubic Yard", + "abbr": "ton(long)/yd³", + "value": "1328.939184" + }, + { + "category": "Temperature", + "from_uom": "Celsius", + "to_uom": "Celsius", + "value": "1" + }, + { + "category": "Temperature", + "from_uom": "Celsius", + "to_uom": "Fahrenheit", + "value": "0.555555556" + }, + { + "category": "Temperature", + "from_uom": "Celsius", + "to_uom": "Kelvin", + "value": "1" + }, + { + "category": "Frequency and Wavelength", + "from_uom": "Hertz", + "to_uom": "Cycle/Second", + "value": "1" + }, + { + "category": "Frequency and Wavelength", + "from_uom": "Hertz", + "to_uom": "Nanohertz", + "abbr": "nHz", + "value": "0.000000001" + }, + { + "category": "Frequency and Wavelength", + "from_uom": "Hertz", + "to_uom": "Millihertz", + "abbr": "mHz", + "value": "0.001" + }, + { + "category": "Frequency and Wavelength", + "from_uom": "Hertz", + "to_uom": "Hertz", + "abbr": "Hz", + "value": "1" + }, + { + "category": "Frequency and Wavelength", + "from_uom": "Hertz", + "to_uom": "Kilohertz", + "abbr": "kHz", + "value": "1000" + }, + { + "category": "Frequency and Wavelength", + "from_uom": "Hertz", + "to_uom": "Megahertz", + "abbr": "MHz", + "value": "1000000" + }, + { + "category": "Frequency and Wavelength", + "from_uom": "Hertz", + "to_uom": "Wavelength In Gigametres", + "value": "0.299792458" + }, + { + "category": "Frequency and Wavelength", + "from_uom": "Hertz", + "to_uom": "Wavelength In Megametres", + "value": "299.792458" + }, + { + "category": "Frequency and Wavelength", + "from_uom": "Hertz", + "to_uom": "Wavelength In Kilometres", + "value": "299792.458" + }, + { + "category": "Electrical Charge", + "from_uom": "Coulomb", + "to_uom": "Ampere-Hour", + "value": "3600" + }, + { + "category": "Electrical Charge", + "from_uom": "Coulomb", + "to_uom": "Ampere-Minute", + "value": "60" + }, + { + "category": "Electrical Charge", + "from_uom": "Coulomb", + "to_uom": "Ampere-Second", + "value": "1" + }, + { + "category": "Electrical Charge", + "from_uom": "Coulomb", + "to_uom": "Coulomb", + "abbr": "C", + "value": "1" + }, + { + "category": "Electrical Charge", + "from_uom": "Coulomb", + "to_uom": "EMU Of Charge", + "value": "10" + }, + { + "category": "Electrical Charge", + "from_uom": "Coulomb", + "to_uom": "Faraday", + "value": "96485.309" + }, + { + "category": "Electrical Charge", + "from_uom": "Coulomb", + "to_uom": "Kilocoulomb", + "abbr": "kC", + "value": "1000" + }, + { + "category": "Electrical Charge", + "from_uom": "Coulomb", + "to_uom": "Megacoulomb", + "abbr": "MC", + "value": "1000000" + }, + { + "category": "Electrical Charge", + "from_uom": "Coulomb", + "to_uom": "Millicoulomb", + "abbr": "mC", + "value": "0.001" + }, + { + "category": "Electrical Charge", + "from_uom": "Coulomb", + "to_uom": "Nanocoulomb", + "abbr": "nC", + "value": "0.000000001" + }, + { + "category": "Electric Current", + "from_uom": "Ampere", + "to_uom": "Ampere", + "abbr": "A", + "value": "1" + }, + { + "category": "Electric Current", + "from_uom": "Ampere", + "to_uom": "Abampere", + "abbr": "abA", + "value": "10" + }, + { + "category": "Electric Current", + "from_uom": "Ampere", + "to_uom": "Biot", + "abbr": "Bi", + "value": "10" + }, + { + "category": "Electric Current", + "from_uom": "Ampere", + "to_uom": "EMU of current", + "abbr": "EMU", + "value": "10" + }, + { + "category": "Electric Current", + "from_uom": "Ampere", + "to_uom": "Kiloampere", + "abbr": "kA", + "value": "1000" + }, + { + "category": "Electric Current", + "from_uom": "Ampere", + "to_uom": "Milliampere", + "abbr": "mA", + "value": "0.001" + }, + { + "category": "Magnetic Induction", + "from_uom": "Gauss", + "to_uom": "Gamma", + "value": "0.00001" + }, + { + "category": "Magnetic Induction", + "from_uom": "Gauss", + "to_uom": "Gauss", + "abbr": "G", + "value": "1" + }, + { + "category": "Magnetic Induction", + "from_uom": "Gauss", + "to_uom": "Tesla", + "abbr": "T", + "value": "10000" + }, + { + "category": "Agriculture", + "from_uom": "Percent", + "to_uom": "Percent", + "abbr": "%", + "value": "1" + }, + { + "category": "Agriculture", + "from_uom": "Percent", + "to_uom": "Parts Per Million", + "abbr": "ppm", + "value": "0.0001" + } +] \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/data/uom_data.json b/erpnext/setup/setup_wizard/data/uom_data.json new file mode 100644 index 0000000000..78cbf2ca0c --- /dev/null +++ b/erpnext/setup/setup_wizard/data/uom_data.json @@ -0,0 +1,952 @@ +[ + { + "uom_name": "Unit", + "must_be_whole_number": 1 + }, + { + "uom_name": "Box", + "must_be_whole_number": 1 + }, { + "uom_name": "Nos", + "must_be_whole_number": 1 + }, { + "uom_name": "Pair", + "must_be_whole_number": 1 + }, { + "uom_name": "Set", + "must_be_whole_number": 1 + }, + { + "uom_name": "Meter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Barleycorn", + "must_be_whole_number": 0 + }, + { + "uom_name": "Calibre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cable Length (UK)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cable Length (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cable Length", + "must_be_whole_number": 0 + }, + { + "uom_name": "Centimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Chain", + "must_be_whole_number": 0 + }, + { + "uom_name": "Decimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ells (UK)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ems(Pica)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Fathom", + "must_be_whole_number": 0 + }, + { + "uom_name": "Foot", + "must_be_whole_number": 0 + }, + { + "uom_name": "Furlong", + "must_be_whole_number": 0 + }, + { + "uom_name": "Hand", + "must_be_whole_number": 0 + }, + { + "uom_name": "Hectometer", + "must_be_whole_number": 0 + }, + { + "uom_name": "Inch", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilometer", + "must_be_whole_number": 0 + }, + { + "uom_name": "Link", + "must_be_whole_number": 0 + }, + { + "uom_name": "Micrometer", + "must_be_whole_number": 0 + }, + { + "uom_name": "Mile", + "must_be_whole_number": 0 + }, + { + "uom_name": "Mile (Nautical)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Millimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Nanometer", + "must_be_whole_number": 0 + }, + { + "uom_name": "Rod", + "must_be_whole_number": 0 + }, + { + "uom_name": "Vara", + "must_be_whole_number": 0 + }, + { + "uom_name": "Versta", + "must_be_whole_number": 0 + }, + { + "uom_name": "Yard", + "must_be_whole_number": 0 + }, + { + "uom_name": "Arshin", + "must_be_whole_number": 0 + }, + { + "uom_name": "Sazhen", + "must_be_whole_number": 0 + }, + { + "uom_name": "Medio Metro", + "must_be_whole_number": 0 + }, + { + "uom_name": "Square Meter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Centiarea", + "must_be_whole_number": 0 + }, + { + "uom_name": "Area", + "must_be_whole_number": 0 + }, + { + "uom_name": "Manzana", + "must_be_whole_number": 0 + }, + { + "uom_name": "Caballeria", + "must_be_whole_number": 0 + }, + { + "uom_name": "Square Kilometer", + "must_be_whole_number": 0 + }, + { + "uom_name": "Are", + "must_be_whole_number": 0 + }, + { + "uom_name": "Acre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Acre (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Hectare", + "must_be_whole_number": 0 + }, + { + "uom_name": "Square Yard", + "must_be_whole_number": 0 + }, + { + "uom_name": "Square Foot", + "must_be_whole_number": 0 + }, + { + "uom_name": "Square Inch", + "must_be_whole_number": 0 + }, + { + "uom_name": "Square Centimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Square Mile", + "must_be_whole_number": 0 + }, + { + "uom_name": "Meter/Second", + "must_be_whole_number": 0 + }, + { + "uom_name": "Inch/Minute", + "must_be_whole_number": 0 + }, + { + "uom_name": "Foot/Minute", + "must_be_whole_number": 0 + }, + { + "uom_name": "Inch/Second", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilometer/Hour", + "must_be_whole_number": 0 + }, + { + "uom_name": "Foot/Second", + "must_be_whole_number": 0 + }, + { + "uom_name": "Mile/Hour", + "must_be_whole_number": 0 + }, + { + "uom_name": "Knot", + "must_be_whole_number": 0 + }, + { + "uom_name": "Mile/Minute", + "must_be_whole_number": 0 + }, + { + "uom_name": "Mile/Second", + "must_be_whole_number": 0 + }, + { + "uom_name": "Carat", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cental", + "must_be_whole_number": 0 + }, + { + "uom_name": "Dram", + "must_be_whole_number": 0 + }, + { + "uom_name": "Grain", + "must_be_whole_number": 0 + }, + { + "uom_name": "Gram", + "must_be_whole_number": 0 + }, + { + "uom_name": "Hundredweight", + "must_be_whole_number": 0 + }, + { + "uom_name": "Quintal", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kg", + "must_be_whole_number": 0 + }, + { + "uom_name": "Microgram", + "must_be_whole_number": 0 + }, + { + "uom_name": "Milligram", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ounce", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pood", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pound", + "must_be_whole_number": 0 + }, + { + "uom_name": "Slug", + "must_be_whole_number": 0 + }, + { + "uom_name": "Stone", + "must_be_whole_number": 0 + }, + { + "uom_name": "Tonne", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kip", + "must_be_whole_number": 0 + }, + { + "uom_name": "Barrel(Beer)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Barrel (Oil)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Bushel (UK)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Bushel (US Dry Level)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Centilitre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cubic Centimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cubic Decimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cubic Foot", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cubic Inch", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cubic Meter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cubic Millimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cubic Yard", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cup", + "must_be_whole_number": 0 + }, + { + "uom_name": "Decilitre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Fluid Ounce (UK)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Fluid Ounce (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Gallon (UK)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Gallon Dry (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Gallon Liquid (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Litre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Millilitre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Peck", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pint (UK)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pint, Dry (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pint, Liquid (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Quart (UK)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Quart Dry (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Quart Liquid (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Tablespoon (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Teaspoon", + "must_be_whole_number": 0 + }, + { + "uom_name": "Day", + "must_be_whole_number": 0 + }, + { + "uom_name": "Hour", + "must_be_whole_number": 0 + }, + { + "uom_name": "Minute", + "must_be_whole_number": 0 + }, + { + "uom_name": "Second", + "must_be_whole_number": 0 + }, + { + "uom_name": "Millisecond", + "must_be_whole_number": 0 + }, + { + "uom_name": "Microsecond", + "must_be_whole_number": 0 + }, + { + "uom_name": "Nanosecond", + "must_be_whole_number": 0 + }, + { + "uom_name": "Week", + "must_be_whole_number": 0 + }, + { + "uom_name": "Atmosphere", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pascal", + "must_be_whole_number": 0 + }, + { + "uom_name": "Bar", + "must_be_whole_number": 0 + }, + { + "uom_name": "Foot Of Water", + "must_be_whole_number": 0 + }, + { + "uom_name": "Hectopascal", + "must_be_whole_number": 0 + }, + { + "uom_name": "Iches Of Water", + "must_be_whole_number": 0 + }, + { + "uom_name": "Inches Of Mercury", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilopascal", + "must_be_whole_number": 0 + }, + { + "uom_name": "Meter Of Water", + "must_be_whole_number": 0 + }, + { + "uom_name": "Microbar", + "must_be_whole_number": 0 + }, + { + "uom_name": "Milibar", + "must_be_whole_number": 0 + }, + { + "uom_name": "Millimeter Of Mercury", + "must_be_whole_number": 0 + }, + { + "uom_name": "Millimeter Of Water", + "must_be_whole_number": 0 + }, + { + "uom_name": "Technical Atmosphere", + "must_be_whole_number": 0 + }, + { + "uom_name": "Torr", + "must_be_whole_number": 0 + }, + { + "uom_name": "Dyne", + "must_be_whole_number": 0 + }, + { + "uom_name": "Gram-Force", + "must_be_whole_number": 0 + }, + { + "uom_name": "Joule/Meter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilogram-Force", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilopond", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilopound-Force", + "must_be_whole_number": 0 + }, + { + "uom_name": "Newton", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ounce-Force", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pond", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pound-Force", + "must_be_whole_number": 0 + }, + { + "uom_name": "Poundal", + "must_be_whole_number": 0 + }, + { + "uom_name": "Tonne-Force(Metric)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ton-Force (UK)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ton-Force (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Btu (It)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Btu (Th)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Btu (Mean)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Calorie (It)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Calorie (Th)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Calorie (Mean)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Calorie (Food)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Erg", + "must_be_whole_number": 0 + }, + { + "uom_name": "Horsepower-Hours", + "must_be_whole_number": 0 + }, + { + "uom_name": "Inch Pound-Force", + "must_be_whole_number": 0 + }, + { + "uom_name": "Joule", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilojoule", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilocalorie", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilowatt-Hour", + "must_be_whole_number": 0 + }, + { + "uom_name": "Litre-Atmosphere", + "must_be_whole_number": 0 + }, + { + "uom_name": "Megajoule", + "must_be_whole_number": 0 + }, + { + "uom_name": "Watt-Hour", + "must_be_whole_number": 0 + }, + { + "uom_name": "Btu/Hour", + "must_be_whole_number": 0 + }, + { + "uom_name": "Btu/Minutes", + "must_be_whole_number": 0 + }, + { + "uom_name": "Btu/Seconds", + "must_be_whole_number": 0 + }, + { + "uom_name": "Calorie/Seconds", + "must_be_whole_number": 0 + }, + { + "uom_name": "Horsepower", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilowatt", + "must_be_whole_number": 0 + }, + { + "uom_name": "Megawatt", + "must_be_whole_number": 0 + }, + { + "uom_name": "Volt-Ampere", + "must_be_whole_number": 0 + }, + { + "uom_name": "Watt", + "must_be_whole_number": 0 + }, + { + "uom_name": "Centigram/Litre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Decigram/Litre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Dekagram/Litre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Hectogram/Litre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Gram/Cubic Meter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Gram/Cubic Centimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Gram/Cubic Millimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Gram/Litre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Grain/Gallon (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Grain/Gallon (UK)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Grain/Cubic Foot", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilogram/Cubic Meter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilogram/Cubic Centimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilogram/Litre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Milligram/Cubic Meter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Milligram/Cubic Centimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Milligram/Cubic Millimeter", + "must_be_whole_number": 0 + }, + { + "uom_name": "Megagram/Litre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Milligram/Litre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Microgram/Litre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Nanogram/Litre", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ounce/Cubic Inch", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ounce/Cubic Foot", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ounce/Gallon (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ounce/Gallon (UK)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pound/Cubic Inch", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pound/Cubic Foot", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pound Cubic Yard", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pound/Gallon (US)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Pound/Gallon (UK)", + "must_be_whole_number": 0 + }, + { + "uom_name": "Psi/1000 Feet", + "must_be_whole_number": 0 + }, + { + "uom_name": "Slug/Cubic Foot", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ton (Short)/Cubic Yard", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ton (Long)/Cubic Yard", + "must_be_whole_number": 0 + }, + { + "uom_name": "Celsius", + "must_be_whole_number": 0 + }, + { + "uom_name": "Fahrenheit", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kelvin", + "must_be_whole_number": 0 + }, + { + "uom_name": "Cycle/Second", + "must_be_whole_number": 0 + }, + { + "uom_name": "Nanohertz", + "must_be_whole_number": 0 + }, + { + "uom_name": "Millihertz", + "must_be_whole_number": 0 + }, + { + "uom_name": "Hertz", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilohertz", + "must_be_whole_number": 0 + }, + { + "uom_name": "Megahertz", + "must_be_whole_number": 0 + }, + { + "uom_name": "Wavelength In Gigametres", + "must_be_whole_number": 0 + }, + { + "uom_name": "Wavelength In Megametres", + "must_be_whole_number": 0 + }, + { + "uom_name": "Wavelength In Kilometres", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ampere-Hour", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ampere-Minute", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ampere-Second", + "must_be_whole_number": 0 + }, + { + "uom_name": "Coulomb", + "must_be_whole_number": 0 + }, + { + "uom_name": "EMU Of Charge", + "must_be_whole_number": 0 + }, + { + "uom_name": "Faraday", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kilocoulomb", + "must_be_whole_number": 0 + }, + { + "uom_name": "Megacoulomb", + "must_be_whole_number": 0 + }, + { + "uom_name": "Millicoulomb", + "must_be_whole_number": 0 + }, + { + "uom_name": "Nanocoulomb", + "must_be_whole_number": 0 + }, + { + "uom_name": "Ampere", + "must_be_whole_number": 0 + }, + { + "uom_name": "Abampere", + "must_be_whole_number": 0 + }, + { + "uom_name": "Biot", + "must_be_whole_number": 0 + }, + { + "uom_name": "EMU of current", + "must_be_whole_number": 0 + }, + { + "uom_name": "Kiloampere", + "must_be_whole_number": 0 + }, + { + "uom_name": "Milliampere", + "must_be_whole_number": 0 + }, + { + "uom_name": "Gamma", + "must_be_whole_number": 0 + }, + { + "uom_name": "Gauss", + "must_be_whole_number": 0 + }, + { + "uom_name": "Tesla", + "must_be_whole_number": 0 + }, + { + "uom_name": "Percent", + "must_be_whole_number": 0 + }, + { + "uom_name": "Parts Per Million", + "must_be_whole_number": 0 + } + +] \ No newline at end of file diff --git a/erpnext/setup/setup_wizard/operations/install_fixtures.py b/erpnext/setup/setup_wizard/operations/install_fixtures.py index afe982df4b..bf7d4c6bf1 100644 --- a/erpnext/setup/setup_wizard/operations/install_fixtures.py +++ b/erpnext/setup/setup_wizard/operations/install_fixtures.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals -import frappe, os +import frappe, os, json from frappe import _ @@ -144,19 +144,6 @@ def install(country=None): # Sales Person {'doctype': 'Sales Person', 'sales_person_name': _('Sales Team'), 'is_group': 1, "parent_sales_person": ""}, - # UOM - {'uom_name': _('Unit'), 'doctype': 'UOM', 'name': _('Unit'), "must_be_whole_number": 1}, - {'uom_name': _('Box'), 'doctype': 'UOM', 'name': _('Box'), "must_be_whole_number": 1}, - {'uom_name': _('Kg'), 'doctype': 'UOM', 'name': _('Kg')}, - {'uom_name': _('Meter'), 'doctype': 'UOM', 'name': _('Meter')}, - {'uom_name': _('Litre'), 'doctype': 'UOM', 'name': _('Litre')}, - {'uom_name': _('Gram'), 'doctype': 'UOM', 'name': _('Gram')}, - {'uom_name': _('Nos'), 'doctype': 'UOM', 'name': _('Nos'), "must_be_whole_number": 1}, - {'uom_name': _('Pair'), 'doctype': 'UOM', 'name': _('Pair'), "must_be_whole_number": 1}, - {'uom_name': _('Set'), 'doctype': 'UOM', 'name': _('Set'), "must_be_whole_number": 1}, - {'uom_name': _('Hour'), 'doctype': 'UOM', 'name': _('Hour')}, - {'uom_name': _('Minute'), 'doctype': 'UOM', 'name': _('Minute')}, - # Mode of Payment {'doctype': 'Mode of Payment', 'mode_of_payment': 'Check' if country=="United States" else _('Cheque'), @@ -244,7 +231,6 @@ def install(country=None): from erpnext.setup.setup_wizard.data.industry_type import get_industry_types records += [{"doctype":"Industry Type", "industry": d} for d in get_industry_types()] # records += [{"doctype":"Operation", "operation": d} for d in get_operations()] - records += [{'doctype': 'Lead Source', 'source_name': _(d)} for d in default_lead_sources] base_path = frappe.get_app_path("erpnext", "hr", "doctype") @@ -267,6 +253,30 @@ def install(country=None): selling_settings.set_default_customer_group_and_territory() selling_settings.save() + add_uom_data() + +def add_uom_data(): + # add UOMs + uoms = json.loads(open(frappe.get_app_path("erpnext", "setup", "setup_wizard", "data", "uom_data.json")).read()) + for d in uoms: + if not frappe.db.exists('UOM', d.get("uom_name")): + uom_doc = frappe.new_doc('UOM') + uom_doc.update(d) + uom_doc.save(ignore_permissions=True) + + # bootstrap uom conversion factors + uom_conversions = json.loads(open(frappe.get_app_path("erpnext", "setup", "setup_wizard", "data", "uom_conversion_data.json")).read()) + for d in uom_conversions: + if not frappe.db.exists("UOM Category", d.get("category")): + frappe.get_doc({ + "doctype": "UOM Category", + "category_name": d.get("category") + }).insert(ignore_permissions=True) + + uom_conversion = frappe.new_doc('UOM Conversion Factor') + uom_conversion.update(d) + uom_conversion.save(ignore_permissions=True) + def make_fixture_records(records): from frappe.modules import scrub for r in records: diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js index 59e2f58dd8..0eb29a28b4 100644 --- a/erpnext/stock/doctype/item/item.js +++ b/erpnext/stock/doctype/item/item.js @@ -694,3 +694,23 @@ frappe.ui.form.on("Item", { cur_frm.add_fetch('item_group', 'default_income_account', 'income_account'); }, }); + +frappe.ui.form.on("UOM Conversion Detail", { + uom: function(frm, cdt, cdn) { + var row = locals[cdt][cdn]; + if (row.uom) { + frappe.call({ + method:"erpnext.stock.doctype.item.item.get_uom_conv_factor", + args: { + "uom": row.uom, + "stock_uom": frm.doc.stock_uom + }, + callback: function(r) { + if (!r.exc && r.message) { + frappe.model.set_value(cdt, cdn, "conversion_factor", r.message); + } + } + }); + } + } +}) \ No newline at end of file diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 51f8b7e440..90d77fea15 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -119,6 +119,7 @@ class Item(WebsiteGenerator): self.make_thumbnail() self.validate_fixed_asset() self.validate_retain_sample() + self.validate_uom_conversion_factor() if not self.get("__islocal"): self.old_item_group = frappe.db.get_value(self.doctype, self.name, "item_group") @@ -704,6 +705,13 @@ class Item(WebsiteGenerator): frappe.throw(_("Default Unit of Measure for Variant '{0}' must be same as in Template '{1}'") .format(self.stock_uom, template_uom)) + def validate_uom_conversion_factor(self): + if self.uoms: + for d in self.uoms: + value = get_uom_conv_factor(d.uom, self.stock_uom) + if value: + d.conversion_factor = value + def validate_attributes(self): if (self.has_variants or self.variant_of) and self.variant_based_on == 'Item Attribute': attributes = [] @@ -902,3 +910,26 @@ def get_item_defaults(item, company): else: return frappe.db.get_value("Item", item, ["name", "item_name", "description", "stock_uom", "is_stock_item", "item_code", "item_group"], as_dict=1) + +@frappe.whitelist() +def get_uom_conv_factor(uom, stock_uom): + uoms = [uom, stock_uom] + value = "" + uom_details = frappe.db.sql("""select to_uom, from_uom, value from `tabUOM Conversion Factor`\ + where to_uom in ({0}) + """.format(', '.join(['"' + frappe.db.escape(i, percent=False) + '"' for i in uoms])), as_dict=True) + + for d in uom_details: + 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) + else: + 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) + + if uom_stock and uom_row: + if uom_stock.from_uom == uom_row.from_uom: + value = flt(uom_stock.value) * 1/flt(uom_row.value) + + return value diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py index 6d6d282933..1e926e31d5 100644 --- a/erpnext/stock/doctype/item/test_item.py +++ b/erpnext/stock/doctype/item/test_item.py @@ -9,7 +9,7 @@ from frappe.test_runner import make_test_objects from erpnext.controllers.item_variant import (create_variant, ItemVariantExistsError, InvalidItemAttributeValueError, get_variant) from erpnext.stock.doctype.item.item import StockExistsForTemplate - +from erpnext.stock.doctype.item.item import get_uom_conv_factor from frappe.model.rename_doc import rename_doc from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry from erpnext.stock.get_item_details import get_item_details @@ -34,7 +34,6 @@ def make_item(item_code, properties=None): if properties: item.update(properties) - if item.is_stock_item: for item_default in [doc for doc in item.get("item_defaults") if not doc.default_warehouse]: item_default.default_warehouse = "_Test Warehouse - _TC" @@ -241,6 +240,24 @@ class TestItem(unittest.TestCase): self.assertTrue(frappe.db.get_value("Bin", {"item_code": "Test Item for Merging 2", "warehouse": "_Test Warehouse 1 - _TC"})) + def test_uom_conversion_factor(self): + if frappe.db.exists('Item', 'Test Item UOM'): + frappe.delete_doc('Item', 'Test Item UOM') + + item_doc = make_item("Test Item UOM", { + "stock_uom": "Gram", + "uoms": [dict(uom='Carat'), dict(uom='Kg')] + }) + + for d in item_doc.uoms: + value = get_uom_conv_factor(d.uom, item_doc.stock_uom) + d.conversion_factor = value + + self.assertEqual(item_doc.uoms[0].uom, "Carat") + self.assertEqual(item_doc.uoms[0].conversion_factor, 5) + self.assertEqual(item_doc.uoms[1].uom, "Kg") + self.assertEqual(item_doc.uoms[1].conversion_factor, 0.001) + def test_item_variant_by_manufacturer(self): fields = [{'field_name': 'description'}, {'field_name': 'variant_based_on'}] set_item_variant_settings(fields) @@ -315,3 +332,4 @@ def create_item(item_code, is_stock_item=None, valuation_rate=0, warehouse=None) "company": "_Test Company" }) item.save() + diff --git a/erpnext/stock/doctype/uom_category/__init__.py b/erpnext/stock/doctype/uom_category/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/stock/doctype/uom_category/test_uom_category.js b/erpnext/stock/doctype/uom_category/test_uom_category.js new file mode 100644 index 0000000000..4b5972ea71 --- /dev/null +++ b/erpnext/stock/doctype/uom_category/test_uom_category.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: UOM Category", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new UOM Category + () => frappe.tests.make('UOM Category', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/stock/doctype/uom_category/test_uom_category.py b/erpnext/stock/doctype/uom_category/test_uom_category.py new file mode 100644 index 0000000000..33bd408a57 --- /dev/null +++ b/erpnext/stock/doctype/uom_category/test_uom_category.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import unittest + +class TestUOMCategory(unittest.TestCase): + pass diff --git a/erpnext/stock/doctype/uom_category/uom_category.js b/erpnext/stock/doctype/uom_category/uom_category.js new file mode 100644 index 0000000000..48026da1be --- /dev/null +++ b/erpnext/stock/doctype/uom_category/uom_category.js @@ -0,0 +1,8 @@ +// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('UOM Category', { + refresh: function() { + + } +}); diff --git a/erpnext/stock/doctype/uom_category/uom_category.json b/erpnext/stock/doctype/uom_category/uom_category.json new file mode 100644 index 0000000000..c5c38a0bd2 --- /dev/null +++ b/erpnext/stock/doctype/uom_category/uom_category.json @@ -0,0 +1,93 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 1, + "autoname": "field:category_name", + "beta": 0, + "creation": "2018-04-30 17:27:14.742005", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "category_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Category Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2018-04-30 17:33:25.638223", + "modified_by": "Administrator", + "module": "Stock", + "name": "UOM Category", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/stock/doctype/uom_category/uom_category.py b/erpnext/stock/doctype/uom_category/uom_category.py new file mode 100644 index 0000000000..d5c339e1bf --- /dev/null +++ b/erpnext/stock/doctype/uom_category/uom_category.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class UOMCategory(Document): + pass