diff --git a/lms/job/doctype/job_opportunity/job_opportunity.py b/lms/job/doctype/job_opportunity/job_opportunity.py index fbb648e6..643638ba 100644 --- a/lms/job/doctype/job_opportunity/job_opportunity.py +++ b/lms/job/doctype/job_opportunity/job_opportunity.py @@ -6,13 +6,14 @@ from frappe.model.document import Document from frappe.utils.user import get_system_managers from frappe import _ from frappe.utils import get_link_to_form +from lms.lms.utils import validate_image class JobOpportunity(Document): def validate(self): self.validate_urls() - self.validate_logo() + self.company_logo = validate_image(self.company_logo) def validate_urls(self): @@ -20,12 +21,6 @@ class JobOpportunity(Document): frappe.utils.validate_url(self.application_link, True) - def validate_logo(self): - if "/private" in self.company_logo: - frappe.db.set_value("File", {"file_url": self.company_logo}, "is_private", 0) - frappe.db.set_value("File", {"file_url": self.company_logo}, "file_url", self.company_logo.replace("/private", "")) - self.company_logo = self.company_logo.replace("/private", "") - @frappe.whitelist() def report(job, reason): system_managers = get_system_managers(only_name=True) diff --git a/lms/lms/doctype/lms_course/lms_course.py b/lms/lms/doctype/lms_course/lms_course.py index b3bd9987..4de53314 100644 --- a/lms/lms/doctype/lms_course/lms_course.py +++ b/lms/lms/doctype/lms_course/lms_course.py @@ -5,8 +5,8 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document import json -from ...utils import generate_slug -from frappe.utils import flt, cint +from ...utils import generate_slug, validate_image +from frappe.utils import cint from lms.lms.utils import get_chapters @@ -15,7 +15,7 @@ class LMSCourse(Document): def validate(self): self.validate_instructors() self.validate_status() - + self.image = validate_image(self.image) def validate_instructors(self): if self.is_new() and not self.instructors: diff --git a/lms/lms/utils.py b/lms/lms/utils.py index 3e1da754..a36f8438 100644 --- a/lms/lms/utils.py +++ b/lms/lms/utils.py @@ -460,3 +460,12 @@ def get_certificates(member=None): return frappe.get_all("LMS Certificate", { "member": member or frappe.session.user }, ["course", "member", "issue_date", "expiry_date", "name"]) + + +def validate_image(path): + if path and "/private" in path: + file = frappe.get_doc("File", {"file_url": path}) + file.is_private = 0 + file.save(ignore_permissions=True) + return file.file_url + return path diff --git a/lms/overrides/user.py b/lms/overrides/user.py index 820a4be5..7273077d 100644 --- a/lms/overrides/user.py +++ b/lms/overrides/user.py @@ -6,17 +6,22 @@ import random import re from frappe import _ from frappe.website.utils import is_signup_disabled +from lms.lms.utils import validate_image import requests -from frappe.geo.country_info import get_all from lms.widgets import Widgets + class CustomUser(User): + def validate(self): super(CustomUser, self).validate() self.validate_username_characters() self.validate_skills() self.validate_completion() + self.user_image = validate_image(self.user_image) + self.cover_image = validate_image(self.cover_image) + def validate_username_characters(self): if len(self.username): 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") diff --git a/lms/www/profiles/profile.html b/lms/www/profiles/profile.html index 1854cd86..9c083e14 100644 --- a/lms/www/profiles/profile.html +++ b/lms/www/profiles/profile.html @@ -97,7 +97,7 @@ {% set enrollment_suffix = _("Courses") if enrollment > 1 else _("Course") %}