Stripped personal data from development repository
Samo Penic
2019-02-20 83c3f647c35477564b77cbc5b36d37d793d5442a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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)