@ -1,13 +1,15 @@
# -*- coding: utf8 -*-
from django . shortcuts import render_to_response
from django . template import RequestContext
from django . contrib . auth . forms import PasswordChangeForm
from django . contrib . auth . decorators import login_required
from django . db . models import Count
from django . db . models import Count , Max
from django . http import HttpResponseRedirect
from main . models import Plugin , PluginPermission
from django . contrib . auth . forms import PasswordChangeForm
from django . shortcuts import render_to_response
from django . template import RequestContext
from buyable . models import Purchase , Buyable , BuyableType
from main . helper import getUserFromAuthblob
from main . models import Plugin , PluginPermission
@login_required
def startpage ( request ) :
@ -16,40 +18,33 @@ def startpage(request):
'''
drinks = BuyableType . objects . get ( name = " Getränk " ) . buyable_set . all ( )
snacks = BuyableType . objects . get ( name = " Snack " ) . buyable_set . all ( )
allMost = Purchase . objects . filter ( isDeposit = False ) . values ( ' buyable__name ' , ' buyable__id ' , ' buyable__image ' , ' buyable__price ' , ' buyable__deposit ' )
allMostDrinks = allMost . filter ( buyable__in = drinks ) . annotate ( num_buys = Count ( ' buyable ' ) ) . order_by ( ' -num_buys ' )
allMostSnacks = allMost . filter ( buyable__in = snacks ) . annotate ( num_buys = Count ( ' buyable ' ) ) . order_by ( ' -num_buys ' )
usersMostDrinks = allMost . filter ( buyable__in = drinks ) . filter ( order__user = request . user . id ) . annotate ( num_buys = Count ( ' buyable ' ) ) . order_by ( ' -num_buys ' )
usersMostSnacks = allMost . filter ( buyable__in = snacks ) . filter ( order__user = request . user . id ) . annotate ( num_buys = Count ( ' buyable ' ) ) . order_by ( ' -num_buys ' )
usersLastDrinks = allMost . filter ( buyable__in = drinks ) . filter ( order__user = request . user . id ) . annotate ( num_buys = Count ( ' buyable ' ) ) . order_by ( ' -order__dateTime ' )
usersLastSnacks = allMost . filter ( buyable__in = snacks ) . filter ( order__user = request . user . id ) . annotate ( num_buys = Count ( ' buyable ' ) ) . order_by ( ' -order__dateTime ' )
usersLastDrinks = allMost . distinct ( ) . filter ( buyable__in = drinks ) . filter ( order__user = request . user . id ) . order_by ( ' -order__dateTime ' )
usersLastSnacks = allMost . distinct ( ) . filter ( buyable__in = snacks ) . filter ( order__user = request . user . id ) . order_by ( ' -order__dateTime ' )
#if someone knows a better way to do this, just replace this code
#purpose: filter usersLast so that it only contains unique items
#hint: distinct() does not work because dateTime is included due to order_by(), so all items appear distinct
usersLastDrinks_unique = [ ]
for x in usersLastDrinks :
if not x in usersLastDrinks_unique :
usersLastDrinks_unique . append ( x )
#usersLastDrinks = map(lambda x:{ "buyable__name" : x }, usersLastDrinks_unique)
usersLastDrinks = usersLastDrinks_unique
usersLastSnacks_unique = [ ]
for x in usersLastSnacks :
if not x in usersLastSnacks_unique :
usersLastSnacks_unique . append ( x )
#usersLastSnacks_unique = usersLastSnacks.distinct()
usersLastSnacks = usersLastSnacks_unique
return render_to_response ( " main/startpage.html " , { ' allMostDrinks ' : allMostDrinks [ : 5 ] , ' allMostSnacks ' : allMostSnacks [ : 5 ] , ' usersMostDrinks ' : usersMostDrinks [ : 5 ] , ' usersMostSnacks ' : usersMostSnacks [ : 5 ] , ' usersLastDrinks ' : usersLastDrinks [ : 5 ] , ' usersLastSnacks ' : usersLastSnacks [ : 5 ] } , RequestContext ( request ) )
context = { }
drink_data = ( drinks , ( ' allMostDrinks ' , ' usersMostDrinks ' , ' usersLastDrinks ' ) )
snack_data = ( snacks , ( ' allMostSnacks ' , ' usersMostSnacks ' , ' usersLastSnacks ' ) )
for buyables , context_vars in ( drink_data , snack_data ) :
buyables = buyables . values ( ' name ' , ' id ' , ' image ' , ' price ' , ' deposit ' )
# allMost
context [ context_vars [ 0 ] ] = buyables . filter ( purchase__isDeposit = False ) . annotate (
num_buys = Count ( ' purchase ' ) ) . order_by ( ' -num_buys ' ) [ : 5 ]
# filtert fuer die anderen Variablen vor
buyables = buyables . filter ( purchase__order__user = request . user . id ,
purchase__isDeposit = False )
buyables = buyables . annotate ( num_buys = Count ( ' purchase ' ) )
# usersMost
context [ context_vars [ 1 ] ] = buyables . order_by ( ' -num_buys ' ) [ : 5 ]
# usersLast
buyables = buyables . annotate ( max_dateTime = Max ( ' purchase__order__dateTime ' ) )
context [ context_vars [ 2 ] ] = buyables . order_by ( ' -max_dateTime ' ) [ : 5 ]
return render_to_response ( " main/startpage.html " , context , RequestContext ( request ) )
def register ( request ) :
""" The " no registration available " page... """