Appli QrCode

This commit is contained in:
Jonas 12t 2021-09-29 19:57:49 +04:00
parent b242129b49
commit 3ad6135f60
91 changed files with 365 additions and 2102 deletions

View File

@ -4,7 +4,7 @@ from django.contrib.auth.models import Group
from solo.admin import SingletonModelAdmin from solo.admin import SingletonModelAdmin
from AuthBillet.models import HumanUser, SuperHumanUser, TermUser from AuthBillet.models import HumanUser, SuperHumanUser, TermUser
from BaseBillet.models import Configuration, Event, OptionGenerale, Article, Billet, Reservation, LigneArticle, TarifsAdhesion from BaseBillet.models import Configuration, Event, OptionGenerale, Article, Billet, Reservation, LigneArticle
from django.contrib.auth.admin import UserAdmin from django.contrib.auth.admin import UserAdmin
from Customers.models import Client from Customers.models import Client
@ -150,15 +150,6 @@ class ConfigurationAdmin(SingletonModelAdmin):
staff_admin_site.register(Configuration, ConfigurationAdmin) staff_admin_site.register(Configuration, ConfigurationAdmin)
class TarifsAdhesionAdmin(admin.ModelAdmin):
list_display = (
'name',
'tarif'
)
list_editable = ('tarif',)
ordering = ('tarif',)
staff_admin_site.register(TarifsAdhesion, TarifsAdhesionAdmin)
class EventAdmin(admin.ModelAdmin): class EventAdmin(admin.ModelAdmin):

View File

@ -8,6 +8,20 @@ class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
# create your public tenant
tenant = Client(schema_name='public',
name='Schemas Inc.',
paid_until='2016-12-05',
on_trial=False)
tenant.save()
# Add one or more domains for the tenant
domain = Domain()
domain.domain = f'{os.getenv("DOMAIN")}' # don't add your port or www here! on a local server you'll want to use localhost here
domain.tenant = tenant
domain.is_primary = True
domain.save()
tenant_demo = Client.objects.get_or_create(schema_name="demo", tenant_demo = Client.objects.get_or_create(schema_name="demo",
name="demo", name="demo",
paid_until='2200-12-05', paid_until='2200-12-05',

View File

@ -1,4 +1,4 @@
# Generated by Django 2.2 on 2021-09-27 12:56 # Generated by Django 2.2 on 2021-09-27 13:39
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
@ -12,7 +12,7 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
('auth', '0011_update_proxy_permissions'), ('auth', '0011_update_proxy_permissions'),
('Customers', '0003_auto_20210623_1351'), ('Customers', '0001_initial'),
] ]
operations = [ operations = [
@ -28,7 +28,7 @@ class Migration(migrations.Migration):
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('uuid_user', models.UUIDField(default=uuid.uuid4, editable=False)), ('uuid', models.UUIDField(default=uuid.uuid4, editable=False)),
('email', models.EmailField(max_length=254, unique=True, verbose_name='email')), ('email', models.EmailField(max_length=254, unique=True, verbose_name='email')),
('username', models.CharField(blank=True, max_length=200, null=True)), ('username', models.CharField(blank=True, max_length=200, null=True)),
('phone', models.CharField(blank=True, max_length=20, null=True)), ('phone', models.CharField(blank=True, max_length=20, null=True)),

View File

@ -48,7 +48,7 @@ class TibilletUser(AbstractUser):
#TODO regarder du coté du dashboard de jet, ça plante avec uuid ! #TODO regarder du coté du dashboard de jet, ça plante avec uuid !
# uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True, db_index=True) # uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True, db_index=True)
uuid_user = models.UUIDField(default=uuid.uuid4, editable=False) uuid = models.UUIDField(default=uuid.uuid4, editable=False)
USERNAME_FIELD = 'email' USERNAME_FIELD = 'email'
REQUIRED_FIELDS = [] # removes email from REQUIRED_FIELDS REQUIRED_FIELDS = [] # removes email from REQUIRED_FIELDS
@ -157,6 +157,7 @@ class TermUser(TibilletUser):
# Si création : # Si création :
if not self.pk: if not self.pk:
self.espece = TibilletUser.TYPE_TERM self.espece = TibilletUser.TYPE_TERM
self.email = self.email.lower()
super().save(*args, **kwargs) super().save(*args, **kwargs)
@ -187,6 +188,7 @@ class HumanUser(TibilletUser):
self.is_staff = False self.is_staff = False
self.is_superuser = False self.is_superuser = False
self.email = self.email.lower()
super().save(*args, **kwargs) super().save(*args, **kwargs)
@ -218,6 +220,7 @@ class SuperHumanUser(TibilletUser):
self.is_staff = True self.is_staff = True
self.is_superuser = False self.is_superuser = False
self.email = self.email.lower()
super().save(*args, **kwargs) super().save(*args, **kwargs)

View File

@ -1,9 +1,11 @@
# Generated by Django 2.2 on 2021-06-23 09:09 # Generated by Django 2.2 on 2021-09-27 13:39
from django.conf import settings
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
import stdimage.models import stdimage.models
import stdimage.validators import stdimage.validators
import uuid
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -11,9 +13,35 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('PaiementStripe', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
] ]
operations = [ operations = [
migrations.CreateModel(
name='Article',
fields=[
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('name', models.CharField(blank=True, max_length=50, null=True)),
('prix', models.FloatField()),
('stock', models.SmallIntegerField(blank=True, null=True)),
('reservation_par_user_max', models.PositiveSmallIntegerField(default=10)),
('publish', models.BooleanField(default=False)),
('img', stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)], verbose_name='Image')),
('categorie_article', models.CharField(choices=[('B', 'Billet'), ('P', "Pack d'objets"), ('R', 'Recharge cashless'), ('T', 'Vetement'), ('M', 'Merchandasing'), ('A', 'Adhésion')], default='B', max_length=3, verbose_name="Type d'article")),
('id_product_stripe', models.CharField(blank=True, max_length=30, null=True)),
('id_price_stripe', models.CharField(blank=True, max_length=30, null=True)),
],
),
migrations.CreateModel(
name='Billet',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(blank=True, max_length=50, null=True)),
('prix', models.FloatField()),
('reservation_par_user_max', models.PositiveSmallIntegerField(default=6)),
],
),
migrations.CreateModel( migrations.CreateModel(
name='Event', name='Event',
fields=[ fields=[
@ -24,6 +52,8 @@ class Migration(migrations.Migration):
('datetime', models.DateTimeField()), ('datetime', models.DateTimeField()),
('img', stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)])), ('img', stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)])),
('reservations', models.PositiveSmallIntegerField(default=0)), ('reservations', models.PositiveSmallIntegerField(default=0)),
('articles', models.ManyToManyField(to='BaseBillet.Article')),
('billets', models.ManyToManyField(to='BaseBillet.Billet')),
], ],
options={ options={
'verbose_name': 'Evenement', 'verbose_name': 'Evenement',
@ -45,12 +75,48 @@ class Migration(migrations.Migration):
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='reservation', name='TarifsAdhesion',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('status', models.CharField(choices=[('NAN', 'Annulée'), ('NOV', 'Email non validé'), ('VAL', 'Validée'), ('PAY', 'Payée')], default='NOV', max_length=3, verbose_name='Status de la réservation')), ('name', models.CharField(max_length=30)),
('qty', models.IntegerField()), ('tarif', models.FloatField()),
('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reservation', to='BaseBillet.Event')), ],
options={
'ordering': ('-tarif',),
},
),
migrations.CreateModel(
name='VAT',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('percent', models.FloatField(verbose_name='Taux de TVA (%)')),
],
options={
'verbose_name': 'TVA',
'verbose_name_plural': 'TVA',
},
),
migrations.CreateModel(
name='Reservation',
fields=[
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, primary_key=True, serialize=False)),
('status', models.CharField(choices=[('NAN', 'Annulée'), ('MNV', 'Email non validé'), ('NPA', 'Non payée'), ('VAL', 'Validée'), ('PAY', 'Payée')], default='NPA', max_length=3, verbose_name='Status de la réservation')),
('event', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='reservation', to='BaseBillet.Event')),
('options', models.ManyToManyField(to='BaseBillet.OptionGenerale')),
('user_commande', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='LigneArticle',
fields=[
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, primary_key=True, serialize=False)),
('qty', models.SmallIntegerField()),
('reste', models.SmallIntegerField()),
('datetime', models.DateTimeField(auto_now=True)),
('article', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Article')),
('billet', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Billet')),
('paiement_stripe', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='PaiementStripe.Paiement_stripe')),
('reservation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation')),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -62,13 +128,22 @@ class Migration(migrations.Migration):
('adresse', models.CharField(max_length=250)), ('adresse', models.CharField(max_length=250)),
('phone', models.CharField(max_length=20)), ('phone', models.CharField(max_length=20)),
('email', models.EmailField(max_length=254)), ('email', models.EmailField(max_length=254)),
('site_web', models.URLField(blank=True, null=True)),
('twitter', models.URLField(blank=True, null=True)), ('twitter', models.URLField(blank=True, null=True)),
('facebook', models.URLField(blank=True, null=True)), ('facebook', models.URLField(blank=True, null=True)),
('instagram', models.URLField(blank=True, null=True)), ('instagram', models.URLField(blank=True, null=True)),
('img', stdimage.models.StdImageField(blank=True, null=True, upload_to='images/')), ('adhesion_obligatoire', models.BooleanField(default=False)),
('cadeau_adhesion', models.FloatField(default=0, help_text="Recharge cadeau a l'adhésion")),
('carte_restaurant', stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)], verbose_name='Carte du restaurant')),
('img', stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', verbose_name='Background')),
('mollie_api_key', models.CharField(blank=True, max_length=50, null=True)), ('mollie_api_key', models.CharField(blank=True, max_length=50, null=True)),
('reservation_par_user_max', models.PositiveSmallIntegerField(default=6)), ('stripe_api_key', models.CharField(blank=True, max_length=110, null=True)),
('stripe_test_api_key', models.CharField(blank=True, max_length=110, null=True)),
('stripe_mode_test', models.BooleanField(default=True)),
('activer_billetterie', models.BooleanField(default=True)),
('jauge_max', models.PositiveSmallIntegerField(default=50)), ('jauge_max', models.PositiveSmallIntegerField(default=50)),
('server_cashless', models.URLField(blank=True, max_length=300, null=True, verbose_name='Adresse du serveur Cashless')),
('key_cashless', models.CharField(blank=True, max_length=41, null=True, verbose_name="Clé d'API du serveur cashless")),
('option_generale_checkbox', models.ManyToManyField(blank=True, related_name='checkbox', to='BaseBillet.OptionGenerale')), ('option_generale_checkbox', models.ManyToManyField(blank=True, related_name='checkbox', to='BaseBillet.OptionGenerale')),
('option_generale_radio', models.ManyToManyField(blank=True, related_name='radiobutton', to='BaseBillet.OptionGenerale')), ('option_generale_radio', models.ManyToManyField(blank=True, related_name='radiobutton', to='BaseBillet.OptionGenerale')),
], ],
@ -76,4 +151,9 @@ class Migration(migrations.Migration):
'abstract': False, 'abstract': False,
}, },
), ),
migrations.AddField(
model_name='article',
name='vat',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.VAT', verbose_name='TVA'),
),
] ]

