diff --git a/community/lms/doctype/lms_batch/lms_batch.json b/community/lms/doctype/lms_batch/lms_batch.json index d03edaaa..aef7e1f0 100644 --- a/community/lms/doctype/lms_batch/lms_batch.json +++ b/community/lms/doctype/lms_batch/lms_batch.json @@ -99,10 +99,9 @@ "label": "Start Time" }, { - "description": "Enter Days of the week comma separated.", "fieldname": "sessions_on", "fieldtype": "Data", - "label": "Sessions On" + "label": "Sessions On Days" }, { "fieldname": "end_time", @@ -112,7 +111,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2021-04-15 10:52:24.358628", + "modified": "2021-04-21 10:21:23.183399", "modified_by": "Administrator", "module": "LMS", "name": "LMS Batch", diff --git a/community/lms/doctype/lms_batch_membership/lms_batch_membership.py b/community/lms/doctype/lms_batch_membership/lms_batch_membership.py index 913b206e..87ae7962 100644 --- a/community/lms/doctype/lms_batch_membership/lms_batch_membership.py +++ b/community/lms/doctype/lms_batch_membership/lms_batch_membership.py @@ -29,7 +29,7 @@ class LMSBatchMembership(Document): frappe.throw(_("{0} is already a {1} of {2} course through {3} batch").format(member_name, membership.member_type, course, membership.batch)) @frappe.whitelist() -def create_member(batch, member=None, member_type="Student", role="Member"): +def create_membership(batch, member=None, member_type="Student", role="Member"): if not member: member = frappe.db.get_value("Community Member", {"email": frappe.session.user}, "name") frappe.get_doc({ diff --git a/community/lms/doctype/lms_course_mentor_mapping/lms_course_mentor_mapping.py b/community/lms/doctype/lms_course_mentor_mapping/lms_course_mentor_mapping.py index 33ff05b0..c5cc58e7 100644 --- a/community/lms/doctype/lms_course_mentor_mapping/lms_course_mentor_mapping.py +++ b/community/lms/doctype/lms_course_mentor_mapping/lms_course_mentor_mapping.py @@ -3,8 +3,16 @@ # For license information, please see license.txt from __future__ import unicode_literals -# import frappe +import frappe from frappe.model.document import Document +from frappe import _ class LMSCourseMentorMapping(Document): - pass + def validate(self): + duplicate_mapping = frappe.get_all("LMS Course Mentor Mapping", + filters = { + "course": self.course, + "mentor": self.mentor + }) + if len(duplicate_mapping): + frappe.throw(_("{0} is already a mentor for course {1}").format(self.mentor_name, self.course)) diff --git a/community/lms/web_form/add_a_new_batch/add_a_new_batch.js b/community/lms/web_form/add_a_new_batch/add_a_new_batch.js index 699703c5..808b6bc0 100644 --- a/community/lms/web_form/add_a_new_batch/add_a_new_batch.js +++ b/community/lms/web_form/add_a_new_batch/add_a_new_batch.js @@ -1,3 +1,17 @@ frappe.ready(function() { - // bind events here + frappe.web_form.after_save = () => { + let data = frappe.web_form.get_values(); + frappe.call({ + "method": "community.lms.doctype.lms_batch_membership.lms_batch_membership.create_membership", + "args": { + "batch": data.title, + "member_type": "Mentor" + }, + "callback": (data) => { + if (data.message == "OK") { + window.location.href = "/courses" + } + } + }) + } }) \ No newline at end of file diff --git a/community/lms/web_form/add_a_new_batch/add_a_new_batch.json b/community/lms/web_form/add_a_new_batch/add_a_new_batch.json index b2db5878..8f027787 100644 --- a/community/lms/web_form/add_a_new_batch/add_a_new_batch.json +++ b/community/lms/web_form/add_a_new_batch/add_a_new_batch.json @@ -18,7 +18,7 @@ "is_standard": 1, "login_required": 1, "max_attachment_size": 0, - "modified": "2021-04-20 11:51:35.815876", + "modified": "2021-04-21 10:22:38.461088", "modified_by": "Administrator", "module": "LMS", "name": "add-a-new-batch", @@ -64,7 +64,7 @@ "fieldname": "start_time", "fieldtype": "Data", "hidden": 0, - "label": "Start Time", + "label": "Start Time (HH:MM:SS)", "max_length": 0, "max_value": 0, "read_only": 0, @@ -96,11 +96,11 @@ }, { "allow_read_on_all_link_options": 0, - "description": "Enter Days of the week comma separated.", + "description": "", "fieldname": "sessions_on", "fieldtype": "Data", "hidden": 0, - "label": "Sessions On", + "label": "Sessions On Days", "max_length": 0, "max_value": 0, "options": "", @@ -113,7 +113,7 @@ "fieldname": "end_time", "fieldtype": "Data", "hidden": 0, - "label": "End Time", + "label": "End Time (HH:MM:SS)", "max_length": 0, "max_value": 0, "read_only": 0, diff --git a/community/www/courses/course.html b/community/www/courses/course.html index 91a874a1..e08396fc 100644 --- a/community/www/courses/course.html +++ b/community/www/courses/course.html @@ -98,12 +98,14 @@

{{ course.title }}

{{course.short_introduction}} + {% if course.video_link %}
+ {% endif %} {% if is_mentor %}

Your Batches

@@ -138,18 +140,18 @@ {% endif %}
- +
{% endfor %} - Add a new batch + Add a new batch {% else %} -
+

You are a mentor for this course.

- + Create your first batch
{% endif %} @@ -182,7 +184,7 @@ {% endif %}
-
@@ -227,6 +229,7 @@ {% endfor %} + {% if not is_mentor %}
Interested to mentor this course? Apply now! @@ -236,6 +239,7 @@ any more interested to mentor this course, you can Cancel your Application.
+ {% endif %} {% if course.topics %}

Topics

diff --git a/community/www/courses/course.js b/community/www/courses/course.js index 3ccfefb3..95f7e27f 100644 --- a/community/www/courses/course.js +++ b/community/www/courses/course.js @@ -92,7 +92,7 @@ frappe.ready(() => { } batch = decodeURIComponent($(e.currentTarget).attr("data-batch")) frappe.call({ - "method": "community.lms.doctype.lms_batch_membership.lms_batch_membership.create_member", + "method": "community.lms.doctype.lms_batch_membership.lms_batch_membership.create_membership", "args": { "batch": batch }, diff --git a/community/www/courses/course.py b/community/www/courses/course.py index fa3b4271..d911bbe9 100644 --- a/community/www/courses/course.py +++ b/community/www/courses/course.py @@ -3,36 +3,27 @@ from frappe.utils import nowdate, getdate def get_context(context): context.no_cache = 1 + try: course_id = frappe.form_dict["course"] except KeyError: frappe.local.flags.redirect_location = "/courses" raise frappe.Redirect + context.course = get_course(course_id) context.batches = get_course_batches(context.course.name) - context.upcoming_batches = get_upcoming_batches(context.course.name, context.batches) - #context.course_enrolled = has_enrolled(course_id) - context.discussions, context.memberships = get_discussions(context.batches) - context.instructor = get_instructor(course_id) + context.memberships = get_membership(context.batches) + context.upcoming_batches = [] if len(context.memberships) else get_upcoming_batches(context.course.name) + context.instructor = get_instructor(context.course.owner) context.mentors = get_mentors(context.course.name) - if context.memberships: - context.member_type = context.memberships[0].member_type - if context.member_type != "Student": - context.batches = [membership.batch for membership in context.memberships] - if context.member_type == "Mentor": - context.is_mentor = True - context.mentor_batches = get_mentor_batches(context.memberships) - context.current_batch = context.memberships[0].batch - context.author = context.memberships[0].member - else: - context.membership_type = None - context.batches = [] - context.current_batch = None - context.author = None + context.is_mentor = is_mentor(context.course.name) + + if context.is_mentor: + context.mentor_batches = get_mentor_batches(context.memberships) # Your Bacthes for mentor def get_course(slug): course = frappe.db.get_value("LMS Course", {"slug": slug}, - ["name", "slug", "title", "description", "short_introduction", "video_link"], as_dict=1) + ["name", "slug", "title", "description", "short_introduction", "video_link", "owner"], as_dict=1) course["topics"] = frappe.db.get_all("LMS Topic", filters={ @@ -43,13 +34,10 @@ def get_course(slug): ) return course -def get_upcoming_batches(course, all_batches): - memberships = get_membership(all_batches) - if not len(memberships): - batches = frappe.get_all("LMS Batch", {"course": course, "start_date": [">", nowdate()]}, ["start_date", "start_time", "end_time", "sessions_on", "name"]) - batches = get_batch_mentors(batches) - return batches - return [] +def get_upcoming_batches(course): + batches = frappe.get_all("LMS Batch", {"course": course, "start_date": [">", nowdate()]}, ["start_date", "start_time", "end_time", "sessions_on", "name"]) + batches = get_batch_mentors(batches) + return batches def get_batch_mentors(batches): for batch in batches: @@ -76,21 +64,18 @@ def get_membership(batches): memberships.append(membership) return memberships -def get_instructor(slug): - owner = frappe.db.get_value("LMS Course", {"slug":slug}, ["owner"]) +def get_instructor(owner): instructor = frappe.get_doc("Community Member", {"email": owner}) instructor.course_count = len(frappe.get_all("LMS Course", {"owner": owner})) return instructor def get_mentors(course): course_mentors = [] - mentors = frappe.get_all("LMS Course Mentor Mapping", {"course": course}, ["member"]) + mentors = frappe.get_all("LMS Course Mentor Mapping", {"course": course}, ["mentor"]) for mentor in mentors: - member = frappe.get_doc("Community Member", mentor.member) - member_in_list = list(filter(lambda x: x.name == member.name, course_mentors)) - if not member_in_list: - member.batch_count = len(frappe.get_all("LMS Batch Membership", {"member": member.name, "member_type": "Mentor"})) - course_mentors.append(member) + member = frappe.get_doc("Community Member", mentor.mentor) + member.batch_count = len(frappe.get_all("LMS Batch Membership", {"member": member.name, "member_type": "Mentor"})) + course_mentors.append(member) return course_mentors def get_course_batches(course): @@ -112,6 +97,15 @@ def get_mentor_batches(memberships): mentor_batches = get_batch_mentors(mentor_batches) return mentor_batches +def is_mentor(course): + try: + member = frappe.db.get_value("Community Member", {"email": frappe.session.user}, ["name"]) + except frappe.DoesNotExistError: + return False + mapping = frappe.get_all("LMS Course Mentor Mapping", {"course": course, "mentor": member}) + if len(mapping): + return True + @frappe.whitelist() def get_messages(batch): messages = frappe.get_all("LMS Message", {"batch": batch}, ["*"], order_by="creation desc") @@ -123,18 +117,6 @@ def get_messages(batch): message.author_name = "You" return messages -@frappe.whitelist() -def has_enrolled(course): - return frappe.db.get_value("LMS Course Enrollment", {"course": course, "owner": frappe.session.user}) - -@frappe.whitelist() -def enroll(course): - return frappe.get_doc({ - "doctype": "LMS Course Enrollment", - "course": course, - "user": frappe.session.user - }).save() - @frappe.whitelist() def save_message(message, author, batch): doc = frappe.get_doc({