Fix inline product forms POST, Add limits to default page, add all orders menu entry and GET option, fix imported modules

This commit is contained in:
2023-08-09 21:01:34 +00:00
parent cd206988ac
commit 7cb48152a0
13 changed files with 458 additions and 101 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
+51 -6
View File
@@ -1,5 +1,5 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field, Fieldset, Div, HTML, ButtonHolder, Submit
from crispy_forms.layout import Layout, Field, Fieldset, Div, Row, HTML, ButtonHolder, Submit
from django import forms
from django.urls import reverse_lazy
from django.forms.models import inlineformset_factory
@@ -8,6 +8,11 @@ from django_addanother.widgets import AddAnotherWidgetWrapper
from orders_app.custom_layout_object import Formset
from orders_app.models import Order, OrderProduct, Customer, Product, Store
from .models import *
from .custom_layout_object import Formset
import re
class CustomerForm(forms.ModelForm):
class Meta:
@@ -78,6 +83,7 @@ class StoreForm(forms.ModelForm):
class OrderLine(forms.ModelForm):
class Meta:
model = OrderProduct
exclude = ()
fields = ['id', 'order', 'product', 'amount', 'cake_type', 'cake_type_num', 'cake_color', 'cake_color_other', 'fyt_color', 'fyt_color_other', 'cake_flavor', 'cake_img', 'cream_cake_3d', 'cream_cake_height', 'cream_cake_img', 'engagement_cake_type', 'engagement_cake_base', 'engagement_cake_pcs', 'engagement_cake_pcs_other', 'engagement_cake_glaze', 'cup_flavor', 'cup_color', 'cup_color_other', 'cup_type', 'candy_bar_type', 'candy_bar_decor', 'candy_bar_decor_other', 'candy_bar_wrap', 'info']
widgets = {
'product': AddAnotherWidgetWrapper(
@@ -92,9 +98,13 @@ class OrderLine(forms.ModelForm):
'info': forms.Textarea(attrs={'rows': 2, 'cols': 30}),
}
def __init__(self, *arg, **kwarg):
super(OrderLine, self).__init__(*arg, **kwarg)
self.empty_permitted = False
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
formtag_prefix = re.sub('-[0-9]+$', '', kwargs.get('prefix', ''))
self.helper = FormHelper()
self.helper.form_tag = False
self.fields['product'].label = "Προϊόν"
self.fields['amount'].label = "Ποσότητα"
self.fields['cake_type'].label = "Τύπος"
@@ -122,6 +132,40 @@ class OrderLine(forms.ModelForm):
self.fields['candy_bar_decor_other'].label = "Ντεκόρ CandyBar Άλλο"
self.fields['candy_bar_wrap'].label = "Τύλιγμα CandyBar"
self.fields['info'].label = "Πληροφορίες"
self.helper.layout = Layout(
Row(
Field('product'),
Field('amount'),
Field('cake_type'),
Field('cake_type_num'),
Field('cake_color'),
Field('cake_color_other'),
Field('fyt_color'),
Field('fyt_color_other'),
Field('cake_flavor'),
Field('cake_img'),
Field('cream_cake_3d'),
Field('cream_cake_height'),
Field('cream_cake_img'),
Field('engagement_cake_type'),
Field('engagement_cake_base'),
Field('engagement_cake_pcs'),
Field('engagement_cake_pcs_other'),
Field('engagement_cake_glaze'),
Field('cup_flavor'),
Field('cup_color'),
Field('cup_color_other'),
Field('cup_type'),
Field('candy_bar_type'),
Field('candy_bar_decor'),
Field('candy_bar_decor_other'),
Field('candy_bar_wrap'),
Field('info'),
Field('DELETE'),
css_class='formset_row-{}'.format(formtag_prefix)
)
)
OrderLineFormSet = inlineformset_factory(
@@ -138,6 +182,7 @@ OrderLineFormSetEdit = inlineformset_factory(
class OrderForm(forms.ModelForm):
class Meta:
model = Order
exclude = ()
fields = ['order_status', 'customer_name', 'customer_address', 'customer_telephone', 'customer_email', 'delivery', 'delivery_date', 'store', 'order_info', 'order_products']
widgets = {
'delivery_date': forms.DateInput(attrs={'type': 'text', 'id': 'delivery_date', 'class': 'datepicker'}),
@@ -150,10 +195,10 @@ class OrderForm(forms.ModelForm):
}
def __init__(self, *args, **kwargs):
super(OrderForm, self).__init__(*args, **kwargs)
super(OrderForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_tag = True
self.helper.render_hidden_fields = True
#self.helper.render_hidden_fields = True
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-md-3 create-label'
self.helper.field_class = 'col-md-9'
+4 -5
View File
@@ -3,7 +3,6 @@ from django.core.validators import MinValueValidator, MaxValueValidator
from django.db import models
from phonenumber_field.modelfields import PhoneNumberField
class Store(models.Model):
name = models.CharField(max_length=128)
address = models.CharField(max_length=128)
@@ -190,7 +189,7 @@ class OrderProduct(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
amount = models.FloatField(validators=[MinValueValidator(0.01), MaxValueValidator(999)])
#az = 'ΚΙΛΑ ΓΕΥΣΗ KARDASIS Νο ΧΡΩΜΑ ΦΥΤΙΛΑΚΙ ΠΑΡΑΤΗΡΗΣΕΙΣ'
#vars = 'ΚΙΛΑ ΓΕΥΣΗ KARDASIS Νο ΧΡΩΜΑ ΦΥΤΙΛΑΚΙ ΠΑΡΑΤΗΡΗΣΕΙΣ'
cake_type = models.CharField(max_length=45, choices=CAKE_TYPES, blank=True, null=True)
cake_type_num = models.FloatField(max_length=128, default="0", blank=True, null=True)
cake_color = models.CharField(max_length=45, choices=COLOR_OPTIONS, blank=True, null=True)
@@ -199,19 +198,19 @@ class OrderProduct(models.Model):
fyt_color_other = models.CharField(max_length=128, blank=True, null=True)
cake_flavor = models.CharField(max_length=45, choices=CAKE_FLAVORS, blank=True, null=True)
cake_img = models.ImageField(blank=True, null=True)
#az = 'ΜΕΓΕΘΟΣ ΥΨΟΣ ΓΕΥΣΗ ΠΑΡΑΤΗΡΗΣΕΙΣ'
#vars = 'ΜΕΓΕΘΟΣ ΥΨΟΣ ΓΕΥΣΗ ΠΑΡΑΤΗΡΗΣΕΙΣ'
cream_cake_3d = models.CharField(max_length=45, choices=CREAM_3D, default="ΟΧΙ", blank=True)
cream_cake_height = models.FloatField(max_length=128, default="0", blank=True, null=True)
cream_cake_img = models.ImageField(blank=True, null=True)
#az = 'ΓΑΜΟΣ ΒΑΣΗ ΤΕΜΑΧΙΑ ΓΕΥΣΗ ΠΑΡΑΤΗΡΗΣΕΙΣ'
#vars = 'ΓΑΜΟΣ ΒΑΣΗ ΤΕΜΑΧΙΑ ΓΕΥΣΗ ΠΑΡΑΤΗΡΗΣΕΙΣ'
engagement_cake_type = models.CharField(max_length=45, choices=ENGAMENT_TYPE, blank=True, null=True)
engagement_cake_base = models.CharField(max_length=128, blank=True, null=True)
engagement_cake_pcs = models.CharField(max_length=45, choices=ENGAMENT_CAKE_PIECES, blank=True, null=True)
engagement_cake_pcs_other = models.CharField(max_length=128, blank=True, null=True)
engagement_cake_glaze = models.CharField(max_length=45, choices=ENGAMENT_CAKE_GLAZE, blank=True, null=True)
#az = 'ΤΕΜΑΧΙΑ ΓΕΥΣΗ ΚΥΠΕΛΛΟ ΧΡΩΜΑ ΤΕΜΑΧΙΑ ΧΡΩΜΑ ΔΙΑΚΟΣΜΗΣΗ ΤΥΛΙΓΜΕΝΑ ΠΑΡΑΤΗΡΗΣΕΙΣ'
#vars = 'ΤΕΜΑΧΙΑ ΓΕΥΣΗ ΚΥΠΕΛΛΟ ΧΡΩΜΑ ΤΕΜΑΧΙΑ ΧΡΩΜΑ ΔΙΑΚΟΣΜΗΣΗ ΤΥΛΙΓΜΕΝΑ ΠΑΡΑΤΗΡΗΣΕΙΣ'
cup_flavor = models.CharField(max_length=45, choices=CUP_FLAVORS, blank=True, null=True)
cup_color = models.CharField(max_length=45, choices=COLOR_OPTIONS, blank=True, null=True)
cup_color_other = models.CharField(max_length=128, blank=True, null=True)
+3
View File
@@ -7,6 +7,9 @@ sp1!glk2
spiti3
sp4$glku3
spiti4
sp5%glku4
pronorth
pro1!north123!@#
+57 -20
View File
@@ -15,6 +15,10 @@ from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen import canvas
from textwrap import wrap
from .models import *
from .forms import *
from django.views.generic.edit import CreateView, UpdateView
from django.db import transaction
from orders_app.forms import OrderForm, OrderLineFormSet, CustomerForm, ProductForm, StoreForm,\
@@ -267,17 +271,39 @@ class PrintView(View):
class DashboardPageView(LoginRequiredMixin, TemplateView):
template_name = "diaxeirisi/Dashboard.Default.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
time_delta = datetime.today() - timedelta(days=30)
time_delta = datetime.today() - timedelta(days=90)
try:
all_orders = self.request.GET['all_orders']
except KeyError:
all_orders = False
if self.request.user.id == 3:
context["DB_Objects"] = Order.objects.filter(store=1).filter(order_date__gte=time_delta).order_by('id').reverse()
if all_orders:
context["DB_Objects"] = Order.objects.filter(store_id=3).order_by('id').reverse()
else:
context["DB_Objects"] = Order.objects.filter(store_id=3).filter(order_date__gte=time_delta).order_by('id').reverse()
elif self.request.user.id == 4:
context["DB_Objects"] = Order.objects.filter(store=2).filter(order_date__gte=time_delta).order_by('id').reverse()
if all_orders:
context["DB_Objects"] = Order.objects.filter(store_id=4).order_by('id').reverse()
else:
context["DB_Objects"] = Order.objects.filter(store_id=4).filter(order_date__gte=time_delta).order_by('id').reverse()
elif self.request.user.id == 5:
context["DB_Objects"] = Order.objects.filter(store=3).filter(order_date__gte=time_delta).order_by('id').reverse()
if all_orders:
context["DB_Objects"] = Order.objects.filter(store_id=5).order_by('id').reverse()
else:
context["DB_Objects"] = Order.objects.filter(store_id=5).filter(order_date__gte=time_delta).order_by('id').reverse()
elif self.request.user.id == 6:
if all_orders:
context["DB_Objects"] = Order.objects.filter(store_id=6).order_by('id').reverse()
else:
context["DB_Objects"] = Order.objects.filter(store_id=6).filter(order_date__gte=time_delta).order_by('id').reverse()
elif self.request.user.id == 7:
if all_orders:
context["DB_Objects"] = Order.objects.filter(store_id=7).order_by('id').reverse()
else:
context["DB_Objects"] = Order.objects.filter(store_id=7).filter(order_date__gte=time_delta).order_by('id').reverse()
else:
context["DB_Objects"] = Order.objects.filter(order_date__gte=time_delta).order_by('id').reverse()
context["active_page"] = 'dashboard'
@@ -297,24 +323,32 @@ class ProductPageView(LoginRequiredMixin, TemplateView):
class OrderProductsPageView(LoginRequiredMixin, TemplateView):
template_name = "diaxeirisi/Dashboard.OrderProducts.html"
time_delta = datetime.today() - timedelta(days=30)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
print(self.request.user.id)
if self.request.user.id == 3:
order_ids = Order.objects.filter(store=1).filter(order_date__gte=time_delta).order_by('id').reverse()
order_ids = Order.objects.filter(store_id=3).order_by('-id')[:200]
order_ids = list(answer.id for answer in order_ids)
context["DB_Objects"] = OrderProduct.objects.filter(order_id__in=order_ids)
elif self.request.user.id == 4:
order_ids = Order.objects.filter(store=2).filter(order_date__gte=time_delta).order_by('id').reverse()
order_ids = Order.objects.filter(store_id=4).order_by('-id')[:200]
order_ids = list(answer.id for answer in order_ids)
context["DB_Objects"] = OrderProduct.objects.filter(order_id__in=order_ids)
elif self.request.user.id == 5:
order_ids = Order.objects.filter(store=3).filter(order_date__gte=time_delta).order_by('id').reverse()
order_ids = Order.objects.filter(store_id=5).order_by('-id')[:200]
order_ids = list(answer.id for answer in order_ids)
context["DB_Objects"] = OrderProduct.objects.filter(order_id__in=order_ids)
elif self.request.user.id == 6:
order_ids = Order.objects.filter(store_id=6).order_by('-id')[:200]
order_ids = list(answer.id for answer in order_ids)
context["DB_Objects"] = OrderProduct.objects.filter(order_id__in=order_ids)
elif self.request.user.id == 7:
order_ids = Order.objects.filter(store_id=7).order_by('-id')[:200]
order_ids = list(answer.id for answer in order_ids)
context["DB_Objects"] = OrderProduct.objects.filter(order_id__in=order_ids)
else:
context["DB_Objects"] = OrderProduct.objects.all().filter(order_date__gte=time_delta).order_by('id').reverse()
context["DB_Objects"] = OrderProduct.objects.all().order_by('-id')[:200]
context["active_page"] = 'products'
return context
@@ -449,6 +483,7 @@ class OrderUpdate(UpdateView):
form_class = OrderForm
template_name = 'orders/order_create.html'
def get_success_url(self):
return reverse_lazy('orders_app:order_update', kwargs={'pk': self.object.pk})
@@ -458,25 +493,27 @@ class OrderUpdate(UpdateView):
def get_order_id(self):
return self.kwargs['pk']
def get_context_data(self, **kwargs):
context = super(OrderUpdate, self).get_context_data(**kwargs)
def get_context_data(self, *args, **kwargs):
data = super(OrderUpdate, self).get_context_data(**kwargs)
if self.request.POST:
context['order_products'] = OrderLineFormSetEdit(self.request.POST, self.request.FILES, instance=self.object)
data['order_products'] = OrderLineFormSetEdit(self.request.POST, instance=self.object)
else:
context['order_products'] = OrderLineFormSetEdit(instance=self.object)
return context
data['order_products'] = OrderLineFormSetEdit(instance=self.object)
return data
def post(self, request, *args, **kwargs):
order_data = Order.objects.get(id=self.get_order_id())
#order_line_data = OrderProduct.objects.filter(order=self.get_order_id())
form = OrderForm(self.request.POST, self.request.FILES, instance=order_data) #, initial={model_to_dict(order_data)}
order_products = OrderLineFormSetEdit(self.request.POST, self.request.FILES, instance=form.instance)
if form.is_valid() and order_products.is_valid():
form.save()
for inline_form in order_products:
if not inline_form.cleaned_data['DELETE']:
inline_form.save()
inline_form.save()
messages.success(self.request, "Η παραγγελία αποθηκευτηκέ")
return HttpResponseRedirect(request.META['HTTP_REFERER'])
else: