Merge branch 'feature/rebuild_model' into develop
This commit is contained in:
commit
4da0e85108
@ -10,14 +10,19 @@ class LocationAdmin(admin.ModelAdmin):
|
|||||||
|
|
||||||
@admin.register(Client)
|
@admin.register(Client)
|
||||||
class ClientAdmin(admin.ModelAdmin):
|
class ClientAdmin(admin.ModelAdmin):
|
||||||
list_display = ('uuid', 'desk1_name', 'desk2_name')
|
list_display = ('uuid', 'location')
|
||||||
fields = ['location', 'uuid', 'desk1_enable', 'desk1_name', 'desk1_prize_nt', 'desk1_prize_ht', 'desk2_enable', 'desk2_name', 'desk2_prize_nt', 'desk2_prize_ht', ]
|
fields = ['location', 'uuid']
|
||||||
|
|
||||||
|
|
||||||
@admin.register(LocationData)
|
@admin.register(LocationData)
|
||||||
class LocationDataAdmin(admin.ModelAdmin):
|
class LocationDataAdmin(admin.ModelAdmin):
|
||||||
list_display = ('location_id', 'table_no', 'tst', 'on_off', 'processed', 'error_msg')
|
list_display = ('client_id', 'desk_no', 'tst', 'on_off', 'processed', 'error_msg')
|
||||||
fields = ['location_id', 'table_no', 'tst', 'on_off', 'processed', 'error_msg']
|
fields = ['client_id', 'desk_no', 'tst', 'on_off', 'processed', 'error_msg']
|
||||||
|
|
||||||
|
|
||||||
|
@admin.register(Desk)
|
||||||
|
class DeskAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('client', 'desk_no', 'name', 'enabled', 'prize', 'prize_hh')
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Accounting)
|
@admin.register(Accounting)
|
||||||
|
32
billard/migrations/0007_desk.py
Normal file
32
billard/migrations/0007_desk.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.5 on 2017-02-10 18:30
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('billard', '0006_auto_20170206_2031'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Desk',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('desk_no', models.IntegerField(verbose_name='Tischnummer')),
|
||||||
|
('name', models.CharField(blank=True, max_length=32, null=True, verbose_name='Tischbezeichnung')),
|
||||||
|
('enabled', models.BooleanField(verbose_name='Tisch aktiv')),
|
||||||
|
('prize', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='Normelpreis')),
|
||||||
|
('prize_hh', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='Preis Happy Hour')),
|
||||||
|
('client', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='billard.Client', verbose_name='Client')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name_plural': 'Tische',
|
||||||
|
'verbose_name': 'Tisch',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
53
billard/migrations/0008_auto_20170210_1947.py
Normal file
53
billard/migrations/0008_auto_20170210_1947.py
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.5 on 2017-02-10 19:47
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('billard', '0007_desk'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='client',
|
||||||
|
name='desk1_enable',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='client',
|
||||||
|
name='desk1_name',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='client',
|
||||||
|
name='desk1_prize_ht',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='client',
|
||||||
|
name='desk1_prize_nt',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='client',
|
||||||
|
name='desk2_enable',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='client',
|
||||||
|
name='desk2_name',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='client',
|
||||||
|
name='desk2_prize_ht',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='client',
|
||||||
|
name='desk2_prize_nt',
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='desk',
|
||||||
|
name='client',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='desks', to='billard.Client', verbose_name='Client'),
|
||||||
|
),
|
||||||
|
]
|
20
billard/migrations/0009_auto_20170210_1955.py
Normal file
20
billard/migrations/0009_auto_20170210_1955.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.5 on 2017-02-10 19:55
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('billard', '0008_auto_20170210_1947'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name='locationdata',
|
||||||
|
old_name='table_no',
|
||||||
|
new_name='desk_no',
|
||||||
|
),
|
||||||
|
]
|
20
billard/migrations/0010_auto_20170210_2040.py
Normal file
20
billard/migrations/0010_auto_20170210_2040.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.5 on 2017-02-10 19:40
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('billard', '0009_auto_20170210_1955'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name='locationdata',
|
||||||
|
old_name='location_id',
|
||||||
|
new_name='client_id',
|
||||||
|
),
|
||||||
|
]
|
@ -2,27 +2,29 @@ import uuid
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from . import utils
|
from billard import utils, tasks
|
||||||
from . import tasks
|
|
||||||
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 celery import shared_task
|
||||||
|
|
||||||
|
|
||||||
class LocationData(models.Model):
|
class LocationData(models.Model):
|
||||||
location_id = models.UUIDField(blank=False, null=False, verbose_name="Standort-ID")
|
client_id = models.UUIDField(blank=False, null=False, verbose_name="Client-ID")
|
||||||
table_no = models.IntegerField(blank=False, null=False, verbose_name="Tischnummer")
|
desk_no = models.IntegerField(blank=False, null=False, verbose_name="Tischnummer")
|
||||||
tst = models.DateTimeField(blank=False, null=False, verbose_name="Zeitstempel")
|
tst = models.DateTimeField(blank=False, null=False, verbose_name="Zeitstempel")
|
||||||
on_off = models.BooleanField(blank=False, null=False, verbose_name="Ein/Ausgebucht")
|
on_off = models.BooleanField(blank=False, null=False, verbose_name="Ein/Ausgebucht")
|
||||||
processed = models.BooleanField(default=False, verbose_name="Verarbeitet")
|
processed = models.BooleanField(default=False, verbose_name="Verarbeitet")
|
||||||
error_msg = models.TextField(blank=True, null=True, verbose_name="Fehlermeldung")
|
error_msg = models.TextField(blank=True, null=True, verbose_name="Fehlermeldung")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.location_id)
|
return str(self.client_id)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Standortlog"
|
verbose_name = "Standortlog"
|
||||||
verbose_name_plural = "Standortlogs"
|
verbose_name_plural = "Standortlogs"
|
||||||
|
|
||||||
|
|
||||||
class Location(models.Model):
|
class Location(models.Model):
|
||||||
users = models.ManyToManyField(User, related_name='locations', verbose_name="Benutzer")
|
users = models.ManyToManyField(User, related_name='locations', verbose_name="Benutzer")
|
||||||
code = models.CharField(max_length=16, unique=True, verbose_name="Code")
|
code = models.CharField(max_length=16, unique=True, verbose_name="Code")
|
||||||
@ -45,30 +47,6 @@ class Location(models.Model):
|
|||||||
class Client(models.Model):
|
class Client(models.Model):
|
||||||
uuid = models.UUIDField(unique=True, default=uuid.uuid4, verbose_name="Identifier")
|
uuid = models.UUIDField(unique=True, default=uuid.uuid4, verbose_name="Identifier")
|
||||||
location = models.ForeignKey(Location, verbose_name="Standort")
|
location = models.ForeignKey(Location, verbose_name="Standort")
|
||||||
desk1_enable = models.BooleanField()
|
|
||||||
desk1_name = models.CharField(max_length=32, blank=True, null=True)
|
|
||||||
desk1_prize_nt = models.DecimalField(max_digits=4, decimal_places=2, blank=True, null=True)
|
|
||||||
desk1_prize_ht = models.DecimalField(max_digits=4, decimal_places=2, blank=True, null=True)
|
|
||||||
desk2_enable = models.BooleanField()
|
|
||||||
desk2_name = models.CharField(max_length=32, blank=True, null=True)
|
|
||||||
desk2_prize_nt = models.DecimalField(max_digits=4, decimal_places=2, blank=True, null=True)
|
|
||||||
desk2_prize_ht = models.DecimalField(max_digits=4, decimal_places=2, blank=True, null=True)
|
|
||||||
|
|
||||||
def accounting_for(self, desk_no, pht, pnt):
|
|
||||||
t = Accounting.objects.filter(client_id=self.id, desk_no=desk_no)[:3][::-1]
|
|
||||||
if t.__len__() > 0:
|
|
||||||
a = t[t.__len__() - 1]
|
|
||||||
if a.time_to is None:
|
|
||||||
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
|
|
||||||
|
|
||||||
def accounting_1(self):
|
|
||||||
return self.accounting_for(1, self.desk1_prize_ht, self.desk1_prize_nt)
|
|
||||||
|
|
||||||
def accounting_2(self):
|
|
||||||
return self.accounting_for(2, self.desk2_prize_ht, self.desk2_prize_nt)
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{}, {}'.format(self.location.name, self.uuid)
|
return '{}, {}'.format(self.location.name, self.uuid)
|
||||||
@ -77,6 +55,34 @@ class Client(models.Model):
|
|||||||
verbose_name = "Client"
|
verbose_name = "Client"
|
||||||
verbose_name_plural = "Clienten"
|
verbose_name_plural = "Clienten"
|
||||||
|
|
||||||
|
|
||||||
|
class Desk(models.Model):
|
||||||
|
client = models.ForeignKey(Client, verbose_name='Client', related_name='desks')
|
||||||
|
desk_no = models.IntegerField(verbose_name='Tischnummer')
|
||||||
|
name = models.CharField(max_length=32, blank=True, null=True, verbose_name='Tischbezeichnung')
|
||||||
|
enabled = models.BooleanField(verbose_name='Tisch aktiv')
|
||||||
|
prize = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True, verbose_name="Normelpreis")
|
||||||
|
prize_hh = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True,
|
||||||
|
verbose_name="Preis Happy Hour")
|
||||||
|
|
||||||
|
def accounting_for(self):
|
||||||
|
t = Accounting.objects.filter(client=self.client, desk_no=self.desk_no)[:3][::-1]
|
||||||
|
if t.__len__() > 0:
|
||||||
|
a = t[t.__len__() - 1]
|
||||||
|
if a.time_to is None:
|
||||||
|
prize = utils.get_prize_for(start=a.time_from, end=datetime.now(timezone.utc), pph=self.prize)
|
||||||
|
if prize != a.prize:
|
||||||
|
a.prize = prize
|
||||||
|
return t
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return '{}, {}'.format(self.client.uuid, self.name)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Tisch"
|
||||||
|
verbose_name_plural = "Tische"
|
||||||
|
|
||||||
|
|
||||||
class Accounting(models.Model):
|
class Accounting(models.Model):
|
||||||
client = models.ForeignKey(Client, verbose_name="Client")
|
client = models.ForeignKey(Client, verbose_name="Client")
|
||||||
desk_no = models.IntegerField(verbose_name="Tischnummer")
|
desk_no = models.IntegerField(verbose_name="Tischnummer")
|
||||||
@ -93,7 +99,44 @@ class Accounting(models.Model):
|
|||||||
verbose_name_plural = "Buchhaltungseinträge"
|
verbose_name_plural = "Buchhaltungseinträge"
|
||||||
|
|
||||||
|
|
||||||
def update_location_data(sender, instance, **kwargs):
|
@receiver(post_save, sender=LocationData)
|
||||||
tasks.process_location_data.delay()
|
def test(sender, **kwargs):
|
||||||
|
process_location_data()
|
||||||
|
|
||||||
post_save.connect(update_location_data, sender=LocationData)
|
|
||||||
|
@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()
|
||||||
|
@ -1,42 +1,8 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
from . import models
|
from billard import utils
|
||||||
from datetime import datetime
|
|
||||||
from . import utils
|
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def process_location_data():
|
def process_location_data():
|
||||||
data = models.LocationData.objects.filter(processed=False)
|
utils.process_location_data()
|
||||||
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()
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
{% extends 'billard/base.html' %}
|
{% extends 'billard/base.html' %}
|
||||||
|
{% load display_client %}
|
||||||
|
|
||||||
{% block header %}
|
{% block header %}
|
||||||
<meta http-equiv="refresh" content="3" />
|
<meta http-equiv="refresh" content="3" />
|
||||||
@ -19,42 +20,7 @@
|
|||||||
</form>
|
</form>
|
||||||
{% if clients %}
|
{% if clients %}
|
||||||
{% for cli in clients %}
|
{% for cli in clients %}
|
||||||
{% if cli.desk1_enable %}
|
{% for i in range %} {{ cli|display_client:i }} {% endfor %}
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="col-md-12 table-info alert {% with cli.accounting_1|last as last %}{% if last.time_to is None %}alert-info{% else %}alert-success{% endif %}{% endwith %}">
|
|
||||||
<h4 style="text-align: center">(1) {{ cli.desk1_name }}</h4>
|
|
||||||
{% if cli.accounting_1 %}
|
|
||||||
<table class="table">
|
|
||||||
{% for acc in cli.accounting_1 %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ acc.time_from|date:"d.m.Y H:i:s" }}</td>
|
|
||||||
<td>{% if acc.time_to is not None %}{{ acc.time_to|date:"d.m.Y H:i:s" }}{% endif %}</td>
|
|
||||||
<td style="text-align: center;">{% if acc.prize is not None %}{{ acc.prize|floatformat:2 }}{% endif %}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% if cli.desk2_enable %}
|
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="col-md-12 table-info alert {% with cli.accounting_2|last as last %}{% if last.time_to is None %}alert-info{% else %}alert-success{% endif %}{% endwith %}">
|
|
||||||
<h4 style="text-align: center">(2) {{ cli.desk2_name }}</h4>
|
|
||||||
{% if cli.accounting_2 %}
|
|
||||||
<table class="table">
|
|
||||||
{% for acc in cli.accounting_2 %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ acc.time_from|date:"d.m.Y H:i:s" }}</td>
|
|
||||||
<td>{% if acc.time_to is not None %}{{ acc.time_to|date:"d.m.Y H:i:s" }}{% endif %}</td>
|
|
||||||
<td style="text-align: right;">{% if acc.prize is not None %}{{ acc.prize|floatformat:2 }}{% endif %}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
|
0
billard/templatetags/__init__.py
Normal file
0
billard/templatetags/__init__.py
Normal file
48
billard/templatetags/display_client.py
Normal file
48
billard/templatetags/display_client.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
from django import template
|
||||||
|
from django.utils.html import format_html
|
||||||
|
from billard.models import Desk, Accounting
|
||||||
|
from billard import utils
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
|
@register.filter(is_safe=True)
|
||||||
|
def display_client(client, desk_no):
|
||||||
|
desks = client.desks.filter(desk_no=desk_no)
|
||||||
|
if len(desks) == 0:
|
||||||
|
return ''
|
||||||
|
desk = desks[0]
|
||||||
|
if not desk.enabled:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
alert = 'alert-success'
|
||||||
|
acc = Accounting.objects.filter(client=client, desk_no=desk_no)[:3][::-1]
|
||||||
|
if acc is not None and len(acc) > 0:
|
||||||
|
a = acc[-1]
|
||||||
|
if a.time_to is None:
|
||||||
|
alert = 'alert-info'
|
||||||
|
prize = utils.get_prize_for(start=a.time_from, end=datetime.now(timezone.utc), pph=desk.prize)
|
||||||
|
prize = '{0:.2f}'.format(prize)
|
||||||
|
if prize != a.prize:
|
||||||
|
a.prize = prize
|
||||||
|
|
||||||
|
html = '<div class="col-md-6">\n'
|
||||||
|
html += ' <div class="col-md-12 table-info alert {}">\n'.format(alert)
|
||||||
|
html += ' <h4 style="text-align: center">({}) {}</h4>\n'.format(desk_no, desk.name)
|
||||||
|
if len(acc) > 0:
|
||||||
|
html += ' <table class="table">\n'
|
||||||
|
for a in acc:
|
||||||
|
html += ' <tr>\n'
|
||||||
|
html += ' <td>{}</td>\n'.format(a.time_from)
|
||||||
|
html += ' <td>{}</td>\n'.format((a.time_to if a.time_to is not None else ''))
|
||||||
|
html += ' <td style="text-align: center;">{}</td>\n'\
|
||||||
|
.format((a.prize if a.prize is not None else ''))
|
||||||
|
html += ' <tr>\n'
|
||||||
|
html += ' <tr>\n'
|
||||||
|
html += ' </tr>\n'
|
||||||
|
html += ' </table>\n'
|
||||||
|
html += ' </div>\n'
|
||||||
|
html += '</div>\n'
|
||||||
|
html = format_html(html)
|
||||||
|
return html
|
@ -1,4 +1,5 @@
|
|||||||
from datetime import datetime, date, time
|
from datetime import datetime
|
||||||
|
#import models
|
||||||
|
|
||||||
|
|
||||||
def get_prize_for(start, end, pph=0):
|
def get_prize_for(start, end, pph=0):
|
||||||
@ -16,8 +17,38 @@ def get_prize_for(start, end, pph=0):
|
|||||||
return prize
|
return prize
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
def process_location_data():
|
||||||
d = date(2017, 2, 5)
|
pass
|
||||||
t = time(16, 00)
|
#data = models.LocationData.objects.filter(processed=False)
|
||||||
start = datetime.combine(d, t)
|
#for ld in data:
|
||||||
get_prize_for(start=start, pph=8.5)
|
# 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()
|
||||||
|
@ -55,7 +55,7 @@ def index(request):
|
|||||||
locations = Location.objects.filter(users__id=request.user.id).order_by('code')
|
locations = Location.objects.filter(users__id=request.user.id).order_by('code')
|
||||||
clients = Client.objects.filter(location_id=loc).order_by('id')
|
clients = Client.objects.filter(location_id=loc).order_by('id')
|
||||||
context = {
|
context = {
|
||||||
'range': range(1, 3),
|
'range': range(1, 9),
|
||||||
'locations': locations,
|
'locations': locations,
|
||||||
'clients': clients,
|
'clients': clients,
|
||||||
'location_id': int(loc),
|
'location_id': int(loc),
|
||||||
|
@ -17,7 +17,7 @@ def main():
|
|||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
payload = {
|
payload = {
|
||||||
'location_id': 'a7b47b4b-5b63-3b2f-8af0-4b185843f419',
|
'location_id': 'a7b47b4b-5b63-3b2f-8af0-4b185843f419',
|
||||||
'table_no': args.desk,
|
'desk_no': args.desk,
|
||||||
'tst': args.date.strftime('%Y-%m-%dT%H:%M:%S%Z')
|
'tst': args.date.strftime('%Y-%m-%dT%H:%M:%S%Z')
|
||||||
}
|
}
|
||||||
if args.on:
|
if args.on:
|
||||||
|
Loading…
Reference in New Issue
Block a user