[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
This commit is contained in:
parent
d458f7710f
commit
59af3a0296
@ -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
|
||||
|
11
erpnext/patches/v11_0/uom_conversion_data.py
Normal file
11
erpnext/patches/v11_0/uom_conversion_data.py
Normal file
@ -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()
|
@ -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()
|
||||
]);
|
||||
|
||||
});
|
@ -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
|
@ -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() {
|
||||
|
||||
}
|
||||
});
|
@ -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
|
||||
}
|
@ -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
|
1575
erpnext/setup/setup_wizard/data/uom_conversion_data.json
Normal file
1575
erpnext/setup/setup_wizard/data/uom_conversion_data.json
Normal file
File diff suppressed because it is too large
Load Diff
952
erpnext/setup/setup_wizard/data/uom_data.json
Normal file
952
erpnext/setup/setup_wizard/data/uom_data.json
Normal file
@ -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
|
||||
}
|
||||
|
||||
]
|
@ -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:
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
@ -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
|
||||
|
@ -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()
|
||||
|
||||
|
0
erpnext/stock/doctype/uom_category/__init__.py
Normal file
0
erpnext/stock/doctype/uom_category/__init__.py
Normal file
23
erpnext/stock/doctype/uom_category/test_uom_category.js
Normal file
23
erpnext/stock/doctype/uom_category/test_uom_category.js
Normal file
@ -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()
|
||||
]);
|
||||
|
||||
});
|
9
erpnext/stock/doctype/uom_category/test_uom_category.py
Normal file
9
erpnext/stock/doctype/uom_category/test_uom_category.py
Normal file
@ -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
|
8
erpnext/stock/doctype/uom_category/uom_category.js
Normal file
8
erpnext/stock/doctype/uom_category/uom_category.js
Normal file
@ -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() {
|
||||
|
||||
}
|
||||
});
|
93
erpnext/stock/doctype/uom_category/uom_category.json
Normal file
93
erpnext/stock/doctype/uom_category/uom_category.json
Normal file
@ -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
|
||||
}
|
9
erpnext/stock/doctype/uom_category/uom_category.py
Normal file
9
erpnext/stock/doctype/uom_category/uom_category.py
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user