amiibofindr/amiibofindr/apps/amiibo/views.py

142 lines
4.3 KiB
Python

# coding: utf-8
# django
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render, get_object_or_404
from django.views.generic.base import View
from django.utils.translation import ugettext as _
# amiibo
from .models import (
Collection, Amiibo,
AmiiboFigure, AmiiboCard
)
from . import services
class CollectionView(View):
template = 'amiibo/collection.html'
type = Amiibo.FIGURE
model = AmiiboFigure
def get(self, request, collection=None, dummy=None):
if collection:
collection = get_object_or_404(Collection, pk=collection)
if self.type == self.model.FIGURE:
amiibo_list = collection.figures
elif self.type == self.model.CARD:
amiibo_list = collection.cards
else:
amiibo_list = collection.amiibo
else:
collection = None
amiibo_list = self.model.objects.all()
return render(request, self.template, {
'selected_collection': collection,
'amiibo_list': amiibo_list,
'item': collection,
})
class CollectionFigureView(CollectionView):
type = Amiibo.FIGURE
model = AmiiboFigure
class CollectionCardView(CollectionView):
template = 'amiibo/collection-cards.html'
type = Amiibo.CARD
model = AmiiboCard
class AmiiboView(View):
def get(self, request, collection=None, amiibo=None, dummy=None):
amiibo_obj = get_object_or_404(self.model,
pk=amiibo,
# collection__slug=collection,
type=self.type)
return render(request, self.template, {
'selected_collection': amiibo_obj.collection,
'amiibo': amiibo_obj,
'item': amiibo_obj
})
class AmiiboFigureView(AmiiboView):
template = 'amiibo/amiibo-figure.html'
type = Amiibo.FIGURE
model = AmiiboFigure
class AmiiboCardView(AmiiboView):
template = 'amiibo/amiibo-card.html'
type = Amiibo.CARD
model = AmiiboCard
class UserAmiiboView(View):
actions = {
'+owned': 'add_owned',
'-owned': 'remove_owned',
'+wishlist': 'add_wishlist',
'-wishlist': 'remove_wishlist',
'+trade': 'add_trade',
'-trade': 'remove_trade',
'+-trade': 'toggle_trade',
}
def get(self, request, amiibo, action):
amiibo = get_object_or_404(Amiibo, pk=amiibo)
# amiibo = obj.as_type()
if action in self.actions:
method = getattr(self, self.actions[action], None)
if method:
result = method(request, amiibo)
if result:
return result
# Handle templating
request_from = request.GET.get('from', None)
if request_from == 'detail':
return render(request,
'amiibo/widgets/relation_header_buttons.html',
{
'amiibo': amiibo,
'item': amiibo
})
return HttpResponseRedirect(amiibo.as_type().get_absolute_url())
def add_wishlist(self, request, amiibo):
services.user_add_wishlist(request.user, amiibo)
# TODO: Add message
def remove_wishlist(self, request, amiibo):
services.user_remove_wishlist(request.user, amiibo)
# TODO: Add message
def add_trade(self, request, amiibo):
if services.is_owned_by(amiibo, request.user):
services.user_add_trade(request.user, amiibo)
# TODO: Add message
def remove_trade(self, request, amiibo):
if services.is_owned_by(amiibo, request.user):
services.user_remove_trade(request.user, amiibo)
# TODO: Add message
def toggle_trade(self, request, amiibo):
if services.is_owned_by(amiibo, request.user):
services.user_toggle_trade(request.user, amiibo)
# TODO: Add message
def add_owned(self, request, amiibo):
services.user_add_owned(request.user, amiibo)
# TODO: Add message
def remove_owned(self, request, amiibo):
services.user_remove_owned(request.user, amiibo)
# TODO: Add message