View File

@ -1,73 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 12:25
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import stdimage.models
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('BaseBillet', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Article',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(blank=True, max_length=50, null=True)),
('prix', models.FloatField()),
],
),
migrations.CreateModel(
name='Billet',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(blank=True, max_length=50, null=True)),
('prix', models.FloatField()),
],
),
migrations.RemoveField(
model_name='reservation',
name='id',
),
migrations.RemoveField(
model_name='reservation',
name='qty',
),
migrations.AddField(
model_name='reservation',
name='user_commande',
field=models.ForeignKey(default=False, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
preserve_default=False,
),
migrations.AddField(
model_name='reservation',
name='uuid',
field=models.UUIDField(db_index=True, default=False, primary_key=True, serialize=False, unique=True),
preserve_default=False,
),
migrations.AlterField(
model_name='configuration',
name='img',
field=stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', verbose_name='Background'),
),
migrations.CreateModel(
name='LigneArticle',
fields=[
('uuid', models.UUIDField(db_index=True, primary_key=True, serialize=False, unique=True)),
('qty', models.SmallIntegerField()),
('reste', models.SmallIntegerField()),
('articles', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Article')),
('reservation', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation')),
],
),
migrations.AddField(
model_name='event',
name='articles',
field=models.ManyToManyField(to='BaseBillet.Article', verbose_name='Articles et billets'),
),
]

View File

@ -1,4 +1,4 @@
# Generated by Django 2.2 on 2021-09-25 10:15 # Generated by Django 2.2 on 2021-09-27 13:59
from django.db import migrations from django.db import migrations
@ -6,12 +6,12 @@ from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('QrcodeCashless', '0005_detail_base_url'), ('BaseBillet', '0001_initial'),
] ]
operations = [ operations = [
migrations.RemoveField( migrations.RemoveField(
model_name='cartecashless', model_name='lignearticle',
name='origine', name='reste',
), ),
] ]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 12:27
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0002_auto_20210629_1625'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
]

View File

