from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.messages.views import SuccessMessageMixin from django.db import transaction from django.shortcuts import render from django.urls import reverse_lazy from django.views.generic import TemplateView, CreateView, FormView, DetailView, DeleteView, UpdateView from django_addanother.views import CreatePopupMixin from orders_app.forms import OrderForm, OrderLineFormSet from orders_app.models import Order, Store, OrderProduct class DashboardPageView(LoginRequiredMixin, TemplateView): template_name = "diaxeirisi/Dashboard.Default.html" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["active_page"] = 'dashboard' return context class OrderDetailView(DetailView): model = Order template_name = 'orders/order_detail.html' def get_context_data(self, **kwargs): context = super(OrderDetailView, self).get_context_data(**kwargs) return context class OrderCreate(CreateView): model = Order template_name = 'orders/order_create.html' form_class = OrderForm success_url = None def get_context_data(self, **kwargs): data = super(OrderCreate, self).get_context_data(**kwargs) if self.request.POST: data['order_products'] = OrderLineFormSet(self.request.POST) else: data['order_products'] = OrderLineFormSet() return data #def post(self, request): # for i in request: # print(i) def form_valid(self, form): context = self.get_context_data() order_products = context['order_products'] #print(order_products) with transaction.atomic(): if order_products.is_valid(): self.object = form.save(commit=False) self.object.save() order_id = self.object print('VALID') print(order_id) order_products.instance = self.object #print(order_products.save(commit=False)) instances = order_products.save(commit=False) print(instances) for each in instances: print(each.product) print(each.amount) a = OrderProduct(order=order_id, product=each.product, amount=each.amount, color1=each.color1, color2=each.color2, info=each.info) a.save(force_insert=True) return super(OrderCreate, self).form_valid(form) def get_success_url(self): return reverse_lazy('orders_app:order_detail', kwargs={'pk': self.object.pk}) # @method_decorator(login_required) # def dispatch(self, *args, **kwargs): # return super(OrderCreate, self).dispatch(*args, **kwargs) class OrderUpdate(UpdateView): model = Order form_class = OrderForm template_name = 'orders/order_create.html' def get_context_data(self, **kwargs): data = super(OrderUpdate, self).get_context_data(**kwargs) if self.request.POST: data['order_products'] = OrderUpdate(self.request.POST, instance=self.object) else: data['order_products'] = OrderUpdate(instance=self.object) return data def form_valid(self, form): context = self.get_context_data() order_products = context['order_products'] with transaction.atomic(): self.object = form.save() if order_products.is_valid(): order_products.instance = self.object order_products.save() return super(OrderUpdate, self).form_valid(form) def get_success_url(self): return reverse_lazy('orders_app:order_detail', kwargs={'pk': self.object.pk}) # @method_decorator(login_required) # def dispatch(self, *args, **kwargs): # return super(OrderUpdate, self).dispatch(*args, **kwargs) class OrderDelete(DeleteView): model = Order template_name = 'orders/confirm_delete.html' success_url = reverse_lazy('orders_app:homepage')