Ejemplo n.º 1
0
def get_permissions(doctype=None, role=None):
	frappe.only_for("System Manager")
	return frappe.db.sql("""select * from tabDocPerm
		where %s%s order by parent, permlevel, role""" %
		(doctype and (" parent='%s'" % doctype.replace("'", "\'")) or "",
		role and ((doctype and " and " or "") + " role='%s'" % role.replace("'", "\'")) or ""),
		as_dict=True)
Ejemplo n.º 2
0
def update(hidden_list, user=None):
	"""update modules"""
	if not user:
		frappe.only_for('System Manager')

	set_hidden_list(hidden_list, user)
	frappe.msgprint(frappe._('Updated'))
Ejemplo n.º 3
0
def get_roles_and_doctypes():
	frappe.only_for("System Manager")
	send_translations(frappe.get_lang_dict("doctype", "DocPerm"))

	active_domains = frappe.get_active_domains()

	doctypes = frappe.get_all("DocType", filters={
		"istable": 0,
		"name": ("not in", ",".join(not_allowed_in_permission_manager)),
	}, or_filters={
		"ifnull(restrict_to_domain, '')": "",
		"restrict_to_domain": ("in", active_domains)
	}, fields=["name"])

	roles = frappe.get_all("Role", filters={
		"name": ("not in", "Administrator"),
		"disabled": 0,
	}, or_filters={
		"ifnull(restrict_to_domain, '')": "",
		"restrict_to_domain": ("in", active_domains)
	}, fields=["name"])

	doctypes_list = [ {"label":_(d.get("name")), "value":d.get("name")} for d in doctypes]
	roles_list = [ {"label":_(d.get("name")), "value":d.get("name")} for d in roles]

	return {
		"doctypes": sorted(doctypes_list, key=lambda d: d['label']),
		"roles": sorted(roles_list, key=lambda d: d['label'])
	}
Ejemplo n.º 4
0
def update(hidden_list, user=None):
	"""update modules"""
	if not user:
		frappe.only_for('System Manager')

	set_hidden_list(hidden_list, user)
	frappe.msgprint(frappe._('Updated'), indicator='green', title=_('Success'), alert=True)
Ejemplo n.º 5
0
def download_backup(path):
	try:
		frappe.only_for(("System Manager", "Administrator"))
	except frappe.PermissionError:
		raise Forbidden(_("You need to be logged in and have System Manager Role to be able to access backups."))

	return send_private_file(path)
def delete_company_transactions(company_name):
    frappe.only_for("System Manager")
    doc = frappe.get_doc("Company", company_name)

    if frappe.session.user != doc.owner:
        frappe.throw(_("Transactions can only be deleted by the creator of the Company"), frappe.PermissionError)

    delete_bins(company_name)
    delete_time_logs(company_name)
    delete_lead_addresses(company_name)

    for doctype in frappe.db.sql_list(
        """select parent from
		tabDocField where fieldtype='Link' and options='Company'"""
    ):
        if doctype not in (
            "Account",
            "Cost Center",
            "Warehouse",
            "Budget Detail",
            "Party Account",
            "Employee",
            "Sales Taxes and Charges Template",
            "Purchase Taxes and Charges Template",
            "POS Profile",
        ):
            delete_for_doctype(doctype, company_name)

            # Clear notification counts
    clear_notifications()
Ejemplo n.º 7
0
def install_app(name):
	"""Install app, if app is not installed in local environment, install it via git url in
	`frappe/data/app_listing/`"""
	frappe.only_for("System Manager")

	if name not in frappe.get_all_apps(True):
		if not frappe.conf.disallow_app_listing:
			get_app(name)
			frappe.cache().delete_value(["app_hooks"])
			# reload sys.path
			import site
			reload(site)
		else:
			# will only come via direct API
			frappe.throw("Listing app not allowed")

	app_hooks = frappe.get_hooks(app_name=name)
	if app_hooks.get('hide_in_installer'):
		frappe.throw(_("You cannot install this app"))

	frappe.publish_realtime("install_app_progress", {"status": _("Installing App {0}").format(name)},
		user=frappe.session.user, now=True)

	frappe.installer.install_app(name)

	frappe.publish_realtime("install_app_progress", {"status": _("{0} Installed").format(name)},
		user=frappe.session.user, now=True)
