import frappe 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.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) 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", "owner"], as_dict=1) course["topics"] = frappe.db.get_all("LMS Topic", filters={ "course": course["name"] }, fields=["name", "slug", "title", "preview"], order_by="creation" ) return course 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: batch.mentors = [] mentors = frappe.get_all("LMS Batch Membership", {"batch": batch.name, "member_type": "Mentor"}, ["member"]) for mentor in mentors: member = frappe.db.get_value("Community Member", mentor.member, ["full_name", "photo", "abbr"], as_dict=1) batch.mentors.append(member) return batches def get_discussions(batches): messages = [] memberships = get_membership(batches) if len(memberships): messages = get_messages(memberships[0].batch) return messages, memberships def get_membership(batches): memberships = [] member = frappe.db.get_value("Community Member", {"email": frappe.session.user}, "name") for batch in batches: membership = frappe.db.get_value("LMS Batch Membership", {"member": member, "batch": batch.name}, ["batch", "member", "member_type"], as_dict=1) if membership: memberships.append(membership) return memberships def get_instructor(owner): instructor = frappe._dict() try: instructor = frappe.get_doc("Community Member", {"email": owner}) except frappe.DoesNotExistError: instructor.full_name = owner instructor.abbr = ("").join([ s[0] for s in owner.split() ]) 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}, ["mentor"]) for mentor in mentors: 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): return frappe.get_all("LMS Batch", {"course": course}, ["name"]) def get_mentor_batches(memberships): mentor_batches = [] memberships_as_mentor = list(filter(lambda x: x.member_type == "Mentor", memberships)) for membership in memberships_as_mentor: batch = frappe.get_doc("LMS Batch", membership.batch) mentor_batches.append(batch) for batch in mentor_batches: if getdate(batch.start_date) < getdate(): batch.status = "active" batch.badge_class = "green_badge" else: batch.status = "scheduled" batch.badge_class = "yellow_badge" 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") for message in messages: message.message = frappe.utils.md_to_html(message.message) message.creation = frappe.utils.format_datetime(message.creation, "medium") message.author_name, member_email = frappe.db.get_value("Community Member", message.author, ["full_name","email"]) if member_email == frappe.session.user: message.author_name = "You" return messages @frappe.whitelist() def save_message(message, author, batch): doc = frappe.get_doc({ "doctype": "LMS Message", "author": author, "batch": batch, "message": message }) doc.save(ignore_permissions=True) return doc