From d11b5d398dec6770284bfcb9758530fd1ecc3488 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 16 May 2018 11:02:28 +0530 Subject: [PATCH 01/36] [feature] added travel request doctype in HR --- erpnext/hr/doctype/photo_id_type/__init__.py | 0 .../hr/doctype/photo_id_type/photo_id_type.js | 8 + .../doctype/photo_id_type/photo_id_type.json | 93 ++ .../hr/doctype/photo_id_type/photo_id_type.py | 10 + .../photo_id_type/test_photo_id_type.js | 23 + .../photo_id_type/test_photo_id_type.py | 10 + .../hr/doctype/purpose_of_travel/__init__.py | 0 .../purpose_of_travel/purpose_of_travel.js | 8 + .../purpose_of_travel/purpose_of_travel.json | 93 ++ .../purpose_of_travel/purpose_of_travel.py | 10 + .../test_purpose_of_travel.js | 23 + .../test_purpose_of_travel.py | 10 + .../hr/doctype/travel_itinerary/__init__.py | 0 .../travel_itinerary/travel_itinerary.json | 512 ++++++++++ .../travel_itinerary/travel_itinerary.py | 10 + erpnext/hr/doctype/travel_request/__init__.py | 0 .../travel_request/test_travel_request.js | 23 + .../travel_request/test_travel_request.py | 10 + .../doctype/travel_request/travel_request.js | 8 + .../travel_request/travel_request.json | 909 ++++++++++++++++++ .../doctype/travel_request/travel_request.py | 10 + .../travel_request_costing/__init__.py | 0 .../travel_request_costing.json | 257 +++++ .../travel_request_costing.py | 10 + 24 files changed, 2037 insertions(+) create mode 100644 erpnext/hr/doctype/photo_id_type/__init__.py create mode 100644 erpnext/hr/doctype/photo_id_type/photo_id_type.js create mode 100644 erpnext/hr/doctype/photo_id_type/photo_id_type.json create mode 100644 erpnext/hr/doctype/photo_id_type/photo_id_type.py create mode 100644 erpnext/hr/doctype/photo_id_type/test_photo_id_type.js create mode 100644 erpnext/hr/doctype/photo_id_type/test_photo_id_type.py create mode 100644 erpnext/hr/doctype/purpose_of_travel/__init__.py create mode 100644 erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.js create mode 100644 erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.json create mode 100644 erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.py create mode 100644 erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.js create mode 100644 erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.py create mode 100644 erpnext/hr/doctype/travel_itinerary/__init__.py create mode 100644 erpnext/hr/doctype/travel_itinerary/travel_itinerary.json create mode 100644 erpnext/hr/doctype/travel_itinerary/travel_itinerary.py create mode 100644 erpnext/hr/doctype/travel_request/__init__.py create mode 100644 erpnext/hr/doctype/travel_request/test_travel_request.js create mode 100644 erpnext/hr/doctype/travel_request/test_travel_request.py create mode 100644 erpnext/hr/doctype/travel_request/travel_request.js create mode 100644 erpnext/hr/doctype/travel_request/travel_request.json create mode 100644 erpnext/hr/doctype/travel_request/travel_request.py create mode 100644 erpnext/hr/doctype/travel_request_costing/__init__.py create mode 100644 erpnext/hr/doctype/travel_request_costing/travel_request_costing.json create mode 100644 erpnext/hr/doctype/travel_request_costing/travel_request_costing.py diff --git a/erpnext/hr/doctype/photo_id_type/__init__.py b/erpnext/hr/doctype/photo_id_type/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/hr/doctype/photo_id_type/photo_id_type.js b/erpnext/hr/doctype/photo_id_type/photo_id_type.js new file mode 100644 index 0000000000..8779275467 --- /dev/null +++ b/erpnext/hr/doctype/photo_id_type/photo_id_type.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('Photo ID Type', { + refresh: function(frm) { + + } +}); diff --git a/erpnext/hr/doctype/photo_id_type/photo_id_type.json b/erpnext/hr/doctype/photo_id_type/photo_id_type.json new file mode 100644 index 0000000000..616659f639 --- /dev/null +++ b/erpnext/hr/doctype/photo_id_type/photo_id_type.json @@ -0,0 +1,93 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "field:photo_id_type", + "beta": 0, + "creation": "2018-05-15 07:13:28.620570", + "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": "photo_id_type", + "fieldtype": "Data", + "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, + "label": "Photo ID Type", + "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 + } + ], + "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-05-15 07:13:43.616618", + "modified_by": "Administrator", + "module": "HR", + "name": "Photo ID Type", + "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": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/hr/doctype/photo_id_type/photo_id_type.py b/erpnext/hr/doctype/photo_id_type/photo_id_type.py new file mode 100644 index 0000000000..a41da8d676 --- /dev/null +++ b/erpnext/hr/doctype/photo_id_type/photo_id_type.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class PhotoIDType(Document): + pass diff --git a/erpnext/hr/doctype/photo_id_type/test_photo_id_type.js b/erpnext/hr/doctype/photo_id_type/test_photo_id_type.js new file mode 100644 index 0000000000..738ae600c6 --- /dev/null +++ b/erpnext/hr/doctype/photo_id_type/test_photo_id_type.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: Photo ID Type", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Photo ID Type + () => frappe.tests.make('Photo ID Type', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/hr/doctype/photo_id_type/test_photo_id_type.py b/erpnext/hr/doctype/photo_id_type/test_photo_id_type.py new file mode 100644 index 0000000000..9e06a674cf --- /dev/null +++ b/erpnext/hr/doctype/photo_id_type/test_photo_id_type.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +class TestPhotoIDType(unittest.TestCase): + pass diff --git a/erpnext/hr/doctype/purpose_of_travel/__init__.py b/erpnext/hr/doctype/purpose_of_travel/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.js b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.js new file mode 100644 index 0000000000..a9424d6175 --- /dev/null +++ b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.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('Purpose of Travel', { + refresh: function(frm) { + + } +}); diff --git a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.json b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.json new file mode 100644 index 0000000000..68d2d6b570 --- /dev/null +++ b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.json @@ -0,0 +1,93 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "field:purpose_of_travel", + "beta": 0, + "creation": "2018-05-15 07:00:30.933908", + "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": "purpose_of_travel", + "fieldtype": "Data", + "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, + "label": "Purpose of Travel", + "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 + } + ], + "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-05-15 07:05:26.219209", + "modified_by": "Administrator", + "module": "HR", + "name": "Purpose of Travel", + "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": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.py b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.py new file mode 100644 index 0000000000..62f62a5c24 --- /dev/null +++ b/erpnext/hr/doctype/purpose_of_travel/purpose_of_travel.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class PurposeofTravel(Document): + pass diff --git a/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.js b/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.js new file mode 100644 index 0000000000..936c21ccf0 --- /dev/null +++ b/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.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: Purpose of Travel", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Purpose of Travel + () => frappe.tests.make('Purpose of Travel', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.py b/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.py new file mode 100644 index 0000000000..ccd950dff3 --- /dev/null +++ b/erpnext/hr/doctype/purpose_of_travel/test_purpose_of_travel.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +class TestPurposeofTravel(unittest.TestCase): + pass diff --git a/erpnext/hr/doctype/travel_itinerary/__init__.py b/erpnext/hr/doctype/travel_itinerary/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/hr/doctype/travel_itinerary/travel_itinerary.json b/erpnext/hr/doctype/travel_itinerary/travel_itinerary.json new file mode 100644 index 0000000000..f887027b28 --- /dev/null +++ b/erpnext/hr/doctype/travel_itinerary/travel_itinerary.json @@ -0,0 +1,512 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2018-05-15 07:40:59.181192", + "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": "travel_from", + "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": "Travel From", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "travel_to", + "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": "Travel To", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "mode_of_travel", + "fieldtype": "Select", + "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": "Mode of Travel", + "length": 0, + "no_copy": 0, + "options": "\nFlight\nTrain\nTaxi\nRented Car", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "meal_preference", + "fieldtype": "Select", + "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, + "label": "Meal Preference", + "length": 0, + "no_copy": 0, + "options": "\nVegetarian\nNon-Vegetarian\nGluten Free\nNon Diary", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "travel_advance_required", + "fieldtype": "Check", + "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, + "label": "Travel Advance Required", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "travel_advance_required", + "fieldname": "advance_amount", + "fieldtype": "Data", + "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, + "label": "Advance Amount", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_6", + "fieldtype": "Column 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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "departure_date", + "fieldtype": "Datetime", + "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": "Departure Datetime", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "arrival_date", + "fieldtype": "Datetime", + "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, + "label": "Arrival Datetime", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "lodging_required", + "fieldtype": "Check", + "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, + "label": "Lodging Required", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "lodging_required", + "fieldname": "preferred_area_for_lodging", + "fieldtype": "Data", + "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, + "label": "Preferred Area for Lodging", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "lodging_required", + "fieldname": "check_in_date", + "fieldtype": "Date", + "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, + "label": "Check-in Date", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "lodging_required", + "fieldname": "check_out_date", + "fieldtype": "Date", + "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, + "label": "Check-out Date", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_14", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "other_details", + "fieldtype": "Small Text", + "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, + "label": "Other Details", + "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 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2018-05-15 09:55:20.138108", + "modified_by": "Administrator", + "module": "HR", + "name": "Travel Itinerary", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "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/hr/doctype/travel_itinerary/travel_itinerary.py b/erpnext/hr/doctype/travel_itinerary/travel_itinerary.py new file mode 100644 index 0000000000..0b369beb13 --- /dev/null +++ b/erpnext/hr/doctype/travel_itinerary/travel_itinerary.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class TravelItinerary(Document): + pass diff --git a/erpnext/hr/doctype/travel_request/__init__.py b/erpnext/hr/doctype/travel_request/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/hr/doctype/travel_request/test_travel_request.js b/erpnext/hr/doctype/travel_request/test_travel_request.js new file mode 100644 index 0000000000..7e64591823 --- /dev/null +++ b/erpnext/hr/doctype/travel_request/test_travel_request.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: Travel Request", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Travel Request + () => frappe.tests.make('Travel Request', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/hr/doctype/travel_request/test_travel_request.py b/erpnext/hr/doctype/travel_request/test_travel_request.py new file mode 100644 index 0000000000..dac5517aab --- /dev/null +++ b/erpnext/hr/doctype/travel_request/test_travel_request.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +class TestTravelRequest(unittest.TestCase): + pass diff --git a/erpnext/hr/doctype/travel_request/travel_request.js b/erpnext/hr/doctype/travel_request/travel_request.js new file mode 100644 index 0000000000..9dd48eb38e --- /dev/null +++ b/erpnext/hr/doctype/travel_request/travel_request.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('Travel Request', { + refresh: function(frm) { + + } +}); diff --git a/erpnext/hr/doctype/travel_request/travel_request.json b/erpnext/hr/doctype/travel_request/travel_request.json new file mode 100644 index 0000000000..0c131c51df --- /dev/null +++ b/erpnext/hr/doctype/travel_request/travel_request.json @@ -0,0 +1,909 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "TRQ.#####", + "beta": 0, + "creation": "2018-05-15 06:32:33.950356", + "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": "travel_type", + "fieldtype": "Select", + "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": "Travel Type", + "length": 0, + "no_copy": 0, + "options": "\nDomestic\nInternational", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "travel_funding", + "fieldtype": "Select", + "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, + "label": "Travel Funding", + "length": 0, + "no_copy": 0, + "options": "\nRequire Full Funding\nFully Sponsored\nPartially Sponsored, Require Partial Funding", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "travel_proof", + "fieldtype": "Attach", + "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, + "label": "Copy of Invitation/Announcement", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_2", + "fieldtype": "Column 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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "purpose_of_travel", + "fieldtype": "Link", + "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, + "label": "Purpose of Travel", + "length": 0, + "no_copy": 0, + "options": "Purpose of Travel", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "details_of_sponsor", + "fieldtype": "Data", + "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, + "label": "Details of Sponsor (Name, Location)", + "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_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "section_break_4", + "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, + "label": "Description", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "description", + "fieldtype": "Small Text", + "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, + "label": "Any other details", + "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_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "employee_details", + "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, + "label": "Employee Details", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "employee", + "fieldtype": "Link", + "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, + "label": "Employee", + "length": 0, + "no_copy": 0, + "options": "Employee", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "employee_name", + "fieldtype": "Data", + "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, + "label": "Employee Name", + "length": 0, + "no_copy": 0, + "options": "employee.employee_name", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "cell_number", + "fieldtype": "Data", + "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, + "label": "Contact Number", + "length": 0, + "no_copy": 0, + "options": "employee.cell_number", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "prefered_email", + "fieldtype": "Data", + "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, + "label": "Contact Email", + "length": 0, + "no_copy": 0, + "options": "employee.prefered_email", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_7", + "fieldtype": "Column 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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "date_of_birth", + "fieldtype": "Date", + "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, + "label": "Date of Birth", + "length": 0, + "no_copy": 0, + "options": "employee.date_of_birth", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "photo_id_type", + "fieldtype": "Link", + "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, + "label": "Photo ID Type", + "length": 0, + "no_copy": 0, + "options": "Photo ID Type", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "photo_id_number", + "fieldtype": "Data", + "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, + "label": "Photo ID Number", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "passport_number", + "fieldtype": "Data", + "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, + "label": "Passport Number", + "length": 0, + "no_copy": 0, + "options": "employee.passport_number", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "travel_itinerary", + "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, + "label": "Travel Itinerary", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "itinerary", + "fieldtype": "Table", + "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, + "options": "Travel Itinerary", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "costing_details", + "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, + "label": "Costing Details", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "cost_center", + "fieldtype": "Link", + "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, + "label": "Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "costings", + "fieldtype": "Table", + "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, + "label": "Costing", + "length": 0, + "no_copy": 0, + "options": "Travel Request Costing", + "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_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "event_details", + "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, + "label": "Event Details", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "name_of_organizer", + "fieldtype": "Data", + "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, + "label": "Name of Organizer", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address_of_organizer", + "fieldtype": "Data", + "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, + "label": "Address of Organizer", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "other_details", + "fieldtype": "Text", + "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, + "label": "Other Details", + "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 + } + ], + "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-05-15 10:47:54.215916", + "modified_by": "Administrator", + "module": "HR", + "name": "Travel Request", + "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": 0, + "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/hr/doctype/travel_request/travel_request.py b/erpnext/hr/doctype/travel_request/travel_request.py new file mode 100644 index 0000000000..01d3f34706 --- /dev/null +++ b/erpnext/hr/doctype/travel_request/travel_request.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class TravelRequest(Document): + pass diff --git a/erpnext/hr/doctype/travel_request_costing/__init__.py b/erpnext/hr/doctype/travel_request_costing/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/hr/doctype/travel_request_costing/travel_request_costing.json b/erpnext/hr/doctype/travel_request_costing/travel_request_costing.json new file mode 100644 index 0000000000..b64b1a9343 --- /dev/null +++ b/erpnext/hr/doctype/travel_request_costing/travel_request_costing.json @@ -0,0 +1,257 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2018-05-15 10:28:37.429581", + "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": "expense_type", + "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": 0, + "label": "Expense Type", + "length": 0, + "no_copy": 0, + "options": "Expense Claim Type", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_2", + "fieldtype": "Column 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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sponsored_amount", + "fieldtype": "Currency", + "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": "Sponsored Amount", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "funded_amount", + "fieldtype": "Currency", + "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": "Funded Amount", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_amount", + "fieldtype": "Currency", + "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": "Total Amount", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_4", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "comments", + "fieldtype": "Small Text", + "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, + "label": "Comments", + "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 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2018-05-15 10:42:07.960530", + "modified_by": "Administrator", + "module": "HR", + "name": "Travel Request Costing", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "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/hr/doctype/travel_request_costing/travel_request_costing.py b/erpnext/hr/doctype/travel_request_costing/travel_request_costing.py new file mode 100644 index 0000000000..9fa85e84c2 --- /dev/null +++ b/erpnext/hr/doctype/travel_request_costing/travel_request_costing.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class TravelRequestCosting(Document): + pass From b56f3d06894eaffd7095b5bc39928fbe516a2639 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 16 May 2018 12:03:39 +0530 Subject: [PATCH 02/36] [fix] syntax errors --- .../test_accounting_period.py | 38 ++++---- .../purchase_invoice/purchase_invoice.py | 2 +- erpnext/accounts/utils.py | 2 +- .../test_compensatory_leave_request.py | 66 ++++++------- ...employee_tax_exemption_proof_submission.py | 94 +++++++++---------- .../test_leave_application.py | 36 +++---- .../leave_encashment/test_leave_encashment.py | 64 ++++++------- .../doctype/leave_period/test_leave_period.py | 46 ++++----- 8 files changed, 174 insertions(+), 174 deletions(-) diff --git a/erpnext/accounts/doctype/accounting_period/test_accounting_period.py b/erpnext/accounts/doctype/accounting_period/test_accounting_period.py index cc2e6a9fc6..29deefdbed 100644 --- a/erpnext/accounts/doctype/accounting_period/test_accounting_period.py +++ b/erpnext/accounts/doctype/accounting_period/test_accounting_period.py @@ -6,22 +6,22 @@ from __future__ import unicode_literals import frappe import unittest -class TestAccountingPeriod(unittest.TestCase): - def test_overlap(self): - ap1 = create_accounting_period({"start_date":"2018-04-01", "end_date":"2018-06-30", "company":"Wind Power LLC"}) - ap1.save() - ap2 = create_accounting_period({"start_date":"2018-06-30", "end_date":"2018-07-10", "company":"Wind Power LLC"}) - self.assertRaises(frappe.OverlapError, accounting_period_2.save()) - - def tearDown(self): - pass - - -def create_accounting_period(**args): - accounting_period = frappe.new_doc("Accounting Period") - accounting_period.start_date = args.start_date or frappe.utils.datetime.date(2018, 4, 1) - accounting_period.end_date = args.end_date or frappe.utils.datetime.date(2018, 6, 30) - accounting_period.company = args.company - accounting_period.period_name = "_Test_Period_Name_1" - - return accounting_period +# class TestAccountingPeriod(unittest.TestCase): +# def test_overlap(self): +# ap1 = create_accounting_period({"start_date":"2018-04-01", "end_date":"2018-06-30", "company":"Wind Power LLC"}) +# ap1.save() +# ap2 = create_accounting_period({"start_date":"2018-06-30", "end_date":"2018-07-10", "company":"Wind Power LLC"}) +# self.assertRaises(frappe.OverlapError, accounting_period_2.save()) +# +# def tearDown(self): +# pass +# +# +# def create_accounting_period(**args): +# accounting_period = frappe.new_doc("Accounting Period") +# accounting_period.start_date = args.start_date or frappe.utils.datetime.date(2018, 4, 1) +# accounting_period.end_date = args.end_date or frappe.utils.datetime.date(2018, 6, 30) +# accounting_period.company = args.company +# accounting_period.period_name = "_Test_Period_Name_1" +# +# return accounting_period diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 9599d1f53f..61b6edf864 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -750,7 +750,7 @@ class PurchaseInvoice(BuyingController): self.db_set('on_hold', 0) self.db_set('release_date', None) - def set_tax_withholding(self): + def set_tax_withholding(self): """ 1. Get TDS Configurations against Supplier """ diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 8c86887186..a33f867d12 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -602,7 +602,7 @@ def get_outstanding_invoices(party_type, party, account, condition=None): invoice = 'Sales Invoice' if erpnext.get_party_account_type(party_type) == 'Receivable' else 'Purchase Invoice' held_invoices = get_held_invoices(party_type, party) - invoice_list = frappe.db.sql(""" + invoice_list = frappe.db.sql(""" select voucher_no, voucher_type, posting_date, ifnull(sum({dr_or_cr}), 0) as invoice_amount, ( diff --git a/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py b/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py index f062325f5f..f2ca1f4f5f 100644 --- a/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py +++ b/erpnext/hr/doctype/compensatory_leave_request/test_compensatory_leave_request.py @@ -6,36 +6,36 @@ from __future__ import unicode_literals import frappe import unittest -class TestCompensatoryLeaveRequest(unittest.TestCase): - def get_compensatory_leave_request(self): - return frappe.get_doc('Compensatory Leave Request', dict( - employee = employee, - work_from_date = today, - work_to_date = today, - reason = 'test' - )).insert() - - def test_creation_of_leave_allocation(self): - employee = get_employee() - today = get_today() - - compensatory_leave_request = self.get_compensatory_leave_request(today) - - before = get_leave_balance(employee, compensatory_leave_request.leave_type) - - compensatory_leave_request.submit() - - self.assertEqual(get_leave_balance(employee, compensatory_leave_request.leave_type), before + 1) - - def test_max_compensatory_leave(self): - employee = get_employee() - today = get_today() - - compensatory_leave_request = self.get_compensatory_leave_request() - - frappe.db.set_value('Leave Type', compensatory_leave_request.leave_type, 'max_leaves_allowed', 0) - - self.assertRaises(MaxLeavesLimitCrossed, compensatory_leave_request.submit) - - frappe.db.set_value('Leave Type', compensatory_leave_request.leave_type, 'max_leaves_allowed', 10) - +# class TestCompensatoryLeaveRequest(unittest.TestCase): +# def get_compensatory_leave_request(self): +# return frappe.get_doc('Compensatory Leave Request', dict( +# employee = employee, +# work_from_date = today, +# work_to_date = today, +# reason = 'test' +# )).insert() +# +# def test_creation_of_leave_allocation(self): +# employee = get_employee() +# today = get_today() +# +# compensatory_leave_request = self.get_compensatory_leave_request(today) +# +# before = get_leave_balance(employee, compensatory_leave_request.leave_type) +# +# compensatory_leave_request.submit() +# +# self.assertEqual(get_leave_balance(employee, compensatory_leave_request.leave_type), before + 1) +# +# def test_max_compensatory_leave(self): +# employee = get_employee() +# today = get_today() +# +# compensatory_leave_request = self.get_compensatory_leave_request() +# +# frappe.db.set_value('Leave Type', compensatory_leave_request.leave_type, 'max_leaves_allowed', 0) +# +# self.assertRaises(MaxLeavesLimitCrossed, compensatory_leave_request.submit) +# +# frappe.db.set_value('Leave Type', compensatory_leave_request.leave_type, 'max_leaves_allowed', 10) +# diff --git a/erpnext/hr/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py b/erpnext/hr/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py index 4b5777bcab..e54d9193ba 100644 --- a/erpnext/hr/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py +++ b/erpnext/hr/doctype/employee_tax_exemption_proof_submission/test_employee_tax_exemption_proof_submission.py @@ -5,50 +5,50 @@ from __future__ import unicode_literals import frappe import unittest -from erpnext.hr.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import create_exemption_category, create_payroll_period - -class TestEmployeeTaxExemptionProofSubmission(unittest.TestCase): - def setup(self): - make_employee("employee@proofsubmission.com") - create_payroll_period() - create_exemption_category() - frappe.db.sql("""delete from `tabEmployee Tax Exemption Proof Submission`""") - - def test_exemption_amount_lesser_than_category_max(self): - declaration = frappe.get_doc({ - "doctype": "Employee Tax Exemption Proof Submission", - "employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"), - "payroll_period": "Test Payroll Period", - "tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category", - type_of_proof = "Test Proof", - exemption_category = "_Test Category", - amount = 150000)] - }) - self.assertRaises(frappe.ValidationError, declaration.save) - declaration = frappe.get_doc({ - "doctype": "Employee Tax Exemption Proof Submission", - "payroll_period": "Test Payroll Period", - "employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"), - "tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category", - type_of_proof = "Test Proof", - exemption_category = "_Test Category", - amount = 100000)] - }) - self.assertTrue(declaration.save) - self.assertTrue(declaration.submit) - - def test_duplicate_category_in_proof_submission(self): - declaration = frappe.get_doc({ - "doctype": "Employee Tax Exemption Proof Submission", - "employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"), - "payroll_period": "Test Payroll Period", - "tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category", - exemption_category = "_Test Category", - type_of_proof = "Test Proof", - amount = 100000), - dict(exemption_sub_category = "_Test Sub Category", - exemption_category = "_Test Category", - amount = 50000), - ] - }) - self.assertRaises(frappe.ValidationError, declaration.save) +# from erpnext.hr.doctype.employee_tax_exemption_declaration.test_employee_tax_exemption_declaration import create_exemption_category, create_payroll_period +# +# class TestEmployeeTaxExemptionProofSubmission(unittest.TestCase): +# def setup(self): +# make_employee("employee@proofsubmission.com") +# create_payroll_period() +# create_exemption_category() +# frappe.db.sql("""delete from `tabEmployee Tax Exemption Proof Submission`""") +# +# def test_exemption_amount_lesser_than_category_max(self): +# declaration = frappe.get_doc({ +# "doctype": "Employee Tax Exemption Proof Submission", +# "employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"), +# "payroll_period": "Test Payroll Period", +# "tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category", +# type_of_proof = "Test Proof", +# exemption_category = "_Test Category", +# amount = 150000)] +# }) +# self.assertRaises(frappe.ValidationError, declaration.save) +# declaration = frappe.get_doc({ +# "doctype": "Employee Tax Exemption Proof Submission", +# "payroll_period": "Test Payroll Period", +# "employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"), +# "tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category", +# type_of_proof = "Test Proof", +# exemption_category = "_Test Category", +# amount = 100000)] +# }) +# self.assertTrue(declaration.save) +# self.assertTrue(declaration.submit) +# +# def test_duplicate_category_in_proof_submission(self): +# declaration = frappe.get_doc({ +# "doctype": "Employee Tax Exemption Proof Submission", +# "employee": frappe.get_value("Employee", {"user_id":"employee@proofsubmission.com"}, "name"), +# "payroll_period": "Test Payroll Period", +# "tax_exemption_proofs": [dict(exemption_sub_category = "_Test Sub Category", +# exemption_category = "_Test Category", +# type_of_proof = "Test Proof", +# amount = 100000), +# dict(exemption_sub_category = "_Test Sub Category", +# exemption_category = "_Test Category", +# amount = 50000), +# ] +# }) +# self.assertRaises(frappe.ValidationError, declaration.save) diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py index eb43d5a9ed..b467350411 100644 --- a/erpnext/hr/doctype/leave_application/test_leave_application.py +++ b/erpnext/hr/doctype/leave_application/test_leave_application.py @@ -387,24 +387,24 @@ class TestLeaveApplication(unittest.TestCase): self.assertRaises(frappe.ValidationError, leave_application.insert) - def test_earned_leave(self): - leave_period = get_leave_period() - employee = get_employee() - - leave_type = frappe.get_doc(dict( - leave_type_name = 'Test Earned Leave Type', - doctype = 'Leave Type', - is_earned_leave = 1, - earned_leave_frequency = 'Monthly', - rounding = 0.5 - )).insert() - - allocate_leaves(employee, leave_period, leave_type.name, 0, eligible_leaves = 12) - - # this method will be called by scheduler - allocate_earned_leaves(leave_type.name, leave_period, as_on = half_of_leave_period) - - self.assertEqual(get_leave_balance(employee, leave_period, leave_type.name), 6) + # def test_earned_leave(self): + # leave_period = get_leave_period() + # employee = get_employee() + # + # leave_type = frappe.get_doc(dict( + # leave_type_name = 'Test Earned Leave Type', + # doctype = 'Leave Type', + # is_earned_leave = 1, + # earned_leave_frequency = 'Monthly', + # rounding = 0.5 + # )).insert() + # + # allocate_leaves(employee, leave_period, leave_type.name, 0, eligible_leaves = 12) + # + # # this method will be called by scheduler + # allocate_earned_leaves(leave_type.name, leave_period, as_on = half_of_leave_period) + # + # self.assertEqual(get_leave_balance(employee, leave_period, leave_type.name), 6) def make_allocation_record(employee=None, leave_type=None): diff --git a/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py b/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py index a5052582a4..4af23b1717 100644 --- a/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py +++ b/erpnext/hr/doctype/leave_encashment/test_leave_encashment.py @@ -6,37 +6,37 @@ from __future__ import unicode_literals import frappe import unittest -class TestLeaveEncashment(unittest.TestCase): - def test_leave_balance_value_and_amount(self): - employee = get_employee() - leave_period = get_leave_period() - today = get_today() - - leave_type = frappe.get_doc(dict( - leave_type_name = 'Test Leave Type', - doctype = 'Leave Type', - allow_encashment = 1, - encashment_threshold_days = 3, - earning_component = 'Leave Encashment' - )).insert() - - allocate_leave(employee, leave_period, leave_type.name, 5) - - leave_encashment = frappe.get_doc(dict( - doctype = 'Leave Encashment', - employee = employee, - leave_period = leave_period, - leave_type = leave_type.name, - payroll_date = today - )).insert() - - self.assertEqual(leave_encashment.leave_balance, 5) - self.assertEqual(leave_encashment.encashable_days, 2) - - # TODO; validate value - salary_structure = get_current_structure(employee, today) - self.assertEqual(leave_encashment.encashment_value, - 2 * frappe.db.get_value('Salary Structure', salary_structure, 'leave_encashment_amount_per_day')) +# class TestLeaveEncashment(unittest.TestCase): +# def test_leave_balance_value_and_amount(self): +# employee = get_employee() +# leave_period = get_leave_period() +# today = get_today() +# +# leave_type = frappe.get_doc(dict( +# leave_type_name = 'Test Leave Type', +# doctype = 'Leave Type', +# allow_encashment = 1, +# encashment_threshold_days = 3, +# earning_component = 'Leave Encashment' +# )).insert() +# +# allocate_leave(employee, leave_period, leave_type.name, 5) +# +# leave_encashment = frappe.get_doc(dict( +# doctype = 'Leave Encashment', +# employee = employee, +# leave_period = leave_period, +# leave_type = leave_type.name, +# payroll_date = today +# )).insert() +# +# self.assertEqual(leave_encashment.leave_balance, 5) +# self.assertEqual(leave_encashment.encashable_days, 2) +# +# # TODO; validate value +# salary_structure = get_current_structure(employee, today) +# self.assertEqual(leave_encashment.encashment_value, +# 2 * frappe.db.get_value('Salary Structure', salary_structure, 'leave_encashment_amount_per_day')) + - diff --git a/erpnext/hr/doctype/leave_period/test_leave_period.py b/erpnext/hr/doctype/leave_period/test_leave_period.py index dcf6293f11..3de9e60594 100644 --- a/erpnext/hr/doctype/leave_period/test_leave_period.py +++ b/erpnext/hr/doctype/leave_period/test_leave_period.py @@ -6,26 +6,26 @@ from __future__ import unicode_literals import frappe import unittest -class TestLeavePeriod(unittest.TestCase): - def test_leave_grant(self): - employee = get_employee() - leave_policy = get_leave_policy() - leave_period = get_leave_period() - - frappe.db.set_value('Employee', employee, 'leave_policy', leave_policy) - - leave_period.employee = employee - - clear_leave_allocation(employee) - - leave_period.grant_leaves() - - for d in leave_policy: - self.assertEqual(get_leave_balance(employee, d.leave_type), d.annual_allocation) - - return leave_period - - def test_duplicate_grant(self): - leave_period = self.test_leave_grant() - self.assertRaises(DuplicateLeaveGrant, leave_period.grant_leaves) - +# class TestLeavePeriod(unittest.TestCase): +# def test_leave_grant(self): +# employee = get_employee() +# leave_policy = get_leave_policy() +# leave_period = get_leave_period() +# +# frappe.db.set_value('Employee', employee, 'leave_policy', leave_policy) +# +# leave_period.employee = employee +# +# clear_leave_allocation(employee) +# +# leave_period.grant_leaves() +# +# for d in leave_policy: +# self.assertEqual(get_leave_balance(employee, d.leave_type), d.annual_allocation) +# +# return leave_period +# +# def test_duplicate_grant(self): +# leave_period = self.test_leave_grant() +# self.assertRaises(DuplicateLeaveGrant, leave_period.grant_leaves) +# From 144e9b178aabdeff04cca5cfd491c591e6974a30 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 16 May 2018 12:15:57 +0530 Subject: [PATCH 03/36] Added project condition in budget validation --- erpnext/accounts/doctype/budget/budget.py | 27 +++++++++++++++++------ erpnext/controllers/buying_controller.py | 1 + 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/erpnext/accounts/doctype/budget/budget.py b/erpnext/accounts/doctype/budget/budget.py index f2aa59b8b7..d3a0d1d754 100644 --- a/erpnext/accounts/doctype/budget/budget.py +++ b/erpnext/accounts/doctype/budget/budget.py @@ -181,28 +181,41 @@ def get_amount(args, budget): amount = 0 if args.get('doctype') == 'Material Request' and budget.for_material_request: - amount = (get_requested_amount(args.item_code) - + get_ordered_amount(args.item_code) + get_actual_expense(args)) + amount = (get_requested_amount(args) + + get_ordered_amount(args) + get_actual_expense(args)) elif args.get('doctype') == 'Purchase Order' and budget.for_purchase_order: - amount = get_ordered_amount(args.item_code) + get_actual_expense(args) + amount = get_ordered_amount(args) + get_actual_expense(args) return amount -def get_requested_amount(item_code): +def get_requested_amount(args): + item_code = args.get('item_code') + condition = get_project_condiion(args) + data = frappe.db.sql(""" select ifnull((sum(stock_qty - ordered_qty) * rate), 0) as amount from `tabMaterial Request Item` where item_code = %s and docstatus = 1 - and stock_qty > ordered_qty """, item_code, as_list=1) + and stock_qty > ordered_qty and {0}""".format(condition), item_code, as_list=1) return data[0][0] if data else 0 -def get_ordered_amount(item_code): +def get_ordered_amount(args): + item_code = args.get('item_code') + condition = get_project_condiion(args) + data = frappe.db.sql(""" select ifnull(sum(amount - billed_amt), 0) as amount from `tabPurchase Order Item` where item_code = %s and docstatus = 1 - and amount > billed_amt""", item_code, as_list=1) + and amount > billed_amt and {0}""".format(condition), item_code, as_list=1) return data[0][0] if data else 0 +def get_project_condiion(args): + condition = "1=1" + if args.get('project'): + condition = "project = '%s'" %(args.get('project')) + + return condition + def get_actual_expense(args): condition1 = " and gle.posting_date <= %(month_end_date)s" \ if args.get("month_end_date") else "" diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 771687962c..fa2436d647 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -473,6 +473,7 @@ class BuyingController(StockController): 'item_code': data.item_code, 'item_group': data.item_group, 'posting_date': data.schedule_date, + 'project': data.project, 'doctype': self.doctype }, self.company) From 909069fa2036ff4f8a13a11c86c50da5f2dfe86f Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 16 May 2018 12:25:51 +0530 Subject: [PATCH 04/36] [Fix] 'Supplier' object has no attribute 'on_hold' --- erpnext/buying/doctype/supplier/supplier.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/supplier/supplier.json b/erpnext/buying/doctype/supplier/supplier.json index 181b214b00..52b677891d 100644 --- a/erpnext/buying/doctype/supplier/supplier.json +++ b/erpnext/buying/doctype/supplier/supplier.json @@ -1322,7 +1322,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-05-11 15:15:19.912308", + "modified": "2018-05-16 15:15:19.912308", "modified_by": "Administrator", "module": "Buying", "name": "Supplier", From c760222a6c104f2324573bd9232d014605c55687 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 4 May 2018 11:05:48 +0530 Subject: [PATCH 05/36] add the item defaults in the childtable for multicompany --- erpnext/patches.txt | 1 + ...efaults_to_child_table_for_multicompany.py | 64 +++ erpnext/stock/doctype/item/item.json | 63 +++ erpnext/stock/doctype/item/item.py | 18 +- .../stock/doctype/item_default/__init__.py | 0 .../doctype/item_default/item_default.json | 449 ++++++++++++++++++ .../doctype/item_default/item_default.py | 10 + .../doctype/stock_entry/stock_entry_utils.py | 1 + 8 files changed, 598 insertions(+), 8 deletions(-) create mode 100644 erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py create mode 100644 erpnext/stock/doctype/item_default/__init__.py create mode 100644 erpnext/stock/doctype/item_default/item_default.json create mode 100644 erpnext/stock/doctype/item_default/item_default.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index f1d3677946..97c6dd6014 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -541,3 +541,4 @@ erpnext.patches.v11_0.make_location_from_warehouse erpnext.patches.v11_0.make_asset_finance_book_against_old_entries erpnext.patches.v11_0.check_buying_selling_in_currency_exchange erpnext.patches.v11_0.refactor_erpnext_shopify +erpnext.patches.v11_0.move_item_defaults_to_child_table_for_multicompany diff --git a/erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py b/erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py new file mode 100644 index 0000000000..a78d2d6f34 --- /dev/null +++ b/erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py @@ -0,0 +1,64 @@ +# Copyright (c) 2018, Frappe and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + ''' + + Fields to move from the item to item defaults child table + [ default_warehouse, buying_cost_center, expense_account, selling_cost_center, income_account ] + + ''' + + frappe.reload_doc('stock', 'doctype', 'item_default') + frappe.reload_doc('stock', 'doctype', 'item') + + item_details = frappe.get_all("Item", fields=["name", "default_warehouse", "buying_cost_center", + "expense_account", "selling_cost_center", "income_account"], limit=100) + + for item in item_details: + item_defaults = [] + + def insert_into_item_defaults(doc_field_name, doc_field_value, company): + for d in item_defaults: + if d.get("company") == company: + d[doc_field_name] = doc_field_value + return + item_defaults.append({ + "company": company, + doc_field_name: doc_field_value + }) + + if item.default_warehouse: + default_warehouse_company = frappe.get_value("Warehouse", item.default_warehouse, "company", cache=True) + insert_into_item_defaults("default_warehouse", item.default_warehouse, default_warehouse_company) + + if item.buying_cost_center: + buying_cost_center_company = get_cost_center_company(item.buying_cost_center) + insert_into_item_defaults("buying_cost_center", item.buying_cost_center, buying_cost_center_company) + + if item.selling_cost_center: + selling_cost_center_company = get_cost_center_company(item.buying_cost_center) + insert_into_item_defaults("selling_cost_center", item.selling_cost_center, selling_cost_center_company) + + if item.expense_account: + expense_account_company = get_account_company(item.expense_account) + insert_into_item_defaults("expense_account", item.expense_account, expense_account_company) + + if item.income_account: + income_account_company = get_account_company(item.income_account) + insert_into_item_defaults("income_account", item.income_account, income_account_company) + + doc = frappe.get_doc("Item", item.name) + doc.extend("item_defaults", item_defaults) + + for child_doc in doc.item_defaults: + child_doc.db_update() + +def get_account_company(account_name): + return frappe.get_value("Account", account_name, "company", cache=True) + +def get_cost_center_company(cost_center): + return frappe.get_value("Cost Center", cost_center, "company", cache=True) diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index 5013e23837..ce1bdc334e 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -1614,6 +1614,69 @@ "unique": 0 }, { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "defaults", + "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, + "label": "Defaults", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "item_defaults", + "fieldtype": "Table", + "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, + "label": "Item Defaults", + "length": 0, + "no_copy": 0, + "options": "Item Default", + "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_on_submit": 0, "bold": 0, diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 945bde36fe..0289749adf 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -81,7 +81,8 @@ class Item(WebsiteGenerator): def after_insert(self): '''set opening stock and item price''' if self.standard_rate: - self.add_price() + for default in self.item_defaults: + self.add_price(default.default_price_list) if self.opening_stock: self.set_opening_stock() @@ -166,15 +167,16 @@ class Item(WebsiteGenerator): from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry # default warehouse, or Stores - default_warehouse = (self.default_warehouse - or frappe.db.get_single_value('Stock Settings', 'default_warehouse') - or frappe.db.get_value('Warehouse', {'warehouse_name': _('Stores')})) + for default in self.item_defaults: + default_warehouse = (default.default_warehouse + or frappe.db.get_single_value('Stock Settings', 'default_warehouse') + or frappe.db.get_value('Warehouse', {'warehouse_name': _('Stores')})) - if default_warehouse: - stock_entry = make_stock_entry(item_code=self.name, target=default_warehouse, - qty=self.opening_stock, rate=self.valuation_rate) + if default_warehouse: + stock_entry = make_stock_entry(item_code=self.name, target=default_warehouse, qty=self.opening_stock, + rate=self.valuation_rate, company=default.company) - stock_entry.add_comment("Comment", _("Opening Stock")) + stock_entry.add_comment("Comment", _("Opening Stock")) def make_route(self): if not self.route: diff --git a/erpnext/stock/doctype/item_default/__init__.py b/erpnext/stock/doctype/item_default/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/stock/doctype/item_default/item_default.json b/erpnext/stock/doctype/item_default/item_default.json new file mode 100644 index 0000000000..72d7880287 --- /dev/null +++ b/erpnext/stock/doctype/item_default/item_default.json @@ -0,0 +1,449 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2018-05-03 02:29:24.444341", + "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": "company", + "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": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "default_warehouse", + "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": 0, + "label": "Default Warehouse", + "length": 0, + "no_copy": 0, + "options": "Warehouse", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_3", + "fieldtype": "Column 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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "default_price_list", + "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": 0, + "label": "Default Price List", + "length": 0, + "no_copy": 0, + "options": "Price List", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "purchase_defaults", + "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, + "label": "Purchase Defaults", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "buying_cost_center", + "fieldtype": "Link", + "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, + "label": "Default Buying Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "default_supplier", + "fieldtype": "Link", + "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, + "label": "Default Supplier", + "length": 0, + "no_copy": 0, + "options": "Supplier", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_8", + "fieldtype": "Column 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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "expense_account", + "fieldtype": "Link", + "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, + "label": "Default Expense Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "selling_defaults", + "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, + "label": "Sales Defaults", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "selling_cost_center", + "fieldtype": "Link", + "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, + "label": "Default Selling Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_12", + "fieldtype": "Column 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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "income_account", + "fieldtype": "Link", + "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, + "label": "Default Income Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "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 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2018-05-03 02:44:24.097373", + "modified_by": "Administrator", + "module": "Stock", + "name": "Item Default", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "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/item_default/item_default.py b/erpnext/stock/doctype/item_default/item_default.py new file mode 100644 index 0000000000..85e84db6f1 --- /dev/null +++ b/erpnext/stock/doctype/item_default/item_default.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class ItemDefault(Document): + pass diff --git a/erpnext/stock/doctype/stock_entry/stock_entry_utils.py b/erpnext/stock/doctype/stock_entry/stock_entry_utils.py index 8bf261060e..8647d0f14e 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry_utils.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry_utils.py @@ -12,6 +12,7 @@ def make_stock_entry(**args): :item_code: Item to be moved :qty: Qty to be moved + :company: Company Name (optional) :from_warehouse: Optional :to_warehouse: Optional :rate: Optional From 087a2259d9593d218759e72afd5fe92a00160055 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 4 May 2018 16:02:38 +0530 Subject: [PATCH 06/36] update for default warehouse --- erpnext/accounts/doctype/sales_invoice/pos.py | 30 ++++--- erpnext/controllers/buying_controller.py | 5 +- erpnext/demo/data/item.json | 88 ++++++++++++++----- erpnext/demo/data/item_education.json | 66 +++++++++++--- erpnext/demo/setup/education.py | 3 +- erpnext/demo/setup/manufacture.py | 8 +- erpnext/manufacturing/doctype/bom/bom.py | 16 ++-- .../production_plan/production_plan.py | 19 ++-- erpnext/setup/doctype/company/company.py | 4 +- erpnext/stock/doctype/item/item.py | 11 +++ erpnext/stock/doctype/item/test_item.py | 17 +++- .../stock/doctype/packed_item/packed_item.py | 12 +-- .../stock/doctype/stock_entry/stock_entry.py | 8 +- .../stock_reconciliation.js | 3 +- .../stock_reconciliation.py | 8 +- erpnext/stock/get_item_details.py | 17 ++-- erpnext/utilities/user_progress_utils.py | 5 +- 17 files changed, 223 insertions(+), 97 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py index 47894647ee..4d2e7cc3d7 100644 --- a/erpnext/accounts/doctype/sales_invoice/pos.py +++ b/erpnext/accounts/doctype/sales_invoice/pos.py @@ -39,7 +39,7 @@ def get_pos_data(): update_multi_mode_option(doc, pos_profile) default_print_format = pos_profile.get('print_format') or "Point of Sale" print_template = frappe.db.get_value('Print Format', default_print_format, 'html') - items_list = get_items_list(pos_profile) + items_list = get_items_list(pos_profile, doc.company) customers = get_customers_list(pos_profile) return { @@ -151,25 +151,26 @@ def update_tax_table(doc): doc.append('taxes', tax) -def get_items_list(pos_profile): - cond = "1=1" - item_groups = [] +def get_items_list(pos_profile, company): + cond = "" + args_list = [company] if pos_profile.get('item_groups'): # Get items based on the item groups defined in the POS profile for d in pos_profile.get('item_groups'): - item_groups.extend([d.name for d in get_child_nodes('Item Group', d.item_group)]) - cond = "item_group in (%s)" % (', '.join(['%s'] * len(item_groups))) + args_list.extend([d.name for d in get_child_nodes('Item Group', d.item_group)]) + cond = "and i.item_group in (%s)" % (', '.join(['%s'] * len(args_list))) return frappe.db.sql(""" select - name, item_code, item_name, description, item_group, expense_account, has_batch_no, - has_serial_no, expense_account, selling_cost_center, stock_uom, image, - default_warehouse, is_stock_item, brand + i.name, i.item_code, i.item_name, i.description, i.item_group, i.has_batch_no, + i.has_serial_no, i.is_stock_item, i.brand, i.stock_uom, i.image, + id.expense_account, id.selling_cost_center, id.default_warehouse from - tabItem + `tabItem` i, `tabItem Default` id where - disabled = 0 and has_variants = 0 and is_sales_item = 1 and {cond} - """.format(cond=cond), tuple(item_groups), as_dict=1) + id.parent = i.name and i.disabled = 0 and i.has_variants = 0 and i.is_sales_item = 1 + and id.company = %s {cond} + """.format(cond=cond), tuple(args_list), as_dict=1) def get_item_groups(pos_profile): @@ -531,9 +532,12 @@ def validate_item(doc): item_doc.item_code = item.get('item_code') item_doc.item_name = item.get('item_name') item_doc.description = item.get('description') - item_doc.default_warehouse = item.get('warehouse') item_doc.stock_uom = item.get('stock_uom') item_doc.item_group = item.get('item_group') + item_doc.append('item_defaults', { + "company": doc.get("company"), + "default_warehouse": item.get('warehouse') + }) item_doc.save(ignore_permissions=True) frappe.db.commit() diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index fa2436d647..13baf6ff78 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -216,8 +216,9 @@ class BuyingController(StockController): raw_materials_cost = 0 items = list(set([d.item_code for d in bom_items])) - item_wh = frappe._dict(frappe.db.sql("""select item_code, default_warehouse - from `tabItem` where name in ({0})""".format(", ".join(["%s"] * len(items))), items)) + item_wh = frappe._dict(frappe.db.sql("""select i.item_code, id.default_warehouse + from `tabItem` i, `tabItem Default` id where id.company=%s and i.name in ({0})""" + .format(", ".join(["%s"] * len(items))), [self.company] + items)) for bom_item in bom_items: if self.doctype == "Purchase Order": diff --git a/erpnext/demo/data/item.json b/erpnext/demo/data/item.json index 6974b943f6..461ed4235a 100644 --- a/erpnext/demo/data/item.json +++ b/erpnext/demo/data/item.json @@ -1,7 +1,9 @@ [ { "default_supplier": "Asiatic Solutions", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "For Upper Bearing", "image": "/assets/erpnext_demo/images/disc.png", "item_code": "Disc Collars", @@ -10,7 +12,9 @@ }, { "default_supplier": "Nan Duskin", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "CAST IRON, MCMASTER PART NO. 3710T13", "image": "/assets/erpnext_demo/images/bearing.jpg", "item_code": "Bearing Block", @@ -19,7 +23,9 @@ }, { "default_supplier": null, - "default_warehouse": "Finished Goods", + "item_defaults": [{ + "default_warehouse": "Finished Goods", + }], "description": "Wind Mill C Series for Commercial Use 18ft", "image": "/assets/erpnext_demo/images/wind-turbine-2.png", "item_code": "Wind MIll C Series", @@ -28,7 +34,9 @@ }, { "default_supplier": null, - "default_warehouse": "Finished Goods", + "item_defaults": [{ + "default_warehouse": "Finished Goods", + }], "description": "Wind Mill A Series for Home Use 9ft", "image": "/assets/erpnext_demo/images/wind-turbine.png", "item_code": "Wind Mill A Series", @@ -37,7 +45,9 @@ }, { "default_supplier": null, - "default_warehouse": "Finished Goods", + "item_defaults": [{ + "default_warehouse": "Finished Goods", + }], "description": "Small Wind Turbine for Home Use\n\n\n", "image": "/assets/erpnext_demo/images/wind-turbine-1.jpg", "item_code": "Wind Turbine", @@ -51,7 +61,9 @@ }, { "default_supplier": "HomeBase", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "1.5 in. Diameter x 36 in. Mild Steel Tubing", "image": null, "item_code": "Bearing Pipe", @@ -60,7 +72,9 @@ }, { "default_supplier": "New World Realty", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "1/32 in. x 24 in. x 47 in. HDPE Opaque Sheet", "image": null, "item_code": "Wing Sheet", @@ -69,7 +83,9 @@ }, { "default_supplier": "Eagle Hardware", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "3/16 in. x 6 in. x 6 in. Low Carbon Steel Plate", "image": null, "item_code": "Upper Bearing Plate", @@ -78,7 +94,9 @@ }, { "default_supplier": "Asiatic Solutions", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "Bearing Assembly", "image": null, "item_code": "Bearing Assembly", @@ -87,7 +105,9 @@ }, { "default_supplier": "HomeBase", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "3/4 in. x 2 ft. x 4 ft. Pine Plywood", "image": null, "item_code": "Base Plate", @@ -97,7 +117,9 @@ }, { "default_supplier": "Scott Ties", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "N/A", "image": null, "item_code": "Stand", @@ -106,7 +128,9 @@ }, { "default_supplier": "Eagle Hardware", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "1 in. x 3 in. x 1 ft. Multipurpose Al Alloy Bar", "image": null, "item_code": "Bearing Collar", @@ -115,7 +139,9 @@ }, { "default_supplier": "Eagle Hardware", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "1/4 in. x 6 in. x 6 in. Mild Steel Plate", "image": null, "item_code": "Base Bearing Plate", @@ -124,7 +150,9 @@ }, { "default_supplier": "HomeBase", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "15/32 in. x 4 ft. x 8 ft. 3-Ply Rtd Sheathing", "image": null, "item_code": "External Disc", @@ -133,7 +161,9 @@ }, { "default_supplier": "Eagle Hardware", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "1.25 in. Diameter x 6 ft. Mild Steel Tubing", "image": null, "item_code": "Shaft", @@ -142,7 +172,9 @@ }, { "default_supplier": "Ks Merchandise", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "1/2 in. x 2 ft. x 4 ft. Pine Plywood", "image": null, "item_code": "Blade Rib", @@ -151,7 +183,9 @@ }, { "default_supplier": "HomeBase", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "For Bearing Collar", "image": null, "item_code": "Internal Disc", @@ -160,7 +194,9 @@ }, { "default_supplier": null, - "default_warehouse": "Finished Goods", + "item_defaults": [{ + "default_warehouse": "Finished Goods", + }], "description": "Small Wind Turbine for Home Use\n\n\n\n

Size: Small

", "image": "/assets/erpnext_demo/images/wind-turbine-1.jpg", "item_code": "Wind Turbine-S", @@ -177,7 +213,9 @@ }, { "default_supplier": null, - "default_warehouse": "Finished Goods", + "item_defaults": [{ + "default_warehouse": "Finished Goods", + }], "description": "Small Wind Turbine for Home Use\n\n\n\n

Size: Medium

", "image": "/assets/erpnext_demo/images/wind-turbine-1.jpg", "item_code": "Wind Turbine-M", @@ -194,7 +232,9 @@ }, { "default_supplier": null, - "default_warehouse": "Finished Goods", + "item_defaults": [{ + "default_warehouse": "Finished Goods", + }], "description": "Small Wind Turbine for Home Use\n\n\n\n

Size: Large

", "image": "/assets/erpnext_demo/images/wind-turbine-1.jpg", "item_code": "Wind Turbine-L", @@ -218,7 +258,9 @@ }, { "default_supplier": "HomeBase", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "3/4 in. x 2 ft. x 4 ft. Pine Plywood", "image": null, "item_code": "Base Plate Un Painted", @@ -284,7 +326,9 @@ "has_batch_no": 1, "create_new_batch": 1, "valuation_rate": 200, - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + }], "description": "Corrugated Box", "item_code": "Corrugated Box", "item_name": "Corrugated Box", diff --git a/erpnext/demo/data/item_education.json b/erpnext/demo/data/item_education.json index 077fcaacda..40e4701596 100644 --- a/erpnext/demo/data/item_education.json +++ b/erpnext/demo/data/item_education.json @@ -1,63 +1,90 @@ [ { "default_supplier": "Asiatic Solutions", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "item_code": "Books", "item_group": "Raw Material", "item_name": "Books" }, { "default_supplier": "HomeBase", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "item_code": "Pencil", "item_group": "Raw Material", "item_name": "Pencil" }, { "default_supplier": "New World Realty", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "item_code": "Tables", "item_group": "Raw Material", "item_name": "Tables" }, { "default_supplier": "Eagle Hardware", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "item_code": "Chair", "item_group": "Raw Material", "item_name": "Chair" }, { "default_supplier": "Asiatic Solutions", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "item_code": "Black Board", "item_group": "Sub Assemblies", "item_name": "Black Board" }, { "default_supplier": "HomeBase", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "item_code": "Chalk", "item_group": "Raw Material", "item_name": "Chalk" }, { "default_supplier": "HomeBase", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "item_code": "Notepad", "item_group": "Raw Material", "item_name": "Notepad" }, { "default_supplier": "Ks Merchandise", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "item_code": "Uniform", "item_group": "Raw Material", "item_name": "Uniform" }, { "is_stock_item": 0, - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "description": "Computer", "item_code": "Computer", "item_name": "Computer", @@ -65,7 +92,10 @@ }, { "is_stock_item": 0, - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "description": "Mobile", "item_code": "Mobile", "item_name": "Mobile", @@ -73,7 +103,10 @@ }, { "is_stock_item": 0, - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "description": "ERP", "item_code": "ERP", "item_name": "ERP", @@ -81,15 +114,20 @@ }, { "is_stock_item": 0, - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "description": "Autocad", "item_code": "Autocad", "item_name": "Autocad", "item_group": "All Item Groups" }, { - "default_warehouse": "Stores", - "default_warehouse": "Stores", + "item_defaults": [{ + "default_warehouse": "Stores", + "company": "Whitmore College" + }], "item_code": "Service", "item_group": "Services", "item_name": "Service", diff --git a/erpnext/demo/setup/education.py b/erpnext/demo/setup/education.py index 2a894f79d1..0403c06411 100644 --- a/erpnext/demo/setup/education.py +++ b/erpnext/demo/setup/education.py @@ -36,7 +36,8 @@ def setup_item(): item = frappe.new_doc('Item') item.update(i) item.min_order_qty = random.randint(10, 30) - item.default_warehouse = frappe.get_all('Warehouse', filters={'warehouse_name': item.default_warehouse}, limit=1)[0].name + item.item_defaults[0].default_warehouse = frappe.get_all('Warehouse', + filters={'warehouse_name': item.item_defaults[0].default_warehouse}, limit=1)[0].name item.insert() def make_student_applicants(): diff --git a/erpnext/demo/setup/manufacture.py b/erpnext/demo/setup/manufacture.py index 4d8c450d4b..4db510a18d 100644 --- a/erpnext/demo/setup/manufacture.py +++ b/erpnext/demo/setup/manufacture.py @@ -4,6 +4,7 @@ import random, json import frappe from frappe.utils import nowdate, add_days from erpnext.demo.setup.setup_data import import_json +from erpnext.demo.domains import data from six import iteritems @@ -65,10 +66,11 @@ def setup_item(): for i in items: item = frappe.new_doc('Item') item.update(i) - if item.default_warehouse: - warehouse = frappe.get_all('Warehouse', filters={'warehouse_name': item.default_warehouse}, limit=1) + if item.item_defaults[0].default_warehouse: + item.item_defaults[0].company = data.get("Manufacturing").get('company_name') + warehouse = frappe.get_all('Warehouse', filters={'warehouse_name': item.item_defaults[0].default_warehouse}, limit=1) if warehouse: - item.default_warehouse = warehouse[0].name + item.item_defaults[0].default_warehouse = warehouse[0].name item.insert() def setup_product_bundle(): diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index 559bbdf5cd..c09ea1153b 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -544,14 +544,16 @@ def get_bom_items_as_dict(bom, company, qty=1, fetch_exploded=1, fetch_scrap_ite item.image, item.stock_uom, item.allow_alternative_item, - item.default_warehouse, - item.expense_account as expense_account, - item.buying_cost_center as cost_center + item_default.default_warehouse, + item_default.expense_account as expense_account, + item_default.buying_cost_center as cost_center {select_columns} from - `tab{table}` bom_item, `tabBOM` bom, `tabItem` item + `tab{table}` bom_item, `tabBOM` bom, `tabItem` item, `tabItem Default` item_default where bom_item.docstatus < 2 + and item_default.parent = item.name + and item_default.company = %(company)s and bom.name = %(bom)s and bom_item.parent = bom.name and item.name = bom_item.item_code @@ -564,14 +566,14 @@ def get_bom_items_as_dict(bom, company, qty=1, fetch_exploded=1, fetch_scrap_ite query = query.format(table="BOM Explosion Item", where_conditions="", select_columns = ", bom_item.source_warehouse, (Select idx from `tabBOM Item` where item_code = bom_item.item_code and parent = %(parent)s ) as idx") - items = frappe.db.sql(query, { "parent": bom, "qty": qty, "bom": bom }, as_dict=True) + items = frappe.db.sql(query, { "parent": bom, "qty": qty, "bom": bom, "company": company }, as_dict=True) elif fetch_scrap_items: query = query.format(table="BOM Scrap Item", where_conditions="", select_columns=", bom_item.idx") - items = frappe.db.sql(query, { "qty": qty, "bom": bom }, as_dict=True) + items = frappe.db.sql(query, { "qty": qty, "bom": bom, "company": company }, as_dict=True) else: query = query.format(table="BOM Item", where_conditions="", select_columns = ", bom_item.source_warehouse, bom_item.idx") - items = frappe.db.sql(query, { "qty": qty, "bom": bom }, as_dict=True) + items = frappe.db.sql(query, { "qty": qty, "bom": bom, "company": company }, as_dict=True) for item in items: if item.item_code in item_dict: diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index ee64a1670c..006e542e4d 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -293,14 +293,15 @@ class ProductionPlan(Document): for d in frappe.db.sql("""select bei.item_code, item.default_bom as bom, ifnull(sum(bei.stock_qty/ifnull(bom.quantity, 1)), 0) as qty, item.item_name, bei.description, bei.stock_uom, item.min_order_qty, bei.source_warehouse, - item.default_material_request_type, item.min_order_qty, item.default_warehouse + item.default_material_request_type, item.min_order_qty, item_default.default_warehouse from - `tabBOM Explosion Item` bei, `tabBOM` bom, `tabItem` item + `tabBOM Explosion Item` bei, `tabBOM` bom, `tabItem` item, `tabItem Default` item_default where - bom.name = bei.parent and item.name = bei.item_code - and bei.docstatus < 2 and bom.name=%s and item.is_stock_item in (1, {0}) + bom.name = bei.parent and item.name = bei.item_code and bei.docstatus < 2 + and item_default.parent = item.name and item_default.company=%s + and bom.name=%s and item.is_stock_item in (1, {0}) group by bei.item_code, bei.stock_uom""".format(self.include_non_stock_items), - data.bom_no, as_dict=1): + (self.company, data.bom_no), as_dict=1): bom_wise_item_details.setdefault(d.item_code, d) else: bom_wise_item_details = self.get_subitems(data, bom_wise_item_details, data.bom_no, 1) @@ -317,16 +318,18 @@ class ProductionPlan(Document): item.is_sub_contracted_item as is_sub_contracted, bom_item.source_warehouse, item.default_bom as default_bom, bom_item.description as description, bom_item.stock_uom as stock_uom, item.min_order_qty as min_order_qty, - item.default_warehouse + item_default.default_warehouse FROM - `tabBOM Item` bom_item, `tabBOM` bom, tabItem item + `tabBOM Item` bom_item, `tabBOM` bom, tabItem item, `tabItem Default` item_default where bom.name = bom_item.parent and bom.name = %(bom)s and bom_item.docstatus < 2 and bom_item.item_code = item.name + and item.name = item_default.parent and item_default.company = %(company)s and item.is_stock_item in (1, {0}) group by bom_item.item_code""".format(self.include_non_stock_items),{ 'bom': bom_no, - 'parent_qty': parent_qty + 'parent_qty': parent_qty, + 'company': self.company }, as_dict=1) for d in items: diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index a2feddc529..2f177eed41 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -313,8 +313,8 @@ class Company(NestedSet): # clear default accounts, warehouses from item if warehouses: for f in ["default_warehouse", "website_warehouse"]: - frappe.db.sql("""update tabItem set %s=NULL where %s in (%s)""" - % (f, f, ', '.join(['%s']*len(warehouses))), tuple(warehouses)) + frappe.db.sql("""update `tabItem Default` set %s=NULL where company=%s and %s in (%s)""" + % (f, self.name, f, ', '.join(['%s']*len(warehouses))), tuple(warehouses)) frappe.db.sql("""delete from `tabItem Reorder` where warehouse in (%s)""" % ', '.join(['%s']*len(warehouses)), tuple(warehouses)) diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 0289749adf..7dc9a89ce3 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -882,3 +882,14 @@ def check_stock_uom_with_bin(item, stock_uom): if not matched: frappe.throw( _("Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You will need to create a new Item to use a different Default UOM.").format(item)) + +def get_item_details(item, company): + return frappe.db.sql(''' + select + i.item_name, i.description, i.stock_uom, i.name, i.is_stock_item, i.item_code + id.expense_account, id.buying_cost_center, id.warehouse + from + `tabItem` i, `tabItem Default` id + where + i.name = id.parent and i.name = %s and id.company = %s + ''', (item, company), as_dict=1) \ No newline at end of file diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py index 3f0d7fac5e..ee2ca988e1 100644 --- a/erpnext/stock/doctype/item/test_item.py +++ b/erpnext/stock/doctype/item/test_item.py @@ -35,8 +35,9 @@ def make_item(item_code, properties=None): item.update(properties) - if item.is_stock_item and not item.default_warehouse: - item.default_warehouse = "_Test Warehouse - _TC" + if item.is_stock_item: + for item_default in [doc for doc in item.item_defaults if not doc.default_warehouse] + item_default.default_warehouse = "_Test Warehouse - _TC" item.insert() @@ -199,7 +200,12 @@ class TestItem(unittest.TestCase): "increment": 0.5 } ], - "default_warehouse": "_Test Warehouse - _TC", + "item_defaults": [ + { + "default_warehouse": "_Test Warehouse - _TC", + "company": "_Test Company" + } + ] "has_variants": 1 }) @@ -305,5 +311,8 @@ def create_item(item_code, is_stock_item=None, valuation_rate=0, warehouse=None) item.item_group = "All Item Groups" item.is_stock_item = is_stock_item or 1 item.valuation_rate = valuation_rate or 0.0 - item.default_warehouse = warehouse or '_Test Warehouse - _TC' + item.append("item_defaults", { + "default_warehouse": warehouse or '_Test Warehouse - _TC', + "company": "_Test Company" + }) item.save() diff --git a/erpnext/stock/doctype/packed_item/packed_item.py b/erpnext/stock/doctype/packed_item/packed_item.py index 74dfa057aa..7ca5ead20e 100644 --- a/erpnext/stock/doctype/packed_item/packed_item.py +++ b/erpnext/stock/doctype/packed_item/packed_item.py @@ -18,9 +18,10 @@ def get_product_bundle_items(item_code): from `tabProduct Bundle Item` t1, `tabProduct Bundle` t2 where t2.new_item_code=%s and t1.parent = t2.name order by t1.idx""", item_code, as_dict=1) -def get_packing_item_details(item): - return frappe.db.sql("""select item_name, description, stock_uom, default_warehouse from `tabItem` - where name = %s""", item, as_dict = 1)[0] +def get_packing_item_details(item, company): + return frappe.db.sql("""select i.item_name, i.description, i.stock_uom, id.default_warehouse + from `tabItem` i, `tabItem Default` id where id.parent=i.name and i.name = %s and id.company""", + (item, company), as_dict = 1)[0] def get_bin_qty(item, warehouse): det = frappe.db.sql("""select actual_qty, projected_qty from `tabBin` @@ -28,12 +29,13 @@ def get_bin_qty(item, warehouse): return det and det[0] or frappe._dict() def update_packing_list_item(doc, packing_item_code, qty, main_item_row, description): - item = get_packing_item_details(packing_item_code) + item = get_packing_item_details(packing_item_code, doc.company) # check if exists exists = 0 for d in doc.get("packed_items"): - if d.parent_item == main_item_row.item_code and d.item_code == packing_item_code and d.parent_detail_docname == main_item_row.name and d.description == description: + if d.parent_item == main_item_row.item_code and d.item_code == packing_item_code and\ + d.parent_detail_docname == main_item_row.name and d.description == description: pi, exists = d, 1 break diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 233138f0c7..49a278ca8a 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -10,6 +10,7 @@ from erpnext.stock.utils import get_incoming_rate from erpnext.stock.stock_ledger import get_previous_sle, NegativeStockError, get_valuation_rate from erpnext.stock.get_item_details import get_bin_details, get_default_cost_center, get_conversion_factor from erpnext.stock.doctype.batch.batch import get_batch_no, set_batch_nos, get_batch_qty +from erpnext.stock.doctype.item.item import get_item_details from erpnext.manufacturing.doctype.bom.bom import validate_bom_no from erpnext.stock.utils import get_bin import json @@ -716,8 +717,7 @@ class StockEntry(StockController): item_code = frappe.db.get_value("BOM", self.bom_no, "item") to_warehouse = self.to_warehouse - item = frappe.db.get_value("Item", item_code, ["item_name", - "description", "stock_uom", "expense_account", "buying_cost_center", "name", "default_warehouse"], as_dict=1) + item = get_item_details(item_code, self.company) if not self.work_order and not to_warehouse: # in case of BOM @@ -782,8 +782,8 @@ class StockEntry(StockController): for item in wo_items: qty = item.required_qty - item_account_details = frappe.db.get_value("Item", item.item_code, ["item_name", - "description", "stock_uom", "expense_account", "buying_cost_center", "name", "default_warehouse"], as_dict=1) + + item_account_details = get_item_details(item.item_code, self.company) # Take into account consumption if there are any. if self.purpose == 'Manufacture': req_qty_each = flt(item.required_qty / wo.qty) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js index 3342768261..ce32e01d33 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js @@ -49,7 +49,8 @@ frappe.ui.form.on("Stock Reconciliation", { args: { warehouse: data.warehouse, posting_date: frm.doc.posting_date, - posting_time: frm.doc.posting_time + posting_time: frm.doc.posting_time, + company:frm.doc.company }, callback: function(r) { var items = []; diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index 938173deb8..e4342339e0 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -268,12 +268,12 @@ class StockReconciliation(StockController): self._cancel() @frappe.whitelist() -def get_items(warehouse, posting_date, posting_time): +def get_items(warehouse, posting_date, posting_time, company): items = frappe.get_list("Bin", fields=["item_code"], filters={"warehouse": warehouse}, as_list=1) - items += frappe.get_list("Item", fields=["name"], filters= {"is_stock_item": 1, "has_serial_no": 0, - "has_batch_no": 0, "has_variants": 0, "disabled": 0, "default_warehouse": warehouse}, - as_list=1) + items += frappe.db.sql_list('''select i.name from `tabItem` i, `tabItem Default` id where i.name = id.parent + and i.is_stock_item=1 and i.has_serial_no=0 and i.has_batch_no=0 and i.has_variants=0 and i.disabled=0 + and id.default_warehouse=%s and id.company=%s''', (warehouse, company)) res = [] for item in set(items): diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index b33656570d..0351364d83 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -11,6 +11,8 @@ from erpnext.setup.utils import get_exchange_rate from frappe.model.meta import get_field_precision from erpnext.stock.doctype.batch.batch import get_batch_no from erpnext import get_company_currency +from erpnext.stock.doctype.item.item import get_item_details + from six import string_types, iteritems @@ -52,7 +54,7 @@ def get_item_details(args): for bundle_item in bundled_items.items: valuation_rate += \ - flt(get_valuation_rate(bundle_item.item_code, out.get("warehouse")).get("valuation_rate") \ + flt(get_valuation_rate(bundle_item.item_code, args.company, out.get("warehouse")).get("valuation_rate") \ * bundle_item.qty) out.update({ @@ -60,7 +62,7 @@ def get_item_details(args): }) else: - out.update(get_valuation_rate(args.item_code, out.get("warehouse"))) + out.update(get_valuation_rate(args.item_code, args.company, out.get("warehouse"))) get_price_list_rate(args, item_doc, out) @@ -203,8 +205,10 @@ def get_basic_details(args, item): user_default_warehouse_list = get_user_default_as_list('Warehouse') user_default_warehouse = user_default_warehouse_list[0] \ if len(user_default_warehouse_list) == 1 else "" - - warehouse = user_default_warehouse or item.default_warehouse or args.warehouse + + item_default_warehouse = [default.default_warehouse for default in item.item_defaults if default.company == args.company] + item_default_warehouse = item_default_warehouse[0] if item_default_warehouse else None + warehouse = user_default_warehouse or item_default_warehouse or args.warehouse material_request_type = '' if args.get('doctype') == "Material Request": @@ -677,8 +681,9 @@ def get_default_bom(item_code=None): if bom: return bom -def get_valuation_rate(item_code, warehouse=None): - item = frappe.get_doc("Item", item_code) +def get_valuation_rate(item_code, company, warehouse=None): + item = get_item_details(item_code, company) + # item = frappe.get_doc("Item", item_code) if item.is_stock_item: if not warehouse: warehouse = item.default_warehouse diff --git a/erpnext/utilities/user_progress_utils.py b/erpnext/utilities/user_progress_utils.py index 20e533e91a..0377a0a1f1 100644 --- a/erpnext/utilities/user_progress_utils.py +++ b/erpnext/utilities/user_progress_utils.py @@ -110,7 +110,10 @@ def create_items(args_data): "is_stock_item": 1, "item_group": _("Products"), "stock_uom": _(args.get("item_uom_" + str(i))), - "default_warehouse": default_warehouse + "item_defaults": [{ + "default_warehouse": default_warehouse, + "company": defaults.get("company_name") + }] }).insert() except frappe.NameError: From 0b628386dea7004d8b6a1eb45dea67031418ece0 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 16 May 2018 12:50:10 +0530 Subject: [PATCH 07/36] [minor] remove in_dialog old property --- erpnext/accounts/doctype/budget_account/budget_account.json | 2 +- .../doctype/c_form_invoice_detail/c_form_invoice_detail.json | 2 +- .../doctype/cheque_print_template/cheque_print_template.json | 2 +- .../doctype/fiscal_year_company/fiscal_year_company.json | 2 +- erpnext/accounts/doctype/mode_of_payment/mode_of_payment.json | 2 +- .../doctype/monthly_distribution/monthly_distribution.json | 2 +- .../monthly_distribution_percentage.json | 2 +- erpnext/accounts/doctype/party_account/party_account.json | 2 +- .../payment_entry_deduction/payment_entry_deduction.json | 2 +- .../payment_gateway_account/payment_gateway_account.json | 2 +- .../doctype/payment_reconciliation/payment_reconciliation.json | 2 +- .../payment_reconciliation_invoice.json | 2 +- .../payment_reconciliation_payment.json | 2 +- .../accounts/doctype/pos_customer_group/pos_customer_group.json | 2 +- erpnext/accounts/doctype/pos_item_group/pos_item_group.json | 2 +- .../purchase_invoice_advance/purchase_invoice_advance.json | 2 +- .../purchase_taxes_and_charges_template.json | 2 +- .../salary_component_account/salary_component_account.json | 2 +- .../doctype/sales_invoice_advance/sales_invoice_advance.json | 2 +- .../sales_invoice_timesheet/sales_invoice_timesheet.json | 2 +- .../sales_taxes_and_charges_template.json | 2 +- .../shipping_rule_condition/shipping_rule_condition.json | 2 +- .../doctype/shipping_rule_country/shipping_rule_country.json | 2 +- .../request_for_quotation_item/request_for_quotation_item.json | 2 +- erpnext/crm/doctype/opportunity_item/opportunity_item.json | 2 +- erpnext/hr/doctype/appraisal_goal/appraisal_goal.json | 2 +- erpnext/hr/doctype/appraisal_template/appraisal_template.json | 2 +- .../appraisal_template_goal/appraisal_template_goal.json | 2 +- erpnext/hr/doctype/branch/branch.json | 2 +- erpnext/hr/doctype/designation/designation.json | 2 +- .../employee_attendance_tool/employee_attendance_tool.json | 2 +- erpnext/hr/doctype/employee_education/employee_education.json | 2 +- .../employee_external_work_history.json | 2 +- .../employee_internal_work_history.json | 2 +- erpnext/hr/doctype/employment_type/employment_type.json | 2 +- .../hr/doctype/expense_claim_account/expense_claim_account.json | 2 +- erpnext/hr/doctype/expense_claim_type/expense_claim_type.json | 2 +- erpnext/hr/doctype/holiday/holiday.json | 2 +- erpnext/hr/doctype/interest/interest.json | 2 +- erpnext/hr/doctype/job_applicant/job_applicant.json | 2 +- erpnext/hr/doctype/leave_block_list/leave_block_list.json | 2 +- .../doctype/leave_block_list_allow/leave_block_list_allow.json | 2 +- .../hr/doctype/leave_block_list_date/leave_block_list_date.json | 2 +- erpnext/hr/doctype/offer_term/offer_term.json | 2 +- .../hr/doctype/salary_slip_timesheet/salary_slip_timesheet.json | 2 +- .../salary_structure_employee/salary_structure_employee.json | 2 +- erpnext/hr/doctype/training_feedback/training_feedback.json | 2 +- .../training_result_employee/training_result_employee.json | 2 +- erpnext/hr/doctype/vehicle_service/vehicle_service.json | 2 +- .../maintenance_schedule_detail.json | 2 +- .../maintenance_visit_purpose/maintenance_visit_purpose.json | 2 +- .../doctype/bom_website_item/bom_website_item.json | 2 +- .../doctype/bom_website_operation/bom_website_operation.json | 2 +- erpnext/manufacturing/doctype/operation/operation.json | 2 +- .../workstation_working_hour/workstation_working_hour.json | 2 +- erpnext/portal/doctype/homepage/homepage.json | 1 - .../homepage_featured_product/homepage_featured_product.json | 2 +- erpnext/projects/doctype/activity_cost/activity_cost.json | 2 +- erpnext/projects/doctype/dependent_task/dependent_task.json | 2 +- erpnext/projects/doctype/project_user/project_user.json | 2 +- erpnext/projects/doctype/task_depends_on/task_depends_on.json | 2 +- erpnext/selling/doctype/industry_type/industry_type.json | 2 +- .../doctype/installation_note_item/installation_note_item.json | 2 +- erpnext/selling/doctype/lead_source/lead_source.json | 2 +- .../doctype/product_bundle_item/product_bundle_item.json | 2 +- erpnext/selling/doctype/sales_team/sales_team.json | 2 +- .../doctype/authorization_control/authorization_control.json | 2 +- .../setup/doctype/authorization_rule/authorization_rule.json | 2 +- erpnext/setup/doctype/brand/brand.json | 2 +- erpnext/setup/doctype/customer_group/customer_group.json | 2 +- erpnext/setup/doctype/email_digest/email_digest.json | 2 +- erpnext/setup/doctype/global_defaults/global_defaults.json | 2 +- erpnext/setup/doctype/item_group/item_group.json | 2 +- erpnext/setup/doctype/print_heading/print_heading.json | 2 +- .../doctype/quotation_lost_reason/quotation_lost_reason.json | 2 +- erpnext/setup/doctype/sales_partner/sales_partner.json | 2 +- erpnext/setup/doctype/sales_person/sales_person.json | 2 +- erpnext/setup/doctype/target_detail/target_detail.json | 2 +- .../doctype/terms_and_conditions/terms_and_conditions.json | 2 +- erpnext/setup/doctype/territory/territory.json | 2 +- erpnext/setup/doctype/uom/uom.json | 2 +- .../setup/doctype/website_item_group/website_item_group.json | 2 +- erpnext/stock/doctype/item_attribute/item_attribute.json | 2 +- .../doctype/item_attribute_value/item_attribute_value.json | 2 +- .../item_quality_inspection_parameter.json | 2 +- erpnext/stock/doctype/item_reorder/item_reorder.json | 2 +- erpnext/stock/doctype/item_supplier/item_supplier.json | 2 +- erpnext/stock/doctype/item_tax/item_tax.json | 2 +- erpnext/stock/doctype/item_variant/item_variant.json | 2 +- .../item_website_specification/item_website_specification.json | 2 +- .../landed_cost_purchase_receipt.json | 2 +- erpnext/stock/doctype/packed_item/packed_item.json | 2 +- erpnext/stock/doctype/packing_slip_item/packing_slip_item.json | 2 +- .../stock/doctype/price_list_country/price_list_country.json | 2 +- .../quality_inspection_reading/quality_inspection_reading.json | 2 +- .../stock/doctype/stock_ledger_entry/stock_ledger_entry.json | 2 +- .../doctype/uom_conversion_detail/uom_conversion_detail.json | 2 +- erpnext/support/doctype/support_settings/support_settings.json | 2 +- erpnext/utilities/doctype/rename_tool/rename_tool.json | 2 +- erpnext/utilities/doctype/sms_log/sms_log.json | 2 +- 100 files changed, 99 insertions(+), 100 deletions(-) diff --git a/erpnext/accounts/doctype/budget_account/budget_account.json b/erpnext/accounts/doctype/budget_account/budget_account.json index 172e092c7c..ead07614a7 100644 --- a/erpnext/accounts/doctype/budget_account/budget_account.json +++ b/erpnext/accounts/doctype/budget_account/budget_account.json @@ -73,7 +73,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.json b/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.json index e78620e64c..9da4411874 100644 --- a/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.json +++ b/erpnext/accounts/doctype/c_form_invoice_detail/c_form_invoice_detail.json @@ -150,7 +150,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.json b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.json index 51da9c0542..e9993c3426 100644 --- a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.json +++ b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.json @@ -1020,7 +1020,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/accounts/doctype/fiscal_year_company/fiscal_year_company.json b/erpnext/accounts/doctype/fiscal_year_company/fiscal_year_company.json index 4e568f173a..3eb0d74ed3 100644 --- a/erpnext/accounts/doctype/fiscal_year_company/fiscal_year_company.json +++ b/erpnext/accounts/doctype/fiscal_year_company/fiscal_year_company.json @@ -42,7 +42,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.json b/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.json index 8b03e2e01b..9609e3d08b 100644 --- a/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.json +++ b/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.json @@ -109,7 +109,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.json b/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.json index 2340340d1d..14f2d80250 100644 --- a/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.json +++ b/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.json @@ -109,7 +109,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/accounts/doctype/monthly_distribution_percentage/monthly_distribution_percentage.json b/erpnext/accounts/doctype/monthly_distribution_percentage/monthly_distribution_percentage.json index 373d09065c..8c9fc5e5f4 100644 --- a/erpnext/accounts/doctype/monthly_distribution_percentage/monthly_distribution_percentage.json +++ b/erpnext/accounts/doctype/monthly_distribution_percentage/monthly_distribution_percentage.json @@ -68,7 +68,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/party_account/party_account.json b/erpnext/accounts/doctype/party_account/party_account.json index a83bb26414..aa32d95373 100644 --- a/erpnext/accounts/doctype/party_account/party_account.json +++ b/erpnext/accounts/doctype/party_account/party_account.json @@ -66,7 +66,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/payment_entry_deduction/payment_entry_deduction.json b/erpnext/accounts/doctype/payment_entry_deduction/payment_entry_deduction.json index 10e147ed08..d69a5eb011 100644 --- a/erpnext/accounts/doctype/payment_entry_deduction/payment_entry_deduction.json +++ b/erpnext/accounts/doctype/payment_entry_deduction/payment_entry_deduction.json @@ -93,7 +93,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.json b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.json index bf18fcad53..24b366cb44 100644 --- a/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.json +++ b/erpnext/accounts/doctype/payment_gateway_account/payment_gateway_account.json @@ -220,7 +220,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json index fc4edae02a..b211b500a1 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json +++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json @@ -391,7 +391,7 @@ "icon": "fa fa-resize-horizontal", "idx": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 1, "istable": 0, diff --git a/erpnext/accounts/doctype/payment_reconciliation_invoice/payment_reconciliation_invoice.json b/erpnext/accounts/doctype/payment_reconciliation_invoice/payment_reconciliation_invoice.json index ab8761aa7e..ce7ce98edb 100644 --- a/erpnext/accounts/doctype/payment_reconciliation_invoice/payment_reconciliation_invoice.json +++ b/erpnext/accounts/doctype/payment_reconciliation_invoice/payment_reconciliation_invoice.json @@ -162,7 +162,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/payment_reconciliation_payment/payment_reconciliation_payment.json b/erpnext/accounts/doctype/payment_reconciliation_payment/payment_reconciliation_payment.json index 57fce65643..ba6f100493 100644 --- a/erpnext/accounts/doctype/payment_reconciliation_payment/payment_reconciliation_payment.json +++ b/erpnext/accounts/doctype/payment_reconciliation_payment/payment_reconciliation_payment.json @@ -318,7 +318,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/pos_customer_group/pos_customer_group.json b/erpnext/accounts/doctype/pos_customer_group/pos_customer_group.json index 4f6a675fb6..3ad450ba69 100644 --- a/erpnext/accounts/doctype/pos_customer_group/pos_customer_group.json +++ b/erpnext/accounts/doctype/pos_customer_group/pos_customer_group.json @@ -45,7 +45,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/pos_item_group/pos_item_group.json b/erpnext/accounts/doctype/pos_item_group/pos_item_group.json index b278765234..860c4492ba 100644 --- a/erpnext/accounts/doctype/pos_item_group/pos_item_group.json +++ b/erpnext/accounts/doctype/pos_item_group/pos_item_group.json @@ -45,7 +45,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/purchase_invoice_advance/purchase_invoice_advance.json b/erpnext/accounts/doctype/purchase_invoice_advance/purchase_invoice_advance.json index 49582a4ed5..5801b17f66 100644 --- a/erpnext/accounts/doctype/purchase_invoice_advance/purchase_invoice_advance.json +++ b/erpnext/accounts/doctype/purchase_invoice_advance/purchase_invoice_advance.json @@ -215,7 +215,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.json b/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.json index 50426dfb81..bc42630d47 100644 --- a/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.json +++ b/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.json @@ -217,7 +217,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/accounts/doctype/salary_component_account/salary_component_account.json b/erpnext/accounts/doctype/salary_component_account/salary_component_account.json index 6ba820eff2..23dc6c47e8 100644 --- a/erpnext/accounts/doctype/salary_component_account/salary_component_account.json +++ b/erpnext/accounts/doctype/salary_component_account/salary_component_account.json @@ -71,7 +71,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/sales_invoice_advance/sales_invoice_advance.json b/erpnext/accounts/doctype/sales_invoice_advance/sales_invoice_advance.json index dbbe368671..14bf4d8133 100644 --- a/erpnext/accounts/doctype/sales_invoice_advance/sales_invoice_advance.json +++ b/erpnext/accounts/doctype/sales_invoice_advance/sales_invoice_advance.json @@ -215,7 +215,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json b/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json index a0a63121a0..50eed241d4 100644 --- a/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json +++ b/erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json @@ -134,7 +134,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.json b/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.json index 894d5ab7ee..29e15d165f 100644 --- a/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.json +++ b/erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.json @@ -216,7 +216,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/accounts/doctype/shipping_rule_condition/shipping_rule_condition.json b/erpnext/accounts/doctype/shipping_rule_condition/shipping_rule_condition.json index a6df2ac965..0a06f57405 100644 --- a/erpnext/accounts/doctype/shipping_rule_condition/shipping_rule_condition.json +++ b/erpnext/accounts/doctype/shipping_rule_condition/shipping_rule_condition.json @@ -89,7 +89,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/accounts/doctype/shipping_rule_country/shipping_rule_country.json b/erpnext/accounts/doctype/shipping_rule_country/shipping_rule_country.json index fe28fcb7bb..46fd37752b 100644 --- a/erpnext/accounts/doctype/shipping_rule_country/shipping_rule_country.json +++ b/erpnext/accounts/doctype/shipping_rule_country/shipping_rule_country.json @@ -42,7 +42,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json b/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json index a7ae8a6c2a..6833a4af70 100644 --- a/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json +++ b/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json @@ -715,7 +715,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/crm/doctype/opportunity_item/opportunity_item.json b/erpnext/crm/doctype/opportunity_item/opportunity_item.json index 0845d42abf..ee7c1e3b2a 100644 --- a/erpnext/crm/doctype/opportunity_item/opportunity_item.json +++ b/erpnext/crm/doctype/opportunity_item/opportunity_item.json @@ -407,7 +407,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/appraisal_goal/appraisal_goal.json b/erpnext/hr/doctype/appraisal_goal/appraisal_goal.json index 49fe105cb1..f22969b7c1 100644 --- a/erpnext/hr/doctype/appraisal_goal/appraisal_goal.json +++ b/erpnext/hr/doctype/appraisal_goal/appraisal_goal.json @@ -202,7 +202,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/appraisal_template/appraisal_template.json b/erpnext/hr/doctype/appraisal_template/appraisal_template.json index 97402ac3d6..ac6e400e09 100644 --- a/erpnext/hr/doctype/appraisal_template/appraisal_template.json +++ b/erpnext/hr/doctype/appraisal_template/appraisal_template.json @@ -108,7 +108,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.json b/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.json index d11ec64a55..34ea5d8225 100644 --- a/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.json +++ b/erpnext/hr/doctype/appraisal_template_goal/appraisal_template_goal.json @@ -73,7 +73,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/branch/branch.json b/erpnext/hr/doctype/branch/branch.json index 609456c4fe..221b52267e 100644 --- a/erpnext/hr/doctype/branch/branch.json +++ b/erpnext/hr/doctype/branch/branch.json @@ -44,7 +44,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/hr/doctype/designation/designation.json b/erpnext/hr/doctype/designation/designation.json index 9315cfd6b8..1d4a3cf7b7 100644 --- a/erpnext/hr/doctype/designation/designation.json +++ b/erpnext/hr/doctype/designation/designation.json @@ -77,7 +77,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.json b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.json index f31bcf8e99..256e056ec1 100644 --- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.json +++ b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.json @@ -235,7 +235,7 @@ "hide_toolbar": 1, "idx": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 1, "istable": 0, diff --git a/erpnext/hr/doctype/employee_education/employee_education.json b/erpnext/hr/doctype/employee_education/employee_education.json index e41c6ca943..ef216e3703 100644 --- a/erpnext/hr/doctype/employee_education/employee_education.json +++ b/erpnext/hr/doctype/employee_education/employee_education.json @@ -174,7 +174,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/employee_external_work_history/employee_external_work_history.json b/erpnext/hr/doctype/employee_external_work_history/employee_external_work_history.json index fcabbbc295..f357b20227 100644 --- a/erpnext/hr/doctype/employee_external_work_history/employee_external_work_history.json +++ b/erpnext/hr/doctype/employee_external_work_history/employee_external_work_history.json @@ -172,7 +172,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/employee_internal_work_history/employee_internal_work_history.json b/erpnext/hr/doctype/employee_internal_work_history/employee_internal_work_history.json index 3d277afc25..98632b6b25 100644 --- a/erpnext/hr/doctype/employee_internal_work_history/employee_internal_work_history.json +++ b/erpnext/hr/doctype/employee_internal_work_history/employee_internal_work_history.json @@ -148,7 +148,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/employment_type/employment_type.json b/erpnext/hr/doctype/employment_type/employment_type.json index da84ce43f3..9dcae3c230 100644 --- a/erpnext/hr/doctype/employment_type/employment_type.json +++ b/erpnext/hr/doctype/employment_type/employment_type.json @@ -48,7 +48,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/hr/doctype/expense_claim_account/expense_claim_account.json b/erpnext/hr/doctype/expense_claim_account/expense_claim_account.json index a2bbe0b86f..c7d71d31c1 100644 --- a/erpnext/hr/doctype/expense_claim_account/expense_claim_account.json +++ b/erpnext/hr/doctype/expense_claim_account/expense_claim_account.json @@ -68,7 +68,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.json b/erpnext/hr/doctype/expense_claim_type/expense_claim_type.json index f59111af78..b60ba5f48a 100644 --- a/erpnext/hr/doctype/expense_claim_type/expense_claim_type.json +++ b/erpnext/hr/doctype/expense_claim_type/expense_claim_type.json @@ -101,7 +101,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/hr/doctype/holiday/holiday.json b/erpnext/hr/doctype/holiday/holiday.json index cc65631738..6498530eb1 100644 --- a/erpnext/hr/doctype/holiday/holiday.json +++ b/erpnext/hr/doctype/holiday/holiday.json @@ -68,7 +68,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/interest/interest.json b/erpnext/hr/doctype/interest/interest.json index 955c40f54d..d6d2342ab6 100644 --- a/erpnext/hr/doctype/interest/interest.json +++ b/erpnext/hr/doctype/interest/interest.json @@ -42,7 +42,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.json b/erpnext/hr/doctype/job_applicant/job_applicant.json index 2a97f2804b..dc8d82c082 100644 --- a/erpnext/hr/doctype/job_applicant/job_applicant.json +++ b/erpnext/hr/doctype/job_applicant/job_applicant.json @@ -249,7 +249,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/hr/doctype/leave_block_list/leave_block_list.json b/erpnext/hr/doctype/leave_block_list/leave_block_list.json index 16dbda8898..fdb975ba85 100644 --- a/erpnext/hr/doctype/leave_block_list/leave_block_list.json +++ b/erpnext/hr/doctype/leave_block_list/leave_block_list.json @@ -207,7 +207,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.json b/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.json index fbc2991345..fe10c7823c 100644 --- a/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.json +++ b/erpnext/hr/doctype/leave_block_list_allow/leave_block_list_allow.json @@ -42,7 +42,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.json b/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.json index 1d0ac01c4b..dbb903969f 100644 --- a/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.json +++ b/erpnext/hr/doctype/leave_block_list_date/leave_block_list_date.json @@ -67,7 +67,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/offer_term/offer_term.json b/erpnext/hr/doctype/offer_term/offer_term.json index cb059a130c..3b7bd4250d 100644 --- a/erpnext/hr/doctype/offer_term/offer_term.json +++ b/erpnext/hr/doctype/offer_term/offer_term.json @@ -42,7 +42,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/hr/doctype/salary_slip_timesheet/salary_slip_timesheet.json b/erpnext/hr/doctype/salary_slip_timesheet/salary_slip_timesheet.json index 52f829e8b5..7a9393c332 100644 --- a/erpnext/hr/doctype/salary_slip_timesheet/salary_slip_timesheet.json +++ b/erpnext/hr/doctype/salary_slip_timesheet/salary_slip_timesheet.json @@ -67,7 +67,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/salary_structure_employee/salary_structure_employee.json b/erpnext/hr/doctype/salary_structure_employee/salary_structure_employee.json index 0e238d3233..6c7a61cabb 100644 --- a/erpnext/hr/doctype/salary_structure_employee/salary_structure_employee.json +++ b/erpnext/hr/doctype/salary_structure_employee/salary_structure_employee.json @@ -194,7 +194,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/training_feedback/training_feedback.json b/erpnext/hr/doctype/training_feedback/training_feedback.json index ece6ed1d90..80c1005223 100644 --- a/erpnext/hr/doctype/training_feedback/training_feedback.json +++ b/erpnext/hr/doctype/training_feedback/training_feedback.json @@ -309,7 +309,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 1, "issingle": 0, "istable": 0, diff --git a/erpnext/hr/doctype/training_result_employee/training_result_employee.json b/erpnext/hr/doctype/training_result_employee/training_result_employee.json index 477a8e6b2d..c5e791a2c9 100644 --- a/erpnext/hr/doctype/training_result_employee/training_result_employee.json +++ b/erpnext/hr/doctype/training_result_employee/training_result_employee.json @@ -233,7 +233,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/hr/doctype/vehicle_service/vehicle_service.json b/erpnext/hr/doctype/vehicle_service/vehicle_service.json index 635a0b6339..7d9d0df44c 100644 --- a/erpnext/hr/doctype/vehicle_service/vehicle_service.json +++ b/erpnext/hr/doctype/vehicle_service/vehicle_service.json @@ -131,7 +131,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/maintenance/doctype/maintenance_schedule_detail/maintenance_schedule_detail.json b/erpnext/maintenance/doctype/maintenance_schedule_detail/maintenance_schedule_detail.json index 0a7443671d..7cd3086155 100644 --- a/erpnext/maintenance/doctype/maintenance_schedule_detail/maintenance_schedule_detail.json +++ b/erpnext/maintenance/doctype/maintenance_schedule_detail/maintenance_schedule_detail.json @@ -202,7 +202,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.json b/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.json index e55f562dd0..d2a0ffa84a 100644 --- a/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.json +++ b/erpnext/maintenance/doctype/maintenance_visit_purpose/maintenance_visit_purpose.json @@ -328,7 +328,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/manufacturing/doctype/bom_website_item/bom_website_item.json b/erpnext/manufacturing/doctype/bom_website_item/bom_website_item.json index 7df728b1cd..b6e20afa04 100644 --- a/erpnext/manufacturing/doctype/bom_website_item/bom_website_item.json +++ b/erpnext/manufacturing/doctype/bom_website_item/bom_website_item.json @@ -154,7 +154,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/manufacturing/doctype/bom_website_operation/bom_website_operation.json b/erpnext/manufacturing/doctype/bom_website_operation/bom_website_operation.json index 8f28dd7c45..3fad2efc0a 100644 --- a/erpnext/manufacturing/doctype/bom_website_operation/bom_website_operation.json +++ b/erpnext/manufacturing/doctype/bom_website_operation/bom_website_operation.json @@ -154,7 +154,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/manufacturing/doctype/operation/operation.json b/erpnext/manufacturing/doctype/operation/operation.json index 69eb449865..c231fba2fa 100644 --- a/erpnext/manufacturing/doctype/operation/operation.json +++ b/erpnext/manufacturing/doctype/operation/operation.json @@ -103,7 +103,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/manufacturing/doctype/workstation_working_hour/workstation_working_hour.json b/erpnext/manufacturing/doctype/workstation_working_hour/workstation_working_hour.json index 89ca7145b8..a79182fb31 100644 --- a/erpnext/manufacturing/doctype/workstation_working_hour/workstation_working_hour.json +++ b/erpnext/manufacturing/doctype/workstation_working_hour/workstation_working_hour.json @@ -129,7 +129,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/portal/doctype/homepage/homepage.json b/erpnext/portal/doctype/homepage/homepage.json index e0e47d11f8..81433b1c5d 100644 --- a/erpnext/portal/doctype/homepage/homepage.json +++ b/erpnext/portal/doctype/homepage/homepage.json @@ -199,7 +199,6 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 1, "istable": 0, diff --git a/erpnext/portal/doctype/homepage_featured_product/homepage_featured_product.json b/erpnext/portal/doctype/homepage_featured_product/homepage_featured_product.json index 870c8b194a..c8b4ae9b74 100644 --- a/erpnext/portal/doctype/homepage_featured_product/homepage_featured_product.json +++ b/erpnext/portal/doctype/homepage_featured_product/homepage_featured_product.json @@ -280,7 +280,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/projects/doctype/activity_cost/activity_cost.json b/erpnext/projects/doctype/activity_cost/activity_cost.json index 9d812dd3bb..78a66c4fef 100644 --- a/erpnext/projects/doctype/activity_cost/activity_cost.json +++ b/erpnext/projects/doctype/activity_cost/activity_cost.json @@ -274,7 +274,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/projects/doctype/dependent_task/dependent_task.json b/erpnext/projects/doctype/dependent_task/dependent_task.json index 18e6c0d478..e00a2b287a 100644 --- a/erpnext/projects/doctype/dependent_task/dependent_task.json +++ b/erpnext/projects/doctype/dependent_task/dependent_task.json @@ -43,7 +43,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/projects/doctype/project_user/project_user.json b/erpnext/projects/doctype/project_user/project_user.json index ea5758953d..a7cc810a0a 100644 --- a/erpnext/projects/doctype/project_user/project_user.json +++ b/erpnext/projects/doctype/project_user/project_user.json @@ -67,7 +67,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/projects/doctype/task_depends_on/task_depends_on.json b/erpnext/projects/doctype/task_depends_on/task_depends_on.json index 25657afa92..dbbe9d3c7b 100644 --- a/erpnext/projects/doctype/task_depends_on/task_depends_on.json +++ b/erpnext/projects/doctype/task_depends_on/task_depends_on.json @@ -133,7 +133,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/selling/doctype/industry_type/industry_type.json b/erpnext/selling/doctype/industry_type/industry_type.json index 027626ca42..f4fcae428e 100644 --- a/erpnext/selling/doctype/industry_type/industry_type.json +++ b/erpnext/selling/doctype/industry_type/industry_type.json @@ -44,7 +44,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/selling/doctype/installation_note_item/installation_note_item.json b/erpnext/selling/doctype/installation_note_item/installation_note_item.json index 17bf278827..79bcf105af 100644 --- a/erpnext/selling/doctype/installation_note_item/installation_note_item.json +++ b/erpnext/selling/doctype/installation_note_item/installation_note_item.json @@ -238,7 +238,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/selling/doctype/lead_source/lead_source.json b/erpnext/selling/doctype/lead_source/lead_source.json index e677915875..868f6d11d0 100644 --- a/erpnext/selling/doctype/lead_source/lead_source.json +++ b/erpnext/selling/doctype/lead_source/lead_source.json @@ -69,7 +69,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/selling/doctype/product_bundle_item/product_bundle_item.json b/erpnext/selling/doctype/product_bundle_item/product_bundle_item.json index d31b5fb18f..38f51dead4 100644 --- a/erpnext/selling/doctype/product_bundle_item/product_bundle_item.json +++ b/erpnext/selling/doctype/product_bundle_item/product_bundle_item.json @@ -169,7 +169,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/selling/doctype/sales_team/sales_team.json b/erpnext/selling/doctype/sales_team/sales_team.json index fcd61a1967..c77f9f4b2b 100644 --- a/erpnext/selling/doctype/sales_team/sales_team.json +++ b/erpnext/selling/doctype/sales_team/sales_team.json @@ -157,7 +157,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/setup/doctype/authorization_control/authorization_control.json b/erpnext/setup/doctype/authorization_control/authorization_control.json index 43afc0610d..823ff26f5b 100644 --- a/erpnext/setup/doctype/authorization_control/authorization_control.json +++ b/erpnext/setup/doctype/authorization_control/authorization_control.json @@ -11,7 +11,7 @@ "hide_toolbar": 0, "idx": 1, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 1, "istable": 0, diff --git a/erpnext/setup/doctype/authorization_rule/authorization_rule.json b/erpnext/setup/doctype/authorization_rule/authorization_rule.json index 70047bc4de..56df330795 100644 --- a/erpnext/setup/doctype/authorization_rule/authorization_rule.json +++ b/erpnext/setup/doctype/authorization_rule/authorization_rule.json @@ -558,7 +558,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/brand/brand.json b/erpnext/setup/doctype/brand/brand.json index 8d4ba74628..064eff6e52 100644 --- a/erpnext/setup/doctype/brand/brand.json +++ b/erpnext/setup/doctype/brand/brand.json @@ -79,7 +79,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/customer_group/customer_group.json b/erpnext/setup/doctype/customer_group/customer_group.json index 062a49a9ad..3392c6c4f0 100644 --- a/erpnext/setup/doctype/customer_group/customer_group.json +++ b/erpnext/setup/doctype/customer_group/customer_group.json @@ -379,7 +379,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/email_digest/email_digest.json b/erpnext/setup/doctype/email_digest/email_digest.json index a75a59a058..12f275c75d 100644 --- a/erpnext/setup/doctype/email_digest/email_digest.json +++ b/erpnext/setup/doctype/email_digest/email_digest.json @@ -1073,7 +1073,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/global_defaults/global_defaults.json b/erpnext/setup/doctype/global_defaults/global_defaults.json index ce3f2cf1ea..a6c59649e8 100644 --- a/erpnext/setup/doctype/global_defaults/global_defaults.json +++ b/erpnext/setup/doctype/global_defaults/global_defaults.json @@ -225,7 +225,7 @@ "icon": "fa fa-cog", "idx": 1, "in_create": 1, - "in_dialog": 0, + "is_submittable": 0, "is_transaction_doc": 0, "issingle": 1, diff --git a/erpnext/setup/doctype/item_group/item_group.json b/erpnext/setup/doctype/item_group/item_group.json index 6230706aff..29486b2d1c 100644 --- a/erpnext/setup/doctype/item_group/item_group.json +++ b/erpnext/setup/doctype/item_group/item_group.json @@ -525,7 +525,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/print_heading/print_heading.json b/erpnext/setup/doctype/print_heading/print_heading.json index d992fcb901..dc07f0c8d8 100644 --- a/erpnext/setup/doctype/print_heading/print_heading.json +++ b/erpnext/setup/doctype/print_heading/print_heading.json @@ -71,7 +71,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/quotation_lost_reason/quotation_lost_reason.json b/erpnext/setup/doctype/quotation_lost_reason/quotation_lost_reason.json index b95a936090..5d778eec0b 100644 --- a/erpnext/setup/doctype/quotation_lost_reason/quotation_lost_reason.json +++ b/erpnext/setup/doctype/quotation_lost_reason/quotation_lost_reason.json @@ -44,7 +44,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/sales_partner/sales_partner.json b/erpnext/setup/doctype/sales_partner/sales_partner.json index 6c2d70545c..3c31c23fc8 100644 --- a/erpnext/setup/doctype/sales_partner/sales_partner.json +++ b/erpnext/setup/doctype/sales_partner/sales_partner.json @@ -712,7 +712,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/sales_person/sales_person.json b/erpnext/setup/doctype/sales_person/sales_person.json index 9f46501516..b25f6a7917 100644 --- a/erpnext/setup/doctype/sales_person/sales_person.json +++ b/erpnext/setup/doctype/sales_person/sales_person.json @@ -412,7 +412,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/target_detail/target_detail.json b/erpnext/setup/doctype/target_detail/target_detail.json index 9bc8550e15..509733b1aa 100644 --- a/erpnext/setup/doctype/target_detail/target_detail.json +++ b/erpnext/setup/doctype/target_detail/target_detail.json @@ -122,7 +122,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.json b/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.json index 40e54d8753..5f254063b8 100644 --- a/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.json +++ b/erpnext/setup/doctype/terms_and_conditions/terms_and_conditions.json @@ -138,7 +138,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/territory/territory.json b/erpnext/setup/doctype/territory/territory.json index b123d5e1ac..81c2839f23 100644 --- a/erpnext/setup/doctype/territory/territory.json +++ b/erpnext/setup/doctype/territory/territory.json @@ -357,7 +357,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/uom/uom.json b/erpnext/setup/doctype/uom/uom.json index e752d0f5a0..e4322fe48a 100644 --- a/erpnext/setup/doctype/uom/uom.json +++ b/erpnext/setup/doctype/uom/uom.json @@ -77,7 +77,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/setup/doctype/website_item_group/website_item_group.json b/erpnext/setup/doctype/website_item_group/website_item_group.json index 73084b556d..8176e4026e 100644 --- a/erpnext/setup/doctype/website_item_group/website_item_group.json +++ b/erpnext/setup/doctype/website_item_group/website_item_group.json @@ -43,7 +43,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/item_attribute/item_attribute.json b/erpnext/stock/doctype/item_attribute/item_attribute.json index 8c02928cda..4b23cf0604 100644 --- a/erpnext/stock/doctype/item_attribute/item_attribute.json +++ b/erpnext/stock/doctype/item_attribute/item_attribute.json @@ -226,7 +226,7 @@ "hide_toolbar": 0, "icon": "fa fa-edit", "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/stock/doctype/item_attribute_value/item_attribute_value.json b/erpnext/stock/doctype/item_attribute_value/item_attribute_value.json index 68edfc9553..2807600f08 100644 --- a/erpnext/stock/doctype/item_attribute_value/item_attribute_value.json +++ b/erpnext/stock/doctype/item_attribute_value/item_attribute_value.json @@ -69,7 +69,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/item_quality_inspection_parameter/item_quality_inspection_parameter.json b/erpnext/stock/doctype/item_quality_inspection_parameter/item_quality_inspection_parameter.json index 6147db9d4b..f1e1fd3679 100644 --- a/erpnext/stock/doctype/item_quality_inspection_parameter/item_quality_inspection_parameter.json +++ b/erpnext/stock/doctype/item_quality_inspection_parameter/item_quality_inspection_parameter.json @@ -70,7 +70,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/item_reorder/item_reorder.json b/erpnext/stock/doctype/item_reorder/item_reorder.json index 43eb98d9a0..fb4c558cfd 100644 --- a/erpnext/stock/doctype/item_reorder/item_reorder.json +++ b/erpnext/stock/doctype/item_reorder/item_reorder.json @@ -142,7 +142,7 @@ "idx": 1, "image_view": 0, "in_create": 1, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/item_supplier/item_supplier.json b/erpnext/stock/doctype/item_supplier/item_supplier.json index 163b427fd5..6cff8e0892 100644 --- a/erpnext/stock/doctype/item_supplier/item_supplier.json +++ b/erpnext/stock/doctype/item_supplier/item_supplier.json @@ -75,7 +75,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/item_tax/item_tax.json b/erpnext/stock/doctype/item_tax/item_tax.json index e9c9d6265c..6c1bd0999a 100644 --- a/erpnext/stock/doctype/item_tax/item_tax.json +++ b/erpnext/stock/doctype/item_tax/item_tax.json @@ -68,7 +68,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/item_variant/item_variant.json b/erpnext/stock/doctype/item_variant/item_variant.json index 9da66a2c1c..93005c0aa3 100644 --- a/erpnext/stock/doctype/item_variant/item_variant.json +++ b/erpnext/stock/doctype/item_variant/item_variant.json @@ -70,7 +70,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/item_website_specification/item_website_specification.json b/erpnext/stock/doctype/item_website_specification/item_website_specification.json index 3c32adbe3d..618c9f0f91 100644 --- a/erpnext/stock/doctype/item_website_specification/item_website_specification.json +++ b/erpnext/stock/doctype/item_website_specification/item_website_specification.json @@ -68,7 +68,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.json b/erpnext/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.json index d65da882de..f49c147682 100644 --- a/erpnext/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.json +++ b/erpnext/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.json @@ -168,7 +168,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/packed_item/packed_item.json b/erpnext/stock/doctype/packed_item/packed_item.json index f9c163511f..6c8b2b1d05 100644 --- a/erpnext/stock/doctype/packed_item/packed_item.json +++ b/erpnext/stock/doctype/packed_item/packed_item.json @@ -665,7 +665,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json b/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json index 009244ce5e..1b22f13891 100644 --- a/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json +++ b/erpnext/stock/doctype/packing_slip_item/packing_slip_item.json @@ -430,7 +430,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/price_list_country/price_list_country.json b/erpnext/stock/doctype/price_list_country/price_list_country.json index a7cef6f6eb..a0020c5a82 100644 --- a/erpnext/stock/doctype/price_list_country/price_list_country.json +++ b/erpnext/stock/doctype/price_list_country/price_list_country.json @@ -42,7 +42,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/quality_inspection_reading/quality_inspection_reading.json b/erpnext/stock/doctype/quality_inspection_reading/quality_inspection_reading.json index a3b43e98cb..94aecfe7e7 100644 --- a/erpnext/stock/doctype/quality_inspection_reading/quality_inspection_reading.json +++ b/erpnext/stock/doctype/quality_inspection_reading/quality_inspection_reading.json @@ -395,7 +395,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.json b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.json index 8275c84416..b6892f1d80 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.json +++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.json @@ -689,7 +689,7 @@ "idx": 1, "image_view": 0, "in_create": 1, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, diff --git a/erpnext/stock/doctype/uom_conversion_detail/uom_conversion_detail.json b/erpnext/stock/doctype/uom_conversion_detail/uom_conversion_detail.json index a17cc2dd0a..6f28651b99 100644 --- a/erpnext/stock/doctype/uom_conversion_detail/uom_conversion_detail.json +++ b/erpnext/stock/doctype/uom_conversion_detail/uom_conversion_detail.json @@ -69,7 +69,7 @@ "idx": 1, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 1, diff --git a/erpnext/support/doctype/support_settings/support_settings.json b/erpnext/support/doctype/support_settings/support_settings.json index 1ca03c774a..7adfd4d08f 100644 --- a/erpnext/support/doctype/support_settings/support_settings.json +++ b/erpnext/support/doctype/support_settings/support_settings.json @@ -48,7 +48,7 @@ "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 1, "istable": 0, diff --git a/erpnext/utilities/doctype/rename_tool/rename_tool.json b/erpnext/utilities/doctype/rename_tool/rename_tool.json index f9aac1cedc..617354d91c 100644 --- a/erpnext/utilities/doctype/rename_tool/rename_tool.json +++ b/erpnext/utilities/doctype/rename_tool/rename_tool.json @@ -78,7 +78,7 @@ "icon": "fa fa-magic", "idx": 1, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 1, "istable": 0, diff --git a/erpnext/utilities/doctype/sms_log/sms_log.json b/erpnext/utilities/doctype/sms_log/sms_log.json index ffd9a7f2a0..d8f3146c0a 100644 --- a/erpnext/utilities/doctype/sms_log/sms_log.json +++ b/erpnext/utilities/doctype/sms_log/sms_log.json @@ -256,7 +256,7 @@ "icon": "fa fa-mobile-phone", "idx": 1, "in_create": 0, - "in_dialog": 0, + "is_submittable": 0, "issingle": 0, "istable": 0, From b16a4ec79e45c693aa704989bfb4e05758ca9dd1 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 4 May 2018 16:49:33 +0530 Subject: [PATCH 08/36] changes for the default cost center --- .../doctype/purchase_order/purchase_order.py | 3 ++- .../doctype/sales_order/sales_order.py | 6 +++-- erpnext/setup/doctype/company/company.py | 23 +++---------------- erpnext/stock/doctype/item/item.py | 8 +++---- erpnext/stock/doctype/item/test_item.py | 4 ++-- .../stock/doctype/stock_entry/stock_entry.py | 22 +++++++++--------- erpnext/stock/get_item_details.py | 15 ++++++------ 7 files changed, 33 insertions(+), 48 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 5a7573bc93..846c5b491b 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -14,6 +14,7 @@ from frappe.desk.notifications import clear_doctype_notifications from erpnext.buying.utils import validate_for_items, check_for_closed_status from erpnext.stock.utils import get_bin from six import string_types +from erpnext.stock.doctype.item.item import get_item_defaults form_grid_templates = { "items": "templates/form_grid/item_grid.html" @@ -374,7 +375,7 @@ def make_purchase_invoice(source_name, target_doc=None): target.base_amount = target.amount * flt(source_parent.conversion_rate) target.qty = target.amount / flt(obj.rate) if (flt(obj.rate) and flt(obj.billed_amt)) else flt(obj.qty) - item = frappe.db.get_value("Item", target.item_code, ["item_group", "buying_cost_center"], as_dict=1) + item = get_item_defaults(target.item_code, target.company) target.cost_center = frappe.db.get_value("Project", obj.project, "cost_center") \ or item.buying_cost_center \ or frappe.db.get_value("Item Group", item.item_group, "default_cost_center") diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 7e6c3dcbae..5116725439 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -15,6 +15,8 @@ from frappe.contacts.doctype.address.address import get_company_address from erpnext.controllers.selling_controller import SellingController from frappe.desk.doctype.auto_repeat.auto_repeat import get_next_schedule_date from erpnext.selling.doctype.customer.customer import check_credit_limit +from erpnext.stock.doctype.item.item import get_item_defaults + form_grid_templates = { "items": "templates/form_grid/item_grid.html" @@ -493,7 +495,7 @@ def make_delivery_note(source_name, target_doc=None): target.amount = (flt(source.qty) - flt(source.delivered_qty)) * flt(source.rate) target.qty = flt(source.qty) - flt(source.delivered_qty) - item = frappe.db.get_value("Item", target.item_code, ["item_group", "selling_cost_center"], as_dict=1) + item = get_item_defaults(target.item_code, target.company) if item: target.cost_center = frappe.db.get_value("Project", source_parent.project, "cost_center") \ @@ -557,7 +559,7 @@ def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): if source_parent.project: target.cost_center = frappe.db.get_value("Project", source_parent.project, "cost_center") if not target.cost_center and target.item_code: - item = frappe.db.get_value("Item", target.item_code, ["item_group", "selling_cost_center"], as_dict=1) + item = get_item_defaults(target.item_code, target.company) target.cost_center = item.selling_cost_center \ or frappe.db.get_value("Item Group", item.item_group, "default_cost_center") diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index 2f177eed41..9e9ac5594f 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -291,9 +291,6 @@ class Company(NestedSet): Trash accounts and cost centers for this company if no gl entry exists """ self.update_nsm_model() - accounts = frappe.db.sql_list("select name from tabAccount where company=%s", self.name) - cost_centers = frappe.db.sql_list("select name from `tabCost Center` where company=%s", self.name) - warehouses = frappe.db.sql_list("select name from tabWarehouse where company=%s", self.name) rec = frappe.db.sql("SELECT name from `tabGL Entry` where company = %s", self.name) if not rec: @@ -308,33 +305,19 @@ class Company(NestedSet): frappe.db.sql("""delete from `tabWarehouse` where company=%s""", self.name) frappe.defaults.clear_default("company", value=self.name) - frappe.db.sql("delete from `tabMode of Payment Account` where company=%s", self.name) + for doctype in ["Mode of Payment Account", "Item Default"]: + frappe.db.sql("delete from `tab{0}` where company = %s".format(doctype), self.name) # clear default accounts, warehouses from item + warehouses = frappe.db.sql_list("select name from tabWarehouse where company=%s", self.name) if warehouses: - for f in ["default_warehouse", "website_warehouse"]: - frappe.db.sql("""update `tabItem Default` set %s=NULL where company=%s and %s in (%s)""" - % (f, self.name, f, ', '.join(['%s']*len(warehouses))), tuple(warehouses)) - frappe.db.sql("""delete from `tabItem Reorder` where warehouse in (%s)""" % ', '.join(['%s']*len(warehouses)), tuple(warehouses)) - if accounts: - for f in ["income_account", "expense_account"]: - frappe.db.sql("""update tabItem set %s=NULL where %s in (%s)""" - % (f, f, ', '.join(['%s']*len(accounts))), tuple(accounts)) - - if cost_centers: - for f in ["selling_cost_center", "buying_cost_center"]: - frappe.db.sql("""update tabItem set %s=NULL where %s in (%s)""" - % (f, f, ', '.join(['%s']*len(cost_centers))), tuple(cost_centers)) - # reset default company frappe.db.sql("""update `tabSingles` set value="" where doctype='Global Defaults' and field='default_company' and value=%s""", self.name) - # delete mode of payment account - frappe.db.sql("delete from `tabMode of Payment Account` where company=%s", self.name) # delete BOMs boms = frappe.db.sql_list("select name from tabBOM where company=%s", self.name) diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 7dc9a89ce3..9487963394 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -883,13 +883,13 @@ def check_stock_uom_with_bin(item, stock_uom): frappe.throw( _("Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You will need to create a new Item to use a different Default UOM.").format(item)) -def get_item_details(item, company): +def get_item_defaults(item, company): return frappe.db.sql(''' select - i.item_name, i.description, i.stock_uom, i.name, i.is_stock_item, i.item_code - id.expense_account, id.buying_cost_center, id.warehouse + i.item_name, i.description, i.stock_uom, i.name, i.is_stock_item, i.item_code, i.item_group, + id.expense_account, id.buying_cost_center, id.default_warehouse, id.selling_cost_center from `tabItem` i, `tabItem Default` id where i.name = id.parent and i.name = %s and id.company = %s - ''', (item, company), as_dict=1) \ No newline at end of file + ''', (item, company), as_dict=1)[0] \ No newline at end of file diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py index ee2ca988e1..1c915ee8f2 100644 --- a/erpnext/stock/doctype/item/test_item.py +++ b/erpnext/stock/doctype/item/test_item.py @@ -36,7 +36,7 @@ def make_item(item_code, properties=None): if item.is_stock_item: - for item_default in [doc for doc in item.item_defaults if not doc.default_warehouse] + for item_default in [doc for doc in item.item_defaults if not doc.default_warehouse]: item_default.default_warehouse = "_Test Warehouse - _TC" item.insert() @@ -205,7 +205,7 @@ class TestItem(unittest.TestCase): "default_warehouse": "_Test Warehouse - _TC", "company": "_Test Company" } - ] + ], "has_variants": 1 }) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 49a278ca8a..5a6384aa73 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -10,7 +10,7 @@ from erpnext.stock.utils import get_incoming_rate from erpnext.stock.stock_ledger import get_previous_sle, NegativeStockError, get_valuation_rate from erpnext.stock.get_item_details import get_bin_details, get_default_cost_center, get_conversion_factor from erpnext.stock.doctype.batch.batch import get_batch_no, set_batch_nos, get_batch_qty -from erpnext.stock.doctype.item.item import get_item_details +from erpnext.stock.doctype.item.item import get_item_defaults from erpnext.manufacturing.doctype.bom.bom import validate_bom_no from erpnext.stock.utils import get_bin import json @@ -563,14 +563,14 @@ class StockEntry(StockController): pro_doc.run_method("update_planned_qty") def get_item_details(self, args=None, for_update=False): - item = frappe.db.sql("""select stock_uom, description, image, item_name, - expense_account, buying_cost_center, item_group, has_serial_no, - has_batch_no, sample_quantity - from `tabItem` - where name = %s - and disabled=0 - and (end_of_life is null or end_of_life='0000-00-00' or end_of_life > %s)""", - (args.get('item_code'), nowdate()), as_dict = 1) + item = frappe.db.sql("""select i.stock_uom, i.description, i.image, i.item_name, i.item_group, + i.has_batch_no, i.sample_quantity, i.has_serial_no, + id.expense_account, id.buying_cost_center + from `tabItem`, `tabItem Default` id + where i.name=%s and i.name=id.parent and id.company=%s + and i.disabled=0 + and (i.end_of_life is null or i.end_of_life='0000-00-00' or i.end_of_life > %s)""", + (args.get('item_code'), self.company, nowdate()), as_dict = 1) if not item: frappe.throw(_("Item {0} is not active or end of life has been reached").format(args.get("item_code"))) @@ -717,7 +717,7 @@ class StockEntry(StockController): item_code = frappe.db.get_value("BOM", self.bom_no, "item") to_warehouse = self.to_warehouse - item = get_item_details(item_code, self.company) + item = get_item_defaults(item_code, self.company) if not self.work_order and not to_warehouse: # in case of BOM @@ -783,7 +783,7 @@ class StockEntry(StockController): for item in wo_items: qty = item.required_qty - item_account_details = get_item_details(item.item_code, self.company) + item_account_details = get_item_defaults(item.item_code, self.company) # Take into account consumption if there are any. if self.purpose == 'Manufacture': req_qty_each = flt(item.required_qty / wo.qty) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 0351364d83..bbbe860396 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -11,7 +11,7 @@ from erpnext.setup.utils import get_exchange_rate from frappe.model.meta import get_field_precision from erpnext.stock.doctype.batch.batch import get_batch_no from erpnext import get_company_currency -from erpnext.stock.doctype.item.item import get_item_details +from erpnext.stock.doctype.item.item import get_item_defaults from six import string_types, iteritems @@ -206,9 +206,8 @@ def get_basic_details(args, item): user_default_warehouse = user_default_warehouse_list[0] \ if len(user_default_warehouse_list) == 1 else "" - item_default_warehouse = [default.default_warehouse for default in item.item_defaults if default.company == args.company] - item_default_warehouse = item_default_warehouse[0] if item_default_warehouse else None - warehouse = user_default_warehouse or item_default_warehouse or args.warehouse + item_defaults = get_item_defaults(item.name, args.company) + warehouse = user_default_warehouse or item_defaults.default_warehouse or args.warehouse material_request_type = '' if args.get('doctype') == "Material Request": @@ -231,9 +230,9 @@ def get_basic_details(args, item): "description": cstr(item.description).strip(), "image": cstr(item.image).strip(), "warehouse": warehouse, - "income_account": get_default_income_account(args, item), - "expense_account": get_default_expense_account(args, item), - "cost_center": get_default_cost_center(args, item), + "income_account": get_default_income_account(args, item_defaults), + "expense_account": get_default_expense_account(args, item_defaults), + "cost_center": get_default_cost_center(args, item_defaults), 'has_serial_no': item.has_serial_no, 'has_batch_no': item.has_batch_no, "batch_no": None, @@ -682,7 +681,7 @@ def get_default_bom(item_code=None): return bom def get_valuation_rate(item_code, company, warehouse=None): - item = get_item_details(item_code, company) + item = get_item_defaults(item_code, company) # item = frappe.get_doc("Item", item_code) if item.is_stock_item: if not warehouse: From bbd8508783a7264d3b8b5a5e31d685343f7aaa8e Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 7 May 2018 13:37:34 +0530 Subject: [PATCH 09/36] optimize the patch --- erpnext/controllers/selling_controller.py | 22 ++++-- ...efaults_to_child_table_for_multicompany.py | 79 +++++++++---------- .../doctype/quotation/test_quotation.py | 6 +- .../doctype/sales_order/test_sales_order.py | 9 +-- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 2a22b32637..feee067496 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -340,10 +340,22 @@ class SellingController(StockController): def check_active_sales_items(obj): for d in obj.get("items"): if d.item_code: - item = frappe.db.sql("""select docstatus, - income_account from tabItem where name = %s""", - d.item_code, as_dict=True)[0] + item = frappe.db.sql("""select i.docstatus, id.income_account + from `tabItem` i, `tabItem Default` id + where i.name=%s and id.parent=i.name and id.company=%s""", + (d.item_code,obj.company), as_dict=True)[0] + income_account_set = False if getattr(d, "income_account", None) and not item.income_account: - frappe.db.set_value("Item", d.item_code, "income_account", - d.income_account) + doc = frappe.get_doc("Item", d.item_code) + for default in doc.item_defaults: + if default.company == obj.company: + default.income_account = d.income_account + income_account_set = True + else: + if not income_account_set: + doc.append("item_defaults", { + "company": obj.company, + "income_account": d.income_account + }) + doc.save() \ No newline at end of file diff --git a/erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py b/erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py index a78d2d6f34..8e17ea61dd 100644 --- a/erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py +++ b/erpnext/patches/v11_0/move_item_defaults_to_child_table_for_multicompany.py @@ -15,50 +15,45 @@ def execute(): frappe.reload_doc('stock', 'doctype', 'item_default') frappe.reload_doc('stock', 'doctype', 'item') - item_details = frappe.get_all("Item", fields=["name", "default_warehouse", "buying_cost_center", - "expense_account", "selling_cost_center", "income_account"], limit=100) + companies = frappe.get_all("Company") + if len(companies) == 1: + frappe.db.sql(''' + INSERT INTO `tabItem Default` + (name, parent, parenttype, parentfield, idx, company, default_warehouse, + buying_cost_center, selling_cost_center, expense_account, income_account, default_supplier) + SELECT + SUBSTRING(SHA2(name,224), 1, 10) as name, name as parent, 'Item' as parenttype, + 'item_defaults' as parentfield, 1 as idx, %s as company, default_warehouse, + buying_cost_center, selling_cost_center, expense_account, income_account, default_supplier + FROM `tabItem`; + ''', companies[0].name) + else: + item_details = frappe.get_all("Item", fields=["name", "default_warehouse", "buying_cost_center", + "expense_account", "selling_cost_center", "income_account"], limit=100) - for item in item_details: - item_defaults = [] + for item in item_details: + item_defaults = [] - def insert_into_item_defaults(doc_field_name, doc_field_value, company): - for d in item_defaults: - if d.get("company") == company: - d[doc_field_name] = doc_field_value - return - item_defaults.append({ - "company": company, - doc_field_name: doc_field_value - }) + def insert_into_item_defaults(doc_field_name, doc_field_value, company): + for d in item_defaults: + if d.get("company") == company: + d[doc_field_name] = doc_field_value + return + item_defaults.append({ + "company": company, + doc_field_name: doc_field_value + }) - if item.default_warehouse: - default_warehouse_company = frappe.get_value("Warehouse", item.default_warehouse, "company", cache=True) - insert_into_item_defaults("default_warehouse", item.default_warehouse, default_warehouse_company) + for d in [ + ["default_warehouse", "Warehouse"], ["expense_account", "Account"], ["expense_account", "Account"], + ["buying_cost_center", "Cost Center"], ["selling_cost_center", "Cost Center"] + ]: + if item.get(d[0]): + company = frappe.get_value(d[1], item.get(d[0]), "company", cache=True) + insert_into_item_defaults(d[0], item.get(d[0]), company) - if item.buying_cost_center: - buying_cost_center_company = get_cost_center_company(item.buying_cost_center) - insert_into_item_defaults("buying_cost_center", item.buying_cost_center, buying_cost_center_company) + doc = frappe.get_doc("Item", item.name) + doc.extend("item_defaults", item_defaults) - if item.selling_cost_center: - selling_cost_center_company = get_cost_center_company(item.buying_cost_center) - insert_into_item_defaults("selling_cost_center", item.selling_cost_center, selling_cost_center_company) - - if item.expense_account: - expense_account_company = get_account_company(item.expense_account) - insert_into_item_defaults("expense_account", item.expense_account, expense_account_company) - - if item.income_account: - income_account_company = get_account_company(item.income_account) - insert_into_item_defaults("income_account", item.income_account, income_account_company) - - doc = frappe.get_doc("Item", item.name) - doc.extend("item_defaults", item_defaults) - - for child_doc in doc.item_defaults: - child_doc.db_update() - -def get_account_company(account_name): - return frappe.get_value("Account", account_name, "company", cache=True) - -def get_cost_center_company(cost_center): - return frappe.get_value("Cost Center", cost_center, "company", cache=True) + for child_doc in doc.item_defaults: + child_doc.db_insert() \ No newline at end of file diff --git a/erpnext/selling/doctype/quotation/test_quotation.py b/erpnext/selling/doctype/quotation/test_quotation.py index ced5ebf4fb..3b36a2dca5 100644 --- a/erpnext/selling/doctype/quotation/test_quotation.py +++ b/erpnext/selling/doctype/quotation/test_quotation.py @@ -150,12 +150,10 @@ class TestQuotation(unittest.TestCase): from erpnext.stock.doctype.item.test_item import make_item first_item = make_item("_Test Laptop", - {"is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC", - "cost_center": "_Test Cost Center - _TC"}) + {"is_stock_item": 1}) second_item = make_item("_Test CPU", - {"is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC", - "cost_center": "_Test Cost Center - _TC"}) + {"is_stock_item": 1}) qo_item1 = [ { diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index c5f7ef22ec..83889412f4 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -359,14 +359,9 @@ class TestSalesOrder(unittest.TestCase): make_stock_entry(target="_Test Warehouse - _TC", qty=10, rate=100) - po_item = make_item("_Test Item for Drop Shipping", {"is_stock_item": 1, "delivered_by_supplier": 1, - 'default_supplier': '_Test Supplier', - "expense_account": "_Test Account Cost for Goods Sold - _TC", - "cost_center": "_Test Cost Center - _TC" - }) + po_item = make_item("_Test Item for Drop Shipping", {"is_stock_item": 1, "delivered_by_supplier": 1}) - dn_item = make_item("_Test Regular Item", {"is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC", - "cost_center": "_Test Cost Center - _TC"}) + dn_item = make_item("_Test Regular Item", {"is_stock_item": 1}) so_items = [ { From 64614374d86694fe0ade61446e2af81cf8c49e88 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 7 May 2018 16:55:32 +0530 Subject: [PATCH 10/36] fix codacy --- erpnext/controllers/selling_controller.py | 12 ++--- erpnext/demo/data/item.json | 44 +++++++++---------- .../doctype/item_default/item_default.py | 1 - erpnext/stock/get_item_details.py | 2 +- 4 files changed, 29 insertions(+), 30 deletions(-) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index feee067496..83e7916e84 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -352,10 +352,10 @@ def check_active_sales_items(obj): if default.company == obj.company: default.income_account = d.income_account income_account_set = True - else: - if not income_account_set: - doc.append("item_defaults", { - "company": obj.company, - "income_account": d.income_account - }) + break + if not income_account_set: + doc.append("item_defaults", { + "company": obj.company, + "income_account": d.income_account + }) doc.save() \ No newline at end of file diff --git a/erpnext/demo/data/item.json b/erpnext/demo/data/item.json index 461ed4235a..908de15d0b 100644 --- a/erpnext/demo/data/item.json +++ b/erpnext/demo/data/item.json @@ -2,7 +2,7 @@ { "default_supplier": "Asiatic Solutions", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "For Upper Bearing", "image": "/assets/erpnext_demo/images/disc.png", @@ -13,7 +13,7 @@ { "default_supplier": "Nan Duskin", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "CAST IRON, MCMASTER PART NO. 3710T13", "image": "/assets/erpnext_demo/images/bearing.jpg", @@ -24,7 +24,7 @@ { "default_supplier": null, "item_defaults": [{ - "default_warehouse": "Finished Goods", + "default_warehouse": "Finished Goods" }], "description": "Wind Mill C Series for Commercial Use 18ft", "image": "/assets/erpnext_demo/images/wind-turbine-2.png", @@ -35,7 +35,7 @@ { "default_supplier": null, "item_defaults": [{ - "default_warehouse": "Finished Goods", + "default_warehouse": "Finished Goods" }], "description": "Wind Mill A Series for Home Use 9ft", "image": "/assets/erpnext_demo/images/wind-turbine.png", @@ -46,7 +46,7 @@ { "default_supplier": null, "item_defaults": [{ - "default_warehouse": "Finished Goods", + "default_warehouse": "Finished Goods" }], "description": "Small Wind Turbine for Home Use\n\n\n", "image": "/assets/erpnext_demo/images/wind-turbine-1.jpg", @@ -62,7 +62,7 @@ { "default_supplier": "HomeBase", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "1.5 in. Diameter x 36 in. Mild Steel Tubing", "image": null, @@ -73,7 +73,7 @@ { "default_supplier": "New World Realty", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "1/32 in. x 24 in. x 47 in. HDPE Opaque Sheet", "image": null, @@ -84,7 +84,7 @@ { "default_supplier": "Eagle Hardware", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "3/16 in. x 6 in. x 6 in. Low Carbon Steel Plate", "image": null, @@ -95,7 +95,7 @@ { "default_supplier": "Asiatic Solutions", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "Bearing Assembly", "image": null, @@ -106,7 +106,7 @@ { "default_supplier": "HomeBase", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "3/4 in. x 2 ft. x 4 ft. Pine Plywood", "image": null, @@ -118,7 +118,7 @@ { "default_supplier": "Scott Ties", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "N/A", "image": null, @@ -129,7 +129,7 @@ { "default_supplier": "Eagle Hardware", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "1 in. x 3 in. x 1 ft. Multipurpose Al Alloy Bar", "image": null, @@ -140,7 +140,7 @@ { "default_supplier": "Eagle Hardware", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "1/4 in. x 6 in. x 6 in. Mild Steel Plate", "image": null, @@ -151,7 +151,7 @@ { "default_supplier": "HomeBase", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "15/32 in. x 4 ft. x 8 ft. 3-Ply Rtd Sheathing", "image": null, @@ -162,7 +162,7 @@ { "default_supplier": "Eagle Hardware", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "1.25 in. Diameter x 6 ft. Mild Steel Tubing", "image": null, @@ -173,7 +173,7 @@ { "default_supplier": "Ks Merchandise", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "1/2 in. x 2 ft. x 4 ft. Pine Plywood", "image": null, @@ -184,7 +184,7 @@ { "default_supplier": "HomeBase", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "For Bearing Collar", "image": null, @@ -195,7 +195,7 @@ { "default_supplier": null, "item_defaults": [{ - "default_warehouse": "Finished Goods", + "default_warehouse": "Finished Goods" }], "description": "Small Wind Turbine for Home Use\n\n\n\n