Ejemplo n.º 8
0
def install_app(name, verbose=False, set_as_patched=True):
	frappe.flags.in_install_app = name
	frappe.clear_cache()

	app_hooks = frappe.get_hooks(app_name=name)
	installed_apps = frappe.get_installed_apps()

	if name not in frappe.get_all_apps(with_frappe=True):
		raise Exception("App not in apps.txt")

	if name in installed_apps:
		print "App Already Installed"
		frappe.msgprint(_("App Already Installed"))
		return

	if name != "frappe":
		frappe.only_for("System Manager")

	for before_install in app_hooks.before_install or []:
		frappe.get_attr(before_install)()

	if name != "frappe":
		add_module_defs(name)
	sync_for(name, force=True, sync_everything=True, verbose=verbose)

	add_to_installed_apps(name)

	if set_as_patched:
		set_all_patches_as_completed(name)

	for after_install in app_hooks.after_install or []:
		frappe.get_attr(after_install)()

	frappe.flags.in_install_app = False
Ejemplo n.º 9
0
def get_users_with_role(role):
	frappe.only_for("System Manager")
	return [p[0] for p in frappe.db.sql("""select distinct tabUser.name
		from `tabHas Role`, tabUser where
			`tabHas Role`.role=%s
			and tabUser.name != "Administrator"
			and `tabHas Role`.parent = tabUser.name
			and tabUser.enabled=1""", role)]
Ejemplo n.º 10
0
def remove_app(name):
	"""Remove installed app"""
	frappe.only_for("System Manager")

	if name in frappe.get_installed_apps():
		enqueue('frappe.desk.page.applications.applications.start_remove', name=name)

	frappe.msgprint(_('Queued for backup and removing {0}').format(frappe.bold(name)))
Ejemplo n.º 11
0
def get_users_with_role(role):
	frappe.only_for("System Manager")
	return [p[0] for p in frappe.db.sql("""select distinct tabUser.name
		from tabUserRole, tabUser where
			tabUserRole.role=%s
			and tabUser.name != "Administrator"
			and tabUserRole.parent = tabUser.name
			and ifnull(tabUser.enabled,0)=1""", role)]
Ejemplo n.º 12
0
def clear_user_permissions(user, for_doctype):
	frappe.only_for('System Manager')

	total = frappe.db.count('User Permission', filters = dict(user=user, allow=for_doctype))
	if total:
		frappe.db.sql('DELETE FROM `tabUser Permission` WHERE user=%s AND allow=%s', (user, for_doctype))
		frappe.clear_cache()
	return total
Ejemplo n.º 13
0
def install_app(name, verbose=False, set_as_patched=True):
	frappe.flags.in_install = name
	frappe.flags.ignore_in_install = False

	frappe.clear_cache()
	app_hooks = frappe.get_hooks(app_name=name)
	installed_apps = frappe.get_installed_apps()

	# install pre-requisites
	if app_hooks.required_apps:
		for app in app_hooks.required_apps:
			install_app(app)

	frappe.flags.in_install = name
	frappe.clear_cache()

	if name not in frappe.get_all_apps():
		raise Exception("App not in apps.txt")

	if name in installed_apps:
		frappe.msgprint(_("App {0} already installed").format(name))
		return

	print("\nInstalling {0}...".format(name))

	if name != "frappe":
		frappe.only_for("System Manager")

	for before_install in app_hooks.before_install or []:
		out = frappe.get_attr(before_install)()
		if out==False:
			return

	if name != "frappe":
		add_module_defs(name)

	sync_for(name, force=True, sync_everything=True, verbose=verbose, reset_permissions=True)

	sync_from_app(name)

	add_to_installed_apps(name)

	frappe.get_doc('Portal Settings', 'Portal Settings').sync_menu()

	if set_as_patched:
		set_all_patches_as_completed(name)

	for after_install in app_hooks.after_install or []:
		frappe.get_attr(after_install)()

	sync_fixtures(name)
	sync_customizations(name)

	for after_sync in app_hooks.after_sync or []:
		frappe.get_attr(after_sync)() #

	frappe.flags.in_install = False
Ejemplo n.º 14
0
def get_password(doctype, name, fieldname):
	'''Return a password type property. Only applicable for System Managers

	:param doctype: DocType of the document that holds the password
	:param name: `name` of the document that holds the password
	:param fieldname: `fieldname` of the password property
	'''
	frappe.only_for("System Manager")
	return frappe.get_doc(doctype, name).get_password(fieldname)
Ejemplo n.º 15
0
def get_roles_and_doctypes():
	frappe.only_for("System Manager")
	send_translations(frappe.get_lang_dict("doctype", "DocPerm"))
	return {
		"doctypes": [d[0] for d in frappe.db.sql("""select name from `tabDocType` dt where
			istable=0 and name not in ('DocType')""")],
		"roles": [d[0] for d in frappe.db.sql("""select name from tabRole where
			name != 'Administrator' and disabled=0""")]
	}
Ejemplo n.º 16
0
	def on_trash(self):
		if (self.comment_type or "Comment") != "Comment":
			frappe.only_for("System Manager")

		_comments = self.get_comments_from_parent()
		for c in _comments:
			if c.get("name")==self.name:
				_comments.remove(c)

		self.update_comments_in_parent(_comments)
Ejemplo n.º 17
0
def get_roles_and_doctypes():
	frappe.only_for("System Manager")
	return {
		"doctypes": [d[0] for d in frappe.db.sql("""select name from `tabDocType` dt where
			ifnull(istable,0)=0 and
			name not in ('DocType') and
			exists(select * from `tabDocField` where parent=dt.name)""")],
		"roles": [d[0] for d in frappe.db.sql("""select name from tabRole where name not in
			('Guest', 'Administrator')""")]
	}
Ejemplo n.º 18
0
def import_user_permissions():
	frappe.only_for("System Manager")
	rows = read_csv_content_from_uploaded_file(ignore_encoding=True)
	clear_default(parenttype="User Permission")

	if rows[0][0]!="User Permissions" and rows[1][0] != "User":
		frappe.throw(frappe._("Please upload using the same template as download."))

	for row in rows[2:]:
		frappe.permissions.add_user_permission(row[1], row[2], row[0])
Ejemplo n.º 19
0
def get_standard_permissions(doctype):
	frappe.only_for("System Manager")
	meta = frappe.get_meta(doctype)
	if meta.custom:
		doc = frappe.get_doc('DocType', doctype)
		return [p.as_dict() for p in doc.permissions]
	else:
		# also used to setup permissions via patch
		path = get_file_path(meta.module, "DocType", doctype)
		return read_doc_from_file(path).get("permissions")
Ejemplo n.º 20
0
def remove(doctype, role, permlevel):
	frappe.only_for("System Manager")
	setup_custom_perms(doctype)

	name = frappe.get_value('Custom DocPerm', dict(parent=doctype, role=role, permlevel=permlevel))

	frappe.db.sql('delete from `tabCustom DocPerm` where name=%s', name)
	if not frappe.get_all('Custom DocPerm', dict(parent=doctype)):
		frappe.throw(_('There must be atleast one permission rule.'), title=_('Cannot Remove'))

	validate_permissions_for_doctype(doctype, for_remove=True)
def get_roles_and_doctypes():
	frappe.only_for("System Manager")
	send_translations(frappe.get_lang_dict("doctype", "DocPerm"))
	return {
		"doctypes": [d[0] for d in frappe.db.sql("""select name from `tabDocType` dt where
			ifnull(istable,0)=0 and
			name not in ('DocType') and
			exists(select * from `tabDocField` where parent=dt.name)""")],
		"roles": [d[0] for d in frappe.db.sql("""select name from tabRole where name not in
			('Administrator')""")]
	}
Ejemplo n.º 22
0
def remove(doctype, role, permlevel):
    frappe.only_for("System Manager")
    setup_custom_perms(doctype)

    name = frappe.get_value(
        'Custom DocPerm', dict(parent=doctype, role=role, permlevel=permlevel))

    frappe.db.sql('delete from `tabCustom DocPerm` where name=%s', name)
    if not frappe.get_all('Custom DocPerm', dict(parent=doctype)):
        frappe.throw(_('There must be atleast one permission rule.'),
                     title=_('Cannot Remove'))

    validate_permissions_for_doctype(doctype, for_remove=True)
Ejemplo n.º 23
0
def get_permissions(doctype=None, role=None):
	frappe.only_for("System Manager")
	out = frappe.db.sql("""select * from tabDocPerm
		where %s%s order by parent, permlevel, role""" %
		(doctype and (" parent='%s'" % frappe.db.escape(doctype)) or "",
		role and ((doctype and " and " or "") + " role='%s'" % frappe.db.escape(role)) or ""),
		as_dict=True)

	linked_doctypes = {}
	for d in out:
		d.linked_doctypes = linked_doctypes.setdefault(d.parent, get_linked_doctypes(d.parent))

	return out
Ejemplo n.º 24
0
def get_module_icons_html(user=None):
	if user != frappe.session.user:
		frappe.only_for('System Manager')

	if not user:
		icons = frappe.db.get_all('Desktop Icon',
			fields='*', filters={'standard': 1}, order_by='idx')
	else:
		frappe.cache().hdel('desktop_icons', user)
		icons = get_user_icons(user)

	return frappe.render_template('frappe/core/page/modules_setup/includes/module_icons.html',
		{'icons': icons, 'user': user})
Ejemplo n.º 25
0
def delete_company_transactions(company_name):
	frappe.only_for("System Manager")
	doc = frappe.get_doc("Company", company_name)

	if frappe.session.user != doc.owner:
		frappe.throw(_("Transactions can only be deleted by the creator of the Company"), frappe.PermissionError)

	delete_bins(company_name)

	for doctype in frappe.db.sql_list("""select parent from
		tabDocField where fieldtype='Link' and options='Company'"""):
		if doctype not in ("Account", "Cost Center", "Warehouse", "Budget Detail", "Party Account"):
			delete_for_doctype(doctype, company_name)
Ejemplo n.º 26
0
def install_app(name, verbose=False, set_as_patched=True):
    frappe.clear_cache()
    app_hooks = frappe.get_hooks(app_name=name)
    installed_apps = frappe.get_installed_apps()

    # install pre-requisites
    if app_hooks.required_apps:
        for app in app_hooks.required_apps:
            install_app(app)

    frappe.flags.in_install = name
    frappe.clear_cache()

    if name not in frappe.get_all_apps():
        raise Exception("App not in apps.txt")

    if name in installed_apps:
        frappe.msgprint("App {0} already installed".format(name))
        return

    print "Installing {0}...".format(name)

    if name != "frappe":
        frappe.only_for("System Manager")

    for before_install in app_hooks.before_install or []:
        out = frappe.get_attr(before_install)()
        if out == False:
            return

    if name != "frappe":
        add_module_defs(name)

    sync_for(name, force=True, sync_everything=True, verbose=verbose)

    sync_from_app(name)

    add_to_installed_apps(name)

    frappe.get_doc('Portal Settings', 'Portal Settings').sync_menu()

    if set_as_patched:
        set_all_patches_as_completed(name)

    for after_install in app_hooks.after_install or []:
        frappe.get_attr(after_install)()

    sync_fixtures(name)
    sync_customizations(name)

    frappe.flags.in_install = False
Ejemplo n.º 27
0
def import_all_jasper_remote_reports(docs, force=True):
	frappe.only_for("Administrator")
	if not docs:
		return
	frappe.flags.in_import = True
	for d in docs:
		import_doc(d.parent_doc.as_dict(), force=force)
		for param_doc in d.param_docs:
			import_doc(param_doc.as_dict(), force=force)
		for perm_doc in d.perm_docs:
			import_doc(perm_doc.as_dict(), force=force)
		#frappe.db.commit()

	frappe.flags.in_import = False
Ejemplo n.º 28
0
def update_global_hidden_modules(modules):
	modules = frappe.parse_json(modules)
	frappe.only_for('System Manager')

	doc = frappe.get_doc('User', 'Administrator')
	doc.set('block_modules', [])
	for module in modules:
		doc.append('block_modules', {
			'module': module
		})

	doc.save(ignore_permissions=True)

	return get_desktop_settings()
Ejemplo n.º 29
0
def import_all_jasper_remote_reports(docs, force=True):
    frappe.only_for("Administrator")
    if not docs:
        return
    frappe.flags.in_import = True
    for d in docs:
        import_doc(d.parent_doc.as_dict(), force=force)
        for param_doc in d.param_docs:
            import_doc(param_doc.as_dict(), force=force)
        for perm_doc in d.perm_docs:
            import_doc(perm_doc.as_dict(), force=force)
        #frappe.db.commit()

    frappe.flags.in_import = False
Ejemplo n.º 30
0
def get_roles_and_doctypes():
    frappe.only_for("System Manager")
    send_translations(frappe.get_lang_dict("doctype", "DocPerm"))
    return {
        "doctypes": [
            d[0]
            for d in frappe.db.sql("""select name from `tabDocType` dt where
			istable=0 and name not in ('DocType')""")
        ],
        "roles": [
            d[0] for d in frappe.db.sql("""select name from tabRole where
			name != 'Administrator' and disabled=0""")
        ]
    }
Ejemplo n.º 31
0
def add_user_permissions(data):
	"""Add and update the user permissions"""
	frappe.only_for("System Manager")
	if isinstance(data, frappe.string_types):
		data = json.loads(data)
	data = frappe._dict(data)

	# get all doctypes on whom this permission is applied
	perm_applied_docs = check_applicable_doc_perm(data.user, data.doctype, data.docname)
	exists = frappe.db.exists(
		"User Permission",
		{
			"user": data.user,
			"allow": data.doctype,
			"for_value": data.docname,
			"apply_to_all_doctypes": 1,
		},
	)
	if data.apply_to_all_doctypes == 1 and not exists:
		remove_applicable(perm_applied_docs, data.user, data.doctype, data.docname)
		insert_user_perm(
			data.user, data.doctype, data.docname, data.is_default, data.hide_descendants, apply_to_all=1
		)
		return 1
	elif len(data.applicable_doctypes) > 0 and data.apply_to_all_doctypes != 1:
		remove_apply_to_all(data.user, data.doctype, data.docname)
		update_applicable(
			perm_applied_docs, data.applicable_doctypes, data.user, data.doctype, data.docname
		)
		for applicable in data.applicable_doctypes:
			if applicable not in perm_applied_docs:
				insert_user_perm(
					data.user,
					data.doctype,
					data.docname,
					data.is_default,
					data.hide_descendants,
					applicable=applicable,
				)
			elif exists:
				insert_user_perm(
					data.user,
					data.doctype,
					data.docname,
					data.is_default,
					data.hide_descendants,
					applicable=applicable,
				)
		return 1
	return 0
