From 974d49dd09a27315f446d15b0266ff8ffee74241 Mon Sep 17 00:00:00 2001 From: Zarrar Date: Fri, 16 Feb 2018 15:15:18 +0530 Subject: [PATCH 1/8] fix keys not defined error (#5023) --- frappe/core/doctype/version/version_view.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/core/doctype/version/version_view.html b/frappe/core/doctype/version/version_view.html index ec56b94cdd..5383be82a1 100644 --- a/frappe/core/doctype/version/version_view.html +++ b/frappe/core/doctype/version/version_view.html @@ -45,7 +45,7 @@ {{ frappe.meta.get_label(doc.ref_doctype, item[0]) }} - {% var item_keys = keys(item[1]).sort(); %} + {% var item_keys = Object.keys(item[1]).sort(); %} {% for row_key in item_keys %} From 3857c279622cfb88cee913a29bf7c4ba8f496774 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 19 Feb 2018 11:18:33 +0530 Subject: [PATCH 2/8] Added promise for savesubmit method (#5028) --- frappe/public/js/legacy/form.js | 45 ++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/frappe/public/js/legacy/form.js b/frappe/public/js/legacy/form.js index d593667412..96b2513f97 100644 --- a/frappe/public/js/legacy/form.js +++ b/frappe/public/js/legacy/form.js @@ -697,7 +697,6 @@ _f.Frm.prototype.save = function(save_action, callback, btn, on_error) { $(document.activeElement).blur(); frappe.ui.form.close_grid_form(); - // let any pending js process finish setTimeout(function() { me._save(save_action, callback, btn, on_error, resolve); @@ -761,30 +760,34 @@ _f.Frm.prototype._save = function(save_action, callback, btn, on_error, resolve) _f.Frm.prototype.savesubmit = function(btn, callback, on_error) { var me = this; - this.validate_form_action("Submit"); - frappe.confirm(__("Permanently Submit {0}?", [this.docname]), function() { - frappe.validated = true; - me.script_manager.trigger("before_submit").then(function() { - if(!frappe.validated) { - if(on_error) { - on_error(); - } - return; - } - return me.save('Submit', function(r) { - if(r.exc) { - if (on_error) { + return new Promise(resolve => { + this.validate_form_action("Submit"); + frappe.confirm(__("Permanently Submit {0}?", [this.docname]), function() { + frappe.validated = true; + me.script_manager.trigger("before_submit").then(function() { + if(!frappe.validated) { + if(on_error) { on_error(); } - } else { - frappe.utils.play_sound("submit"); - callback && callback(); - me.script_manager.trigger("on_submit"); + return; } - }, btn, on_error); - }); - }, on_error); + + me.save('Submit', function(r) { + if(r.exc) { + if (on_error) { + on_error(); + } + } else { + frappe.utils.play_sound("submit"); + callback && callback(); + me.script_manager.trigger("on_submit") + .then(() => resolve(me)); + } + }, btn, on_error, resolve); + }); + }, on_error); + }); }; _f.Frm.prototype.savecancel = function(btn, callback, on_error) { From 2171a3acc213ac0bca1ff5c91d065150cc005513 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 19 Feb 2018 11:21:59 +0530 Subject: [PATCH 3/8] Allow dynamic link in route options (#5027) --- frappe/public/js/frappe/model/create_new.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/model/create_new.js b/frappe/public/js/frappe/model/create_new.js index d9df8b74b6..760d1192c7 100644 --- a/frappe/public/js/frappe/model/create_new.js +++ b/frappe/public/js/frappe/model/create_new.js @@ -61,7 +61,7 @@ $.extend(frappe.model, { if(frappe.route_options && !doc.parent) { $.each(frappe.route_options, function(fieldname, value) { var df = frappe.meta.has_field(doctype, fieldname); - if(df && in_list(['Link', 'Data', 'Select'], df.fieldtype) && !df.no_copy) { + if(df && in_list(['Link', 'Data', 'Select', 'Dynamic Link'], df.fieldtype) && !df.no_copy) { doc[fieldname]=value; } }); From 6a23461b4200daf4bafd4cbb54337d054f16da58 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Mon, 19 Feb 2018 11:25:14 +0530 Subject: [PATCH 4/8] [fix] Send email with no letterhead if print letterhead is unchecked on print preview (#4816) * [fix] send email with no letterhead if print letterhead is unchecked on print priview * [fix] if not on print preview page, pull with_letterhead from print settings * remove redundant if condition * minor --- frappe/__init__.py | 12 +++++++----- frappe/core/doctype/communication/email.py | 15 +++++++++++---- frappe/email/queue.py | 6 ++++-- frappe/public/js/frappe/views/communication.js | 12 +++++++++++- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 4d26aac91f..dffd919fc3 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -384,7 +384,7 @@ def sendmail(recipients=[], sender="", subject="No Subject", message="No Message attachments=None, content=None, doctype=None, name=None, reply_to=None, cc=[], bcc=[], message_id=None, in_reply_to=None, send_after=None, expose_recipients=None, send_priority=1, communication=None, retry=1, now=None, read_receipt=None, is_notification=False, - inline_images=None, template=None, args=None, header=None): + inline_images=None, template=None, args=None, header=None, print_letterhead=False): """Send email using user's default **Email Account** or global default **Email Account**. @@ -433,7 +433,7 @@ def sendmail(recipients=[], sender="", subject="No Subject", message="No Message attachments=attachments, reply_to=reply_to, cc=cc, bcc=bcc, message_id=message_id, in_reply_to=in_reply_to, send_after=send_after, expose_recipients=expose_recipients, send_priority=send_priority, communication=communication, now=now, read_receipt=read_receipt, is_notification=is_notification, - inline_images=inline_images, header=header) + inline_images=inline_images, header=header, print_letterhead=print_letterhead) whitelisted = [] guest_methods = [] @@ -1250,7 +1250,7 @@ def get_print(doctype=None, name=None, print_format=None, style=None, html=None, else: return html -def attach_print(doctype, name, file_name=None, print_format=None, style=None, html=None, doc=None, lang=None): +def attach_print(doctype, name, file_name=None, print_format=None, style=None, html=None, doc=None, lang=None, print_letterhead=False): from frappe.utils import scrub_urls if not file_name: file_name = name @@ -1264,15 +1264,17 @@ def attach_print(doctype, name, file_name=None, print_format=None, style=None, h if lang: local.lang = lang local.flags.ignore_print_permissions = True + no_letterhead = not print_letterhead + if int(print_settings.send_print_as_pdf or 0): out = { "fname": file_name + ".pdf", - "fcontent": get_print(doctype, name, print_format=print_format, style=style, html=html, as_pdf=True, doc=doc) + "fcontent": get_print(doctype, name, print_format=print_format, style=style, html=html, as_pdf=True, doc=doc, no_letterhead=no_letterhead) } else: out = { "fname": file_name + ".html", - "fcontent": scrub_urls(get_print(doctype, name, print_format=print_format, style=style, html=html, doc=doc)).encode("utf-8") + "fcontent": scrub_urls(get_print(doctype, name, print_format=print_format, style=style, html=html, doc=doc, no_letterhead=no_letterhead)).encode("utf-8") } local.flags.ignore_print_permissions = False diff --git a/frappe/core/doctype/communication/email.py b/frappe/core/doctype/communication/email.py index bac3c4ed35..c6d0e9fcb1 100755 --- a/frappe/core/doctype/communication/email.py +++ b/frappe/core/doctype/communication/email.py @@ -26,7 +26,8 @@ from pymysql.constants import ER @frappe.whitelist() def make(doctype=None, name=None, content=None, subject=None, sent_or_received = "Sent", sender=None, sender_full_name=None, recipients=None, communication_medium="Email", send_email=False, - print_html=None, print_format=None, attachments='[]', send_me_a_copy=False, cc=None, bcc=None, flags=None,read_receipt=None): + print_html=None, print_format=None, attachments='[]', send_me_a_copy=False, cc=None, bcc=None, + flags=None, read_receipt=None, print_letterhead=True): """Make a new communication. :param doctype: Reference DocType. @@ -87,6 +88,7 @@ def make(doctype=None, name=None, content=None, subject=None, sent_or_received = frappe.db.commit() if cint(send_email): + frappe.flags.print_letterhead = print_letterhead comm.send(print_html, print_format, attachments, send_me_a_copy=send_me_a_copy) return { @@ -142,7 +144,8 @@ def notify(doc, print_html=None, print_format=None, attachments=None, enqueue(sendmail, queue="default", timeout=300, event="sendmail", communication_name=doc.name, print_html=print_html, print_format=print_format, attachments=attachments, - recipients=recipients, cc=cc, bcc=bcc, lang=frappe.local.lang, session=frappe.local.session) + recipients=recipients, cc=cc, bcc=bcc, lang=frappe.local.lang, + session=frappe.local.session, print_letterhead=frappe.flags.print_letterhead) def _notify(doc, print_html=None, print_format=None, attachments=None, recipients=None, cc=None, bcc=None): @@ -171,7 +174,8 @@ def _notify(doc, print_html=None, print_format=None, attachments=None, delayed=True, communication=doc.name, read_receipt=doc.read_receipt, - is_notification=True if doc.sent_or_received =="Received" else False + is_notification=True if doc.sent_or_received =="Received" else False, + print_letterhead=True if frappe.flags.print_letterhead=='true' else False ) def update_parent_mins_to_first_response(doc): @@ -466,7 +470,7 @@ def get_attach_link(doc, print_format): }) def sendmail(communication_name, print_html=None, print_format=None, attachments=None, - recipients=None, cc=None, bcc=None, lang=None, session=None): + recipients=None, cc=None, bcc=None, lang=None, session=None, print_letterhead=None): try: if lang: @@ -477,6 +481,9 @@ def sendmail(communication_name, print_html=None, print_format=None, attachments session['data'] = frappe._dict(session['data']) frappe.local.session.update(session) + if print_letterhead: + frappe.flags.print_letterhead = print_letterhead + # upto 3 retries for i in range(3): try: diff --git a/frappe/email/queue.py b/frappe/email/queue.py index d6bcce6c8f..fd0f05767b 100755 --- a/frappe/email/queue.py +++ b/frappe/email/queue.py @@ -24,7 +24,7 @@ def send(recipients=None, sender=None, subject=None, message=None, text_content= attachments=None, reply_to=None, cc=[], bcc=[], message_id=None, in_reply_to=None, send_after=None, expose_recipients=None, send_priority=1, communication=None, now=False, read_receipt=None, queue_separately=False, is_notification=False, add_unsubscribe_link=1, inline_images=None, - header=None): + header=None, print_letterhead=False): """Add email to sending queue (Email Queue) :param recipients: List of recipients. @@ -131,7 +131,8 @@ def send(recipients=None, sender=None, subject=None, message=None, text_content= is_notification = is_notification, inline_images = inline_images, header=header, - now=now) + now=now, + print_letterhead=print_letterhead) def add(recipients, sender, subject, **kwargs): @@ -169,6 +170,7 @@ def get_email_queue(recipients, sender, subject, **kwargs): _attachments.append(att) elif att.get("print_format_attachment") == 1: att['lang'] = frappe.local.lang + att['print_letterhead'] = kwargs.get('print_letterhead') _attachments.append(att) e.attachments = json.dumps(_attachments) diff --git a/frappe/public/js/frappe/views/communication.js b/frappe/public/js/frappe/views/communication.js index 695f6eb58d..08797827fa 100755 --- a/frappe/public/js/frappe/views/communication.js +++ b/frappe/public/js/frappe/views/communication.js @@ -506,7 +506,8 @@ frappe.views.CommunicationComposer = Class.extend({ sender_full_name: form_values.sender?frappe.user.full_name():undefined, attachments: selected_attachments, _lang : me.lang_code, - read_receipt:form_values.send_read_receipt + read_receipt:form_values.send_read_receipt, + print_letterhead: me.is_print_letterhead_checked(), }, btn: btn, callback: function(r) { @@ -552,6 +553,15 @@ frappe.views.CommunicationComposer = Class.extend({ }); }, + is_print_letterhead_checked: function() { + if($(this.frm.wrapper).find('.form-print-wrapper').is(':visible')){ + return $(this.frm.wrapper).find('.print-letterhead').prop('checked'); + } else { + return (frappe.model.get_doc(":Print Settings", "Print Settings") || + { with_letterhead: 1 }).with_letterhead ? true : false; + } + }, + setup_earlier_reply: function() { var fields = this.dialog.fields_dict, signature = frappe.boot.user.email_signature || "", From a1b46cdfaca3b7a95732ddb77dc04bf24fd60524 Mon Sep 17 00:00:00 2001 From: Zarrar Date: Wed, 21 Feb 2018 14:46:33 +0530 Subject: [PATCH 5/8] make expand_all button configurable (#5042) --- frappe/public/js/frappe/views/treeview.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/frappe/public/js/frappe/views/treeview.js b/frappe/public/js/frappe/views/treeview.js index 3f2a9a9c70..bd6afe3132 100644 --- a/frappe/public/js/frappe/views/treeview.js +++ b/frappe/public/js/frappe/views/treeview.js @@ -29,6 +29,7 @@ frappe.views.TreeView = Class.extend({ this.opts = {}; this.opts.get_tree_root = true; + this.opts.show_expand_all = true; $.extend(this.opts, opts); this.doctype = opts.doctype; this.args = {doctype: me.doctype}; @@ -70,9 +71,11 @@ frappe.views.TreeView = Class.extend({ "padding-bottom": "25px" }); - this.page.add_inner_button(__('Expand All'), function() { - me.tree.rootnode.load_all(); - }); + if(this.opts.show_expand_all) { + this.page.add_inner_button(__('Expand All'), function() { + me.tree.rootnode.load_all(); + }); + } if(this.opts.view_template) { var row = $('
').appendTo(this.page.main); From c8d13c07ba5ebefda1181fb5b2f24f0377c0c6f1 Mon Sep 17 00:00:00 2001 From: Shreya Shah Date: Thu, 22 Feb 2018 11:01:54 +0530 Subject: [PATCH 6/8] refresh only if timeline (#5050) --- frappe/public/js/frappe/form/footer/attachments.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/footer/attachments.js b/frappe/public/js/frappe/form/footer/attachments.js index df37f2898d..1bfa1148c3 100644 --- a/frappe/public/js/frappe/form/footer/attachments.js +++ b/frappe/public/js/frappe/form/footer/attachments.js @@ -140,7 +140,7 @@ frappe.ui.form.Attachments = Class.extend({ } me.remove_fileid(fileid); me.frm.get_docinfo().communications.push(r.message); - me.frm.timeline.refresh(); + me.frm.timeline && me.frm.timeline.refresh(); if (callback) callback(); } }); From 4d96472969f5e798fa6f1f9537d294d87df3fe5e Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 22 Feb 2018 14:36:58 +0530 Subject: [PATCH 7/8] Updated develop version --- frappe/hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/hooks.py b/frappe/hooks.py index 11ab305296..348f1d283b 100755 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -11,7 +11,7 @@ app_color = "orange" source_link = "https://github.com/frappe/frappe" app_license = "MIT" -develop_version = '9.x.x-develop' +develop_version = '10.x.x-develop' app_email = "info@frappe.io" From 5849e9f268d9a3db3efff3a513b9fbfe67f38540 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 22 Feb 2018 15:07:33 +0600 Subject: [PATCH 8/8] bumped to version 10.1.0 --- frappe/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index dffd919fc3..bf164efcde 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template -__version__ = '10.0.25' +__version__ = '10.1.0' __title__ = "Frappe Framework" local = Local()