update tasks

This commit is contained in:
Robert Einsle 2017-02-10 21:02:07 +01:00
parent 263bff6540
commit c8c25714f0
3 changed files with 80 additions and 44 deletions

View File

@ -2,10 +2,11 @@ import uuid
from django.db import models
from django.contrib.auth.models import User
from datetime import datetime, timezone
from billard import utils
from billard import utils, tasks
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
class LocationData(models.Model):
@ -100,4 +101,42 @@ class Accounting(models.Model):
@receiver(post_save, sender=LocationData)
def test(sender, **kwargs):
print('test')
process_location_data()
@shared_task
def process_location_data():
data = LocationData.objects.filter(processed=False)
for ld in data:
cli = Client.objects.filter(uuid=ld.client_id)
if cli.count() < 1:
ld.processed = True
ld.error_msg = 'No location object found. Stopp processing!'
ld.save()
# TODO Send error eMail to Admin
else:
cli = cli[0]
desk = cli.desks.filter(desk_no=ld.desk_no)[0]
ac = Accounting.objects.filter(client=cli, desk_no=ld.desk_no).order_by('time_from').reverse()
if ld.on_off:
if ac.count() > 0 and ac[0].time_to is None:
ac[0].time_to = datetime.now()
ac[0].save()
# TODO Send error eMail to Admin
acc = Accounting(
client=cli,
desk_no=ld.desk_no,
time_from=ld.tst,
)
acc.save()
ld.delete()
else:
acc = ac[0]
acc.time_to = ld.tst
acc.prize = utils.get_prize_for(
start=acc.time_from,
end=ld.tst,
pph=desk.prize
)
acc.save()
ld.delete()

View File

@ -1,42 +1,8 @@
from __future__ import absolute_import, unicode_literals
from celery import shared_task
from . import models
from datetime import datetime
from . import utils
from billard import utils
@shared_task
def process_location_data():
data = models.LocationData.objects.filter(processed=False)
for ld in data:
cli = models.Client.objects.filter(uuid=ld.location_id)
if cli.count() < 1:
ld.processed = True
ld.error_msg = 'No location object found. Stopp processing!'
ld.save()
# TODO Send error eMail to Admin
else:
cli = cli[0]
ac = models.Accounting.objects.filter(client=cli, desk_no=ld.table_no).order_by('time_from').reverse()
if ld.on_off:
if ac.count() > 0 and ac[0].time_to is None:
ac[0].time_to = datetime.now()
ac[0].save()
# TODO Send error eMail to Admin
acc = models.Accounting(
client=cli,
desk_no=ld.table_no,
time_from=ld.tst,
)
acc.save()
ld.delete()
else:
acc = ac[0]
acc.time_to = ld.tst
acc.prize = utils.get_prize_for(
start=acc.time_from,
end=ld.tst,
pph=cli.desk1_prize_ht
)
acc.save()
ld.delete()
utils.process_location_data()

View File

@ -1,4 +1,5 @@
from datetime import datetime, date, time
from datetime import datetime
#import models
def get_prize_for(start, end, pph=0):
@ -16,8 +17,38 @@ def get_prize_for(start, end, pph=0):
return prize
if __name__ == '__main__':
d = date(2017, 2, 5)
t = time(16, 00)
start = datetime.combine(d, t)
get_prize_for(start=start, pph=8.5)
def process_location_data():
pass
#data = models.LocationData.objects.filter(processed=False)
#for ld in data:
# cli = models.Client.objects.filter(uuid=ld.client_id)
# if cli.count() < 1:
# ld.processed = True
# ld.error_msg = 'No location object found. Stopp processing!'
# ld.save()
# # TODO Send error eMail to Admin
# else:
# cli = cli[0]
# ac = models.Accounting.objects.filter(client=cli, desk_no=ld.table_no).order_by('time_from').reverse()
# if ld.on_off:
# if ac.count() > 0 and ac[0].time_to is None:
# ac[0].time_to = datetime.now()
# ac[0].save()
# # TODO Send error eMail to Admin
# acc = models.Accounting(
# client=cli,
# desk_no=ld.table_no,
# time_from=ld.tst,
# )
# acc.save()
# ld.delete()
# else:
# acc = ac[0]
# acc.time_to = ld.tst
# acc.prize = get_prize_for(
# start=acc.time_from,
# end=ld.tst,
# pph=cli.desk1_prize_ht
# )
# acc.save()
# ld.delete()