Updated models with new requirements

This commit is contained in:
Ceferino Patino 2022-09-03 04:18:27 -05:00
commit 7666bd3973
8 changed files with 82 additions and 65 deletions

View file

@ -11,14 +11,13 @@ class Activity(models.Model):
]
name = models.CharField(max_length=100)
quota = models.IntegerField()
time = models.IntegerField(
choices=TimeslotChoices, blank=True, null=True, default=None)
default_quota = models.IntegerField(default=0)
time = models.IntegerField(choices=TimeslotChoices, blank=True, null=True)
password = models.CharField(
max_length=100, blank=True, null=True, default=None)
def __str__(self):
return f"{self.name} ({self.time})"
return f"{self.name}"
def save(self, *args, **kwargs):
self.full_clean()

15
housewars/models/Award.py Normal file
View file

@ -0,0 +1,15 @@
from django.db import models
class Award(models.Model):
activity = models.ForeignKey(
'Activity', on_delete=models.CASCADE)
name = models.CharField(max_length=15)
points = models.IntegerField(default=0)
def __str__(self):
return f"{self.name} ({self.activity})"
def save(self, *args, **kwargs):
self.full_clean()
return super().save(*args, **kwargs)

View file

@ -7,13 +7,13 @@ class House(models.Model):
name = models.CharField(max_length=100)
points = models.IntegerField(default=0)
@property
def current_points(self):
return self.pointsentry_set.aggregate(points__sum=Coalesce(Sum('points'), 0)).get('points__sum')
# @property
# def current_points(self):
# return self.pointsentry_set.aggregate(points__sum=Coalesce(Sum('points'), 0)).get('points__sum')
@property
def total_points(self):
return self.current_points + self.points
# @property
# def total_points(self):
# return self.current_points + self.points
def __str__(self):
return f"{self.name}"

View file

@ -1,17 +1,21 @@
from django.db import models
from . import House, Activity
from django.db.models import Model, ForeignKey, CharField, CASCADE, Q, F
from smart_selects.db_fields import ChainedForeignKey
from . import Award
class PointsEntry(models.Model):
class PointsEntry(Model):
class Meta:
verbose_name_plural = "Point Entries"
name = models.CharField(max_length=100)
activity = models.ForeignKey(Activity, on_delete=models.CASCADE)
house = models.ForeignKey(House, on_delete=models.CASCADE)
points = models.IntegerField(default=0)
password = models.CharField(
max_length=15, default=None, blank=True, null=True)
activity = ForeignKey(
'Activity', related_name='Activity', on_delete=CASCADE)
house = ForeignKey('House', on_delete=CASCADE)
award = ChainedForeignKey(Award, chained_field="activity",
chained_model_field="activity", on_delete=CASCADE)
password = CharField(max_length=15, blank=True)
def __str__(self):
return f"{self.activity}"
def save(self, *args, **kwargs):
self.full_clean()

17
housewars/models/Quota.py Normal file
View file

@ -0,0 +1,17 @@
from django.db import models
class Quota(models.Model):
class Meta:
unique_together = ('activity', 'house')
activity = models.ForeignKey('Activity', on_delete=models.CASCADE)
house = models.ForeignKey('House', on_delete=models.CASCADE)
quota = models.IntegerField(default=0)
def __str__(self):
return f"{self.house}"
def save(self, *args, **kwargs):
self.full_clean()
return super().save(*args, **kwargs)

View file

@ -1,8 +1,6 @@
from django.db import models
from django.core.exceptions import ValidationError
from ..managers import (EagleEntryManager, EntryManager, GreatGreyEntryManager,
HawkEntryManager, SnowyEntryManager)
from . import House, Activity
@ -10,12 +8,6 @@ class UserEntry(models.Model):
class Meta:
verbose_name_plural = "User Entries"
objects = EntryManager()
hawk = HawkEntryManager()
great_grey = GreatGreyEntryManager()
snowy = SnowyEntryManager()
eagle = EagleEntryManager()
GradeChoices = (
(9, '9th/Freshman'),
(10, '10th/Sophomore'),
@ -42,8 +34,16 @@ class UserEntry(models.Model):
return f"{self.first_name} {self.last_name}"
def clean(self):
if (self.activity1.time == None or self.activity2.time == None):
raise ValidationError('You cannot sign up for a null activity.')
if self.activity2 and self.activity1.time + self.activity2.time != 60:
raise ValidationError(
"Please pick activities adding up to one hour.")
elif not self.activity2 and self.activity1.time != 60:
raise ValidationError(
"Please pick activities adding up to one hour.")
if (self.activity1 and self.activity1.time == None):
raise ValidationError('You cannot sign up for a null activity')
if (self.activity2 and self.activity2.time == None):
raise ValidationError('You cannot sign up for a null activity')
def save(self, *args, **kwargs):
self.full_clean()

View file

@ -1,5 +1,7 @@
from .Activity import Activity
from .Award import Award
from .House import House
from .Teacher import Teacher
from .PointsEntry import PointsEntry
from .Quota import Quota
from .Teacher import Teacher
from .UserEntry import UserEntry

View file

@ -9,42 +9,22 @@
{% endblock %}
{% block content %}
<form method="POST">
{% csrf_token %}
<div class="mb-3">
<label for="name" class="name">Name:</label>
{{ form.name }}
</div>
<div class="mb-3">
<label for="activity" class="form-label">Activity:</label>
{{ form.activity }}
</div>
<div class="mb-3">
<label for="house" class="form-label">House:</label>
{{ form.house }}
</div>
<div class="mb-3">
<label for="points" class="form-label">Points:</label>
{{ form.points }}
</div>
<div class="mb-3">
<label for="comment" class="form-label">Comments:</label>
{{ form.comment }}
</div>
<form method="POST">
{% csrf_token %}
{{ form.media.js }}
{{ form.as_p }}
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }}">
{{ message }}
</div>
{% endfor %}
{% endif %}
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }}">
{{ message }}
</div>
{% endfor %}
{% endif %}
<div class="form-group d-flex justify-content-center">
<input class="btn btn-outline-primary btn-100" type="submit" value="Submit" />
</div>
</form>
<div class="form-group d-flex justify-content-center">
<input class="btn btn-outline-primary btn-100" type="submit" value="Submit" />
</div>
</form>
{% endblock %}