@ -1,4 +1,4 @@
# Generated by Django 2.2 on 2021-09-24 12:11 # Generated by Django 2.2 on 2021-09-27 14:24
from django.db import migrations from django.db import migrations
@ -6,11 +6,11 @@ from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('PaiementStripe', '0005_auto_20210924_1611'), ('BaseBillet', '0002_remove_lignearticle_reste'),
] ]
operations = [ operations = [
migrations.DeleteModel( migrations.DeleteModel(
name='Configuration_stripe', name='TarifsAdhesion',
), ),
] ]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 12:27
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0003_auto_20210629_1627'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 12:29
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0004_auto_20210629_1627'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
migrations.AlterField(
model_name='lignearticle',
name='uuid',
field=models.UUIDField(db_index=True, primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='reservation',
name='uuid',
field=models.UUIDField(db_index=True, primary_key=True, serialize=False),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 12:29
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0005_auto_20210629_1629'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 12:33
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0006_auto_20210629_1629'),
]
operations = [
migrations.AddField(
model_name='reservation',
name='options',
field=models.ManyToManyField(to='BaseBillet.OptionGenerale'),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 12:54
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0007_auto_20210629_1633'),
]
operations = [
migrations.AddField(
model_name='event',
name='billets',
field=models.ManyToManyField(to='BaseBillet.Billet'),
),
migrations.AlterField(
model_name='event',
name='articles',
field=models.ManyToManyField(to='BaseBillet.Article'),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 12:55
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0008_auto_20210629_1654'),
]
operations = [
migrations.AddField(
model_name='article',
name='stock',
field=models.SmallIntegerField(blank=True, null=True),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 12:58
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0009_auto_20210629_1655'),
]
operations = [
migrations.AddField(
model_name='billet',
name='reservation_par_user_max',
field=models.PositiveSmallIntegerField(default=6),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
]

View File

@ -1,28 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 13:13
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0010_auto_20210629_1658'),
]
operations = [
migrations.RemoveField(
model_name='configuration',
name='reservation_par_user_max',
),
migrations.AddField(
model_name='article',
name='reservation_par_user_max',
field=models.PositiveSmallIntegerField(default=10),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 13:29
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0011_auto_20210629_1713'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
]

View File

@ -1,30 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 13:33
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0012_auto_20210629_1729'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
migrations.AlterField(
model_name='lignearticle',
name='uuid',
field=models.UUIDField(db_index=True, default=uuid.uuid4, primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='reservation',
name='uuid',
field=models.UUIDField(db_index=True, default=uuid.uuid4, primary_key=True, serialize=False),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 13:35
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0013_auto_20210629_1733'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='articles',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Article', verbose_name='lignes_article'),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 13:38
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0014_auto_20210629_1735'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='articles',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Article'),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 13:39
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0015_auto_20210629_1738'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation', verbose_name='lignes_article'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 14:09
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0016_auto_20210629_1739'),
]
operations = [
migrations.RenameField(
model_name='lignearticle',
old_name='articles',
new_name='article',
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation', verbose_name='lignes_article'),
),
migrations.AlterField(
model_name='reservation',
name='status',
field=models.CharField(choices=[('NAN', 'Annulée'), ('MNV', 'Email non validé'), ('NPA', 'Non payée'), ('VAL', 'Validée'), ('PAY', 'Payée')], default='NPA', max_length=3, verbose_name='Status de la réservation'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 14:11
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0017_auto_20210629_1809'),
]
operations = [
migrations.AddField(
model_name='lignearticle',
name='billet',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Billet'),
),
migrations.AlterField(
model_name='lignearticle',
name='article',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Article'),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation', verbose_name='lignes_article'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 14:11
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0018_auto_20210629_1811'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation', verbose_name='lignes_article'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 14:20
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0019_auto_20210629_1811'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='article',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Article'),
),
migrations.AlterField(
model_name='lignearticle',
name='billet',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Billet'),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation', verbose_name='lignes_article'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 15:48
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0020_auto_20210629_1820'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation', verbose_name='lignes_article'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-06-29 15:52
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0021_auto_20210629_1948'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation', verbose_name='lignes_article'),
),
migrations.AlterField(
model_name='reservation',
name='event',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='reservation', to='BaseBillet.Event'),
),
]

View File

@ -1,25 +0,0 @@
# Generated by Django 2.2 on 2021-09-23 09:38
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('PaiementStripe', '0002_auto_20210923_1338'),
('BaseBillet', '0022_auto_20210629_1952'),
]
operations = [
migrations.AddField(
model_name='lignearticle',
name='paiement_stripe',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='PaiementStripe.Paiement_stripe'),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-23 09:39
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0023_auto_20210923_1338'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 2.2 on 2021-09-23 10:03
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0024_auto_20210923_1339'),
]
operations = [
migrations.AddField(
model_name='configuration',
name='key_cashless',
field=models.CharField(blank=True, max_length=41, null=True, verbose_name="Clé d'API du serveur cashless"),
),
migrations.AddField(
model_name='configuration',
name='server_cashless',
field=models.URLField(blank=True, max_length=300, null=True, verbose_name='Adresse du serveur Cashless'),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,35 +0,0 @@
# Generated by Django 2.2 on 2021-09-23 13:06
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0025_auto_20210923_1403'),
]
operations = [
migrations.CreateModel(
name='VAT',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('percent', models.FloatField(verbose_name='Taux de TVA (%)')),
],
options={
'verbose_name': 'TVA',
'verbose_name_plural': 'TVA',
},
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
migrations.AddField(
model_name='article',
name='vat',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.VAT', verbose_name='TVA'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-09-23 13:28
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0026_auto_20210923_1706'),
]
operations = [
migrations.AddField(
model_name='article',
name='publish',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-09-24 11:16
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0027_auto_20210923_1728'),
]
operations = [
migrations.AddField(
model_name='lignearticle',
name='datetime',
field=models.DateTimeField(auto_now=True),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-24 11:47
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0028_auto_20210924_1516'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-24 11:53
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0029_auto_20210924_1547'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-24 12:11
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0030_auto_20210924_1553'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-24 12:11
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0031_auto_20210924_1611'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 2.2 on 2021-09-24 12:14
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0032_auto_20210924_1611'),
]
operations = [
migrations.AddField(
model_name='configuration',
name='stripe_api_key',
field=models.CharField(blank=True, max_length=110, null=True),
),
migrations.AddField(
model_name='configuration',
name='stripe_test_api_key',
field=models.CharField(blank=True, max_length=110, null=True),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-24 12:21
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0033_auto_20210924_1614'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-09-24 12:28
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0034_auto_20210924_1621'),
]
operations = [
migrations.AddField(
model_name='configuration',
name='stripe_mode_test',
field=models.BooleanField(default=True),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 06:27
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0035_auto_20210924_1628'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 07:59
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0036_auto_20210925_1027'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 08:08
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0037_auto_20210925_1159'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 08:24
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0038_auto_20210925_1208'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 09:10
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0039_auto_20210925_1224'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 10:15
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0040_auto_20210925_1310'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 10:17
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0041_auto_20210925_1415'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 10:44
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0042_auto_20210925_1417'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 11:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0043_auto_20210925_1444'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 13:55
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0044_auto_20210925_1507'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-26 07:19
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0045_auto_20210925_1755'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,31 +0,0 @@
# Generated by Django 2.2 on 2021-09-26 09:59
from django.db import migrations, models
import django.db.models.deletion
import stdimage.models
import stdimage.validators
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0046_auto_20210926_1119'),
]
operations = [
migrations.AddField(
model_name='configuration',
name='carte_restaurant',
field=stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)], verbose_name='Background'),
),
migrations.AddField(
model_name='configuration',
name='site_web',
field=models.URLField(blank=True, null=True),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,31 +0,0 @@
# Generated by Django 2.2 on 2021-09-26 11:31
from django.db import migrations, models
import django.db.models.deletion
import stdimage.models
import stdimage.validators
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0047_auto_20210926_1359'),
]
operations = [
migrations.AddField(
model_name='configuration',
name='activer_billetterie',
field=models.BooleanField(default=True),
),
migrations.AlterField(
model_name='configuration',
name='carte_restaurant',
field=stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)], verbose_name='Carte du restaurant'),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,32 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 06:47
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0048_auto_20210926_1531'),
]
operations = [
migrations.CreateModel(
name='TarifsAdhesion',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=30)),
('tarif', models.FloatField()),
],
),
migrations.AddField(
model_name='configuration',
name='adhesion_obligatoire',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,28 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 07:32
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0049_auto_20210927_1047'),
]
operations = [
migrations.AlterModelOptions(
name='tarifsadhesion',
options={'ordering': ('-tarif',)},
),
migrations.AddField(
model_name='configuration',
name='cadeau_adhesion',
field=models.FloatField(default=0),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 09:34
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0050_auto_20210927_1132'),
]
operations = [
migrations.AddField(
model_name='article',
name='categorie_article',
field=models.CharField(choices=[('B', 'Billet'), ('P', "Pack d'objets"), ('R', 'Recharge cashless'), ('T', 'Vetement'), ('M', 'Merchandasing')], default='B', max_length=3, verbose_name='Status de la réservation'),
),
migrations.AlterField(
model_name='configuration',
name='cadeau_adhesion',
field=models.FloatField(default=0, help_text="Recharge cadeau a l'adhésion"),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 09:35
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0051_auto_20210927_1334'),
]
operations = [
migrations.AddField(
model_name='article',
name='id_stripe',
field=models.CharField(blank=True, max_length=30, null=True),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,26 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 09:48
from django.db import migrations, models
import django.db.models.deletion
import stdimage.models
import stdimage.validators
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0052_auto_20210927_1335'),
]
operations = [
migrations.AddField(
model_name='article',
name='img',
field=stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)], verbose_name='Image'),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 09:50
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0053_auto_20210927_1348'),
]
operations = [
migrations.RemoveField(
model_name='article',
name='id',
),
migrations.AddField(
model_name='article',
name='uuid',
field=models.UUIDField(db_index=True, default=uuid.uuid4, primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 10:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0054_auto_20210927_1350'),
]
operations = [
migrations.RenameField(
model_name='article',
old_name='id_stripe',
new_name='id_price_stripe',
),
migrations.AlterField(
model_name='article',
name='categorie_article',
field=models.CharField(choices=[('B', 'Billet'), ('P', "Pack d'objets"), ('R', 'Recharge cashless'), ('T', 'Vetement'), ('M', 'Merchandasing'), ('A', 'Adhésion')], default='B', max_length=3, verbose_name="Type d'article"),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 10:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0055_auto_20210927_1407'),
]
operations = [
migrations.AddField(
model_name='article',
name='id_product_stripe',
field=models.CharField(blank=True, max_length=30, null=True),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 11:43
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0056_auto_20210927_1407'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 12:34
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0057_auto_20210927_1543'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 12:34
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0058_auto_20210927_1634'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,25 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 13:18
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0059_auto_20210927_1634'),
]
operations = [
migrations.AlterField(
model_name='article',
name='uuid',
field=models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-27 13:18
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('BaseBillet', '0060_auto_20210927_1718'),
]
operations = [
migrations.AlterField(
model_name='lignearticle',
name='reservation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation'),
),
]

View File

@ -40,16 +40,6 @@ def poids_option_generale(sender, instance: OptionGenerale, created, **kwargs):
instance.save() instance.save()
class TarifsAdhesion(models.Model):
name = models.CharField(max_length=30)
tarif = models.FloatField()
class Meta:
ordering = ('-tarif',)
def __str__(self):
return f"{self.name} {self.tarif}"
class Configuration(SingletonModel): class Configuration(SingletonModel):
organisation = models.CharField(max_length=50) organisation = models.CharField(max_length=50)
@ -157,7 +147,7 @@ class VAT(models.Model):
class Article(models.Model): class Article(models.Model):
uuid = models.UUIDField(primary_key=True, db_index=True, default=uuid.uuid4, editable=False) uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True, db_index=True)
name = models.CharField(max_length=50, name = models.CharField(max_length=50,
blank=True, null=True) blank=True, null=True)
@ -362,12 +352,5 @@ class LigneArticle(models.Model):
article = models.ForeignKey(Article, on_delete=models.CASCADE, blank=True, null=True) article = models.ForeignKey(Article, on_delete=models.CASCADE, blank=True, null=True)
billet = models.ForeignKey(Billet, on_delete=models.CASCADE, blank=True, null=True) billet = models.ForeignKey(Billet, on_delete=models.CASCADE, blank=True, null=True)
qty = models.SmallIntegerField() qty = models.SmallIntegerField()
reste = models.SmallIntegerField()
paiement_stripe = models.ForeignKey(Paiement_stripe, on_delete=models.PROTECT, blank=True, null=True) paiement_stripe = models.ForeignKey(Paiement_stripe, on_delete=models.PROTECT, blank=True, null=True)
datetime = models.DateTimeField(auto_now=True) datetime = models.DateTimeField(auto_now=True)
# def __str__(self):
# if self.reservation :
# if self.article :
# return f"{self.reservation.user_commande.email} {self.qty} {self.article}"
# if self.billet :
# return f"{self.reservation.user_commande.email} {self.qty} {self.billet}"

View File

@ -1,7 +1,8 @@
# Generated by Django 2.2 on 2021-06-23 09:09 # Generated by Django 2.2 on 2021-09-27 13:39
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
import django.utils.timezone
import django_tenants.postgresql_backend.base import django_tenants.postgresql_backend.base
@ -18,9 +19,9 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('schema_name', models.CharField(db_index=True, max_length=63, unique=True, validators=[django_tenants.postgresql_backend.base._check_schema_name])), ('schema_name', models.CharField(db_index=True, max_length=63, unique=True, validators=[django_tenants.postgresql_backend.base._check_schema_name])),
('name', models.CharField(max_length=100)), ('name', models.CharField(db_index=True, max_length=100, unique=True)),
('paid_until', models.DateField()), ('paid_until', models.DateField(default=django.utils.timezone.now)),
('on_trial', models.BooleanField()), ('on_trial', models.BooleanField(default=True)),
('created_on', models.DateField(auto_now_add=True)), ('created_on', models.DateField(auto_now_add=True)),
], ],
options={ options={

View File

@ -1,46 +0,0 @@
# Generated by Django 2.2.13 on 2021-06-08 10:08
import os
from django.db import migrations
def create_premier_tenant(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Client = apps.get_model('Customers', 'Client')
Domain = apps.get_model('Customers', 'Domain')
DNS = os.getenv('DOMAIN')
tenant_public = Client.objects.get_or_create(schema_name='public',
name='Tibillet Public',
paid_until='2200-12-05',
on_trial=False)[0]
# Add one or more domains for the tenant
domaine_seul = Domain.objects.get_or_create(domain=DNS,
tenant=tenant_public,
is_primary=True,
)
domaine_www = Domain.objects.get_or_create(domain=f'www.{DNS}',
tenant=tenant_public,
is_primary=False,
)
return tenant_public, domaine_seul[0], domaine_www[0]
def reverse(apps, schema_editor):
tenant_public, domaine_seul, domaine_www = create_premier_tenant(apps, schema_editor)
tenant_public.delete()
domaine_seul.delete()
domaine_www.delete()
class Migration(migrations.Migration):
dependencies = [
('Customers', '0001_initial'),
]
operations = [
migrations.RunPython(create_premier_tenant, reverse),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 2.2 on 2021-06-23 09:51
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('Customers', '0002_create_tenant_public'),
]
operations = [
migrations.AlterField(
model_name='client',
name='name',
field=models.CharField(db_index=True, max_length=100, unique=True),
),
migrations.AlterField(
model_name='client',
name='on_trial',
field=models.BooleanField(default=True),
),
migrations.AlterField(
model_name='client',
name='paid_until',
field=models.DateField(default=django.utils.timezone.now),
),
]

View File

@ -1,6 +1,9 @@
# Generated by Django 2.2 on 2021-09-23 08:55 # Generated by Django 2.2 on 2021-09-27 13:39
from django.conf import settings
import django.contrib.postgres.fields.jsonb
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion
import uuid import uuid
@ -9,6 +12,7 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
] ]
operations = [ operations = [
@ -16,10 +20,13 @@ class Migration(migrations.Migration):
name='Paiement_stripe', name='Paiement_stripe',
fields=[ fields=[
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), ('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('id_stripe', models.CharField(blank=True, max_length=20, null=True)), ('detail', models.CharField(blank=True, max_length=50, null=True)),
('id_stripe', models.CharField(blank=True, max_length=80, null=True)),
('metadata_stripe', django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True)),
('order_date', models.DateTimeField(auto_now=True, verbose_name='Date')), ('order_date', models.DateTimeField(auto_now=True, verbose_name='Date')),
('status', models.CharField(choices=[('O', 'Envoyée a Stripe'), ('W', 'En attente de paiement'), ('P', 'Payée'), ('V', 'Payée et validée'), ('C', 'Annulée')], default='O', max_length=1, verbose_name='Statut de la commande')), ('status', models.CharField(choices=[('N', 'Lien de paiement non crée'), ('O', 'Envoyée a Stripe'), ('W', 'En attente de paiement'), ('E', 'Expiré'), ('P', 'Payée'), ('V', 'Payée et validée'), ('C', 'Annulée')], default='N', max_length=1, verbose_name='Statut de la commande')),
('email_billet', models.CharField(blank=True, max_length=30, verbose_name='Email de récéption des billets')), ('total', models.FloatField(default=0)),
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
], ],
), ),
] ]

View File

@ -1,18 +0,0 @@
# Generated by Django 2.2 on 2021-09-23 09:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('PaiementStripe', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='paiement_stripe',
name='status',
field=models.CharField(choices=[('N', 'Lien de paiement non crée'), ('O', 'Envoyée a Stripe'), ('W', 'En attente de paiement'), ('P', 'Payée'), ('V', 'Payée et validée'), ('C', 'Annulée')], default='N', max_length=1, verbose_name='Statut de la commande'),
),
]

View File

@ -1,26 +0,0 @@
# Generated by Django 2.2 on 2021-09-24 11:47
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('PaiementStripe', '0002_auto_20210923_1338'),
]
operations = [
migrations.AddField(
model_name='paiement_stripe',
name='detail',
field=models.CharField(blank=True, max_length=50, null=True),
),
migrations.AddField(
model_name='paiement_stripe',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 2.2 on 2021-09-24 11:53
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('PaiementStripe', '0003_auto_20210924_1547'),
]
operations = [
migrations.AddField(
model_name='paiement_stripe',
name='total',
field=models.FloatField(default=0),
),
]

View File

@ -1,25 +0,0 @@
# Generated by Django 2.2 on 2021-09-24 12:11
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('PaiementStripe', '0004_paiement_stripe_total'),
]
operations = [
migrations.CreateModel(
name='Configuration_stripe',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('test_api_key', models.CharField(blank=True, max_length=110, null=True)),
('api_key', models.CharField(blank=True, max_length=110, null=True)),
],
),
migrations.RemoveField(
model_name='paiement_stripe',
name='email_billet',
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 06:27
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('PaiementStripe', '0006_delete_configuration_stripe'),
]
operations = [
migrations.AlterField(
model_name='paiement_stripe',
name='id_stripe',
field=models.CharField(blank=True, max_length=80, null=True),
),
migrations.AlterField(
model_name='paiement_stripe',
name='status',
field=models.CharField(choices=[('N', 'Lien de paiement non crée'), ('O', 'Envoyée a Stripe'), ('W', 'En attente de paiement'), ('E', 'Expiré'), ('P', 'Payée'), ('V', 'Payée et validée'), ('C', 'Annulée')], default='N', max_length=1, verbose_name='Statut de la commande'),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-26 07:19
import django.contrib.postgres.fields.jsonb
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('PaiementStripe', '0007_auto_20210925_1027'),
]
operations = [
migrations.AddField(
model_name='paiement_stripe',
name='metadata_stripe',
field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True),
),
]

View File

@ -3,8 +3,9 @@ from django.contrib.postgres.fields import JSONField
import uuid import uuid
# Create your models here. # Create your models here.
from TiBillet import settings from TiBillet import settings
from django.db.models.signals import post_save, pre_save
# class Configuration_stripe(models.Model): from django.dispatch import receiver
# from QrcodeCashless.views import postPaimentRecharge
class Paiement_stripe(models.Model): class Paiement_stripe(models.Model):
@ -38,5 +39,13 @@ class Paiement_stripe(models.Model):
def __str__(self): def __str__(self):
return f"{self.detail} - {self.status}" return f"{self.detail} - {self.status}"
''' RECEIVER PRESAVE DANS LE VIEW QRCODECASHELESS
@receiver(pre_save, sender=Paiement_stripe)
def changement_paid_to_valid(sender, instance: Paiement_stripe, update_fields=None, **kwargs):
try:
old_instance = Paiement_stripe.objects.get(pk=instance.pk)
if old_instance.status != Paiement_stripe.PAID :
print(f"on passe de {old_instance.status} à {instance.status}")
if instance.status == Paiement_stripe.PAID:
on lance la recharge vers le serveur cashless
'''

View File

@ -1,6 +1,7 @@
import json import json
from datetime import datetime from datetime import datetime
from django.contrib import messages
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.db import connection from django.db import connection
from django.http import HttpResponse, Http404, HttpResponseRedirect from django.http import HttpResponse, Http404, HttpResponseRedirect
@ -31,13 +32,14 @@ class creation_checkout_stripe():
) -> None: ) -> None:
self.absolute_domain = absolute_domain self.absolute_domain = absolute_domain
self.configuration = Configuration.get_solo() self.liste_ligne_article = liste_ligne_article
self.email_paiement = email_paiement self.email_paiement = email_paiement
self.metadata = metadata
self.configuration = Configuration.get_solo()
self.user = self._user_paiement() self.user = self._user_paiement()
self.detail = self._detail() self.detail = self._detail()
self.total = self._total() self.total = self._total()
self.liste_ligne_article = liste_ligne_article
self.metadata = metadata
self.metadata_json = json.dumps(self.metadata) self.metadata_json = json.dumps(self.metadata)
self.paiement_stripe_db = self._paiement_stripe_db() self.paiement_stripe_db = self._paiement_stripe_db()
self.stripe_api_key = self._stripe_api_key() self.stripe_api_key = self._stripe_api_key()
@ -64,7 +66,7 @@ class creation_checkout_stripe():
total = 0 total = 0
for ligne in self.liste_ligne_article: for ligne in self.liste_ligne_article:
ligne: LigneArticle ligne: LigneArticle
total += ligne.qty * ligne.article.prix total += float(ligne.qty) * float(ligne.article.prix)
return total return total
def _detail(self): def _detail(self):
@ -100,20 +102,23 @@ class creation_checkout_stripe():
line_items.append( line_items.append(
{ {
"price": f"{ligne.article.get_id_price_stripe()}", "price": f"{ligne.article.get_id_price_stripe()}",
"quantity": ligne.qty, "quantity": int(ligne.qty),
} }
) )
return line_items
def _checkout_session(self): def _checkout_session(self):
checkout_session = stripe.checkout.Session.create( checkout_session = stripe.checkout.Session.create(
customer_email=f'{self.user.email}',
line_items=self.line_items,
payment_method_types=['card'],
mode='payment',
metadata=self.metadata,
success_url=f'{self.absolute_domain}/stripe/return/{self.paiement_stripe_db.uuid}', success_url=f'{self.absolute_domain}/stripe/return/{self.paiement_stripe_db.uuid}',
cancel_url=f'{self.absolute_domain}/stripe/return/{self.paiement_stripe_db.uuid}', cancel_url=f'{self.absolute_domain}/stripe/return/{self.paiement_stripe_db.uuid}',
client_reference_id=f"{self.user.uuid_user}", payment_method_types=["card"],
customer_email=f'{self.user.email}',
line_items=self.line_items,
mode='payment',
metadata=self.metadata,
client_reference_id=f"{self.user.uuid}",
) )
print(checkout_session.id) print(checkout_session.id)
@ -146,6 +151,7 @@ class retour_stripe(View):
else: else:
stripe.api_key = configuration.stripe_api_key stripe.api_key = configuration.stripe_api_key
print(paiement_stripe.status)
if paiement_stripe.status != Paiement_stripe.VALID: if paiement_stripe.status != Paiement_stripe.VALID:
checkout_session = stripe.checkout.Session.retrieve(paiement_stripe.id_stripe) checkout_session = stripe.checkout.Session.retrieve(paiement_stripe.id_stripe)
@ -156,9 +162,6 @@ class retour_stripe(View):
paiement_stripe.save() paiement_stripe.save()
elif checkout_session.payment_status == "paid": elif checkout_session.payment_status == "paid":
paiement_stripe.status = Paiement_stripe.PAID
paiement_stripe.save()
# on vérifie si les infos sont cohérente avec la db : Never Trust Input :) # on vérifie si les infos sont cohérente avec la db : Never Trust Input :)
metadata_stripe_json = checkout_session.metadata metadata_stripe_json = checkout_session.metadata
metadata_stripe = json.loads(str(metadata_stripe_json)) metadata_stripe = json.loads(str(metadata_stripe_json))
@ -177,25 +180,26 @@ class retour_stripe(View):
f"metadata ne correspondent pas : {metadata_stripe} {metadata_db}") f"metadata ne correspondent pas : {metadata_stripe} {metadata_db}")
raise Http404 raise Http404
# on check si il y a un rechargement de carte cashless dans la commande paiement_stripe.status = Paiement_stripe.PAID
if metadata_db.get('recharge_carte_uuid'): paiement_stripe.save()
logger.info( # le .save() lance le process pre_save dans le view QrcodeCashless, qui peut modifier son status
f'{timezone.now()} retour stripe pour rechargement carte : {metadata_db.get("recharge_carte_uuid")}') paiement_stripe.refresh_from_db()
print( if paiement_stripe.status == Paiement_stripe.VALID :
f'{timezone.now()} retour stripe pour rechargement carte : {metadata_db.get("recharge_carte_uuid")}') messages.success(request, f"Paiement validé. Merci !")
return HttpResponseRedirect(f"/qr/{metadata_db.get('recharge_carte_uuid')}#success")
print('gerer la recharge sur le serveur cashless')
# return postPaimentRecharge(paiement_stripe, request)
else: else:
paiement_stripe.status = Paiement_stripe.CANCELED paiement_stripe.status = Paiement_stripe.CANCELED
paiement_stripe.save() paiement_stripe.save()
return HttpResponse(f'Le paiement annulé.')
return HttpResponse(f'Paiement validé') if paiement_stripe.status == Paiement_stripe.VALID:
metadata_db_json = paiement_stripe.metadata_stripe
metadata_db = json.loads(metadata_db_json)
if metadata_db.get('recharge_carte_uuid'):
return HttpResponseRedirect(f"/qr/{metadata_db.get('recharge_carte_uuid')}#historique")
else :
return HttpResponse('Un problème de validation de paiement a été detecté. Merci de contacter un responsable.')
# return HttpResponseRedirect("/")
''' '''

View File

@ -1,7 +1,9 @@
# Generated by Django 2.2 on 2021-09-23 09:39 # Generated by Django 2.2 on 2021-09-27 13:39
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
import stdimage.models
import stdimage.validators
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -9,18 +11,29 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('Customers', '0003_auto_20210623_1351'), ('Customers', '0001_initial'),
] ]
operations = [ operations = [
migrations.CreateModel(
name='Detail',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('img', stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)], verbose_name='Recto de la carte')),
('img_url', models.URLField(blank=True, null=True)),
('base_url', models.CharField(blank=True, max_length=60, null=True)),
('generation', models.SmallIntegerField()),
('origine', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='Customers.Client')),
],
),
migrations.CreateModel( migrations.CreateModel(
name='CarteCashless', name='CarteCashless',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('tag_id', models.CharField(db_index=True, max_length=8, unique=True)), ('tag_id', models.CharField(db_index=True, max_length=8, unique=True)),
('uuid_qrcode', models.UUIDField(blank=True, null=True, verbose_name='Uuid')), ('uuid', models.UUIDField(blank=True, null=True, verbose_name='Uuid')),
('number', models.CharField(blank=True, db_index=True, max_length=8, null=True, unique=True)), ('number', models.CharField(db_index=True, max_length=8, unique=True)),
('origine', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='Customers.Client')), ('detail', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='QrcodeCashless.Detail')),
], ],
), ),
] ]

View File

@ -1,24 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 07:59
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('QrcodeCashless', '0001_initial'),
]
operations = [
migrations.RenameField(
model_name='cartecashless',
old_name='uuid_qrcode',
new_name='uuid',
),
migrations.AlterField(
model_name='cartecashless',
name='number',
field=models.CharField(db_index=True, default=0, max_length=8, unique=True),
preserve_default=False,
),
]

View File

@ -1,27 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 08:08
from django.db import migrations, models
import django.db.models.deletion
import stdimage.models
class Migration(migrations.Migration):
dependencies = [
('QrcodeCashless', '0002_auto_20210925_1159'),
]
operations = [
migrations.CreateModel(
name='Detail',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('img', stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', verbose_name='Recto de la carte')),
],
),
migrations.AddField(
model_name='cartecashless',
name='detail',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='QrcodeCashless.Detail'),
),
]

