diff --git a/faerun_calendar/admin.py b/faerun_calendar/admin.py index 8c38f3f..ef21617 100644 --- a/faerun_calendar/admin.py +++ b/faerun_calendar/admin.py @@ -1,3 +1,10 @@ from django.contrib import admin +from .models import YearData +from .models import MonthData +from .models import Event +from .models import CalendarData -# Register your models here. +admin.site.register(YearData) +admin.site.register(MonthData) +admin.site.register(Event) +admin.site.register(CalendarData) diff --git a/faerun_calendar/migrations/0001_initial.py b/faerun_calendar/migrations/0001_initial.py new file mode 100644 index 0000000..683dd25 --- /dev/null +++ b/faerun_calendar/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# Generated by Django 3.2.12 on 2022-07-13 08:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='CalendarData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('current_year', models.SmallIntegerField(verbose_name='CurrentYear')), + ('current_month', models.SmallIntegerField(verbose_name='CurrentMonth')), + ('current_day', models.SmallIntegerField(verbose_name='CurrentDay')), + ], + ), + migrations.CreateModel( + name='Event', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.SmallIntegerField(verbose_name='Year')), + ('month', models.SmallIntegerField(verbose_name='Month')), + ('day', models.SmallIntegerField(verbose_name='Day')), + ], + ), + ] diff --git a/faerun_calendar/migrations/0002_monthdata.py b/faerun_calendar/migrations/0002_monthdata.py new file mode 100644 index 0000000..2fced27 --- /dev/null +++ b/faerun_calendar/migrations/0002_monthdata.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='MonthData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), + ('folkname', models.CharField(max_length=64, unique=True, verbose_name='Folkname')), + ], + ), + ] diff --git a/faerun_calendar/migrations/0003_auto_20220713_1117.py b/faerun_calendar/migrations/0003_auto_20220713_1117.py new file mode 100644 index 0000000..e356ccf --- /dev/null +++ b/faerun_calendar/migrations/0003_auto_20220713_1117.py @@ -0,0 +1,31 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0002_monthdata'), + ] + + operations = [ + migrations.AddField( + model_name='event', + name='description', + field=models.TextField(default=0, max_length=2500, verbose_name='Description'), + preserve_default=False, + ), + migrations.AddField( + model_name='event', + name='time', + field=models.TimeField(default=0, verbose_name='Time'), + preserve_default=False, + ), + migrations.AddField( + model_name='event', + name='title', + field=models.CharField(default=0, max_length=250, verbose_name='Title'), + preserve_default=False, + ), + ] diff --git a/faerun_calendar/migrations/0004_auto_20220713_1123.py b/faerun_calendar/migrations/0004_auto_20220713_1123.py new file mode 100644 index 0000000..69eee4e --- /dev/null +++ b/faerun_calendar/migrations/0004_auto_20220713_1123.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:23 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0003_auto_20220713_1117'), + ] + + operations = [ + migrations.DeleteModel( + name='CalendarData', + ), + migrations.DeleteModel( + name='Event', + ), + migrations.DeleteModel( + name='MonthData', + ), + ] diff --git a/faerun_calendar/migrations/0005_calendardata_event_monthdata.py b/faerun_calendar/migrations/0005_calendardata_event_monthdata.py new file mode 100644 index 0000000..714bd1c --- /dev/null +++ b/faerun_calendar/migrations/0005_calendardata_event_monthdata.py @@ -0,0 +1,45 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('faerun_calendar', '0004_auto_20220713_1123'), + ] + + operations = [ + migrations.CreateModel( + name='CalendarData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('current_year', models.SmallIntegerField(verbose_name='CurrentYear')), + ('current_month', models.SmallIntegerField(verbose_name='CurrentMonth')), + ('current_day', models.SmallIntegerField(verbose_name='CurrentDay')), + ], + ), + migrations.CreateModel( + name='Event', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.SmallIntegerField(verbose_name='Year')), + ('month', models.SmallIntegerField(verbose_name='Month')), + ('day', models.SmallIntegerField(verbose_name='Day')), + ('time', models.TimeField(verbose_name='Time')), + ('title', models.CharField(max_length=250, verbose_name='Title')), + ('description', models.TextField(max_length=2500, verbose_name='Description')), + ], + ), + migrations.CreateModel( + name='MonthData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), + ('folkname', models.CharField(max_length=64, unique=True, verbose_name='Folkname')), + ], + ), + ] diff --git a/faerun_calendar/migrations/0006_auto_20220713_1126.py b/faerun_calendar/migrations/0006_auto_20220713_1126.py new file mode 100644 index 0000000..e46d333 --- /dev/null +++ b/faerun_calendar/migrations/0006_auto_20220713_1126.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:26 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0005_calendardata_event_monthdata'), + ] + + operations = [ + migrations.DeleteModel( + name='CalendarData', + ), + migrations.DeleteModel( + name='Event', + ), + migrations.DeleteModel( + name='MonthData', + ), + ] diff --git a/faerun_calendar/migrations/0007_calendardata_event_monthdata.py b/faerun_calendar/migrations/0007_calendardata_event_monthdata.py new file mode 100644 index 0000000..e397179 --- /dev/null +++ b/faerun_calendar/migrations/0007_calendardata_event_monthdata.py @@ -0,0 +1,45 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('faerun_calendar', '0006_auto_20220713_1126'), + ] + + operations = [ + migrations.CreateModel( + name='CalendarData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('current_year', models.SmallIntegerField(verbose_name='CurrentYear')), + ('current_month', models.SmallIntegerField(verbose_name='CurrentMonth')), + ('current_day', models.SmallIntegerField(verbose_name='CurrentDay')), + ], + ), + migrations.CreateModel( + name='Event', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.SmallIntegerField(verbose_name='Year')), + ('month', models.SmallIntegerField(verbose_name='Month')), + ('day', models.SmallIntegerField(verbose_name='Day')), + ('time', models.TimeField(verbose_name='Time')), + ('title', models.CharField(max_length=250, verbose_name='Title')), + ('description', models.TextField(max_length=2500, verbose_name='Description')), + ], + ), + migrations.CreateModel( + name='MonthData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), + ('folkname', models.CharField(max_length=64, unique=True, verbose_name='Folkname')), + ], + ), + ] diff --git a/faerun_calendar/migrations/0008_alter_monthdata_folkname.py b/faerun_calendar/migrations/0008_alter_monthdata_folkname.py new file mode 100644 index 0000000..3d0bf0e --- /dev/null +++ b/faerun_calendar/migrations/0008_alter_monthdata_folkname.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0007_calendardata_event_monthdata'), + ] + + operations = [ + migrations.AlterField( + model_name='monthdata', + name='folkname', + field=models.CharField(max_length=64, verbose_name='Folkname'), + ), + ] diff --git a/faerun_calendar/migrations/0009_alter_monthdata_folkname.py b/faerun_calendar/migrations/0009_alter_monthdata_folkname.py new file mode 100644 index 0000000..a58e52f --- /dev/null +++ b/faerun_calendar/migrations/0009_alter_monthdata_folkname.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0008_alter_monthdata_folkname'), + ] + + operations = [ + migrations.AlterField( + model_name='monthdata', + name='folkname', + field=models.CharField(blank=True, max_length=64, unique=True, verbose_name='Folkname'), + ), + ] diff --git a/faerun_calendar/migrations/0010_alter_monthdata_folkname.py b/faerun_calendar/migrations/0010_alter_monthdata_folkname.py new file mode 100644 index 0000000..fb2542d --- /dev/null +++ b/faerun_calendar/migrations/0010_alter_monthdata_folkname.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0009_alter_monthdata_folkname'), + ] + + operations = [ + migrations.AlterField( + model_name='monthdata', + name='folkname', + field=models.CharField(blank=True, max_length=64, verbose_name='Folkname'), + ), + ] diff --git a/faerun_calendar/migrations/0011_monthdata_is_oneday.py b/faerun_calendar/migrations/0011_monthdata_is_oneday.py new file mode 100644 index 0000000..0d8f363 --- /dev/null +++ b/faerun_calendar/migrations/0011_monthdata_is_oneday.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2022-07-13 12:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0010_alter_monthdata_folkname'), + ] + + operations = [ + migrations.AddField( + model_name='monthdata', + name='is_oneday', + field=models.BooleanField(default=0, verbose_name='IsOneday'), + preserve_default=False, + ), + ] diff --git a/faerun_calendar/migrations/0012_calendardata_leap_month.py b/faerun_calendar/migrations/0012_calendardata_leap_month.py new file mode 100644 index 0000000..985a9dd --- /dev/null +++ b/faerun_calendar/migrations/0012_calendardata_leap_month.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2022-07-13 12:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0011_monthdata_is_oneday'), + ] + + operations = [ + migrations.AddField( + model_name='calendardata', + name='leap_month', + field=models.SmallIntegerField(default=11, verbose_name='LeapMonth'), + preserve_default=False, + ), + ] diff --git a/faerun_calendar/migrations/0013_alter_calendardata_current_month.py b/faerun_calendar/migrations/0013_alter_calendardata_current_month.py new file mode 100644 index 0000000..995ea20 --- /dev/null +++ b/faerun_calendar/migrations/0013_alter_calendardata_current_month.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2022-07-14 07:31 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0012_calendardata_leap_month'), + ] + + operations = [ + migrations.AlterField( + model_name='calendardata', + name='current_month', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.monthdata'), + ), + ] diff --git a/faerun_calendar/migrations/0014_auto_20220714_0840.py b/faerun_calendar/migrations/0014_auto_20220714_0840.py new file mode 100644 index 0000000..443e087 --- /dev/null +++ b/faerun_calendar/migrations/0014_auto_20220714_0840.py @@ -0,0 +1,66 @@ +# Generated by Django 3.2.12 on 2022-07-14 08:40 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0013_alter_calendardata_current_month'), + ] + + operations = [ + migrations.CreateModel( + name='YearData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.SmallIntegerField(verbose_name='Year')), + ], + ), + migrations.RemoveField( + model_name='calendardata', + name='current_month', + ), + migrations.RemoveField( + model_name='calendardata', + name='current_year', + ), + migrations.RemoveField( + model_name='calendardata', + name='leap_month', + ), + migrations.RemoveField( + model_name='event', + name='month', + ), + migrations.RemoveField( + model_name='event', + name='year', + ), + migrations.AddField( + model_name='monthdata', + name='is_leap_month', + field=models.BooleanField(default=0, verbose_name='IsLeapMonth'), + preserve_default=False, + ), + migrations.CreateModel( + name='DayData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ('month', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.monthdata')), + ('year', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.yeardata')), + ], + ), + migrations.AlterField( + model_name='calendardata', + name='current_day', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.daydata'), + ), + migrations.AlterField( + model_name='event', + name='day', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.daydata'), + ), + ] diff --git a/faerun_calendar/migrations/0015_auto_20220714_0906.py b/faerun_calendar/migrations/0015_auto_20220714_0906.py new file mode 100644 index 0000000..a4204ae --- /dev/null +++ b/faerun_calendar/migrations/0015_auto_20220714_0906.py @@ -0,0 +1,40 @@ +# Generated by Django 3.2.12 on 2022-07-14 09:06 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0014_auto_20220714_0840'), + ] + + operations = [ + migrations.RemoveField( + model_name='daydata', + name='month', + ), + migrations.RemoveField( + model_name='daydata', + name='year', + ), + migrations.RemoveField( + model_name='event', + name='day', + ), + migrations.DeleteModel( + name='CalendarData', + ), + migrations.DeleteModel( + name='DayData', + ), + migrations.DeleteModel( + name='Event', + ), + migrations.DeleteModel( + name='MonthData', + ), + migrations.DeleteModel( + name='YearData', + ), + ] diff --git a/faerun_calendar/migrations/0016_initial.py b/faerun_calendar/migrations/0016_initial.py new file mode 100644 index 0000000..9747c33 --- /dev/null +++ b/faerun_calendar/migrations/0016_initial.py @@ -0,0 +1,68 @@ +# Generated by Django 3.2.12 on 2022-07-14 09:07 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('faerun_calendar', '0015_auto_20220714_0906'), + ] + + operations = [ + migrations.CreateModel( + name='DayData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ], + ), + migrations.CreateModel( + name='MonthData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), + ('folkname', models.CharField(blank=True, max_length=64, verbose_name='Folkname')), + ('is_oneday', models.BooleanField(verbose_name='IsOneday')), + ('is_leap_month', models.BooleanField(verbose_name='IsLeapMonth')), + ], + ), + migrations.CreateModel( + name='YearData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.SmallIntegerField(verbose_name='Year')), + ], + ), + migrations.CreateModel( + name='Event', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('time', models.TimeField(verbose_name='Time')), + ('title', models.CharField(max_length=250, verbose_name='Title')), + ('description', models.TextField(max_length=2500, verbose_name='Description')), + ('day', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.daydata')), + ], + ), + migrations.AddField( + model_name='daydata', + name='month', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.monthdata'), + ), + migrations.AddField( + model_name='daydata', + name='year', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.yeardata'), + ), + migrations.CreateModel( + name='CalendarData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('current_day', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.daydata')), + ], + ), + ] diff --git a/faerun_calendar/migrations/0017_auto_20220714_1136.py b/faerun_calendar/migrations/0017_auto_20220714_1136.py new file mode 100644 index 0000000..afc3283 --- /dev/null +++ b/faerun_calendar/migrations/0017_auto_20220714_1136.py @@ -0,0 +1,34 @@ +# Generated by Django 3.2.12 on 2022-07-14 11:36 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0016_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='yeardata', + name='year', + ), + migrations.AddField( + model_name='yeardata', + name='number', + field=models.SmallIntegerField(default=1, validators=[django.core.validators.RegexValidator('^-?[1-9]\\d{0,3}$', 'Year must be not zero and between -9999 and 9999')], verbose_name='Number'), + preserve_default=False, + ), + migrations.AlterField( + model_name='daydata', + name='number', + field=models.SmallIntegerField(unique=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(30)], verbose_name='Number'), + ), + migrations.AlterField( + model_name='monthdata', + name='number', + field=models.SmallIntegerField(unique=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(18)], verbose_name='Number'), + ), + ] diff --git a/faerun_calendar/migrations/0018_auto_20220714_1305.py b/faerun_calendar/migrations/0018_auto_20220714_1305.py new file mode 100644 index 0000000..86fd39d --- /dev/null +++ b/faerun_calendar/migrations/0018_auto_20220714_1305.py @@ -0,0 +1,52 @@ +# Generated by Django 3.2.12 on 2022-07-14 13:05 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0017_auto_20220714_1136'), + ] + + operations = [ + migrations.AddField( + model_name='calendardata', + name='current_month', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.monthdata'), + preserve_default=False, + ), + migrations.AddField( + model_name='calendardata', + name='current_year', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.yeardata'), + preserve_default=False, + ), + migrations.AddField( + model_name='event', + name='current_month', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.monthdata'), + preserve_default=False, + ), + migrations.AddField( + model_name='event', + name='current_year', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.yeardata'), + preserve_default=False, + ), + migrations.AlterField( + model_name='calendardata', + name='current_day', + field=models.SmallIntegerField(unique=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(30)], verbose_name='Number'), + ), + migrations.AlterField( + model_name='event', + name='day', + field=models.SmallIntegerField(unique=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(30)], verbose_name='Number'), + ), + migrations.DeleteModel( + name='DayData', + ), + ] diff --git a/faerun_calendar/migrations/0019_auto_20220714_1312.py b/faerun_calendar/migrations/0019_auto_20220714_1312.py new file mode 100644 index 0000000..0954fc4 --- /dev/null +++ b/faerun_calendar/migrations/0019_auto_20220714_1312.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.12 on 2022-07-14 13:12 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0018_auto_20220714_1305'), + ] + + operations = [ + migrations.RenameField( + model_name='event', + old_name='current_month', + new_name='month', + ), + migrations.RenameField( + model_name='event', + old_name='current_year', + new_name='year', + ), + ] diff --git a/faerun_calendar/migrations/0020_alter_event_day.py b/faerun_calendar/migrations/0020_alter_event_day.py new file mode 100644 index 0000000..3178eb3 --- /dev/null +++ b/faerun_calendar/migrations/0020_alter_event_day.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2022-11-01 13:52 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0019_auto_20220714_1312'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='day', + field=models.SmallIntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(30)], verbose_name='Number'), + ), + ] diff --git a/faerun_calendar/migrations/0021_auto_20221102_0649.py b/faerun_calendar/migrations/0021_auto_20221102_0649.py new file mode 100644 index 0000000..1250101 --- /dev/null +++ b/faerun_calendar/migrations/0021_auto_20221102_0649.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.12 on 2022-11-02 06:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0020_alter_event_day'), + ] + + operations = [ + migrations.AddField( + model_name='event', + name='is_only_for_gm', + field=models.BooleanField(default=False, verbose_name='IsOnlyForGm'), + preserve_default=False, + ), + migrations.AddField( + model_name='event', + name='is_suggested', + field=models.BooleanField(default=False, verbose_name='IsSuggested'), + preserve_default=False, + ), + ] diff --git a/faerun_calendar/models.py b/faerun_calendar/models.py index 71a8362..090a3ea 100644 --- a/faerun_calendar/models.py +++ b/faerun_calendar/models.py @@ -1,3 +1,68 @@ from django.db import models +from django.core.validators import RegexValidator +from django.core.validators import MinValueValidator +from django.core.validators import MaxValueValidator -# Create your models here. + +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') + ]) + + @property + def is_leap(self): + if self.number == 0: + return False + elif self.number % 400 == 0: + return True + elif self.number % 100 == 0: + return False + elif self.number % 4 == 0: + return True + return False + + def __str__(self): + return f'({self.number}, {self.is_leap})' + + +class MonthData(models.Model): + 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}, {self.is_leap_month})' + + +class CalendarData(models.Model): + current_day = models.SmallIntegerField('Number', unique=True, validators=[ + MinValueValidator(1), + MaxValueValidator(30), + ]) + current_month = models.ForeignKey(MonthData, on_delete=models.CASCADE) + current_year = models.ForeignKey(YearData, on_delete=models.CASCADE) + + def __str__(self): + return f'({self.current_day}, {self.current_month}, {self.current_year})' + + +class Event(models.Model): + day = models.SmallIntegerField('Number', validators=[ + MinValueValidator(1), + MaxValueValidator(30), + ]) + month = models.ForeignKey(MonthData, on_delete=models.CASCADE) + year = models.ForeignKey(YearData, on_delete=models.CASCADE) + time = models.TimeField('Time') + title = models.CharField('Title', max_length=250) + description = models.TextField('Description', max_length=2500) + is_suggested = models.BooleanField('IsSuggested') + is_only_for_gm = models.BooleanField('IsOnlyForGm') + + def __str__(self): + 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 30960ed..1ae032d 100644 --- a/faerun_calendar/static/faerun_calendar/css/main.css +++ b/faerun_calendar/static/faerun_calendar/css/main.css @@ -5,6 +5,13 @@ div.calendarpage { border-radius: 20px; } +h2.year { + text-align: center; + padding-bottom: 10px; + border-bottom: 1px solid black; + margin-bottom: 20px; +} + table.month, table.month th, table.month td { border: 1px solid white; border-collapse: collapse; @@ -12,13 +19,16 @@ table.month, table.month th, table.month td { background: gainsboro; } +table.month th { + text-align: center; +} + table.month td { text-align: right; } table.month td.current { background: dimgrey; - color: white; } table.month th.subtitle { @@ -26,14 +36,86 @@ table.month th.subtitle { font-weight: normal; } +table.month a { + text-decoration: none; + color: black; +} + +table.month td.current a { + color: white; +} + div.calendar { + column-width: 350px; +} + +div.calendar-events { display: flex; flex-flow: row wrap; justify-content: space-around; } +div.calendar-events > p, +div.calendar-error > p { + text-align: center; +} + table.month { margin: 10px; width: 350px; max-width: 350px; } + +div.event, +div.event-gm, +div.event-suggested { + border: 1px solid black; + padding: 20px; + margin: 20px; + border-radius: 10px; + width: 100%; +} + +div.event { + border: 1px solid black; +} + +div.event-gm { + border: 2px solid BlueViolet; +} + +div.event-suggested { + border: 2px solid crimson; +} + +div.event-time { + border: 1px solid black; + border-radius: 3px; + padding: 3px 5px; + margin-right: 15px; + float: left; + font-weight: bold; + background: DeepSkyBlue; + font-size: 150%; +} + +div.event-title { + font-weight: bold; + text-decoration: underline; + font-size: 200%; + margin-bottom: 10px; +} + +p.event-description { + margin: 0px; + padding: 0px; +} + +p.calendar-error { + color: crimson; + font-size: 200%; +} + +p.calendar-info { + font-size: 200%; +} diff --git a/faerun_calendar/templates/faerun_calendar/calendar.html b/faerun_calendar/templates/faerun_calendar/calendar.html deleted file mode 100644 index 992e9c8..0000000 --- a/faerun_calendar/templates/faerun_calendar/calendar.html +++ /dev/null @@ -1,22 +0,0 @@ -
- {% include 'faerun_calendar/month.html' with title="Хаммер" subtitle="Глубокозимье" %} - {% include 'faerun_calendar/month.html' with title="Зимний солнцеворот" subtitle="Мертвозимье" oneday=1 %} - {% include 'faerun_calendar/month.html' with title="Альтурик" subtitle="Коготь зимы" %} - {% include 'faerun_calendar/month.html' with title="Чез" subtitle="Коготь закатов" %} - {% include 'faerun_calendar/month.html' with title="Тарсак" subtitle="Коготь бурь" %} - {% include 'faerun_calendar/month.html' with title="Зеленотравье" oneday=1 %} - - {% include 'faerun_calendar/month.html' with title="Миртул" subtitle="Таяние" %} - {% include 'faerun_calendar/month.html' with title="Кайторн" subtitle="Время цветов" %} - {% include 'faerun_calendar/month.html' with title="Флеймрул" subtitle="Разгар лета" %} - {% include 'faerun_calendar/month.html' with title="Летний солнцеворот" oneday=1 %} - {% include 'faerun_calendar/month.html' with title="Шильдмит*" oneday=1 %} - {% include 'faerun_calendar/month.html' with title="Элесис" subtitle="Солнцестояние" %} - - {% include 'faerun_calendar/month.html' with title="Элейнт" subtitle="Увядание" %} - {% include 'faerun_calendar/month.html' with title="Праздник урожая" oneday=1 %} - {% include 'faerun_calendar/month.html' with title="Марпенот" subtitle="Листопад" %} - {% include 'faerun_calendar/month.html' with title="Уктар" subtitle="Перегной" %} - {% include 'faerun_calendar/month.html' with title="Пир луны" oneday=1 %} - {% include 'faerun_calendar/month.html' with title="Найтал" subtitle="Спячка" %} -
diff --git a/faerun_calendar/templates/faerun_calendar/index.html b/faerun_calendar/templates/faerun_calendar/index.html index cc3a8f3..8a179e5 100644 --- a/faerun_calendar/templates/faerun_calendar/index.html +++ b/faerun_calendar/templates/faerun_calendar/index.html @@ -12,8 +12,53 @@ {% block content %}
-

