summaryrefslogtreecommitdiff
path: root/core/views.py
diff options
context:
space:
mode:
authorspl3g <spleefer6@gmail.com>2026-06-01 21:23:12 +0300
committerspl3g <spleefer6@gmail.com>2026-06-01 21:23:12 +0300
commitc0fe3e1db70bdba85cf382624817d8d8ea9d6f85 (patch)
tree74065ec21768d63f6cc537bdce72b63ddf513b32 /core/views.py
parent386e9defbea931ebc5139a5db5c74e6f44bbbe02 (diff)
add orders list, update, create
Diffstat (limited to 'core/views.py')
-rw-r--r--core/views.py104
1 files changed, 101 insertions, 3 deletions
diff --git a/core/views.py b/core/views.py
index f090d81..0e62eaf 100644
--- a/core/views.py
+++ b/core/views.py
@@ -7,9 +7,12 @@ from django.contrib.auth.views import LoginView
from django.contrib import messages
from django.db.models import Q
from django.contrib.auth.mixins import UserPassesTestMixin
+from django.http import HttpResponseRedirect
+from extra_views import CreateWithInlinesView, UpdateWithInlinesView
+from django import forms
-from .models import Product, Supplier
-from .forms import ProductForm
+from .models import Product, Supplier, Order, OrderItem
+from .forms import ProductForm, OrderForm, OrderItemFormSet
class UserLoginView(LoginView):
template_name = "core/login.html"
@@ -54,7 +57,7 @@ class AdminRequiredMixin(UserPassesTestMixin):
return (
self.request.user.is_authenticated
and self.request.user.role
- and self.request.user.role == "Администратор"
+ and self.request.user.role.name == "Администратор"
)
class ProductCreateUpdateMixin:
@@ -72,3 +75,98 @@ class ProductCreateView(AdminRequiredMixin, ProductCreateUpdateMixin, CreateView
def form_valid(self, form):
messages.success(self.request, "Товар успешно добавлен")
return super().form_valid(form)
+
+class ProductUpdateView(AdminRequiredMixin, ProductCreateUpdateMixin, UpdateView):
+ model = Product
+ form_class = ProductForm
+ template_name = "core/product_form.html"
+ success_url = reverse_lazy("product_list")
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context["is_edit"] = True
+ return context
+
+
+class AdminManagerRequiredMixin(UserPassesTestMixin):
+ def test_func(self):
+ return (
+ self.request.user.is_authenticated
+ and self.request.user.role
+ and (self.request.user.role.name == "Администратор" or self.request.user.role.name == "Менеджер")
+ )
+
+class OrderListView(AdminManagerRequiredMixin, ListView):
+ model = Order
+ template_name = "core/order_list.html"
+ context_object_name = "orders"
+
+
+class OrderCreateView(CreateWithInlinesView):
+ model = Order
+ form_class = OrderForm
+ inlines = [OrderItemFormSet]
+ success_url = reverse_lazy("order_list")
+
+class OrderUpdateView(UpdateWithInlinesView):
+ model = Order
+ form_class = OrderForm
+ inlines = [OrderItemFormSet]
+ success_url = reverse_lazy("order_list")
+
+# formset variant
+# class OrderCreateView(CreateView):
+# model = Order
+# form_class = OrderForm
+# template_name = "core/order_form.html"
+# success_url = reverse_lazy("order_list")
+
+# def get_context_data(self, **kwargs):
+# context = super().get_context_data(**kwargs)
+# if self.request.POST:
+# # re-use the bound formset if post() already stashed an invalid one
+# context["formset"] = getattr(self, "formset", OrderItemFormSet(self.request.POST))
+# else:
+# context["formset"] = OrderItemFormSet()
+# return context
+
+# def post(self, request, *args, **kwargs):
+# self.object = None
+# form = self.get_form()
+# formset = OrderItemFormSet(request.POST)
+# if form.is_valid() and formset.is_valid():
+# self.object = form.save()
+# formset.instance = self.object
+# formset.save()
+# return HttpResponseRedirect(self.get_success_url())
+# # stash the invalid formset so get_context_data renders it with errors
+# self.formset = formset
+# return self.form_invalid(form)
+
+
+# class OrderUpdateView(UpdateView):
+# model = Order
+# form_class = OrderForm
+# template_name = "core/order_form.html"
+# success_url = reverse_lazy("order_list")
+
+# def get_context_data(self, **kwargs):
+# context = super().get_context_data(**kwargs)
+# if self.request.POST:
+# context["formset"] = getattr(
+# self, "formset", OrderItemFormSet(self.request.POST, instance=self.object)
+# )
+# else:
+# context["formset"] = OrderItemFormSet(instance=self.object)
+# return context
+
+# def post(self, request, *args, **kwargs):
+# self.object = self.get_object()
+# form = self.get_form()
+# formset = OrderItemFormSet(request.POST, instance=self.object)
+# if form.is_valid() and formset.is_valid():
+# form.save()
+# formset.save()
+# return HttpResponseRedirect(self.get_success_url())
+# self.formset = formset
+# return self.form_invalid(form)