Browse Source

Automatic creation of products when creating a keg

pull/1/head
Yoann Piétri 7 years ago
parent
commit
19c56ca267
  1. 18
      gestion/forms.py
  2. 43
      gestion/migrations/0010_auto_20190623_1623.py
  3. 6
      gestion/models.py
  4. 62
      gestion/views.py

18
gestion/forms.py

@ -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`.

43
gestion/migrations/0010_auto_20190623_1623.py

@ -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'),
),
]

6
gestion/models.py

@ -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.
""" """

62
gestion/views.py

@ -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'))

Loading…
Cancel
Save