Created
April 30, 2017 02:18
-
-
Save alisonamerico/bb3c8e8fb5d4aea1719b74948a1aafd0 to your computer and use it in GitHub Desktop.
views.py - checkout
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
# coding=utf-8 | |
from pagseguro import PagSeguro | |
from django.shortcuts import get_object_or_404, redirect | |
from django.views.generic import ( | |
RedirectView, TemplateView, ListView, DetailView | |
) | |
from django.forms import modelformset_factory | |
from django.contrib import messages | |
from django.contrib.auth.mixins import LoginRequiredMixin | |
from django.core.urlresolvers import reverse | |
from catalog.models import Product | |
from .models import CartItem, Order | |
class CreateCartItemView(RedirectView): | |
def get_redirect_url(self, *args, **kwargs): | |
product = get_object_or_404(Product, slug=self.kwargs['slug']) | |
if self.request.session.session_key is None: | |
self.request.session.save() | |
cart_item, created = CartItem.objects.add_item( | |
self.request.session.session_key, product | |
) | |
if created: | |
messages.success(self.request, 'Produto adicionado com sucesso') | |
else: | |
messages.success(self.request, 'Produto atualizado com sucesso') | |
return reverse('checkout:cart_item') | |
class CartItemView(TemplateView): | |
template_name = 'checkout/cart.html' | |
def get_formset(self, clear=False): | |
CartItemFormSet = modelformset_factory( | |
CartItem, fields=('quantity',), can_delete=True, extra=0 | |
) | |
session_key = self.request.session.session_key | |
if session_key: | |
if clear: | |
formset = CartItemFormSet( | |
queryset=CartItem.objects.filter(cart_key=session_key) | |
) | |
else: | |
formset = CartItemFormSet( | |
queryset=CartItem.objects.filter(cart_key=session_key), | |
data=self.request.POST or None | |
) | |
else: | |
formset = CartItemFormSet(queryset=CartItem.objects.none()) | |
return formset | |
def get_context_data(self, **kwargs): | |
context = super(CartItemView, self).get_context_data(**kwargs) | |
context['formset'] = self.get_formset() | |
return context | |
def post(self, request, *args, **kwargs): | |
formset = self.get_formset() | |
context = self.get_context_data(**kwargs) | |
if formset.is_valid(): | |
formset.save() | |
messages.success(request, 'Carrinho atualizado com sucesso') | |
context['formset'] = self.get_formset(clear=True) | |
return self.render_to_response(context) | |
class CheckoutView(LoginRequiredMixin, TemplateView): | |
template_name = 'checkout/checkout.html' | |
def get(self, request, *args, **kwargs): | |
session_key = request.session.session_key | |
if session_key and CartItem.objects.filter(cart_key=session_key).exists(): | |
cart_itens = CartItem.objects.filter(cart_key=session_key) | |
order = Order.objects.create_order( | |
user=request.user, cart_itens=cart_itens | |
) | |
else: | |
messages.info(request, 'Não há itens no carrinho de compras') | |
return redirect('checkout:cart_item') | |
response = super(CheckoutView, self).get(request, *args, **kwargs) | |
response.context_data['order'] = order | |
return response | |
class OrderListView(LoginRequiredMixin, ListView): | |
template_name = 'checkout/order_list.html' | |
paginate_by = 10 | |
def get_queryset(self): | |
return Order.objects.filter(user=self.request.user) | |
class OrderDetailView(LoginRequiredMixin, DetailView): | |
template_name = 'checkout/order_detail.html' | |
def get_queryset(self): | |
return Order.objects.filter(user=self.request.user) | |
class PagSeguroView(LoginRequiredMixin, RedirectView): | |
def get_redirect_url(self, *args, **kwargs): | |
order_pk = self.kwargs.get('pk') | |
order = get_object_or_404( | |
Order.objects.filter(user=self.request.user), pk=order_pk | |
) | |
pg = order.pagseguro() | |
pg.redirect_url = self.request.build_absolute_uri( | |
reverse('checkout:order_detail', args=[order.pk]) | |
) | |
response = pg.checkout() | |
return response.payment_url | |
create_cartitem = CreateCartItemView.as_view() | |
cart_item = CartItemView.as_view() | |
checkout = CheckoutView.as_view() | |
order_list = OrderListView.as_view() | |
order_detail = OrderDetailView.as_view() | |
pagseguro_view = PagSeguroView.as_view() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment