Merge pull request #663 from rmehta/develop

fix for todo delete and tags
This commit is contained in:
Anand Doshi 2014-07-01 18:47:38 +05:30
commit 727972bc7c
4 changed files with 55 additions and 55 deletions

View file

@ -347,15 +347,7 @@ def get_meta(doctype, cached=True):
def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, ignore_permissions=False):
import frappe.model.delete_doc
if not ignore_doctypes:
ignore_doctypes = []
if isinstance(name, list):
for n in name:
frappe.model.delete_doc.delete_doc(doctype, n, force, ignore_doctypes, for_reload, ignore_permissions)
else:
frappe.model.delete_doc.delete_doc(doctype, name, force, ignore_doctypes, for_reload, ignore_permissions)
frappe.model.delete_doc.delete_doc(doctype, name, force, ignore_doctypes, for_reload, ignore_permissions)
def delete_doc_if_exists(doctype, name):
if db.exists(doctype, name):

View file

@ -31,7 +31,6 @@ class ToDo(Document):
description = self.description)
}).insert(ignore_permissions=True)
# NOTE: todo is viewable if either owner or assigned_to or System Manager in roles
def get_permission_query_conditions(user):

View file

@ -21,49 +21,54 @@ def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reloa
doctype = frappe.form_dict.get('dt')
name = frappe.form_dict.get('dn')
if not doctype:
frappe.msgprint(_('Nothing to delete'), raise_exception =1)
names = name
if isinstance(name, basestring):
names = [name]
# already deleted..?
if not frappe.db.exists(doctype, name):
return
for name in names or []:
# delete attachments
remove_all(doctype, name)
# already deleted..?
if not frappe.db.exists(doctype, name):
return
if doctype=="DocType":
if for_reload:
# delete attachments
remove_all(doctype, name)
if doctype=="DocType":
if for_reload:
try:
doc = frappe.get_doc(doctype, name)
except frappe.DoesNotExistError:
pass
else:
doc.run_method("before_reload")
try:
doc = frappe.get_doc(doctype, name)
except frappe.DoesNotExistError:
pass
else:
doc.run_method("before_reload")
frappe.db.sql("delete from `tabCustom Field` where dt = %s", name)
frappe.db.sql("delete from `tabCustom Script` where dt = %s", name)
frappe.db.sql("delete from `tabProperty Setter` where doc_type = %s", name)
frappe.db.sql("delete from `tabReport` where ref_doctype=%s", name)
delete_from_table(doctype, name, ignore_doctypes, None)
else:
frappe.db.sql("delete from `tabCustom Field` where dt = %s", name)
frappe.db.sql("delete from `tabCustom Script` where dt = %s", name)
frappe.db.sql("delete from `tabProperty Setter` where doc_type = %s", name)
frappe.db.sql("delete from `tabReport` where ref_doctype=%s", name)
doc = frappe.get_doc(doctype, name)
delete_from_table(doctype, name, ignore_doctypes, None)
if not for_reload:
check_permission_and_not_submitted(doc, ignore_permissions)
doc.run_method("on_trash")
else:
doc = frappe.get_doc(doctype, name)
delete_linked_todos(doc)
# check if links exist
if not force:
check_if_doc_is_linked(doc)
check_if_doc_is_dynamically_linked(doc)
if not for_reload:
check_permission_and_not_submitted(doc, ignore_permissions)
doc.run_method("on_trash")
# check if links exist
if not force:
check_if_doc_is_linked(doc)
check_if_doc_is_dynamically_linked(doc)
delete_from_table(doctype, name, ignore_doctypes, doc)
delete_from_table(doctype, name, ignore_doctypes, doc)
# delete user_permissions
frappe.defaults.clear_default(parenttype="User Permission", key=doctype, value=name)
# delete user_permissions
frappe.defaults.clear_default(parenttype="User Permission", key=doctype, value=name)
return 'okay'
@ -135,3 +140,7 @@ def check_if_doc_is_dynamically_linked(doc):
{options}=%s and {fieldname}=%s""".format(**df), (doc.doctype, doc.name)):
frappe.throw(_("Cannot delete or cancel because {0} {1} is linked with {2} {3}").format(doc.doctype,
doc.name, df.parent, name), frappe.LinkExistsError)
def delete_linked_todos(doc):
delete_doc("ToDo", frappe.db.sql_list("""select name from `tabToDo`
where reference_type=%s and reference_name=%s""", (doc.doctype, doc.name)))

View file

@ -1,5 +1,5 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt
# MIT License. See license.txt
from __future__ import unicode_literals
"""
@ -33,17 +33,17 @@ def check_user_tags(dt):
except Exception, e:
if e.args[0] == 1054:
DocTags(dt).setup()
@frappe.whitelist()
def add_tag():
"adds a new tag to a record, and creates the Tag master"
f = frappe.local.form_dict
tag, color = f.get('tag'), f.get('color')
dt, dn = f.get('dt'), f.get('dn')
DocTags(dt).add(dn, tag)
return tag
@frappe.whitelist()
@ -51,23 +51,23 @@ def remove_tag():
"removes tag from the record"
f = frappe.local.form_dict
tag, dt, dn = f.get('tag'), f.get('dt'), f.get('dn')
DocTags(dt).remove(dn, tag)
class DocTags:
"""Tags for a particular doctype"""
def __init__(self, dt):
self.dt = dt
def get_tag_fields(self):
"""returns tag_fields property"""
return frappe.db.get_value('DocType', self.dt, 'tag_fields')
def get_tags(self, dn):
"""returns tag for a particular item"""
return frappe.db.get_value(self.dt, dn, '_user_tags', ignore=1) or ''
return (frappe.db.get_value(self.dt, dn, '_user_tags', ignore=1) or '').strip()
def add(self, dn, tag):
"""add a new user tag"""
@ -97,15 +97,15 @@ class DocTags:
frappe.db.sql("update `tab%s` set _user_tags=%s where name=%s" % \
(self.dt,'%s','%s'), (tags , dn))
except Exception, e:
if e.args[0]==1054:
if e.args[0]==1054:
if not tags:
# no tags, nothing to do
return
self.setup()
self.update(dn, tl)
else: raise
def setup(self):
"""adds the _user_tags column if not exists"""
from frappe.model.db_schema import add_column