diff --git a/frappe/__init__.py b/frappe/__init__.py index 5a2dbd5b3f..11999aecba 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__ = '9.1.1' +__version__ = '9.1.2' __title__ = "Frappe Framework" local = Local() diff --git a/frappe/integrations/doctype/razorpay_settings/razorpay_settings.py b/frappe/integrations/doctype/razorpay_settings/razorpay_settings.py index 9a79ef9bec..a7da7c48b1 100644 --- a/frappe/integrations/doctype/razorpay_settings/razorpay_settings.py +++ b/frappe/integrations/doctype/razorpay_settings/razorpay_settings.py @@ -83,13 +83,15 @@ class RazorpaySettings(Document): frappe.throw(_("Please select another payment method. Razorpay does not support transactions in currency '{0}'").format(currency)) def get_payment_url(self, **kwargs): - return get_url("./integrations/razorpay_checkout?{0}".format(urlencode(kwargs))) + integration_request = create_request_log(kwargs, "Host", "Razorpay") + return get_url("./integrations/razorpay_checkout?token={0}".format(integration_request.name)) def create_request(self, data): self.data = frappe._dict(data) try: - self.integration_request = create_request_log(self.data, "Host", "Razorpay") + self.integration_request = frappe.get_doc("Integration Request", self.data.token) + self.integration_request.update_status(self.data, 'Queued') return self.authorize_payment() except Exception: diff --git a/frappe/public/js/frappe/form/footer/timeline.js b/frappe/public/js/frappe/form/footer/timeline.js index 03d68a8221..418b8f277e 100644 --- a/frappe/public/js/frappe/form/footer/timeline.js +++ b/frappe/public/js/frappe/form/footer/timeline.js @@ -329,7 +329,8 @@ frappe.ui.form.Timeline = Class.extend({ if(c.subject && c.communication_type==="Communication") { if(this.frm.doc.subject && !this.frm.doc.subject.includes(c.subject)) { c.show_subject = true; - } else if(this.frm.meta.title_field && !!this.frm.doc[this.frm.meta.title_field].includes(c.subject)) { + } else if(this.frm.meta.title_field && this.frm.doc[this.frm.meta.title_field] + && !!this.frm.doc[this.frm.meta.title_field].includes(c.subject)) { c.show_subject = true; } else if(!this.frm.doc.name.includes(c.subject)) { c.show_subject = true; diff --git a/frappe/templates/includes/integrations/razorpay_checkout.js b/frappe/templates/includes/integrations/razorpay_checkout.js index 6ab5501d26..07bdcd91de 100644 --- a/frappe/templates/includes/integrations/razorpay_checkout.js +++ b/frappe/templates/includes/integrations/razorpay_checkout.js @@ -6,7 +6,7 @@ $(document).ready(function(){ "name": "{{ title }}", "description": "{{ description }}", "handler": function (response){ - razorpay.make_payment_log(response, options, "{{ reference_doctype }}", "{{ reference_docname }}"); + razorpay.make_payment_log(response, options, "{{ reference_doctype }}", "{{ reference_docname }}", "{{ token }}"); }, "prefill": { "name": "{{ payer_name }}", @@ -24,7 +24,7 @@ $(document).ready(function(){ frappe.provide('razorpay'); -razorpay.make_payment_log = function(response, options, doctype, docname){ +razorpay.make_payment_log = function(response, options, doctype, docname, token){ $('.razorpay-loading').addClass('hidden'); $('.razorpay-confirming').removeClass('hidden'); @@ -36,7 +36,8 @@ razorpay.make_payment_log = function(response, options, doctype, docname){ "razorpay_payment_id": response.razorpay_payment_id, "options": options, "reference_doctype": doctype, - "reference_docname": docname + "reference_docname": docname, + "token": token }, callback: function(r){ if (r.message && r.message.status == 200) { diff --git a/frappe/templates/pages/integrations/razorpay_checkout.py b/frappe/templates/pages/integrations/razorpay_checkout.py index 3af552d6a6..1d988e9e92 100644 --- a/frappe/templates/pages/integrations/razorpay_checkout.py +++ b/frappe/templates/pages/integrations/razorpay_checkout.py @@ -17,15 +17,21 @@ def get_context(context): context.no_cache = 1 context.api_key = get_api_key() - # all these keys exist in form_dict - if not (set(expected_keys) - set(frappe.form_dict.keys())): + try: + doc = frappe.get_doc("Integration Request", frappe.form_dict['token']) + payment_details = json.loads(doc.data) + for key in expected_keys: - context[key] = frappe.form_dict[key] + context[key] = payment_details[key] + context['token'] = frappe.form_dict['token'] context['amount'] = flt(context['amount']) - else: - frappe.redirect_to_message(_('Some information is missing'), _('Looks like someone sent you to an incomplete URL. Please ask them to look into it.')) + except Exception: + frappe.redirect_to_message(_('Invalid Token'), + _('Seems token you are using is invalid!'), + http_status_code=400, indicator_color='red') + frappe.local.flags.redirect_location = frappe.local.response.location raise frappe.Redirect @@ -37,7 +43,7 @@ def get_api_key(): return api_key @frappe.whitelist(allow_guest=True) -def make_payment(razorpay_payment_id, options, reference_doctype, reference_docname): +def make_payment(razorpay_payment_id, options, reference_doctype, reference_docname, token): data = {} if isinstance(options, string_types): @@ -46,7 +52,8 @@ def make_payment(razorpay_payment_id, options, reference_doctype, reference_docn data.update({ "razorpay_payment_id": razorpay_payment_id, "reference_docname": reference_docname, - "reference_doctype": reference_doctype + "reference_doctype": reference_doctype, + "token": token }) data = frappe.get_doc("Razorpay Settings").create_request(data) diff --git a/frappe/website/doctype/website_slideshow/website_slideshow.json b/frappe/website/doctype/website_slideshow/website_slideshow.json index ab6f928a2e..19f7bb83d3 100644 --- a/frappe/website/doctype/website_slideshow/website_slideshow.json +++ b/frappe/website/doctype/website_slideshow/website_slideshow.json @@ -19,18 +19,16 @@ "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "eval:!doc.__islocal", - "description": "Note: For best results, images must be of the same size and width must be greater than height.", - "fieldname": "sb0", - "fieldtype": "Section Break", + "fieldname": "slideshow_name", + "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, - "label": "", + "label": "Slideshow Name", "length": 0, "no_copy": 0, "permlevel": 0, @@ -39,7 +37,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -50,16 +48,18 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "slideshow_name", - "fieldtype": "Data", + "depends_on": "eval:!doc.__islocal", + "description": "Note: For best results, images must be of the same size and width must be greater than height.", + "fieldname": "sb0", + "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 1, + "in_list_view": 0, "in_standard_filter": 0, - "label": "Slideshow Name", + "label": "", "length": 0, "no_copy": 0, "permlevel": 0, @@ -68,7 +68,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -147,7 +147,7 @@ "issingle": 0, "istable": 0, "max_attachments": 10, - "modified": "2017-09-18 11:19:31.627585", + "modified": "2017-10-05 18:56:20.094625", "modified_by": "Administrator", "module": "Website", "name": "Website Slideshow",