Files
lms/lms/www/billing/billing.py
2023-09-12 12:13:41 +05:30

78 lines
2.1 KiB
Python

import frappe
from frappe import _
from lms.lms.utils import check_multicurrency, apply_gst
def get_context(context):
module = frappe.form_dict.module
docname = frappe.form_dict.modulename
doctype = "LMS Course" if module == "course" else "LMS Batch"
context.module = module
context.docname = docname
context.doctype = doctype
validate_access(doctype, docname, module)
get_billing_details(context)
context.amount, context.currency = check_multicurrency(
context.amount, context.currency
)
if context.currency == "INR":
context.amount, context.gst_applied = apply_gst(context.amount, None)
def validate_access(doctype, docname, module):
if frappe.session.user == "Guest":
raise frappe.PermissionError(_("You are not allowed to access this page."))
if module not in ["course", "batch"]:
raise ValueError(_("Module is incorrect."))
if not frappe.db.exists(doctype, docname):
raise ValueError(_("Module Name is incorrect or does not exist."))
if doctype == "LMS Course":
membership = frappe.db.exists(
"LMS Enrollment", {"member": frappe.session.user, "course": docname}
)
if membership:
raise frappe.PermissionError(_("You are already enrolled for this course"))
else:
membership = frappe.db.exists(
"Batch Student", {"student": frappe.session.user, "parent": docname}
)
if membership:
raise frappe.PermissionError(_("You are already enrolled for this batch."))
def get_billing_details(context):
if context.doctype == "LMS Course":
details = frappe.db.get_value(
"LMS Course",
context.docname,
["title", "name", "paid_course", "course_price as amount", "currency"],
as_dict=True,
)
if not details.paid_course:
raise frappe.PermissionError(_("This course is free."))
else:
details = frappe.db.get_value(
"LMS Batch",
context.docname,
["title", "name", "paid_batch", "amount", "currency"],
as_dict=True,
)
if not details.paid_batch:
raise frappe.PermissionError(
_("To join this batch, please contact the Administrator.")
)
context.title = details.title
context.amount = details.amount
context.currency = details.currency