From b3469af23d00868b222d0534eaba2d622454df6c Mon Sep 17 00:00:00 2001 From: stupidcomputer Date: Tue, 30 Jul 2024 19:55:52 -0500 Subject: [PATCH] squash: register models --- app/confman/models.py | 98 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/app/confman/models.py b/app/confman/models.py index 71a8362..be3c682 100644 --- a/app/confman/models.py +++ b/app/confman/models.py @@ -1,3 +1,99 @@ from django.db import models +from django.utils.translation import gettext_lazy as _ +from django.contrib.postgres.fields import ArrayField + +from statistics import mean + +class Person(models.Model): + # generic stuff + first_name = models.CharField(max_length=256) + last_name = models.CharField(max_length=256) + + # personal information + phone_number = models.CharField(max_length=256) + address = models.CharField(max_length=256) + city = models.CharField(max_length=256) + state = models.CharField(max_length=256) + +class GeneralAssembly(models.Model): + class Color(models.TextChoices): + RED = 'RED', _('Red') + WHITE = 'WHI', _('White') + BLUE = 'BLU', _('Blue') + NONE = 'NON', _('None') + + color = models.CharField( + max_length=3, + choices=Color.choices, + default=Color.NONE, + ) + docket = models.ArrayField(BillTeam) + +class Committee(models.Model): + number = models.IntegerField(default=1) + docket = models.ArrayField(BillTeam) + general_assembly = models.ForeignKey(GeneralAssembly) + +class RollCallVoteResult(models.Model): + all_for = models.IntegerField() + all_against = models.IntegerField() + all_abstaining = models.IntegerField() + +class RankingVoteResult(models.Model): + def average(self): + return mean( + [vote.average for vote in self.rankingvotes_set.all()] + ) + +class RankingVotes(models.Model): + field1 = models.IntegerField() + field2 = models.IntegerField() + field3 = models.IntegerField() + field4 = models.IntegerField() + field5 = models.IntegerField() + result = models.ForeignKey(RankingVoteResult) + + def average(self): + return sum( + self.field1, + self.field2, + self.field3, + self.field4, + self.field5 + ) / 5 + +class BillVoteResults(models.Model): + plenary = models.ForeignKey(RollCallVoteResult) + general_assembly = models.ForeignKey(RollCallVoteResult) + committee = models.ForeignKey(RankingVoteResult) + +class Bill(models.Model): + title = models.CharField(max_length=256) + text = models.TextField() + topic = models.CharField(max_length=256) + votes = models.ForeignKey(BillVoteResults) + +class BillTeam(models.Model): + class Color(models.TextChoices): + RED = 'RED', _('Red') + WHITE = 'WHI', _('White') + BLUE = 'BLU', _('Blue') + NONE = 'NON', _('None') + + color = models.CharField( + max_length=3, + choices=Color.choices, + default=Color.NONE, + ) + delegates = models.ManyToManyField(Person) + country = models.TextField(blank=True) + bill = models.ForeignKey(Bill) + committee = models.ForeignKey(Committee) + +class MUNConference(models.Model): + name = models.CharField(max_length=256) + docket = models.ArrayField(BillTeam) # plenary docket + + def __str__(self): + return self.name -# Create your models here.