Commit 2a31e356 by John Jarvis

sending template pdf with certificate request

parent 64c0a8c9
...@@ -93,6 +93,7 @@ class Command(BaseCommand): ...@@ -93,6 +93,7 @@ class Command(BaseCommand):
total = enrolled_students.count() total = enrolled_students.count()
count = 0 count = 0
start = datetime.datetime.now(UTC) start = datetime.datetime.now(UTC)
for student in enrolled_students: for student in enrolled_students:
count += 1 count += 1
if count % STATUS_INTERVAL == 0: if count % STATUS_INTERVAL == 0:
......
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'GeneratedCertificate.mode'
db.add_column('certificates_generatedcertificate', 'mode',
self.gf('django.db.models.fields.CharField')(default='honor', max_length=32),
keep_default=False)
def backwards(self, orm):
# Deleting field 'GeneratedCertificate.mode'
db.delete_column('certificates_generatedcertificate', 'mode')
models = {
'auth.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
'certificates.certificatewhitelist': {
'Meta': {'object_name': 'CertificateWhitelist'},
'course_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
'whitelist': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
},
'certificates.generatedcertificate': {
'Meta': {'unique_together': "(('user', 'course_id'),)", 'object_name': 'GeneratedCertificate'},
'course_id': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '255', 'blank': 'True'}),
'created_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now_add': 'True', 'blank': 'True'}),
'distinction': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'download_url': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '128', 'blank': 'True'}),
'download_uuid': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}),
'error_reason': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '512', 'blank': 'True'}),
'grade': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '5', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'key': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'}),
'mode': ('django.db.models.fields.CharField', [], {'default': "'honor'", 'max_length': '32'}),
'modified_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'unavailable'", 'max_length': '32'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
'verify_uuid': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '32', 'blank': 'True'})
},
'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
}
}
complete_apps = ['certificates']
\ No newline at end of file
...@@ -62,6 +62,10 @@ class CertificateStatuses(object): ...@@ -62,6 +62,10 @@ class CertificateStatuses(object):
restricted = 'restricted' restricted = 'restricted'
unavailable = 'unavailable' unavailable = 'unavailable'
class CertificateModes(object):
verified = 'verified'
honor = 'honor'
audit = 'audit'
class CertificateWhitelist(models.Model): class CertificateWhitelist(models.Model):
""" """
...@@ -86,6 +90,7 @@ class GeneratedCertificate(models.Model): ...@@ -86,6 +90,7 @@ class GeneratedCertificate(models.Model):
key = models.CharField(max_length=32, blank=True, default='') key = models.CharField(max_length=32, blank=True, default='')
distinction = models.BooleanField(default=False) distinction = models.BooleanField(default=False)
status = models.CharField(max_length=32, default='unavailable') status = models.CharField(max_length=32, default='unavailable')
mode = models.CharField(max_length=32, default=CertificateModes.honor)
name = models.CharField(blank=True, max_length=255) name = models.CharField(blank=True, max_length=255)
created_date = models.DateTimeField( created_date = models.DateTimeField(
auto_now_add=True, default=datetime.now) auto_now_add=True, default=datetime.now)
......
...@@ -9,7 +9,7 @@ from capa.xqueue_interface import XQueueInterface ...@@ -9,7 +9,7 @@ from capa.xqueue_interface import XQueueInterface
from capa.xqueue_interface import make_xheader, make_hashkey from capa.xqueue_interface import make_xheader, make_hashkey
from django.conf import settings from django.conf import settings
from requests.auth import HTTPBasicAuth from requests.auth import HTTPBasicAuth
from student.models import UserProfile from student.models import UserProfile, CourseEnrollment
import json import json
import random import random
...@@ -156,6 +156,8 @@ class XQueueCertInterface(object): ...@@ -156,6 +156,8 @@ class XQueueCertInterface(object):
cert_status = certificate_status_for_student(student, course_id)['status'] cert_status = certificate_status_for_student(student, course_id)['status']
new_status = cert_status
if cert_status in VALID_STATUSES: if cert_status in VALID_STATUSES:
# grade the student # grade the student
...@@ -165,9 +167,6 @@ class XQueueCertInterface(object): ...@@ -165,9 +167,6 @@ class XQueueCertInterface(object):
course = courses.get_course_by_id(course_id) course = courses.get_course_by_id(course_id)
profile = UserProfile.objects.get(user=student) profile = UserProfile.objects.get(user=student)
cert, created = GeneratedCertificate.objects.get_or_create(
user=student, course_id=course_id)
# Needed # Needed
self.request.user = student self.request.user = student
self.request.session = {} self.request.session = {}
...@@ -175,45 +174,59 @@ class XQueueCertInterface(object): ...@@ -175,45 +174,59 @@ class XQueueCertInterface(object):
grade = grades.grade(student, self.request, course) grade = grades.grade(student, self.request, course)
is_whitelisted = self.whitelist.filter( is_whitelisted = self.whitelist.filter(
user=student, course_id=course_id, whitelist=True).exists() user=student, course_id=course_id, whitelist=True).exists()
enrollment = CourseEnrollment.objects.get(user=student)
org = course_id.split('/')[0]
course_num = course_id.split('/')[1]
if enrolment.mode == CertificateModes.verified:
template_pdf = "certificate-template-{0}-{1}-verified.pdf".format(
org, course_num)
else:
# honor code and audit students
template_pdf = "certificate-template-{0}-{1}.pdf".format(
org, course_num)
if is_whitelisted or grade['grade'] is not None: cert, created = GeneratedCertificate.objects.get_or_create(
user=student, course_id=course_id)
key = make_hashkey(random.random()) cert.mode = enrollment.mode
cert.grade = grade['percent']
cert.user = student cert.user = student
cert.grade = grade['percent']
cert.course_id = course_id cert.course_id = course_id
cert.key = key
cert.name = profile.name cert.name = profile.name
if is_whitelisted or grade['grade'] is not None:
# check to see whether the student is on the # check to see whether the student is on the
# the embargoed country restricted list # the embargoed country restricted list
# otherwise, put a new certificate request # otherwise, put a new certificate request
# on the queue # on the queue
if self.restricted.filter(user=student).exists(): if self.restricted.filter(user=student).exists():
cert.status = status.restricted new_status = status.restricted
cert.status = new_status
cert.save() cert.save()
else: else:
key = make_hashkey(random.random())
cert.key = key
contents = { contents = {
'action': 'create', 'action': 'create',
'username': student.username, 'username': student.username,
'course_id': course_id, 'course_id': course_id,
'name': profile.name, 'name': profile.name,
'grade': grade['grade'], 'grade': grade['grade'],
'template_pdf': template_pdf,
} }
cert.status = status.generating new_status = status.generating
cert.status = new_status
cert.save() cert.save()
self._send_to_xqueue(contents, key) self._send_to_xqueue(contents, key)
else: else:
cert_status = status.notpassing new_status = status.notpassing
cert.grade = grade['percent'] cert.status = new_status
cert.user = student
cert.course_id = course_id
cert.name = profile.name
cert.status = cert_status
cert.save() cert.save()
return cert_status return new_status
def _send_to_xqueue(self, contents, key): def _send_to_xqueue(self, contents, key):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment