Kaynağa Gözat

[enhance] receive payments in web form and other fixes (#2097)

version-14
Rushabh Mehta 8 yıl önce
committed by GitHub
ebeveyn
işleme
2a3eb0b9cd
10 değiştirilmiş dosya ile 932 ekleme ve 664 silme
  1. +3
    -3
      frappe/integration_broker/doctype/integration_service/integration_service.json
  2. +4
    -0
      frappe/integrations/paypal.py
  3. +7
    -4
      frappe/integrations/razorpay.py
  4. +2
    -2
      frappe/model/db_schema.py
  5. +5
    -2
      frappe/public/js/frappe/form/grid.js
  6. +4
    -1
      frappe/public/js/frappe/form/templates/grid_form.html
  7. +2
    -3
      frappe/public/js/integrations/razorpay.js
  8. +15
    -0
      frappe/templates/generators/web_form.html
  9. +865
    -649
      frappe/website/doctype/web_form/web_form.json
  10. +25
    -0
      frappe/website/doctype/web_form/web_form.py

+ 3
- 3
frappe/integration_broker/doctype/integration_service/integration_service.json Dosyayı Görüntüle

@@ -251,14 +251,14 @@
"bold": 0,
"collapsible": 1,
"columns": 0,
"fieldname": "schedular_event_details",
"fieldname": "background_events",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Schedular Event Details",
"label": "Background Events",
"length": 0,
"no_copy": 0,
"permlevel": 0,
@@ -308,7 +308,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-09-01 08:45:15.304959",
"modified": "2016-09-23 13:25:33.548752",
"modified_by": "Administrator",
"module": "Integration Broker",
"name": "Integration Service",


+ 4
- 0
frappe/integrations/paypal.py Dosyayı Görüntüle

@@ -226,6 +226,10 @@ def confirm_payment(token):
if data.get("reference_doctype") and data.get("reference_docname"):
redirect_to = frappe.get_doc(data.get("reference_doctype"), data.get("reference_docname")).run_method("on_payment_authorized", "Completed")

if not redirect_to:
if data.get('redirect_to'):
redirect_to = data.get('redirect_to')

redirect_to = redirect_to or get_url("/integrations/payment-success")

else:


+ 7
- 4
frappe/integrations/razorpay.py Dosyayı Görüntüle

@@ -11,7 +11,7 @@ Example:

from frappe.integration_broker.doctype.integration_service.integration_service import get_integration_controller

controller = get_integration_controller("Razorpay", setup=False)
controller = get_integration_controller("Razorpay")
controller().validate_transaction_currency(currency)

### 2. Redirect for payment
@@ -30,8 +30,6 @@ Example:
"currency": "INR"
}

from frappe.integration.razorpay import get_checkout_url

# Redirect the user to this url
url = controller().get_payment_url(**payment_details)

@@ -142,6 +140,7 @@ class Controller(IntegrationController):
"""

settings = self.get_settings()
data = json.loads(self.integration_request.data)

if self.integration_request.status != "Authorized":
resp = self.get_request("https://api.razorpay.com/v1/payments/{0}"
@@ -154,7 +153,11 @@ class Controller(IntegrationController):

if self.flags.status_changed_to == "Authorized":
if self.data.reference_doctype and self.data.reference_docname:
redirect_to = frappe.get_doc(self.data.reference_doctype, self.data.reference_docname).run_method("on_payment_authorized", self.flags.status_changed_to)
redirect_to = frappe.get_doc(self.data.reference_doctype,
self.data.reference_docname).run_method("on_payment_authorized", self.flags.status_changed_to)
if not redirect_to:
if data.get('redirect_to'):
redirect_to = data.get('redirect_to')

return {
"redirect_to": redirect_to or "payment-success",


+ 2
- 2
frappe/model/db_schema.py Dosyayı Görüntüle

@@ -103,8 +103,8 @@ class DbTable:

for col in columns:
if len(col.fieldname) >= 64:
frappe.throw(_("Fieldname is limited to 64 characters"))
frappe.throw(_("Fieldname is limited to 64 characters ({0})").format(frappe.bold(col.fieldname)))
if col.fieldtype in type_map and type_map[col.fieldtype][0]=="varchar":

# validate length range


+ 5
- 2
frappe/public/js/frappe/form/grid.js Dosyayı Görüntüle

@@ -595,8 +595,9 @@ frappe.ui.form.GridRow = Class.extend({
this.grid.refresh();
}
},
insert: function(show) {
insert: function(show, below) {
var idx = this.doc.idx;
if(below) idx ++;
this.toggle_view(false);
this.grid.add_new_row(idx, null, show);
},
@@ -1060,6 +1061,8 @@ frappe.ui.form.GridRowForm = Class.extend({
.click(function() { me.row.remove(); return false; })
this.wrapper.find(".grid-insert-row")
.click(function() { me.row.insert(true); return false; })
this.wrapper.find(".grid-insert-row-below")
.click(function() { me.row.insert(true, true); return false; })
this.wrapper.find(".grid-append-row")
.click(function() {
me.row.toggle_view(false);
@@ -1072,7 +1075,7 @@ frappe.ui.form.GridRowForm = Class.extend({
});
},
toggle_add_delete_button_display: function($parent) {
$parent.find(".grid-delete-row, .grid-insert-row, .grid-append-row")
$parent.find(".grid-header-toolbar .btn, .grid-footer-toolbar .btn")
.toggle(this.row.grid.is_editable());
},
refresh_field: function(fieldname) {


+ 4
- 1
frappe/public/js/frappe/form/templates/grid_form.html Dosyayı Görüntüle

@@ -1,5 +1,5 @@
<div class="grid-form-heading sortable-handle">
<div class="toolbar">
<div class="toolbar grid-header-toolbar">
<span class="panel-title">
{%= __("Editing Row") %} #<span class="grid-form-row-index"></span></span>
<button class="btn btn-default btn-xs pull-right" style="margin-left: 7px;">
@@ -8,6 +8,9 @@
<button class="btn btn-default btn-xs pull-right grid-insert-row"
style="margin-left: 7px;">
{%= __("Insert Above") %}</button>
<button class="btn btn-default btn-xs pull-right grid-insert-row-below hidden-xs"
style="margin-left: 7px;">
{%= __("Insert Below") %}</button>
<button class="btn btn-danger btn-xs pull-right grid-delete-row">
<i class="octicon octicon-trashcan"
style="padding-bottom: 2px; margin-top: 1px;"></i>


+ 2
- 3
frappe/public/js/integrations/razorpay.js Dosyayı Görüntüle

@@ -6,7 +6,7 @@ frappe.integration_service.razorpay = {
},
scheduler_job_helper: function(){
return {
"Execute on every few minits of interval": "Take backup of database and files to dropbox on daily basis"
"Every few minutes": "Check and capture new payments"
}
}
}
@@ -21,7 +21,6 @@ frappe.integration_service.Razorpay = Class.extend({
this.frm.add_custom_button(__("Show Log"), function(frm){
frappe.route_options = {"integration_request_service": "Razorpay"};
frappe.set_route("List", "Integration Request");
}).addClass("btn-primary")
});
}
})

+ 15
- 0
frappe/templates/generators/web_form.html Dosyayı Görüntüle

@@ -252,6 +252,20 @@
</div>
{% endfor %}
</div>
{% if accept_payment and payment_url %}
<div class="well payment-details">
{% if not doc.paid %}
{% if payment_button_help %}
<div class='text-muted' style='padding-bottom: 15px;'>
{{ payment_button_help }}</div>
{% endif %}
<a class="btn btn-primary" href="{{ payment_url }}">
{{ payment_button_label }}</a>
{% else %}
<div>{{ _("Payment Complete") }}</div>
{% endif %}
</div>
{% endif %}
</div>
{% endfor %}
<!-- page footer buttons -->
@@ -275,6 +289,7 @@
{% endfor %}

</form>

{% if allow_comments and not frappe.form_dict.new -%}
<div class="comments">
<br><br>


+ 865
- 649
frappe/website/doctype/web_form/web_form.json
Dosya farkı çok büyük olduğundan ihmal edildi
Dosyayı Görüntüle


+ 25
- 0
frappe/website/doctype/web_form/web_form.py Dosyayı Görüntüle

@@ -9,6 +9,7 @@ from frappe.utils import cstr
from frappe.utils.file_manager import save_file, remove_file_by_url
from frappe.website.utils import get_comment_list
from frappe.custom.doctype.customize_form.customize_form import docfield_properties
from frappe.integration_broker.doctype.integration_service.integration_service import get_integration_controller

class WebForm(WebsiteGenerator):
website = frappe._dict(
@@ -162,6 +163,30 @@ def get_context(context):
"<br>").replace("'", "\'")

self.add_custom_context_and_script(context)
self.add_payment_gateway_url(context)

def add_payment_gateway_url(self, context):

if context.doc and self.accept_payment:
controller = get_integration_controller(self.payment_gateway)

title = "Payment for {0} {1}".format(context.doc.doctype, context.doc.name)

payment_details = {
"amount": self.amount,
"title": title,
"description": title,
"reference_doctype": context.doc.doctype,
"reference_docname": context.doc.name,
"payer_email": frappe.session.user,
"payer_name": frappe.utils.get_fullname(frappe.session.user),
"order_id": context.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)

def add_custom_context_and_script(self, context):
'''Update context from module if standard and append script'''


Yükleniyor…
İptal
Kaydet