From a6db20fe3b931b84b3fbe3f7c7774a7623da0dd3 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Thu, 2 Mar 2023 19:21:14 +0530 Subject: [PATCH 1/5] fix(DX): better error message for notification from reference doctype --- .../email/doctype/notification/notification.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/frappe/email/doctype/notification/notification.py b/frappe/email/doctype/notification/notification.py index ce19fb7b07..d5071e23a0 100644 --- a/frappe/email/doctype/notification/notification.py +++ b/frappe/email/doctype/notification/notification.py @@ -453,16 +453,17 @@ def evaluate_alert(doc: Document, alert, event): doc.reload() alert.send(doc) except TemplateError: - frappe.throw( - _("Error while evaluating Notification {0}. Please fix your template.").format(alert) + message = _("Error while evaluating Notification {0}. Please fix your template.").format( + frappe.utils.get_link_to_form("Notification", alert.name) ) + frappe.throw(message, title=_("Error in Notification")) except Exception as e: - error_log = frappe.log_error(message=frappe.get_traceback(), title=str(e)) - frappe.throw( - _("Error in Notification: {}").format( - frappe.utils.get_link_to_form("Error Log", error_log.name) - ) - ) + title = str(e) + message = frappe.get_traceback() + frappe.log_error(message=message, title=title) + + msg = f"
{title}{message}
" + frappe.throw(msg, title=_("Error in Notification")) def get_context(doc): From b17af2c32986e76147671ed568d93ae0a9c9a29f Mon Sep 17 00:00:00 2001 From: Ritwik Puri Date: Thu, 2 Mar 2023 23:23:36 +0530 Subject: [PATCH 2/5] fix: token cache expiry calculation (#20228) --- frappe/integrations/doctype/token_cache/token_cache.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frappe/integrations/doctype/token_cache/token_cache.py b/frappe/integrations/doctype/token_cache/token_cache.py index 2facc006c6..a4f34b4ad9 100644 --- a/frappe/integrations/doctype/token_cache/token_cache.py +++ b/frappe/integrations/doctype/token_cache/token_cache.py @@ -8,7 +8,7 @@ import pytz import frappe from frappe import _ from frappe.model.document import Document -from frappe.utils import cint, cstr +from frappe.utils import cint, cstr, get_time_zone class TokenCache(Document): @@ -52,7 +52,9 @@ class TokenCache(Document): return self def get_expires_in(self): + system_timezone = pytz.timezone(get_time_zone()) modified = frappe.utils.get_datetime(self.modified) + modified = system_timezone.localize(modified) expiry_utc = modified.astimezone(pytz.utc) + timedelta(seconds=self.expires_in) now_utc = datetime.utcnow().replace(tzinfo=pytz.utc) return cint((expiry_utc - now_utc).total_seconds()) From e589ef87f6dcf843f35b3c8a9dd4f259961edd76 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 3 Mar 2023 11:39:57 +0530 Subject: [PATCH 3/5] fix: compare with content value for Link fieldtypes --- frappe/public/js/frappe/views/reports/query_report.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index 91a8daf585..d6c50380f2 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -1204,7 +1204,10 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { width: parseInt(column.width) || null, editable: false, compareValue: compareFn, - format: (value, row, column, data) => { + format: (value, row, column, data, for_filter = false) => { + if (for_filter && column?.fieldtype === "Link") { + return value || ""; + } if (this.report_settings.formatter) { return this.report_settings.formatter( value, From 551861be634ac708dbf24415bdc38b9400f99d3e Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 3 Mar 2023 11:51:17 +0530 Subject: [PATCH 4/5] build(deps): Bump frappe-datatable to 1.17.2 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 589d2dd6c9..5cd8d571e3 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "fast-deep-equal": "^2.0.1", "fast-glob": "^3.2.5", "frappe-charts": "2.0.0-rc22", - "frappe-datatable": "^1.17.1", + "frappe-datatable": "^1.17.2", "frappe-gantt": "^0.6.0", "highlight.js": "^10.4.1", "html5-qrcode": "^2.0.11", diff --git a/yarn.lock b/yarn.lock index e5621d385f..4571c1f73d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1435,10 +1435,10 @@ frappe-charts@2.0.0-rc22: resolved "https://registry.yarnpkg.com/frappe-charts/-/frappe-charts-2.0.0-rc22.tgz#9a5a747febdc381a1d4d7af96e89cf519dfba8c0" integrity sha512-N7f/8979wJCKjusOinaUYfMxB80YnfuVLrSkjpj4LtyqS0BGS6SuJxUnb7Jl4RWUFEIs7zEhideIKnyLeFZF4Q== -frappe-datatable@^1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/frappe-datatable/-/frappe-datatable-1.17.1.tgz#795ee79a420df07b963b7decf489045d5993cc0b" - integrity sha512-qqvmsaYbQUwCAtGnhmTN8jrdvXW6YfRLTZS6ufb3b1ibFEMUbE04rEFJF7TJRd2ugSk80seS2OPGTZGw+V2b0A== +frappe-datatable@^1.17.2: + version "1.17.2" + resolved "https://registry.yarnpkg.com/frappe-datatable/-/frappe-datatable-1.17.2.tgz#8c717bd40541b8ad0db871e129dc02cff4290df0" + integrity sha512-Jk8/3860Zya7Si2cZYEjVj0Gfy7CqhPx/rVZCg2fZ1+NlaOvBsey/zFEIe2yWak8PiJ1Fw9VgOevKOoZ/ckmsw== dependencies: hyperlist "^1.0.0-beta" lodash "^4.17.5" From 9c4497acabe5a011b599bffc7ab7e7f432750429 Mon Sep 17 00:00:00 2001 From: Ritwik Puri Date: Fri, 3 Mar 2023 16:02:32 +0530 Subject: [PATCH 5/5] fix: dont show delete button in toolbar for single doctypes (#20245) --- frappe/public/js/frappe/form/toolbar.js | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/public/js/frappe/form/toolbar.js b/frappe/public/js/frappe/form/toolbar.js index 497ca68cd3..dbe88f2306 100644 --- a/frappe/public/js/frappe/form/toolbar.js +++ b/frappe/public/js/frappe/form/toolbar.js @@ -422,6 +422,7 @@ frappe.ui.form.Toolbar = class Toolbar { if ( cint(me.frm.doc.docstatus) != 1 && !me.frm.doc.__islocal && + !frappe.model.is_single(me.frm.doctype) && frappe.model.can_delete(me.frm.doctype) ) { this.page.add_menu_item(