View File

@ -1,20 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 08:24
from django.db import migrations
import stdimage.models
import stdimage.validators
class Migration(migrations.Migration):
dependencies = [
('QrcodeCashless', '0003_auto_20210925_1208'),
]
operations = [
migrations.AlterField(
model_name='detail',
name='img',
field=stdimage.models.StdImageField(blank=True, null=True, upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)], verbose_name='Recto de la carte'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 09:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('QrcodeCashless', '0004_auto_20210925_1224'),
]
operations = [
migrations.AddField(
model_name='detail',
name='base_url',
field=models.CharField(blank=True, max_length=60, null=True),
),
]

View File

@ -1,20 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 10:17
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('Customers', '0003_auto_20210623_1351'),
('QrcodeCashless', '0006_remove_cartecashless_origine'),
]
operations = [
migrations.AddField(
model_name='detail',
name='origine',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='Customers.Client'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 10:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('QrcodeCashless', '0007_detail_origine'),
]
operations = [
migrations.AddField(
model_name='detail',
name='img_url',
field=models.URLField(blank=True, null=True),
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 2.2 on 2021-09-25 13:55
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('QrcodeCashless', '0008_detail_img_url'),
]
operations = [
migrations.AddField(
model_name='detail',
name='generation',
field=models.SmallIntegerField(default=1),
preserve_default=False,
),
]

View File

@ -1,67 +0,0 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Rechargement Online</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<!-- Font Awesome -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css">
<!-- Bootstrap core CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Material Design Bootstrap -->
{# <link href="css/mdb.min.css" rel="stylesheet">#}
<!-- Your custom styles (optional) -->
{# <link href="css/style.css" rel="stylesheet">#}
</head>
<body>
<br>
{% if url_image_carte %}
<div class="container-fluid">
<img src="{{ url_image_carte }}" alt="Product" class="img-fluid img-thumbnail rounded mx-auto d-block" >
</div>
{% endif %}
<br>
<p class="h3 mb-4 text-center">Rechargement Cashless {{ domain.capitalize }}</p>
{% if liste_assets %}
<p class="h5 mb-5 text-center">Disponible sur votre carte :
{% for asset in liste_assets %}
<p class="h6 mb-6 text-center"> {{ asset }} </p>
{% endfor %}
</p>
{% else %}
<p class="h4 mb-4 text-center">Votre carte est vide.</p>
{% endif %}
<form class="border border-light p-5" name="form" method="POST">
{% csrf_token %}
<label for="numero_carte">Merci de vérifier votre numéro de la carte cashless ( au dessous du QRCode ) :</label>
<input type="text" id="numero_carte_cashless" class="form-control" placeholder="Numéro de la carte cashless"
value="{{ numero_carte }}" name="numero_carte_cashless" required="True" readonly>
<br>
<label for="Email">Email :</label>
{% if email %}
<input type="email" id="Email" class="form-control mb-4" placeholder="E-mail" name="email" required="True"
value="{{ email }}">
{% else %}
<input type="email" id="Email" class="form-control mb-4" placeholder="E-mail" name="email" required="True">
{% endif %}
<label for="thune">Somme à recharger (€) :</label>
<input id="thune" class="form-control" type="number" min="1" step="any" name="thune" required="True"/>
<br>
<div class="d-grid gap-2">
<button class="btn btn-primary" type="submit">Payer</button>
</div>
</form>
</body>
</html>

View File

@ -16,8 +16,7 @@
<link rel="stylesheet" href="{% static 'html5up-dimension/assets/css/noscript.css' %}"/> <link rel="stylesheet" href="{% static 'html5up-dimension/assets/css/noscript.css' %}"/>
</noscript> </noscript>
</head> </head>
< class="is-preload"> <body class="is-preload">
<!-- Wrapper --> <!-- Wrapper -->
<div id="wrapper"> <div id="wrapper">
@ -38,12 +37,15 @@
<nav> <nav>
<ul> <ul>
<li><a href="#recharger">Recharger</a></li> <li><a href="#recharger">Recharger</a></li>
{% if history %} {% if history %}
<li><a href="#historique">Historique</a></li> <li><a href="#historique">Historique</a></li>
{% endif %} {% endif %}
{% if carte_resto %} {% if carte_resto %}
<li><a href="/media/{{ carte_resto }}">Restaurant</a></li> <li><a href="/media/{{ carte_resto }}">Restaurant</a></li>
{% endif %} {% endif %}
{% if billetterie_bool %} {% if billetterie_bool %}
<li><a href="/">Billetterie</a></li> <li><a href="/">Billetterie</a></li>
{% endif %} {% endif %}
@ -56,6 +58,9 @@
<li><a href="#adherer">Adhérer</a></li> <li><a href="#adherer">Adhérer</a></li>
{% endif %} {% endif %}
{% if email and not a_jour_cotisation %}
<li><a href="#adherer">Adhérer</a></li>
{% endif %}
{# <li><a href="#elements">Elements</a></li>#} {# <li><a href="#elements">Elements</a></li>#}
</ul> </ul>
@ -75,15 +80,19 @@
<div class="field"> <div class="field">
<label for="email">Email</label> <label for="email">Email</label>
{% if email %} {% if email %}
<input type="email" name="email" id="Email" required="True" value="{{ email }}"/> <label for="email">Vérifiez votre adresse Email</label>
<input type="email" name="email" id="Email" required="True" value="{{ email }}"
style="text-transform: lowercase;"/>
{% else %} {% else %}
<input type="email" name="email" id="email" required="True"/> <label for="email">Entrez votre adresse Email</label>
<input type="email" name="email" id="email" required="True"
style="text-transform: lowercase;"/>
{% endif %} {% endif %}
</div> </div>
<div class="field"> <div class="field">
<label for="montant_recharge">Somme à recharger (€)</label> <label for="montant_recharge">Somme à recharger (€)</label>
<input id="montant_recharge" type="number" step="any" name="montant_recharge" required="True"/> <input id="montant_recharge" type="number" name="montant_recharge" required="True"/>
</div> </div>
</div> </div>
<ul class="actions"> <ul class="actions">
@ -155,8 +164,11 @@
<article id="success"> <article id="success">
<h2 class="major">Rechargement OK</h2> {% if messages %}
<h4>Vous avez bien rechargé la carte {{ numero_carte }}.</h4> {% for message in messages %}
<h2>{{ message }}</h2>
{% endfor %}
{% endif %}
<div class="table-wrapper"> <div class="table-wrapper">
<table> <table>
<thead> <thead>
@ -193,9 +205,17 @@
<form method="post" action="#"> <form method="post" action="#">
{% csrf_token %} {% csrf_token %}
<div class="fields"> <div class="fields">
<div class="field"> <div class="field">
<label for="email">Entrez votre Email</label> {% if email %}
<input id="email" name="email" required="True" type="email"/> <label for="email">Vérifiez votre adresse Email</label>
<input type="email" name="email" id="Email" required="True" value="{{ email }}"
style="text-transform: lowercase;"/>
{% else %}
<label for="email">Entrez votre adresse Email</label>
<input type="email" name="email" id="email" required="True"
style="text-transform: lowercase;"/>
{% endif %}
</div> </div>
</div> </div>
<ul class="actions"> <ul class="actions">
@ -247,7 +267,7 @@
{% for tarif in tarifs_adhesion %} {% for tarif in tarifs_adhesion %}
<ul class="actions"> <ul class="actions">
<li><a id="{{ tarif.name | slugify }}" href="#paiementadhesionenligne" <li><a id="{{ tarif.name | slugify }}" href="#paiementadhesionenligne"
class="button primary field">{{ tarif.name }} {{ tarif.tarif }}€</a></li> class="button primary field">{{ tarif.name }} {{ tarif.prix }}€</a></li>
</ul> </ul>
{% endfor %} {% endfor %}
<h4>Payer à l'acceuil de l'association avec un vrai humain :</h4> <h4>Payer à l'acceuil de l'association avec un vrai humain :</h4>
@ -260,11 +280,6 @@
<article id="paiementadhesionenligne"> <article id="paiementadhesionenligne">
<h2 class="major">Paiement en ligne</h2> <h2 class="major">Paiement en ligne</h2>
{% if messages %}
{% for message in messages %}
<h3>{{ message }}</h3>
{% endfor %}
{% endif %}
<h3>Adhésion : <span id="text_name_adhesion"></span> <span id="text_tarif_adhesion"></span></h3> <h3>Adhésion : <span id="text_name_adhesion"></span> <span id="text_tarif_adhesion"></span></h3>
<form method="post" action="#"> <form method="post" action="#">
{% csrf_token %} {% csrf_token %}
@ -279,6 +294,8 @@
</div> </div>
<div class="field" style="display: none"> <div class="field" style="display: none">
<input id="pk_adhesion" type="text" name="pk_adhesion"
required="True"/>
<input id="montant_adhesion" type="number" step="any" name="montant_adhesion" <input id="montant_adhesion" type="number" step="any" name="montant_adhesion"
required="True"/> required="True"/>
</div> </div>
@ -286,7 +303,7 @@
<div class="field"> <div class="field">
<h4>Voulez vous recharger votre carte en même temps ? Laissez vide si non.</h4> <h4>Voulez vous recharger votre carte en même temps ? Laissez vide si non.</h4>
<label for="montant_recharge">Recharge cashless (€) :</label> <label for="montant_recharge">Recharge cashless (€) :</label>
<input id="montant_recharge" type="number" step="any" name="montant_recharge" /> <input id="montant_recharge" type="number" name="montant_recharge"/>
</div> </div>
</div> </div>
<ul class="actions"> <ul class="actions">
@ -384,9 +401,10 @@
{% for tarif in tarifs_adhesion %} {% for tarif in tarifs_adhesion %}
document.getElementById('{{ tarif.name | slugify }}').onclick = function () { document.getElementById('{{ tarif.name | slugify }}').onclick = function () {
console.log('{{ tarif.name | slugify }}') console.log('{{ tarif.name | slugify }}')
document.getElementById("montant_adhesion").value = "{{ tarif.tarif }}"; document.getElementById("montant_adhesion").value = "{{ tarif.prix }}";
document.getElementById("pk_adhesion").value = "{{ tarif.pk }}";
document.getElementById("text_name_adhesion").textContent = "{{ tarif.name }}"; document.getElementById("text_name_adhesion").textContent = "{{ tarif.name }}";
document.getElementById("text_tarif_adhesion").textContent = "{{ tarif.tarif }}€"; document.getElementById("text_tarif_adhesion").textContent = "{{ tarif.prix }}€";
} }
{% endfor %} {% endfor %}

View File

@ -7,18 +7,19 @@ from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.shortcuts import render from django.shortcuts import render
from django.utils import timezone from django.utils import timezone
from rest_framework.generics import get_object_or_404 from rest_framework.generics import get_object_or_404
import stripe
# Create your views here.
from django.views import View from django.views import View
from rest_framework import status from rest_framework import status
from BaseBillet.models import Configuration, Article, TarifsAdhesion, LigneArticle from BaseBillet.models import Configuration, Article, LigneArticle
from PaiementStripe.models import Paiement_stripe from PaiementStripe.models import Paiement_stripe
from PaiementStripe.views import creation_checkout_stripe from PaiementStripe.views import creation_checkout_stripe
from QrcodeCashless.models import CarteCashless from QrcodeCashless.models import CarteCashless
from django.db.models.signals import pre_save
from django.dispatch import receiver
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -30,10 +31,19 @@ def get_domain(request):
raise Http404 raise Http404
def check_carte_local(uuid): def check_carte_local(uuid):
carte = get_object_or_404(CarteCashless, uuid=uuid) carte = get_object_or_404(CarteCashless, uuid=uuid)
# on vérifie toujours que la carte vienne bien du domain et Client tenant.
if carte.detail.origine != connection.tenant:
logger.error(f"{timezone.now()} "
f"check_carte_local {carte.uuid} : "
f"carte detail origine correspond pas : {carte.detail.origine} != {connection.tenant}")
raise Http404
return carte return carte
class gen_one_bisik(View): class gen_one_bisik(View):
def get(self, request, numero_carte): def get(self, request, numero_carte):
print(numero_carte) print(numero_carte)
@ -74,9 +84,6 @@ class index_scan(View):
def get(self, request, uuid): def get(self, request, uuid):
carte = check_carte_local(uuid) carte = check_carte_local(uuid)
if carte.detail.origine != connection.tenant:
raise Http404
# dette technique ... # dette technique ...
# pour rediriger les premières générations de qrcode # pour rediriger les premières générations de qrcode
# m.tibillet.re et raffinerie # m.tibillet.re et raffinerie
@ -97,8 +104,8 @@ class index_scan(View):
reponse_server_cashless = self.check_carte_serveur_cashless(carte.uuid) reponse_server_cashless = self.check_carte_serveur_cashless(carte.uuid)
if reponse_server_cashless.status_code == 200: if reponse_server_cashless.status_code == 200:
json_reponse = json.loads(reponse_server_cashless.json()) json_reponse = json.loads(reponse_server_cashless.json())
liste_assets = json_reponse.get('liste_assets')
email = json_reponse.get('email') email = json_reponse.get('email')
a_jour_cotisation = json_reponse.get('a_jour_cotisation')
if json_reponse.get('history'): if json_reponse.get('history'):
for his in json_reponse.get('history'): for his in json_reponse.get('history'):
@ -108,10 +115,8 @@ class index_scan(View):
request, request,
self.template_name, self.template_name,
{ {
'tarifs_adhesion': TarifsAdhesion.objects.all(), 'tarifs_adhesion': Article.objects.filter(categorie_article=Article.ADHESION).order_by('-prix'),
'adhesion_obligatoire': configuration.adhesion_obligatoire, 'adhesion_obligatoire': configuration.adhesion_obligatoire,
'assets': json_reponse.get('assets'),
'total_monnaie': json_reponse.get('total_monnaie'),
'history': json_reponse.get('history'), 'history': json_reponse.get('history'),
'carte_resto': configuration.carte_restaurant, 'carte_resto': configuration.carte_restaurant,
'site_web': configuration.site_web, 'site_web': configuration.site_web,
@ -119,8 +124,11 @@ class index_scan(View):
'numero_carte': carte.number, 'numero_carte': carte.number,
'client_name': carte.detail.origine.name, 'client_name': carte.detail.origine.name,
'domain': sub_addr, 'domain': sub_addr,
'informations_carte': reponse_server_cashless.text, # 'informations_carte': reponse_server_cashless.text,
'liste_assets': liste_assets, 'total_monnaie': json_reponse.get('total_monnaie'),
'assets': json_reponse.get('assets'),
'a_jour_cotisation': a_jour_cotisation,
# 'liste_assets': liste_assets,
'email': email, 'email': email,
'billetterie_bool': configuration.activer_billetterie, 'billetterie_bool': configuration.activer_billetterie,
} }
@ -135,45 +143,54 @@ class index_scan(View):
logger.error(reponse_server_cashless) logger.error(reponse_server_cashless)
return HttpResponse('Forbidden', status=status.HTTP_403_FORBIDDEN) return HttpResponse('Forbidden', status=status.HTTP_403_FORBIDDEN)
else: else:
return HttpResponse(f'{reponse_server_cashless.status_code}', status=reponse_server_cashless.status_code) return HttpResponse("Serveur non disponible. Merci de revenir ultérieurement.",
status=status.HTTP_503_SERVICE_UNAVAILABLE)
def post(self, request, uuid): def post(self, request, uuid):
carte = check_carte_local(uuid) carte = check_carte_local(uuid)
if carte.detail.origine != connection.tenant: if carte.detail.origine != connection.tenant:
raise Http404 raise Http404
data = request.POST data = request.POST
print(data) print(data)
# c'est une recharge montant_adhesion = data.get('montant_adhesion')
if data.get('montant_recharge') and data.get('email'): montant_recharge = data.get('montant_recharge')
# c'est un paiement
if (montant_adhesion or montant_recharge) and data.get('email'):
# montant_recharge = data.get('montant_recharge') # montant_recharge = data.get('montant_recharge')
montant_recharge = float("{0:.2f}".format(float(data.get('montant_recharge')))) ligne_articles = []
if montant_recharge > 0: metadata = {}
metadata['recharge_carte_uuid'] = str(carte.uuid)
# reponse_server_cashless = self.check_carte_serveur_cashless(carte.uuid) if montant_recharge:
# configuration = Configuration.get_solo()
art, created = Article.objects.get_or_create( art, created = Article.objects.get_or_create(
name="Recharge Carte", name="Recharge Carte",
prix=1, prix=1,
publish=False,
categorie_article=Article.RECHARGE_CASHLESS, categorie_article=Article.RECHARGE_CASHLESS,
) )
ligne_article = LigneArticle.objects.create( ligne_article_recharge = LigneArticle.objects.create(
article=art, article=art,
qty=montant_recharge, qty=montant_recharge,
) )
ligne_articles.append(ligne_article_recharge)
metadata = {
'recharge_carte_uuid': str(carte.uuid),
'recharge_carte_montant': str(montant_recharge),
}
metadata['recharge_carte_montant'] = str(montant_recharge)
if montant_adhesion:
art_adhesion = Article.objects.get(pk=data.get('pk_adhesion'))
ligne_article_recharge = LigneArticle.objects.create(
article=art_adhesion,
qty=1,
)
ligne_articles.append(ligne_article_recharge)
metadata['pk_adhesion'] = str(art_adhesion.pk)
if len(ligne_articles) > 0:
new_checkout_session = creation_checkout_stripe( new_checkout_session = creation_checkout_stripe(
email_paiement=data.get('email'), email_paiement=data.get('email'),
liste_ligne_article = [ligne_article,], liste_ligne_article=ligne_articles,
metadata=metadata, metadata=metadata,
absolute_domain=request.build_absolute_uri().partition('/qr')[0], absolute_domain=request.build_absolute_uri().partition('/qr')[0],
) )
@ -182,48 +199,9 @@ class index_scan(View):
print(new_checkout_session.checkout_session.stripe_id) print(new_checkout_session.checkout_session.stripe_id)
return new_checkout_session.redirect_to_stripe() return new_checkout_session.redirect_to_stripe()
# c'est la première étape de l'adhésion # Email seul sans montant, c'est une adhésion
elif data.get('email') \ elif data.get('email'):
and not data.get('prenom') \
and not data.get('prenom') \
and not data.get('tel') :
sess = requests.Session()
configuration = Configuration.get_solo()
r = sess.post(
f'{configuration.server_cashless}/api/billetterie_qrcode_adhesion',
headers={
'Authorization': f'Api-Key {configuration.key_cashless}'
},
data={
'email': data.get('email'),
'uuid_carte': carte.uuid,
})
sess.close()
# nouveau membre crée avec uniquqment l'email on demande la suite.
if r.status_code in (201, 204) :
messages.success(request, f"{data.get('email')}", extra_tags='email')
return HttpResponseRedirect(f'#demande_nom_prenom_tel')
#partial information :
elif r.status_code == 206:
partial = json.loads(r.text)
messages.success(request, f"{data.get('email')}", extra_tags='email')
if partial.get('name'):
messages.success(request, f"Email déja connu. Name déja connu", extra_tags='name')
if partial.get('prenom'):
messages.success(request, f"Email déja connu. prenom déja connu", extra_tags='prenom')
if partial.get('tel'):
messages.success(request, f"Email déja connu. tel déja connu", extra_tags='tel')
return HttpResponseRedirect(f'#demande_nom_prenom_tel')
else:
messages.error(request, f'Erreur {r.status_code} {r.text}')
return HttpResponseRedirect(f'#erreur')
# suite de l'adhesion
elif data.get('email') and data.get('name') and data.get('prenom') and data.get('tel'):
sess = requests.Session() sess = requests.Session()
configuration = Configuration.get_solo() configuration = Configuration.get_solo()
r = sess.post( r = sess.post(
@ -241,34 +219,65 @@ class index_scan(View):
sess.close() sess.close()
# nouveau membre crée, on demande la suite. # nouveau membre crée avec uniquement l'email on demande la suite.
if r.status_code == 202 : # HTTP_202_ACCEPTED
messages.success(request, f"Merci ! Membre créé et carte liée.") # HTTP_201_CREATED
if r.status_code in (201, 204):
messages.success(request, f"{data.get('email')}", extra_tags='email')
return HttpResponseRedirect(f'#demande_nom_prenom_tel')
# partial information :
elif r.status_code == 206:
partial = json.loads(r.text)
messages.success(request, f"{data.get('email')}", extra_tags='email')
if partial.get('name'):
messages.success(request, f"Email déja connu. Name déja connu", extra_tags='name')
if partial.get('prenom'):
messages.success(request, f"Email déja connu. prenom déja connu", extra_tags='prenom')
if partial.get('tel'):
messages.success(request, f"Email déja connu. tel déja connu", extra_tags='tel')
return HttpResponseRedirect(f'#demande_nom_prenom_tel')
# nouveau membre crée, on demande la suite.
elif r.status_code == 202:
messages.success(request, f"Carte liée au membre {data.get('email')}")
return HttpResponseRedirect(f'#adhesionsuccess') return HttpResponseRedirect(f'#adhesionsuccess')
else: else:
messages.error(request, f'Erreur {r.status_code} {r.text}') messages.error(request, f'Erreur {r.status_code} {r.text}')
return HttpResponseRedirect(f'#erreur') return HttpResponseRedirect(f'#erreur')
def postPaimentRecharge(paiementStripe: Paiement_stripe, request): @receiver(pre_save, sender=Paiement_stripe)
def changement_paid_to_valid(sender, instance: Paiement_stripe, update_fields=None, **kwargs):
# si l'instance vient d'être créé, ne rien faire :
if instance.pk is None:
pass
else:
paiementStripe = instance
if paiementStripe.status == Paiement_stripe.PAID: if paiementStripe.status == Paiement_stripe.PAID:
# old_instance = Paiement_stripe.objects.get(pk=paiementStripe.pk)
# print(f"on passe de {old_instance.status} à {paiementStripe.status}")
# on passe de non payé -> payé
metadata_db_json = paiementStripe.metadata_stripe metadata_db_json = paiementStripe.metadata_stripe
metadata_db = json.loads(metadata_db_json) metadata_db = json.loads(metadata_db_json)
uuid_carte = metadata_db.get('recharge_carte_uuid') uuid_carte = metadata_db.get('recharge_carte_uuid')
total_rechargement = metadata_db.get('recharge_carte_montant') recharge_carte_montant = metadata_db.get('recharge_carte_montant')
pk_adhesion = metadata_db.get('pk_adhesion')
if uuid_carte and total_rechargement : if recharge_carte_montant or pk_adhesion:
# on vérifie toujours que la carte vienne bien du domain et Client tenant.
carte = check_carte_local(uuid_carte) carte = check_carte_local(uuid_carte)
if carte.detail.origine != connection.tenant:
logger.error(f"{timezone.now()} " data_pour_serveur_cashless = {
f"postPaimentRecharge {uuid_carte} : " 'uuid': carte.uuid,
f"carte detail origine correspond pas : {carte.detail.origine} != {connection.tenant}") 'uuid_commande': paiementStripe.uuid,
raise Http404 }
if recharge_carte_montant:
data_pour_serveur_cashless['recharge_qty'] = float(recharge_carte_montant)
if pk_adhesion :
adhesion = Article.objects.get(pk=pk_adhesion)
data_pour_serveur_cashless['tarif_adhesion'] = adhesion.prix
sess = requests.Session() sess = requests.Session()
configuration = Configuration.get_solo() configuration = Configuration.get_solo()
@ -277,26 +286,24 @@ def postPaimentRecharge(paiementStripe: Paiement_stripe, request):
headers={ headers={
'Authorization': f'Api-Key {configuration.key_cashless}' 'Authorization': f'Api-Key {configuration.key_cashless}'
}, },
data={ data=data_pour_serveur_cashless,
'uuid': uuid_carte, )
'qty': float(total_rechargement),
'uuid_commande': paiementStripe.uuid,
})
sess.close() sess.close()
print(
logger.info(f"{timezone.now()} demande au serveur cashless pour un rechargement. réponse : {r.status_code} ") f"{timezone.now()} demande au serveur cashless pour un rechargement. réponse : {r.status_code} ")
print (f"{timezone.now()} demande au serveur cashless pour un rechargement. réponse : {r.status_code} ")
if r.status_code == 200: if r.status_code == 200:
# la commande a été envoyé au serveur cashless, on la met en validée # la commande a été envoyé au serveur cashless et validé.
paiementStripe.status = Paiement_stripe.VALID paiementStripe.status = Paiement_stripe.VALID
paiementStripe.save()
return HttpResponseRedirect(f'#success')
elif paiementStripe.status == Paiement_stripe.VALID: '''
messages.success(request, f"Le paiement a déja été validé.") # return HttpResponseRedirect(f'#success')
return HttpResponseRedirect(f'#historique') #
# elif paiementStripe.status == Paiement_stripe.VALID:
return HttpResponseRedirect(f'#erreurpaiement') # messages.success(request, f"Le paiement a déja été validé.")
# return HttpResponseRedirect(f'#historique')
#
# return HttpResponseRedirect(f'#erreurpaiement')
'''