Календарь

- {% include 'faerun_calendar/calendar.html' %} + {% if type == 'year' %} +

Календарь

+

Год {{year_data.number}}-й

+ +
+ {% for month in month_data %} + {% if not month.is_leap_month or year_data.is_leap %} + {% include 'faerun_calendar/month.html' with month=month calendar_data=calendar_data month_days=month_days events=events %} + {% endif %} + {% endfor %} +
+ {% elif type == 'day' %} +

Календарь — События

+

Год {{year_data.number}}-й, {{month_data.name}}{% if not month_data.is_oneday %}, день {{day}}-й{% endif %}

+ +
+ {% if events.count == 0 %} +

Событий нет

+ {% else %} + {% for event in events %} + {% if event.is_suggested %} +
+ {% elif event.is_only_for_gm %} +
+ {% else %} +
+ {% endif %} + +
{{event.time}}
+
{{event.title}}
+

{{event.description}}

+
+ {% endfor %} + {% endif %} +
+ {% elif type == 'error' %} +

Календарь — Ошибка

+ +
+ {% if error_type == 'year' %} +

Неверный год

+ {% elif error_type == 'month' %} +

Неверный месяц

+ {% elif error_type == 'day' %} +

Неверный день

+ {% endif %} +
+ {% endif %}
{% endblock %} - diff --git a/faerun_calendar/templates/faerun_calendar/month.html b/faerun_calendar/templates/faerun_calendar/month.html index 9dd9a39..3d6c88c 100644 --- a/faerun_calendar/templates/faerun_calendar/month.html +++ b/faerun_calendar/templates/faerun_calendar/month.html @@ -1,53 +1,38 @@
- + - {% if subtitle %} - + {% if month.folkname %} + {% endif %} - {% if oneday != 1 %} - - - - - - - - - - - - - - - - - - - - - - {% if title == "Миртул" %} - - {% else %} - - {% endif %} - - - - - - - - - - - - - - + {% if not month.is_oneday %} + {% for day in month_days %} + {% if forloop.counter0|divisibleby:10 %} + + {% endif %} + + {% if day == calendar_data.current_day and year_data == calendar_data.current_year and month == calendar_data.current_month %} + + + {% if forloop.counter|divisibleby:10 %} + + {% endif %} + {% endfor %} {% endif %}
{{title}} + {% if not month.is_oneday %} + {{month.name}} + {% else %} + {{month.name}} + {% endif %} +
{{subtitle}}{{month.folkname}}
12345678910
1112131415161718191920
21222324252627282930
+ {% else %} + + {% endif %} + + {{day}} + +
diff --git a/faerun_calendar/tests.py b/faerun_calendar/tests.py index 7ce503c..aca85a5 100644 --- a/faerun_calendar/tests.py +++ b/faerun_calendar/tests.py @@ -1,3 +1,43 @@ from django.test import TestCase +from .models import FaerunDate + + +class FaerunDateTestCase(TestCase): + class TestDate: + def __init__(self, date: FaerunDate, repr: str, is_leap_year: bool, is_valid: bool): + self.date = date + self.repr = repr + self.is_leap_year = is_leap_year + self.is_valid = is_valid + + def setUp(self): + self.dates = ( + FaerunDateTestCase.TestDate(FaerunDate(0, 0, 0), 'FaerunDate(0, 0, 0)', False, False), + FaerunDateTestCase.TestDate(FaerunDate(1, -1, 1), 'FaerunDate(1, -1, 1)', False, False), + FaerunDateTestCase.TestDate(FaerunDate(1, 1, 1), 'FaerunDate(1, 1, 1)', False, True), + FaerunDateTestCase.TestDate(FaerunDate(4, 1, 1), 'FaerunDate(4, 1, 1)', True, True), + FaerunDateTestCase.TestDate(FaerunDate(4, -1, 1), 'FaerunDate(4, -1, 1)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 0, 1), 'FaerunDate(4, 0, 1)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 19, 1), 'FaerunDate(4, 19, 1)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 1, -1), 'FaerunDate(4, 1, -1)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 1, 0), 'FaerunDate(4, 1, 0)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 1, 31), 'FaerunDate(4, 1, 31)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 2, 2), 'FaerunDate(4, 2, 2)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 1, 2), 'FaerunDate(4, 1, 2)', True, True), + FaerunDateTestCase.TestDate(FaerunDate(1, 11, 1), 'FaerunDate(1, 11, 1)', False, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 11, 1), 'FaerunDate(4, 11, 1)', True, True), + ) + + def test_repr(self): + for date in self.dates: + self.assertEqual(date.date.__repr__(), date.repr) + + def test_leap(self): + for date in self.dates: + self.assertEqual(date.date.is_leap_year, date.is_leap_year, date.date.__repr__()) + + def test_valid(self): + for date in self.dates: + self.assertEqual(date.date.is_valid, date.is_valid, date.date.__repr__()) + -# Create your tests here. diff --git a/faerun_calendar/urls.py b/faerun_calendar/urls.py index 4c9189f..facba81 100644 --- a/faerun_calendar/urls.py +++ b/faerun_calendar/urls.py @@ -4,5 +4,7 @@ from . import views urlpatterns = [ path('', views.index, name='index'), + path('', views.year_page, name='index'), + path('//', views.day_page, name='index'), ] diff --git a/faerun_calendar/views.py b/faerun_calendar/views.py index 7436291..723087d 100644 --- a/faerun_calendar/views.py +++ b/faerun_calendar/views.py @@ -1,6 +1,111 @@ from django.shortcuts import render +from django.http import HttpResponseNotFound + +from .models import YearData +from .models import MonthData +from .models import CalendarData +from .models import Event + + +def day_page(request, year: int, month: int, day: int): + params = None + + select_suggested = False + select_only_for_gm = False + + if not params: + try: + year_data = YearData.objects.get(number=year) + except YearData.DoesNotExist: + params = {'type': 'error', 'error_type': 'year'} + + if not params: + try: + year_id = getattr(year_data, 'id') + except AttributeError: + params = {'type': 'error', 'error_type': 'year'} + + if not params: + try: + month_data = MonthData.objects.get(number=month) + except MonthData.DoesNotExist: + params = {'type': 'error', 'error_type': 'month'} + + if not params: + try: + month_id = getattr(month_data, 'id') + except AttributeError: + params = {'type': 'error', 'error_type': 'month'} + + if not params: + try: + is_leap = getattr(year_data, 'is_leap') + except AttributeError: + params = {'type': 'error', 'error_type': 'year'} + else: + try: + is_leap_month = getattr(month_data, 'is_leap_month') + except AttributeError: + params = {'type': 'error', 'error_type': 'month'} + else: + if not is_leap and is_leap_month: + params = {'type': 'error', 'error_type': 'month'} + + if not params: + try: + events = Event.objects.filter(year=year_id, month=month_id, day=day, + is_suggested=select_suggested, is_only_for_gm=select_only_for_gm + ).order_by('time') + except Event.DoesNotExist: + params = {'type': 'error', 'error_type': 'events'} + + if not params: + try: + is_oneday = getattr(month_data, 'is_oneday') + except AttributeError: + params = {'type': 'error', 'error_type': 'month'} + else: + if is_oneday and day != 1 or not 1 <= day <= 30: + params = {'type': 'error', 'error_type': 'day'} + + if not params: + params = { + 'type': 'day', + 'year_data': year_data, + 'month_data': month_data, + 'day': day, + 'events': events, + } + + return render(request, 'faerun_calendar/index.html', params) + + +def year_page(request, year: int): + try: + year_data = YearData.objects.get(number=year) + except YearData.DoesNotExist: + return HttpResponseNotFound('

