Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Slip Calculator Jobs for Assignment and Course #1148

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open
Prev Previous commit
Next Next commit
add course slips form
  • Loading branch information
epai committed May 5, 2017
commit 28d916dd49663f644518233800d0f236be97f703
40 changes: 37 additions & 3 deletions server/controllers/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -974,7 +974,7 @@ def checkpoint_grading(cid, aid):
form=form,
)

@admin.route("/course/<int:cid>/assignments/<int:aid>/slip",
@admin.route("/course/<int:cid>/assignments/<int:aid>/slips",
methods=["GET", "POST"])
@is_staff(course_arg='cid')
def calculate_slips(cid, aid):
Expand All @@ -984,7 +984,7 @@ def calculate_slips(cid, aid):
flash('Cannot access assignment', 'error')
return abort(404)

form = forms.SlipCalculatorForm()
form = forms.AssignSlipCalculatorForm()
timescale = form.timescale.data.title()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest keeping the timescale lowercase, so it matches up with the TIMESCALES enum. And you won't need the .lower() on L16 in slips.py

if form.validate_on_submit():
print("submitted!")
Expand All @@ -1002,13 +1002,47 @@ def calculate_slips(cid, aid):
return redirect(url_for('.course_job', cid=cid, job_id=job.id))

return render_template(
'staff/jobs/calculate_slips.html',
'staff/jobs/slips/slips.assign.html',
courses=courses,
current_course=current_course,
assignment=assign,
form=form,
)

@admin.route("/course/<int:cid>/assignments/slips",
methods=["GET", "POST"])
@is_staff(course_arg='cid')
def calculate_all_slips(cid):
courses, current_course = get_courses(cid)
# assgns = current_course.assignments
# active_asgns = [a for a in assgns if a.active]
# due_asgns = [a for a in assgns if not a.active]
form = forms.CourseSlipCalculatorForm()
form.assigns.choices = [('ONE', 'one'), ('TWO', 'two')]
form.process()
# timescale = form.timescale.data.title()
# if form.validate_on_submit():
# print("submitted!")
# job = jobs.enqueue_job(
# slips.calculate_slips,
# description='Calculate Slip {} for {}'.format(timescale, assign.display_name),
# timeout=600,
# course_id=cid,
# user_id=current_user.id,
# assign_id=assign.id,
# timescale=timescale,
# show_results=form.show_results.data,
# result_kind='link',
# )
# return redirect(url_for('.course_job', cid=cid, job_id=job.id))

return render_template(
'staff/jobs/slips/slips.course.html',
courses=courses,
current_course=current_course,
form=form,
)

##############
# Enrollment #
##############
Expand Down
11 changes: 10 additions & 1 deletion server/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -559,13 +559,22 @@ class ExportAssignment(BaseForm):
description="Enable to remove identifying information from submissions")


class SlipCalculatorForm(BaseForm):
class AssignSlipCalculatorForm(BaseForm):
timescale = SelectField('Time Scale', default="Days",
choices=[(c, c.title()) for c in TIMESCALES],
validators=[validators.required()],
description="Time scale for slip calculation.")
show_results = BooleanField('Show Results', default=False)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if this is useful as an option. We should either always show the results, or don't


class CourseSlipCalculatorForm(BaseForm):
timescale = SelectField('Time Scale', default="Days",
choices=[(c, c.title()) for c in TIMESCALES],
validators=[validators.required()],
description="Time scale for slip calculation.")
assigns = MultiCheckboxField('Assignments',
description="Select which assignments to calculate slips for.")
show_results = BooleanField('Show Results', default=False)

##########
# Canvas #
##########
Expand Down
22 changes: 20 additions & 2 deletions server/templates/staff/course/assignment/assignments.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,25 @@ <h1>
<section class="content">
{% include 'alerts.html' %}

<!-- Default box -->
<div class="box box-solid">
<div class="box-header with-border">
<h3 class="box-title">Actions</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse" data-toggle="tooltip" title="" data-original-title="Collapse">
<i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<ul class="nav nav-pills">
<li> <a href="{{url_for('.calculate_all_slips', cid=current_course.id)}}" type="button">
<i class="fa fa-calculator"></i> Calculate Slips
</a></li>
</ul>
</div>
<!-- /.box-body -->
</div>

<!-- Default box -->
<div class="box">
<div class="box-header with-border">
Expand Down Expand Up @@ -66,9 +85,8 @@ <h3 class="box-title">Active Assignments</h3>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">Completed Assignments</h3>

<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse" data-toggle="tooltip" title="Collapse">
<button type="button" class="btn btn-box-tool" data-widget="collapse" data-toggle="tooltip" title="" data-original-title="Collapse">
<i class="fa fa-minus"></i></button>
</div>
</div>
Expand Down
44 changes: 44 additions & 0 deletions server/templates/staff/jobs/slips/slips.course.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{% extends "staff/base.html" %}
{% import "staff/_formhelpers.html" as forms %}

{% block title %} Calculate Slips for {{ current_course.display_name }} {% endblock %}

{% block main %}
<section class="content-header">
<h1>
Calculate Slips for {{ current_course.display_name }}
<small>{{ current_course.offering }}</small>
</h1>
<ol class="breadcrumb">
<li><a href="{{ url_for(".course", cid=current_course.id) }}">
<i class="fa fa-university"></i> {{ current_course.offering }}
</a></li>
<li><a href="{{ url_for('.course_assignments', cid=current_course.id) }}">
<i class="fa fa-list"></i> Assignments</a>
</li>
<li><a href="{{ url_for(".course_jobs", cid=current_course.id) }}">
<i class="fa fa-list"></i>Jobs
</a></li>
<li class="active"><a href="#">
<i class="fa fa-inbox"></i>Calculate Slips</a>
</li>
</ol>
</section>
<section class="content">
{% include 'alerts.html' %}
<div class="row">
<div class="col-md-12">
<div class="box">
<div class="box-body">
<p> Calculate slips and save as a .csv file. </p>
{% call forms.render_form(form, action_text='Calculate Slips') %}
{{ forms.render_field(form.timescale) }}
{{ forms.render_checkbox_field(form.assigns) }}
{{ forms.render_checkbox_field(form.show_results) }}
{% endcall %}
</div>
</div>
</div>
</div>
</section>
{% endblock %}