Ejemplo n.º 32
0
    def on_trash(self):
        """Removes from `_comments` in parent Document"""
        if self.comment_doctype == "Message":
            return

        if (self.comment_type or "Comment") != "Comment":
            frappe.only_for("System Manager")

        _comments = self.get_comments_from_parent()
        for c in _comments:
            if c.get("name") == self.name:
                _comments.remove(c)

        self.update_comments_in_parent(_comments)
Ejemplo n.º 33
0
	def on_trash(self):
		"""Removes from `_comments` in parent Document"""
		if self.comment_doctype == "Message":
			return

		if (self.comment_type or "Comment") != "Comment":
			frappe.only_for("System Manager")

		_comments = self.get_comments_from_parent()
		for c in _comments:
			if c.get("name")==self.name:
				_comments.remove(c)

		self.update_comments_in_parent(_comments)
Ejemplo n.º 34
0
def get_todos(date=None):
    from werkzeug.exceptions import Forbidden

    try:
        frappe.only_for(("System Manager"))
    except frappe.PermissionError:
        raise Forbidden(
            _("You need to be logged in and have System Manager or Account Manager Role to be able to download this zip."
              ))

    todos = frappe.get_all("ToDo",
                           filters={"owner": frappe.session.user},
                           fields=["*"])
    return todos
Ejemplo n.º 35
0
def add(parent, role, permlevel):
	frappe.only_for("System Manager")
	frappe.get_doc({
		"doctype":"DocPerm",
		"__islocal": 1,
		"parent": parent,
		"parenttype": "DocType",
		"parentfield": "permissions",
		"role": role,
		"permlevel": permlevel,
		"read": 1
	}).save()

	validate_and_reset(parent)
def add(parent, role, permlevel):
    frappe.only_for("System Manager")
    frappe.get_doc({
        "doctype": "DocPerm",
        "__islocal": 1,
        "parent": parent,
        "parenttype": "DocType",
        "parentfield": "permissions",
        "role": role,
        "permlevel": permlevel,
        "read": 1
    }).save()

    validate_and_reset(parent)
Ejemplo n.º 37
0
def update(doctype, role, permlevel, ptype, value=None):
    frappe.only_for("System Manager")

    out = None
    if setup_custom_perms(doctype):
        out = 'refresh'

    name = frappe.get_value(
        'Custom DocPerm', dict(parent=doctype, role=role, permlevel=permlevel))

    frappe.db.sql("""update `tabCustom DocPerm` set `%s`=%s where name=%s"""\
      % (frappe.db.escape(ptype), '%s', '%s'), (value, name))
    validate_permissions_for_doctype(doctype)

    return out
Ejemplo n.º 38
0
def replace_abbr(company, old, new):
	frappe.only_for("System Manager")

	frappe.db.set_value("Company", company, "abbr", new)

	def _rename_record(dt):
		for d in frappe.db.sql("select name from `tab%s` where company=%s" % (dt, '%s'), company):
			parts = d[0].split(" - ")
			if parts[-1].lower() == old.lower():
				name_without_abbr = " - ".join(parts[:-1])
				frappe.rename_doc(dt, d[0], name_without_abbr + " - " + new)

	for dt in ["Account", "Cost Center", "Warehouse"]:
		_rename_record(dt)
		frappe.db.commit()
def get_module_icons(user=None):
	if user != frappe.session.user:
		frappe.only_for('System Manager')

	if not user:
		icons = frappe.db.get_all('Desktop Icon',
			fields='*', filters={'standard': 1}, order_by='idx')
	else:
		frappe.cache().hdel('desktop_icons', user)
		icons = get_user_icons(user)

	for icon in icons:
		icon.value = frappe.db.escape(_(icon.label or icon.module_name))

	return {'icons': icons, 'user': user}
Ejemplo n.º 40
0
def clear_user_permissions(user, for_doctype):
    frappe.only_for("System Manager")
    total = frappe.db.count("User Permission", {
        "user": user,
        "allow": for_doctype
    })

    if total:
        frappe.db.delete("User Permission", {
            "allow": for_doctype,
            "user": user,
        })
        frappe.clear_cache()

    return total
Ejemplo n.º 41
0
def get_module_icons(user=None):
	if user != frappe.session.user:
		frappe.only_for('System Manager')

	if not user:
		icons = frappe.db.get_all('Desktop Icon',
			fields='*', filters={'standard': 1}, order_by='idx')
	else:
		frappe.cache().hdel('desktop_icons', user)
		icons = get_user_icons(user)

	for icon in icons:
		icon.value = frappe.db.escape(_(icon.label or icon.module_name))

	return {'icons': icons, 'user': user}
Ejemplo n.º 42
0
def remove(doctype, role, permlevel):
    frappe.only_for("System Manager")
    setup_custom_perms(doctype)

    frappe.db.delete("Custom DocPerm", {
        "parent": doctype,
        "role": role,
        "permlevel": permlevel
    })

    if not frappe.get_all('Custom DocPerm', {"parent": doctype}):
        frappe.throw(_('There must be atleast one permission rule.'),
                     title=_('Cannot Remove'))

    validate_permissions_for_doctype(doctype, for_remove=True, alert=True)
Ejemplo n.º 43
0
def get_roles_and_doctypes():
    frappe.only_for("System Manager")
    return {
        "doctypes": [
            d[0]
            for d in frappe.db.sql("""select name from `tabDocType` dt where
			ifnull(istable,0)=0 and
			name not in ('DocType', 'Control Panel') and
			exists(select * from `tabDocField` where parent=dt.name)""")
        ],
        "roles": [
            d[0] for d in frappe.db.sql(
                """select name from tabRole where name not in
			('Guest', 'Administrator')""")
        ]
    }
Ejemplo n.º 44
0
def on_trash(doc):
	if doc.communication_type != "Comment":
		return

	if doc.reference_doctype == "Message":
		return

	if (doc.comment_type or "Comment") != "Comment":
		frappe.only_for("System Manager")

	_comments = get_comments_from_parent(doc)
	for c in _comments:
		if c.get("name")==doc.name:
			_comments.remove(c)

	update_comments_in_parent(doc.reference_doctype, doc.reference_name, _comments)
Ejemplo n.º 45
0
def on_trash(doc):
	if doc.communication_type != "Comment":
		return

	if doc.reference_doctype == "Message":
		return

	if (doc.comment_type or "Comment") != "Comment":
		frappe.only_for("System Manager")

	_comments = get_comments_from_parent(doc)
	for c in _comments:
		if c.get("name")==doc.name:
			_comments.remove(c)

	update_comments_in_parent(doc.reference_doctype, doc.reference_name, _comments)
Ejemplo n.º 46
0
def delete_company_transactions(company_name):
    frappe.only_for("System Manager")
    doc = frappe.get_doc("Company", company_name)

    if frappe.session.user != doc.owner:
        frappe.throw(
            _("Transactions can only be deleted by the creator of the Company"
              ), frappe.PermissionError)

    delete_bins(company_name)

    for doctype in frappe.db.sql_list("""select parent from
		tabDocField where fieldtype='Link' and options='Company'"""):
        if doctype not in ("Account", "Cost Center", "Warehouse",
                           "Budget Detail", "Party Account"):
            delete_for_doctype(doctype, company_name)
Ejemplo n.º 47
0
def get_module_icons_html(user=None):
    if user != frappe.session.user:
        frappe.only_for('System Manager')

    if not user:
        icons = frappe.db.get_all('Desktop Icon',
                                  fields='*',
                                  filters={'standard': 1},
                                  order_by='idx')
    else:
        frappe.cache().hdel('desktop_icons', user)
        icons = get_user_icons(user)

    return frappe.render_template(
        'frappe/core/page/modules_setup/includes/module_icons.html',
        {'icons': icons})
Ejemplo n.º 48
0
def update(doctype, role, permlevel, ptype, value=None):
    """Update role permission params

	Args:
		doctype (str): Name of the DocType to update params for
		role (str): Role to be updated for, eg "Website Manager".
		permlevel (int): perm level the provided rule applies to
		ptype (str): permission type, example "read", "delete", etc.
		value (None, optional): value for ptype, None indicates False

	Returns:
		str: Refresh flag is permission is updated successfully
	"""
    frappe.only_for("System Manager")
    out = update_permission_property(doctype, role, permlevel, ptype, value)
    return 'refresh' if out else None
