def add_permissions(): for doctype in ('GST HSN Code', 'GST Settings'): add_permission(doctype, 'All', 0) for role in ('Accounts Manager', 'System Manager', 'Item Manager', 'Stock Manager'): add_permission(doctype, role, 0) update_permission_property(doctype, role, 0, 'write', 1) update_permission_property(doctype, role, 0, 'create', 1)
def test_automatic_apply_user_permissions(self): '''Test user permissions are automatically applied when a user permission is created''' # create a user frappe.get_doc(dict(doctype='User', email='*****@*****.**', first_name='tester')).insert(ignore_if_duplicate=True) frappe.get_doc(dict(doctype='Role', role_name='Test Role User Perm') ).insert(ignore_if_duplicate=True) # add a permission for event add_permission('DocType', 'Test Role User Perm') frappe.get_doc('User', '*****@*****.**').add_roles('Test Role User Perm') # add user permission add_user_permission('Module Def', 'Core', '*****@*****.**', True) # check if user permission is applied in the new role _perm = None for perm in get_valid_perms('DocType', '*****@*****.**'): if perm.role == 'Test Role User Perm': _perm = perm self.assertEqual(_perm.apply_user_permissions, 1) # restrict by module self.assertTrue('Module Def' in json.loads(_perm.user_permission_doctypes))
def test_automatic_apply_user_permissions(self): '''Test user permissions are automatically applied when a user permission is created''' # create a user frappe.get_doc(dict(doctype='User', email='*****@*****.**', first_name='tester')).insert(ignore_if_duplicate=True) frappe.get_doc(dict(doctype='Role', role_name='Test Role User Perm') ).insert(ignore_if_duplicate=True) # add a permission for event add_permission('DocType', 'Test Role User Perm') frappe.get_doc('User', '*****@*****.**').add_roles('Test Role User Perm') # add user permission add_user_permission('Module Def', 'Core', '*****@*****.**', True) # check if user permission is applied in the new role _perm = None for perm in get_valid_perms('DocType', '*****@*****.**'): if perm.role == 'Test Role User Perm': _perm = perm self.assertEqual(_perm.apply_user_permissions, 1) # restrict by module self.assertTrue('Module Def' in json.loads(_perm.user_permission_doctypes))
def add(parent, role, permlevel): try: frappe.only_for("System Manager") add_permission(parent, role, permlevel) except: from matajer import test_log import traceback test_log(traceback.format_exc())
def add_permissions(): """Add Permissions for UAE VAT Settings and UAE VAT Account.""" for doctype in ('UAE VAT Settings', 'UAE VAT Account'): add_permission(doctype, 'All', 0) for role in ('Accounts Manager', 'Accounts User', 'System Manager'): add_permission(doctype, role, 0) update_permission_property(doctype, role, 0, 'write', 1) update_permission_property(doctype, role, 0, 'create', 1)
def add_permissions(): """Add Permissions for UAE VAT Settings and UAE VAT Account.""" for doctype in ("UAE VAT Settings", "UAE VAT Account"): add_permission(doctype, "All", 0) for role in ("Accounts Manager", "Accounts User", "System Manager"): add_permission(doctype, role, 0) update_permission_property(doctype, role, 0, "write", 1) update_permission_property(doctype, role, 0, "create", 1)
def add_permissions(): """Add Permissions for KSA VAT Setting.""" add_permission('KSA VAT Setting', 'All', 0) for role in ('Accounts Manager', 'Accounts User', 'System Manager'): add_permission('KSA VAT Setting', role, 0) update_permission_property('KSA VAT Setting', role, 0, 'write', 1) update_permission_property('KSA VAT Setting', role, 0, 'create', 1) """Enable KSA VAT Report""" frappe.db.set_value('Report', 'KSA VAT', 'disabled', 0)
def execute(): company = frappe.get_all('Company', filters={'country': 'India'}) if not company: return for doctype in ('GST HSN Code', 'GST Settings'): add_permission(doctype, 'Accounts Manager', 0) update_permission_property(doctype, 'Accounts Manager', 0, 'write', 1) update_permission_property(doctype, 'Accounts Manager', 0, 'create', 1)
def add_permissions(): """Add Permissions for KSA VAT Setting.""" add_permission("KSA VAT Setting", "All", 0) for role in ("Accounts Manager", "Accounts User", "System Manager"): add_permission("KSA VAT Setting", role, 0) update_permission_property("KSA VAT Setting", role, 0, "write", 1) update_permission_property("KSA VAT Setting", role, 0, "create", 1) """Enable KSA VAT Report""" frappe.db.set_value("Report", "KSA VAT", "disabled", 0)
def execute(): company = frappe.get_all('Company', filters = {'country': 'India'}) if not company: return for doctype in ('GST HSN Code', 'GST Settings'): add_permission(doctype, 'Accounts Manager', 0) update_permission_property(doctype, 'Accounts Manager', 0, 'write', 1) update_permission_property(doctype, 'Accounts Manager', 0, 'create', 1)
def test_if_owner_permission_overrides_properly(self): # check if user is not granted access if the user is not the owner of the doc # Blogger has only read access on the blog post unless he is the owner of the blog update("Blog Post", "Blogger", 0, "if_owner", 1) update("Blog Post", "Blogger", 0, "read", 1) update("Blog Post", "Blogger", 0, "write", 1) update("Blog Post", "Blogger", 0, "delete", 1) # currently test2 user has not created any document # still he should be able to do get_list query which should # not raise permission error but simply return empty list frappe.set_user("*****@*****.**") self.assertEqual(frappe.get_list("Blog Post"), []) frappe.set_user("Administrator") # creates a custom docperm with just read access # now any user can read any blog post (but other rights are limited to the blog post owner) add_permission("Blog Post", "Blogger") frappe.clear_cache(doctype="Blog Post") frappe.delete_doc("Blog Post", "-test-blog-post-title") frappe.set_user("*****@*****.**") doc = frappe.get_doc( { "doctype": "Blog Post", "blog_category": "-test-blog-category", "blogger": "_Test Blogger 1", "title": "_Test Blog Post Title", "content": "_Test Blog Post Content", } ) doc.insert() frappe.set_user("*****@*****.**") doc = frappe.get_doc(doc.doctype, doc.name) self.assertTrue(doc.has_permission("read")) self.assertFalse(doc.has_permission("write")) self.assertFalse(doc.has_permission("delete")) # check if owner of the doc has the access that is available only for the owner of the doc frappe.set_user("*****@*****.**") doc = frappe.get_doc(doc.doctype, doc.name) self.assertTrue(doc.has_permission("read")) self.assertTrue(doc.has_permission("write")) self.assertTrue(doc.has_permission("delete")) # delete the created doc frappe.delete_doc("Blog Post", "-test-blog-post-title")
def set_permissions_to_core_doctypes(): roles = ['Bank Checker', 'Bank Maker'] core_doc_list = [ 'Bank Account', 'Company', 'Supplier', 'Customer', 'Employee' ] # assign select permission for role in roles: for doc in core_doc_list: add_permission(doc, role, 0) update_permission_property(doc, role, 0, 'select', 1)
def execute(): company = frappe.get_all('Company', filters={'country': 'India'}) if not company: return frappe.reload_doc('regional', 'doctype', 'Lower Deduction Certificate') add_permission('Lower Deduction Certificate', 'Accounts Manager', 0) update_permission_property('Lower Deduction Certificate', 'Accounts Manager', 0, 'write', 1) update_permission_property('Lower Deduction Certificate', 'Accounts Manager', 0, 'create', 1)
def add_permissions(): doctype = "Product Tax Category" for role in ( "Accounts Manager", "Accounts User", "System Manager", "Item Manager", "Stock Manager", ): add_permission(doctype, role, 0) update_permission_property(doctype, role, 0, "write", 1) update_permission_property(doctype, role, 0, "create", 1)
def execute(): company = frappe.get_all("Company", filters={"country": "India"}) if not company: return frappe.reload_doc("regional", "doctype", "Lower Deduction Certificate") add_permission("Lower Deduction Certificate", "Accounts Manager", 0) update_permission_property("Lower Deduction Certificate", "Accounts Manager", 0, "write", 1) update_permission_property("Lower Deduction Certificate", "Accounts Manager", 0, "create", 1)
def test_if_owner_permission_overrides_properly(self): # check if user is not granted access if the user is not the owner of the doc # Blogger has only read access on the blog post unless he is the owner of the blog update('Blog Post', 'Blogger', 0, 'if_owner', 1) update('Blog Post', 'Blogger', 0, 'read', 1) update('Blog Post', 'Blogger', 0, 'write', 1) update('Blog Post', 'Blogger', 0, 'delete', 1) # currently test2 user has not created any document # still he should be able to do get_list query which should # not raise permission error but simply return empty list frappe.set_user("*****@*****.**") self.assertEqual(frappe.get_list('Blog Post'), []) frappe.set_user("Administrator") # creates a custom docperm with just read access # now any user can read any blog post (but other rights are limited to the blog post owner) add_permission('Blog Post', 'Blogger') frappe.clear_cache(doctype="Blog Post") frappe.delete_doc('Blog Post', '-test-blog-post-title') frappe.set_user("*****@*****.**") doc = frappe.get_doc({ "doctype": "Blog Post", "blog_category": "_Test Blog Category", "blogger": "_Test Blogger 1", "title": "_Test Blog Post Title", "content": "_Test Blog Post Content" }) doc.insert() frappe.set_user("*****@*****.**") doc = frappe.get_doc(doc.doctype, doc.name) self.assertTrue(doc.has_permission("read")) self.assertFalse(doc.has_permission("write")) self.assertFalse(doc.has_permission("delete")) # check if owner of the doc has the access that is available only for the owner of the doc frappe.set_user("*****@*****.**") doc = frappe.get_doc(doc.doctype, doc.name) self.assertTrue(doc.has_permission("read")) self.assertTrue(doc.has_permission("write")) self.assertTrue(doc.has_permission("delete")) # delete the created doc frappe.delete_doc('Blog Post', '-test-blog-post-title')
def execute(): company = frappe.get_all('Company', filters={'country': 'Italy'}) if not company: return make_custom_fields() add_permission('Import Supplier Invoice', 'Accounts Manager', 0) update_permission_property('Import Supplier Invoice', 'Accounts Manager', 0, 'write', 1) update_permission_property('Import Supplier Invoice', 'Accounts Manager', 0, 'create', 1)
def execute(): company = frappe.get_all("Company", filters={"country": "Italy"}) if not company: return make_custom_fields() frappe.reload_doc("regional", "doctype", "import_supplier_invoice") add_permission("Import Supplier Invoice", "Accounts Manager", 0) update_permission_property("Import Supplier Invoice", "Accounts Manager", 0, "write", 1) update_permission_property("Import Supplier Invoice", "Accounts Manager", 0, "create", 1)
def test_select_permission(self): # grant only select perm to blog post add_permission("Blog Post", "Sales User", 0) update_permission_property("Blog Post", "Sales User", 0, "select", 1) update_permission_property("Blog Post", "Sales User", 0, "read", 0) update_permission_property("Blog Post", "Sales User", 0, "write", 0) frappe.clear_cache(doctype="Blog Post") frappe.set_user("*****@*****.**") # validate select perm post = frappe.get_doc("Blog Post", "-test-blog-post") self.assertTrue(post.has_permission("select")) # validate does not have read and write perm self.assertFalse(post.has_permission("read")) self.assertRaises(frappe.PermissionError, post.save)
def add_role_permissions(doctype, role): name = frappe.get_value('Custom DocPerm', dict(parent=doctype, role=role, permlevel=0)) if not name: name = add_permission(doctype, role, 0) return name
def make_role_and_permissions(): role_name = 'Bank Payments Manager' try: role = frappe.new_doc('Role') role.update({'role_name': role_name, 'desk_access': 1}) role.save() except frappe.DuplicateEntryError: pass frappe.reload_doc('bank_integration', 'doctype', 'bank_integration_settings') setup_custom_perms('Bank Integration Settings') for doctype in ['Employee', 'Customer', 'Supplier', 'Payment Entry']: add_permission(doctype, role_name, 7) update_permission_property(doctype, role_name, 7, 'write', 1) frappe.db.commit()
def add_permissions(): """Add Permissions for South Africa VAT Settings and South Africa VAT Account and VAT Audit Report""" for doctype in ("South Africa VAT Settings", "South Africa VAT Account"): add_permission(doctype, "All", 0) for role in ("Accounts Manager", "Accounts User", "System Manager"): add_permission(doctype, role, 0) update_permission_property(doctype, role, 0, "write", 1) update_permission_property(doctype, role, 0, "create", 1) if not frappe.db.get_value("Custom Role", dict(report="VAT Audit Report")): frappe.get_doc( dict( doctype="Custom Role", report="VAT Audit Report", roles=[dict(role="Accounts User"), dict(role="Accounts Manager"), dict(role="Auditor")], ) ).insert()
def add_permissions(): """Add Permissions for South Africa VAT Settings and South Africa VAT Account and VAT Audit Report""" for doctype in ('South Africa VAT Settings', 'South Africa VAT Account'): add_permission(doctype, 'All', 0) for role in ('Accounts Manager', 'Accounts User', 'System Manager'): add_permission(doctype, role, 0) update_permission_property(doctype, role, 0, 'write', 1) update_permission_property(doctype, role, 0, 'create', 1) if not frappe.db.get_value('Custom Role', dict(report="VAT Audit Report")): frappe.get_doc( dict(doctype='Custom Role', report="VAT Audit Report", roles=[ dict(role='Accounts User'), dict(role='Accounts Manager'), dict(role='Auditor') ])).insert()
def test_if_owner_permission_overrides_properly(self): # check if user is not granted access if the user is not the owner of the doc # Blogger has only read access on the blog post unless he is the owner of the blog update('Blog Post', 'Blogger', 0, 'if_owner', 1) update('Blog Post', 'Blogger', 0, 'read', 1) update('Blog Post', 'Blogger', 0, 'write', 1) update('Blog Post', 'Blogger', 0, 'delete', 1) # creates a custom docperm with just read access add_permission('Blog Post', 'Blogger') frappe.clear_cache(doctype="Blog Post") frappe.delete_doc('Blog Post', '-test-blog-post-title') frappe.set_user("*****@*****.**") doc = frappe.get_doc({ "doctype": "Blog Post", "blog_category": "_Test Blog Category", "blogger": "_Test Blogger 1", "title": "_Test Blog Post Title", "content": "_Test Blog Post Content" }) doc.insert() frappe.set_user("*****@*****.**") doc = frappe.get_doc(doc.doctype, doc.name) self.assertTrue(doc.has_permission("read")) self.assertFalse(doc.has_permission("write")) self.assertFalse(doc.has_permission("delete")) # check if owner of the doc has the access that is available only for the owner of the doc frappe.set_user("*****@*****.**") doc = frappe.get_doc(doc.doctype, doc.name) self.assertTrue(doc.has_permission("read")) self.assertTrue(doc.has_permission("write")) self.assertTrue(doc.has_permission("delete")) # delete the created doc frappe.delete_doc('Blog Post', '-test-blog-post-title')
def test_doc_read_access(self): #owner and assigned_by is testperm todo1 = create_new_todo('Test1', '*****@*****.**') test_user = frappe.get_doc('User', '*****@*****.**') #owner is testperm, but assigned_by is test4 todo2 = create_new_todo('Test2', '*****@*****.**') frappe.set_user('*****@*****.**') #owner and assigned_by is test4 todo3 = create_new_todo('Test3', '*****@*****.**') # user without any role to read or write todo document self.assertFalse(todo1.has_permission("read")) self.assertFalse(todo1.has_permission("write")) # user without any role but he/she is assigned_by of that todo document self.assertTrue(todo2.has_permission("read")) self.assertTrue(todo2.has_permission("write")) # user is the owner and assigned_by of the todo document self.assertTrue(todo3.has_permission("read")) self.assertTrue(todo3.has_permission("write")) frappe.set_user('Administrator') test_user.add_roles('Blogger') add_permission('ToDo', 'Blogger') frappe.set_user('*****@*****.**') # user with only read access to todo document, not an owner or assigned_by self.assertTrue(todo1.has_permission("read")) self.assertFalse(todo1.has_permission("write")) frappe.set_user('Administrator') test_user.remove_roles('Blogger') reset_perms('ToDo') clear_permissions_cache('ToDo') frappe.db.rollback()
def add_permissions(): for doctype in ('GST HSN Code', 'GST Settings', 'GSTR 3B Report', 'Lower Deduction Certificate', 'E Invoice Settings'): add_permission(doctype, 'All', 0) for role in ('Accounts Manager', 'Accounts User', 'System Manager'): add_permission(doctype, role, 0) update_permission_property(doctype, role, 0, 'write', 1) update_permission_property(doctype, role, 0, 'create', 1) if doctype == 'GST HSN Code': for role in ('Item Manager', 'Stock Manager'): add_permission(doctype, role, 0) update_permission_property(doctype, role, 0, 'write', 1) update_permission_property(doctype, role, 0, 'create', 1)
def add_permissions(): doctype = 'Import Supplier Invoice' add_permission(doctype, 'All', 0) for role in ('Accounts Manager', 'Accounts User','Purchase User', 'Auditor'): add_permission(doctype, role, 0) update_permission_property(doctype, role, 0, 'print', 1) update_permission_property(doctype, role, 0, 'report', 1) if role in ('Accounts Manager', 'Accounts User'): update_permission_property(doctype, role, 0, 'write', 1) update_permission_property(doctype, role, 0, 'create', 1) update_permission_property(doctype, 'Accounts Manager', 0, 'delete', 1) add_permission(doctype, 'Accounts Manager', 1) update_permission_property(doctype, 'Accounts Manager', 1, 'write', 1) update_permission_property(doctype, 'Accounts Manager', 1, 'create', 1)
def add_permissions(): doctype = "Import Supplier Invoice" add_permission(doctype, "All", 0) for role in ("Accounts Manager", "Accounts User", "Purchase User", "Auditor"): add_permission(doctype, role, 0) update_permission_property(doctype, role, 0, "print", 1) update_permission_property(doctype, role, 0, "report", 1) if role in ("Accounts Manager", "Accounts User"): update_permission_property(doctype, role, 0, "write", 1) update_permission_property(doctype, role, 0, "create", 1) update_permission_property(doctype, "Accounts Manager", 0, "delete", 1) add_permission(doctype, "Accounts Manager", 1) update_permission_property(doctype, "Accounts Manager", 1, "write", 1) update_permission_property(doctype, "Accounts Manager", 1, "create", 1)
def add(parent, role, permlevel): frappe.only_for("System Manager") add_permission(parent, role, permlevel)
def add_permissions(): for doctype in ('GST HSN Code', 'GST Settings'): add_permission(doctype, 'All', 0) add_permission(doctype, 'Accounts Manager', 0) update_permission_property(doctype, 'Accounts Manager', 0, 'write', 1) update_permission_property(doctype, 'Accounts Manager', 0, 'create', 1)
def add_permissions(): for doctype in ('GST HSN Code', 'GST Settings'): add_permission(doctype, 'Accounts Manager', 0) add_permission(doctype, 'All', 0)
def add_permissions(): for doctype in ('GST HSN Code', 'GST Settings'): add_permission(doctype, 'Accounts Manager', 0) add_permission(doctype, 'All', 0)
def add(parent, role, permlevel): frappe.only_for("System Manager") add_permission(parent, role, permlevel)
def add(parent, role, permlevel): frappe.only_for(("System Manager", "Local Admin")) add_permission(parent, role, permlevel)
def validate(self): vcheck = frappe.db.exists("DocType", self.check_name) # frappe.errprint("hello") if vcheck: frappe.throw(self.check_name + ' ' + "already exists.") else: # frappe.errprint("hi") ac = frappe.new_doc("All Checks") ac.check_name = self.check_name ac.check_price = self.check_price ac.ce_tat = self.ce_tat ac.save(ignore_permissions=True) vadd_check = frappe.new_doc("DocType") vadd_check.name = self.check_name vadd_check.module = "Checkpro" vadd_check.autoname = self.check_name + '-.###' vadd_check.append("fields", { "fieldtype": "Data", "label": "CE TAT(days)", "read_only": 1, }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Customer", "read_only": 1, "mandatory_depends_on": "eval:!doc.__islocal", "in_standard_filter": 1 }) vadd_check.append( "fields", { "fieldtype": "Data", "mandatory_depends_on": "eval:!doc.__islocal", "label": "Customer Shortcode", "read_only": 1 }) vadd_check.append( "fields", { "fieldtype": "Select", "label": "Entry Status", "mandatory_depends_on": "eval:!doc.__islocal", "options": "\nPending\nCompleted\nInsufficient\nHold\nDrop", "default": "Pending", "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) vadd_check.append( "fields", { "fieldtype": "Select", "label": "Report Status", "options": "\nPending\nPositive\nNegative\nDilemma\nInterim", "default": "Pending", "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"', "depends_on": "eval:doc.workflow_state==" + '"Pending for Verification"' + '||' + 'doc.workflow_state ==' + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) vadd_check.append( "fields", { "fieldtype": "Small Text", "label": "Observation", "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"', "depends_on": "eval:doc.workflow_state==" + '"Pending for Verification"' + '||' + 'doc.workflow_state ==' + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) vadd_check.append("fields", { "fieldtype": "Column Break", }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Check Package", "read_only": 1, # "mandatory_depends_on":"eval:!doc.__islocal", "in_standard_filter": 1 }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Batch", "read_only": 1, # "mandatory_depends_on":"eval:!doc.__islocal", }) vadd_check.append( "fields", { "label": "Proof Attachment", "fieldtype": "Attach", "depends_on": "eval:doc.workflow_state==" + '"Pending for Verification"' + '||' + 'doc.workflow_state ==' + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Attachment Description", "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Pending for Verification"', "depends_on": "eval:doc.workflow_state==" + '"Pending for Verification"' + '||' + 'doc.workflow_state ==' + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) vadd_check.append( "fields", { "fieldtype": "Date", "label": "Date of Entry", "mandatory_depends_on": "eval:!doc.__islocal", "default": "Today", "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) vadd_check.append( "fields", { "fieldtype": "Select", "label": "Verification Status", "options": "\nPending\nCompleted\nInsufficient\nHold\nDrop", "default": "Pending", "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + 'doc.workflow_state ==' + '"Pending for Verification"' + '||' + "doc.workflow_state ==" + '"Approved"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) vadd_check.append("fields", { "fieldtype": "Section Break", "label": "Case Information", }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Case ID", "read_only": 1, # "mandatory_depends_on":"eval:!doc.__islocal", }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Name", # "mandatory_depends_on":"eval:!doc.__islocal", "read_only": 1 }) vadd_check.append( "fields", { "fieldtype": "Date", "label": "Date of Birth", # "mandatory_depends_on":"eval:!doc.__islocal", "read_only": 1 }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Gender", # "mandatory_depends_on":"eval:!doc.__islocal", "read_only": 1 }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Age", # "mandatory_depends_on":"eval:!doc.__islocal", "read_only": 1 }) vadd_check.append("fields", { "fieldtype": "Column Break", }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Father Name", # "mandatory_depends_on":"eval:!doc.__islocal", "read_only": 1 }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Contact Number", # "mandatory_depends_on":"eval:!doc.__islocal", "read_only": 1 }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Email ID", # "mandatory_depends_on":"eval:!doc.__islocal", "read_only": 1 }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Client Employee Code", # "mandatory_depends_on":"eval:!doc.__islocal", "read_only": 1 }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Address", # "mandatory_depends_on":"eval:!doc.__islocal", "read_only": 1 }) vadd_check.append("fields", { "fieldtype": "Section Break", }) for c in self.check_variables: if c.variable_type == "Select": vadd_check.append( "fields", { "fieldtype": "Select", "options": '\n' + c.options, "label": """EPI :""" + c.variable, "fieldname": "epi_" + c.variable, # "mandatory_depends_on":"eval:!doc.__islocal && doc.workflow_state == 'Draft' """, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Draft"', "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) if c.variable_type == "Number": vadd_check.append( "fields", { "fieldtype": "Int", "label": """EPI :""" + c.variable, "fieldname": "epi_" + c.variable, "mandatory_depends_on": "eval:!doc.__islocal && doc.workflow_state ==" + '"Draft"', "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) if c.variable_type == "Description": vadd_check.append( "fields", { "fieldtype": "Small Text", "label": 'EPI' + " :" + c.variable, "fieldname": "epi_" + c.variable, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Draft"', "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) if c.variable_type == "Text": if c.variable != "Specialization": vadd_check.append( "fields", { "fieldtype": "Data", "label": 'EPI' + " :" + c.variable, "fieldname": "epi_" + c.variable, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Draft"', "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) if c.variable_type == "Date": vadd_check.append( "fields", { "fieldtype": "Date", "label": 'EPI' + " :" + c.variable, "fieldname": "epi_" + c.variable, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Draft"', "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) if c.variable_type == "Section": vadd_check.append( "fields", { "fieldtype": "Section Break", "label": 'EPI' + " :" + c.variable, "fieldname": "epi_" + c.variable, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Draft"', "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) if c.variable_type == "Column": vadd_check.append( "fields", { "fieldtype": "Column Break", "label": 'EPI' + " :" + c.variable, "fieldname": "epi_" + c.variable, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Draft"', "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) if c.variable_type == "Link": vadd_check.append( "fields", { "fieldtype": "Link", "label": 'EPI' + ":" + c.variable, "fieldname": "epi_" + c.variable, "options": c.options, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Draft"', "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) if c.variable == "Specialization": vadd_check.append( "fields", { "fieldtype": "Link", "options": "Specialization", "label": "EPI Specialization", "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Draft"', "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) vadd_check.append("fields", { "fieldtype": "Column Break", }) for c in self.check_variables: if c.variable_type == "Select": vadd_check.append( "fields", { "fieldtype": "Select", "options": '\n' + c.options, "label": 'VPI' + ":" + c.variable, "fieldname": "vpi_" + c.variable, "permlevel": 1, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) if c.variable_type == "Number": vadd_check.append( "fields", { "fieldtype": "Int", "label": 'VPI' + ":" + c.variable, "fieldname": "vpi_" + c.variable, "permlevel": 1, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) if c.variable_type == "Description": vadd_check.append( "fields", { "fieldtype": "Small Text", "label": 'VPI' + ":" + c.variable, "fieldname": "vpi_" + c.variable, "permlevel": 1, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) if c.variable_type == "Text": if c.variable != "Specialization": vadd_check.append( "fields", { "fieldtype": "Data", "label": 'VPI' + ":" + c.variable, "fieldname": "vpi_" + c.variable, "permlevel": 1, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) if c.variable_type == "Date": vadd_check.append( "fields", { "fieldtype": "Date", "label": 'VPI' + ":" + c.variable, "fieldname": "vpi_" + c.variable, "permlevel": 1, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) if c.variable_type == "Section": vadd_check.append( "fields", { "fieldtype": "Section Break", "label": 'VPI' + ":" + c.variable, "fieldname": "vpi_" + c.variable, "permlevel": 1, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) if c.variable_type == "Column": vadd_check.append( "fields", { "fieldtype": "Column Break", "label": 'VPI' + ":" + c.variable, "fieldname": "vpi_" + c.variable, "permlevel": 1, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) if c.variable_type == "Link": vadd_check.append( "fields", { "fieldtype": "Link", "label": 'VPI' + ":" + c.variable, "fieldname": "vpi_" + c.variable, "options": c.options, "permlevel": 1, "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) if c.variable == "Specialization": vadd_check.append( "fields", { "fieldtype": "Link", "options": "Specialization", "label": "VPD Specialization", "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"' }) vadd_check.append("fields", { "fieldtype": "Column Break", "permlevel": 1 }) for c in self.check_variables: vadd_check.append( "fields", { "fieldtype": "Select", "options": "\nPositive\nNegative\nDilemma", "label": c.variable + ":" + "Line Status", "fieldname": c.variable + "_line_status", "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + "doc.workflow_state ==" + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"', "permlevel": 1 }) vadd_check.append("fields", {"fieldtype": "Section Break"}) vadd_check.append("fields", { "fieldtype": "Small Text", "label": "Remarks" }) vadd_check.append("fields", { "fieldtype": "Column Break", }) vadd_check.append("fields", { "fieldtype": "Attach", "label": "Attachment" }) vadd_check.append( "fields", { "fieldtype": "Section Break", "label": "Entry Details", "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) vadd_check.append( "fields", { "label": "Entered By", "fieldtype": "Link", "options": "User", "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Draft"', "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) vadd_check.append("fields", { "fieldtype": "Column Break", }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Designation", "fieldname": "entry_designation", "fetch_from": "entered_by.first_name", "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Draft"', "read_only_depends_on": "eval:doc.workflow_state!=" + '"Draft"' }) vadd_check.append( "fields", { "fieldtype": "Section Break", "label": "Verification Details", "permlevel": 1 }) vadd_check.append( "fields", { "fieldtype": "Link", "label": "Verified By", "options": "User", "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"', "permlevel": 1 }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Designation", "fetch_from": "verified_by.first_name", "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"', "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "permlevel": 1 }) vadd_check.append("fields", { "fieldtype": "Column Break", "permlevel": 1 }) vadd_check.append( "fields", { "fieldtype": "Date", "label": "Start Date", "default": "Today", "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"', "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "permlevel": 1 }) vadd_check.append( "fields", { "fieldtype": "Date", "label": "Date of Completion", "read_only_depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + "doc.workflow_state ==" + '"Approved"', "mandatory_depends_on": "eval:!doc.__islocal" + '&&' + 'doc.workflow_state ==' + '"Pending for Verification"', "permlevel": 1 }) vadd_check.append( "fields", { "fieldtype": "Section Break", "depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' }) vadd_check.append( "fields", { "fieldtype": "Link", "options": "User", "label": "Approved By", "read_only_depends_on": "eval:doc.workflow_state ==" + '"Approved"', "depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + 'doc.workflow_state ==' + '"Approved"', }) vadd_check.append( "fields", { "fieldtype": "Column Break", "depends_on": "doc.workflow_state ==" + '"Pending for Approval"', }) vadd_check.append( "fields", { "fieldtype": "Data", "label": "Designation", "read_only_depends_on": "eval:doc.workflow_state ==" + '"Approved"', "fieldname": "approved_designation", "fetch_from": "approved_by.first_name", "depends_on": "eval:doc.workflow_state ==" + '"Pending for Approval"' + '||' + 'doc.workflow_state ==' + '"Approved"', }) vadd_check.append("permissions", { "role": "System Manager", "read": 1, "write": 1, "delete": 1 }) vadd_check.append("permissions", { "role": "VPI user", "read": 1, "write": 1, "delete": 1 }) vadd_check.append("permissions", { "role": "Check Executive", "read": 1, "write": 1, "delete": 1 }) vadd_check.flags.ignore_mandatory = True vadd_check.save(ignore_permissions=True) doctype = vadd_check.name add_permission(doctype, "VPI user", 1) update_permission_property(doctype, "VPI user", 1, 'write', 1) add_permission(doctype, "Check Executive", 1) update_permission_property(doctype, "Check Executive", 1, 'write', 1) if (vadd_check.name): wf = frappe.new_doc("Workflow") wf.workflow_name = vadd_check.name wf.document_type = vadd_check.name wf.is_active = 1 wf.append("states", { "state": "Draft", "allow_edit": "System Manager" }) # wf.append("states",{ # "state":"Pending for Verification", # "allow_edit":"VPI user" # }) wf.append( "states", { "state": "Pending for Verification", "allow_edit": "Check Executive" }) wf.append("states", { "state": "Pending for Approval", "allow_edit": "Approver" }) wf.append("states", { "state": "Approved", "allow_edit": "Approver" }) wf.append( "transitions", { "state": "Draft", "action": "EPI QC", "next_state": "Pending for Verification", "condition": "doc.entry_status" + "==" + '"Completed"', "allowed": "System Manager" }) # wf.append("transitions",{ # "state":"Pending for Verification", # "action":"VPD QC", # "next_state":"Pending for QC", # "condition":"doc.execution_status" +"!="+'"Pending"', # "allowed":"VPI user" # }) wf.append( "transitions", { "state": "Pending for Verification", "action": "VPI QC", "next_state": "Pending for Approval", "condition": """doc.report_status=="Positive" and doc.verification_status=="Completed" """, "allowed": "Check Executive" }) wf.append( "transitions", { "state": "Pending for Approval", "action": "Approve", "next_state": "Approved", "allowed": "Approver" }) wf.save(ignore_permissions=True) if (vadd_check.name): ds = frappe.get_doc("Desk Page", "checkPRO") for i in ds.cards: # frappe.errprint(i.label) if i.label == "Checks": links = """ ,{ "label": "%s", "name": "%s", "type": "doctype" } ]""" % (vadd_check.name, vadd_check.name) a = json.dumps(i.links) b = json.loads(a) i.links = b[:-1] + links ds.save(ignore_permissions=True)