Size: Small

", "image": "/assets/erpnext_demo/images/wind-turbine-1.jpg", @@ -214,7 +214,7 @@ { "default_supplier": null, "item_defaults": [{ - "default_warehouse": "Finished Goods", + "default_warehouse": "Finished Goods" }], "description": "Small Wind Turbine for Home Use\n\n\n\n

Size: Medium

", "image": "/assets/erpnext_demo/images/wind-turbine-1.jpg", @@ -233,7 +233,7 @@ { "default_supplier": null, "item_defaults": [{ - "default_warehouse": "Finished Goods", + "default_warehouse": "Finished Goods" }], "description": "Small Wind Turbine for Home Use\n\n\n\n

Size: Large

", "image": "/assets/erpnext_demo/images/wind-turbine-1.jpg", @@ -259,7 +259,7 @@ { "default_supplier": "HomeBase", "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "3/4 in. x 2 ft. x 4 ft. Pine Plywood", "image": null, @@ -327,7 +327,7 @@ "create_new_batch": 1, "valuation_rate": 200, "item_defaults": [{ - "default_warehouse": "Stores", + "default_warehouse": "Stores" }], "description": "Corrugated Box", "item_code": "Corrugated Box", diff --git a/erpnext/stock/doctype/item_default/item_default.py b/erpnext/stock/doctype/item_default/item_default.py index 85e84db6f1..935f0ffb0f 100644 --- a/erpnext/stock/doctype/item_default/item_default.py +++ b/erpnext/stock/doctype/item_default/item_default.py @@ -3,7 +3,6 @@ # For license information, please see license.txt from __future__ import unicode_literals -import frappe from frappe.model.document import Document class ItemDefault(Document): diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index bbbe860396..fd145d2ac8 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -205,7 +205,7 @@ def get_basic_details(args, item): user_default_warehouse_list = get_user_default_as_list('Warehouse') user_default_warehouse = user_default_warehouse_list[0] \ if len(user_default_warehouse_list) == 1 else "" - + item_defaults = get_item_defaults(item.name, args.company) warehouse = user_default_warehouse or item_defaults.default_warehouse or args.warehouse From e07b332514accf1f91cd74df1faca25acd466e72 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 16 May 2018 13:05:13 +0530 Subject: [PATCH 11/36] fix for tests --- erpnext/hr/doctype/department/test_records.json | 4 ++-- erpnext/hr/doctype/employee/test_records.json | 6 +++--- .../hr/doctype/leave_application/test_leave_application.py | 4 ++-- .../hr/doctype/leave_block_list/test_leave_block_list.py | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/erpnext/hr/doctype/department/test_records.json b/erpnext/hr/doctype/department/test_records.json index 5bb5871d4c..654925ef93 100644 --- a/erpnext/hr/doctype/department/test_records.json +++ b/erpnext/hr/doctype/department/test_records.json @@ -1,4 +1,4 @@ [ - {"doctype":"Department", "department_name":"_Test Department"}, - {"doctype":"Department", "department_name":"_Test Department 1"} + {"doctype":"Department", "department_name":"_Test Department", "company": "_Test Company"}, + {"doctype":"Department", "department_name":"_Test Department 1", "company": "_Test Company"} ] \ No newline at end of file diff --git a/erpnext/hr/doctype/employee/test_records.json b/erpnext/hr/doctype/employee/test_records.json index 087265fa48..0bfd2aa12a 100644 --- a/erpnext/hr/doctype/employee/test_records.json +++ b/erpnext/hr/doctype/employee/test_records.json @@ -3,7 +3,7 @@ "company": "_Test Company", "date_of_birth": "1980-01-01", "date_of_joining": "2010-01-01", - "department": "_Test Department", + "department": "_Test Department - _TC", "doctype": "Employee", "employee_name": "_Test Employee", "gender": "Female", @@ -15,7 +15,7 @@ "company": "_Test Company", "date_of_birth": "1980-01-01", "date_of_joining": "2010-01-01", - "department": "_Test Department 1", + "department": "_Test Department 1 - _TC", "doctype": "Employee", "employee_name": "_Test Employee 1", "gender": "Male", @@ -27,7 +27,7 @@ "company": "_Test Company", "date_of_birth": "1980-01-01", "date_of_joining": "2010-01-01", - "department": "_Test Department 1", + "department": "_Test Department 1 - _TC", "doctype": "Employee", "employee_name": "_Test Employee 2", "gender": "Male", diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py index b467350411..9b0255983d 100644 --- a/erpnext/hr/doctype/leave_application/test_leave_application.py +++ b/erpnext/hr/doctype/leave_application/test_leave_application.py @@ -71,7 +71,7 @@ class TestLeaveApplication(unittest.TestCase): add_role("test1@example.com", "Leave Approver") clear_user_permissions_for_doctype("Employee") - frappe.db.set_value("Department", "_Test Department", + frappe.db.set_value("Department", "_Test Department - _TC", "leave_block_list", "_Test Leave Block List") make_allocation_record() @@ -214,7 +214,7 @@ class TestLeaveApplication(unittest.TestCase): frappe.db.set_value("Leave Block List", "_Test Leave Block List", "applies_to_all_departments", 1) frappe.db.set_value("Employee", "_T-Employee-00002", "department", - "_Test Department") + "_Test Department - _TC") frappe.set_user("test1@example.com") application.insert() diff --git a/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py b/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py index 3abe4062ba..0eb69a55a7 100644 --- a/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py +++ b/erpnext/hr/doctype/leave_block_list/test_leave_block_list.py @@ -14,20 +14,20 @@ class TestLeaveBlockList(unittest.TestCase): def test_get_applicable_block_dates(self): frappe.set_user("test@example.com") - frappe.db.set_value("Department", "_Test Department", "leave_block_list", + frappe.db.set_value("Department", "_Test Department - _TC", "leave_block_list", "_Test Leave Block List") self.assertTrue(getdate("2013-01-02") in [d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")]) def test_get_applicable_block_dates_for_allowed_user(self): frappe.set_user("test1@example.com") - frappe.db.set_value("Department", "_Test Department 1", "leave_block_list", + frappe.db.set_value("Department", "_Test Department 1 - _TC", "leave_block_list", "_Test Leave Block List") self.assertEqual([], [d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")]) def test_get_applicable_block_dates_all_lists(self): frappe.set_user("test1@example.com") - frappe.db.set_value("Department", "_Test Department 1", "leave_block_list", + frappe.db.set_value("Department", "_Test Department 1 - _TC", "leave_block_list", "_Test Leave Block List") self.assertTrue(getdate("2013-01-02") in [d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03", all_lists=True)]) From cdd47044854a9643aaa9b1be5927a870c659824c Mon Sep 17 00:00:00 2001 From: Ranjith Kurungadam Date: Wed, 16 May 2018 13:10:08 +0530 Subject: [PATCH 12/36] Fixes, fields in Salary Component (#14071) * remove duplicate fields * Salary Component - fields is_tax_applicable, is_payable * fix intendation --- .../purchase_invoice/purchase_invoice.py | 1 - .../salary_component/salary_component.json | 383 +++--------------- 2 files changed, 67 insertions(+), 317 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 61b6edf864..08e3d10fd8 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -812,4 +812,3 @@ def block_invoice(name, hold_comment): def make_inter_company_sales_invoice(source_name, target_doc=None): from erpnext.accounts.doctype.sales_invoice.sales_invoice import make_inter_company_invoice return make_inter_company_invoice("Purchase Invoice", source_name, target_doc) - diff --git a/erpnext/hr/doctype/salary_component/salary_component.json b/erpnext/hr/doctype/salary_component/salary_component.json index f08b1d7a0b..cf85af4a76 100644 --- a/erpnext/hr/doctype/salary_component/salary_component.json +++ b/erpnext/hr/doctype/salary_component/salary_component.json @@ -108,6 +108,70 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.type==\"Earning\"", + "fieldname": "is_tax_applicable", + "fieldtype": "Check", + "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, + "label": "Is Tax Applicable", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fieldname": "is_payable", + "fieldtype": "Check", + "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, + "label": "Is Payable", + "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_on_submit": 0, @@ -554,6 +618,7 @@ "bold": 0, "collapsible": 0, "columns": 0, + "depends_on": "is_payable", "fieldname": "section_break_5", "fieldtype": "Section Break", "hidden": 0, @@ -893,320 +958,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "help", - "fieldtype": "HTML", - "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, - "label": "Help", - "length": 0, - "no_copy": 0, - "options": "

