models.py 7.03 KB
Newer Older
Sli's avatar
Sli committed
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
# -*- coding:utf-8 -*
#
# Copyright 2019
# - Sli <antoine@bartuccio.fr>
#
# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM,
# http://ae.utbm.fr.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License a published by the Free Software
# Foundation; either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple
# Place - Suite 330, Boston, MA 02111-1307, USA.
#
#

from django.db import models
26
27
28
29
30
from django.utils.translation import ugettext_lazy as _
from django.core import validators
from django.conf import settings

from core.models import User
Sli's avatar
Sli committed
31
32
33
34
35
36
37
38
39

# Create your models here.


class UV(models.Model):
    """
    Contains infos about an UV (course)
    """

Sli's avatar
Sli committed
40
41
42
43
44
45
    def is_owned_by(self, user):
        """
        Can be created by superuser, root or pedagogy admin user
        """
        return user.is_in_group(settings.SITH_GROUP_PEDAGOGY_ADMIN_ID)

Sli's avatar
Sli committed
46
    def can_be_viewed_by(self, user):
Sli's avatar
Sli committed
47
48
49
        """
        Only visible by subscribers
        """
Sli's avatar
Sli committed
50
51
        return user.is_subscribed

Sli's avatar
Sli committed
52
53
54
    def __str__(self):
        return self.code

55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
    code = models.CharField(
        _("code"),
        max_length=10,
        unique=True,
        validators=[
            validators.RegexValidator(
                regex="([A-Z0-9]+)",
                message=_(
                    "The code of an UV must only contains uppercase characters without accent and numbers"
                ),
            )
        ],
    )
    author = models.ForeignKey(
        User,
70
        related_name="uv_created",
Sli's avatar
Sli committed
71
        verbose_name=_("author"),
72
73
74
75
76
77
78
79
80
81
82
83
        null=False,
        blank=False,
    )
    credit_type = models.CharField(
        _("credit type"),
        max_length=10,
        choices=settings.SITH_PEDAGOGY_UV_TYPE,
        default=settings.SITH_PEDAGOGY_UV_TYPE[0][0],
    )
    manager = models.CharField(_("uv manager"), max_length=300)
    semester = models.CharField(
        _("semester"),
Sli's avatar
Sli committed
84
        max_length=20,
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
        choices=settings.SITH_PEDAGOGY_UV_SEMESTER,
        default=settings.SITH_PEDAGOGY_UV_SEMESTER[0][0],
    )
    language = models.CharField(
        _("language"),
        max_length=10,
        choices=settings.SITH_PEDAGOGY_UV_LANGUAGE,
        default=settings.SITH_PEDAGOGY_UV_LANGUAGE[0][0],
    )
    credits = models.IntegerField(
        _("credits"),
        validators=[validators.MinValueValidator(0)],
        blank=False,
        null=False,
    )
    # Double star type not implemented yet
101
102
103
104
105
106
107

    department = models.CharField(
        _("departmenmt"),
        max_length=10,
        choices=settings.SITH_PROFILE_DEPARTMENTS,
        default=settings.SITH_PROFILE_DEPARTMENTS[-1][0],
    )
108
109
110
111
112
113
114

    # All texts about the UV
    title = models.CharField(_("title"), max_length=300)
    manager = models.CharField(_("uv manager"), max_length=300)
    objectives = models.TextField(_("objectives"))
    program = models.TextField(_("program"))
    skills = models.TextField(_("skills"))
Sli's avatar
Sli committed
115
    key_concepts = models.TextField(_("key concepts"))
116
117
118
119
120
121
122
123

    # Hours types CM, TD, TP, THE and TE
    # Kind of dirty but I have nothing else in mind for now
    hours_CM = models.IntegerField(
        _("hours CM"),
        validators=[validators.MinValueValidator(0)],
        blank=False,
        null=False,
Sli's avatar
Sli committed
124
        default=0,
125
126
127
128
129
130
    )
    hours_TD = models.IntegerField(
        _("hours TD"),
        validators=[validators.MinValueValidator(0)],
        blank=False,
        null=False,
Sli's avatar
Sli committed
131
        default=0,
132
133
134
135
136
137
    )
    hours_TP = models.IntegerField(
        _("hours TP"),
        validators=[validators.MinValueValidator(0)],
        blank=False,
        null=False,
Sli's avatar
Sli committed
138
        default=0,
139
140
141
142
143
144
    )
    hours_THE = models.IntegerField(
        _("hours THE"),
        validators=[validators.MinValueValidator(0)],
        blank=False,
        null=False,
Sli's avatar
Sli committed
145
        default=0,
146
147
148
149
150
151
    )
    hours_TE = models.IntegerField(
        _("hours TE"),
        validators=[validators.MinValueValidator(0)],
        blank=False,
        null=False,
Sli's avatar
Sli committed
152
        default=0,
153
    )
Sli's avatar
Sli committed
154
155
156
157
158
159
160


class UVComment(models.Model):
    """
    A comment about an UV
    """

161
162
163
164
165
166
    def is_owned_by(self, user):
        """
        Is owned by a pedagogy admin, a superuser or the author himself
        """
        return self.author == user or user.is_owner(self.uv)

167
168
169
    def __str__(self):
        return "%s - %s" % (self.uv, self.author)

170
171
172
173
174
175
176
    author = models.ForeignKey(
        User,
        related_name="uv_comments",
        verbose_name=_("author"),
        null=False,
        blank=False,
    )
177
    uv = models.ForeignKey(UV, related_name="comments", verbose_name=_("uv"))
178
179
180
    comment = models.TextField(_("comment"))
    grade_global = models.IntegerField(
        _("global grade"),
Sli's avatar
Sli committed
181
        validators=[validators.MinValueValidator(-1), validators.MaxValueValidator(4)],
182
183
184
185
186
187
        blank=False,
        null=False,
        default=-1,
    )
    grade_utility = models.IntegerField(
        _("utility grade"),
Sli's avatar
Sli committed
188
        validators=[validators.MinValueValidator(-1), validators.MaxValueValidator(4)],
189
190
191
192
193
194
        blank=False,
        null=False,
        default=-1,
    )
    grade_interest = models.IntegerField(
        _("interest grade"),
Sli's avatar
Sli committed
195
        validators=[validators.MinValueValidator(-1), validators.MaxValueValidator(4)],
196
197
198
199
200
201
        blank=False,
        null=False,
        default=-1,
    )
    grade_teaching = models.IntegerField(
        _("teaching grade"),
Sli's avatar
Sli committed
202
        validators=[validators.MinValueValidator(-1), validators.MaxValueValidator(4)],
203
204
205
206
207
208
        blank=False,
        null=False,
        default=-1,
    )
    grade_work_load = models.IntegerField(
        _("work load grade"),
Sli's avatar
Sli committed
209
        validators=[validators.MinValueValidator(-1), validators.MaxValueValidator(4)],
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
        blank=False,
        null=False,
        default=-1,
    )
    publish_date = models.DateField(_("publish date"), auto_now=True)


class UVResult(models.Model):
    """
    Results got to an UV
    Views will be implemented after the first release
    Will list every UV done by an user
    Linked to user
              uv
    Contains a grade settings.SITH_PEDAGOGY_UV_RESULT_GRADE
             a semester (P/A)20xx
    """

    uv = models.ForeignKey(UV, related_name="results", verbose_name=_("uv"))
    user = models.ForeignKey(User, related_name="uv_results", verbose_name=("user"))
    grade = models.CharField(
        _("grade"),
        max_length=10,
        choices=settings.SITH_PEDAGOGY_UV_RESULT_GRADE,
        default=settings.SITH_PEDAGOGY_UV_RESULT_GRADE[0][0],
    )
    semester = models.CharField(
        _("semester"),
        max_length=5,
        validators=[validators.RegexValidator("[AP][0-9]{3}")],
    )
Sli's avatar
Sli committed
241
242
243
244
245
246
247
248


class UVCommentReport(models.Model):
    """
    Report an inapropriate comment
    """

    pass