Exemple #1
0
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))
Exemple #4
0
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())
Exemple #5
0
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)
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #9
0
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)
Exemple #11
0
	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)
Exemple #13
0
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)
Exemple #14
0
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)
Exemple #15
0
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)
Exemple #16
0
	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)
Exemple #18
0
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)
Exemple #19
0
	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)
Exemple #20
0
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
Exemple #21
0
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()
Exemple #22
0
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()
Exemple #23
0
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()
Exemple #24
0
    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')
Exemple #25
0
    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()
Exemple #26
0
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)
Exemple #27
0
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)
Exemple #28
0
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)
Exemple #30
0
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)
Exemple #31
0
def add_permissions():
    for doctype in ('GST HSN Code', 'GST Settings'):
        add_permission(doctype, 'Accounts Manager', 0)
        add_permission(doctype, 'All', 0)
Exemple #32
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)
Exemple #34
0
def add(parent, role, permlevel):
    frappe.only_for(("System Manager", "Local Admin"))
    add_permission(parent, role, permlevel)
Exemple #35
0
    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)