Last active
June 23, 2016 20:57
-
-
Save mekhami/665889eb73fa64dedd6b41646181a3b0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.conf import settings | |
from django.core.urlresolvers import reverse_lazy | |
from django.http import HttpResponseRedirect | |
from django.shortcuts import render | |
from django.views import generic | |
from dal import autocomplete | |
from hashids import Hashids | |
from . import forms | |
from . import models | |
# Create your views here. | |
class AdbookIndex(generic.TemplateView): | |
template_name = 'cms/index.html' | |
class CampaignIndex(generic.ListView): | |
model = models.Campaign | |
template_name = 'campaigns/index.html' | |
class CampaignCreate(generic.CreateView): | |
model = models.Campaign | |
form_class = forms.CampaignForm | |
class CampaignDelete(generic.DeleteView): | |
model = models.Campaign | |
success_url = reverse_lazy('campaigns:campaign-index') | |
template_name = 'cms/confirm_delete.html' | |
class CampaignUpdate(generic.UpdateView): | |
model = models.Campaign | |
form_class = forms.CampaignForm | |
class CampaignDetail(generic.DetailView): | |
model = models.Campaign | |
class ProductTypeIndex(generic.ListView): | |
model = models.ProductType | |
template_name = 'product_types/product_type_index.html' | |
class ProductTypeCreate(generic.CreateView): | |
model = models.ProductType | |
form_class = forms.ProductTypeForm | |
template_name = 'product_types/product_type_create.html' | |
class ProductTypeDelete(generic.DeleteView): | |
model = models.ProductType | |
success_url = reverse_lazy('campaigns:product-type-index') | |
template_name = 'cms/confirm_delete.html' | |
class ProductTypeUpdate(generic.UpdateView): | |
model = models.ProductType | |
form_class = forms.ProductTypeForm | |
template_name = 'product_types/product_type_update.html' | |
class ProductTypeDetail(generic.DetailView): | |
model = models.ProductType | |
template_name = 'product_types/product_type_detail.html' | |
class OrderIndex(generic.ListView): | |
model = models.Order | |
template_name = 'orders/order_index.html' | |
class OrderCreate(generic.CreateView): | |
model = models.Order | |
template_name = 'orders/order_create.html' | |
form_class = forms.OrderForm | |
class OrderDetail(generic.DetailView): | |
model = models.Order | |
template_name = 'orders/order_detail.html' | |
class OrderUpdate(generic.UpdateView): | |
model = models.Order | |
form_class = forms.OrderForm | |
template_name = 'orders/order_update.html' | |
def get_context_data(self, **kwargs): | |
# Add the product formset to the context, | |
# bound if it's passed in as a kwarg, unbound if not | |
context = super().get_context_data(**kwargs) | |
if 'product_formset' not in kwargs: | |
context['products_set'] = forms.ProductFormSet(instance=self.object) | |
else: | |
context['products_set'] = kwargs['product_formset'] | |
return context | |
def post(self, request, *args, **kwargs): | |
self.object = self.get_object() | |
form = self.get_form() | |
product_formset = forms.ProductFormSet(self.request.POST, instance=self.object) | |
if all([form.is_valid() and product_formset.is_valid()]): | |
return self.form_valid(form, product_formset) | |
else: | |
return self.form_invalid(form, product_formset) | |
def form_valid(self, form, product_formset): | |
self.object = form.save() | |
product_formset.save() | |
return HttpResponseRedirect(self.get_success_url()) | |
def form_invalid(self, form, product_formset): | |
return self.render_to_response( | |
self.get_context_data(form=form, product_formset=product_formset) | |
) | |
class OrderDelete(generic.DeleteView): | |
model = models.Order | |
success_url = reverse_lazy('campaigns:order-index') | |
template_name = 'cms/confirm_delete.html' | |
class CustomerIndex(generic.ListView): | |
model = models.Customer | |
template_name = 'customers/customer_index.html' | |
class CustomerCreate(generic.CreateView): | |
model = models.Customer | |
template_name = 'customers/customer_create.html' | |
form_class = forms.CustomerForm | |
class CustomerDelete(generic.DeleteView): | |
model = models.Customer | |
success_url = reverse_lazy('campaigns:customer-index') | |
template_name = 'cms/confirm_delete.html' | |
class CustomerUpdate(generic.UpdateView): | |
model = models.Customer | |
template_name = 'customers/customer_update.html' | |
form_class = forms.CustomerForm | |
class CustomerDetail(generic.DetailView): | |
model = models.Customer | |
template_name = 'customers/customer_detail.html' | |
class OrderConfirm(generic.UpdateView): | |
template_name = 'orders/confirm.html' | |
form_class = forms.PaymentForm | |
success_url = '/thanks' | |
model = models.Order | |
def get_object(self, queryset=None): | |
hashids = Hashids(salt=settings.SECRET_KEY, min_length=8) | |
try: | |
return models.Order.objects.get(id=hashids.decode(self.kwargs.get('hash'))[0]) | |
except IndexError: | |
return None | |
def form_valid(self, form): | |
print('saving customer information') | |
self.object.paid = True | |
self.object.customer.phone_number = form.cleaned_data['phone_number'] | |
self.object.customer.email = form.cleaned_data['email'] | |
self.object.save() | |
print('customer information saved') | |
return HttpResponseRedirect(self.get_success_url()) | |
def get_success_url(self): | |
return reverse_lazy('campaigns:thanks', kwargs={'hash': self.object.public_url_hash}) | |
class CustomerAutocomplete(autocomplete.Select2QuerySetView): | |
def get_queryset(self): | |
if not self.request.user.is_authenticated(): | |
return models.Customer.objects.none() | |
qs = models.Customer.objects.all() | |
if self.q: | |
qs = qs.filter(name__istartswith=self.q) | |
return qs | |
class ThanksView(generic.DetailView): | |
template_name = 'campaigns/thanks.html' | |
model = models.Order | |
def get_object(self, queryset=None): | |
hashids = Hashids(salt=settings.SECRET_KEY, min_length=8) | |
try: | |
return models.Order.objects.get(id=hashids.decode(self.kwargs.get('hash'))[0]) | |
except IndexError: | |
return None |
audiolion
commented
Jun 22, 2016
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment