mirror of
https://github.com/Crocmagnon/checkout.git
synced 2024-11-22 16:18:03 +01:00
Improve dummy baskets generation
This commit is contained in:
parent
2833b3b749
commit
7d217307a4
4 changed files with 72 additions and 25 deletions
15
src/purchase/fixtures/payment_methods.yaml
Normal file
15
src/purchase/fixtures/payment_methods.yaml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
- model: purchase.paymentmethod
|
||||||
|
fields:
|
||||||
|
created_at: 2022-04-26 20:30:22.960932+00:00
|
||||||
|
updated_at: 2022-04-26 20:30:22.960941+00:00
|
||||||
|
name: Espèces
|
||||||
|
- model: purchase.paymentmethod
|
||||||
|
fields:
|
||||||
|
created_at: 2022-04-26 20:30:22.960948+00:00
|
||||||
|
updated_at: 2022-04-26 20:30:22.960952+00:00
|
||||||
|
name: CB
|
||||||
|
- model: purchase.paymentmethod
|
||||||
|
fields:
|
||||||
|
created_at: 2022-04-26 20:30:22.960958+00:00
|
||||||
|
updated_at: 2022-04-26 20:30:22.960962+00:00
|
||||||
|
name: Chèque
|
32
src/purchase/fixtures/products.yaml
Normal file
32
src/purchase/fixtures/products.yaml
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
- model: purchase.product
|
||||||
|
fields:
|
||||||
|
created_at: 2022-04-26 20:30:22.959558+00:00
|
||||||
|
updated_at: 2022-04-26 20:30:22.959576+00:00
|
||||||
|
name: Clou
|
||||||
|
image: ''
|
||||||
|
unit_price_cents: 134
|
||||||
|
display_order: 1
|
||||||
|
- model: purchase.product
|
||||||
|
fields:
|
||||||
|
created_at: 2022-04-26 20:30:22.959595+00:00
|
||||||
|
updated_at: 2022-04-26 20:30:22.959600+00:00
|
||||||
|
name: Villard'Ain
|
||||||
|
image: ''
|
||||||
|
unit_price_cents: 290
|
||||||
|
display_order: 1
|
||||||
|
- model: purchase.product
|
||||||
|
fields:
|
||||||
|
created_at: 2022-04-26 20:30:22.959610+00:00
|
||||||
|
updated_at: 2022-04-26 20:30:22.959614+00:00
|
||||||
|
name: Herbier
|
||||||
|
image: ''
|
||||||
|
unit_price_cents: 330
|
||||||
|
display_order: 1
|
||||||
|
- model: purchase.product
|
||||||
|
fields:
|
||||||
|
created_at: 2022-04-26 20:30:22.959624+00:00
|
||||||
|
updated_at: 2022-04-26 20:30:22.959628+00:00
|
||||||
|
name: Blanc vache
|
||||||
|
image: ''
|
||||||
|
unit_price_cents: 650
|
||||||
|
display_order: 1
|
|
@ -2,6 +2,7 @@ import random
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
import freezegun
|
import freezegun
|
||||||
|
from django.core.management import call_command
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
|
||||||
|
@ -9,31 +10,12 @@ from purchase.models import Basket, BasketItem, PaymentMethod, Product
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = "Generates dummy data" # noqa: A003
|
help = "Generates dummy baskets" # noqa: A003
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
products = [
|
call_command("loaddata", ["payment_methods", "products"])
|
||||||
Product(name="Clou", unit_price_cents=134),
|
products = list(Product.objects.all())
|
||||||
Product(name="Villard'Ain", unit_price_cents=290),
|
payment_methods = list(PaymentMethod.objects.all())
|
||||||
Product(name="Herbier", unit_price_cents=330),
|
|
||||||
Product(name="Blanc vache", unit_price_cents=650),
|
|
||||||
]
|
|
||||||
products = Product.objects.bulk_create(products)
|
|
||||||
self.stdout.write(
|
|
||||||
self.style.SUCCESS(f"Successfully created {len(products)} products.")
|
|
||||||
)
|
|
||||||
|
|
||||||
payment_methods = [
|
|
||||||
PaymentMethod(name="Espèces"),
|
|
||||||
PaymentMethod(name="CB"),
|
|
||||||
PaymentMethod(name="Chèque"),
|
|
||||||
]
|
|
||||||
payment_methods = PaymentMethod.objects.bulk_create(payment_methods)
|
|
||||||
self.stdout.write(
|
|
||||||
self.style.SUCCESS(
|
|
||||||
f"Successfully created {len(payment_methods)} payment methods."
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
count = 0
|
count = 0
|
||||||
hours = list(range(-29, -20))
|
hours = list(range(-29, -20))
|
|
@ -33,10 +33,15 @@ class PaymentMethodQuerySet(models.QuerySet):
|
||||||
return self.annotate(sold=Count("baskets", distinct=True))
|
return self.annotate(sold=Count("baskets", distinct=True))
|
||||||
|
|
||||||
|
|
||||||
|
class PaymentMethodManager(models.Manager):
|
||||||
|
def get_by_natural_key(self, name):
|
||||||
|
return self.get(name=name)
|
||||||
|
|
||||||
|
|
||||||
class PaymentMethod(Model):
|
class PaymentMethod(Model):
|
||||||
name = models.CharField(max_length=50, unique=True, verbose_name=_("name"))
|
name = models.CharField(max_length=50, unique=True, verbose_name=_("name"))
|
||||||
|
|
||||||
objects = PaymentMethodQuerySet.as_manager()
|
objects = PaymentMethodManager.from_queryset(PaymentMethodQuerySet)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _("payment method")
|
verbose_name = _("payment method")
|
||||||
|
@ -45,6 +50,10 @@ class PaymentMethod(Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def natural_key(self):
|
||||||
|
return (self.name,)
|
||||||
|
|
||||||
|
|
||||||
def default_product_display_order():
|
def default_product_display_order():
|
||||||
last = Product.objects.last()
|
last = Product.objects.last()
|
||||||
|
@ -65,6 +74,11 @@ class ProductQuerySet(models.QuerySet):
|
||||||
return self.annotate(sold=Coalesce(Sum("basket_items__quantity"), 0))
|
return self.annotate(sold=Coalesce(Sum("basket_items__quantity"), 0))
|
||||||
|
|
||||||
|
|
||||||
|
class ProductManager(models.Manager):
|
||||||
|
def get_by_natural_key(self, name):
|
||||||
|
return self.get(name=name)
|
||||||
|
|
||||||
|
|
||||||
class Product(Model):
|
class Product(Model):
|
||||||
name = models.CharField(max_length=250, unique=True, verbose_name=_("name"))
|
name = models.CharField(max_length=250, unique=True, verbose_name=_("name"))
|
||||||
image = models.ImageField(null=True, blank=True, verbose_name=_("image"))
|
image = models.ImageField(null=True, blank=True, verbose_name=_("image"))
|
||||||
|
@ -75,7 +89,7 @@ class Product(Model):
|
||||||
default=default_product_display_order, verbose_name=_("display order")
|
default=default_product_display_order, verbose_name=_("display order")
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = ProductQuerySet.as_manager()
|
objects = ProductManager.from_queryset(ProductQuerySet)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ["display_order", "name"]
|
ordering = ["display_order", "name"]
|
||||||
|
@ -85,6 +99,10 @@ class Product(Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def natural_key(self):
|
||||||
|
return (self.name,)
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
super().save()
|
super().save()
|
||||||
if not self.image:
|
if not self.image:
|
||||||
|
|
Loading…
Reference in a new issue