fix: class pages

This commit is contained in:
Jannat Patel
2023-06-02 13:53:09 +05:30
parent 85903d5385
commit a101e7b089
14 changed files with 37 additions and 322 deletions

View File

@@ -1,3 +0,0 @@
{
"python.formatting.provider": "black"
}

View File

@@ -179,10 +179,6 @@ website_route_rules = [
"from_route": "/classes/<classname>/students/<username>",
"to_route": "/classes/progress",
},
{
"from_route": "/assignment-grading/<assignment>",
"to_route": "assignment_grading/assignment_grading",
},
{"from_route": "/assignments/<assignment>", "to_route": "assignments/assignment"},
{
"from_route": "/assignment-submission/<assignment>/<submission>",

View File

@@ -46,8 +46,7 @@ def upload_assignment(
"member": frappe.session.user,
}
)
print(doc.assignment)
print(comments)
doc.update(
{
"assignment_attachment": assignment_attachment,

View File

@@ -80,7 +80,6 @@ def switch_batch(course_name, email, batch_name):
old_batch = frappe.get_doc("LMS Batch", membership.batch)
print("updating membership", membership.name)
membership.batch = batch_name
membership.save()

View File

@@ -115,26 +115,11 @@ body {
}
.image-preview {
width: 100%;
height: 100%;
width: 280px;
height: 178px;
border-radius: var(--border-radius-md);
}
.file-source-preview {
display: flex;
align-items: center;
justify-content: center;
position: relative;
width: 100%;
height: 250px;
border: 1px solid var(--gray-300);
border-radius: var(--border-radius-md);
}
.file-source-preview .btn-close {
position: absolute;
top: 5%;
right: 5%;
margin-top: 1rem;
}
textarea.field-input {

View File

@@ -1,80 +0,0 @@
{% extends "templates/base.html" %}
{% block title %}
{{ _("Assignments") }}
{% endblock %}
{% block content %}
<div class="common-page-style">
<div class="container">
<div class="common-card-style column-card medium">
<div class="course-home-headings"> {{ _("Assignment Grading") }} </div>
{{ AssignmentForm(assignment) }}
</div>
</div>
</div>
{% endblock %}
{% macro AssignmentForm(assignment) %}
{% set course_title = frappe.db.get_value("LMS Course", assignment.course, "title") %}
{% set lesson_title = frappe.db.get_value("Course Lesson", assignment.lesson, "title") %}
<form class="register-form">
<div class="form-padding">
<div class="form-row">
<div class="form-group col-md-6">
<label> {{ _("Member") }} </label>
<input type="text" class="form-control" value="{{ assignment.member_name }}" disabled readonly />
</div>
<div class="form-group col-md-6">
<label> {{ _("Course") }} </label>
<input type="text" class="form-control" value="{{ course_title }}" disabled readonly />
</div>
</div>
<div class="form-row">
<div class="col-md-6">
<div class="form-group">
<label> {{ _("Lesson") }} </label>
<input type="text" class="form-control" value="{{ lesson_title }}" disabled readonly />
</div>
<div class="form-group">
<label> {{ _("Result") }} </label>
<div class="control-input flex align-center form-control">
<select class="input-with-feedback form-control pl-0" id="result"
{% if not is_moderator %} disabled {% endif %} data-type="{{ assignment.status }}">
<option selected> {{ _("Not Graded") }} </option>
<option value="Pass"> {{ _("Pass") }} </option>
<option value="Fail"> {{ _("Fail") }} </option>
</select>
<div class="select-icon">
<svg class="icon icon-sm">
<use class="" href="#icon-select"></use>
</svg>
</div>
</div>
</div>
</div>
<div class="form-group col-md-6">
<label>{{ _("Comments") }}</label>
<textarea class="form-control" id="comments" {% if not is_moderator %} disabled readonly {% endif %}
>{% if assignment.comments %}{{ assignment.comments }}{% endif %}</textarea>
</div>
</div>
</div>
<div class="text-right form-padding">
<a class="btn btn-secondary btn-sm" href="{{ assignment.assignment }}" target="_blank">
{{ _("Open Attachment") }}
</a>
<button class="btn btn-primary btn-sm ml-2" id="save-assignment" data-assignment="{{ assignment.name }}">
{{ _("Save") }}
</button>
</div>
</form>
{% endmacro %}

View File

@@ -1,55 +0,0 @@
frappe.ready(() => {
this.result;
let self = this;
set_result();
$("#save-assignment").click((e) => {
save_assignment(e);
});
$("#result").change((e) => {
$("#result option:selected").each(function () {
self.result = $(this).val();
});
});
});
const set_result = () => {
let self = this;
let result = $("#result").data("type");
if (result) {
$("#result option").each((i, elem) => {
if ($(elem).val() == result) {
$(elem).attr("selected", true);
self.result = result;
}
});
}
};
const save_assignment = (e) => {
e.preventDefault();
if (!["Pass", "Fail"].includes(this.result))
frappe.throw({
title: __("Not Graded"),
message: __("Please grade the assignment."),
});
frappe.call({
method: "lms.lms.doctype.lms_assignment_submission.lms_assignment_submission.grade_assignment",
args: {
name: $(e.currentTarget).data("assignment"),
result: this.result,
comments: $("#comments").val(),
},
callback: (data) => {
frappe.show_alert({
message: __("Saved"),
indicator: "green",
});
setTimeout(() => {
window.history.go(-2);
}, 2000);
},
});
};

View File

@@ -1,35 +0,0 @@
import frappe
from lms.lms.utils import has_course_moderator_role
from frappe import _
def get_context(context):
context.no_cache = 1
assignment = frappe.form_dict["assignment"]
context.assignment = frappe.db.get_value(
"LMS Assignment Submission",
assignment,
[
"assignment",
"comments",
"status",
"name",
"member",
"member_name",
"course",
"lesson",
],
as_dict=True,
)
context.is_moderator = has_course_moderator_role()
if (
not has_course_moderator_role()
and not frappe.session.user == context.assignment.member
):
message = "You don't have the permissions to access this page."
if frappe.session.user == "Guest":
message = "Please login to access this page."
raise frappe.PermissionError(_(message))

View File

@@ -68,22 +68,12 @@ def get_context(context):
order_by="date",
)
context.assessments = get_assessments(context.is_moderator, class_name)
context.assessments = get_assessments(class_name)
context.all_assignments = get_all_assignments(class_name)
context.all_quizzes = get_all_quizzes(class_name)
all_assignments = frappe.get_all(
"LMS Assignment", {"owner": frappe.session.user}, ["name", "title"]
)
for assignment in all_assignments:
assignment.checked = frappe.db.exists(
{
"doctype": "LMS Assessment",
"assessment_type": "LMS Assignment",
"assessment_name": assignment.name,
"parent": class_name,
}
)
context.all_assignments = all_assignments
def get_all_quizzes(class_name):
all_quizzes = frappe.get_all(
"LMS Quiz", {"owner": frappe.session.user}, ["name", "title"]
)
@@ -96,4 +86,20 @@ def get_context(context):
"parent": class_name,
}
)
context.all_quizzes = all_quizzes
return all_quizzes
def get_all_assignments(class_name):
all_assignments = frappe.get_all(
"LMS Assignment", {"owner": frappe.session.user}, ["name", "title"]
)
for assignment in all_assignments:
assignment.checked = frappe.db.exists(
{
"doctype": "LMS Assessment",
"assessment_type": "LMS Assignment",
"assessment_name": assignment.name,
"parent": class_name,
}
)
return all_assignments

View File

@@ -13,7 +13,6 @@ def get_context(context):
past_classes, upcoming_classes = [], []
for class_ in classes:
print(class_.start_date)
if getdate(class_.start_date) < getdate():
past_classes.append(class_)
else:
@@ -39,5 +38,3 @@ def get_context(context):
)
context.my_classes = my_classes_info
print(context.my_classes)

View File

@@ -34,11 +34,13 @@
</div>
</div>
{% if is_moderator %}
<div class="align-self-center">
<a class="btn btn-primary btn-sm btn-evaluate" href=/evaluation/new?member={{student.name}}&date={{frappe.utils.getdate()}}&class={{class_info.name}}">
{{ _("Evaluate") }}
</a>
</div>
{% endif %}
</div>
</div>
@@ -47,7 +49,8 @@
{% macro Progress(class_info, student) %}
<div>
{% if assessments | length %}
<article>
{% for assessment in assessments %}
<div class="list-row level">
<a {% if is_moderator and assessment.submission or frappe.session.user == student.name %} class="clickable" href="{{ assessment.url }}" {% endif %}>
@@ -69,102 +72,8 @@
{% endif %}
</div>
{% endfor %}
</div>
{% endmacro %}
{% macro Quiz(course, student) %}
{% for quiz in course.quizzes %}
{% set filters = { "member": student.name, "course": course.course } %}
{% set has_submitted = frappe.db.exists("LMS Quiz Submission", filters) %}
{% set submission = frappe.db.get_value("LMS Quiz Submission", filters, ["score", "creation"], as_dict=True) %}
{% set total_questions = frappe.db.count("LMS Quiz Question", {"parent": quiz.name}) %}
<tr>
<td class="vertically-center">
<svg class="icon icon-sm">
<use href="#icon-quiz"></use>
</svg>
{{ _("Quiz") }}
</td>
<td>{{ quiz.title }}</td>
{% if has_submitted %}
<td>{{ submission.score }}/{{ total_questions }}</td>
<td>{{ frappe.utils.format_date(submission.creation, "medium") }}</td>
{% else %}
<td>-</td>
<td>
<div class="indicator-pill red">
{{ _("Not Attempted") }}
</div>
</td>
{% endif %}
</tr>
{% endfor %}
{% endmacro %}
{% macro Assignment(course, student, is_moderator) %}
{% for assignment in course.assignments %}
{% set filters = { "member": student.name, "course": course.course, "lesson": assignment.name } %}
{% set has_submitted = frappe.db.exists("LMS Assignment Submission", filters) %}
{% set submission = frappe.db.get_value("LMS Assignment Submission", filters, ["assignment", "creation", "status"], as_dict=True) %}
{% set status = submission.status %}
{% set color = "green" if status == "Pass" else "red" if status == "Fail" else "orange" %}
{% set can_see_details = has_submitted and (is_moderator or frappe.session.user == student.name) %}
<tr {% if can_see_details %} class="clickable-row" data-href="/assignments/{{ has_submitted }}" {% endif %}>
<td class="{% if can_see_details %} subheading {% endif %} vertically-center">
<svg class="icon icon-md">
<use href="#icon-file"></use>
</svg>
{{ _("Assignment") }}
</td>
<td>{{ assignment.title }}</td>
{% if has_submitted %}
<td>
<div class="indicator-pill {{ color }}">
{{ status }}
</div>
</td>
<td>{{ frappe.utils.format_date(submission.creation, "medium") }}</td>
{% else %}
<td>-</td>
<td>
<div class="indicator-pill red">
{{ _("Not Attempted") }}
</div>
</td>
{% endif %}
</tr>
{% endfor %}
{% endmacro %}
{% macro Evaluation(course, student, is_moderator) %}
{% for evaluation in course.evaluations %}
{% set color = "green" if evaluation.status == "Pass" else "red" %}
{% set can_see_details = is_moderator or frappe.session.user == student.name %}
<tr {% if can_see_details %} class="clickable-row" data-href="/evaluation/{{evaluation.name}}" {% endif %}>
<td class="{% if can_see_details %} subheading {% endif %} vertically-center">
<svg class="icon icon-md">
<use href="#icon-quality"></use>
</svg>
{{ _("Evaluation") }}
</td>
<td> - </td>
<td>
<div class="indicator-pill {{ color }}">
{{ evaluation.status }}
</div>
</td>
<td>{{ frappe.utils.format_date(evaluation.creation, "medium") }}</td>
</tr>
{% endfor %}
{% endmacro %}
</article>
{% else %}
<p class="text-muted mt-3"> {{ _("No Assessments") }} </p>
{% endif %}
{% endmacro %}

View File

@@ -21,6 +21,4 @@ def get_context(context):
"LMS Class", class_name, ["name"], as_dict=True
)
context.assessments = get_assessments(
context.is_moderator, class_name, context.student.name
)
context.assessments = get_assessments(class_name, context.student.name)

View File

@@ -59,7 +59,7 @@ def get_current_lesson_details(lesson_number, context, is_edit=False):
return lesson_info
def get_assessments(is_moderator, class_name, member=None):
def get_assessments(class_name, member=None):
if not member:
member = frappe.session.user
@@ -92,7 +92,6 @@ def get_assessments(is_moderator, class_name, member=None):
)
assessment.edit_url = f"/assignments/{assessment.assessment_name}"
assessment.grade_url = f"/assignment-grading/{existing_submission}"
submission_name = existing_submission if existing_submission else "new-submission"
assessment.url = (
f"/assignment-submission/{assessment.assessment_name}/{submission_name}"
@@ -103,5 +102,5 @@ def get_assessments(is_moderator, class_name, member=None):
"LMS Quiz", assessment.assessment_name, "title"
)
assessment.url = f"/quizzes/{assessment.assessment_name}"
print(assessments)
return assessments