Commit 00bcb4ab authored by lizonr1's avatar lizonr1

Add usertasks and init data

parent da1d6337
...@@ -12,8 +12,10 @@ class Command(BaseCommand): ...@@ -12,8 +12,10 @@ class Command(BaseCommand):
call_command('init_userprofile') call_command('init_userprofile')
call_command('init_products') call_command('init_products')
call_command('init_offers') call_command('init_offers')
call_command('init_tasks')
call_command('init_promotions') call_command('init_promotions')
call_command('init_promotionsets') call_command('init_promotionsets')
call_command('init_localizations') call_command('init_localizations')
call_command('init_places') call_command('init_places')
call_command('init_userpromotions') call_command('init_userpromotions')
call_command('init_usertasks')
import datetime
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
from App.loyaltyMe.models import Task
from App.user.models import UserTask
class Command(BaseCommand):
def handle(self, *args, **options):
data = [
['Bądź u nas 10 godzin', 'admin', True,datetime.datetime.now(),15,15,datetime.datetime.now()],
['Bądź u nas 10 godzin', 'Klaudia', False,datetime.datetime.now(),15,15,datetime.datetime.now()],
['Przyjdz 10 razy', 'admin', False,datetime.datetime.now(),15,15,datetime.datetime.now()],
['Przyjdz 10 razy', 'Antek', True, datetime.datetime.now(),15,15,datetime.datetime.now()],
]
print("Creating UsersTasks")
for user_task in data:
print("{0} take {1} Task".format(user_task[0], user_task[1]))
task = Task.objects.filter(name=user_task[0])[0]
user = User.objects.filter(username=user_task[1])[0]
counter = datetime.timedelta(seconds=user_task[4])
beacon_counter= datetime.timedelta(seconds=user_task[5])
new_usertask = UserTask.objects.create(task=task, user=user, done=user_task[2],last_update=user_task[3],counter=counter, beacon_counter=beacon_counter,beacon_signal_last_update=user_task[6])
new_usertask.save()
...@@ -2,10 +2,12 @@ from django.db import models ...@@ -2,10 +2,12 @@ from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.dispatch import receiver from django.dispatch import receiver
from django.utils import timezone
from rest_framework.authtoken.models import Token from rest_framework.authtoken.models import Token
from datetime import timedelta
# Create your models here. # Create your models here.
from App.loyaltyMe.models import Place, Promotion from App.loyaltyMe.models import Place, Promotion, Task
@receiver(post_save, sender=User) @receiver(post_save, sender=User)
...@@ -27,3 +29,37 @@ class UserPromotion(models.Model): ...@@ -27,3 +29,37 @@ class UserPromotion(models.Model):
promotion = models.ForeignKey(Promotion) promotion = models.ForeignKey(Promotion)
status = models.CharField(max_length=30) status = models.CharField(max_length=30)
code = models.CharField(max_length=20, null=True) code = models.CharField(max_length=20, null=True)
class UserTask(models.Model):
task = models.ForeignKey(Task)
user = models.ForeignKey(User, related_name='user_task',
blank=False, null=False, default=None)
done = models.BooleanField(default=False)
last_update = models.DateField()
counter = models.DurationField()
beacon_counter = models.DurationField()
beacon_signal_last_update = models.DateField()
def update(self):
if not self.beacon_delay_passed():
return
if self.done:
return
if self.counter == self.task.counter_target:
self.done = True
return
actual_time = timezone.now()
if actual_time + self.task.update_delay > self.last_update:
self.counter += self.task.counter_incrementation
def beacon_delay_passed(self):
actual_time = timezone.now()
if actual_time + timedelta(seconds = self.task.beacon_signal_delay) > self.beacon_signal_last_update:
self.beacon_counter = +1
self.beacon_signal_last_update = actual_time
if self.beacon_counter == self.task.beacon_counter_target:
self.beacon_counter = 0
return True
return False
\ No newline at end of file
...@@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _ ...@@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers from rest_framework import serializers
from App.loyaltyMe.serializers import PromotionSerializer from App.loyaltyMe.serializers import PromotionSerializer
from App.user.models import UserProfile, UserPromotion from App.user.models import UserProfile, UserPromotion, UserTask
class UserSerializer(serializers.HyperlinkedModelSerializer): class UserSerializer(serializers.HyperlinkedModelSerializer):
...@@ -21,6 +21,15 @@ class UserProfileSerializer(serializers.HyperlinkedModelSerializer): ...@@ -21,6 +21,15 @@ class UserProfileSerializer(serializers.HyperlinkedModelSerializer):
fields = ('url', 'id', 'user', 'photo') fields = ('url', 'id', 'user', 'photo')
class UserTaskSerializer(serializers.HyperlinkedModelSerializer):
user = UserSerializer()
class Meta:
model = UserTask
fields = ('url', 'id', 'task', 'user', 'done', 'last_update', 'counter', 'beacon_counter', 'beacon_signal_last_update')
class AuthTokenSerializerByEmail(serializers.Serializer): class AuthTokenSerializerByEmail(serializers.Serializer):
email = serializers.CharField(label=_("Email")) email = serializers.CharField(label=_("Email"))
password = serializers.CharField(label=_("Password"), style={'input_type': 'password'}) password = serializers.CharField(label=_("Password"), style={'input_type': 'password'})
......
...@@ -5,14 +5,17 @@ from django.contrib.auth.models import User ...@@ -5,14 +5,17 @@ from django.contrib.auth.models import User
# Create your views here. # Create your views here.
from rest_framework import filters from rest_framework import filters
from rest_framework.authtoken.models import Token from rest_framework.authtoken.models import Token
from rest_framework.decorators import list_route from rest_framework.authtoken.serializers import AuthTokenSerializer
from rest_framework.decorators import list_route, api_view, renderer_classes
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import viewsets, permissions from rest_framework import viewsets, permissions
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework_swagger.renderers import OpenAPIRenderer, SwaggerUIRenderer
from rest_framework import response, schemas
from App.user.models import UserProfile, UserPromotion from App.user.models import UserProfile, UserPromotion, UserTask
from App.user.serializers import UserSerializer, AuthTokenSerializerByEmail, UserProfileSerializer, \ from App.user.serializers import UserSerializer, AuthTokenSerializerByEmail, UserProfileSerializer, \
UserPromotionSerializer UserPromotionSerializer, UserTaskSerializer
from rest_framework import parsers, renderers from rest_framework import parsers, renderers
...@@ -33,7 +36,11 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -33,7 +36,11 @@ class UserViewSet(viewsets.ModelViewSet):
class UserProfileViewSet(viewsets.ModelViewSet): class UserProfileViewSet(viewsets.ModelViewSet):
""" """
API for articles Returns a list of all **active** accounts in the system.
For more details on how accounts are activated please [see here][ref].
[ref]: http://example.com/activating-accounts
""" """
queryset = UserProfile.objects.all() queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer serializer_class = UserProfileSerializer
...@@ -71,6 +78,9 @@ class ObtainAuthToken(APIView): ...@@ -71,6 +78,9 @@ class ObtainAuthToken(APIView):
token, created = Token.objects.get_or_create(user=user) token, created = Token.objects.get_or_create(user=user)
return Response({'token': token.key}) return Response({'token': token.key})
def get_serializer_class(self):
return AuthTokenSerializerByEmail
obtain_auth_token = ObtainAuthToken.as_view() obtain_auth_token = ObtainAuthToken.as_view()
...@@ -100,3 +110,27 @@ class UserPromotionViewSet(viewsets.ModelViewSet): ...@@ -100,3 +110,27 @@ class UserPromotionViewSet(viewsets.ModelViewSet):
""" """
user = self.request.user user = self.request.user
return UserPromotion.objects.filter(user=user) return UserPromotion.objects.filter(user=user)
class UserTaskViewSet(viewsets.ModelViewSet):
"""
API for articles
"""
queryset = UserTask.objects.all()
serializer_class = UserTaskSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
filter_backends = (filters.DjangoFilterBackend,)
def get_queryset(self):
"""
This view should return a list of all the purchases
for the currently authenticated user.
"""
user = self.request.user
return UserTask.objects.filter(user=user)
@api_view()
@renderer_classes([OpenAPIRenderer, SwaggerUIRenderer])
def schema_view(request):
generator = schemas.SchemaGenerator(title='Bookings API')
return response.Response(generator.get_schema(request=request))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment