diff --git a/lms/subscription_utils.py b/lms/subscription_utils.py new file mode 100644 index 00000000..b4d5e766 --- /dev/null +++ b/lms/subscription_utils.py @@ -0,0 +1,45 @@ +import frappe + + +@frappe.whitelist(allow_guest=True) +def get_add_on_details(plan: str) -> dict[str, int]: + """ + Returns the number of courses and course members to be billed under add-ons for SAAS subscription + """ + + return { + "courses": get_add_on_courses(plan), + "members": get_add_on_members(plan) + } + + +def get_published_courses() -> int: + return frappe.db.count("LMS Course", {"published": 1}) + + +def get_add_on_courses(plan: str) -> int: + COURSE_LIMITS = {"Lite": 5, "Pro": 20} + add_on_courses = 0 + courses_included_in_plans = COURSE_LIMITS.get(plan) + + if courses_included_in_plans: + published_courses = get_published_courses() + add_on_courses = published_courses - courses_included_in_plans if published_courses > courses_included_in_plans else 0 + + return add_on_courses + + +def get_add_on_members(plan: str) -> int: + MEMBER_LIMITS = {"Lite": 100, "Pro": 500} + add_on_members = 0 + members_included_in_plans = MEMBER_LIMITS.get(plan) + + if members_included_in_plans: + active_members = get_members() + add_on_members = active_members - members_included_in_plans if active_members > members_included_in_plans else 0 + + return add_on_members + + +def get_members() -> int: + return frappe.db.count("LMS Batch Membership")