from django.db import models
|
import json
|
from problem.models import ProblemGroup
|
from datetime import datetime
|
|
from organization.models import University, Faculty, StudyType, Subject
|
|
from django.conf import settings
|
|
# Create your models here.
|
|
# class ProblemSubGroup(models.Model):
|
# problem=models.ManyToManyField(Problem)
|
# select_no=models.IntegerField(default=1)
|
|
# class ProblemGroup(models.Mode):
|
# problem_subgroup=models.ManyToManyField(ProblemSubGroup)
|
|
|
def matrix2old_format(matrix):
|
if type(matrix)==type(""):
|
matrix=eval(matrix)
|
retstr = ""
|
for i, prob in enumerate(matrix):
|
for j, ans in enumerate(prob):
|
if int(ans) != 0:
|
retstr += "{}{},".format(i + 1, chr(ord("a") + j))
|
retstr = retstr.strip(",")
|
old_format2matrix(retstr)
|
return retstr
|
|
|
def old_format2matrix(answers):
|
if len(answers)==0:
|
return "[]"
|
matrix = {}
|
ans = answers.split(",")
|
for a in ans:
|
try:
|
num = int(a[:-1])
|
except:
|
num = 0
|
letter = a[-1:]
|
line = [0, 0, 0, 0]
|
line[ord(letter) - ord("a")] = 1
|
if num in matrix.keys():
|
matrix[num] = [sum(x) for x in zip(matrix[num], line)]
|
else:
|
matrix[num] = line
|
retmatrix = []
|
for i in range(1, max(matrix.keys()) + 1):
|
if i in matrix.keys():
|
retmatrix.append(matrix[i])
|
else:
|
retmatrix.append([0, 0, 0, 0])
|
return json.dumps(retmatrix)
|
|
|
class GeneratedProblem(models.Model):
|
seq_no = models.IntegerField(default=0)
|
ans_no = models.IntegerField(default=4)
|
correct_no = models.IntegerField(default=1)
|
json = models.TextField()
|
|
|
class GeneratedPaper(models.Model):
|
generated_problem = models.ManyToManyField(GeneratedProblem)
|
exam = models.ForeignKey('Exam', on_delete=models.CASCADE)
|
student_id = models.CharField(max_length=18)
|
seq_no = models.IntegerField(default=0)
|
serial_no = models.IntegerField(default=0)
|
answer_matrix = models.TextField(null=True, blank=True)
|
|
def __str__(self):
|
return "serial no:{} student_id:{}".format(self.serial_no, self.student_id)
|
|
|
class ExamType(models.Model):
|
name = models.CharField(max_length=50)
|
|
def __str__(self):
|
return self.name
|
|
|
class Exam(models.Model):
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
|
type = models.ForeignKey(ExamType, on_delete=models.CASCADE)
|
# faculty=models.ForeignKey(Faculty, on_delete=models.CASCADE)
|
study_type = models.ForeignKey(StudyType, on_delete=models.CASCADE)
|
mark_positive = models.IntegerField(default=1)
|
mark_negative = models.IntegerField(default=-1)
|
kvizek=models.IntegerField(default=0)
|
date = models.DateField(default=datetime.now)
|
last_line = models.TextField(blank=True)
|
# problem_group=models.ForeignKey(ProblemGroup, on_delete=models.CASCADE)
|
#problem_grouping = models.TextField(blank=True)
|
#problem = models.ManyToManyField(Problem, blank=True)
|
problem_group= models.ManyToManyField(ProblemGroup, blank=True)
|
# generated = models.ManyToManyField(GeneratedPaper, blank=True)
|
student_list=models.TextField(blank=True, null=True)
|
generated_tex=models.TextField(blank=True, null=True)
|
finalized=models.BooleanField(default=False)
|
published=models.BooleanField(default=False)
|
def __str__(self):
|
return "{} {} {}".format(self.type, self.subject, self.date)
|
|
def add_problem(self, problem):
|
g=problem.problemgroup_set.get(problemhomegroup=True)
|
# check if exam has it already.
|
if g in self.problem_group.all():
|
pass
|
else:
|
self.problem_group.add(g)
|