Thanks a lot Jay. If you could just a take a look at the below.
To make things easy added the following server side code
Whenever a territory is assigned to a sales user , this automatically sets and removes permissions based on territory.
from __future__ import unicode_literals
import frappe
from frappe.permissions import add_user_permission, remove_user_permission, \
set_user_permission_if_allowed, has_permission, get_doc_permissions
def remove_user_permissionsmain(ter):
doc = frappe.get_doc('Territory', ter)
upermdoc=frappe.get_doc('User Permission', {"allow": "Territory","for_value":doc.name})
# tmanid=frappe.get_doc('Employee', {"employee_name": upermdoc.user})
tmanid=upermdoc.user
remove_user_permission("Territory", doc.name,tmanid)
def update_user_permissionsmain(ter,tmanager):
doc = frappe.get_doc('Territory', ter)
tmanid=frappe.get_doc('Employee', {"employee_name": tmanager})
# if not doc.create_user_permission: return
if not has_permission('User Permission', ptype='write', raise_exception=False): return
employee_user_permission_exists = frappe.db.exists('User Permission', {
'allow': 'Territory',
'for_value': doc.name,
'user': tmanid.user_id
})
if employee_user_permission_exists: return
employee_user_permission_exists = frappe.db.exists('User Permission', {
'allow': 'Territory',
'for_value': doc.name,
'user': tmanid.user_id
})
if employee_user_permission_exists: return
add_user_permission("Territory", doc.name, tmanid.user_id)
# set_user_permission_if_allowed("Company", self.company, self.user_id)
# add territory permission when a territory is assigned
@frappe.whitelist()
def update_user_permissions(ter,tmanager):
# called via User hook
# doc = frappe.get_doc('Territory', ter)
# print(doc.territory_manager)
if tmanager:
# if not has_permission('User Permission', ptype='write', raise_exception=False): return
# territory = frappe.get_doc("Territory", {"user_id": doc.name})
# territory.update_user_permissions()
update_user_permissionsmain(ter,tmanager)
@frappe.whitelist()
def remove_user_permissions(ter):
remove_user_permissionsmain(ter)
And this client side code for Territory
`frappe.ui.form.on('Territory', {
after_save(frm) {
if (frm.doc.territory_manager)
{
frappe.call({
method: 'custapplocation.crmimprovements.update_user_permissions',
args: {
ter: frm.doc.name,
tmanager:frm.doc.territory_manager
},
callback: function(r) {
frappe.msgprint(
"Territorry permission added to Territory Manager" );
}
});
}
if (!frm.doc.territory_manager)
{
frappe.call({
method: 'custapplocation.custom.crmimprovements.remove_user_permissions',
args: {
ter: frm.doc.name
},
callback: function(r) {
}
}); }
}
});`