Merge branch 'main' of https://github.com/frappe/lms
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
45
lms/subscription_utils.py
Normal file
45
lms/subscription_utils.py
Normal file
@@ -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")
|
||||
@@ -97,7 +97,7 @@
|
||||
{% set enrollment_suffix = _("Courses") if enrollment > 1 else _("Course") %}
|
||||
|
||||
<div class="container">
|
||||
<div class="profile-banner" style="background-image: url({{ cover_image }})">
|
||||
<div class="profile-banner" style="background-image: url({{ cover_image | urlencode }})">
|
||||
<div class="profile-avatar">
|
||||
{{ widgets.Avatar(member=member, avatar_class="avatar-square") }}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user