404 Not Found

') + + month_data = MonthData.objects.all() + calendar_data = CalendarData.objects.first() + events = Event.objects.all() + + params = { + 'type': 'year', + 'calendar_data': calendar_data, + 'year_data': year_data, + 'month_data': month_data, + 'month_days': tuple(i+1 for i in range(30)), + 'events': events, + } + + return render(request, 'faerun_calendar/index.html', params) def index(request): - return render(request, 'faerun_calendar/index.html') + try: + current_year = getattr(getattr(CalendarData.objects.first(), 'current_year'), 'number') + except AttributeError: + current_year = 0 + return year_page(request, current_year) diff --git a/links/migrations/0001_initial.py b/links/migrations/0001_initial.py new file mode 100644 index 0000000..e9d62ce --- /dev/null +++ b/links/migrations/0001_initial.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.12 on 2022-07-12 13:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Link', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('url', models.CharField(max_length=250, verbose_name='URL')), + ('text', models.CharField(max_length=250, verbose_name='Text')), + ], + ), + ] diff --git a/links/migrations/0002_link_order.py b/links/migrations/0002_link_order.py new file mode 100644 index 0000000..e41e603 --- /dev/null +++ b/links/migrations/0002_link_order.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2022-07-12 13:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('links', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='link', + name='order', + field=models.SmallIntegerField(default=1, verbose_name='Order'), + preserve_default=False, + ), + ] diff --git a/links/views.py b/links/views.py index 58d2aa4..f03a8a1 100644 --- a/links/views.py +++ b/links/views.py @@ -5,4 +5,4 @@ from .models import Link def index(request): links = Link.objects.order_by('order') - return render(request, 'links/index.html', {'links': links}) \ No newline at end of file + return render(request, 'links/index.html', {'links': links})