diff --git a/DjangoFiles/Administration/admin_tenant.py b/DjangoFiles/Administration/admin_tenant.py index 694323f..08157bf 100644 --- a/DjangoFiles/Administration/admin_tenant.py +++ b/DjangoFiles/Administration/admin_tenant.py @@ -1 +1,45 @@ from django.contrib import admin +from django.contrib.admin import AdminSite +from solo.admin import SingletonModelAdmin + +from BaseBillet.models import Configuration, Event, OptionGenerale + + +class StaffAdminSite(AdminSite): + site_header = "TiBillet Staff Admin" + site_title = "TiBillet Staff Admin" + site_url = '/' + + def has_permission(self, request): + return request.user.is_superuser + + +staff_admin_site = StaffAdminSite(name='staff_admin') + + +######################################################################## + + +staff_admin_site.register(Configuration, SingletonModelAdmin) + + +class EventAdmin(admin.ModelAdmin): + list_display = ( + 'name', + 'reservations', + 'datetime', + ) + +staff_admin_site.register(Event, EventAdmin) + + +class OptionGeneraleAdmin(admin.ModelAdmin): + list_display = ( + 'name', + 'poids', + ) + list_editable = ( + 'poids', + ) + +staff_admin_site.register(OptionGenerale, OptionGeneraleAdmin) diff --git a/DjangoFiles/Administration/management/commands/create_demo_tenant.py b/DjangoFiles/Administration/management/commands/createdemo.py similarity index 100% rename from DjangoFiles/Administration/management/commands/create_demo_tenant.py rename to DjangoFiles/Administration/management/commands/createdemo.py diff --git a/DjangoFiles/AuthBillet/__init__.py b/DjangoFiles/AuthBillet/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/DjangoFiles/AuthBillet/admin.py b/DjangoFiles/AuthBillet/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/DjangoFiles/AuthBillet/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/DjangoFiles/AuthBillet/apps.py b/DjangoFiles/AuthBillet/apps.py new file mode 100644 index 0000000..7e9508d --- /dev/null +++ b/DjangoFiles/AuthBillet/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class AuthbilletConfig(AppConfig): + name = 'AuthBillet' diff --git a/DjangoFiles/AuthBillet/migrations/__init__.py b/DjangoFiles/AuthBillet/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/DjangoFiles/AuthBillet/models.py b/DjangoFiles/AuthBillet/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/DjangoFiles/AuthBillet/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/DjangoFiles/AuthBillet/tests.py b/DjangoFiles/AuthBillet/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/DjangoFiles/AuthBillet/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/DjangoFiles/AuthBillet/views.py b/DjangoFiles/AuthBillet/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/DjangoFiles/AuthBillet/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/DjangoFiles/BaseBillet/migrations/0001_initial.py b/DjangoFiles/BaseBillet/migrations/0001_initial.py new file mode 100644 index 0000000..39771b9 --- /dev/null +++ b/DjangoFiles/BaseBillet/migrations/0001_initial.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2 on 2021-06-21 14:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Configuration', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('organisation', models.CharField(max_length=50)), + ('short_description', models.CharField(max_length=250)), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/DjangoFiles/BaseBillet/migrations/0002_auto_20210621_1926.py b/DjangoFiles/BaseBillet/migrations/0002_auto_20210621_1926.py new file mode 100644 index 0000000..19b595d --- /dev/null +++ b/DjangoFiles/BaseBillet/migrations/0002_auto_20210621_1926.py @@ -0,0 +1,28 @@ +# Generated by Django 2.2 on 2021-06-21 15:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('BaseBillet', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='configuration', + name='facebook', + field=models.URLField(blank=True, null=True), + ), + migrations.AddField( + model_name='configuration', + name='instagram', + field=models.URLField(blank=True, null=True), + ), + migrations.AddField( + model_name='configuration', + name='twitter', + field=models.URLField(blank=True, null=True), + ), + ] diff --git a/DjangoFiles/BaseBillet/migrations/0003_event.py b/DjangoFiles/BaseBillet/migrations/0003_event.py new file mode 100644 index 0000000..59c0c49 --- /dev/null +++ b/DjangoFiles/BaseBillet/migrations/0003_event.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2 on 2021-06-21 15:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('BaseBillet', '0002_auto_20210621_1926'), + ] + + operations = [ + migrations.CreateModel( + name='Event', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ('short_description', models.CharField(max_length=250)), + ('long_description', models.TextField(blank=True, null=True)), + ('datetime', models.DateTimeField()), + ], + ), + ] diff --git a/DjangoFiles/BaseBillet/migrations/0004_auto_20210621_2059.py b/DjangoFiles/BaseBillet/migrations/0004_auto_20210621_2059.py new file mode 100644 index 0000000..e22449a --- /dev/null +++ b/DjangoFiles/BaseBillet/migrations/0004_auto_20210621_2059.py @@ -0,0 +1,35 @@ +# Generated by Django 2.2 on 2021-06-21 16:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('BaseBillet', '0003_event'), + ] + + operations = [ + migrations.AlterModelOptions( + name='event', + options={'ordering': ('datetime',), 'verbose_name': 'Evenement', 'verbose_name_plural': 'Evenements'}, + ), + migrations.AddField( + model_name='configuration', + name='adresse', + field=models.CharField(default='route de la joie', max_length=250), + preserve_default=False, + ), + migrations.AddField( + model_name='configuration', + name='email', + field=models.EmailField(default='demo@demo.demo', max_length=254), + preserve_default=False, + ), + migrations.AddField( + model_name='configuration', + name='phone', + field=models.CharField(default='-262 6 121212', max_length=20), + preserve_default=False, + ), + ] diff --git a/DjangoFiles/BaseBillet/migrations/0005_auto_20210621_2119.py b/DjangoFiles/BaseBillet/migrations/0005_auto_20210621_2119.py new file mode 100644 index 0000000..001d383 --- /dev/null +++ b/DjangoFiles/BaseBillet/migrations/0005_auto_20210621_2119.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2 on 2021-06-21 17:19 + +from django.db import migrations +import stdimage.models +import stdimage.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('BaseBillet', '0004_auto_20210621_2059'), + ] + + operations = [ + migrations.AddField( + model_name='configuration', + name='img', + field=stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)]), + ), + migrations.AddField( + model_name='event', + name='img', + field=stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)]), + ), + ] diff --git a/DjangoFiles/BaseBillet/models.py b/DjangoFiles/BaseBillet/models.py index 71a8362..1150f03 100644 --- a/DjangoFiles/BaseBillet/models.py +++ b/DjangoFiles/BaseBillet/models.py @@ -1,3 +1,116 @@ from django.db import models # Create your models here. +from django.db.models.signals import post_save +from django.dispatch import receiver +from solo.models import SingletonModel +from django.utils.translation import ugettext_lazy as _ +from stdimage import StdImageField +from stdimage.validators import MaxSizeValidator + + +class OptionGenerale(models.Model): + name = models.CharField(max_length=30) + poids = models.PositiveSmallIntegerField(default=0, verbose_name=_("Poids")) + + def __str__(self): + return self.name + + class Meta: + ordering = ('poids',) + verbose_name = _('Options Generales') + verbose_name_plural = _('Options Generales') + +@receiver(post_save, sender=OptionGenerale) +def poids_option_generaler(sender, instance: OptionGenerale, created, **kwargs): + if created: + # poids d'apparition + if instance.poids == 0: + instance.poids = len(OptionGenerale.objects.all()) + 1 + + instance.save() + + + +class Configuration(SingletonModel): + organisation = models.CharField(max_length=50) + short_description = models.CharField(max_length=250) + + adresse = models.CharField(max_length=250) + phone = models.CharField(max_length=20) + email = models.EmailField() + + twitter = models.URLField(blank=True, null=True) + facebook = models.URLField(blank=True, null=True) + instagram = models.URLField(blank=True, null=True) + + img = StdImageField(upload_to='images/', + null=True, blank=True, + validators=[MaxSizeValidator(1920, 1920)], + variations={ + 'thumbnail': (1200, 1200), + }, delete_orphans=True) + + mollie_api_key = models.CharField(max_length=50, + blank=True, null=True) + + reservation_par_user_max = models.PositiveSmallIntegerField(default=6) + + jauge_max = models.PositiveSmallIntegerField() + + option_generale_radio = models.ManyToManyField(OptionGenerale, + blank=True, + related_name="radiobutton") + + option_generale_checkbox = models.ManyToManyField(OptionGenerale, + blank=True, + related_name="checkbox") + + + + +class Event(models.Model): + name = models.CharField(max_length=200) + short_description = models.CharField(max_length=250) + long_description = models.TextField(blank=True, null=True) + datetime = models.DateTimeField() + + img = StdImageField(upload_to='images/', + null=True, blank=True, + validators=[MaxSizeValidator(1920, 1920)], + variations={ + 'thumbnail': (500, 500), + }, delete_orphans=True) + + reservations = models.PositiveSmallIntegerField(default=0) + + def complet(self): + # TODO: Benchmarker et tester si c'est pas mieux dans template + if self.reservations >= Configuration.get_solo().jauge_max: + return True + else: + return False + + class Meta: + ordering = ('datetime',) + verbose_name = _('Evenement') + verbose_name_plural = _('Evenements') + + + +class reservation(models.Model): + event = models.ForeignKey(Event, + on_delete=models.CASCADE, + related_name="reservation") + + ANNULEE, NON_VALIDEE, VALIDEE, PAYEE = 'NAN', 'NOV', 'VAL', 'PAY' + TYPE_CHOICES = [ + (ANNULEE, _('Annulée')), + (NON_VALIDEE, _('Email non validé')), + (VALIDEE, _('Validée')), + (PAYEE, _('Payée')), + ] + status = models.CharField(max_length=3, choices=TYPE_CHOICES, default=NON_VALIDEE, + verbose_name=_("Status de la réservation")) + + qty = models.IntegerField() \ No newline at end of file diff --git a/DjangoFiles/BaseBillet/static/html5up-massively/assets/css/main.css b/DjangoFiles/BaseBillet/static/html5up-massively/assets/css/main.css index 15763ca..24a12bf 100644 --- a/DjangoFiles/BaseBillet/static/html5up-massively/assets/css/main.css +++ b/DjangoFiles/BaseBillet/static/html5up-massively/assets/css/main.css @@ -3234,7 +3234,7 @@ input, select, textarea { width: 100%; height: 100%; background-color: #212931; - background-image: url("../../images/overlay.png"), linear-gradient(0deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)), url("../../images/bg.jpg"); + /*background-image: url("../../images/overlay.png"), linear-gradient(0deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)), url("../../images/bg.jpg");*/ background-size: auto, auto, 100% auto; background-position: center, center, top center; background-repeat: repeat, no-repeat, no-repeat; diff --git a/DjangoFiles/BaseBillet/static/html5up-massively/assets/sass/layout/_wrapper.scss b/DjangoFiles/BaseBillet/static/html5up-massively/assets/sass/layout/_wrapper.scss index 568c0b0..542fad3 100644 --- a/DjangoFiles/BaseBillet/static/html5up-massively/assets/sass/layout/_wrapper.scss +++ b/DjangoFiles/BaseBillet/static/html5up-massively/assets/sass/layout/_wrapper.scss @@ -19,7 +19,7 @@ width: 100%; height: 100%; background-color: _palette(wrapper-bg); - background-image: url('../../images/overlay.png'), linear-gradient(0deg, rgba(0,0,0,0.1), rgba(0,0,0,0.1)), url('../../images/bg.jpg'); + //background-image: url('../../images/overlay.png'), linear-gradient(0deg, rgba(0,0,0,0.1), rgba(0,0,0,0.1)), url('../../images/bg.jpg'); background-size: auto, auto, 100% auto; background-position: center, center, top center; background-repeat: repeat, no-repeat, no-repeat; diff --git a/DjangoFiles/BaseBillet/templates/html5up-massively/base.html b/DjangoFiles/BaseBillet/templates/html5up-massively/base.html new file mode 100644 index 0000000..1af39fe --- /dev/null +++ b/DjangoFiles/BaseBillet/templates/html5up-massively/base.html @@ -0,0 +1,133 @@ +{% block header %} + + + +
+