|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
- # MIT License. See license.txt
-
- from __future__ import unicode_literals
- import frappe, json
- import frappe.widgets.form.meta
- import frappe.widgets.form.load
-
- from frappe import _
-
- @frappe.whitelist()
- def remove_attach():
- """remove attachment"""
- import frappe.utils.file_manager
- fid = frappe.form_dict.get('fid')
- return frappe.utils.file_manager.remove_file(fid)
-
- @frappe.whitelist()
- def get_fields():
- """get fields"""
- r = {}
- args = {
- 'select':frappe.form_dict.get('select')
- ,'from':frappe.form_dict.get('from')
- ,'where':frappe.form_dict.get('where')
- }
- ret = frappe.db.sql("select %(select)s from `%(from)s` where %(where)s limit 1" % args)
- if ret:
- fl, i = frappe.form_dict.get('fields').split(','), 0
- for f in fl:
- r[f], i = ret[0][i], i+1
- frappe.response['message']=r
-
- @frappe.whitelist()
- def validate_link():
- """validate link when updated by user"""
- import frappe
- import frappe.utils
-
- value, options, fetch = frappe.form_dict.get('value'), frappe.form_dict.get('options'), frappe.form_dict.get('fetch')
-
- # no options, don't validate
- if not options or options=='null' or options=='undefined':
- frappe.response['message'] = 'Ok'
- return
-
- if frappe.db.sql("select name from `tab%s` where name=%s" % (options, '%s'), (value,)):
-
- # get fetch values
- if fetch:
- # escape with "`"
- fetch = ", ".join(("`{0}`".format(f.strip()) for f in fetch.split(",")))
-
- frappe.response['fetch_values'] = [frappe.utils.parse_val(c) \
- for c in frappe.db.sql("select %s from `tab%s` where name=%s" \
- % (fetch, options, '%s'), (value,))[0]]
-
- frappe.response['message'] = 'Ok'
-
- @frappe.whitelist()
- def add_comment(doc):
- """allow any logged user to post a comment"""
- doc = frappe.get_doc(json.loads(doc))
- doc.insert(ignore_permissions = True)
-
- return doc.as_dict()
-
- @frappe.whitelist()
- def get_next(doctype, value, prev, filters=None, order_by="modified desc"):
- import frappe.widgets.reportview
-
- prev = not int(prev)
- sort_field, sort_order = order_by.split(" ")
-
- if not filters: filters = []
- if isinstance(filters, basestring):
- filters = json.loads(filters)
-
- # condition based on sort order
- condition = ">" if sort_order.lower()=="desc" else "<"
-
- # switch the condition
- if prev:
- condition = "<" if condition==">" else "<"
- else:
- sort_order = "asc" if sort_order.lower()=="desc" else "desc"
-
- # add condition for next or prev item
- if not order_by[0] in [f[1] for f in filters]:
- filters.append([doctype, sort_field, condition, value])
-
- res = frappe.widgets.reportview.execute(doctype,
- fields = ["name"],
- filters = filters,
- order_by = sort_field + " " + sort_order,
- limit_start=0, limit_page_length=1, as_list=True)
-
- if not res:
- frappe.msgprint(_("No further records"))
- return None
- else:
- return res[0][0]
-
- @frappe.whitelist()
- def get_linked_docs(doctype, name, metadata_loaded=None, no_metadata=False):
- if not metadata_loaded: metadata_loaded = []
- meta = frappe.widgets.form.meta.get_meta(doctype)
- linkinfo = meta.get("__linked_with")
- results = {}
- for dt, link in linkinfo.items():
- link["doctype"] = dt
- link_meta_bundle = frappe.widgets.form.load.get_meta_bundle(dt)
- linkmeta = link_meta_bundle[0]
- if not linkmeta.get("issingle"):
- fields = [d.fieldname for d in linkmeta.get("fields", {"in_list_view":1,
- "fieldtype": ["not in", ["Image", "HTML", "Button", "Table"]]})] \
- + ["name", "modified", "docstatus"]
-
- fields = ["`tab{dt}`.`{fn}`".format(dt=dt, fn=sf.strip()) for sf in fields if sf]
-
- try:
- if link.get("child_doctype"):
- ret = frappe.get_list(doctype=dt, fields=fields,
- filters=[[link.get('child_doctype'), link.get("fieldname"), '=', name]])
-
- else:
- ret = frappe.get_list(doctype=dt, fields=fields,
- filters=[[dt, link.get("fieldname"), '=', name]])
-
- except frappe.PermissionError:
- continue
-
- if ret:
- results[dt] = ret
-
- if not no_metadata and not dt in metadata_loaded:
- frappe.local.response.docs.extend(link_meta_bundle)
-
- return results
|