diff --git a/frappe/__init__.py b/frappe/__init__.py
index 43ec436a7a..c8352003c9 100644
--- a/frappe/__init__.py
+++ b/frappe/__init__.py
@@ -1248,9 +1248,9 @@ def logger(module=None, with_more_info=True):
from frappe.utils.logger import get_logger
return get_logger(module or 'default', with_more_info=with_more_info)
-def log_error(message, title=None):
+def log_error(message=None, title=None):
'''Log error to Error Log'''
- get_doc(dict(doctype='Error Log', error=str(message),
+ get_doc(dict(doctype='Error Log', error=str(message or get_traceback()),
method=title)).insert(ignore_permissions=True)
def get_desk_link(doctype, name):
diff --git a/frappe/integration_broker/doctype/integration_service/integration_service.py b/frappe/integration_broker/doctype/integration_service/integration_service.py
index 0d52637528..9b79d0307f 100644
--- a/frappe/integration_broker/doctype/integration_service/integration_service.py
+++ b/frappe/integration_broker/doctype/integration_service/integration_service.py
@@ -56,6 +56,7 @@ class IntegrationService(Document):
return res.json()
except Exception, exc:
+ frappe.log_error()
raise exc
def put_request(url, auth=None, data=None):
diff --git a/frappe/templates/generators/web_form.html b/frappe/templates/generators/web_form.html
index 498f7ee5a6..f776248c76 100644
--- a/frappe/templates/generators/web_form.html
+++ b/frappe/templates/generators/web_form.html
@@ -276,14 +276,14 @@
{% endfor %}
- {% if last_page and accept_payment and payment_url %}
+ {% if last_page and accept_payment %}
{% if not doc.paid %}
{% if payment_button_help %}
{{ payment_button_help }}
{% endif %}
-
+
{{ payment_button_label }}
{% else %}
{{ _("Payment Complete") }}
@@ -418,11 +418,7 @@ frappe.ready(function() {
// allow payment only if
$('.btn-payment').on('click', function() {
- var data = get_data();
- if(frappe.mandatory_missing.length) {
- show_mandatory_missing();
- return false;
- }
+ save(true);
});
// change attach
@@ -594,7 +590,7 @@ frappe.ready(function() {
return out;
}
- function save() {
+ function save(for_payment) {
if(window.saving)
return;
window.saving = true;
@@ -602,7 +598,8 @@ frappe.ready(function() {
if(frappe.file_reading) {
window.saving = false;
- frappe.msgprint("Reading file, please retry.");
+ frappe.msgprint(__("Uploading files please wait for a few seconds."));
+ throw 'reading files';
return;
}
@@ -610,6 +607,7 @@ frappe.ready(function() {
if(frappe.allow_incomplete && frappe.mandatory_missing.length) {
window.saving = false;
show_mandatory_missing();
+ throw 'mandatory missing';
return;
}
@@ -618,7 +616,8 @@ frappe.ready(function() {
method: "frappe.website.doctype.web_form.web_form.accept",
args: {
data: data,
- web_form: frappe.web_form_name
+ web_form: frappe.web_form_name,
+ for_payment: for_payment
},
freeze: true,
btn: $form.find("[type='submit']"),
@@ -636,6 +635,11 @@ frappe.ready(function() {
if(frappe.is_new) {
window.location.href = window.location.pathname + "?name=" + frappe.doc_name;
}
+ if(for_payment && data.message) {
+ window.location.href = data.message;
+ }
+ } else {
+ set_message(__('Not Saved'));
}
},
always: function() {
diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py
index db5c659dd9..73957b53ca 100644
--- a/frappe/website/doctype/web_form/web_form.py
+++ b/frappe/website/doctype/web_form/web_form.py
@@ -155,7 +155,6 @@ def get_context(context):
"
").replace("'", "\'")
self.add_custom_context_and_script(context)
- self.add_payment_gateway_url(context)
if not context.max_attachment_size:
context.max_attachment_size = get_max_file_size() / 1024 / 1024
@@ -195,27 +194,27 @@ def get_context(context):
if self.web_form_module and hasattr(self.web_form_module, 'get_list_context'):
self.web_form_module.get_list_context(context)
- def add_payment_gateway_url(self, context):
- if context.doc and self.accept_payment:
+ def get_payment_gateway_url(self, doc):
+ if self.accept_payment:
controller = get_integration_controller(self.payment_gateway)
- title = "Payment for {0} {1}".format(context.doc.doctype, context.doc.name)
+ title = "Payment for {0} {1}".format(doc.doctype, doc.name)
payment_details = {
"amount": self.amount,
"title": title,
"description": title,
- "reference_doctype": context.doc.doctype,
- "reference_docname": context.doc.name,
+ "reference_doctype": doc.doctype,
+ "reference_docname": doc.name,
"payer_email": frappe.session.user,
"payer_name": frappe.utils.get_fullname(frappe.session.user),
- "order_id": context.doc.name,
+ "order_id": doc.name,
"currency": self.currency,
"redirect_to": frappe.utils.get_url(self.route)
}
# Redirect the user to this url
- context.payment_url = controller.get_payment_url(**payment_details)
+ return controller.get_payment_url(**payment_details)
def add_custom_context_and_script(self, context):
'''Update context from module if standard and append script'''
@@ -303,9 +302,21 @@ def get_context(context):
else:
self.web_form_module = None
+ def validate_mandatory(self, doc):
+ '''Validate mandatory web form fields'''
+ missing = []
+ for f in self.web_form_fields:
+ if f.reqd and doc.get(f.fieldname) in (None, []):
+ missing.append(f)
+
+ if missing:
+ frappe.throw(_('Mandatory Information missing:') + '
'
+ + '
'.join([d.label for d in missing]))
+
@frappe.whitelist(allow_guest=True)
-def accept(web_form, data):
+def accept(web_form, data, for_payment=False):
+ '''Save the web form'''
data = frappe._dict(json.loads(data))
files = []
files_to_delete = []
@@ -342,6 +353,9 @@ def accept(web_form, data):
doc.set(fieldname, value)
+ if for_payment:
+ web_form.validate_mandatory(doc)
+
if doc.name:
if has_web_form_permission(doc.doctype, doc.name, "write"):
doc.save(ignore_permissions=True)
@@ -379,7 +393,12 @@ def accept(web_form, data):
if f:
remove_file_by_url(f, doc.doctype, doc.name)
- return doc.name
+ frappe.flags.web_form_doc = doc
+
+ if for_payment:
+ return web_form.get_payment_gateway_url(doc)
+ else:
+ return doc.name
@frappe.whitelist()
def delete(web_form, name):