Skip to content
Snippets Groups Projects
Commit f64c3970 authored by Christian Dresen's avatar Christian Dresen
Browse files

[WarpPay] Implemented Transaction model and API Endpoint

parent abc6ba88
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2017-03-14 22:30
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('warppay', '0002_auto_20170314_2208'),
]
operations = [
migrations.RenameField(
model_name='transaction',
old_name='price_ek',
new_name='amount',
),
migrations.RemoveField(
model_name='transaction',
name='price_vk',
),
migrations.AddField(
model_name='transaction',
name='type',
field=models.IntegerField(default=0),
preserve_default=False,
),
]
...@@ -8,7 +8,8 @@ class ProductCategory(models.Model): ...@@ -8,7 +8,8 @@ class ProductCategory(models.Model):
name = models.CharField(max_length=100, unique=True) name = models.CharField(max_length=100, unique=True)
def __str__(self): def __str__(self):
return self.name return self.name
class Product(models.Model): class Product(models.Model):
name = models.CharField(max_length=100, null=True) name = models.CharField(max_length=100, null=True)
price_ek = models.FloatField() price_ek = models.FloatField()
...@@ -20,27 +21,32 @@ class Product(models.Model): ...@@ -20,27 +21,32 @@ class Product(models.Model):
def __str__(self): def __str__(self):
return self.name return self.name
class ProductSerializer(serializers.ModelSerializer): class ProductSerializer(serializers.ModelSerializer):
category = serializers.StringRelatedField() category = serializers.StringRelatedField()
class Meta: class Meta:
model = Product model = Product
fields = ['id', 'name', 'price', 'category', 'count'] fields = ['id', 'name', 'price', 'category', 'count']
class Transaction(models.Model): class Transaction(models.Model):
date = models.DateTimeField(auto_now_add=True) date = models.DateTimeField(auto_now_add=True)
product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True) product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
price_ek = models.FloatField() type = models.IntegerField() # 1: aufladen; 2:kaufen
price_vk = models.FloatField() amount = models.FloatField()
cash_paid = models.BooleanField(default=False) cash_paid = models.BooleanField(default=False)
class TransactionLog(models.Model): class TransactionLog(models.Model):
uid = models.CharField(max_length=100) uid = models.CharField(max_length=100)
transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE, null=True) transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE, null=True)
class UserCredit(models.Model): class UserCredit(models.Model):
uid = models.CharField(max_length=100,unique=True) uid = models.CharField(max_length=100,unique=True)
card_id = models.CharField(max_length=10, null=True) # Unique only with django 1.11 card_id = models.CharField(max_length=10, null=True) # Unique only with django 1.11
credit = models.FloatField() credit = models.FloatField()
def __str__(self): def __str__(self):
return self.uid return self.uid
......
...@@ -7,5 +7,6 @@ urlpatterns = [ ...@@ -7,5 +7,6 @@ urlpatterns = [
url(r'^api/users/(?P<user_id>\w+)/$', views.user_list), url(r'^api/users/(?P<user_id>\w+)/$', views.user_list),
url(r'^api/products/$', views.product_list), url(r'^api/products/$', views.product_list),
url(r'^api/gen_token/$', views.gen_token), url(r'^api/gen_token/$', views.gen_token),
url(r'^api/transaction/$', views.transaction),
] ]
from django.db import IntegrityError from django.db import IntegrityError
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from warpauth.models import LdapUser from warpauth.models import LdapUser
from warppay.models import UserCredit, UserCreditSerializer, Product, ProductSerializer from warppay.models import UserCredit, UserCreditSerializer, Product, ProductSerializer, Transaction
from rest_framework.decorators import api_view from rest_framework.decorators import api_view
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.authentication import TokenAuthentication from rest_framework.authentication import TokenAuthentication
...@@ -49,14 +49,9 @@ def user_list(request, user_id = 0): ...@@ -49,14 +49,9 @@ def user_list(request, user_id = 0):
elif request.method == 'PUT': elif request.method == 'PUT':
if not user_id: if not user_id:
return Response(status=status.HTTP_406_NOT_ACCEPTABLE) return Response(status=status.HTTP_406_NOT_ACCEPTABLE)
sync_users()
try: try:
user = UserCredit.objects.get(uid=user_id) user = UserCredit.objects.get(uid=user_id)
if "credit" in request.data: if "card_id" in request.data:
user.credit = request.data['credit']
elif "card_id" in request.data:
# ToDo: Diskussion: Direkt Karte Ändern?
try: try:
ldap_user = LdapUser.objects.get(uid=str(request.data['uid'])) ldap_user = LdapUser.objects.get(uid=str(request.data['uid']))
if not ldap_user.card_id: if not ldap_user.card_id:
...@@ -66,8 +61,7 @@ def user_list(request, user_id = 0): ...@@ -66,8 +61,7 @@ def user_list(request, user_id = 0):
return Response(status=status.HTTP_403_FORBIDDEN) return Response(status=status.HTTP_403_FORBIDDEN)
except: except:
pass pass
user.card_id = request.data['card_id'] sync_users()
user.save();
return Response(UserCreditSerializer(user).data) return Response(UserCreditSerializer(user).data)
except UserCredit.DoesNotExist: except UserCredit.DoesNotExist:
...@@ -91,7 +85,39 @@ def user_list(request, user_id = 0): ...@@ -91,7 +85,39 @@ def user_list(request, user_id = 0):
serializer = UserCreditSerializer(u) serializer = UserCreditSerializer(u)
return Response(serializer.data, status=state) return Response(serializer.data, status=state)
return Response() return Response()
@api_view(['PUT'])
#@authentication_classes((TokenAuthentication,))
#@permission_classes((IsAuthenticated,))
def transaction(request):
if request.method == 'PUT':
if 'type' not in request.data or 'amount' not in request.data or 'uid' not in request.data or ('amount' in request.data and int(request.data['amount'] < 0)):
return Response(status=status.HTTP_406_NOT_ACCEPTABLE)
try:
u = UserCredit.objects.get(uid=str(request.data['uid']))
except ObjectDoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
t = Transaction()
t.type = request.data['type']
t.amount = float(request.data['amount'])
if request.data['type'] == 1:
u.credit +=t.amount
elif request.data['type'] == 2:
#product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
if 'cash_paid' in request.data:
t.cash_paid = bool(request.data['cash_paid'])
u.credit -=t.amount
else:
return Response(status=status.HTTP_406_NOT_ACCEPTABLE)
t.save()
u.save()
return Response()
def sync_users(): def sync_users():
for user in LdapUser.objects.all(): for user in LdapUser.objects.all():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment