Merge branch 'develop' of git.einsle.de:carom/carom-server into develop
Conflicts: billard/models.py
This commit is contained in:
		
							
								
								
									
										20
									
								
								billard/migrations/0005_auto_20170206_1926.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								billard/migrations/0005_auto_20170206_1926.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# Generated by Django 1.10.5 on 2017-02-06 18:26
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('billard', '0004_accounting'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='locationdata',
 | 
			
		||||
            name='location_id',
 | 
			
		||||
            field=models.UUIDField(),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
@@ -1,12 +1,15 @@
 | 
			
		||||
import uuid
 | 
			
		||||
from django.db import models
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from datetime import datetime, timezone
 | 
			
		||||
from . import utils
 | 
			
		||||
from . import tasks
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from django.db.models.signals import post_save
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LocationData(models.Model):
 | 
			
		||||
    location_id = models.CharField(max_length=32, blank=False, null=False, verbose_name="Standort-ID")
 | 
			
		||||
    location_id = models.UUIDField(blank=False, null=False, verbose_name="Standort-ID")
 | 
			
		||||
    table_no = models.IntegerField(blank=False, null=False, verbose_name="Tischnummer")
 | 
			
		||||
    tst = models.DateTimeField(blank=False, null=False, verbose_name="Zeitstempel")
 | 
			
		||||
    on_off = models.BooleanField(blank=False, null=False, verbose_name="Ein/Ausgebucht")
 | 
			
		||||
@@ -55,7 +58,7 @@ class Client(models.Model):
 | 
			
		||||
        t = Accounting.objects.filter(client_id=self.id, desk_no=desk_no)[:3][::-1]
 | 
			
		||||
        a = t[t.__len__() - 1]
 | 
			
		||||
        if a.time_to is None:
 | 
			
		||||
            prize = utils.get_prize_for(start=a.time_from, end=datetime.now(), pph=pht)
 | 
			
		||||
            prize = utils.get_prize_for(start=a.time_from, end=datetime.now(timezone.utc), pph=pht)
 | 
			
		||||
            if prize != a.prize:
 | 
			
		||||
                a.prize = prize
 | 
			
		||||
        return t
 | 
			
		||||
@@ -87,3 +90,9 @@ class Accounting(models.Model):
 | 
			
		||||
        ordering = ['-time_from']
 | 
			
		||||
        verbose_name = "Buchhaltungseintrag"
 | 
			
		||||
        verbose_name_plural = "Buchhaltungseinträge"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def update_location_data(sender, instance, **kwargs):
 | 
			
		||||
    tasks.process_location_data.delay()
 | 
			
		||||
 | 
			
		||||
post_save.connect(update_location_data, sender=LocationData)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										31
									
								
								billard/tasks.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								billard/tasks.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
from __future__ import absolute_import, unicode_literals
 | 
			
		||||
from celery import shared_task
 | 
			
		||||
from . import models
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from . import utils
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@shared_task
 | 
			
		||||
def process_location_data():
 | 
			
		||||
    data = models.LocationData.objects.filter(processed=False)
 | 
			
		||||
    for ld in data:
 | 
			
		||||
        cli = models.Client.objects.get(uuid=ld.location_id)
 | 
			
		||||
        ac = models.Accounting.objects.filter(client=cli).order_by('time_from').reverse()[0]
 | 
			
		||||
        if ld.on_off:
 | 
			
		||||
            if ac.time_to is None:
 | 
			
		||||
                ac.time_to = datetime.now()
 | 
			
		||||
                ac.save()
 | 
			
		||||
            ac = models.Accounting(
 | 
			
		||||
                client=cli,
 | 
			
		||||
                desk_no=ld.table_no,
 | 
			
		||||
                time_from=ld.tst,
 | 
			
		||||
            )
 | 
			
		||||
            ac.save()
 | 
			
		||||
            ld.processed=True
 | 
			
		||||
            ld.save()
 | 
			
		||||
        else:
 | 
			
		||||
            ac.time_to = ld.tst
 | 
			
		||||
            ac.prize = utils.get_prize_for(start=ac.time_from, end=ac.time_to, pph=cli.desk1_prize_ht)
 | 
			
		||||
            ac.save()
 | 
			
		||||
            ld.processed=True
 | 
			
		||||
            ld.save()
 | 
			
		||||
@@ -0,0 +1,7 @@
 | 
			
		||||
from __future__ import absolute_import, unicode_literals
 | 
			
		||||
 | 
			
		||||
# This will make sure the app is always imported when
 | 
			
		||||
# Django starts so that shared_task will use this app.
 | 
			
		||||
from .celery import app as celery_app
 | 
			
		||||
 | 
			
		||||
__all__ = ['celery_app']
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								caromserver/celery.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								caromserver/celery.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
from __future__ import absolute_import, unicode_literals
 | 
			
		||||
import os
 | 
			
		||||
import django
 | 
			
		||||
from celery import Celery
 | 
			
		||||
 | 
			
		||||
# set the default Django settings module for the 'celery' program.
 | 
			
		||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'caromserver.settings')
 | 
			
		||||
 | 
			
		||||
app = Celery('caromserver')
 | 
			
		||||
 | 
			
		||||
# Using a string here means the worker don't have to serialize
 | 
			
		||||
# the configuration object to child processes.
 | 
			
		||||
# - namespace='CELERY' means all celery-related configuration keys
 | 
			
		||||
#   should have a `CELERY_` prefix.
 | 
			
		||||
app.config_from_object('django.conf:settings')
 | 
			
		||||
 | 
			
		||||
# Load task modules from all registered Django app configs.
 | 
			
		||||
 | 
			
		||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "caromserver.settings")
 | 
			
		||||
django.setup()
 | 
			
		||||
 | 
			
		||||
app.autodiscover_tasks(['billard'])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@app.task(bind=True)
 | 
			
		||||
def debug_task(self):
 | 
			
		||||
    print('Request: {0!r}'.format(self.request))
 | 
			
		||||
@@ -138,6 +138,15 @@ LOGOUT_URL = 'logout'
 | 
			
		||||
LOGIN_REDIRECT_URL = 'carom_index'
 | 
			
		||||
LOGOUT_REDIRECT_URL = 'carom_index'
 | 
			
		||||
 | 
			
		||||
# CELERY STUFF
 | 
			
		||||
BROKER_URL = 'redis://localhost:6379'
 | 
			
		||||
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
 | 
			
		||||
CELERY_ACCEPT_CONTENT = ['application/json']
 | 
			
		||||
CELERY_TASK_SERIALIZER = 'json'
 | 
			
		||||
CELERY_RESULT_SERIALIZER = 'json'
 | 
			
		||||
CELERY_TIMEZONE = 'Europe/Berlin'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
STATIC_ROOT = "/srv/carom/carom-server/static/"
 | 
			
		||||
 | 
			
		||||
try:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user