@@ -49,6 +49,10 @@ def clear_defaults_cache(user=None): | |||||
elif frappe.flags.in_install!="frappe": | elif frappe.flags.in_install!="frappe": | ||||
frappe.cache().delete_key("defaults") | frappe.cache().delete_key("defaults") | ||||
def clear_document_cache(): | |||||
frappe.local.document_cache = {} | |||||
frappe.cache().delete_key("document_cache") | |||||
def clear_doctype_cache(doctype=None): | def clear_doctype_cache(doctype=None): | ||||
cache = frappe.cache() | cache = frappe.cache() | ||||
@@ -82,3 +86,6 @@ def clear_doctype_cache(doctype=None): | |||||
for name in groups: | for name in groups: | ||||
cache.delete_value(name) | cache.delete_value(name) | ||||
# Clear all document's cache. To clear documents of a specific DocType document_cache should be restructured | |||||
clear_document_cache() | |||||
@@ -75,8 +75,8 @@ def get_feed_match_conditions(user=None, force=True): | |||||
if user_permissions: | if user_permissions: | ||||
can_read_docs = [] | can_read_docs = [] | ||||
for doctype, obj in user_permissions.items(): | for doctype, obj in user_permissions.items(): | ||||
for n in obj.get("docs", []): | |||||
can_read_docs.append('{}|{}'.format(doctype, frappe.db.escape(n))) | |||||
for n in obj: | |||||
can_read_docs.append('{}|{}'.format(doctype, frappe.db.escape(n.get('doc', '')))) | |||||
if can_read_docs: | if can_read_docs: | ||||
conditions.append("concat_ws('|', `tabCommunication`.reference_doctype, `tabCommunication`.reference_name) in ({})".format( | conditions.append("concat_ws('|', `tabCommunication`.reference_doctype, `tabCommunication`.reference_name) in ({})".format( | ||||
@@ -57,7 +57,7 @@ def generate_report_result(report, filters=None, user=None): | |||||
module = report.module or frappe.db.get_value("DocType", report.ref_doctype, "module") | module = report.module or frappe.db.get_value("DocType", report.ref_doctype, "module") | ||||
if report.is_standard == "Yes": | if report.is_standard == "Yes": | ||||
method_name = get_report_module_dotted_path(module, report.name) + ".execute" | method_name = get_report_module_dotted_path(module, report.name) + ".execute" | ||||
threshold = 10 | |||||
threshold = 60 | |||||
res = [] | res = [] | ||||
start_time = datetime.datetime.now() | start_time = datetime.datetime.now() | ||||
@@ -103,6 +103,7 @@ frappe.ui.form.AssignTo = Class.extend({ | |||||
} | } | ||||
me.assign_to.dialog.show(); | me.assign_to.dialog.show(); | ||||
me.assign_to = null; | |||||
}, | }, | ||||
remove: function(owner) { | remove: function(owner) { | ||||
var me = this; | var me = this; | ||||
@@ -2,7 +2,7 @@ | |||||
{% if (data.user_content) { %} | {% if (data.user_content) { %} | ||||
<span class="pull-left avatar avatar-medium hidden-xs" style="margin-top: 1px"> | <span class="pull-left avatar avatar-medium hidden-xs" style="margin-top: 1px"> | ||||
{% if(data.user_info.image) { %} | {% if(data.user_info.image) { %} | ||||
<div class="avatar-frame" style="background-image: url({%= data.user_info.image %})"></div> | |||||
<div class="avatar-frame" style="background-image: url(\'{%= data.user_info.image %}\')"></div> | |||||
{% } else { %} | {% } else { %} | ||||
<div class="standard-image" style="background-color: {{ data.user_info.color }}"> | <div class="standard-image" style="background-color: {{ data.user_info.color }}"> | ||||
{{ data.user_info.abbr }}</div> | {{ data.user_info.abbr }}</div> | ||||
@@ -35,7 +35,7 @@ | |||||
<div class="comment-header clearfix small {% if (data.edit || data.delete) { %} links-active {% } %}"> | <div class="comment-header clearfix small {% if (data.edit || data.delete) { %} links-active {% } %}"> | ||||
<span class="pull-left avatar avatar-small visible-xs"> | <span class="pull-left avatar avatar-small visible-xs"> | ||||
{% if(data.user_info.image) { %} | {% if(data.user_info.image) { %} | ||||
<div class="avatar-frame" style="background-image: url({%= data.user_info.image %})"></div> | |||||
<div class="avatar-frame" style="background-image: url(\'{%= data.user_info.image %}\')"></div> | |||||
{% } else { %} | {% } else { %} | ||||
<div class="standard-image" style="background-color: {{ data.user_info.color }}"> | <div class="standard-image" style="background-color: {{ data.user_info.color }}"> | ||||
{{ data.user_info.abbr }}</div> | {{ data.user_info.abbr }}</div> | ||||
@@ -616,11 +616,24 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { | |||||
{for_print: false, always_show_decimals: true}, data); | {for_print: false, always_show_decimals: true}, data); | ||||
}; | }; | ||||
let compareFn = null; | |||||
if (column.fieldtype === 'Date') { | |||||
compareFn = (cell, keyword) => { | |||||
if (!cell.content) return null; | |||||
if (keyword.length !== 'YYYY-MM-DD'.length) return null; | |||||
const keywordValue = frappe.datetime.user_to_obj(keyword); | |||||
const cellValue = frappe.datetime.str_to_obj(cell.content); | |||||
return [+cellValue, +keywordValue]; | |||||
}; | |||||
} | |||||
return Object.assign(column, { | return Object.assign(column, { | ||||
id: column.fieldname, | id: column.fieldname, | ||||
name: column.label, | name: column.label, | ||||
width: parseInt(column.width) || null, | width: parseInt(column.width) || null, | ||||
editable: false, | editable: false, | ||||
compareValue: compareFn, | |||||
format: (value, row, column, data) => { | format: (value, row, column, data) => { | ||||
if (this.report_settings.formatter) { | if (this.report_settings.formatter) { | ||||
return this.report_settings.formatter(value, row, column, data, format_cell); | return this.report_settings.formatter(value, row, column, data, format_cell); | ||||
@@ -823,6 +823,19 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView { | |||||
// child table column | // child table column | ||||
const id = doctype !== this.doctype ? `${doctype}:${fieldname}` : fieldname; | const id = doctype !== this.doctype ? `${doctype}:${fieldname}` : fieldname; | ||||
let compareFn = null; | |||||
if (docfield.fieldtype === 'Date') { | |||||
compareFn = (cell, keyword) => { | |||||
if (!cell.content) return null; | |||||
if (keyword.length !== 'YYYY-MM-DD'.length) return null; | |||||
const keywordValue = frappe.datetime.user_to_obj(keyword); | |||||
const cellValue = frappe.datetime.str_to_obj(cell.content); | |||||
return [+cellValue, +keywordValue]; | |||||
} | |||||
} | |||||
return { | return { | ||||
id: id, | id: id, | ||||
field: fieldname, | field: fieldname, | ||||
@@ -832,6 +845,7 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView { | |||||
width, | width, | ||||
editable, | editable, | ||||
align, | align, | ||||
compareValue: compareFn, | |||||
format: (value, row, column, data) => { | format: (value, row, column, data) => { | ||||
const d = row.reduce((acc, curr) => { | const d = row.reduce((acc, curr) => { | ||||
if (!curr.column.docfield) return acc; | if (!curr.column.docfield) return acc; | ||||
@@ -22,7 +22,7 @@ | |||||
"awesomplete": "^1.1.2", | "awesomplete": "^1.1.2", | ||||
"cookie": "^0.3.1", | "cookie": "^0.3.1", | ||||
"express": "^4.16.2", | "express": "^4.16.2", | ||||
"frappe-datatable": "^1.7.3", | |||||
"frappe-datatable": "^1.8.0", | |||||
"frappe-gantt": "^0.1.0", | "frappe-gantt": "^0.1.0", | ||||
"fuse.js": "^3.2.0", | "fuse.js": "^3.2.0", | ||||
"highlight.js": "^9.12.0", | "highlight.js": "^9.12.0", | ||||
@@ -1517,10 +1517,10 @@ forwarded@~0.1.2: | |||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" | ||||
integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= | ||||
frappe-datatable@^1.7.2: | |||||
version "1.7.3" | |||||
resolved "https://registry.yarnpkg.com/frappe-datatable/-/frappe-datatable-1.7.3.tgz#dadddf01867723bf0862918dd62cfea4652416a3" | |||||
integrity sha512-72LUx0ZRRjFPLFQUzgB7Uywpxgk1rFLjyzOq5yQ5Mr2G8u0t3AoUJLRG2lAqFD49JOxezVb6Oa03Qmon1DCExA== | |||||
frappe-datatable@^1.8.0: | |||||
version "1.8.0" | |||||
resolved "https://registry.yarnpkg.com/frappe-datatable/-/frappe-datatable-1.8.0.tgz#7f789ed77bdf9800143fffb1bb28a24d5dbdc27c" | |||||
integrity sha512-j3DdmYtTjhcVXCVkYjKHdZOc8tSwZapanlujdx1xzXcL7Ueo+BFiPR5WptWRfH43K3nboh3m7clcAIX7LdQR4g== | |||||
dependencies: | dependencies: | ||||
hyperlist "^1.0.0-beta" | hyperlist "^1.0.0-beta" | ||||
lodash "^4.17.5" | lodash "^4.17.5" | ||||