Merge branch 'feature/#4_celery' into develop

This commit is contained in:
Robert Einsle 2017-03-09 20:33:02 +01:00
commit 81f0da2b63
3 changed files with 63 additions and 62 deletions

View File

@ -7,8 +7,6 @@ from billard import utils
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from celery import shared_task
from .tasks import request_process_location_data
log = logging.getLogger(__name__)
@ -116,58 +114,7 @@ class Accounting(models.Model):
@receiver(post_save, sender=LocationData)
def test(sender, **kwargs):
request_process_location_data.delay()
from .tasks import process_location_data
process_location_data.delay()
@shared_task
def process_location_data():
data = LocationData.objects.filter(processed=False)
for ld in data:
cli = Client.objects.filter(uuid=ld.client_id, desks__desk_no=ld.desk_no)
if cli.count() < 1:
ld.processed = True
ld.error_msg = 'No client object found. Stopp processing! {}, {}'.format(ld.client_id, ld.desk_no)
ld.save()
log.error(ld.error_msg)
else:
cli = cli[0]
desk = cli.desks.filter(desk_no=ld.desk_no, enabled=True)
if desk.count() != 1:
ld.processed = True
ld.error_msg = 'No desk object found. Stopp processing! {}, {}'.format(ld.client_id, ld.desk_no)
ld.save()
log.error(ld.error_msg)
desk = desk[0]
ac = desk.accounting_set.order_by('time_from').reverse()
if ld.on_off:
acc = None
if ac.count() > 0 and ac[0].time_to is None:
log.error('Vorheriges Accounting nicht abgeschlossen: Desk_id {}, Accounting_id {}'
.format(desk.id, ac[0].id))
acc = ac[0]
if acc is None:
acc = Accounting(
desk=desk,
time_from=ld.tst,
)
acc.save()
ld.delete()
else:
if len(ac) > 0:
acc = ac[0]
acc.time_to = ld.tst
acc.prize = utils.get_prize_for(
start=acc.time_from,
end=ld.tst,
pph=desk.prize,
hh_start=cli.location.happy_hour_start,
hh_end=cli.location.happy_hour_end,
pphh=desk.prize_hh,
)
acc.save()
ld.delete()
else:
ld.processed = True
ld.error_msg = 'No existing accountings found. Stopp processing! {}, {}'.format(ld.client_id, ld.desk_no)
ld.save()
log.error(ld.error_msg)

View File

@ -1,9 +1,62 @@
from __future__ import absolute_import, unicode_literals
from celery import shared_task
from django.conf import settings
import requests
import logging
import billard.utils as utils
from celery import shared_task
from billard.models import LocationData, Client, Accounting
log = logging.getLogger(__name__)
@shared_task
def request_process_location_data():
requests.get(url=settings.URL_LOCATION_PROCESSOR)
def process_location_data():
data = LocationData.objects.filter(processed=False)
for ld in data:
cli = Client.objects.filter(uuid=ld.client_id, desks__desk_no=ld.desk_no)
if cli.count() < 1:
ld.processed = True
ld.error_msg = 'No client object found. Stopp processing! {}, {}'.format(ld.client_id, ld.desk_no)
ld.save()
log.error(ld.error_msg)
else:
cli = cli[0]
desk = cli.desks.filter(desk_no=ld.desk_no, enabled=True)
if desk.count() != 1:
ld.processed = True
ld.error_msg = 'No desk object found. Stopp processing! {}, {}'.format(ld.client_id, ld.desk_no)
ld.save()
log.error(ld.error_msg)
desk = desk[0]
ac = desk.accounting_set.order_by('time_from').reverse()
if ld.on_off:
acc = None
if ac.count() > 0 and ac[0].time_to is None:
log.error('Vorheriges Accounting nicht abgeschlossen: Desk_id {}, Accounting_id {}'
.format(desk.id, ac[0].id))
acc = ac[0]
if acc is None:
acc = Accounting(
desk=desk,
time_from=ld.tst,
)
acc.save()
ld.delete()
else:
if len(ac) > 0:
acc = ac[0]
acc.time_to = ld.tst
acc.prize = utils.get_prize_for(
start=acc.time_from,
end=ld.tst,
pph=desk.prize,
hh_start=cli.location.happy_hour_start,
hh_end=cli.location.happy_hour_end,
pphh=desk.prize_hh,
)
acc.save()
ld.delete()
else:
ld.processed = True
ld.error_msg = 'No existing accountings found. Stopp processing! {}, {}'.format(ld.client_id, ld.desk_no)
ld.save()
log.error(ld.error_msg)

View File

@ -1,5 +1,6 @@
from billard.serializers import *
from .models import LocationData, process_location_data
from billard.serializers import LocationDataSerializer
from billard.models import LocationData, Location, Client
from billard.tasks import process_location_data
from rest_framework import viewsets
from django.shortcuts import render, redirect
from django.views import generic