Skip to content
Snippets Groups Projects
Verified Commit 5d564e1d authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Add models from TIC-Desk

parent bd0c9244
No related branches found
No related tags found
No related merge requests found
from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django_iban.fields import IBANField
from aleksis.core.mixins import ExtensibleModel
from aleksis.core.models import Group
from aleksis.core.models import Group, Person
class FeedbackAspect(ExtensibleModel):
aspect = models.CharField(max_length=100)
def __str__(self) -> str:
return self.aspect
class Event(ExtensibleModel):
......@@ -22,3 +33,144 @@ class Event(ExtensibleModel):
# Other details
cost = models.IntegerField(verbose_name=_("Cost in €"))
max_participants = models.PositiveSmallIntegerField(verbose_name=_("Maximum participants"))
# Feedback
feedback_aspects = models.ManyToManyField(
FeedbackAspect, verbose_name=_("Feedback aspects"), related_name="event"
)
def __str__(self) -> str:
return self.display_name
def can_register(self, request=None):
now = timezone.now()
if request and request.user.is_authenticated:
if (
Voucher.objects.filter(event=self, person=request.user.person, used=False).count()
> 0
):
return True
if self.group.members.count() >= self.max_participants:
return False
if self.date_registration:
return self.date_registration >= timezone.now()
return self.date_event > timezone.now()
@property
def booked_percentage(self):
return self.group.members.count() / self.max_participants * 100
@property
def members_persons(self):
return self.group.members.all()
@property
def owners_persons(self):
return self.group.owners.all()
class EventFeedback(ExtensibleModel):
class Meta:
verbose_name = _("Event feedback")
verbose_name_plural = _("Event feedbacks")
COMMENT_CHOICES = [
("first", _("Only first name")),
("first_age", _("First name and age")),
("first_last_age", _("First name, last name and age")),
]
LICENCE_CHOICES = [
("CC-BY-4.0+", _("Creative Commons with attribution, 4.0 or later")),
(
"CC-BY-SA-4.0+",
_(
"Creative Commons with attribution and distribution only"
"under the same conditions, 4.0 or later"
),
),
]
event = models.ForeignKey(
Event, on_delete=models.CASCADE, verbose_name=_("Event"), related_name="feedback"
)
person = models.ForeignKey(
Person, on_delete=models.CASCADE, verbose_name=_("Person"), related_name="feedback"
)
comment_private = models.TextField(verbose_name=_("Private comment"), blank=True)
comment_public = models.TextField(verbose_name=_("Public comment"), blank=True)
comment_public_info = models.CharField(
choices=COMMENT_CHOICES, verbose_name=_("Information in the comment"), max_length=255
)
photos = models.ImageField(verbose_name=_("Photos"), upload_to="feedback/", blank=True)
photos_licence = models.CharField(
choices=LICENCE_CHOICES, verbose_name=_("Photo licence"), max_length=255
)
class Voucher(ExtensibleModel):
class Meta:
verbose_name = _("Vouchers")
verbose_name_plural = _("Vouchers")
code = models.CharField(max_length=8, blank=True, default="")
event = models.ForeignKey(
Event,
related_name="vouchers",
verbose_name=_("Event"),
on_delete=models.CASCADE,
null=True,
)
person = models.ForeignKey(
Person, related_name="vouchers", verbose_name=_("Person"), on_delete=models.CASCADE,
)
discount = models.IntegerField(default=100)
used = models.BooleanField(default=False)
used_person_uid = models.ForeignKey(
Person,
on_delete=models.CASCADE,
verbose_name=_("Used by"),
related_name="used_vouchers",
null=True,
)
deleted = models.BooleanField(default=False)
def __str__(self) -> str:
return self.code
class EventRegistration(ExtensibleModel):
class Meta:
verbose_name = _("Registration")
verbose_name_plural = _("Registrations")
event = models.ForeignKey(Event, on_delete=models.CASCADE, verbose_name=_("Event"))
person = models.ForeignKey(Person, on_delete=models.CASCADE, verbose_name=_("Person"))
date_registred = models.DateTimeField(auto_now_add=True, verbose_name=_("Registration date"))
comment = models.TextField(verbose_name=_("Comment / remarks"), blank=True, default="")
channel = models.CharField(verbose_name=_("Channel"), max_length=255, blank=True, default="")
voucher = models.ForeignKey(
Voucher, on_delete=models.CASCADE, verbose_name=_("Voucher"), blank=True, null=True,
)
donation = models.PositiveIntegerField(verbose_name=_("Donation"), blank=True, null=True)
accept_sepa = models.BooleanField(verbose_name=_("SEPA direct debit"))
iban = IBANField(
verbose_name=_("IBAN (for SEPA direct debit)"), enforce_database_constraint=True, null=True,
)
accept_terms = models.BooleanField(verbose_name=_("Delcaration of consent by parents"))
accept_data = models.BooleanField(verbose_name=_("Declaration of consent data protection"))
accept_general_terms = models.BooleanField(
verbose_name=_("Declatation of consent terms and condition")
)
def __str__(self) -> str:
return f"{self.event}, {self.person.first_name} {self.person.last_name}"
......@@ -1175,6 +1175,19 @@ type = "legacy"
url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple"
reference = "gitlab"
[[package]]
name = "django-iban-field"
version = "0.8"
description = "IBAN field for django with validation and optional postgresql in database constraint checking"
category = "main"
optional = false
python-versions = "*"
[package.source]
type = "legacy"
url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple"
reference = "gitlab"
[[package]]
name = "django-impersonate"
version = "1.7.3"
......@@ -3868,7 +3881,7 @@ reference = "gitlab"
[metadata]
lock-version = "1.1"
python-versions = "^3.9"
content-hash = "1daf52479c94c478c93578347499b38a06fae34b9921aa7a08d5d7501def6a43"
content-hash = "4fba522bc9b8e3ead49950003648e14b7dcd33d404ec2689344e23b1b3974c35"
[metadata.files]
alabaster = [
......@@ -4231,6 +4244,9 @@ django-health-check = [
{file = "django-health-check-3.16.4.tar.gz", hash = "sha256:334bcbbb9273a6dbd9c928e78474306e623dfb38cc442281cb9fd230a20a7fdb"},
{file = "django_health_check-3.16.4-py2.py3-none-any.whl", hash = "sha256:86a8869d67e72394a1dd73e37819a7d2cfd915588b96927fda611d7451fd4735"},
]
django-iban-field = [
{file = "django_iban_field-0.8-py2.py3-none-any.whl", hash = "sha256:9d11eacb49b939702aa169aa0a3c9880970ed087c236279c32c26f86c7e10092"},
]
django-impersonate = [
{file = "django-impersonate-1.7.3.tar.gz", hash = "sha256:282003957577c7143fe31e5861f8fffdf6fe0c25557aedb28fcf8b11474eaa23"},
]
......
......@@ -27,6 +27,7 @@ secondary = true
[tool.poetry.dependencies]
python = "^3.9"
aleksis-core = "^2.2"
django-iban-field = "^0.8"
[tool.poetry.dev-dependencies]
aleksis-builddeps = "*"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment