51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
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": 500, "Pro": 1000}
|
|
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 Enrollment")
|