Ejemplo n.º 49
0
def get_module_icons(user=None):
    if user != frappe.session.user:
        frappe.only_for("System Manager")

    if not user:
        icons = frappe.db.get_all("Desktop Icon",
                                  fields="*",
                                  filters={"standard": 1},
                                  order_by="idx")
    else:
        frappe.cache().hdel("desktop_icons", user)
        icons = get_user_icons(user)

    for icon in icons:
        icon.value = frappe.db.escape(_(icon.label or icon.module_name))

    return {"icons": icons, "user": user}
Ejemplo n.º 50
0
def replace_abbr(company, old, new):
    frappe.only_for("System Manager")

    frappe.db.set_value("Company", company, "abbr", new)

    def _rename_record(dt):
        for d in frappe.db.sql(
                "select name from `tab%s` where company=%s" % (dt, '%s'),
                company):
            parts = d[0].split(" - ")
            if parts[-1].lower() == old.lower():
                name_without_abbr = " - ".join(parts[:-1])
                frappe.rename_doc(dt, d[0], name_without_abbr + " - " + new)

    for dt in ["Account", "Cost Center", "Warehouse"]:
        _rename_record(dt)
        frappe.db.commit()
Ejemplo n.º 51
0
def generate_keys(user):
	"""
	generate api key and api secret

	:param user: str
	"""
	frappe.only_for("System Manager")
	user_details = frappe.get_doc("User", user)
	api_secret = frappe.generate_hash(length=15)
	# if api key is not set generate api key
	if not user_details.api_key:
		api_key = frappe.generate_hash(length=15)
		user_details.api_key = api_key
	user_details.api_secret = api_secret
	user_details.save()

	return {"api_secret": api_secret}
Ejemplo n.º 52
0
def get_permissions(doctype=None, role=None):
    frappe.only_for("System Manager")
    out = frappe.db.sql(
        """select * from tabDocPerm
		where %s%s order by parent, permlevel, role""" %
        (doctype and
         (" parent='%s'" % doctype.replace("'", "\'")) or "", role and
         ((doctype and " and " or "") + " role='%s'" % role.replace("'", "\'"))
         or ""),
        as_dict=True)

    linked_doctypes = {}
    for d in out:
        d.linked_doctypes = linked_doctypes.setdefault(
            d.parent, get_linked_doctypes(d.parent))

    return out
def get_roles_and_doctypes():
    frappe.only_for("System Manager")
    send_translations(frappe.get_lang_dict("doctype", "DocPerm"))
    return {
        "doctypes": [
            d[0]
            for d in frappe.db.sql("""select name from `tabDocType` dt where
			ifnull(istable,0)=0 and
			name not in ('DocType') and
			exists(select * from `tabDocField` where parent=dt.name)""")
        ],
        "roles": [
            d[0] for d in frappe.db.sql(
                """select name from tabRole where name not in
			('Guest', 'Administrator')""")
        ]
    }
	def anonymize_data(self):
		""" mask user data with non identifiable data """
		frappe.only_for('System Manager')
		if not (self.status == 'Pending Approval'):
			frappe.throw(_("This request has not yet been approved by the user."))

		privacy_docs = frappe.get_hooks("user_privacy_documents")

		anonymize_value_map = {
			'Date': '1111-01-01',
			'Int': 0,
			'Code': 'http://xxxxx'
		}

		regex = re.compile(r"(?<!\.)\b{0}\b(?!\.)".format(re.escape(self.email)))

		for ref_doc in privacy_docs:
			meta = frappe.get_meta(ref_doc['doctype'])
			personal_fields = ref_doc.get('personal_fields', [])

			if ref_doc.get('applies_to_website_user') and 'Guest' not in frappe.get_roles(self.email):
				continue

			anonymize_fields = ''
			for field in personal_fields:
				field_details = meta.get_field(field)
				field_value = anonymize_value_map.get(field_details.fieldtype, str(field)) if not field_details.unique else self.name.split("@")[0]
				anonymize_fields += ', `{0}`= \'{1}\''.format(field, field_value)

			docs = frappe.get_all(ref_doc['doctype'], {ref_doc['match_field']:('like', '%'+self.email+'%')}, ['name', ref_doc['match_field']])
			for d in docs:
				if not re.search(regex, d[ref_doc['match_field']]):
					continue

				anonymize_match_value = ', '.join(map(lambda x: self.name if re.search(regex, x) else x, d[ref_doc['match_field']].split()))
				frappe.db.sql("""UPDATE `tab{0}`
					SET `{1}` = '{2}' {3}
					WHERE `name` = '{4}' """.format( #nosec
					ref_doc['doctype'],
					ref_doc['match_field'],
					anonymize_match_value,
					anonymize_fields,
					d['name']
				))
		self.db_set('status', 'Deleted')
Ejemplo n.º 55
0
def get_roles_and_doctypes():
    frappe.only_for("System Manager")
    send_translations(frappe.get_lang_dict("doctype", "DocPerm"))
    return {
        "doctypes": [
            d[0]
            for d in frappe.db.sql("""select name from `tabDocType` dt where
			istable=0 and
			name not in ('DocType') and
			exists(select * from `tabDocField` where parent=dt.name) and
			exists(select * from `tabDocPerm` dp,`tabRole` role where dp.role = role.name and dp.parent=dt.name and not role.disabled)"""
                                   )
        ],
        "roles": [
            d[0] for d in frappe.db.sql("""select name from tabRole where
			name != 'Administrator' and disabled=0""")
        ]
    }
Ejemplo n.º 56
0
def replace_abbr(company, old, new):
	new = new.strip()
	if not new:
		frappe.throw(_("Abbr can not be blank or space"))

	frappe.only_for("System Manager")

	frappe.db.set_value("Company", company, "abbr", new)

	def _rename_record(dt):
		for d in frappe.db.sql("select name from `tab%s` where company=%s" % (dt, '%s'), company):
			parts = d[0].rsplit(" - ", 1)
			if len(parts) == 1 or parts[1].lower() == old.lower():
				frappe.rename_doc(dt, d[0], parts[0] + " - " + new)

	for dt in ["Warehouse", "Account", "Cost Center"]:
		_rename_record(dt)
		frappe.db.commit()
Ejemplo n.º 57
0
def get_roles_and_doctypes():
    frappe.only_for(("System Manager", "Local Admin"))
    send_translations(frappe.get_lang_dict("doctype", "DocPerm"))

    active_domains = frappe.get_active_domains()

    doctypes = frappe.get_all(
        "DocType",
        filters={
            "istable": 0,
            "name": ("not in", ",".join(not_allowed_in_permission_manager)),
        },
        or_filters={
            "ifnull(restrict_to_domain, '')": "",
            "restrict_to_domain": ("in", active_domains)
        },
        fields=["name"])

    roles = frappe.get_all("Role",
                           filters={
                               "name":
                               ("not in", "Administrator", "System Manager"),
                               "disabled":
                               0,
                           },
                           or_filters={
                               "ifnull(restrict_to_domain, '')": "",
                               "restrict_to_domain": ("in", active_domains)
                           },
                           fields=["name"])

    doctypes_list = [{
        "label": _(d.get("name")),
        "value": d.get("name")
    } for d in doctypes]
    roles_list = [{
        "label": _(d.get("name")),
        "value": d.get("name")
    } for d in roles if d.get('name') != "System Manager"]

    return {
        "doctypes": sorted(doctypes_list, key=lambda d: d['label']),
        "roles": sorted(roles_list, key=lambda d: d['label'])
    }
Ejemplo n.º 58
0
def replace_abbr(company, old, new):
	new = new.strip()
	if not new:
		frappe.throw(_("Abbr can not be blank or space"))

	frappe.only_for("System Manager")

	frappe.db.set_value("Company", company, "abbr", new)

	def _rename_record(doc):
		parts = doc[0].rsplit(" - ", 1)
		if len(parts) == 1 or parts[1].lower() == old.lower():
			frappe.rename_doc(dt, doc[0], parts[0] + " - " + new)

	def _rename_records(dt):
		# rename is expensive so let's be economical with memory usage
		doc = (d for d in frappe.db.sql("select name from `tab%s` where company=%s" % (dt, '%s'), company))
		for d in doc:
			_rename_record(d)
Ejemplo n.º 59
0
    def run(self):
        frappe.only_for("System Manager")
        try:
            frappe.debug_log = []
            safe_exec(self.console)
            self.output = "\n".join(frappe.debug_log)
        except:  # noqa: E722
            self.output = frappe.get_traceback()

        if self.commit:
            frappe.db.commit()
        else:
            frappe.db.rollback()

        frappe.get_doc(
            dict(doctype="Console Log",
                 script=self.console,
                 output=self.output)).insert()
        frappe.db.commit()
Ejemplo n.º 60
0
def fetch_latest_backups(partial=False):
	"""Fetches paths of the latest backup taken in the last 30 days
	Only for: System Managers

	Returns:
	        dict: relative Backup Paths
	"""
	frappe.only_for("System Manager")
	odb = BackupGenerator(
		frappe.conf.db_name,
		frappe.conf.db_name,
		frappe.conf.db_password,
		db_host=frappe.db.host,
		db_type=frappe.conf.db_type,
		db_port=frappe.conf.db_port,
	)
	database, public, private, config = odb.get_recent_backup(older_than=24 * 30, partial=partial)

	return {"database": database, "public": public, "private": private, "config": config}