diff --git a/k4ever/api/__init__.py b/k4ever/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/k4ever/api/models.py b/k4ever/api/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/k4ever/api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/k4ever/api/tests.py b/k4ever/api/tests.py new file mode 100644 index 0000000..2247054 --- /dev/null +++ b/k4ever/api/tests.py @@ -0,0 +1,23 @@ +""" +This file demonstrates two different styles of tests (one doctest and one +unittest). These will both pass when you run "manage.py test". + +Replace these with more appropriate tests for your application. +""" + +from django.test import TestCase + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.failUnlessEqual(1 + 1, 2) + +__test__ = {"doctest": """ +Another way to test that 1 + 1 is equal to 2. + +>>> 1 + 1 == 2 +True +"""} + diff --git a/k4ever/api/urls.py b/k4ever/api/urls.py new file mode 100644 index 0000000..5434be8 --- /dev/null +++ b/k4ever/api/urls.py @@ -0,0 +1,9 @@ +from django.conf.urls.defaults import * + +#/api/ +urlpatterns = patterns('', + (r'^store/$', 'api.views.showItems'), + (r'^store/show/(\d+)/$', 'api.views.showItem'), + (r'^store/buy/(\d+)/(|with/deposit|only/deposit)/?$', 'api.views.buyItem'), + (r'^store/history/?$', 'api.views.history'), +) diff --git a/k4ever/api/views.py b/k4ever/api/views.py new file mode 100644 index 0000000..1873c83 --- /dev/null +++ b/k4ever/api/views.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +from django.contrib.auth.decorators import login_required +from django.http import HttpResponse + +import datetime +from buyable.models import Buyable, Purchase, Order +from django.core import serializers + + +@login_required +def showItems(request): + # FIXME: Implement pagination here + items = Buyable.objects.all() + + #return json-container + container = serializers.serialize('json', items) + return HttpResponse(container,'application/javascript') + +@login_required +def showItem(request, itemid): + try: + item = Buyable.objects.get(id=itemid) + except Buyable.DoesNotExist: + # baww, kein item mit der id :( (oder mutax trollt rum) + return HttpResponse(status=400) + + #return json-container + container = serializers.serialize('json', [item]) + return HttpResponse(container,'application/javascript') + + +@login_required +def buyItem(request, itemid, buymode=""): + user = request.user + try: + item = Buyable.objects.get(id=itemid) + except Buyable.DoesNotExist: + # oh no! kein item mit der id :( mutax trollt rum) + return HttpResponseRedirect("/store/buy/") + """ tristate variable buymode: + "" only item + "with/deposit" item and deposit + "only/deposit" only deposit + """ + order = Order() + order.create(user) + order.save() # for the id! + if buymode == "" or buymode == "with/deposit": + p = Purchase.create(order, item, isDeposit=False) + p.order = order + p.save() + # TANNEK! if buymode == "with/dopsit" or buymode == "only/deposit": + if buymode == "with/deposit" or buymode == "only/deposit": + p = Purchase.create(order, item, isDeposit=True) + p.order = order + p.save() + order.updatePrice(commit=True) + order.save() + + #return json-container + #container = serializers.serialize('json', items) + #return HttpResponse(container,'application/javascript') + return HttpResponse(status=200) + #return HttpResponseRedirect("/store/bought/%s/" % (order.id)) + +@login_required +def history(request): + hist = Order.objects.filter(user=request.user.id).order_by("-dateTime") + #return json-container + container = serializers.serialize('json', [hist]) + return HttpResponse(container,'application/javascript') + diff --git a/k4ever/k4ever.db b/k4ever/k4ever.db index a822f24..1129fea 100644 Binary files a/k4ever/k4ever.db and b/k4ever/k4ever.db differ diff --git a/k4ever/main/templates/main/startpage.html b/k4ever/main/templates/main/startpage.html index 54335c6..33d9986 100644 --- a/k4ever/main/templates/main/startpage.html +++ b/k4ever/main/templates/main/startpage.html @@ -1,8 +1,19 @@ {% extends "base.html" %} {% block "content" %} + {% if allMost %} + Am beliebtesten ist:

+ {% for buyable in allMost %} + {{ buyable.buyable__name }} ( {{ buyable.num_buys }} mal)
+ {% endfor %} +
+ {% else %} + {{ error }} + Noch niemand hat was gekauft? + {% endif %} +
{% if usersMost %} - Am oeftesten hatten alle:

+ Am oeftesten hattest du:

{% for buyable in usersMost %} {{ buyable.buyable__name }} ( {{ buyable.num_buys }} mal)
{% endfor %} @@ -11,4 +22,15 @@ {{ error }} Nix gekauft? {% endif %} +
+ {% if usersLast %} + Als letztes hattest du:

+ {% for buyable in usersLast %} + {{ buyable.buyable__name }}
+ {% endfor %} +
+ {% else %} + {{ error }} + Noch nix gekauft? + {% endif %} {% endblock %} diff --git a/k4ever/main/views.py b/k4ever/main/views.py index 3c1d44b..8addc4d 100644 --- a/k4ever/main/views.py +++ b/k4ever/main/views.py @@ -7,8 +7,13 @@ from buyable.models import Purchase, Buyable @login_required def startpage(request): - usersMost = Purchase.objects.values('buyable__name').annotate(num_buys=Count('buyable')).order_by('-num_buys') - return render_to_response("main/startpage.html", {'usersMost': usersMost}, RequestContext(request)) + ''' Diese Funktion wird wahrscheinlich viel Last erzeugen, da + sie ueber mehrere Tabellen joined,filtered und wieder reduced. + ''' + allMost = Purchase.objects.filter(isDeposit=False).values('buyable__name').annotate(num_buys=Count('buyable')).order_by('-num_buys') + usersMost = Purchase.objects.filter(isDeposit=False).values('buyable__name').filter(order__user=request.user.id).annotate(num_buys=Count('buyable')).order_by('-num_buys') + usersLast = Purchase.objects.filter(isDeposit=False).values('buyable__name').filter(order__user=request.user.id).order_by('-order__dateTime') + return render_to_response("main/startpage.html", {'allMost' : allMost,'usersMost': usersMost, 'usersLast' : usersLast}, RequestContext(request)) def register(request): return render_to_response("registration/register.html", RequestContext(request)) diff --git a/k4ever/media/img/buyable/eis.jpeg b/k4ever/media/img/buyable/eis.jpeg new file mode 100755 index 0000000..e68b18c Binary files /dev/null and b/k4ever/media/img/buyable/eis.jpeg differ diff --git a/k4ever/urls.py b/k4ever/urls.py index a5469ca..ab668b5 100644 --- a/k4ever/urls.py +++ b/k4ever/urls.py @@ -13,6 +13,7 @@ urlpatterns = patterns('', # (r'^admin/doc/', include('django.contrib.admindocs.urls')), # user stuff? go to main (r'^$', 'main.views.startpage'), + (r'^api/', include('api.urls')), (r'^user/', include('main.urls')), (r'^transaction/', include('transaction.urls')), (r'^store/', include('buyable.urls')),