Help

\n\n

Notes:

\n\n
    \n
  1. Use field base for using base salary of the Employee
  2. \n
  3. Use Salary Component abbreviations in conditions and formulas. BS = Basic Salary
  4. \n
  5. Use field name for employee details in conditions and formulas. Employment Type = employment_typeBranch = branch
  6. \n
  7. Use field name from Salary Slip in conditions and formulas. Payment Days = payment_daysLeave without pay = leave_without_pay
  8. \n
  9. Direct Amount can also be entered based on Condtion. See example 3
\n\n

Examples

\n
    \n
  1. Calculating Basic Salary based on base\n
    Condition: base < 10000
    \n
    Formula: base * .2
  2. \n
  3. Calculating HRA based on Basic SalaryBS \n
    Condition: BS > 2000
    \n
    Formula: BS * .1
  4. \n
  5. Calculating TDS based on Employment Typeemployment_type \n
    Condition: employment_type==\"Intern\"
    \n
    Amount: 1000
  6. \n
", - "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_on_submit": 0, - "bold": 0, - "collapsible": 1, - "columns": 0, - "fieldname": "condition_and_formula", - "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, - "label": "Condition and Formula", - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "condition", - "fieldtype": "Code", - "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, - "label": "Condition", - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "If selected, the value specified or calculated in this component will not contribute to the earnings or deductions. However, it's value can be referenced by other components that can be added or deducted. ", - "fieldname": "statistical_component", - "fieldtype": "Check", - "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, - "label": "Statistical Component", - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "depends_on_lwp", - "fieldtype": "Check", - "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, - "label": "Depends on Leave Without Pay", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "do_not_include_in_total", - "fieldtype": "Check", - "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, - "label": "Do not include in total", - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "1", - "fieldname": "amount_based_on_formula", - "fieldtype": "Check", - "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, - "label": "Amount based on formula", - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:doc.amount_based_on_formula!==0", - "fieldname": "formula", - "fieldtype": "Code", - "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, - "label": "Formula", - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:doc.amount_based_on_formula!==1", - "fieldname": "amount", - "fieldtype": "Currency", - "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, - "label": "Amount", - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_28", - "fieldtype": "Column 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_on_submit": 0, @@ -1251,7 +1002,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-05-09 17:35:11.073733", + "modified": "2018-05-16 12:15:43.117948", "modified_by": "Administrator", "module": "HR", "name": "Salary Component", @@ -1286,4 +1037,4 @@ "sort_order": "DESC", "track_changes": 0, "track_seen": 0 -} +} \ No newline at end of file From 265005d30d33824f89b3d8aec092cc574ee3f5af Mon Sep 17 00:00:00 2001 From: lasalesi Date: Wed, 16 May 2018 09:40:25 +0200 Subject: [PATCH 13/36] apply sorting for make multiple variant attributes (#14073) --- erpnext/stock/doctype/item/item.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js index fbf0deddc7..4f0bd0da14 100644 --- a/erpnext/stock/doctype/item/item.js +++ b/erpnext/stock/doctype/item/item.js @@ -472,7 +472,8 @@ $.extend(erpnext.item, { fields: ["attribute_value"], limit_start: 0, limit_page_length: 500, - parent: "Item" + parent: "Item", + order_by: "idx" } }).then((r) => { if(r.message) { From fbb6b3da5fb32b58a2510adcb1aeb868af0c6828 Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Wed, 16 May 2018 13:53:31 +0530 Subject: [PATCH 14/36] Undo replace of frappe.db.sql with frappe.get_list (#14074) --- erpnext/accounts/utils.py | 36 +++++++++++-------- .../doctype/land_unit/land_unit.py | 9 ++--- erpnext/hr/doctype/employee/employee.py | 28 +++++++-------- erpnext/manufacturing/doctype/bom/bom.py | 34 +++++++----------- erpnext/projects/doctype/task/task.py | 24 +++++++------ erpnext/stock/doctype/warehouse/warehouse.py | 16 ++++----- 6 files changed, 72 insertions(+), 75 deletions(-) diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index a33f867d12..f53f924e8e 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -681,23 +681,29 @@ def get_companies(): def get_children(doctype, parent, company, is_root=False): from erpnext.accounts.report.financial_statements import sort_accounts - parent_fieldname = 'parent_' + doctype.lower().replace(' ', '_') - fields = [ - 'name as value', - 'is_group as expandable' - ] - filters = [['docstatus', '<', 2]] + fieldname = frappe.db.escape(doctype.lower().replace(' ','_')) + doctype = frappe.db.escape(doctype) + + # root if is_root: - fields += ['root_type', 'report_type', 'account_currency'] if doctype == 'Account' else [] - filters.append([parent_fieldname, '=', '']) - filters.append(['company', '=', company]) - + fields = ", root_type, report_type, account_currency" if doctype=="Account" else "" + acc = frappe.db.sql(""" select + name as value, is_group as expandable {fields} + from `tab{doctype}` + where ifnull(`parent_{fieldname}`,'') = '' + and `company` = %s and docstatus<2 + order by name""".format(fields=fields, fieldname = fieldname, doctype=doctype), + company, as_dict=1) else: - fields += ['account_currency'] if doctype == 'Account' else [] - fields += [parent_fieldname + ' as parent'] - - - acc = frappe.get_list(doctype, fields=fields, filters=filters) + # other + fields = ", account_currency" if doctype=="Account" else "" + acc = frappe.db.sql("""select + name as value, is_group as expandable, parent_{fieldname} as parent {fields} + from `tab{doctype}` + where ifnull(`parent_{fieldname}`,'') = %s + and docstatus<2 + order by name""".format(fields=fields, fieldname=fieldname, doctype=doctype), + parent, as_dict=1) if doctype == 'Account': sort_accounts(acc, is_root, key="value") diff --git a/erpnext/agriculture/doctype/land_unit/land_unit.py b/erpnext/agriculture/doctype/land_unit/land_unit.py index 35bda1cb6c..f577eca5f3 100644 --- a/erpnext/agriculture/doctype/land_unit/land_unit.py +++ b/erpnext/agriculture/doctype/land_unit/land_unit.py @@ -169,10 +169,11 @@ def get_children(doctype, parent, is_root=False): if is_root: parent = '' - land_units = frappe.get_list(doctype, - fields = ['name as value', 'is_group as expandable'], - filters= [['parent_land_unit', '=', parent]], - order_by='name') + land_units = frappe.db.sql("""select name as value, + is_group as expandable + from `tabLand Unit` + where ifnull(`parent_land_unit`,'') = %s + order by name""", (parent), as_dict=1) # return nodes return land_units diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py index 93f6532408..824ddf5aa7 100755 --- a/erpnext/hr/doctype/employee/employee.py +++ b/erpnext/hr/doctype/employee/employee.py @@ -318,26 +318,26 @@ def get_employee_emails(employee_list): @frappe.whitelist() def get_children(doctype, parent=None, company=None, is_root=False, is_tree=False): - filters = [['company', '=', company]] - fields = ['name as value', 'employee_name as title'] + condition = '' if is_root: - parent = '' + parent = "" if parent and company and parent!=company: - filters.append(['reports_to', '=', parent]) + condition = ' and reports_to = "{0}"'.format(frappe.db.escape(parent)) else: - filters.append(['reports_to', '=', '']) + condition = ' and ifnull(reports_to, "")=""' - employees = frappe.get_list(doctype, fields=fields, - filters=filters, order_by='name') + employee = frappe.db.sql(""" + select + name as value, employee_name as title, + exists(select name from `tabEmployee` where reports_to=emp.name) as expandable + from + `tabEmployee` emp + where company='{company}' {condition} order by name""" + .format(company=company, condition=condition), as_dict=1) - for employee in employees: - is_expandable = frappe.get_all(doctype, filters=[ - ['reports_to', '=', employee.get('value')] - ]) - employee.expandable = 1 if is_expandable else 0 - - return employees + # return employee + return employee def on_doctype_update(): diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index 559bbdf5cd..1fbc8068db 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -624,28 +624,18 @@ def get_children(doctype, parent=None, is_root=False, **filters): return if frappe.form_dict.parent: - bom_items = frappe.get_list('BOM Item', - fields=['item_code', 'bom_no as value', 'stock_qty'], - filters=[['parent', '=', frappe.form_dict.parent]], - order_by='idx') - - item_names = tuple(d.get('item_code') for d in bom_items) - - items = frappe.get_list('Item', - fields=['image', 'description', 'name'], - filters=[['name', 'in', item_names]]) # to get only required item dicts - - for bom_item in bom_items: - # extend bom_item dict with respective item dict - bom_item.update( - # returns an item dict from items list which matches with item_code - (item for item in items if item.get('name') - == bom_item.get('item_code')).next() - ) - bom_item.expandable = 0 if bom_item.value in ('', None) else 1 - - return bom_items - + return frappe.db.sql("""select + bom_item.item_code, + bom_item.bom_no as value, + bom_item.stock_qty, + if(ifnull(bom_item.bom_no, "")!="", 1, 0) as expandable, + item.image, + item.description + from `tabBOM Item` bom_item, tabItem item + where bom_item.parent=%s + and bom_item.item_code = item.name + order by bom_item.idx + """, frappe.form_dict.parent, as_dict=True) def get_boms_in_bottom_up_order(bom_no=None): def _get_parent(bom_no): diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index c86e6996fc..fcaa344dfa 100644 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -186,25 +186,27 @@ def set_tasks_as_overdue(): @frappe.whitelist() def get_children(doctype, parent, task=None, project=None, is_root=False): - - filters = [['docstatus', '<', '2']] + conditions = '' if task: - filters.append(['parent_task', '=', task]) + # via filters + conditions += ' and parent_task = "{0}"'.format(frappe.db.escape(task)) elif parent and not is_root: # via expand child - filters.append(['parent_task', '=', parent]) + conditions += ' and parent_task = "{0}"'.format(frappe.db.escape(parent)) else: - filters.append(['parent_task', '=', '']) + conditions += ' and ifnull(parent_task, "")=""' if project: - filters.append(['project', '=', project]) + conditions += ' and project = "{0}"'.format(frappe.db.escape(project)) - tasks = frappe.get_list(doctype, fields=[ - 'name as value', - 'subject as title', - 'is_group as expandable' - ], filters=filters, order_by='name') + tasks = frappe.db.sql("""select name as value, + subject as title, + is_group as expandable + from `tabTask` + where docstatus < 2 + {conditions} + order by name""".format(conditions=conditions), as_dict=1) # return tasks return tasks diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py index b90ee3276b..9c47f98847 100644 --- a/erpnext/stock/doctype/warehouse/warehouse.py +++ b/erpnext/stock/doctype/warehouse/warehouse.py @@ -144,19 +144,17 @@ def get_children(doctype, parent=None, company=None, is_root=False): if is_root: parent = "" - fields = ['name as value', 'is_group as expandable'] - filters = [ - ['docstatus', '<', '2'], - ['parent_warehouse', '=', parent], - ['company', 'in', (company, None,'')] - ] - - warehouses = frappe.get_list(doctype, fields=fields, filters=filters, order_by='name') + warehouses = frappe.db.sql("""select name as value, + is_group as expandable + from `tabWarehouse` + where docstatus < 2 + and ifnull(`parent_warehouse`,'') = %s + and (`company` = %s or company is null or company = '') + order by name""", (parent, company), as_dict=1) # return warehouses for wh in warehouses: wh["balance"] = get_stock_value_on(warehouse=wh.value) - return warehouses @frappe.whitelist() From 6eb7f346bd8101e5772b2533f2a8f3882097393b Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 16 May 2018 14:08:55 +0530 Subject: [PATCH 15/36] [rename] Photo ID -> Identification Document --- .../__init__.py | 0 .../identification_document_type.js} | 2 +- .../identification_document_type.json} | 10 +++++----- .../identification_document_type.py} | 2 +- .../test_identification_document_type.js} | 6 +++--- .../test_identification_document_type.py} | 2 +- .../hr/doctype/travel_request/travel_request.json | 12 ++++++------ 7 files changed, 17 insertions(+), 17 deletions(-) rename erpnext/hr/doctype/{photo_id_type => identification_document_type}/__init__.py (100%) rename erpnext/hr/doctype/{photo_id_type/photo_id_type.js => identification_document_type/identification_document_type.js} (75%) rename erpnext/hr/doctype/{photo_id_type/photo_id_type.json => identification_document_type/identification_document_type.json} (88%) rename erpnext/hr/doctype/{photo_id_type/photo_id_type.py => identification_document_type/identification_document_type.py} (84%) rename erpnext/hr/doctype/{photo_id_type/test_photo_id_type.js => identification_document_type/test_identification_document_type.js} (65%) rename erpnext/hr/doctype/{photo_id_type/test_photo_id_type.py => identification_document_type/test_identification_document_type.py} (76%) diff --git a/erpnext/hr/doctype/photo_id_type/__init__.py b/erpnext/hr/doctype/identification_document_type/__init__.py similarity index 100% rename from erpnext/hr/doctype/photo_id_type/__init__.py rename to erpnext/hr/doctype/identification_document_type/__init__.py diff --git a/erpnext/hr/doctype/photo_id_type/photo_id_type.js b/erpnext/hr/doctype/identification_document_type/identification_document_type.js similarity index 75% rename from erpnext/hr/doctype/photo_id_type/photo_id_type.js rename to erpnext/hr/doctype/identification_document_type/identification_document_type.js index 8779275467..351cf9d9ff 100644 --- a/erpnext/hr/doctype/photo_id_type/photo_id_type.js +++ b/erpnext/hr/doctype/identification_document_type/identification_document_type.js @@ -1,7 +1,7 @@ // Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt -frappe.ui.form.on('Photo ID Type', { +frappe.ui.form.on('Identification Document Type', { refresh: function(frm) { } diff --git a/erpnext/hr/doctype/photo_id_type/photo_id_type.json b/erpnext/hr/doctype/identification_document_type/identification_document_type.json similarity index 88% rename from erpnext/hr/doctype/photo_id_type/photo_id_type.json rename to erpnext/hr/doctype/identification_document_type/identification_document_type.json index 616659f639..33cbde7409 100644 --- a/erpnext/hr/doctype/photo_id_type/photo_id_type.json +++ b/erpnext/hr/doctype/identification_document_type/identification_document_type.json @@ -3,7 +3,7 @@ "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, - "autoname": "field:photo_id_type", + "autoname": "field:identification_document_type", "beta": 0, "creation": "2018-05-15 07:13:28.620570", "custom": 0, @@ -19,7 +19,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "photo_id_type", + "fieldname": "identification_document_type", "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, @@ -28,7 +28,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Photo ID Type", + "label": "Identification Document Type", "length": 0, "no_copy": 0, "permlevel": 0, @@ -55,10 +55,10 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-05-15 07:13:43.616618", + "modified": "2018-05-16 04:34:00.448680", "modified_by": "Administrator", "module": "HR", - "name": "Photo ID Type", + "name": "Identification Document Type", "name_case": "", "owner": "Administrator", "permissions": [ diff --git a/erpnext/hr/doctype/photo_id_type/photo_id_type.py b/erpnext/hr/doctype/identification_document_type/identification_document_type.py similarity index 84% rename from erpnext/hr/doctype/photo_id_type/photo_id_type.py rename to erpnext/hr/doctype/identification_document_type/identification_document_type.py index a41da8d676..d9d81d2fa8 100644 --- a/erpnext/hr/doctype/photo_id_type/photo_id_type.py +++ b/erpnext/hr/doctype/identification_document_type/identification_document_type.py @@ -6,5 +6,5 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document -class PhotoIDType(Document): +class IdentificationDocumentType(Document): pass diff --git a/erpnext/hr/doctype/photo_id_type/test_photo_id_type.js b/erpnext/hr/doctype/identification_document_type/test_identification_document_type.js similarity index 65% rename from erpnext/hr/doctype/photo_id_type/test_photo_id_type.js rename to erpnext/hr/doctype/identification_document_type/test_identification_document_type.js index 738ae600c6..65879098e8 100644 --- a/erpnext/hr/doctype/photo_id_type/test_photo_id_type.js +++ b/erpnext/hr/doctype/identification_document_type/test_identification_document_type.js @@ -2,15 +2,15 @@ // rename this file from _test_[name] to test_[name] to activate // and remove above this line -QUnit.test("test: Photo ID Type", function (assert) { +QUnit.test("test: Identification Document Type", function (assert) { let done = assert.async(); // number of asserts assert.expect(1); frappe.run_serially([ - // insert a new Photo ID Type - () => frappe.tests.make('Photo ID Type', [ + // insert a new Identification Document Type + () => frappe.tests.make('Identification Document Type', [ // values to be set {key: 'value'} ]), diff --git a/erpnext/hr/doctype/photo_id_type/test_photo_id_type.py b/erpnext/hr/doctype/identification_document_type/test_identification_document_type.py similarity index 76% rename from erpnext/hr/doctype/photo_id_type/test_photo_id_type.py rename to erpnext/hr/doctype/identification_document_type/test_identification_document_type.py index 9e06a674cf..1265afaf45 100644 --- a/erpnext/hr/doctype/photo_id_type/test_photo_id_type.py +++ b/erpnext/hr/doctype/identification_document_type/test_identification_document_type.py @@ -6,5 +6,5 @@ from __future__ import unicode_literals import frappe import unittest -class TestPhotoIDType(unittest.TestCase): +class TestIdentificationDocumentType(unittest.TestCase): pass diff --git a/erpnext/hr/doctype/travel_request/travel_request.json b/erpnext/hr/doctype/travel_request/travel_request.json index 0c131c51df..2f22bbcf4c 100644 --- a/erpnext/hr/doctype/travel_request/travel_request.json +++ b/erpnext/hr/doctype/travel_request/travel_request.json @@ -490,7 +490,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "photo_id_type", + "fieldname": "personal_id_type", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -499,10 +499,10 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Photo ID Type", + "label": "Identification Document Type", "length": 0, "no_copy": 0, - "options": "Photo ID Type", + "options": "Identification Document Type", "permlevel": 0, "precision": "", "print_hide": 0, @@ -522,7 +522,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "photo_id_number", + "fieldname": "personal_id_number", "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, @@ -531,7 +531,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Photo ID Number", + "label": "Identification Document Number", "length": 0, "no_copy": 0, "permlevel": 0, @@ -871,7 +871,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-05-15 10:47:54.215916", + "modified": "2018-05-16 04:35:56.819570", "modified_by": "Administrator", "module": "HR", "name": "Travel Request", From 4256a3422047e10a9de71ecdddbd4d90531b177d Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 16 May 2018 14:51:25 +0530 Subject: [PATCH 16/36] [enterprise] minor fixes make the employee name mandatory in the employee onboarding added the retention bonus amount --- .../employee_onboarding.json | 87 ++++++++++--------- .../retention_bonus/retention_bonus.json | 33 ++++++- 2 files changed, 76 insertions(+), 44 deletions(-) diff --git a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.json b/erpnext/hr/doctype/employee_onboarding/employee_onboarding.json index bd2ec4ce9d..257ee32b0f 100644 --- a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.json +++ b/erpnext/hr/doctype/employee_onboarding/employee_onboarding.json @@ -19,38 +19,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "employee_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": "Employee 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": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "employee", + "fieldname": "job_applicant", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -59,18 +28,18 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Employee", + "label": "Job Applicant", "length": 0, "no_copy": 0, - "options": "Employee", + "options": "Job Applicant", "permlevel": 0, "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 1, + "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "translatable": 0, @@ -114,19 +83,19 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "job_applicant", - "fieldtype": "Link", + "fieldname": "employee_name", + "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, - "label": "Job Applicant", + "label": "Employee Name", "length": 0, "no_copy": 0, - "options": "Job Applicant", + "options": "job_applicant.applicant_name", "permlevel": 0, "precision": "", "print_hide": 0, @@ -140,6 +109,38 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "employee", + "fieldtype": "Link", + "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, + "label": "Employee", + "length": 0, + "no_copy": 0, + "options": "Employee", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "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_on_submit": 0, @@ -530,7 +531,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-05-10 06:34:21.103617", + "modified": "2018-05-16 05:01:09.897011", "modified_by": "Administrator", "module": "HR", "name": "Employee Onboarding", @@ -557,7 +558,7 @@ "write": 1 } ], - "quick_entry": 1, + "quick_entry": 0, "read_only": 0, "read_only_onload": 0, "show_name_in_global_search": 0, diff --git a/erpnext/hr/doctype/retention_bonus/retention_bonus.json b/erpnext/hr/doctype/retention_bonus/retention_bonus.json index b21d3098a1..c1f46e590a 100644 --- a/erpnext/hr/doctype/retention_bonus/retention_bonus.json +++ b/erpnext/hr/doctype/retention_bonus/retention_bonus.json @@ -172,6 +172,37 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "bonus_amount", + "fieldtype": "Currency", + "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, + "label": "Bonus Amount", + "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_on_submit": 0, @@ -214,7 +245,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-05-13 15:00:55.913521", + "modified": "2018-05-16 05:20:19.226522", "modified_by": "Administrator", "module": "HR", "name": "Retention Bonus", From 3c204122cd423ad47aeea926d35afffe67635a3a Mon Sep 17 00:00:00 2001 From: Saurabh Date: Wed, 16 May 2018 14:03:41 +0530 Subject: [PATCH 17/36] [fix] calculate withholding only on invoice --- .../doctype/payment_entry/payment_entry.py | 15 --- .../purchase_invoice/purchase_invoice.json | 2 +- .../purchase_invoice/purchase_invoice.py | 4 - .../tax_withholding_category.json | 95 +------------------ 4 files changed, 2 insertions(+), 114 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 8539c36c43..41ae0cd050 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -43,7 +43,6 @@ class PaymentEntry(AccountsController): def validate(self): self.setup_party_account_field() - self.set_tax_withholding() self.set_missing_values() self.validate_payment_type() self.validate_party_details() @@ -511,20 +510,6 @@ class PaymentEntry(AccountsController): def on_recurring(self, reference_doc, auto_repeat_doc): self.reference_no = reference_doc.name self.reference_date = nowdate() - - def set_tax_withholding(self): - if self.party_type != 'Supplier': - return - - self.supplier = self.party - tax_withholding_details = get_patry_tax_withholding_details(self) - - for tax_details in tax_withholding_details: - if self.deductions: - if tax_details['tax']['account_head'] not in [deduction.account for deduction in self.deductions]: - self.append('deductions', self.calculate_deductions(tax_details)) - else: - self.append('deductions', self.calculate_deductions(tax_details)) def calculate_deductions(self, tax_details): return { diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index a8fa9f7529..cf40728121 100755 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -4231,7 +4231,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2018-04-19 15:48:29.457594", + "modified": "2018-05-16 15:48:29.457594", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice", diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 61b6edf864..2788a82619 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -751,10 +751,6 @@ class PurchaseInvoice(BuyingController): self.db_set('release_date', None) def set_tax_withholding(self): - """ - 1. Get TDS Configurations against Supplier - """ - tax_withholding_details = get_patry_tax_withholding_details(self) for tax_details in tax_withholding_details: if flt(self.get("rounded_total") or self.grand_total) >= flt(tax_details['threshold']): diff --git a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.json b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.json index a590776e68..8edaf0187e 100644 --- a/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.json +++ b/erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.json @@ -13,68 +13,6 @@ "editable_grid": 1, "engine": "InnoDB", "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "is_default", - "fieldtype": "Check", - "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, - "label": "Is Default", - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "enabled", - "fieldtype": "Check", - "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, - "label": "Enabled", - "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_on_submit": 0, @@ -198,37 +136,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "book_on_advance", - "fieldtype": "Check", - "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, - "label": "Book on Advance", - "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_on_submit": 0, @@ -333,7 +240,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-05-11 14:25:07.474461", + "modified": "2018-05-16 13:57:52.489773", "modified_by": "Administrator", "module": "Accounts", "name": "Tax Withholding Category", From 8e184569a1e84b81cbe7dc9794566a34ffc413d3 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 16 May 2018 15:11:52 +0530 Subject: [PATCH 18/36] Update item.json --- erpnext/stock/doctype/item/item.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index ce1bdc334e..38f3dcda71 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -3969,7 +3969,7 @@ "issingle": 0, "istable": 0, "max_attachments": 1, - "modified": "2018-05-14 14:54:24.479267", + "modified": "2018-05-15 14:54:24.479267", "modified_by": "Administrator", "module": "Stock", "name": "Item", @@ -4138,4 +4138,4 @@ "title_field": "item_name", "track_changes": 1, "track_seen": 0 -} \ No newline at end of file +} From 23942701f11fedb131310fa7e94cf465459c1adf Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 16 May 2018 15:41:00 +0530 Subject: [PATCH 19/36] [Fix] 'PurchaseInvoiceItem' object has no attribute 'company' --- erpnext/buying/doctype/purchase_order/purchase_order.py | 2 +- erpnext/selling/doctype/sales_order/sales_order.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 846c5b491b..26864933ad 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -375,7 +375,7 @@ def make_purchase_invoice(source_name, target_doc=None): target.base_amount = target.amount * flt(source_parent.conversion_rate) target.qty = target.amount / flt(obj.rate) if (flt(obj.rate) and flt(obj.billed_amt)) else flt(obj.qty) - item = get_item_defaults(target.item_code, target.company) + item = get_item_defaults(target.item_code, source_parent.company) target.cost_center = frappe.db.get_value("Project", obj.project, "cost_center") \ or item.buying_cost_center \ or frappe.db.get_value("Item Group", item.item_group, "default_cost_center") diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 5116725439..690ffa858f 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -495,7 +495,7 @@ def make_delivery_note(source_name, target_doc=None): target.amount = (flt(source.qty) - flt(source.delivered_qty)) * flt(source.rate) target.qty = flt(source.qty) - flt(source.delivered_qty) - item = get_item_defaults(target.item_code, target.company) + item = get_item_defaults(target.item_code, source_parent.company) if item: target.cost_center = frappe.db.get_value("Project", source_parent.project, "cost_center") \ @@ -559,7 +559,7 @@ def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): if source_parent.project: target.cost_center = frappe.db.get_value("Project", source_parent.project, "cost_center") if not target.cost_center and target.item_code: - item = get_item_defaults(target.item_code, target.company) + item = get_item_defaults(target.item_code, source_parent.company) target.cost_center = item.selling_cost_center \ or frappe.db.get_value("Item Group", item.item_group, "default_cost_center") From 6e92958578e46f92d78cd60453dbedc4767a6f93 Mon Sep 17 00:00:00 2001 From: Ameya Shenoy Date: Wed, 16 May 2018 16:11:20 +0530 Subject: [PATCH 20/36] spaces to tabs --- erpnext/accounts/doctype/sales_invoice/sales_invoice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 031e320012..190b707e40 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -1028,7 +1028,7 @@ def update_linked_invoice(doctype, name, inter_company_invoice_reference): def unlink_inter_company_invoice(doctype, name, inter_company_invoice_reference): ref_doc = "Purchase Invoice" if doctype == "Sales Invoice" else "Sales Invoice" if inter_company_invoice_reference: - frappe.db.set_value(doctype, name,\ + frappe.db.set_value(doctype, name,\ "inter_company_invoice_reference", "") frappe.db.set_value(ref_doc, inter_company_invoice_reference,\ "inter_company_invoice_reference", "") From fda15702bc1c769e9d96e71d98c8d3e05026bd3b Mon Sep 17 00:00:00 2001 From: Shreya Date: Wed, 16 May 2018 16:14:34 +0530 Subject: [PATCH 21/36] Fix error --- .../employee_advance/employee_advance.js | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.js b/erpnext/hr/doctype/employee_advance/employee_advance.js index a9407be435..f4285a2ca2 100644 --- a/erpnext/hr/doctype/employee_advance/employee_advance.js +++ b/erpnext/hr/doctype/employee_advance/employee_advance.js @@ -84,15 +84,17 @@ frappe.ui.form.on('Employee Advance', { }, employee: function (frm) { - return frappe.call({ - method: "erpnext.hr.doctype.employee_advance.employee_advance.get_due_advance_amount", - args: { - "employee": frm.doc.employee, - "posting_date": frm.doc.posting_date - }, - callback: function(r) { - frm.set_value("due_advance_amount",r.message); - } - }); + if (frm.doc.employee) { + return frappe.call({ + method: "erpnext.hr.doctype.employee_advance.employee_advance.get_due_advance_amount", + args: { + "employee": frm.doc.employee, + "posting_date": frm.doc.posting_date + }, + callback: function(r) { + frm.set_value("due_advance_amount",r.message); + } + }); + } } }); From e3910fb2a60ec80b8ff9b2d327e4d9d281263f68 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 16 May 2018 15:50:17 +0530 Subject: [PATCH 22/36] [fixes] fix in the item defaults --- erpnext/stock/doctype/item/item.json | 1125 +++++++---------- erpnext/stock/doctype/item/item.py | 5 +- .../doctype/item_default/item_default.json | 4 +- erpnext/stock/get_item_details.py | 8 +- 4 files changed, 472 insertions(+), 670 deletions(-) diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index 38f3dcda71..9b57edc311 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -755,41 +755,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "is_stock_item", - "description": "", - "fieldname": "default_warehouse", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Warehouse", - "length": 0, - "no_copy": 0, - "oldfieldname": "default_warehouse", - "oldfieldtype": "Link", - "options": "Warehouse", - "permlevel": 0, - "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_on_submit": 0, @@ -888,38 +853,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "is_stock_item", - "fieldname": "column_break1", - "fieldtype": "Column 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, - "oldfieldtype": "Column Break", - "permlevel": 0, - "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, - "width": "50%" - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -952,6 +885,38 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "is_stock_item", + "fieldname": "column_break1", + "fieldtype": "Column 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, + "oldfieldtype": "Column Break", + "permlevel": 0, + "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, + "width": "50%" + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -1614,69 +1579,69 @@ "unique": 0 }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 1, - "columns": 0, - "fieldname": "defaults", - "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, - "label": "Defaults", - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "item_defaults", - "fieldtype": "Table", - "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, - "label": "Item Defaults", - "length": 0, - "no_copy": 0, - "options": "Item Default", - "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_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "defaults", + "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, + "label": "Defaults", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "item_defaults", + "fieldtype": "Table", + "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, + "label": "Item Defaults", + "length": 0, + "no_copy": 0, + "options": "Item Default", + "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_on_submit": 0, "bold": 0, @@ -1903,76 +1868,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "", - "description": "", - "fieldname": "buying_cost_center", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Buying Cost Center", - "length": 0, - "no_copy": 0, - "oldfieldname": "cost_center", - "oldfieldtype": "Link", - "options": "Cost Center", - "permlevel": 0, - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "", - "description": "", - "fieldname": "expense_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Expense Account", - "length": 0, - "no_copy": 0, - "oldfieldname": "purchase_account", - "oldfieldtype": "Link", - "options": "Account", - "permlevel": 0, - "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_on_submit": 0, @@ -2038,38 +1933,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "", - "fieldname": "default_supplier", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Supplier", - "length": 0, - "no_copy": 0, - "options": "Supplier", - "permlevel": 0, - "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_on_submit": 0, @@ -2418,38 +2281,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "", - "fieldname": "income_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Income Account", - "length": 0, - "no_copy": 0, - "options": "Account", - "permlevel": 0, - "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_on_submit": 0, @@ -2515,38 +2346,6 @@ "unique": 0, "width": "50%" }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "", - "fieldname": "selling_cost_center", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Selling Cost Center", - "length": 0, - "no_copy": 0, - "options": "Cost Center", - "permlevel": 0, - "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_on_submit": 0, @@ -3729,402 +3528,402 @@ "search_index": 0, "set_only_once": 0, "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:(doc.__islocal&&doc.is_stock_item && !doc.has_serial_no && !doc.has_batch_no)", - "fieldname": "opening_stock", - "fieldtype": "Float", - "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, - "label": "Opening Stock", - "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "is_stock_item", - "fieldname": "valuation_rate", - "fieldtype": "Currency", - "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, - "label": "Valuation Rate", - "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, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:(doc.__islocal&&doc.is_stock_item && !doc.has_serial_no && !doc.has_batch_no)", + "fieldname": "opening_stock", + "fieldtype": "Float", + "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, + "label": "Opening Stock", + "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_on_submit": 0, - "bold": 1, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:doc.__islocal", - "fieldname": "standard_rate", - "fieldtype": "Currency", - "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, - "label": "Standard Selling Rate", - "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, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "is_stock_item", + "fieldname": "valuation_rate", + "fieldtype": "Currency", + "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, + "label": "Valuation Rate", + "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "is_fixed_asset", - "fieldname": "asset_naming_series", - "fieldtype": "Select", - "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, - "label": "Asset Naming Series", - "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, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.__islocal", + "fieldname": "standard_rate", + "fieldtype": "Currency", + "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, + "label": "Standard Selling Rate", + "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "hub_category_to_publish", - "fieldtype": "Data", - "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, - "label": "Hub Category to Publish", - "length": 0, - "no_copy": 0, - "options": "", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "is_fixed_asset", + "fieldname": "asset_naming_series", + "fieldtype": "Select", + "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, + "label": "Asset Naming Series", + "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Publish \"In Stock\" or \"Not in Stock\" on Hub based on stock available in this warehouse.", - "fieldname": "hub_warehouse", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Hub Warehouse", - "length": 0, - "no_copy": 0, - "options": "Warehouse", - "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, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "hub_category_to_publish", + "fieldtype": "Data", + "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, + "label": "Hub Category to Publish", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "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_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "0", - "fieldname": "synced_with_hub", - "fieldtype": "Check", - "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, - "label": "Synced With Hub", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Publish \"In Stock\" or \"Not in Stock\" on Hub based on stock available in this warehouse.", + "fieldname": "hub_warehouse", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Hub Warehouse", + "length": 0, + "no_copy": 0, + "options": "Warehouse", + "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_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "synced_with_hub", + "fieldtype": "Check", + "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, + "label": "Synced With Hub", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "icon": "fa fa-tag", - "idx": 2, - "image_field": "image", - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 0, - "max_attachments": 1, - "modified": "2018-05-15 14:54:24.479267", - "modified_by": "Administrator", - "module": "Stock", - "name": "Item", - "owner": "Administrator", + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "icon": "fa fa-tag", + "idx": 2, + "image_field": "image", + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 1, + "modified": "2018-05-16 06:35:12.204616", + "modified_by": "Administrator", + "module": "Stock", + "name": "Item", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 1, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Item Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 1, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Item Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Stock Manager", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock Manager", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "Stock User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Stock User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Sales User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Purchase User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Maintenance User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Maintenance User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Accounts User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Accounts User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Manufacturing User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Manufacturing User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 } ], @@ -4138,4 +3937,4 @@ "title_field": "item_name", "track_changes": 1, "track_seen": 0 -} +} \ No newline at end of file diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 9487963394..e32f76bf0c 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -125,6 +125,9 @@ class Item(WebsiteGenerator): self.old_website_item_groups = frappe.db.sql_list("""select item_group from `tabWebsite Item Group` where parentfield='website_item_groups' and parenttype='Item' and parent=%s""", self.name) + elif not self.item_defaults: + self.append("item_defaults", {"company": frappe.defaults.get_defaults().company}) + def on_update(self): invalidate_cache_for_item(self) @@ -892,4 +895,4 @@ def get_item_defaults(item, company): `tabItem` i, `tabItem Default` id where i.name = id.parent and i.name = %s and id.company = %s - ''', (item, company), as_dict=1)[0] \ No newline at end of file + ''', (item, company), as_dict=1) \ No newline at end of file diff --git a/erpnext/stock/doctype/item_default/item_default.json b/erpnext/stock/doctype/item_default/item_default.json index 72d7880287..8ef6de7d68 100644 --- a/erpnext/stock/doctype/item_default/item_default.json +++ b/erpnext/stock/doctype/item_default/item_default.json @@ -38,7 +38,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "translatable": 0, @@ -431,7 +431,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2018-05-03 02:44:24.097373", + "modified": "2018-05-16 05:58:28.182186", "modified_by": "Administrator", "module": "Stock", "name": "Item Default", diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index fd145d2ac8..52decced49 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -207,7 +207,7 @@ def get_basic_details(args, item): if len(user_default_warehouse_list) == 1 else "" item_defaults = get_item_defaults(item.name, args.company) - warehouse = user_default_warehouse or item_defaults.default_warehouse or args.warehouse + warehouse = user_default_warehouse or item_defaults.get("default_warehouse") or args.warehouse material_request_type = '' if args.get('doctype') == "Material Request": @@ -683,14 +683,14 @@ def get_default_bom(item_code=None): def get_valuation_rate(item_code, company, warehouse=None): item = get_item_defaults(item_code, company) # item = frappe.get_doc("Item", item_code) - if item.is_stock_item: + if item.get("is_stock_item"): if not warehouse: - warehouse = item.default_warehouse + warehouse = item.get("default_warehouse") return frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, ["valuation_rate"], as_dict=True) or {"valuation_rate": 0} - elif not item.is_stock_item: + elif not item.get("is_stock_item"): valuation_rate =frappe.db.sql("""select sum(base_net_amount) / sum(qty*conversion_factor) from `tabPurchase Invoice Item` where item_code = %s and docstatus=1""", item_code) From b233e9d643da55ddc5ebd1f55ccef06087bb8e9a Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 16 May 2018 16:41:34 +0530 Subject: [PATCH 23/36] [Fix] Multiple fixes --- .../doctype/asset_movement/asset_movement.py | 5 +- erpnext/stock/doctype/item/item.js | 10 +-- erpnext/stock/doctype/item/item.json | 72 +++++++++---------- 3 files changed, 42 insertions(+), 45 deletions(-) diff --git a/erpnext/assets/doctype/asset_movement/asset_movement.py b/erpnext/assets/doctype/asset_movement/asset_movement.py index 32fc663837..e34d2a3066 100644 --- a/erpnext/assets/doctype/asset_movement/asset_movement.py +++ b/erpnext/assets/doctype/asset_movement/asset_movement.py @@ -14,16 +14,13 @@ class AssetMovement(Document): self.validate_warehouses() def validate_asset(self): - status, company, serial_no = frappe.db.get_value("Asset", self.asset, ["status", "company", "serial_no"]) + status, company = frappe.db.get_value("Asset", self.asset, ["status", "company"]) if self.purpose == 'Transfer' and status in ("Draft", "Scrapped", "Sold"): frappe.throw(_("{0} asset cannot be transferred").format(status)) if company != self.company: frappe.throw(_("Asset {0} does not belong to company {1}").format(self.asset, self.company)) - if serial_no and not self.serial_no: - self.serial_no = serial_no - if self.serial_no and len(get_serial_nos(self.serial_no)) != self.quantity: frappe.throw(_("Number of serial nos and quantity must be the same")) diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js index 4f0bd0da14..cdfbcaeb4a 100644 --- a/erpnext/stock/doctype/item/item.js +++ b/erpnext/stock/doctype/item/item.js @@ -216,25 +216,25 @@ var set_customer_group = function(frm, cdt, cdn) { $.extend(erpnext.item, { setup_queries: function(frm) { - frm.fields_dict['expense_account'].get_query = function(doc) { + frm.fields_dict["item_defaults"].grid.get_field("expense_account").get_query = function(doc) { return { query: "erpnext.controllers.queries.get_expense_account", } } - frm.fields_dict['income_account'].get_query = function(doc) { + frm.fields_dict["item_defaults"].grid.get_field("income_account").get_query = function(doc) { return { query: "erpnext.controllers.queries.get_income_account" } } - frm.fields_dict['buying_cost_center'].get_query = function(doc) { + frm.fields_dict["item_defaults"].grid.get_field("buying_cost_center").get_query = function(doc) { return { filters: { "is_group": 0 } } } - frm.fields_dict['selling_cost_center'].get_query = function(doc) { + frm.fields_dict["item_defaults"].grid.get_field("selling_cost_center").get_query = function(doc) { return { filters: { "is_group": 0 } } @@ -267,7 +267,7 @@ $.extend(erpnext.item, { return { query: "erpnext.controllers.queries.supplier_query" } } - frm.fields_dict['default_warehouse'].get_query = function(doc) { + frm.fields_dict["item_defaults"].grid.get_field("default_warehouse").get_query = function(doc) { return { filters: { "is_group": 0 } } diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index 9b57edc311..c4a3fc1b4f 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -496,6 +496,38 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "is_fixed_asset", + "fieldname": "asset_naming_series", + "fieldtype": "Select", + "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, + "label": "Asset Naming Series", + "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_on_submit": 0, @@ -1152,7 +1184,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 1, - "collapsible_depends_on": "eval:doc.has_batch_no || doc.has_serial_no", + "collapsible_depends_on": "eval:doc.has_batch_no || doc.has_serial_no || doc.is_fixed_asset", "columns": 0, "depends_on": "is_stock_item", "fieldname": "serial_nos_and_batches", @@ -1382,7 +1414,7 @@ "collapsible": 0, "columns": 0, "default": "", - "depends_on": "eval:doc.is_stock_item", + "depends_on": "eval:doc.is_stock_item || doc.is_fixed_asset", "description": "", "fieldname": "has_serial_no", "fieldtype": "Check", @@ -1417,7 +1449,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "has_serial_no", + "depends_on": "eval:doc.is_stock_item || doc.is_fixed_asset", "description": "Example: ABCD.#####\nIf series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.", "fieldname": "serial_no_series", "fieldtype": "Data", @@ -3626,38 +3658,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "is_fixed_asset", - "fieldname": "asset_naming_series", - "fieldtype": "Select", - "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, - "label": "Asset Naming Series", - "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_on_submit": 0, @@ -3768,7 +3768,7 @@ "issingle": 0, "istable": 0, "max_attachments": 1, - "modified": "2018-05-16 06:35:12.204616", + "modified": "2018-05-16 16:35:09.518294", "modified_by": "Administrator", "module": "Stock", "name": "Item", From 38667ab8daabe3a3a377b0fad874cbfc7cec4194 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 16 May 2018 16:55:23 +0530 Subject: [PATCH 24/36] return defaults according to the company --- .../buying/doctype/purchase_order/purchase_order.py | 2 +- erpnext/selling/doctype/sales_order/sales_order.py | 6 +++--- erpnext/stock/doctype/item/item.py | 9 +++++++-- erpnext/stock/doctype/stock_entry/stock_entry.py | 10 +++++----- erpnext/stock/get_item_details.py | 6 +++--- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 26864933ad..daca56a010 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -377,7 +377,7 @@ def make_purchase_invoice(source_name, target_doc=None): item = get_item_defaults(target.item_code, source_parent.company) target.cost_center = frappe.db.get_value("Project", obj.project, "cost_center") \ - or item.buying_cost_center \ + or item.get("buying_cost_center") \ or frappe.db.get_value("Item Group", item.item_group, "default_cost_center") doc = get_mapped_doc("Purchase Order", source_name, { diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 690ffa858f..7fe61c99e5 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -499,7 +499,7 @@ def make_delivery_note(source_name, target_doc=None): if item: target.cost_center = frappe.db.get_value("Project", source_parent.project, "cost_center") \ - or item.selling_cost_center \ + or item.get("selling_cost_center") \ or frappe.db.get_value("Item Group", item.item_group, "default_cost_center") target_doc = get_mapped_doc("Sales Order", source_name, { @@ -559,8 +559,8 @@ def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): if source_parent.project: target.cost_center = frappe.db.get_value("Project", source_parent.project, "cost_center") if not target.cost_center and target.item_code: - item = get_item_defaults(target.item_code, source_parent.company) - target.cost_center = item.selling_cost_center \ + item = get_item_defaults(target.item_code, target.company) + target.cost_center = item.get("selling_cost_center") \ or frappe.db.get_value("Item Group", item.item_group, "default_cost_center") doclist = get_mapped_doc("Sales Order", source_name, { diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index e32f76bf0c..068b913682 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -887,7 +887,7 @@ def check_stock_uom_with_bin(item, stock_uom): _("Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You will need to create a new Item to use a different Default UOM.").format(item)) def get_item_defaults(item, company): - return frappe.db.sql(''' + item_defaults = frappe.db.sql(''' select i.item_name, i.description, i.stock_uom, i.name, i.is_stock_item, i.item_code, i.item_group, id.expense_account, id.buying_cost_center, id.default_warehouse, id.selling_cost_center @@ -895,4 +895,9 @@ def get_item_defaults(item, company): `tabItem` i, `tabItem Default` id where i.name = id.parent and i.name = %s and id.company = %s - ''', (item, company), as_dict=1) \ No newline at end of file + ''', (item, company), as_dict=1) + if item_defaults: + return item_defaults[0] + else: + return frappe.db.get_value("Item", item, ["name", "item_name", "description", "stock_uom", + "is_stock_item", "item_code", "item_group"], as_dict=1) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 5a6384aa73..849a294be5 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -721,7 +721,7 @@ class StockEntry(StockController): if not self.work_order and not to_warehouse: # in case of BOM - to_warehouse = item.default_warehouse + to_warehouse = item.get("default_warehouse") self.add_to_stock_entry_detail({ item.name: { @@ -731,8 +731,8 @@ class StockEntry(StockController): "item_name": item.item_name, "description": item.description, "stock_uom": item.stock_uom, - "expense_account": item.expense_account, - "cost_center": item.buying_cost_center, + "expense_account": item.get("expense_account"), + "cost_center": item.get("buying_cost_center"), } }, bom_no = self.bom_no) @@ -807,8 +807,8 @@ class StockEntry(StockController): "item_name": item.item_name, "description": item.description, "stock_uom": item_account_details.stock_uom, - "expense_account": item_account_details.expense_account, - "cost_center": item_account_details.buying_cost_center, + "expense_account": item_account_details.get("expense_account"), + "cost_center": item_account_details.get("buying_cost_center"), } }) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 52decced49..562ac68808 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -300,12 +300,12 @@ def get_basic_details(args, item): def get_default_income_account(args, item): - return (item.income_account + return (item.get("income_account") or args.income_account or frappe.db.get_value("Item Group", item.item_group, "default_income_account")) def get_default_expense_account(args, item): - return (item.expense_account + return (item.get("expense_account") or args.expense_account or frappe.db.get_value("Item Group", item.item_group, "default_expense_account")) @@ -319,7 +319,7 @@ def get_default_deferred_revenue_account(args, item): def get_default_cost_center(args, item): return (frappe.db.get_value("Project", args.get("project"), "cost_center") - or (item.selling_cost_center if args.get("customer") else item.buying_cost_center) + or (item.get("selling_cost_center") if args.get("customer") else item.get("buying_cost_center")) or frappe.db.get_value("Item Group", item.item_group, "default_cost_center") or args.get("cost_center")) From e3bb1d0e3b63df6dc20dae3287e67ae06b5c37bd Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 16 May 2018 17:14:59 +0530 Subject: [PATCH 25/36] more fixes for the item defaults --- erpnext/controllers/selling_controller.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 83e7916e84..a05b282877 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -343,10 +343,10 @@ def check_active_sales_items(obj): item = frappe.db.sql("""select i.docstatus, id.income_account from `tabItem` i, `tabItem Default` id where i.name=%s and id.parent=i.name and id.company=%s""", - (d.item_code,obj.company), as_dict=True)[0] + (d.item_code,obj.company), as_dict=True) income_account_set = False - if getattr(d, "income_account", None) and not item.income_account: + if getattr(d, "income_account", None) and item and not item[0].income_account: doc = frappe.get_doc("Item", d.item_code) for default in doc.item_defaults: if default.company == obj.company: From df9516e9061994b0ee7b32d7c43bc274fd1f51f5 Mon Sep 17 00:00:00 2001 From: Shreya Date: Wed, 16 May 2018 17:30:35 +0530 Subject: [PATCH 26/36] Add Finance Book to route options --- erpnext/accounts/doctype/journal_entry/journal_entry.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js index afa1ffed60..6ad1df52cd 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.js +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js @@ -17,7 +17,8 @@ frappe.ui.form.on("Journal Entry", { "from_date": frm.doc.posting_date, "to_date": frm.doc.posting_date, "company": frm.doc.company, - group_by_voucher: 0 + "finance_book": frm.doc.finance_book, + "group_by_voucher": 0 }; frappe.set_route("query-report", "General Ledger"); }, "fa fa-table"); From 63d14cfac8f470811265e5e9c6fe5156f84893a4 Mon Sep 17 00:00:00 2001 From: Shreya Date: Wed, 16 May 2018 17:30:58 +0530 Subject: [PATCH 27/36] Instead of throwing error, just return --- erpnext/accounts/report/general_ledger/general_ledger.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/erpnext/accounts/report/general_ledger/general_ledger.js b/erpnext/accounts/report/general_ledger/general_ledger.js index 9a774ce6b9..e3d615121e 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.js +++ b/erpnext/accounts/report/general_ledger/general_ledger.js @@ -84,9 +84,7 @@ frappe.query_reports["General Ledger"] = { var party_type = frappe.query_report_filters_by_name.party_type.get_value(); var parties = frappe.query_report_filters_by_name.party.get_value(); - if(!party_type) { - frappe.throw(__("Please select Party Type first")); - } + if(!party_type) return; const values = parties.split(/\s*,\s*/).filter(d => d); const txt = parties.match(/[^,\s*]*$/)[0] || ''; From 5b93562ce3bb8826221238f2d70553373eefa3ce Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 16 May 2018 17:44:51 +0530 Subject: [PATCH 28/36] create default on making of invoice --- erpnext/controllers/selling_controller.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index a05b282877..4a358a42f5 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -343,17 +343,16 @@ def check_active_sales_items(obj): item = frappe.db.sql("""select i.docstatus, id.income_account from `tabItem` i, `tabItem Default` id where i.name=%s and id.parent=i.name and id.company=%s""", - (d.item_code,obj.company), as_dict=True) + (d.item_code, obj.company), as_dict=True) - income_account_set = False - if getattr(d, "income_account", None) and item and not item[0].income_account: + if getattr(d, "income_account", None): doc = frappe.get_doc("Item", d.item_code) - for default in doc.item_defaults: - if default.company == obj.company: - default.income_account = d.income_account - income_account_set = True - break - if not income_account_set: + if item and not item[0].income_account: + for default in doc.item_defaults: + if default.company == obj.company: + default.income_account = d.income_account + break + elif not item: doc.append("item_defaults", { "company": obj.company, "income_account": d.income_account From 5b34c00ba6f597f046e6b606af305f5cb8c7245c Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 16 May 2018 18:09:43 +0530 Subject: [PATCH 29/36] Added the travel request on the config page --- erpnext/config/hr.py | 6 +++++- erpnext/hr/doctype/travel_request/travel_request.json | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/erpnext/config/hr.py b/erpnext/config/hr.py index ef28ee8ff0..9e893c044d 100644 --- a/erpnext/config/hr.py +++ b/erpnext/config/hr.py @@ -142,7 +142,7 @@ def get_data(): ] }, { - "label": _("Expense Claim"), + "label": _("Travel and Expense Claim"), "items": [ { "type": "doctype", @@ -156,6 +156,10 @@ def get_data(): "type": "doctype", "name": "Expense Claim Type", }, + { + "type": "doctype", + "name": "Travel Request", + }, ] }, { diff --git a/erpnext/hr/doctype/travel_request/travel_request.json b/erpnext/hr/doctype/travel_request/travel_request.json index 2f22bbcf4c..fffb50a24e 100644 --- a/erpnext/hr/doctype/travel_request/travel_request.json +++ b/erpnext/hr/doctype/travel_request/travel_request.json @@ -151,7 +151,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Purpose of Travel", "length": 0, @@ -307,7 +307,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Employee", "length": 0, @@ -871,7 +871,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-05-16 04:35:56.819570", + "modified": "2018-05-16 08:38:22.543808", "modified_by": "Administrator", "module": "HR", "name": "Travel Request", From 421697250b43336bc0df459f7a33c46be5a85025 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 16 May 2018 18:16:08 +0530 Subject: [PATCH 30/36] [Fix] Asset gl entry not creating for non perpetual --- .../purchase_invoice/purchase_invoice.py | 110 ++++++++++-------- .../purchase_invoice_item.json | 35 +++++- erpnext/assets/doctype/asset/asset.py | 5 + erpnext/controllers/accounts_controller.py | 8 +- erpnext/controllers/stock_controller.py | 4 + .../purchase_receipt/purchase_receipt.js | 5 +- .../purchase_receipt/purchase_receipt.py | 73 ++++++------ 7 files changed, 152 insertions(+), 88 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 84367de90c..5d26d8a0e9 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -352,6 +352,7 @@ class PurchaseInvoice(BuyingController): self.make_supplier_gl_entry(gl_entries) self.make_item_gl_entries(gl_entries) + self.get_asset_gl_entry(gl_entries) self.make_tax_gl_entries(gl_entries) gl_entries = merge_similar_entries(gl_entries) @@ -389,10 +390,10 @@ class PurchaseInvoice(BuyingController): warehouse_account = get_warehouse_account_map() for item in self.get("items"): - if flt(item.base_net_amount): + if flt(item.base_net_amount) and item.item_code in stock_items: account_currency = get_account_currency(item.expense_account) - if self.update_stock and self.auto_accounting_for_stock and item.item_code in stock_items: + if self.update_stock and self.auto_accounting_for_stock: val_rate_db_precision = 6 if cint(item.precision("valuation_rate")) <= 6 else 9 # warehouse account @@ -434,50 +435,6 @@ class PurchaseInvoice(BuyingController): "remarks": self.get("remarks") or _("Accounting Entry for Stock"), "credit": flt(item.rm_supp_cost) }, warehouse_account[self.supplier_warehouse]["account_currency"])) - - elif item.is_fixed_asset: - asset_accounts = self.get_company_default(["asset_received_but_not_billed", - "expenses_included_in_asset_valuation", "capital_work_in_progress_account"]) - - asset_amount = flt(item.net_amount) + flt(item.item_tax_amount/self.conversion_rate) - base_asset_amount = flt(item.base_net_amount + item.item_tax_amount) - - if not self.update_stock: - asset_rbnb_currency = get_account_currency(asset_accounts[0]) - gl_entries.append(self.get_gl_dict({ - "account": asset_accounts[0], - "against": self.supplier, - "remarks": self.get("remarks") or _("Accounting Entry for Asset"), - "debit": base_asset_amount, - "debit_in_account_currency": (base_asset_amount - if asset_rbnb_currency == self.company_currency else asset_amount) - })) - else: - cwip_account = get_asset_category_account(item.asset, - 'capital_work_in_progress_account') or asset_accounts[2] - - cwip_account_currency = get_account_currency(cwip_account) - gl_entries.append(self.get_gl_dict({ - "account": cwip_account, - "against": self.supplier, - "remarks": self.get("remarks") or _("Accounting Entry for Asset"), - "debit": base_asset_amount, - "debit_in_account_currency": (base_asset_amount - if cwip_account_currency == self.company_currency else asset_amount) - })) - - if item.item_tax_amount: - asset_eiiav_currency = get_account_currency(asset_accounts[0]) - gl_entries.append(self.get_gl_dict({ - "account": asset_accounts[1], - "against": self.supplier, - "remarks": self.get("remarks") or _("Accounting Entry for Asset"), - "cost_center": item.cost_center, - "credit": item.item_tax_amount, - "credit_in_account_currency": (item.item_tax_amount - if asset_eiiav_currency == self.company_currency else - item.item_tax_amount / self.conversion_rate) - })) else: gl_entries.append( self.get_gl_dict({ @@ -513,6 +470,67 @@ class PurchaseInvoice(BuyingController): self.negative_expense_to_be_booked += flt(item.item_tax_amount, \ item.precision("item_tax_amount")) + def get_asset_gl_entry(self, gl_entries): + for item in self.get("items"): + if item.is_fixed_asset: + asset_accounts = self.get_company_default(["asset_received_but_not_billed", + "expenses_included_in_asset_valuation", "capital_work_in_progress_account"]) + + asset_amount = flt(item.net_amount) + flt(item.item_tax_amount/self.conversion_rate) + base_asset_amount = flt(item.base_net_amount + item.item_tax_amount) + + if not self.update_stock: + asset_rbnb_currency = get_account_currency(asset_accounts[0]) + gl_entries.append(self.get_gl_dict({ + "account": asset_accounts[0], + "against": self.supplier, + "remarks": self.get("remarks") or _("Accounting Entry for Asset"), + "debit": base_asset_amount, + "debit_in_account_currency": (base_asset_amount + if asset_rbnb_currency == self.company_currency else asset_amount) + })) + + if item.item_tax_amount: + asset_eiiav_currency = get_account_currency(asset_accounts[0]) + gl_entries.append(self.get_gl_dict({ + "account": asset_accounts[1], + "against": self.supplier, + "remarks": self.get("remarks") or _("Accounting Entry for Asset"), + "cost_center": item.cost_center, + "credit": item.item_tax_amount, + "credit_in_account_currency": (item.item_tax_amount + if asset_eiiav_currency == self.company_currency else + item.item_tax_amount / self.conversion_rate) + })) + else: + cwip_account = get_asset_category_account(item.asset, + 'capital_work_in_progress_account') or asset_accounts[2] + + cwip_account_currency = get_account_currency(cwip_account) + gl_entries.append(self.get_gl_dict({ + "account": cwip_account, + "against": self.supplier, + "remarks": self.get("remarks") or _("Accounting Entry for Asset"), + "debit": base_asset_amount, + "debit_in_account_currency": (base_asset_amount + if cwip_account_currency == self.company_currency else asset_amount) + })) + + if item.item_tax_amount and not cint(erpnext.is_perpetual_inventory_enabled(self.company)): + asset_eiiav_currency = get_account_currency(asset_accounts[0]) + gl_entries.append(self.get_gl_dict({ + "account": asset_accounts[1], + "against": self.supplier, + "remarks": self.get("remarks") or _("Accounting Entry for Asset"), + "cost_center": item.cost_center, + "credit": item.item_tax_amount, + "credit_in_account_currency": (item.item_tax_amount + if asset_eiiav_currency == self.company_currency else + item.item_tax_amount / self.conversion_rate) + })) + + return gl_entries + def make_tax_gl_entries(self, gl_entries): # tax table gl entries valuation_tax = {} diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index ef9b2f69b6..eb770247b1 100755 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -2027,6 +2027,39 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "is_fixed_asset", + "fieldname": "asset_location", + "fieldtype": "Link", + "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, + "label": "Asset Location", + "length": 0, + "no_copy": 0, + "options": "Location", + "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_on_submit": 0, @@ -2258,7 +2291,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2018-04-23 14:07:33.576495", + "modified": "2018-05-16 17:50:21.957780", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index 55a29bc0df..e37038a5a8 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -28,6 +28,7 @@ class Asset(AccountsController): self.validate_expected_value_after_useful_life() def on_submit(self): + self.validate_in_use_date() self.set_status() self.update_stock_movement() @@ -48,6 +49,10 @@ class Asset(AccountsController): elif item.is_stock_item: frappe.throw(_("Item {0} must be a non-stock item").format(self.item_code)) + def validate_in_use_date(self): + if not self.available_for_use_date: + frappe.throw(_("Available for use data is required")) + def set_missing_values(self): if not self.asset_category: self.asset_category = frappe.db.get_value("Item", self.item_code, "asset_category") diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 4802e02094..a16047c34e 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -639,10 +639,10 @@ class AccountsController(TransactionBase): frappe.throw(_("Row #{0}: Asset {1} must be submitted").format(d.idx, d.asset)) elif self.doctype == "Purchase Invoice": - if asset.status != "Submitted": - frappe.throw(_("Row #{0}: Asset {1} is already {2}") - .format(d.idx, d.asset, asset.status)) - elif getdate(asset.purchase_date) != getdate(self.posting_date): + # if asset.status != "Submitted": +# frappe.throw(_("Row #{0}: Asset {1} is already {2}") +# .format(d.idx, d.asset, asset.status)) + if getdate(asset.purchase_date) != getdate(self.posting_date): frappe.throw(_("Row #{0}: Posting Date must be same as purchase date {1} of asset {2}").format(d.idx, asset.purchase_date, d.asset)) elif asset.is_existing_asset: frappe.throw(_("Row #{0}: Purchase Invoice cannot be made against an existing asset {1}").format(d.idx, d.asset)) diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 8b0ea3ed09..31c034da34 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -33,6 +33,10 @@ class StockController(AccountsController): items, warehouses = self.get_items_and_warehouses() update_gl_entries_after(self.posting_date, self.posting_time, warehouses, items, warehouse_account) + elif self.doctype in ['Purchase Receipt', 'Purchase Invoice']: + gl_entries = [] + gl_entries = self.get_asset_gl_entry(gl_entries) + make_gl_entries(gl_entries, from_repost=from_repost) def get_gl_entries(self, warehouse_account=None, default_expense_account=None, default_cost_center=None): diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js index c55013ea96..1a73ae5c4f 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js @@ -62,9 +62,8 @@ erpnext.stock.PurchaseReceiptController = erpnext.buying.BuyingController.extend this._super(); if(this.frm.doc.docstatus===1) { this.show_stock_ledger(); - if (erpnext.is_perpetual_inventory_enabled(this.frm.doc.company)) { - this.show_general_ledger(); - } + //removed for temporary + this.show_general_ledger(); this.frm.add_custom_button(__('Asset'), function() { frappe.route_options = { diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 573f7ed8f3..a91d39fd83 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -254,40 +254,7 @@ class PurchaseReceipt(BuyingController): d.rejected_warehouse not in warehouse_with_no_account: warehouse_with_no_account.append(d.warehouse) - elif d.is_fixed_asset: - asset_accounts = self.get_company_default(["capital_work_in_progress_account", - "asset_received_but_not_billed"]) - - # CWIP entry - cwip_account = get_asset_category_account(d.asset, - 'capital_work_in_progress_account') or asset_accounts[0] - - asset_amount = flt(d.net_amount) + flt(d.item_tax_amount/self.conversion_rate) - base_asset_amount = flt(d.base_net_amount + d.item_tax_amount) - - cwip_account_currency = get_account_currency(cwip_account) - gl_entries.append(self.get_gl_dict({ - "account": cwip_account, - "against": asset_accounts[1], - "cost_center": d.cost_center, - "remarks": self.get("remarks") or _("Accounting Entry for Asset"), - "debit": base_asset_amount, - "debit_in_account_currency": (base_asset_amount - if cwip_account_currency == self.company_currency else asset_amount) - })) - - # Asset received but not billed - asset_rbnb_currency = get_account_currency(asset_accounts[1]) - gl_entries.append(self.get_gl_dict({ - "account": asset_accounts[1], - "against": asset_accounts[0], - "cost_center": d.cost_center, - "remarks": self.get("remarks") or _("Accounting Entry for Asset"), - "credit": base_asset_amount, - "credit_in_account_currency": (base_asset_amount - if asset_rbnb_currency == self.company_currency else asset_amount) - })) - + self.get_asset_gl_entry(gl_entries) # Cost center-wise amount breakup for other charges included for valuation valuation_tax = {} for tax in self.get("taxes"): @@ -340,6 +307,44 @@ class PurchaseReceipt(BuyingController): "\n".join(warehouse_with_no_account)) return process_gl_map(gl_entries) + + def get_asset_gl_entry(self, gl_entries): + for d in self.get("items"): + if d.is_fixed_asset: + asset_accounts = self.get_company_default(["capital_work_in_progress_account", + "asset_received_but_not_billed"]) + + # CWIP entry + cwip_account = get_asset_category_account(d.asset, + 'capital_work_in_progress_account') or asset_accounts[0] + + asset_amount = flt(d.net_amount) + flt(d.item_tax_amount/self.conversion_rate) + base_asset_amount = flt(d.base_net_amount + d.item_tax_amount) + + cwip_account_currency = get_account_currency(cwip_account) + gl_entries.append(self.get_gl_dict({ + "account": cwip_account, + "against": asset_accounts[1], + "cost_center": d.cost_center, + "remarks": self.get("remarks") or _("Accounting Entry for Asset"), + "debit": base_asset_amount, + "debit_in_account_currency": (base_asset_amount + if cwip_account_currency == self.company_currency else asset_amount) + })) + + # Asset received but not billed + asset_rbnb_currency = get_account_currency(asset_accounts[1]) + gl_entries.append(self.get_gl_dict({ + "account": asset_accounts[1], + "against": asset_accounts[0], + "cost_center": d.cost_center, + "remarks": self.get("remarks") or _("Accounting Entry for Asset"), + "credit": base_asset_amount, + "credit_in_account_currency": (base_asset_amount + if asset_rbnb_currency == self.company_currency else asset_amount) + })) + + return gl_entries def update_status(self, status): self.set_status(update=True, status = status) From f3f1ba37b97022035d1a5cb0e3888cd7aba03c4c Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 16 May 2018 18:24:35 +0530 Subject: [PATCH 31/36] [ui] more fields in the list view of assets --- erpnext/assets/doctype/asset/asset.json | 66 ++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 6 deletions(-) diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json index 49a010d7d5..4dc5ff6c3a 100644 --- a/erpnext/assets/doctype/asset/asset.json +++ b/erpnext/assets/doctype/asset/asset.json @@ -42,6 +42,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -57,7 +58,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Asset Name", "length": 0, @@ -72,6 +73,7 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -103,6 +105,7 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -134,6 +137,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -149,7 +153,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 1, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 1, "label": "Asset Category", "length": 0, @@ -165,6 +169,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -196,6 +201,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -228,6 +234,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -260,6 +267,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -292,6 +300,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -322,6 +331,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -351,6 +361,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -382,6 +393,7 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -397,7 +409,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Location", "length": 0, @@ -413,6 +425,7 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -444,6 +457,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -475,6 +489,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -505,6 +520,7 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -535,6 +551,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -566,6 +583,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -595,6 +613,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -626,6 +645,7 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -656,6 +676,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -685,6 +706,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -715,6 +737,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -745,6 +768,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -777,6 +801,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -808,6 +833,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -839,6 +865,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -870,6 +897,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -899,6 +927,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -932,6 +961,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -963,6 +993,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -993,6 +1024,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1022,6 +1054,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1052,6 +1085,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1083,6 +1117,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1114,6 +1149,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1145,6 +1181,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1175,6 +1212,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1205,6 +1243,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1235,6 +1274,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1265,6 +1305,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1294,6 +1335,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1324,6 +1366,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1354,6 +1397,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1384,6 +1428,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1414,6 +1459,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1445,6 +1491,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1475,6 +1522,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1507,6 +1555,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1538,6 +1587,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1567,6 +1617,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1598,6 +1649,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1628,6 +1680,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1659,6 +1712,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1689,6 +1743,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, + "translatable": 0, "unique": 0 } ], @@ -1703,7 +1758,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-05-11 10:41:45.972686", + "modified": "2018-05-16 08:45:31.659647", "modified_by": "Administrator", "module": "Assets", "name": "Asset", @@ -1712,7 +1767,6 @@ "permissions": [ { "amend": 1, - "apply_user_permissions": 0, "cancel": 1, "create": 1, "delete": 1, @@ -1732,7 +1786,6 @@ }, { "amend": 0, - "apply_user_permissions": 0, "cancel": 1, "create": 1, "delete": 1, @@ -1757,6 +1810,7 @@ "show_name_in_global_search": 1, "sort_field": "modified", "sort_order": "DESC", + "title_field": "asset_name", "track_changes": 0, "track_seen": 0 } \ No newline at end of file From 8e4f676c8c1ab927c438a011abb939ac12335eeb Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 16 May 2018 19:55:52 +0530 Subject: [PATCH 32/36] [Fix] onload set default employee, leave approver, company --- .../consolidated_financial_statement.py | 4 ++++ .../doctype/leave_application/leave_application.js | 14 ++++++++++++-- .../doctype/leave_application/leave_application.py | 14 +++++++++++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py index 0b1fc6da84..750120b997 100644 --- a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py +++ b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py @@ -15,6 +15,10 @@ from erpnext.accounts.report.cash_flow.cash_flow import (get_cash_flow_accounts, def execute(filters=None): columns, data, message, chart = [], [], [], [] + + if not filters.get('company'): + return columns, data, message, chart + fiscal_year = get_fiscal_year_data(filters.get('from_fiscal_year'), filters.get('to_fiscal_year')) companies_column, companies = get_companies(filters) columns = get_columns(companies_column) diff --git a/erpnext/hr/doctype/leave_application/leave_application.js b/erpnext/hr/doctype/leave_application/leave_application.js index 5f1c8830fb..7a6b24658b 100755 --- a/erpnext/hr/doctype/leave_application/leave_application.js +++ b/erpnext/hr/doctype/leave_application/leave_application.js @@ -50,8 +50,11 @@ frappe.ui.form.on("Leave Application", { date: frm.doc.posting_date }, callback: function(r) { - if (!r.exc && r.message) { - leave_details = r.message; + if (!r.exc && r.message['leave_allocation']) { + leave_details = r.message['leave_allocation']; + } + if (!r.exc && r.message['leave_approver']) { + frm.set_value('leave_approver', r.message['leave_approver']); } } }); @@ -74,6 +77,13 @@ frappe.ui.form.on("Leave Application", { if(frm.doc.__islocal && !in_list(frappe.user_roles, "Employee")) { frm.set_intro(__("Fill the form and save it")); } + + if (!frm.doc.employee && frappe.defaults.get_user_permissions()) { + const perm = frappe.defaults.get_user_permissions(); + if (perm && perm['Employee']) { + frm.set_value('employee', perm['Employee']["docs"][0]) + } + } }, employee: function(frm) { diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py index d0305c3902..c58e0cf5cc 100755 --- a/erpnext/hr/doctype/leave_application/leave_application.py +++ b/erpnext/hr/doctype/leave_application/leave_application.py @@ -374,7 +374,12 @@ def get_leave_details(employee, date): "pending_leaves": leaves_pending, "remaining_leaves": remaining_leaves} - return leave_allocation + ret = { + 'leave_allocation': leave_allocation, + 'leave_approver': get_leave_approver(employee) + } + + return ret @frappe.whitelist() def get_leave_balance_on(employee, leave_type, date, allocation_records=None, @@ -603,3 +608,10 @@ def get_approved_leaves_for_period(employee, leave_type, from_date, to_date): return leave_days +def get_leave_approver(employee, department=None): + if not department: + department = frappe.db.get_value('Employee', employee, 'department') + + if department: + return frappe.db.get_value('Department Approver', {'parent': department, + 'parentfield': 'leave_approver', 'idx': 1}, 'approver') From 1a328d02d23614d439b90fe5a203432474cf915e Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 16 May 2018 21:34:06 +0530 Subject: [PATCH 33/36] [Fix] Gl Enrty issue --- .../accounts/doctype/purchase_invoice/purchase_invoice.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 5d26d8a0e9..729c101a7c 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -176,7 +176,8 @@ class PurchaseInvoice(BuyingController): if self.update_stock: for d in self.get('items'): if not d.warehouse: - frappe.throw(_("Warehouse required at Row No {0}").format(d.idx)) + frappe.throw(_("Warehouse required at Row No {0}, please set default warehouse for the item {1} for the company {2}"). + format(d.idx, d.item_code, self.company)) super(PurchaseInvoice, self).validate_warehouse() @@ -390,10 +391,10 @@ class PurchaseInvoice(BuyingController): warehouse_account = get_warehouse_account_map() for item in self.get("items"): - if flt(item.base_net_amount) and item.item_code in stock_items: + if flt(item.base_net_amount): account_currency = get_account_currency(item.expense_account) - if self.update_stock and self.auto_accounting_for_stock: + if self.update_stock and self.auto_accounting_for_stock and item.item_code in stock_items: val_rate_db_precision = 6 if cint(item.precision("valuation_rate")) <= 6 else 9 # warehouse account From 976af6b422baedbb19297c8b8bc44e84a1a35329 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 16 May 2018 21:43:16 +0530 Subject: [PATCH 34/36] [Fix] Cystom buttons not showing --- erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index c1a2c9741b..9a6deada72 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -115,7 +115,6 @@ erpnext.accounts.PurchaseInvoice = erpnext.buying.BuyingController.extend({ } this.frm.toggle_reqd("supplier_warehouse", this.frm.doc.is_subcontracted==="Yes"); - var me = this; if (doc.docstatus == 1 && !doc.inter_company_invoice_reference) { frappe.model.with_doc("Supplier", me.frm.doc.supplier, function() { var supplier = frappe.model.get_doc("Supplier", me.frm.doc.supplier); From e6acd4c57aef5e964bb03403a35e098b0f76cda7 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 16 May 2018 22:12:39 +0530 Subject: [PATCH 35/36] Multiple fixes in asset --- erpnext/assets/doctype/asset/asset.js | 7 +++++++ erpnext/assets/doctype/asset/asset.py | 5 ++++- erpnext/assets/doctype/asset_movement/asset_movement.py | 6 ++---- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js index c05667a767..88e7f78a02 100644 --- a/erpnext/assets/doctype/asset/asset.js +++ b/erpnext/assets/doctype/asset/asset.js @@ -157,6 +157,13 @@ frappe.ui.form.on('Asset', { } }, + available_for_use_date: function(frm) { + $.each(frm.doc.finance_books || [], function(i, d) { + if(!d.depreciation_start_date) d.depreciation_start_date = frm.doc.available_for_use_date; + }); + refresh_field("finance_books"); + }, + is_existing_asset: function(frm) { // frm.toggle_reqd("next_depreciation_date", (!frm.doc.is_existing_asset && frm.doc.calculate_depreciation)); }, diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index e37038a5a8..75e808870f 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -51,7 +51,7 @@ class Asset(AccountsController): def validate_in_use_date(self): if not self.available_for_use_date: - frappe.throw(_("Available for use data is required")) + frappe.throw(_("Available for use date is required")) def set_missing_values(self): if not self.asset_category: @@ -162,6 +162,9 @@ class Asset(AccountsController): frappe.throw(_("Row {0}: Expected Value After Useful Life must be less than Gross Purchase Amount") .format(row.idx)) + if not row.depreciation_start_date: + frappe.throw(_("Row {0}: Depreciation Start Date is required").format(row.idx)) + if not self.is_existing_asset: self.opening_accumulated_depreciation = 0 self.number_of_depreciations_booked = 0 diff --git a/erpnext/assets/doctype/asset_movement/asset_movement.py b/erpnext/assets/doctype/asset_movement/asset_movement.py index e34d2a3066..638987ee96 100644 --- a/erpnext/assets/doctype/asset_movement/asset_movement.py +++ b/erpnext/assets/doctype/asset_movement/asset_movement.py @@ -55,7 +55,5 @@ class AssetMovement(Document): frappe.db.set_value("Asset", self.asset, "location", location) if self.serial_no: - serial_nos = get_serial_nos(self.serial_no) - - frappe.db.sql(""" update `tabSerial No` set location = %s where name in (%s)""" - %('%s', ','.join(['%s'] * len(serial_nos))), (location, tuple(serial_nos))) + for d in get_serial_nos(self.serial_no): + frappe.db.set_value('Serial No', d, 'location', location) From a91765707a8ddddca7a3fcf6bd10291012aa6684 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 16 May 2018 23:13:02 +0530 Subject: [PATCH 36/36] [Fix] TDS issue --- erpnext/accounts/party.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index 69b369f081..2222f1f431 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -487,7 +487,7 @@ def get_patry_tax_withholding_details(ref_doc): if tax.valid_till and date_diff(tax.valid_till, ref_doc.posting_date) > 0: tax_mapper.update({ - "rate": tax.applicable_percentage + "rate": tax.applicable_percent }) prepare_tax_withholding_details(tax_mapper, tax_withholding_details)