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, StoreForm, OrderLinesFormSet, CollectionTitleFormSet, CollectionForm from orders_app.models import Order, Store, Collection 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 CreateOrder(LoginRequiredMixin, SuccessMessageMixin, TemplateView): # model = Order # success_url = '/dx' # success_message = 'H Παραγγελία Καταχωρήθηκε.' # template_name = "diaxeirisi/create_order.html" # fields = [ # "customer", ## "order_date", # "delivery_date", # "store", # "product" # ] 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 CreateOrder(LoginRequiredMixin, SuccessMessageMixin, CreatePopupMixin, CreateView): form_class = OrderForm #success_url = '/dx' success_url = None success_message = 'H Παραγγελία Καταχωρήθηκε.' template_name = 'orders/order_create.html' def get_context_data(self, **kwargs): data = super(CreateOrder, self).get_context_data(**kwargs) if self.request.POST: data['titles'] = OrderLinesFormSet(self.request.POST) else: data['titles'] = OrderLinesFormSet() return data def form_valid(self, form): context = self.get_context_data() titles = context['titles'] with transaction.atomic(): form.instance.created_by = self.request.user self.object = form.save() if titles.is_valid(): titles.instance = self.object titles.save() return super(CreateOrder, self).form_valid(form) def get_success_url(self): return reverse_lazy('orders:collection_detail', kwargs={'pk': self.object.pk}) class CreateStore(LoginRequiredMixin, SuccessMessageMixin, FormView): success_message = 'Το Κατάστημα Καταχωρήθηκε.' template_name = "diaxeirisi/create_store.html" form_class = StoreForm class CollectionDetailView(DetailView): model = Collection template_name = 'orders/order_detail.html' def get_context_data(self, **kwargs): context = super(CollectionDetailView, self).get_context_data(**kwargs) return context class CollectionCreate(CreateView): model = Collection template_name = 'orders/order_create.html' form_class = CollectionForm success_url = None def get_context_data(self, **kwargs): data = super(CollectionCreate, self).get_context_data(**kwargs) if self.request.POST: data['titles'] = CollectionTitleFormSet(self.request.POST) else: data['titles'] = CollectionTitleFormSet() return data def form_valid(self, form): context = self.get_context_data() titles = context['titles'] with transaction.atomic(): form.instance.created_by = self.request.user self.object = form.save() if titles.is_valid(): titles.instance = self.object titles.save() return super(CollectionCreate, self).form_valid(form) def get_success_url(self): return reverse_lazy('orders:collection_detail', kwargs={'pk': self.object.pk}) # @method_decorator(login_required) # def dispatch(self, *args, **kwargs): # return super(CollectionCreate, self).dispatch(*args, **kwargs) class CollectionUpdate(UpdateView): model = Collection form_class = CollectionForm template_name = 'orders/order_create.html' def get_context_data(self, **kwargs): data = super(CollectionUpdate, self).get_context_data(**kwargs) if self.request.POST: data['titles'] = CollectionTitleFormSet(self.request.POST, instance=self.object) else: data['titles'] = CollectionTitleFormSet(instance=self.object) return data def form_valid(self, form): context = self.get_context_data() titles = context['titles'] with transaction.atomic(): form.instance.created_by = self.request.user self.object = form.save() if titles.is_valid(): titles.instance = self.object titles.save() return super(CollectionUpdate, self).form_valid(form) def get_success_url(self): return reverse_lazy('orders:collection_detail', kwargs={'pk': self.object.pk}) # @method_decorator(login_required) # def dispatch(self, *args, **kwargs): # return super(CollectionUpdate, self).dispatch(*args, **kwargs) class CollectionDelete(DeleteView): model = Collection template_name = 'orders/confirm_delete.html' success_url = reverse_lazy('orders:homepage')