From 948ddfa0db48d3d5ce62216fbabb3bc7119eebaf Mon Sep 17 00:00:00 2001 From: Chris Heitkamp / SuperVirus <warpzone@chrisheitkamp.de> Date: Sun, 24 Aug 2014 00:48:06 +0200 Subject: [PATCH] warpshop_server: Zwischenstand --- .../warpshop_server/artikel/admin.py | 1 + .../artikel/migrations/0001_initial.py | 31 +++++++++++ .../warpshop_server/artikel/models.py | 12 ++++- .../artikel/templates/artikel/detail.html | 1 + .../artikel/templates/artikel/index.html | 9 ++++ .../warpshop_server/artikel/urls.py | 12 +++++ .../warpshop_server/artikel/views.py | 34 ++++++++++++- .../benutzer/migrations/0001_initial.py | 29 +++++++++++ .../warpshop_server/benutzer/models.py | 9 +++- .../warpshop_server/benutzer/urls.py | 9 ++++ .../warpshop_server/benutzer/views.py | 5 +- .../warpshop_server/transaktion/__init__.py | 0 .../warpshop_server/transaktion/admin.py | 20 ++++++++ .../transaktion/migrations/0001_initial.py | 51 +++++++++++++++++++ .../transaktion/migrations/__init__.py | 0 .../warpshop_server/transaktion/models.py | 34 +++++++++++++ .../warpshop_server/transaktion/tests.py | 3 ++ .../warpshop_server/transaktion/urls.py | 9 ++++ .../warpshop_server/transaktion/views.py | 6 +++ .../warpshop_server/settings/base.py | 3 ++ .../warpshop_server/warpshop_server/urls.py | 4 ++ 21 files changed, 277 insertions(+), 5 deletions(-) create mode 100644 warpshop_server/warpshop_server/artikel/migrations/0001_initial.py create mode 100644 warpshop_server/warpshop_server/artikel/templates/artikel/detail.html create mode 100644 warpshop_server/warpshop_server/artikel/templates/artikel/index.html create mode 100644 warpshop_server/warpshop_server/artikel/urls.py create mode 100644 warpshop_server/warpshop_server/benutzer/migrations/0001_initial.py create mode 100644 warpshop_server/warpshop_server/benutzer/urls.py create mode 100644 warpshop_server/warpshop_server/transaktion/__init__.py create mode 100644 warpshop_server/warpshop_server/transaktion/admin.py create mode 100644 warpshop_server/warpshop_server/transaktion/migrations/0001_initial.py create mode 100644 warpshop_server/warpshop_server/transaktion/migrations/__init__.py create mode 100644 warpshop_server/warpshop_server/transaktion/models.py create mode 100644 warpshop_server/warpshop_server/transaktion/tests.py create mode 100644 warpshop_server/warpshop_server/transaktion/urls.py create mode 100644 warpshop_server/warpshop_server/transaktion/views.py diff --git a/warpshop_server/warpshop_server/artikel/admin.py b/warpshop_server/warpshop_server/artikel/admin.py index 8ce9b72..87a851a 100644 --- a/warpshop_server/warpshop_server/artikel/admin.py +++ b/warpshop_server/warpshop_server/artikel/admin.py @@ -1,6 +1,7 @@ from __future__ import absolute_import from django.contrib import admin + from .models import Artikel admin.site.register(Artikel) diff --git a/warpshop_server/warpshop_server/artikel/migrations/0001_initial.py b/warpshop_server/warpshop_server/artikel/migrations/0001_initial.py new file mode 100644 index 0000000..8eeddb7 --- /dev/null +++ b/warpshop_server/warpshop_server/artikel/migrations/0001_initial.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Artikel', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('aktiv', models.BooleanField(default=True)), + ('barcode', models.CharField(max_length=200)), + ('name', models.CharField(max_length=200)), + ('ek', models.DecimalField(max_digits=8, decimal_places=2)), + ('vk', models.DecimalField(max_digits=8, decimal_places=2)), + ('bestand', models.IntegerField(default=0)), + ], + options={ + 'db_table': b'artikel', + 'verbose_name': b'Artikel', + 'verbose_name_plural': b'Artikel', + }, + bases=(models.Model,), + ), + ] diff --git a/warpshop_server/warpshop_server/artikel/models.py b/warpshop_server/warpshop_server/artikel/models.py index 25b4629..119cea5 100644 --- a/warpshop_server/warpshop_server/artikel/models.py +++ b/warpshop_server/warpshop_server/artikel/models.py @@ -1,7 +1,9 @@ +from __future__ import absolute_import from django.db import models + class Artikel(models.Model): - aktiv = models.BooleanField() + aktiv = models.BooleanField(default=True) barcode = models.CharField(max_length=200) name = models.CharField(max_length=200) ek = models.DecimalField(max_digits=8, decimal_places=2) @@ -10,3 +12,11 @@ class Artikel(models.Model): def __str__(self): return '%s [%s]' % (self.name, self.barcode) + + def __unicode__(self): + return u'%s [%s]' % (self.name, self.barcode) + + class Meta: + db_table = "artikel" + verbose_name = "Artikel" + verbose_name_plural = "Artikel" diff --git a/warpshop_server/warpshop_server/artikel/templates/artikel/detail.html b/warpshop_server/warpshop_server/artikel/templates/artikel/detail.html new file mode 100644 index 0000000..1774b59 --- /dev/null +++ b/warpshop_server/warpshop_server/artikel/templates/artikel/detail.html @@ -0,0 +1 @@ +{{ artikel }} diff --git a/warpshop_server/warpshop_server/artikel/templates/artikel/index.html b/warpshop_server/warpshop_server/artikel/templates/artikel/index.html new file mode 100644 index 0000000..a682796 --- /dev/null +++ b/warpshop_server/warpshop_server/artikel/templates/artikel/index.html @@ -0,0 +1,9 @@ +{% if artikel_list %} + <ul> + {% for artikel in artikel_list %} + <li><a href="{% url 'artikel:detail' artikel.id %}">{{ artikel.name }} [{{ artikel.barcode }}]</a></li> + {% endfor %} + </ul> +{% else %} + <p>Keine Artikel vorhanden.</p> +{% endif %} diff --git a/warpshop_server/warpshop_server/artikel/urls.py b/warpshop_server/warpshop_server/artikel/urls.py new file mode 100644 index 0000000..d64812e --- /dev/null +++ b/warpshop_server/warpshop_server/artikel/urls.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import +from django.conf.urls import patterns, url + +from . import views + + +urlpatterns = patterns('', + url(r'^$', views.IndexView.as_view(), name='index'), + url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'), + url(r'^(?P<pk>\d+)/results/$', views.ResultsView.as_view(), name='results'), + url(r'^barcode/(?P<barcode>\w+)/$', views.barcode, name='barcode'), +) diff --git a/warpshop_server/warpshop_server/artikel/views.py b/warpshop_server/warpshop_server/artikel/views.py index 91ea44a..0c10145 100644 --- a/warpshop_server/warpshop_server/artikel/views.py +++ b/warpshop_server/warpshop_server/artikel/views.py @@ -1,3 +1,33 @@ -from django.shortcuts import render +from django.shortcuts import get_object_or_404, render +from django.http import HttpResponseRedirect, HttpResponse +from django.core.urlresolvers import reverse +from django.views import generic -# Create your views here. +from . models import Artikel + + +class IndexView(generic.ListView): + template_name = 'artikel/index.html' + context_object_name = 'artikel_list' + + def get_queryset(self): + return Artikel.objects.order_by('name') + + +class DetailView(generic.DetailView): + model = Artikel + template_name = 'artikel/detail.html' + + +class ResultsView(generic.DetailView): + model = Artikel + template_name = 'artikel/results.html' + + +def barcode(request, barcode): + try: + a = Artikel.objects.get(barcode=barcode) + except Artikel.DoesNotExist: + a = Artikel(aktiv=False, barcode=barcode, name=barcode, ek=0.0, vk=0.0) + a.save() + return HttpResponseRedirect(reverse('artikel:detail', args=(a.id,))) diff --git a/warpshop_server/warpshop_server/benutzer/migrations/0001_initial.py b/warpshop_server/warpshop_server/benutzer/migrations/0001_initial.py new file mode 100644 index 0000000..425f8f7 --- /dev/null +++ b/warpshop_server/warpshop_server/benutzer/migrations/0001_initial.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Benutzer', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('aktiv', models.BooleanField(default=True)), + ('barcode', models.CharField(max_length=200)), + ('name', models.CharField(max_length=200)), + ('saldo', models.DecimalField(max_digits=8, decimal_places=2)), + ], + options={ + 'db_table': b'benutzer', + 'verbose_name': b'Benutzer', + 'verbose_name_plural': b'Benutzer', + }, + bases=(models.Model,), + ), + ] diff --git a/warpshop_server/warpshop_server/benutzer/models.py b/warpshop_server/warpshop_server/benutzer/models.py index 2987fa7..5dd54dd 100644 --- a/warpshop_server/warpshop_server/benutzer/models.py +++ b/warpshop_server/warpshop_server/benutzer/models.py @@ -1,10 +1,17 @@ +from __future__ import absolute_import from django.db import models + class Benutzer(models.Model): - aktiv = models.BooleanField() + aktiv = models.BooleanField(default=True) barcode = models.CharField(max_length=200) name = models.CharField(max_length=200) saldo = models.DecimalField(max_digits=8, decimal_places=2) def __str__(self): return '%s [%s]' % (self.name, self.barcode) + + class Meta: + db_table = "benutzer" + verbose_name = "Benutzer" + verbose_name_plural = "Benutzer" diff --git a/warpshop_server/warpshop_server/benutzer/urls.py b/warpshop_server/warpshop_server/benutzer/urls.py new file mode 100644 index 0000000..72e5024 --- /dev/null +++ b/warpshop_server/warpshop_server/benutzer/urls.py @@ -0,0 +1,9 @@ +from __future__ import absolute_import +from django.conf.urls import url + +from . import views + + +urlpatterns = [ + url(r'^$', views.index, name='index'), +] diff --git a/warpshop_server/warpshop_server/benutzer/views.py b/warpshop_server/warpshop_server/benutzer/views.py index 91ea44a..6bed9f3 100644 --- a/warpshop_server/warpshop_server/benutzer/views.py +++ b/warpshop_server/warpshop_server/benutzer/views.py @@ -1,3 +1,6 @@ from django.shortcuts import render +from django.http import HttpResponse -# Create your views here. + +def index(request): + return HttpResponse("Benutzer index.") diff --git a/warpshop_server/warpshop_server/transaktion/__init__.py b/warpshop_server/warpshop_server/transaktion/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/warpshop_server/warpshop_server/transaktion/admin.py b/warpshop_server/warpshop_server/transaktion/admin.py new file mode 100644 index 0000000..8109771 --- /dev/null +++ b/warpshop_server/warpshop_server/transaktion/admin.py @@ -0,0 +1,20 @@ +from __future__ import absolute_import +from django.contrib import admin + +from .models import Transaktion, Position + + +class PositionInline(admin.StackedInline): + model = Position + extra = 3 + + +class TransaktionAdmin(admin.ModelAdmin): +# fieldsets = [ +# (None, {'fields': ['question_text']}), +# ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), +# ] + inlines = [PositionInline] + +admin.site.register(Transaktion, TransaktionAdmin) +#admin.site.register(Position) diff --git a/warpshop_server/warpshop_server/transaktion/migrations/0001_initial.py b/warpshop_server/warpshop_server/transaktion/migrations/0001_initial.py new file mode 100644 index 0000000..d4fb860 --- /dev/null +++ b/warpshop_server/warpshop_server/transaktion/migrations/0001_initial.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('benutzer', '0001_initial'), + ('artikel', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Position', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('anzahl', models.IntegerField(default=0)), + ('ek', models.DecimalField(max_digits=8, decimal_places=2)), + ('vk', models.DecimalField(max_digits=8, decimal_places=2)), + ('artikel', models.ForeignKey(to='artikel.Artikel')), + ], + options={ + 'db_table': b'position', + 'verbose_name': b'Position', + 'verbose_name_plural': b'Positionen', + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Transaktion', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('timestamp', models.DateTimeField(auto_now_add=True)), + ('benutzer', models.ForeignKey(to='benutzer.Benutzer')), + ], + options={ + 'db_table': b'transaktion', + 'verbose_name': b'Transaktion', + 'verbose_name_plural': b'Transaktionen', + }, + bases=(models.Model,), + ), + migrations.AddField( + model_name='position', + name='transaktion', + field=models.ForeignKey(to='transaktion.Transaktion'), + preserve_default=True, + ), + ] diff --git a/warpshop_server/warpshop_server/transaktion/migrations/__init__.py b/warpshop_server/warpshop_server/transaktion/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/warpshop_server/warpshop_server/transaktion/models.py b/warpshop_server/warpshop_server/transaktion/models.py new file mode 100644 index 0000000..0f59e27 --- /dev/null +++ b/warpshop_server/warpshop_server/transaktion/models.py @@ -0,0 +1,34 @@ +from __future__ import absolute_import +from django.db import models + +from artikel.models import Artikel +from benutzer.models import Benutzer + + +class Transaktion(models.Model): + timestamp = models.DateTimeField(auto_now_add=True) + benutzer = models.ForeignKey(Benutzer) + + def __str__(self): + return '%s [%s] [%s]' % (self.id, self.timestamp, self.benutzer) + + class Meta: + db_table = "transaktion" + verbose_name = "Transaktion" + verbose_name_plural = "Transaktionen" + + +class Position(models.Model): + transaktion = models.ForeignKey(Transaktion) + artikel = models.ForeignKey(Artikel) + anzahl = models.IntegerField(default=0) + ek = models.DecimalField(max_digits=8, decimal_places=2) + vk = models.DecimalField(max_digits=8, decimal_places=2) + + def __str__(self): + return '%d-%08d: %s * %s' % (self.transaktion.id, self.id, self.anzahl, self.artikel) + + class Meta: + db_table = "position" + verbose_name = "Position" + verbose_name_plural = "Positionen" diff --git a/warpshop_server/warpshop_server/transaktion/tests.py b/warpshop_server/warpshop_server/transaktion/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/warpshop_server/warpshop_server/transaktion/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/warpshop_server/warpshop_server/transaktion/urls.py b/warpshop_server/warpshop_server/transaktion/urls.py new file mode 100644 index 0000000..72e5024 --- /dev/null +++ b/warpshop_server/warpshop_server/transaktion/urls.py @@ -0,0 +1,9 @@ +from __future__ import absolute_import +from django.conf.urls import url + +from . import views + + +urlpatterns = [ + url(r'^$', views.index, name='index'), +] diff --git a/warpshop_server/warpshop_server/transaktion/views.py b/warpshop_server/warpshop_server/transaktion/views.py new file mode 100644 index 0000000..6d33280 --- /dev/null +++ b/warpshop_server/warpshop_server/transaktion/views.py @@ -0,0 +1,6 @@ +from django.shortcuts import render +from django.http import HttpResponse + + +def index(request): + return HttpResponse("Transaktion index.") diff --git a/warpshop_server/warpshop_server/warpshop_server/settings/base.py b/warpshop_server/warpshop_server/warpshop_server/settings/base.py index 27177d7..d24fdcc 100644 --- a/warpshop_server/warpshop_server/warpshop_server/settings/base.py +++ b/warpshop_server/warpshop_server/warpshop_server/settings/base.py @@ -194,6 +194,9 @@ DJANGO_APPS = ( # Apps specific for this project go here. LOCAL_APPS = ( + 'artikel', + 'benutzer', + 'transaktion', ) # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps diff --git a/warpshop_server/warpshop_server/warpshop_server/urls.py b/warpshop_server/warpshop_server/warpshop_server/urls.py index 4373c19..d88758c 100644 --- a/warpshop_server/warpshop_server/warpshop_server/urls.py +++ b/warpshop_server/warpshop_server/warpshop_server/urls.py @@ -19,6 +19,10 @@ urlpatterns = patterns('', # Uncomment the next line to enable the admin: url(r'^admin/', include(admin.site.urls)), + + url(r'^artikel/', include('artikel.urls', namespace='artikel')), + url(r'^benutzer/', include('benutzer.urls', namespace='benutzer')), + url(r'^transaktion/', include('transaktion.urls', namespace='transaktion')), ) # Uncomment the next line to serve media files in dev. -- GitLab