From b9fe05c27f5effbff1793ff705241db471c1a089 Mon Sep 17 00:00:00 2001 From: Jannat Patel Date: Wed, 21 Sep 2022 17:37:56 +0530 Subject: [PATCH] feat: subscription add ons --- lms/subscription_utils.py | 45 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 lms/subscription_utils.py diff --git a/lms/subscription_utils.py b/lms/subscription_utils.py new file mode 100644 index 00000000..5da134e7 --- /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, "Essential": 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, "Essential": 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")