3
0
Fork 0
mirror of https://github.com/nanoy42/coope synced 2024-11-22 11:23:11 +00:00

Automatic creation of products when creating a keg

This commit is contained in:
Yoann Pétri 2019-06-23 16:32:38 +02:00
parent 55e5efa38a
commit 19c56ca267
4 changed files with 118 additions and 11 deletions

View file

@ -1,6 +1,8 @@
from django import forms from django import forms
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.validators import MinValueValidator
from dal import autocomplete from dal import autocomplete
@ -44,17 +46,21 @@ class KegForm(forms.ModelForm):
""" """
A form to create and edit a :class:`~gestion.models.Keg`. A form to create and edit a :class:`~gestion.models.Keg`.
""" """
def __init__(self, *args, **kwargs):
super(KegForm, self).__init__(*args, **kwargs)
self.fields['pinte'].queryset = Product.objects.filter(draft_category=Product.DRAFT_PINTE)
self.fields['demi'].queryset = Product.objects.filter(draft_category=Product.DRAFT_DEMI)
self.fields['galopin'].queryset = Product.objects.filter(draft_category=Product.DRAFT_GALOPIN)
class Meta: class Meta:
model = Keg model = Keg
fields = "__all__" fields = ["name", "stockHold", "barcode", "amount", "capacity"]
widgets = {'amount': forms.TextInput} widgets = {'amount': forms.TextInput}
category = forms.ModelChoiceField(queryset=Category.objects.all(), label="Catégorie")
deg = forms.DecimalField(max_digits=5, decimal_places=2, label="Degré", validators=[MinValueValidator(0)])
create_galopin = forms.BooleanField(label="Créer le produit galopin ?")
def clean(self):
cleaned_data = super().clean()
if cleaned_data.get("name")[0:4] != "Fût ":
raise ValidationError("Le nom du fût doit être sous la forme 'Fût nom de la bière'")
class MenuForm(forms.ModelForm): class MenuForm(forms.ModelForm):
""" """
A form to create and edit a :class:`~gestion.models.Menu`. A form to create and edit a :class:`~gestion.models.Menu`.

View file

@ -0,0 +1,43 @@
# Generated by Django 2.1 on 2019-06-23 14:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('gestion', '0009_auto_20190506_0939'),
]
operations = [
migrations.AlterField(
model_name='historicalkeg',
name='name',
field=models.CharField(db_index=True, max_length=255, verbose_name='Nom'),
),
migrations.AlterField(
model_name='historicalproduct',
name='barcode',
field=models.CharField(db_index=True, max_length=255, verbose_name='Code barre'),
),
migrations.AlterField(
model_name='historicalproduct',
name='name',
field=models.CharField(db_index=True, max_length=255, verbose_name='Nom'),
),
migrations.AlterField(
model_name='keg',
name='name',
field=models.CharField(max_length=255, unique=True, verbose_name='Nom'),
),
migrations.AlterField(
model_name='product',
name='barcode',
field=models.CharField(max_length=255, unique=True, verbose_name='Code barre'),
),
migrations.AlterField(
model_name='product',
name='name',
field=models.CharField(max_length=255, unique=True, verbose_name='Nom'),
),
]

View file

@ -46,7 +46,7 @@ class Product(models.Model):
class Meta: class Meta:
verbose_name = "Produit" verbose_name = "Produit"
name = models.CharField(max_length=40, verbose_name="Nom", unique=True) name = models.CharField(max_length=255, verbose_name="Nom", unique=True)
""" """
The name of the product. The name of the product.
""" """
@ -62,7 +62,7 @@ class Product(models.Model):
""" """
Number of product at the bar. Number of product at the bar.
""" """
barcode = models.CharField(max_length=20, unique=True, verbose_name="Code barre") barcode = models.CharField(max_length=255, unique=True, verbose_name="Code barre")
""" """
The barcode of the product. The barcode of the product.
""" """
@ -162,7 +162,7 @@ class Keg(models.Model):
("close_keg", "Peut fermer les fûts") ("close_keg", "Peut fermer les fûts")
) )
name = models.CharField(max_length=20, unique=True, verbose_name="Nom") name = models.CharField(max_length=255, unique=True, verbose_name="Nom")
""" """
The name of the keg. The name of the keg.
""" """

