feat: Session Defaults

This commit is contained in:
Rucha Mahabal 2019-07-21 23:16:50 +05:30
parent 9531f89294
commit 4b2ab9e00d
13 changed files with 194 additions and 2 deletions

View file

@ -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
}

View file

@ -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

View file

@ -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) {
// }
});

View file

@ -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
}

View file

@ -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
))

View file

@ -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

View file

@ -252,4 +252,4 @@ def get_view_logs(doctype, docname):
if view_logs:
logs = view_logs
return logs
return logs

View file

@ -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 = {

View file

@ -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()

View file

@ -28,6 +28,8 @@
{%= __("My Profile") %}</a></li>
<li><a href="#Form/User/{%= encodeURIComponent(frappe.session.user) %}">
{%= __("My Settings") %}</a></li>
<li><a href="#" onclick="return frappe.ui.toolbar.setup_session_defaults();">
{%= __("Session Defaults") %}</a></li>
<li class="navbar-reload">
<a href="#" onclick="return frappe.ui.toolbar.clear_cache();">
{%= __("Reload") %}</a></li>

View file

@ -235,3 +235,50 @@ frappe.ui.toolbar.show_about = function() {
}
return false;
};
frappe.ui.toolbar.setup_session_defaults = function() {
let fields = [];
frappe.call({
method: 'frappe.core.doctype.session_default_settings.session_default_settings.get_session_default_values',
callback: function (data) {
fields = JSON.parse(data.message);
let perms = frappe.perm.get_perm('Session Default Settings');
//add settings button only if user is a System Manager or has permission on 'Session Default Settings'
if ((in_list(frappe.user_roles, 'System Manager')) || (perms[0].read == 1)) {
fields[fields.length] = {
'fieldname': 'settings',
'fieldtype': 'Button',
'label': __('Settings'),
'click': () => {
frappe.set_route('Form', 'Session Default Settings', 'Session Default Settings');
}
}
}
frappe.prompt(fields, function(values) {
frappe.call({
method: 'frappe.core.doctype.session_default_settings.session_default_settings.set_session_default_values',
args: {
default_values: JSON.stringify(values)
},
callback: function(data) {
if (data.message == "success") {
frappe.show_alert({
'message': __('Session Defaults Saved'),
'indicator': 'green'
});
}
else {
frappe.show_alert({
'message': __('An error occurred while setting Session Defaults'),
'indicator': 'red'
});
}
}
})
},
__('Session Defaults'),
__('Save'),
);
}
});
};