diff --git a/faerun_calendar/admin.py b/faerun_calendar/admin.py index 98c2da3..a278ba6 100644 --- a/faerun_calendar/admin.py +++ b/faerun_calendar/admin.py @@ -1,8 +1,12 @@ from django.contrib import admin -from .models import CalendarData +from .models import YearData from .models import MonthData +from .models import DayData from .models import Event +from .models import CalendarData -admin.site.register(CalendarData) +admin.site.register(YearData) admin.site.register(MonthData) +admin.site.register(DayData) admin.site.register(Event) +admin.site.register(CalendarData) diff --git a/faerun_calendar/models.py b/faerun_calendar/models.py index 50bc577..4460290 100644 --- a/faerun_calendar/models.py +++ b/faerun_calendar/models.py @@ -1,79 +1,82 @@ from django.db import models +from django.core.validators import RegexValidator +from django.core.validators import MinValueValidator +from django.core.validators import MaxValueValidator -class FaerunDate: - LAST_MONTH = 18 - LEAP_MONTH = 11 - ONE_DAY_MONTHS = (2, 6, 10, 11, 14, 17) - LAST_DAY = 30 +class YearData(models.Model): + number = models.SmallIntegerField('Number', validators=[ + RegexValidator(r'^-?[1-9]\d{0,3}$', 'Year must be not zero and between -9999 and 9999') + ]) - def __init__(self, year: int, month: int, day: int): - self.year = year - self.month = month - self.day = day - self.is_leap_year = self._is_leap_year() - self.is_valid = self._is_valid() - - def __repr__(self): - return f'{type(self).__name__}({self.year}, {self.month}, {self.day})' - - def _is_leap_year(self) -> bool: - if self.year == 0: + @property + def is_leap(self): + if self.number == 0: return False - elif self.year % 400 == 0: + elif self.number % 400 == 0: return True - elif self.year % 100 == 0: + elif self.number % 100 == 0: return False - elif self.year % 4 == 0: + elif self.number % 4 == 0: return True return False - def _is_valid(self) -> bool: - if self.year == 0: - return False - - if not 0 < self.month <= FaerunDate.LAST_MONTH: - return False - - if not self.is_leap_year and self.month == self.__class__.LEAP_MONTH: - return False - - if not 0 < self.day <= FaerunDate.LAST_DAY: - return False - - if self.day > 1 and self.month in FaerunDate.ONE_DAY_MONTHS: - return False - - return True - - -class CalendarData(models.Model): - current_year = models.SmallIntegerField('CurrentYear') - current_month = models.SmallIntegerField('CurrentMonth') - current_day = models.SmallIntegerField('CurrentDay') - leap_month = models.SmallIntegerField('LeapMonth') - def __str__(self): - return f'({self.current_year}, {self.current_month}, {self.current_day}, {self.leap_month})' + return f'({self.number}, {self.is_leap})' class MonthData(models.Model): - number = models.SmallIntegerField('Number', unique=True) + number = models.SmallIntegerField('Number', unique=True, validators=[ + MinValueValidator(1), + MaxValueValidator(18), + ]) name = models.CharField('Name', max_length=64, unique=True) folkname = models.CharField('Folkname', max_length=64, blank=True) is_oneday = models.BooleanField('IsOneday') + is_leap_month = models.BooleanField('IsLeapMonth') def __str__(self): - return f'({self.number}, {self.name}, {self.folkname}, {self.is_oneday})' + return f'({self.number}, {self.name}, {self.folkname}, {self.is_oneday}, {self.is_leap_month})' + + +class DayData(models.Model): + number = models.SmallIntegerField('Number', unique=True, validators=[ + MinValueValidator(1), + MaxValueValidator(30), + ]) + month = models.ForeignKey(MonthData, on_delete=models.CASCADE) + year = models.ForeignKey(YearData, on_delete=models.CASCADE) + + def __str__(self): + return f'({self.number, self.month})' + + +class CalendarData(models.Model): + current_day = models.ForeignKey(DayData, on_delete=models.CASCADE) + + def __str__(self): + return f'({self.current_day})' + + @property + def current_month(self): + try: + return getattr(self.current_day, 'month') + except AttributeError: + return None + + @property + def current_year(self): + try: + return getattr(self.current_day, 'year') + except AttributeError: + return None class Event(models.Model): - year = models.SmallIntegerField('Year') - month = models.SmallIntegerField('Month') - day = models.SmallIntegerField('Day') + day = models.ForeignKey(DayData, on_delete=models.CASCADE) time = models.TimeField('Time') title = models.CharField('Title', max_length=250) description = models.TextField('Description', max_length=2500) def __str__(self): - return f'({self.year}, {self.month}, {self.day}, {self.time}, {self.title})' + return f'({self.day}, {self.time}, {self.title})' diff --git a/faerun_calendar/static/faerun_calendar/css/main.css b/faerun_calendar/static/faerun_calendar/css/main.css index d5f8d36..842785b 100644 --- a/faerun_calendar/static/faerun_calendar/css/main.css +++ b/faerun_calendar/static/faerun_calendar/css/main.css @@ -5,6 +5,10 @@ div.calendarpage { border-radius: 20px; } +h2.year { + text-align: center; +} + table.month, table.month th, table.month td { border: 1px solid white; border-collapse: collapse; diff --git a/faerun_calendar/templates/faerun_calendar/index.html b/faerun_calendar/templates/faerun_calendar/index.html index 904fb96..8c14116 100644 --- a/faerun_calendar/templates/faerun_calendar/index.html +++ b/faerun_calendar/templates/faerun_calendar/index.html @@ -13,14 +13,14 @@ {% block content %}