diff --git a/billard/tasks.py b/billard/tasks.py index 0f2ecfc..5fc22dd 100644 --- a/billard/tasks.py +++ b/billard/tasks.py @@ -11,52 +11,55 @@ log = logging.getLogger(__name__) def process_location_data(): data = LocationData.objects.filter(processed=False).order_by('tst') 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: + try: + 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 desk object found. Stopp processing! {}, {}'.format(ld.client_id, ld.desk_no) + ld.error_msg = 'No client 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, acc.prize_normal, acc.prize_hh = 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.reporter_uuid = cli.uuid + 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: - 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) + if len(ac) > 0: + acc = ac[0] + acc.time_to = ld.tst + acc.prize, acc.prize_normal, acc.prize_hh = 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.reporter_uuid = cli.uuid + 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) + except: + log.exception('', exc_info=True)