572 lines
23 KiB
Python
572 lines
23 KiB
Python
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.contrib import messages
|
|
from django.http import HttpResponseRedirect
|
|
from django.urls import reverse_lazy
|
|
from django.conf import settings
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.core.paginator import Paginator
|
|
|
|
from accounts.models import User, Student
|
|
from app.models import Session, Semester
|
|
from course.models import Course
|
|
from accounts.decorators import lecturer_required, student_required
|
|
from .models import TakenCourse, Result
|
|
|
|
User = settings.AUTH_USER_MODEL
|
|
|
|
#pdf
|
|
from django.core.files.storage import FileSystemStorage
|
|
from django.http import HttpResponse, JsonResponse
|
|
|
|
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, Image, LongTable
|
|
from reportlab.lib.styles import getSampleStyleSheet, black, ParagraphStyle
|
|
from reportlab.lib.enums import TA_JUSTIFY,TA_LEFT,TA_CENTER,TA_RIGHT
|
|
from reportlab.platypus.tables import Table
|
|
from reportlab.lib.units import inch
|
|
from reportlab.lib import colors
|
|
cm = 2.54
|
|
|
|
from SMS.settings import MEDIA_ROOT, BASE_DIR, STATIC_URL
|
|
import os
|
|
|
|
from .models import *
|
|
# ########################################################
|
|
# Score Add & Add for
|
|
# ########################################################
|
|
@login_required
|
|
@lecturer_required
|
|
def add_score(request):
|
|
"""
|
|
Shows a page where a lecturer will select a course allocated to him for score entry.
|
|
in a specific semester and session
|
|
|
|
"""
|
|
current_session = Session.objects.get(is_current_session=True)
|
|
current_semester = get_object_or_404(Semester, is_current_semester=True, session=current_session)
|
|
# semester = Course.objects.filter(allocated_course__lecturer__pk=request.user.id, semester=current_semester)
|
|
courses = Course.objects.filter(allocated_course__lecturer__pk=request.user.id).filter(semester=current_semester)
|
|
context = {
|
|
"current_session": current_session,
|
|
"current_semester": current_semester,
|
|
"courses": courses,
|
|
}
|
|
return render(request, 'result/add_score.html', context)
|
|
|
|
|
|
@login_required
|
|
@lecturer_required
|
|
def add_score_for(request, id):
|
|
"""
|
|
Shows a page where a lecturer will add score for students that are taking courses allocated to him
|
|
in a specific semester and session
|
|
"""
|
|
current_session = Session.objects.get(is_current_session=True)
|
|
current_semester = get_object_or_404(Semester, is_current_semester=True, session=current_session)
|
|
if request.method == 'GET':
|
|
courses = Course.objects.filter(allocated_course__lecturer__pk=request.user.id).filter(
|
|
semester=current_semester)
|
|
course = Course.objects.get(pk=id)
|
|
# myclass = Class.objects.get(lecturer__pk=request.user.id)
|
|
# myclass = get_object_or_404(Class, lecturer__pk=request.user.id)
|
|
|
|
# students = TakenCourse.objects.filter(course__allocated_course__lecturer__pk=request.user.id).filter(
|
|
# course__id=id).filter(student__allocated_student__lecturer__pk=request.user.id).filter(
|
|
# course__semester=current_semester)
|
|
students = TakenCourse.objects.filter(course__allocated_course__lecturer__pk=request.user.id).filter(
|
|
course__id=id).filter(course__semester=current_semester)
|
|
context = {
|
|
"title": "Submit Score | DjangoSMS",
|
|
"courses": courses,
|
|
"course": course,
|
|
# "myclass": myclass,
|
|
"students": students,
|
|
"current_session": current_session,
|
|
"current_semester": current_semester,
|
|
}
|
|
return render(request, 'result/add_score_for.html', context)
|
|
|
|
if request.method == 'POST':
|
|
ids = ()
|
|
data = request.POST.copy()
|
|
data.pop('csrfmiddlewaretoken', None) # remove csrf_token
|
|
for key in data.keys():
|
|
ids = ids + (str(key),) # gather all the all students id (i.e the keys) in a tuple
|
|
for s in range(0, len(ids)): # iterate over the list of student ids gathered above
|
|
student = TakenCourse.objects.get(id=ids[s])
|
|
# print(student)
|
|
# print(student.student)
|
|
# print(student.student.department.id)
|
|
courses = Course.objects.filter(level=student.student.level).filter(program__pk=student.student.department.id).filter(
|
|
semester=current_semester) # all courses of a specific level in current semester
|
|
total_credit_in_semester = 0
|
|
for i in courses:
|
|
if i == courses.count():
|
|
break
|
|
else:
|
|
total_credit_in_semester += int(i.credit)
|
|
score = data.getlist(ids[s]) # get list of score for current student in the loop
|
|
assignment = score[0] # subscript the list to get the fisrt value > ca score
|
|
mid_exam = score[1] # do the same for exam score
|
|
quiz = score[2]
|
|
attendance = score[3]
|
|
final_exam = score[4]
|
|
obj = TakenCourse.objects.get(pk=ids[s]) # get the current student data
|
|
obj.assignment = assignment # set current student assignment score
|
|
obj.mid_exam = mid_exam # set current student mid_exam score
|
|
obj.quiz = quiz # set current student quiz score
|
|
obj.attendance = attendance # set current student attendance score
|
|
obj.final_exam = final_exam # set current student final_exam score
|
|
|
|
obj.total = obj.get_total(assignment=assignment, mid_exam=mid_exam, quiz=quiz, attendance=attendance, final_exam=final_exam)
|
|
obj.grade = obj.get_grade(total=obj.total)
|
|
|
|
# obj.total = obj.get_total(assignment, mid_exam, quiz, attendance, final_exam)
|
|
# obj.grade = obj.get_grade(assignment, mid_exam, quiz, attendance, final_exam)
|
|
|
|
obj.point = obj.get_point(grade=obj.grade)
|
|
|
|
obj.comment = obj.get_comment(grade=obj.grade)
|
|
# obj.carry_over(obj.grade)
|
|
# obj.is_repeating()
|
|
obj.save()
|
|
gpa = obj.calculate_gpa(total_credit_in_semester)
|
|
cgpa = obj.calculate_cgpa()
|
|
|
|
try:
|
|
a = Result.objects.get(student=student.student, semester=current_semester, session=current_session, level=student.student.level)
|
|
a.gpa = gpa
|
|
a.cgpa = cgpa
|
|
a.save()
|
|
except:
|
|
Result.objects.get_or_create(student=student.student, gpa=gpa, semester=current_semester,
|
|
session=current_session, level=student.student.level)
|
|
|
|
# try:
|
|
# a = Result.objects.get(student=student.student, semester=current_semester, level=student.student.level)
|
|
# a.gpa = gpa
|
|
# a.cgpa = cgpa
|
|
# a.save()
|
|
# except:
|
|
# Result.objects.get_or_create(student=student.student, gpa=gpa, semester=current_semester, level=student.student.level)
|
|
|
|
messages.success(request, 'Successfully Recorded! ')
|
|
return HttpResponseRedirect(reverse_lazy('add_score_for', kwargs={'id': id}))
|
|
return HttpResponseRedirect(reverse_lazy('add_score_for', kwargs={'id': id}))
|
|
# ########################################################
|
|
|
|
|
|
@login_required
|
|
@student_required
|
|
def grade_result(request):
|
|
student = Student.objects.get(student__pk=request.user.id)
|
|
courses = TakenCourse.objects.filter(student__student__pk=request.user.id).filter(course__level=student.level)
|
|
# total_credit_in_semester = 0
|
|
results = Result.objects.filter(student__student__pk=request.user.id)
|
|
|
|
result_set = set()
|
|
|
|
for result in results:
|
|
result_set.add(result.session)
|
|
|
|
sorted_result = sorted(result_set)
|
|
|
|
total_first_semester_credit = 0
|
|
total_sec_semester_credit = 0
|
|
for i in courses:
|
|
if i.course.semester == "First":
|
|
total_first_semester_credit += int(i.course.credit)
|
|
if i.course.semester == "Second":
|
|
total_sec_semester_credit += int(i.course.credit)
|
|
|
|
previousCGPA = 0
|
|
# previousLEVEL = 0
|
|
# calculate_cgpa
|
|
for i in results:
|
|
previousLEVEL = i.level
|
|
try:
|
|
a = Result.objects.get(student__student__pk=request.user.id, level=previousLEVEL, semester="Second")
|
|
previousCGPA = a.cgpa
|
|
break
|
|
except:
|
|
previousCGPA = 0
|
|
|
|
context = {
|
|
"courses": courses,
|
|
"results": results,
|
|
"sorted_result": sorted_result,
|
|
"student": student,
|
|
'total_first_semester_credit': total_first_semester_credit,
|
|
'total_sec_semester_credit': total_sec_semester_credit,
|
|
'total_first_and_second_semester_credit': total_first_semester_credit + total_sec_semester_credit,
|
|
"previousCGPA": previousCGPA,
|
|
}
|
|
|
|
return render(request, 'result/grade_results.html', context)
|
|
|
|
|
|
@login_required
|
|
@student_required
|
|
def assessment_result(request):
|
|
student = Student.objects.get(student__pk=request.user.id)
|
|
courses = TakenCourse.objects.filter(student__student__pk=request.user.id, course__level=student.level)
|
|
result = Result.objects.filter(student__student__pk=request.user.id)
|
|
|
|
context = {
|
|
"courses": courses,
|
|
"result": result,
|
|
"student": student,
|
|
}
|
|
|
|
return render(request, 'result/assessment_results.html', context)
|
|
|
|
|
|
@login_required
|
|
@lecturer_required
|
|
def result_sheet_pdf_view(request, id):
|
|
current_semester = Semester.objects.get(is_current_semester=True)
|
|
current_session = Session.objects.get(is_current_session=True)
|
|
result = TakenCourse.objects.filter(course__pk=id)
|
|
course = get_object_or_404(Course, id=id)
|
|
no_of_pass = TakenCourse.objects.filter(course__pk=id, comment="PASS").count()
|
|
no_of_fail = TakenCourse.objects.filter(course__pk=id, comment="FAIL").count()
|
|
fname = str(current_semester) + '_semester_' + str(current_session) + '_' + str(course) + '_resultSheet.pdf'
|
|
fname = fname.replace("/", "-")
|
|
flocation = settings.MEDIA_ROOT + "/result_sheet/" + fname
|
|
|
|
doc = SimpleDocTemplate(flocation, rightMargin=0, leftMargin=6.5 * cm, topMargin=0.3 * cm, bottomMargin=0)
|
|
styles = getSampleStyleSheet()
|
|
styles.add(ParagraphStyle( name="ParagraphTitle", fontSize=11, fontName="FreeSansBold"))
|
|
Story = [Spacer(1,.2)]
|
|
style = styles["Normal"]
|
|
|
|
# picture = request.user.picture
|
|
# l_pic = Image(picture, 1*inch, 1*inch)
|
|
# l_pic.__setattr__("_offs_x", 200)
|
|
# l_pic.__setattr__("_offs_y", -130)
|
|
# Story.append(l_pic)
|
|
|
|
# logo = settings.MEDIA_ROOT + "/logo/logo-mini.png"
|
|
# im_logo = Image(logo, 1*inch, 1*inch)
|
|
# im_logo.__setattr__("_offs_x", -218)
|
|
# im_logo.__setattr__("_offs_y", -60)
|
|
# Story.append(im_logo)
|
|
|
|
logo = settings.MEDIA_ROOT + "/logo/you-logo-here.png"
|
|
im = Image(logo, 1*inch, 1*inch)
|
|
im.__setattr__("_offs_x", -200)
|
|
im.__setattr__("_offs_y", -45)
|
|
Story.append(im)
|
|
|
|
style = getSampleStyleSheet()
|
|
normal = style["Normal"]
|
|
normal.alignment = TA_CENTER
|
|
normal.fontName = "Helvetica"
|
|
normal.fontSize = 12
|
|
normal.leading = 15
|
|
title = "<b> "+str(current_semester) + " Semester " + str(current_session) + " Result Sheet</b>"
|
|
title = Paragraph(title.upper(), normal)
|
|
Story.append(title)
|
|
Story.append(Spacer(1,0.1*inch))
|
|
|
|
style = getSampleStyleSheet()
|
|
normal = style["Normal"]
|
|
normal.alignment = TA_CENTER
|
|
normal.fontName = "Helvetica"
|
|
normal.fontSize = 10
|
|
normal.leading = 15
|
|
title = "<b>Course lecturer: " + request.user.get_full_name + "</b>"
|
|
title = Paragraph(title.upper(), normal)
|
|
Story.append(title)
|
|
Story.append(Spacer(1,0.1*inch))
|
|
|
|
normal = style["Normal"]
|
|
normal.alignment = TA_CENTER
|
|
normal.fontName = "Helvetica"
|
|
normal.fontSize = 10
|
|
normal.leading = 15
|
|
level = result.filter(course_id=id).first()
|
|
title = "<b>Level: </b>" + str(level.course.level)
|
|
title = Paragraph(title.upper(), normal)
|
|
Story.append(title)
|
|
Story.append(Spacer(1,.6*inch))
|
|
|
|
elements = []
|
|
count = 0
|
|
header = [('S/N', 'ID NO.', 'FULL NAME', 'TOTAL', 'GRADE', 'POINT', 'COMMENT')]
|
|
|
|
table_header = Table(header, [inch], [0.5*inch])
|
|
table_header.setStyle(
|
|
TableStyle([
|
|
('BACKGROUND',(0,0),(-1,-1),colors.black),
|
|
('TEXTCOLOR',(1,0),(-1,-1),colors.white),
|
|
('TEXTCOLOR',(0,0),(0,0),colors.cyan),
|
|
('ALIGN',(0,0),(-1,-1),'CENTER'),
|
|
('VALIGN',(0,0),(-1,-1),'MIDDLE'),
|
|
('BOX',(0,0),(-1,-1),1,colors.black),
|
|
]))
|
|
Story.append(table_header)
|
|
|
|
for student in result:
|
|
|
|
data = [(count+1, student.student.student.username.upper(), Paragraph(student.student.student.get_full_name.capitalize(), styles['Normal']),
|
|
student.total, student.grade, student.point, student.comment)]
|
|
color = colors.black
|
|
if student.grade == 'F':
|
|
color = colors.red
|
|
count += 1
|
|
|
|
t_body = Table(data, colWidths=[inch])
|
|
t_body.setStyle(
|
|
TableStyle([
|
|
('INNERGRID', (0,0), (-1,-1), 0.05, colors.black),
|
|
('BOX', (0,0), (-1,-1), 0.1, colors.black),
|
|
]))
|
|
Story.append(t_body)
|
|
|
|
Story.append(Spacer(1,1*inch))
|
|
style_right = ParagraphStyle(name='right', parent=styles['Normal'], alignment=TA_RIGHT)
|
|
tbl_data = [
|
|
[Paragraph("<b>Date:</b>_____________________________", styles["Normal"]), Paragraph("<b>No. of PASS:</b> " + str(no_of_pass), style_right)],
|
|
[Paragraph("<b>Siganture / Stamp:</b> _____________________________", styles["Normal"]), Paragraph("<b>No. of FAIL: </b>" + str(no_of_fail), style_right)]]
|
|
tbl = Table(tbl_data)
|
|
Story.append(tbl)
|
|
|
|
doc.build(Story)
|
|
|
|
fs = FileSystemStorage(settings.MEDIA_ROOT + "/result_sheet")
|
|
with fs.open(fname) as pdf:
|
|
response = HttpResponse(pdf, content_type='application/pdf')
|
|
response['Content-Disposition'] = 'inline; filename=' + fname + ''
|
|
return response
|
|
return response
|
|
|
|
|
|
@login_required
|
|
@student_required
|
|
def course_registration_form(request):
|
|
current_semester = Semester.objects.get(is_current_semester=True)
|
|
current_session = Session.objects.get(is_current_session=True)
|
|
courses = TakenCourse.objects.filter(student__student__id=request.user.id)
|
|
fname = request.user.username + '.pdf'
|
|
fname = fname.replace("/", "-")
|
|
# flocation = '/tmp/' + fname
|
|
# print(MEDIA_ROOT + "\\" + fname)
|
|
flocation = settings.MEDIA_ROOT + "/registration_form/" + fname
|
|
doc = SimpleDocTemplate(flocation, rightMargin=15, leftMargin=15, topMargin=0, bottomMargin=0)
|
|
styles = getSampleStyleSheet()
|
|
|
|
Story = [Spacer(1,0.5)]
|
|
Story.append(Spacer(1,0.4*inch))
|
|
style = styles["Normal"]
|
|
|
|
style = getSampleStyleSheet()
|
|
normal = style["Normal"]
|
|
normal.alignment = TA_CENTER
|
|
normal.fontName = "Helvetica"
|
|
normal.fontSize = 12
|
|
normal.leading = 18
|
|
title = "<b>EZOD UNIVERSITY OF TECHNOLOGY, ADAMA</b>"
|
|
title = Paragraph(title.upper(), normal)
|
|
Story.append(title)
|
|
style = getSampleStyleSheet()
|
|
|
|
school = style["Normal"]
|
|
school.alignment = TA_CENTER
|
|
school.fontName = "Helvetica"
|
|
school.fontSize = 10
|
|
school.leading = 18
|
|
school_title = "<b>SCHOOL OF ELECTRICAL ENGINEERING & COMPUTING</b>"
|
|
school_title = Paragraph(school_title.upper(), school)
|
|
Story.append(school_title)
|
|
|
|
style = getSampleStyleSheet()
|
|
Story.append(Spacer(1,0.1*inch))
|
|
department = style["Normal"]
|
|
department.alignment = TA_CENTER
|
|
department.fontName = "Helvetica"
|
|
department.fontSize = 9
|
|
department.leading = 18
|
|
department_title = "<b>DEPARTMENT OF COMPUTER SCIENCE & ENGINEERING</b>"
|
|
department_title = Paragraph(department_title, department)
|
|
Story.append(department_title)
|
|
Story.append(Spacer(1,.3*inch))
|
|
|
|
title = "<b><u>STUDENT COURSE REGISTRATION FORM</u></b>"
|
|
title = Paragraph(title.upper(), normal)
|
|
Story.append(title)
|
|
student = Student.objects.get(student__pk=request.user.id)
|
|
|
|
style_right = ParagraphStyle(name='right', parent=styles['Normal'])
|
|
tbl_data = [
|
|
[Paragraph("<b>Registration Number : " + request.user.username.upper() + "</b>", styles["Normal"])],
|
|
[Paragraph("<b>Name : " + request.user.get_full_name.upper() + "</b>", styles["Normal"])],
|
|
[Paragraph("<b>Session : " + current_session.session.upper() + "</b>", styles["Normal"]), Paragraph("<b>Level: " + student.level + "</b>", styles["Normal"])
|
|
]]
|
|
tbl = Table(tbl_data)
|
|
Story.append(tbl)
|
|
Story.append(Spacer(1, 0.6*inch))
|
|
|
|
style = getSampleStyleSheet()
|
|
semester = style["Normal"]
|
|
semester.alignment = TA_LEFT
|
|
semester.fontName = "Helvetica"
|
|
semester.fontSize = 9
|
|
semester.leading = 18
|
|
semester_title = "<b>FIRST SEMESTER</b>"
|
|
semester_title = Paragraph(semester_title, semester)
|
|
Story.append(semester_title)
|
|
|
|
elements = []
|
|
|
|
# FIRST SEMESTER
|
|
count = 0
|
|
header = [('S/No', 'Course Code', 'Course Title', 'Unit', Paragraph('Name, Siganture of course lecturer & Date', style['Normal']))]
|
|
table_header = Table(header,1*[1.4*inch], 1*[0.5*inch])
|
|
table_header.setStyle(
|
|
TableStyle([
|
|
('ALIGN',(-2,-2), (-2,-2),'CENTER'),
|
|
('VALIGN',(-2,-2), (-2,-2),'MIDDLE'),
|
|
('ALIGN',(1,0), (1,0),'CENTER'),
|
|
('VALIGN',(1,0), (1,0),'MIDDLE'),
|
|
('ALIGN',(0,0), (0,0),'CENTER'),
|
|
('VALIGN',(0,0), (0,0),'MIDDLE'),
|
|
('ALIGN',(-4,0), (-4,0),'LEFT'),
|
|
('VALIGN',(-4,0), (-4,0),'MIDDLE'),
|
|
('ALIGN',(-3,0), (-3,0),'LEFT'),
|
|
('VALIGN',(-3,0), (-3,0),'MIDDLE'),
|
|
('TEXTCOLOR',(0,-1),(-1,-1),colors.black),
|
|
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
|
|
('BOX', (0,0), (-1,-1), 0.25, colors.black),
|
|
]))
|
|
Story.append(table_header)
|
|
|
|
first_semester_unit = 0
|
|
for course in courses:
|
|
if course.course.semester == FIRST:
|
|
first_semester_unit += int(course.course.credit)
|
|
data = [(count+1, course.course.code.upper(), Paragraph(course.course.title, style['Normal']), course.course.credit, '')]
|
|
color = colors.black
|
|
count += 1
|
|
table_body=Table(data,1*[1.4*inch], 1*[0.3*inch])
|
|
table_body.setStyle(
|
|
TableStyle([
|
|
('ALIGN',(-2,-2), (-2,-2),'CENTER'),
|
|
('ALIGN',(1,0), (1,0),'CENTER'),
|
|
('ALIGN',(0,0), (0,0),'CENTER'),
|
|
('ALIGN',(-4,0), (-4,0),'LEFT'),
|
|
('TEXTCOLOR',(0,-1),(-1,-1),colors.black),
|
|
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
|
|
('BOX', (0,0), (-1,-1), 0.25, colors.black),
|
|
]))
|
|
Story.append(table_body)
|
|
|
|
style = getSampleStyleSheet()
|
|
semester = style["Normal"]
|
|
semester.alignment = TA_LEFT
|
|
semester.fontName = "Helvetica"
|
|
semester.fontSize = 8
|
|
semester.leading = 18
|
|
semester_title = "<b>Total Second First Credit : " + str(first_semester_unit) + "</b>"
|
|
semester_title = Paragraph(semester_title, semester)
|
|
Story.append(semester_title)
|
|
|
|
# FIRST SEMESTER ENDS HERE
|
|
Story.append(Spacer(1, 0.6*inch))
|
|
|
|
style = getSampleStyleSheet()
|
|
semester = style["Normal"]
|
|
semester.alignment = TA_LEFT
|
|
semester.fontName = "Helvetica"
|
|
semester.fontSize = 9
|
|
semester.leading = 18
|
|
semester_title = "<b>SECOND SEMESTER</b>"
|
|
semester_title = Paragraph(semester_title, semester)
|
|
Story.append(semester_title)
|
|
# SECOND SEMESTER
|
|
count = 0
|
|
header = [('S/No', 'Course Code', 'Course Title', 'Unit', Paragraph('<b>Name, Signature of course lecturer & Date</b>', style['Normal']))]
|
|
table_header = Table(header,1*[1.4*inch], 1*[0.5*inch])
|
|
table_header.setStyle(
|
|
TableStyle([
|
|
('ALIGN',(-2,-2), (-2,-2),'CENTER'),
|
|
('VALIGN',(-2,-2), (-2,-2),'MIDDLE'),
|
|
('ALIGN',(1,0), (1,0),'CENTER'),
|
|
('VALIGN',(1,0), (1,0),'MIDDLE'),
|
|
('ALIGN',(0,0), (0,0),'CENTER'),
|
|
('VALIGN',(0,0), (0,0),'MIDDLE'),
|
|
('ALIGN',(-4,0), (-4,0),'LEFT'),
|
|
('VALIGN',(-4,0), (-4,0),'MIDDLE'),
|
|
('ALIGN',(-3,0), (-3,0),'LEFT'),
|
|
('VALIGN',(-3,0), (-3,0),'MIDDLE'),
|
|
('TEXTCOLOR',(0,-1),(-1,-1),colors.black),
|
|
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
|
|
('BOX', (0,0), (-1,-1), 0.25, colors.black),
|
|
]))
|
|
Story.append(table_header)
|
|
|
|
second_semester_unit = 0
|
|
for course in courses:
|
|
if course.course.semester == SECOND:
|
|
second_semester_unit += int(course.course.credit)
|
|
data = [(count+1, course.course.code.upper(), Paragraph(course.course.title, style['Normal']), course.course.credit, '')]
|
|
color = colors.black
|
|
count += 1
|
|
table_body=Table(data,1*[1.4*inch], 1*[0.3*inch])
|
|
table_body.setStyle(
|
|
TableStyle([
|
|
('ALIGN',(-2,-2), (-2,-2),'CENTER'),
|
|
('ALIGN',(1,0), (1,0),'CENTER'),
|
|
('ALIGN',(0,0), (0,0),'CENTER'),
|
|
('ALIGN',(-4,0), (-4,0),'LEFT'),
|
|
('TEXTCOLOR',(0,-1),(-1,-1),colors.black),
|
|
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
|
|
('BOX', (0,0), (-1,-1), 0.25, colors.black),
|
|
]))
|
|
Story.append(table_body)
|
|
|
|
style = getSampleStyleSheet()
|
|
semester = style["Normal"]
|
|
semester.alignment = TA_LEFT
|
|
semester.fontName = "Helvetica"
|
|
semester.fontSize = 8
|
|
semester.leading = 18
|
|
semester_title = "<b>Total Second Semester Credit : " + str(second_semester_unit) + "</b>"
|
|
semester_title = Paragraph(semester_title, semester)
|
|
Story.append(semester_title)
|
|
|
|
Story.append(Spacer(1, 2))
|
|
style = getSampleStyleSheet()
|
|
certification = style["Normal"]
|
|
certification.alignment = TA_JUSTIFY
|
|
certification.fontName = "Helvetica"
|
|
certification.fontSize = 8
|
|
certification.leading = 18
|
|
student = Student.objects.get(student__pk=request.user.id)
|
|
certification_text = "CERTIFICATION OF REGISTRATION: I certify that <b>" + str(request.user.get_full_name.upper()) + "</b>\
|
|
has been duly registered for the <b>" + student.level + " level </b> of study in the department\
|
|
of COMPUTER SICENCE & ENGINEERING and that the courses and credits registered are as approved by the senate of the University"
|
|
certification_text = Paragraph(certification_text, certification)
|
|
Story.append(certification_text)
|
|
|
|
# FIRST SEMESTER ENDS HERE
|
|
|
|
logo = MEDIA_ROOT + "/logo/you-logo-here.png"
|
|
im_logo = Image(logo, 1*inch, 1*inch)
|
|
im_logo.__setattr__("_offs_x", -218)
|
|
im_logo.__setattr__("_offs_y", 480)
|
|
Story.append(im_logo)
|
|
|
|
picture = BASE_DIR + request.user.get_picture()
|
|
im = Image(picture, 1.0*inch, 1.0*inch)
|
|
im.__setattr__("_offs_x", 218)
|
|
im.__setattr__("_offs_y", 550)
|
|
Story.append(im)
|
|
|
|
doc.build(Story)
|
|
fs = FileSystemStorage(settings.MEDIA_ROOT + "/registration_form")
|
|
with fs.open(fname) as pdf:
|
|
response = HttpResponse(pdf, content_type='application/pdf')
|
|
response['Content-Disposition'] = 'inline; filename='+fname+''
|
|
return response
|
|
return response
|