This commit is contained in:
Jannat Patel
2022-09-23 07:12:16 +05:30
6 changed files with 66 additions and 12 deletions

View File

@@ -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)

View File

@@ -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:

View File

@@ -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

View File

@@ -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
View 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")

View File

@@ -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>