From a816c30ed2e9f2166f49c2be8c93c54e80fc8043 Mon Sep 17 00:00:00 2001
From: Christian Dresen <c.dresen@fh-muenster.de>
Date: Wed, 15 Mar 2017 13:59:01 +0100
Subject: [PATCH] [WarpPay] Backend API modifications

---
 www/web/warppay/admin.py  |  4 ++++
 www/web/warppay/models.py |  5 ++++-
 www/web/warppay/urls.py   |  2 +-
 www/web/warppay/views.py  | 32 ++++++++++++++++++++++----------
 4 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/www/web/warppay/admin.py b/www/web/warppay/admin.py
index 5f28e74..2350d9e 100644
--- a/www/web/warppay/admin.py
+++ b/www/web/warppay/admin.py
@@ -13,4 +13,8 @@ class ProductAdmin(admin.ModelAdmin):
 
 @admin.register(UserCredit)
 class UserCreditAdmin(admin.ModelAdmin):
+        pass
+
+@admin.register(Transaction)
+class TransactionAdmin(admin.ModelAdmin):
         pass
\ No newline at end of file
diff --git a/www/web/warppay/models.py b/www/web/warppay/models.py
index 7fcb1da..4f75293 100644
--- a/www/web/warppay/models.py
+++ b/www/web/warppay/models.py
@@ -26,7 +26,7 @@ class ProductSerializer(serializers.ModelSerializer):
     category = serializers.StringRelatedField()
     class Meta:
         model = Product
-        fields = ['id', 'name', 'price', 'category', 'count']
+        fields = ['id', 'name', 'price_vk', 'category', 'stock_count']
 
 
 class Transaction(models.Model):
@@ -36,6 +36,9 @@ class Transaction(models.Model):
     amount = models.FloatField()
     cash_paid = models.BooleanField(default=False)
 
+    def __str__(self):
+        return str(self.amount) #self.product.name+" - "+self.amount
+
 
 class TransactionLog(models.Model):
     uid = models.CharField(max_length=100)
diff --git a/www/web/warppay/urls.py b/www/web/warppay/urls.py
index bd60d9d..f576626 100644
--- a/www/web/warppay/urls.py
+++ b/www/web/warppay/urls.py
@@ -7,6 +7,6 @@ urlpatterns = [
     url(r'^api/users/(?P<user_id>\w+)/$', views.user_list),
     url(r'^api/products/$', views.product_list),
     url(r'^api/gen_token/$', views.gen_token),
-    url(r'^api/transaction/$', views.transaction),
+    url(r'^api/transaction/(?P<user_id>\w+)/$', views.transaction),
 
 ]
diff --git a/www/web/warppay/views.py b/www/web/warppay/views.py
index 34cf088..e3365b2 100644
--- a/www/web/warppay/views.py
+++ b/www/web/warppay/views.py
@@ -50,6 +50,7 @@ def user_list(request, user_id = 0):
         if not user_id:
             return Response(status=status.HTTP_406_NOT_ACCEPTABLE)
         try:
+            print(request.data)
             user = UserCredit.objects.get(uid=user_id)
             if "card_id" in request.data:
                 try:
@@ -90,27 +91,38 @@ def user_list(request, user_id = 0):
 @api_view(['PUT'])
 #@authentication_classes((TokenAuthentication,))
 #@permission_classes((IsAuthenticated,))
-def transaction(request):
+def transaction(request, user_id=None):
     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)):
+        if 'trans_type' not in request.data or not user_id:
             return Response(status=status.HTTP_406_NOT_ACCEPTABLE)
 
         try:
-            u = UserCredit.objects.get(uid=str(request.data['uid']))
+            u = UserCredit.objects.get(uid=str(user_id))
         except ObjectDoesNotExist:
             return Response(status=status.HTTP_404_NOT_FOUND)
 
         t = Transaction()
-        t.type = request.data['type']
-        t.amount = float(request.data['amount'])
+        t.type = int(request.data['trans_type'])
 
-        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 t.type == 1:
+            if 'amount' not in request.data or ('amount' in request.data and float(request.data['amount'] < 0)):
+                return Response(status=status.HTTP_406_NOT_ACCEPTABLE)
             if 'cash_paid' in request.data:
                 t.cash_paid = bool(request.data['cash_paid'])
-            u.credit -=t.amount
+            else:
+                t.cash_paid = True
+            t.amount = float(request.data['amount'])
+            u.credit +=t.amount
+        elif t.type == 2:
+            try:
+                product = Product.objects.get(id=request.data['product']['id'])
+                t.product = product
+                if 'cash_paid' in request.data:
+                    t.cash_paid = bool(request.data['cash_paid'])
+                t.amount = product.price_vk
+                u.credit -= t.amount
+            except:
+                return Response(status=status.HTTP_406_NOT_ACCEPTABLE)
         else:
             return Response(status=status.HTTP_406_NOT_ACCEPTABLE)
 
-- 
GitLab