View file

@ -25,7 +25,7 @@ from math import floor, ceil
from .forms import ReloadForm, RefundForm, ProductForm, KegForm, MenuForm, GestionForm, SearchMenuForm, SearchProductForm, SelectPositiveKegForm, SelectActiveKegForm, PinteForm, GenerateReleveForm, CategoryForm, SearchCategoryForm, GenerateInvoiceForm, ComputePriceForm from .forms import ReloadForm, RefundForm, ProductForm, KegForm, MenuForm, GestionForm, SearchMenuForm, SearchProductForm, SelectPositiveKegForm, SelectActiveKegForm, PinteForm, GenerateReleveForm, CategoryForm, SearchCategoryForm, GenerateInvoiceForm, ComputePriceForm
from .models import Product, Menu, Keg, ConsumptionHistory, KegHistory, Consumption, MenuHistory, Pinte, Reload, Refund, Category from .models import Product, Menu, Keg, ConsumptionHistory, KegHistory, Consumption, MenuHistory, Pinte, Reload, Refund, Category
from users.models import School from users.models import School
from preferences.models import PaymentMethod, GeneralPreferences, Cotisation, DivideHistory from preferences.models import PaymentMethod, GeneralPreferences, Cotisation, DivideHistory, PriceProfile
from users.models import CotisationHistory from users.models import CotisationHistory
@active_required @active_required
@ -452,7 +452,65 @@ def addKeg(request):
Displays a :class:`gestion.forms.KegForm` to add a :class:`gestion.models.Keg`. Displays a :class:`gestion.forms.KegForm` to add a :class:`gestion.models.Keg`.
""" """
form = KegForm(request.POST or None) form = KegForm(request.POST or None)
if(form.is_valid()): if form.is_valid():
keg = form.save(commit=False)
price_profile = get_object_or_404(PriceProfile, use_for_draft=True)
pinte_price = compute_price(form.cleaned_data["amount"]/(2*form.cleaned_data["capacity"]), price_profile.a, price_profile.b, price_profile.c, price_profile.alpha)
pinte_price = ceil(10*pinte_price)/10
name = form.cleaned_data["name"][4:]
create_galopin = form.cleaned_data["create_galopin"]
pinte = Product(
name = "Pinte " + name,
amount = pinte_price,
stockHold = 0,
stockBar = 0,
barcode = "pinte_" + form.cleaned_data["barcode"],
category = form.cleaned_data["category"],
needQuantityButton = False,
is_active = True,
volume = 50,
deg = form.cleaned_data["deg"],
adherentRequired = True,
showingMultiplier = 1,
draft_category = Product.DRAFT_PINTE
)
pinte.save()
keg.pinte = pinte
demi = Product(
name = "Demi " + name,
amount = ceil(5*pinte_price)/10,
stockHold = 0,
stockBar = 0,
barcode = "demi_" + form.cleaned_data["barcode"],
category = form.cleaned_data["category"],
needQuantityButton = False,
is_active = True,
volume = 25,
deg = form.cleaned_data["deg"],
adherentRequired = True,
showingMultiplier = 1,
draft_category = Product.DRAFT_DEMI
)
demi.save()
keg.demi = demi
if create_galopin:
galopin = Product(
name = "Galopin " + name,
amount = ceil(2.5 * pinte_price)/10,
stockHold = 0,
stockBar = 0,
barcode = "galopin_" + form.cleaned_data["barcode"],
category = form.cleaned_data["category"],
needQuantityButton = False,
is_active = True,
volume = 13,
deg = form.cleaned_data["deg"],
adherentRequired = True,
showingMultiplier = 1,
draft_category = Product.DRAFT_DEMI
)
galopin.save()
keg.galopin = galopin
keg = form.save() keg = form.save()
messages.success(request, "Le fût " + keg.name + " a bien été ajouté") messages.success(request, "Le fût " + keg.name + " a bien été ajouté")
return redirect(reverse('gestion:kegsList')) return redirect(reverse('gestion:kegsList'))