Skip to content

Commit

Permalink
fix: payment gateway fields
Browse files Browse the repository at this point in the history
  • Loading branch information
pateljannat committed Oct 1, 2024
1 parent 8a17dca commit be870e8
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 111 deletions.
26 changes: 24 additions & 2 deletions lms/lms/doctype/lms_settings/lms_settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,28 @@
// For license information, please see license.txt

frappe.ui.form.on("LMS Settings", {
// refresh: function(frm) {
// }
setup: function (frm) {
frappe.call({
method: "lms.lms.doctype.lms_settings.lms_settings.check_payments_app",
callback: (data) => {
if (!data.message) {
frm.set_df_property("payment_section", "hidden", 1);
frm.trigger("set_no_payments_app_html");
} else {
frm.set_df_property("no_payments_app", "hidden", 1);
}
},
});
},

set_no_payments_app_html(frm) {
frm.get_field("payments_app_is_not_installed").html(`
<div class="alert alert-warning">
Please install the
<a target="_blank" style="color: var(--alert-text-warning); background: var(--alert-bg-warning);" href="https://frappecloud.com/marketplace/apps/payments">
Payments app
</a>
to enable payment gateway.
`);
},
});
18 changes: 14 additions & 4 deletions lms/lms/doctype/lms_settings/lms_settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@
"apply_gst",
"show_usd_equivalent",
"apply_rounding",
"no_payments_app",
"payments_app_is_not_installed",
"email_templates_tab",
"certification_template",
"batch_confirmation_template",
Expand Down Expand Up @@ -323,15 +325,23 @@
},
{
"fieldname": "payment_gateway",
"fieldtype": "Link",
"label": "Payment Gateway",
"options": "Payment Gateway"
"fieldtype": "Data",
"label": "Payment Gateway"
},
{
"fieldname": "no_payments_app",
"fieldtype": "Section Break"
},
{
"fieldname": "payments_app_is_not_installed",
"fieldtype": "HTML",
"label": "Payments app is not installed"
}
],
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
"modified": "2024-09-30 18:30:28.689084",
"modified": "2024-10-01 12:15:49.800242",
"modified_by": "Administrator",
"module": "LMS",
"name": "LMS Settings",
Expand Down
30 changes: 30 additions & 0 deletions lms/lms/doctype/lms_settings/lms_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,33 @@ def validate_google_settings(self):
frappe.bold("Course Evaluator"),
)
)


@frappe.whitelist()
def check_payments_app():
installed_apps = frappe.get_installed_apps()
print("payments" not in installed_apps)
if "payments" not in installed_apps:
return False
else:
filters = {
"doctype_or_field": "DocField",
"doc_type": "LMS Settings",
"field_name": "payment_gateway",
}
if frappe.db.exists("Property Setter", filters):
return True

link_property = frappe.new_doc("Property Setter")
link_property.update(filters)
link_property.property = "fieldtype"
link_property.value = "Link"
link_property.save()

options_property = frappe.new_doc("Property Setter")
options_property.update(filters)
options_property.property = "options"
options_property.value = "Payment Gateway"
options_property.save()

return True
105 changes: 0 additions & 105 deletions lms/lms/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -908,39 +908,6 @@ def get_upcoming_evals(student, courses):
return upcoming_evals


@frappe.whitelist()
def get_payment_options(doctype, docname, phone, country):
if not frappe.db.exists(doctype, docname):
frappe.throw(_("Invalid document provided."))

validate_phone_number(phone, True)
details = get_details(doctype, docname)

details.amount, details.currency = check_multicurrency(
details.amount, details.currency, country, details.amount_usd
)
if details.currency == "INR":
details.amount, details.gst_applied = apply_gst(details.amount, country)

client = get_client()
order = create_order(client, details.amount, details.currency)

options = {
"key_id": frappe.db.get_single_value("LMS Settings", "razorpay_key"),
"name": frappe.db.get_single_value("Website Settings", "app_name"),
"description": _("Payment for {0} course").format(details["title"]),
"order_id": order["id"],
"amount": cint(order["amount"]) * 100,
"currency": order["currency"],
"prefill": {
"name": frappe.db.get_value("User", frappe.session.user, "full_name"),
"email": frappe.session.user,
"contact": phone,
},
}
return options


def check_multicurrency(amount, currency, country=None, amount_usd=None):
settings = frappe.get_single("LMS Settings")
show_usd_equivalent = settings.show_usd_equivalent
Expand Down Expand Up @@ -998,78 +965,6 @@ def apply_gst(amount, country=None):
return amount, gst_applied


def get_details(doctype, docname):
if doctype == "LMS Course":
details = frappe.db.get_value(
"LMS Course",
docname,
["name", "title", "paid_course", "currency", "course_price as amount", "amount_usd"],
as_dict=True,
)
if not details.paid_course:
frappe.throw(_("This course is free."))
else:
details = frappe.db.get_value(
"LMS Batch",
docname,
["name", "title", "paid_batch", "currency", "amount", "amount_usd"],
as_dict=True,
)
if not details.paid_batch:
frappe.throw(_("To join this batch, please contact the Administrator."))

return details


def get_client():
settings = frappe.get_single("LMS Settings")
razorpay_key = settings.razorpay_key
razorpay_secret = settings.get_password("razorpay_secret", raise_exception=True)

if not razorpay_key and not razorpay_secret:
frappe.throw(
_(
"There is a problem with the payment gateway. Please contact the Administrator to proceed."
)
)

return razorpay.Client(auth=(razorpay_key, razorpay_secret))


def create_order(client, amount, currency):
try:
return client.order.create(
{
"amount": cint(amount) * 100,
"currency": currency,
}
)
except Exception as e:
frappe.throw(
_(
"Error during payment: {0} Please contact the Administrator. Amount {1} Currency {2} Formatted {3}"
).format(e, amount, currency, cint(amount))
)


def get_payment_details(doctype, docname, address):
amount_field = "course_price" if doctype == "LMS Course" else "amount"
amount = frappe.db.get_value(doctype, docname, amount_field)
currency = frappe.db.get_value(doctype, docname, "currency")
amount_usd = frappe.db.get_value(doctype, docname, "amount_usd")
amount_with_gst = 0

amount, currency = check_multicurrency(amount, currency, None, amount_usd)
if currency == "INR" and address.country == "India":
amount_with_gst, gst_applied = apply_gst(amount, address.country)

return {
"amount": amount,
"currency": currency,
"amount_with_gst": amount_with_gst,
}


def create_membership(course, payment):
membership = frappe.new_doc("LMS Enrollment")
membership.update(
Expand Down

0 comments on commit be870e8

Please sign in to comment.