refactor: added enrollment api
This commit is contained in:
parent
f22793f91b
commit
dfdb92f4b1
@ -77,23 +77,18 @@ def get_portal_programs():
|
|||||||
is_published and (student_is_enrolled or student_can_self_enroll)
|
is_published and (student_is_enrolled or student_can_self_enroll)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
list of dict: List of all programs and to be displayed on the portal along with enrollment status
|
list of objects: List of all programs and to be displayed on the portal along with enrollment status
|
||||||
"""
|
"""
|
||||||
published_programs = frappe.get_all("Program", filters={"is_published": True})
|
published_programs = frappe.get_all("Program", filters={"is_published": True})
|
||||||
if not published_programs:
|
if not published_programs:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
program_list = [frappe.get_doc("Program", program) for program in published_programs]
|
program_list = [frappe.get_doc("Program", program) for program in published_programs]
|
||||||
portal_programs = []
|
portal_programs = [program for program in program_list if allowed_program_access(program.name) or program.allow_self_enroll]
|
||||||
|
|
||||||
for program in program_list:
|
|
||||||
enrollment_status = get_enrollment_status(program.name)
|
|
||||||
if enrollment_status or program.allow_self_enroll:
|
|
||||||
portal_programs.append({'program': program, 'is_enrolled': enrollment_status})
|
|
||||||
|
|
||||||
return portal_programs
|
return portal_programs
|
||||||
|
|
||||||
def get_enrollment_status(program, student=None):
|
def allowed_program_access(program, student=None):
|
||||||
"""Returns enrollment status for current student
|
"""Returns enrollment status for current student
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@ -103,6 +98,8 @@ def get_enrollment_status(program, student=None):
|
|||||||
Returns:
|
Returns:
|
||||||
bool: Is current user enrolled or not
|
bool: Is current user enrolled or not
|
||||||
"""
|
"""
|
||||||
|
if has_super_access():
|
||||||
|
return True
|
||||||
if not student:
|
if not student:
|
||||||
student = get_current_student()
|
student = get_current_student()
|
||||||
if student and get_enrollment('program', program, student.name):
|
if student and get_enrollment('program', program, student.name):
|
||||||
@ -122,25 +119,66 @@ def get_enrollment(master, document, student):
|
|||||||
string: Enrollment Name if exists else returns empty string
|
string: Enrollment Name if exists else returns empty string
|
||||||
"""
|
"""
|
||||||
if master == 'program':
|
if master == 'program':
|
||||||
enrollments = frappe.get_all("Program Enrollment", filters={'student':student, 'program': document})
|
enrollments = frappe.get_all("Program Enrollment", filters={'student':student, 'program': document, 'docstatus': 1})
|
||||||
if master == 'course':
|
if master == 'course':
|
||||||
enrollments = frappe.get_all("Course Enrollment", filters={'student':student, 'course': document})
|
enrollments = frappe.get_all("Course Enrollment", filters={'student':student, 'course': document})
|
||||||
|
|
||||||
if enrollments:
|
if enrollments:
|
||||||
return enrollment[0].name
|
return enrollments[0].name
|
||||||
else:
|
else:
|
||||||
return ''
|
return None
|
||||||
|
|
||||||
# def check_super_access():
|
@frappe.whitelist()
|
||||||
# current_user = frappe.get_doc('User', frappe.session.user)
|
def enroll_in_program(program_name, student=None):
|
||||||
# roles = set([role.role for role in current_user.roles])
|
"""Enroll student in program
|
||||||
# return bool(roles & {'Administrator', 'Instructor', 'Education Manager', 'System Manager', 'Academic User'})
|
|
||||||
|
Args:
|
||||||
|
program_name (string): Name of the program to be enrolled into
|
||||||
|
student (string, optional): name of student who has to be enrolled, if not
|
||||||
|
provided, a student will be created from the current user
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
string: name of the program enrollment document
|
||||||
|
"""
|
||||||
|
if has_super_access():
|
||||||
|
return
|
||||||
|
|
||||||
|
if not student == None:
|
||||||
|
student = frappe.get_doc("Student", student)
|
||||||
|
else:
|
||||||
|
# Check if self enrollment in allowed
|
||||||
|
program = frappe.get_doc('Program', program_name)
|
||||||
|
if not program.allow_self_enroll:
|
||||||
|
return frappe.throw("You are not allowed to enroll for this course")
|
||||||
|
|
||||||
|
student = get_current_student()
|
||||||
|
if not student:
|
||||||
|
student = create_student_from_current_user()
|
||||||
|
|
||||||
|
# Check if student is already enrolled in program
|
||||||
|
enrollment = get_enrollment('program', program_name, student.name)
|
||||||
|
if enrollment:
|
||||||
|
return enrollment
|
||||||
|
|
||||||
|
# Check if self enrollment in allowed
|
||||||
|
program = frappe.get_doc('Program', program_name)
|
||||||
|
if not program.allow_self_enroll:
|
||||||
|
return frappe.throw("You are not allowed to enroll for this course")
|
||||||
|
|
||||||
|
# Enroll in program
|
||||||
|
program_enrollment = student.enroll_in_program(program_name)
|
||||||
|
return program_enrollment.name
|
||||||
|
|
||||||
|
def has_super_access():
|
||||||
|
current_user = frappe.get_doc('User', frappe.session.user)
|
||||||
|
roles = set([role.role for role in current_user.roles])
|
||||||
|
return bool(roles & {'Administrator', 'Instructor', 'Education Manager', 'System Manager', 'Academic User'})
|
||||||
|
|
||||||
# def get_program_enrollment(program_name):
|
# def get_program_enrollment(program_name):
|
||||||
# """
|
# """
|
||||||
# Function to get program enrollments for a particular student for a program
|
# Function to get program enrollments for a particular student for a program
|
||||||
# """
|
# """
|
||||||
# student = get_current_student()
|
# student get_current_student()
|
||||||
# if not student:
|
# if not student:
|
||||||
# return None
|
# return None
|
||||||
# else:
|
# else:
|
||||||
@ -169,6 +207,7 @@ def get_enrollment(master, document, student):
|
|||||||
|
|
||||||
def create_student_from_current_user():
|
def create_student_from_current_user():
|
||||||
user = frappe.get_doc("User", frappe.session.user)
|
user = frappe.get_doc("User", frappe.session.user)
|
||||||
|
|
||||||
student = frappe.get_doc({
|
student = frappe.get_doc({
|
||||||
"doctype": "Student",
|
"doctype": "Student",
|
||||||
"first_name": user.first_name,
|
"first_name": user.first_name,
|
||||||
@ -176,6 +215,7 @@ def create_student_from_current_user():
|
|||||||
"student_email_id": user.email,
|
"student_email_id": user.email,
|
||||||
"user": frappe.session.user
|
"user": frappe.session.user
|
||||||
})
|
})
|
||||||
|
|
||||||
student.save(ignore_permissions=True)
|
student.save(ignore_permissions=True)
|
||||||
return student
|
return student
|
||||||
|
|
||||||
|
|||||||
@ -1,20 +1,50 @@
|
|||||||
{% macro hero(title, description, is_enrolled) %}
|
{% macro hero(title, description, has_access) %}
|
||||||
<div class='container pb-5'>
|
<div class='container pb-5'>
|
||||||
<h1>{{ title }} </h1>
|
<h1>{{ title }} </h1>
|
||||||
<p class='lead' style="max-width: 100%;">{{ description }}</p>
|
<p class='lead' style="max-width: 100%;">{{ description }}</p>
|
||||||
<p class="mt-4">
|
<p class="mt-4">
|
||||||
{% if frappe.session.user == 'Guest' %}
|
{% if frappe.session.user == 'Guest' %}
|
||||||
<a id="signup" class="btn btn-primary btn-lg" href="/login#signup">Sign Up</a>
|
<a id="signup" class="btn btn-primary btn-lg" href="/login#signup">Sign Up</a>
|
||||||
{% elif not is_enrolled %}
|
{% elif not has_access %}
|
||||||
<button id="enroll" class="btn btn-primary btn-lg" onclick="enroll()">Enroll</button>
|
<button id="enroll" class="btn btn-primary btn-lg" onclick="enroll()" disabled>Enroll</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% block script %}
|
{% block script %}
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
frappe.ready(() => {
|
||||||
|
btn = document.getElementById('enroll');
|
||||||
|
if (btn) btn.disabled = false;
|
||||||
|
})
|
||||||
|
|
||||||
function enroll() {
|
function enroll() {
|
||||||
console.log(frappe.utils.get_query_params())
|
let params = frappe.utils.get_query_params()
|
||||||
|
console.log(params.program)
|
||||||
|
let btn = document.getElementById('enroll');
|
||||||
|
btn.disbaled = true;
|
||||||
|
btn.innerText = 'Enrolling...'
|
||||||
|
|
||||||
|
let opts = {
|
||||||
|
method: 'erpnext.education.utils.enroll_in_program',
|
||||||
|
args: {
|
||||||
|
program_name: params.program
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
frappe.call(opts).then(res => {
|
||||||
|
console.log(res)
|
||||||
|
let success_dialog = new frappe.ui.Dialog({
|
||||||
|
title: __('Success'),
|
||||||
|
secondary_action: function() {
|
||||||
|
window.location.reload()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
success_dialog.set_message('You have successfully enrolled for the program ');
|
||||||
|
success_dialog.$message.show()
|
||||||
|
success_dialog.show();
|
||||||
|
btn.disbaled = false;
|
||||||
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user