utilise un dict plutôt qu'une classe.
This commit is contained in:
parent
412aa86c7e
commit
41cd94e072
|
|
@ -4,11 +4,10 @@ from django.contrib.auth.models import Group
|
|||
from solo.admin import SingletonModelAdmin
|
||||
|
||||
from AuthBillet.models import HumanUser, SuperHumanUser, TermUser
|
||||
from BaseBillet.models import Configuration, Event, OptionGenerale, Product, Price, Reservation, LigneArticle, Ticket
|
||||
from BaseBillet.models import Configuration, Event, OptionGenerale, Product, Price, Reservation, LigneArticle, Ticket, Paiement_stripe
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
|
||||
from Customers.models import Client
|
||||
from PaiementStripe.models import Paiement_stripe
|
||||
|
||||
|
||||
class StaffAdminSite(AdminSite):
|
||||
|
|
|
|||
|
|
@ -7,8 +7,7 @@ from rest_framework.generics import get_object_or_404
|
|||
|
||||
import PaiementStripe
|
||||
from AuthBillet.models import TibilletUser, HumanUser
|
||||
from BaseBillet.models import Event, Price, Product, Reservation, Configuration, LigneArticle, Ticket
|
||||
from PaiementStripe.models import Paiement_stripe
|
||||
from BaseBillet.models import Event, Price, Product, Reservation, Configuration, LigneArticle, Ticket, Paiement_stripe
|
||||
from PaiementStripe.views import creation_paiement_stripe
|
||||
|
||||
|
||||
|
|
@ -261,6 +260,7 @@ class ReservationValidator(serializers.Serializer):
|
|||
liste_ligne_article=lignes_article,
|
||||
metadata=metadata,
|
||||
source=Paiement_stripe.API_BILLETTERIE,
|
||||
reservation=reservation,
|
||||
absolute_domain=self.context.get('request').build_absolute_uri().partition('/api')[0],
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
default_app_config = 'BaseBillet.apps.BasebilletConfig'
|
||||
|
|
@ -6,4 +6,3 @@ class BasebilletConfig(AppConfig):
|
|||
|
||||
def ready(self):
|
||||
import BaseBillet.signals
|
||||
super().ready()
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
# Generated by Django 2.2 on 2021-10-24 10:22
|
||||
# Generated by Django 2.2 on 2021-10-29 10:24
|
||||
|
||||
from django.conf import settings
|
||||
import django.contrib.postgres.fields.jsonb
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import stdimage.models
|
||||
|
|
@ -15,7 +16,6 @@ class Migration(migrations.Migration):
|
|||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('QrcodeCashless', '0002_cartecashless_user'),
|
||||
('PaiementStripe', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
|
|
@ -24,9 +24,9 @@ class Migration(migrations.Migration):
|
|||
fields=[
|
||||
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
|
||||
('name', models.CharField(max_length=200)),
|
||||
('datetime', models.DateTimeField()),
|
||||
('short_description', models.CharField(max_length=250)),
|
||||
('long_description', models.TextField(blank=True, null=True)),
|
||||
('datetime', models.DateTimeField()),
|
||||
('img', stdimage.models.StdImageField(upload_to='images/', validators=[stdimage.validators.MaxSizeValidator(1920, 1920)])),
|
||||
('reservations', models.PositiveSmallIntegerField(default=0)),
|
||||
('categorie', models.CharField(choices=[('LIV', 'Concert'), ('FES', 'Festival'), ('REU', 'Réunion'), ('CON', 'Conférence')], default='LIV', max_length=3, verbose_name="Catégorie d'évènement")),
|
||||
|
|
@ -64,12 +64,26 @@ class Migration(migrations.Migration):
|
|||
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')),
|
||||
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
|
||||
('datetime', models.DateTimeField(auto_now=True)),
|
||||
('status', models.CharField(choices=[('C', 'Annulée'), ('N', 'Non payée'), ('P', 'Payée'), ('V', 'Validée')], default='N', 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')),
|
||||
('options', models.ManyToManyField(blank=True, to='BaseBillet.OptionGenerale')),
|
||||
('user_commande', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'ordering': ('-datetime',),
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Ticket',
|
||||
fields=[
|
||||
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
|
||||
('first_name', models.CharField(max_length=200)),
|
||||
('last_name', models.CharField(max_length=200)),
|
||||
('status', models.CharField(choices=[('N', 'Non actif'), ('K', 'Non scanné'), ('S', 'scanné')], default='N', max_length=1, verbose_name='Status du scan')),
|
||||
('reservation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tickets', to='BaseBillet.Reservation')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Price',
|
||||
|
|
@ -81,7 +95,22 @@ class Migration(migrations.Migration):
|
|||
('id_price_stripe', models.CharField(blank=True, max_length=30, null=True)),
|
||||
('stock', models.SmallIntegerField(blank=True, null=True)),
|
||||
('max_per_user', models.PositiveSmallIntegerField(default=10)),
|
||||
('product', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Product')),
|
||||
('product', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='prices', to='BaseBillet.Product')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Paiement_stripe',
|
||||
fields=[
|
||||
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=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_add=True, verbose_name='Date')),
|
||||
('last_action', models.DateTimeField(auto_now=True)),
|
||||
('status', models.CharField(choices=[('N', 'Lien de paiement non créé'), ('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')),
|
||||
('source', models.CharField(choices=[('Q', 'Depuis scan QR-Code'), ('B', 'Depuis billetterie')], default='B', max_length=1, verbose_name='Source de la commande')),
|
||||
('total', models.FloatField(default=0)),
|
||||
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
|
|
@ -90,22 +119,20 @@ class Migration(migrations.Migration):
|
|||
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, primary_key=True, serialize=False)),
|
||||
('datetime', models.DateTimeField(auto_now=True)),
|
||||
('qty', models.SmallIntegerField()),
|
||||
('status', models.CharField(choices=[('C', 'Annulée'), ('N', 'Non payée'), ('P', 'Payée'), ('V', 'Validée par serveur cashless')], default='N', max_length=3, verbose_name='Status de ligne article')),
|
||||
('carte', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='QrcodeCashless.CarteCashless')),
|
||||
('paiement_stripe', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='PaiementStripe.Paiement_stripe')),
|
||||
('product', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Product')),
|
||||
('reservation', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation')),
|
||||
('paiement_stripe', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Paiement_stripe')),
|
||||
('price', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Price')),
|
||||
],
|
||||
options={
|
||||
'ordering': ('-datetime',),
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='products',
|
||||
field=models.ManyToManyField(blank=True, to='BaseBillet.Product'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='event',
|
||||
name='tarifs',
|
||||
field=models.ManyToManyField(to='BaseBillet.Price'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Configuration',
|
||||
fields=[
|
||||
|
|
@ -120,6 +147,7 @@ class Migration(migrations.Migration):
|
|||
('facebook', models.URLField(blank=True, null=True)),
|
||||
('instagram', models.URLField(blank=True, null=True)),
|
||||
('adhesion_obligatoire', models.BooleanField(default=False)),
|
||||
('name_required_for_ticket', models.BooleanField(default=False, verbose_name='Billet nominatifs')),
|
||||
('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)),
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-24 10:31
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='price',
|
||||
name='product',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='prices', to='BaseBillet.Product'),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Generated by Django 2.2 on 2021-10-29 10:52
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='paiement_stripe',
|
||||
name='reservation',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='BaseBillet.Reservation'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-24 10:40
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0002_auto_20211024_1431'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='event',
|
||||
name='tarifs',
|
||||
),
|
||||
]
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-24 11:32
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0003_remove_event_tarifs'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='lignearticle',
|
||||
name='product',
|
||||
),
|
||||
]
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-24 11:32
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0004_remove_lignearticle_product'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='lignearticle',
|
||||
name='price',
|
||||
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Price'),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-25 05:31
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0005_lignearticle_price'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='reservation',
|
||||
name='uuid',
|
||||
field=models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Ticket',
|
||||
fields=[
|
||||
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
|
||||
('first_name', models.CharField(max_length=200)),
|
||||
('last_name', models.CharField(max_length=200)),
|
||||
('scan_status', models.CharField(choices=[('N', 'Non scanné'), ('S', 'scanné')], default='N', max_length=1, verbose_name='Status du scan')),
|
||||
('reservation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='BaseBillet.Reservation')),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-25 05:36
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0006_auto_20211025_0931'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='reservation',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('C', 'Annulée'), ('N', 'Non payée'), ('P', 'Payée'), ('V', 'Validée')], default='N', max_length=3, verbose_name='Status de la réservation'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-25 05:43
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0007_auto_20211025_0936'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='configuration',
|
||||
name='name_required_for_ticket',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-25 05:45
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0008_configuration_name_required_for_ticket'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='reservation',
|
||||
name='datetime',
|
||||
field=models.DateTimeField(auto_now=True),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-25 06:02
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0009_reservation_datetime'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='lignearticle',
|
||||
name='reservation',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='paiements', to='BaseBillet.Reservation'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='ticket',
|
||||
name='reservation',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tickets', to='BaseBillet.Reservation'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-26 10:59
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0010_auto_20211025_1002'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='lignearticle',
|
||||
name='reservation',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='configuration',
|
||||
name='name_required_for_ticket',
|
||||
field=models.BooleanField(default=False, verbose_name='Billet nominatifs'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='ticket',
|
||||
name='scan_status',
|
||||
field=models.CharField(choices=[('N', 'Non actif'), ('K', 'Non scanné'), ('S', 'scanné')], default='N', max_length=1, verbose_name='Status du scan'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-26 11:07
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('PaiementStripe', '0001_initial'),
|
||||
('BaseBillet', '0011_auto_20211026_1459'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='reservation',
|
||||
name='paiement',
|
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='reservation', to='PaiementStripe.Paiement_stripe'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-26 11:26
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0012_reservation_paiement'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='lignearticle',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('C', 'Annulée'), ('N', 'Non payée'), ('P', 'Payée'), ('V', 'Validée par serveur cashless')], default='N', max_length=3, verbose_name='Status de ligne article'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-27 12:43
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0013_lignearticle_status'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='lignearticle',
|
||||
options={'ordering': ('-datetime',)},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='reservation',
|
||||
options={'ordering': ('-datetime',)},
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='ticket',
|
||||
old_name='scan_status',
|
||||
new_name='status',
|
||||
),
|
||||
]
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-27 12:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0014_auto_20211027_1643'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='reservation',
|
||||
name='options',
|
||||
field=models.ManyToManyField(blank=True, null=True, to='BaseBillet.OptionGenerale'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-27 12:54
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('BaseBillet', '0015_auto_20211027_1654'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='reservation',
|
||||
name='options',
|
||||
field=models.ManyToManyField(blank=True, to='BaseBillet.OptionGenerale'),
|
||||
),
|
||||
]
|
||||
|
|
@ -9,13 +9,13 @@ from django.db.models import Q
|
|||
from django.db.models.signals import post_save, pre_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils import timezone
|
||||
from django.contrib.postgres.fields import JSONField
|
||||
from solo.models import SingletonModel
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from stdimage import StdImageField
|
||||
from stdimage.validators import MaxSizeValidator
|
||||
from django.db import connection
|
||||
|
||||
from PaiementStripe.models import Paiement_stripe
|
||||
from QrcodeCashless.models import CarteCashless
|
||||
from TiBillet import settings
|
||||
import stripe
|
||||
|
|
@ -314,6 +314,8 @@ class Event(models.Model):
|
|||
verbose_name_plural = _('Evenements')
|
||||
|
||||
|
||||
|
||||
|
||||
class Reservation(models.Model):
|
||||
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True, db_index=True)
|
||||
datetime = models.DateTimeField(auto_now=True)
|
||||
|
|
@ -335,8 +337,8 @@ class Reservation(models.Model):
|
|||
status = models.CharField(max_length=3, choices=TYPE_CHOICES, default=UNPAID,
|
||||
verbose_name=_("Status de la réservation"))
|
||||
|
||||
paiement = models.OneToOneField(Paiement_stripe, on_delete=models.PROTECT, blank=True, null=True,
|
||||
related_name='reservation')
|
||||
# paiement = models.OneToOneField(Paiement_stripe, on_delete=models.PROTECT, blank=True, null=True,
|
||||
# related_name='reservation')
|
||||
|
||||
options = models.ManyToManyField(OptionGenerale, blank=True)
|
||||
|
||||
|
|
@ -408,6 +410,59 @@ class Ticket(models.Model):
|
|||
ordering = ('-datetime',)
|
||||
|
||||
|
||||
|
||||
class Paiement_stripe(models.Model):
|
||||
"""
|
||||
La commande
|
||||
"""
|
||||
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True, db_index=True)
|
||||
detail = models.CharField(max_length=50, blank=True, null=True)
|
||||
|
||||
id_stripe = models.CharField(max_length=80, blank=True, null=True)
|
||||
metadata_stripe = JSONField(blank=True, null=True)
|
||||
|
||||
order_date = models.DateTimeField(auto_now_add=True, verbose_name="Date")
|
||||
last_action = models.DateTimeField(auto_now=True)
|
||||
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, blank=True, null=True)
|
||||
|
||||
NON, OPEN, PENDING, EXPIRE, PAID, VALID, CANCELED = 'N', 'O', 'W', 'E', 'P', 'V', 'C'
|
||||
STATUT_CHOICES = (
|
||||
(NON, 'Lien de paiement non créé'),
|
||||
(OPEN, 'Envoyée a Stripe'),
|
||||
(PENDING, 'En attente de paiement'),
|
||||
(EXPIRE, 'Expiré'),
|
||||
(PAID, 'Payée'),
|
||||
(VALID, 'Payée et validée'), # envoyé sur serveur cashless
|
||||
(CANCELED, 'Annulée'),
|
||||
)
|
||||
|
||||
reservation = models.ForeignKey(Reservation, on_delete=models.PROTECT, blank=True, null=True)
|
||||
|
||||
status = models.CharField(max_length=1, choices=STATUT_CHOICES, default=NON, verbose_name="Statut de la commande")
|
||||
|
||||
QRCODE, API_BILLETTERIE = 'Q', 'B'
|
||||
SOURCE_CHOICES = (
|
||||
(QRCODE, _('Depuis scan QR-Code')),
|
||||
(API_BILLETTERIE, _('Depuis billetterie')),
|
||||
)
|
||||
source = models.CharField(max_length=1, choices=SOURCE_CHOICES, default=API_BILLETTERIE, verbose_name="Source de la commande")
|
||||
|
||||
total = models.FloatField(default=0)
|
||||
|
||||
def uuid_8(self):
|
||||
return f"{self.uuid}".partition('-')[0]
|
||||
|
||||
def __str__(self):
|
||||
return self.uuid_8()
|
||||
|
||||
def articles(self):
|
||||
return " - ".join(
|
||||
[f"{ligne.product.name} {ligne.qty * ligne.product.prix}€" for ligne in self.lignearticle_set.all()])
|
||||
|
||||
|
||||
|
||||
|
||||
class LigneArticle(models.Model):
|
||||
uuid = models.UUIDField(primary_key=True, db_index=True, default=uuid.uuid4)
|
||||
datetime = models.DateTimeField(auto_now=True)
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ import requests
|
|||
from django.db.models.signals import post_save, pre_save
|
||||
from django.dispatch import receiver
|
||||
|
||||
from BaseBillet.models import Reservation, LigneArticle, Ticket, Product, Configuration
|
||||
from BaseBillet.models import Reservation, LigneArticle, Ticket, Product, Configuration, Paiement_stripe
|
||||
import logging
|
||||
|
||||
from PaiementStripe.models import Paiement_stripe
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
logger.info(f'import basebillet.signals')
|
||||
|
||||
|
||||
@receiver(post_save, sender=Reservation)
|
||||
def trigger_reservation(sender, instance: Reservation, created, **kwargs):
|
||||
|
|
@ -122,9 +122,11 @@ def set_ligne_article_paid(old_instance, new_instance):
|
|||
ligne_article.save()
|
||||
|
||||
# si ya une reservation, on la met aussi en payée :
|
||||
# try :
|
||||
if new_instance.reservation:
|
||||
new_instance.reservation.status = Reservation.PAID
|
||||
new_instance.reservation.save()
|
||||
# except new_instance.reservation.RelatedObjectDoesNotExist:
|
||||
|
||||
|
||||
def expire_paiement_stripe(old_instance, new_instance):
|
||||
|
|
@ -136,6 +138,7 @@ def valide_stripe_paiement(old_instance, new_instance):
|
|||
logger.info(f" TRIGGER PAIEMENT STRIPE valide_stripe_paiement {old_instance.status} to {new_instance.status}")
|
||||
pass
|
||||
|
||||
|
||||
######################## TRIGGER RESERVATION ########################
|
||||
|
||||
|
||||
|
|
@ -153,42 +156,23 @@ def error_regression(old_instance, new_instance):
|
|||
pass
|
||||
|
||||
|
||||
# def pass(old_instance, new_instance):
|
||||
|
||||
# On déclare les transitions possibles entre différents etats des statuts.
|
||||
# Exemple première ligne : Si status passe de PENDING vers PAID, alors on lance set_ligne_article_paid
|
||||
class Transitions():
|
||||
''''''
|
||||
'''
|
||||
Reservation choices :
|
||||
(CANCELED, _('Annulée')),
|
||||
(UNPAID, _('Non payée')),
|
||||
(PAID, _('Payée')),
|
||||
(VALID, _('Validée')),
|
||||
'''
|
||||
RESERVATION = {
|
||||
|
||||
TRANSITIONS = {
|
||||
'RESERVATION': {
|
||||
Reservation.UNPAID: {
|
||||
Reservation.PAID : send_billet_to_mail
|
||||
Reservation.PAID: send_billet_to_mail
|
||||
},
|
||||
Reservation.PAID: {
|
||||
LigneArticle.PAID: send_billet_to_mail,
|
||||
'_else_': error_regression,
|
||||
'_else_': error_regression,
|
||||
},
|
||||
Reservation.VALID: {
|
||||
'_all_': error_regression,
|
||||
}
|
||||
}
|
||||
'''
|
||||
Paiement_stripe choices :
|
||||
(NON, 'Lien de paiement non créé'),
|
||||
(OPEN, 'Envoyée a Stripe'),
|
||||
(PENDING, 'En attente de paiement'),
|
||||
(EXPIRE, 'Expiré'),
|
||||
(PAID, 'Payée'),
|
||||
(VALID, 'Payée et validée'), # envoyé sur serveur cashless
|
||||
(CANCELED, 'Annulée'),
|
||||
'''
|
||||
PAIEMENT_STRIPE = {
|
||||
},
|
||||
'PAIEMENT_STRIPE': {
|
||||
Paiement_stripe.PENDING: {
|
||||
Paiement_stripe.PAID: set_ligne_article_paid,
|
||||
Paiement_stripe.EXPIRE: expire_paiement_stripe,
|
||||
|
|
@ -202,15 +186,8 @@ class Transitions():
|
|||
Paiement_stripe.VALID: {
|
||||
'_all_': error_regression,
|
||||
}
|
||||
}
|
||||
'''
|
||||
LigneArticle Choices :
|
||||
(CANCELED, _('Annulée')),
|
||||
(UNPAID, _('Non payée')),
|
||||
(PAID, _('Payée')),
|
||||
(VALID, _('Validée par serveur cashless')),
|
||||
'''
|
||||
LIGNEARTICLE = {
|
||||
},
|
||||
'LIGNEARTICLE': {
|
||||
LigneArticle.UNPAID: {
|
||||
LigneArticle.PAID: check_paid,
|
||||
},
|
||||
|
|
@ -222,13 +199,13 @@ class Transitions():
|
|||
LigneArticle.VALID: {
|
||||
'_all_': error_regression,
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def pre_save_signal_status(old_instance, new_instance):
|
||||
# import ipdb; ipdb.set_trace()
|
||||
sender_str = old_instance.__class__.__name__.upper()
|
||||
dict_transition = getattr(Transitions, f"{sender_str}", None)
|
||||
dict_transition = TRANSITIONS.get(sender_str)
|
||||
if dict_transition:
|
||||
logger.info(f"dict_transition {sender_str} {new_instance} : {old_instance.status} to {new_instance.status}")
|
||||
transitions = dict_transition.get(old_instance.status, None)
|
||||
|
|
@ -240,8 +217,6 @@ def pre_save_signal_status(old_instance, new_instance):
|
|||
))))
|
||||
|
||||
if trigger_function:
|
||||
# import ipdb; ipdb.set_trace()
|
||||
|
||||
if not callable(trigger_function):
|
||||
raise Exception(f'Fonction {trigger_function} is not callable. Disdonc !?')
|
||||
trigger_function(old_instance, new_instance)
|
||||
|
|
|
|||
|
|
@ -1,32 +0,0 @@
|
|||
# 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
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Paiement_stripe',
|
||||
fields=[
|
||||
('uuid', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=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')),
|
||||
('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')),
|
||||
('total', models.FloatField(default=0)),
|
||||
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-26 12:17
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('PaiementStripe', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='paiement_stripe',
|
||||
name='source',
|
||||
field=models.CharField(choices=[('Q', 'Depuis scan QR-Code'), ('B', 'Depuis billetterie')], default='N', max_length=1, verbose_name='Statut de la commande'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='paiement_stripe',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('N', 'Lien de paiement non créé'), ('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'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 2.2 on 2021-10-26 12:19
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('PaiementStripe', '0002_auto_20211026_1617'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='paiement_stripe',
|
||||
name='source',
|
||||
field=models.CharField(choices=[('Q', 'Depuis scan QR-Code'), ('B', 'Depuis billetterie')], default='B', max_length=1, verbose_name='Statut de la commande'),
|
||||
),
|
||||
]
|
||||
|
|
@ -1,67 +1,5 @@
|
|||
from django.db import models
|
||||
from django.contrib.postgres.fields import JSONField
|
||||
import uuid
|
||||
from django.utils.translation import gettext, gettext_lazy as _
|
||||
# from django.db import models
|
||||
# from django.utils.translation import gettext, gettext_lazy as _
|
||||
|
||||
# Create your models here.
|
||||
from TiBillet import settings
|
||||
|
||||
|
||||
class Paiement_stripe(models.Model):
|
||||
"""
|
||||
La commande
|
||||
"""
|
||||
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True, db_index=True)
|
||||
detail = models.CharField(max_length=50, blank=True, null=True)
|
||||
|
||||
id_stripe = models.CharField(max_length=80, blank=True, null=True)
|
||||
metadata_stripe = JSONField(blank=True, null=True)
|
||||
|
||||
order_date = models.DateTimeField(auto_now_add=True, verbose_name="Date")
|
||||
last_action = models.DateTimeField(auto_now=True)
|
||||
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, blank=True, null=True)
|
||||
|
||||
NON, OPEN, PENDING, EXPIRE, PAID, VALID, CANCELED = 'N', 'O', 'W', 'E', 'P', 'V', 'C'
|
||||
STATUT_CHOICES = (
|
||||
(NON, 'Lien de paiement non créé'),
|
||||
(OPEN, 'Envoyée a Stripe'),
|
||||
(PENDING, 'En attente de paiement'),
|
||||
(EXPIRE, 'Expiré'),
|
||||
(PAID, 'Payée'),
|
||||
(VALID, 'Payée et validée'), # envoyé sur serveur cashless
|
||||
(CANCELED, 'Annulée'),
|
||||
)
|
||||
|
||||
status = models.CharField(max_length=1, choices=STATUT_CHOICES, default=NON, verbose_name="Statut de la commande")
|
||||
|
||||
QRCODE, API_BILLETTERIE = 'Q', 'B'
|
||||
SOURCE_CHOICES = (
|
||||
(QRCODE, _('Depuis scan QR-Code')),
|
||||
(API_BILLETTERIE, _('Depuis billetterie')),
|
||||
)
|
||||
source = models.CharField(max_length=1, choices=SOURCE_CHOICES, default=API_BILLETTERIE, verbose_name="Source de la commande")
|
||||
|
||||
total = models.FloatField(default=0)
|
||||
|
||||
def uuid_8(self):
|
||||
return f"{self.uuid}".partition('-')[0]
|
||||
|
||||
def __str__(self):
|
||||
return self.uuid_8()
|
||||
|
||||
def articles(self):
|
||||
return " - ".join(
|
||||
[f"{ligne.product.name} {ligne.qty * ligne.product.prix}€" for ligne in self.lignearticle_set.all()])
|
||||
|
||||
|
||||
''' 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
|
||||
'''
|
||||
|
|
|
|||
|
|
@ -12,8 +12,7 @@ from django.utils import timezone
|
|||
from django.views import View
|
||||
|
||||
from AuthBillet.models import HumanUser
|
||||
from BaseBillet.models import Configuration, LigneArticle
|
||||
from PaiementStripe.models import Paiement_stripe
|
||||
from BaseBillet.models import Configuration, LigneArticle, Paiement_stripe, Reservation
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
@ -25,6 +24,7 @@ class creation_paiement_stripe():
|
|||
email_paiement: str,
|
||||
liste_ligne_article: list,
|
||||
metadata: dict,
|
||||
reservation: (Reservation, None),
|
||||
source: str,
|
||||
absolute_domain: str
|
||||
) -> None:
|
||||
|
|
@ -33,6 +33,7 @@ class creation_paiement_stripe():
|
|||
self.liste_ligne_article = liste_ligne_article
|
||||
self.email_paiement = email_paiement
|
||||
self.metadata = metadata
|
||||
self.reservation = reservation
|
||||
self.source = source
|
||||
|
||||
self.configuration = Configuration.get_solo()
|
||||
|
|
@ -74,6 +75,7 @@ class creation_paiement_stripe():
|
|||
user=self.user,
|
||||
total=self.total,
|
||||
metadata_stripe=self.metadata_json,
|
||||
reservation=self.reservation,
|
||||
source=self.source,
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -11,8 +11,7 @@ from rest_framework.generics import get_object_or_404
|
|||
from django.views import View
|
||||
from rest_framework import status
|
||||
|
||||
from BaseBillet.models import Configuration, Product, LigneArticle, Price
|
||||
from PaiementStripe.models import Paiement_stripe
|
||||
from BaseBillet.models import Configuration, Product, LigneArticle, Price, Paiement_stripe
|
||||
from PaiementStripe.views import creation_paiement_stripe
|
||||
from QrcodeCashless.models import CarteCashless
|
||||
|
||||
|
|
@ -202,6 +201,7 @@ class index_scan(View):
|
|||
email_paiement=data.get('email'),
|
||||
liste_ligne_article=ligne_articles,
|
||||
metadata=metadata,
|
||||
reservation=None,
|
||||
source=Paiement_stripe.QRCODE,
|
||||
absolute_domain=request.build_absolute_uri().partition('/qr')[0],
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue