106 lines
3.2 KiB
Python
106 lines
3.2 KiB
Python
from decimal import Decimal
|
|
from secrets import token_urlsafe
|
|
|
|
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
from pretalx.common.mixins.models import PretalxModel
|
|
|
|
|
|
def generate_token():
|
|
return token_urlsafe(32)
|
|
|
|
|
|
class MusicrateSettings(models.Model):
|
|
event = models.OneToOneField(
|
|
to="event.Event",
|
|
on_delete=models.CASCADE,
|
|
related_name="pretalx_musicrate_settings",
|
|
)
|
|
submission_types = models.ManyToManyField(
|
|
to="submission.SubmissionType",
|
|
related_name="pretalx_musicrate_settings",
|
|
help_text=_(
|
|
"You can limit pretalx-musicrate to some session types. Leave this field empty to rate all session types."
|
|
),
|
|
verbose_name=_("Session Types"),
|
|
blank=True,
|
|
)
|
|
genre_question = models.OneToOneField(
|
|
to="submission.Question",
|
|
on_delete=models.SET_NULL,
|
|
related_name="pretalx_musicrate_settings_genre",
|
|
verbose_name=_("Genre Question"),
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
origin_question = models.OneToOneField(
|
|
to="submission.Question",
|
|
on_delete=models.SET_NULL,
|
|
related_name="pretalx_musicrate_settings_origin",
|
|
verbose_name=_("Origin Question"),
|
|
blank=True,
|
|
null=True,
|
|
)
|
|
join_token = models.CharField(max_length=43, default=generate_token)
|
|
advance_threshold = models.DecimalField(
|
|
max_digits=3,
|
|
decimal_places=2,
|
|
default=Decimal("0.6"),
|
|
help_text=_(
|
|
"The fraction of jurors that has to submit a rating before the presenter view automatically advances to the next submission."
|
|
),
|
|
verbose_name=_("Advance Threshold"),
|
|
)
|
|
last_submission = models.ForeignKey(
|
|
"submission.Submission",
|
|
on_delete=models.SET_NULL,
|
|
related_name="pretalx_musicrate_settings",
|
|
null=True,
|
|
)
|
|
link_questions = models.ManyToManyField(
|
|
to="submission.Question",
|
|
related_name="pretalx_musicrate_settings_links",
|
|
verbose_name=_("Link Questions"),
|
|
blank=True,
|
|
)
|
|
|
|
|
|
class Juror(PretalxModel):
|
|
event = models.ForeignKey(
|
|
"event.Event", on_delete=models.CASCADE, related_name="jurors"
|
|
)
|
|
token = models.CharField(max_length=43, default=generate_token, primary_key=True)
|
|
last_submission = models.ForeignKey(
|
|
"submission.Submission",
|
|
on_delete=models.SET_NULL,
|
|
related_name="jurors",
|
|
null=True,
|
|
)
|
|
|
|
|
|
class Rating(models.Model):
|
|
RATING_CHOICES = [
|
|
("10", "sehr gut"),
|
|
("9", "ziemlich gut"),
|
|
("8", "gut"),
|
|
("7", "eher gut"),
|
|
("6", "ok"),
|
|
("5", "naja"),
|
|
("4", "eher schlecht"),
|
|
("3", "schlecht"),
|
|
("2", "ziemlich schlecht"),
|
|
("1", "sehr schlecht"),
|
|
]
|
|
rating = models.CharField(max_length=2, choices=RATING_CHOICES, blank=True)
|
|
submission = models.ForeignKey(
|
|
"submission.Submission", on_delete=models.CASCADE, related_name="ratings"
|
|
)
|
|
juror = models.ForeignKey(Juror, on_delete=models.CASCADE, related_name="ratings")
|
|
|
|
class Meta:
|
|
constraints = [
|
|
models.UniqueConstraint(
|
|
fields=("submission", "juror"), name="unique_rating"
|
|
),
|
|
]
|