142 lines
4.3 KiB
Python
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
|