diff --git a/frappe/core/doctype/session_default/__init__.py b/frappe/core/doctype/session_default/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frappe/core/doctype/session_default/session_default.json b/frappe/core/doctype/session_default/session_default.json new file mode 100644 index 0000000000..d382e12456 --- /dev/null +++ b/frappe/core/doctype/session_default/session_default.json @@ -0,0 +1,29 @@ +{ + "creation": "2019-07-17 16:21:33.546379", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "ref_doctype" + ], + "fields": [ + { + "fieldname": "ref_doctype", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Document Type", + "options": "DocType" + } + ], + "istable": 1, + "modified": "2019-07-21 13:22:25.752553", + "modified_by": "Administrator", + "module": "Core", + "name": "Session Default", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/frappe/core/doctype/session_default/session_default.py b/frappe/core/doctype/session_default/session_default.py new file mode 100644 index 0000000000..8a8db46ff1 --- /dev/null +++ b/frappe/core/doctype/session_default/session_default.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2019, Frappe Technologies and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +# import frappe +from frappe.model.document import Document + +class SessionDefault(Document): + pass diff --git a/frappe/core/doctype/session_default_settings/__init__.py b/frappe/core/doctype/session_default_settings/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frappe/core/doctype/session_default_settings/session_default_settings.js b/frappe/core/doctype/session_default_settings/session_default_settings.js new file mode 100644 index 0000000000..9b71a17aed --- /dev/null +++ b/frappe/core/doctype/session_default_settings/session_default_settings.js @@ -0,0 +1,8 @@ +// Copyright (c) 2019, Frappe Technologies and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Session Default Settings', { + // refresh: function(frm) { + + // } +}); diff --git a/frappe/core/doctype/session_default_settings/session_default_settings.json b/frappe/core/doctype/session_default_settings/session_default_settings.json new file mode 100644 index 0000000000..3eeb3f4167 --- /dev/null +++ b/frappe/core/doctype/session_default_settings/session_default_settings.json @@ -0,0 +1,39 @@ +{ + "creation": "2019-07-17 16:22:31.300991", + "doctype": "DocType", + "editable_grid": 1, + "engine": "InnoDB", + "field_order": [ + "session_defaults" + ], + "fields": [ + { + "fieldname": "session_defaults", + "fieldtype": "Table", + "label": "Session Defaults", + "options": "Session Default" + } + ], + "issingle": 1, + "modified": "2019-07-19 16:04:33.971089", + "modified_by": "Administrator", + "module": "Core", + "name": "Session Default Settings", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "quick_entry": 1, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1 +} \ No newline at end of file diff --git a/frappe/core/doctype/session_default_settings/session_default_settings.py b/frappe/core/doctype/session_default_settings/session_default_settings.py new file mode 100644 index 0000000000..5af15ac3a2 --- /dev/null +++ b/frappe/core/doctype/session_default_settings/session_default_settings.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2019, Frappe Technologies and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +import json +from frappe.model.document import Document + +class SessionDefaultSettings(Document): + pass + +@frappe.whitelist() +def get_session_default_values(): + settings = frappe.get_single('Session Default Settings') + fields = [] + for default_values in settings.session_defaults: + reference_doctype = frappe.scrub(default_values.ref_doctype) + fields.append({ + 'fieldname': reference_doctype, + 'fieldtype': 'Link', + 'options': default_values.ref_doctype, + 'label': 'Default ' + default_values.ref_doctype, + 'default': frappe.defaults.get_user_default(reference_doctype) + }) + return json.dumps(fields) + +@frappe.whitelist() +def set_session_default_values(default_values): + default_values = json.loads(default_values) + for entry in default_values: + try: + frappe.defaults.set_user_default(entry, default_values.get(entry)) + except: + return + return "success" + +#called on hook 'on_logout' to clear defaults for the session +def clear_session_defaults(): + settings = frappe.get_single('Session Default Settings').session_defaults + for entry in settings: + document_type = frappe.db.get_value('Session Default', entry.name, 'ref_doctype') + frappe.defaults.clear_user_default(frappe.scrub(document_type + )) diff --git a/frappe/core/doctype/session_default_settings/test_session_default_settings.py b/frappe/core/doctype/session_default_settings/test_session_default_settings.py new file mode 100644 index 0000000000..0044ab7c31 --- /dev/null +++ b/frappe/core/doctype/session_default_settings/test_session_default_settings.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2019, Frappe Technologies and Contributors +# See license.txt +from __future__ import unicode_literals + +# import frappe +import unittest + +class TestSessionDefaultSettings(unittest.TestCase): + pass diff --git a/frappe/desk/form/load.py b/frappe/desk/form/load.py index 3b67b78144..e790bf6d06 100644 --- a/frappe/desk/form/load.py +++ b/frappe/desk/form/load.py @@ -252,4 +252,4 @@ def get_view_logs(doctype, docname): if view_logs: logs = view_logs - return logs \ No newline at end of file + return logs diff --git a/frappe/hooks.py b/frappe/hooks.py index 6b9caec22a..545ac8c3e8 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -80,6 +80,8 @@ on_session_creation = [ "frappe.utils.scheduler.reset_enabled_scheduler_events", ] +on_logout = "frappe.core.doctype.session_default_settings.session_default_settings.clear_session_defaults" + # permissions permission_query_conditions = { diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index 47380c6550..570835bc32 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -175,10 +175,11 @@ class BaseDocument(object): if not self.doctype: return value if not isinstance(value, BaseDocument): - if "doctype" not in value: + if "doctype" not in value or value['doctype'] is None: value["doctype"] = self.get_table_field_doctype(key) if not value["doctype"]: raise AttributeError(key) + value = get_controller(value["doctype"])(value) value.init_valid_columns() diff --git a/frappe/public/js/frappe/ui/toolbar/navbar.html b/frappe/public/js/frappe/ui/toolbar/navbar.html index 799cc9bb3b..5e49d533bf 100644 --- a/frappe/public/js/frappe/ui/toolbar/navbar.html +++ b/frappe/public/js/frappe/ui/toolbar/navbar.html @@ -28,6 +28,8 @@ {%= __("My Profile") %}