diff --git a/msp/hooks.py b/msp/hooks.py index 1a24064..9fdebce 100644 --- a/msp/hooks.py +++ b/msp/hooks.py @@ -39,6 +39,8 @@ jenv = { # doctype_tree_js = {"doctype" : "public/js/doctype_tree.js"} # doctype_calendar_js = {"doctype" : "public/js/doctype_calendar.js"} +doctype_js = {"Location" : "public/js/location.js"} + # Home Pages # ---------- @@ -133,3 +135,6 @@ doc_events = { # "Task": "msp.task.get_dashboard_data" # } +override_doctype_class = { + "Location": "msp.overrides.location.CustomLocation.CustomLocation" +} diff --git a/msp/overrides/location/CustomLocation.py b/msp/overrides/location/CustomLocation.py new file mode 100644 index 0000000..ea210b5 --- /dev/null +++ b/msp/overrides/location/CustomLocation.py @@ -0,0 +1,18 @@ +import frappe +from erpnext.assets.doctype.location.location import Location + +class CustomLocation(Location): + @frappe.whitelist() + def get_all_child_locations_from_location(self): + parent_location_name = self.name + locations_to_filter = [] + return self.search_child_locations(locations_to_filter, parent_location_name) + + def search_child_locations(self, locations_to_filter, parent_location_name): + locations_to_filter.append(parent_location_name) + child_locations = frappe.db.get_list('Location', {'parent_location': parent_location_name}, ['name']) + if child_locations: + for child_location in child_locations: + self.search_child_locations(locations_to_filter, child_location['name']) + + return locations_to_filter diff --git a/msp/overrides/location/__init__.py b/msp/overrides/location/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/msp/public/js/location.js b/msp/public/js/location.js new file mode 100644 index 0000000..6391515 --- /dev/null +++ b/msp/public/js/location.js @@ -0,0 +1,10 @@ +frappe.ui.form.on('Location', { + refresh(frm) { + frm.add_custom_button('Show IT Objects in Location', () => { + frm.call('get_all_child_locations_from_location',{}) + .then((response) => { + frappe.set_route('List', 'IT Object', { location: ['in', `${response.message.toString()}`] }) + }) + }) + } +});