Skip to content
Snippets Groups Projects
Commit ab94383a authored by Christian Dresen's avatar Christian Dresen
Browse files

Warpfood

Added possibility to choose Food from a List of Products
parent c9a1de96
No related branches found
No related tags found
No related merge requests found
...@@ -3,18 +3,38 @@ from django.forms import ModelForm, HiddenInput ...@@ -3,18 +3,38 @@ from django.forms import ModelForm, HiddenInput
from django import forms from django import forms
from django.utils import timezone from django.utils import timezone
#
# Models for WarpFood
# ToDo: FoodProduct Size not required
#
class PizzaService(models.Model): class FoodService(models.Model):
name = models.CharField(max_length=250) name = models.CharField(max_length=250)
phone = models.CharField(max_length=250) phone = models.CharField(max_length=250)
def __str__(self): def __str__(self):
return self.name return self.name
class FoodCategory(models.Model):
name = models.CharField(max_length=250)
def __str__(self):
return self.name
class FoodProduct(models.Model):
name = models.CharField(max_length=250)
food_service = models.ForeignKey(FoodService, on_delete=models.CASCADE)
food_category = models.ForeignKey(FoodCategory, on_delete=models.CASCADE)
size = models.CharField(max_length=100, null=True)
price = models.FloatField()
def __str__(self):
return self.name + " - " + self.size
class FoodSheet(models.Model): class FoodSheet(models.Model):
date = models.DateTimeField(default=timezone.now) date = models.DateTimeField(default=timezone.now)
pizza_service = models.ForeignKey(PizzaService, on_delete=models.CASCADE) food_service = models.ForeignKey(FoodService, on_delete=models.CASCADE)
estimated_order_time = models.DateTimeField() estimated_order_time = models.DateTimeField()
closed = models.BooleanField(default=False) closed = models.BooleanField(default=False)
order_user = models.CharField(max_length=100, null=True) order_user = models.CharField(max_length=100, null=True)
...@@ -28,13 +48,13 @@ class FoodOrder(models.Model): ...@@ -28,13 +48,13 @@ class FoodOrder(models.Model):
size = models.CharField(max_length=100, null=True) size = models.CharField(max_length=100, null=True)
comment = models.CharField(max_length=100, null=True) comment = models.CharField(max_length=100, null=True)
price = models.FloatField() price = models.FloatField()
paid = models.BooleanField() paid = models.BooleanField(default=False)
class FoodSheetForm(ModelForm): class FoodSheetForm(ModelForm):
class Meta: class Meta:
model = FoodSheet model = FoodSheet
fields = ['pizza_service', 'estimated_order_time'] fields = ['food_service', 'estimated_order_time']
class FoodOrderForm(ModelForm): class FoodOrderForm(ModelForm):
...@@ -53,7 +73,7 @@ class FoodOrderFormExt(ModelForm): ...@@ -53,7 +73,7 @@ class FoodOrderFormExt(ModelForm):
fields = ['sheet', 'user', 'article', 'size', 'comment', 'price', 'paid'] fields = ['sheet', 'user', 'article', 'size', 'comment', 'price', 'paid']
widgets = {'sheet': HiddenInput(), 'paid': HiddenInput()} widgets = {'sheet': HiddenInput(), 'paid': HiddenInput()}
class PizzaServiceForm(ModelForm): class FoodServiceForm(ModelForm):
class Meta: class Meta:
model = PizzaService model = FoodService
fields = ['name', 'phone'] fields = ['name', 'phone']
{% extends "base.html" %} {% extends "base.html" %}
{% load i18n %} {% load i18n %}
{% load humanize %}
{% load bootstrap %} {% load bootstrap %}
{% block content %} {% block content %}
{% if user.is_authenticated %} {% if user.is_authenticated %}
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
</thead> </thead>
<tbody> <tbody>
{% for sheet in food_sheets %} {% for sheet in food_sheets %}
<tr data-link="/pizza/view/{{ sheet.id }}/"><td>{{ sheet.estimated_order_time }}</td><td>{{ sheet.pizza_service }}</td></tr> <tr data-link="/pizza/view/{{ sheet.id }}/"><td>{{ sheet.estimated_order_time | naturaltime }}</td><td>{{ sheet.food_service }}</td></tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
......
...@@ -2,16 +2,16 @@ ...@@ -2,16 +2,16 @@
{% load i18n %} {% load i18n %}
{% load bootstrap %} {% load bootstrap %}
{% load humanize %}
{% block content %} {% block content %}
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-md-8">
<h4>{{ sheet.pizza_service.name }}</h4> <h4>{{ sheet.food_service.name }}</h4>
<small>{{ sheet.pizza_service.phone }}</small><br/><br/> <small>{{ sheet.food_service.phone }}</small><br/><br/>
<small>{{ sheet.estimated_order_time }}</small><br/><br/> <small>{{ sheet.estimated_order_time | naturaltime }}</small><br/><br/>
{% if user.is_authenticated %} {% if user.is_authenticated %}
<a href="" class="btn btn-primary">Edit Sheet</a> <a href="" class="btn btn-primary">Edit Sheet</a>
{% if not sheet.closed %} {% if not sheet.closed %}
...@@ -37,12 +37,19 @@ ...@@ -37,12 +37,19 @@
{% if error %} {% if error %}
<div class="alert alert-danger"> {{ error }}</div> <div class="alert alert-danger"> {{ error }}</div>
{% endif %} {% endif %}
<form class="form-horizontal" method="POST" role="form"> <form class="form-horizontal" method="POST" role="form">
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<a class="btn btn-success" data-toggle="modal" data-target="#product_modal">{% trans "Choose from Products" %}</a><br>
</div>
</div>
{{ create_food_order|bootstrap_horizontal }} {{ create_food_order|bootstrap_horizontal }}
<div class="form-group"> <div class="form-group">
<div class="col-sm-offset-2 col-sm-10"> <div class="col-sm-offset-2 col-sm-10">
{% csrf_token %} {% csrf_token %}
<button style="float: left" type="submit" formmethod="post" class="btn btn-primary">{% trans "Create Food Sheet" %}</button> <button style="float: left" type="submit" formmethod="post" class="btn btn-primary">{% trans "Order" %}</button>
</div> </div>
</div> </div>
</form> </form>
...@@ -88,4 +95,58 @@ ...@@ -88,4 +95,58 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
<br>
<br>
<div class="modal fade" id="product_modal" tabindex="-1" role="dialog" aria-labelledby="label_product_modal">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="label_product_modal">{% trans "Product List" %}</h4>
</div>
<div class="modal-body">
<div>
<ul class="nav nav-tabs" role="tablist">
{% for category in food_products %}
<li role="presentation"{% if category == "Pizza" %} class="active"{% endif %}>
<a href="#{{ category }}" aria-controls="{{ category }}" role="tab" data-toggle="tab">{% trans category %}</a>
</li>
{% endfor %}
</ul>
<div class="tab-content">
{% for category,products in food_products.items %}
<div role="tabpanel" class="tab-pane fade in{% if category == "Pizza" %} active {% endif %}" id="{{ category }}">
<table class="table table-striped table-hover">
{% for product in products %}
<tr data-link="javascript:choose_food_product('{{ product.name }}','{{ product.size }}','{{ product.price }}');">
<td>{{ product.name }}</td>
<td>{{ product.size }}</td>
<td>{{ product.price }}</td></tr>
{% endfor %}
</table>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %} {% endblock %}
{% block custom_javascript %}
<script>
function choose_food_product(name, size, price) {
document.getElementById("id_article").value = name;
document.getElementById("id_size").value = size;
document.getElementById("id_price").value = price;
$('#product_modal').modal('hide')
}
</script>
{% endblock %}
\ No newline at end of file
from django.contrib.humanize.templatetags.humanize import intcomma
pages = {'pages': [ pages = {'pages': [
{"link":"pizza", "name": "PizzaSheet"}, {"link":"pizza", "name": "PizzaSheet"},
{"link":"about", "name": "About"}, {"link":"about", "name": "About"},
{"link":"logout", "name": "Logout"}, {"link":"logout", "name": "Logout"},
{"link":"admin", "name": "Admin"} {"link":"admin", "name": "Admin"}
]} ]}
def format_euro(amount):
euro = round(float(amount), 2)
return "%s%s" % (intcomma(int(euro)), ("%0.2f" % euro)[-3:])
...@@ -9,7 +9,15 @@ from django.http import HttpResponse ...@@ -9,7 +9,15 @@ from django.http import HttpResponse
from reportlab.platypus import SimpleDocTemplate from reportlab.platypus import SimpleDocTemplate
from reportlab.platypus.tables import Table, TableStyle, colors from reportlab.platypus.tables import Table, TableStyle, colors
#
# ToDo: Hidden Field Paid default value to false
# ToDo: Insert TemplateTag for Euro Format
# ToDo: Implement Datetime Field for Estimated Order Time
# ToDo: Username with hidden Field. Maybe insecure
#
def index(request): def index(request):
pages['error'] = ""
if request.method == 'POST': if request.method == 'POST':
form = FoodSheetForm(request.POST) form = FoodSheetForm(request.POST)
if form.is_valid: if form.is_valid:
...@@ -17,11 +25,13 @@ def index(request): ...@@ -17,11 +25,13 @@ def index(request):
else: else:
pages['error'] = form.errors pages['error'] = form.errors
pages['food_sheets'] = FoodSheet.objects.all() pages['food_sheets'] = FoodSheet.objects.all()
pages['pizza_services'] = PizzaService.objects.all() pages['pizza_services'] = FoodService.objects.all()
pages['create_food_sheet'] = FoodSheetForm() pages['create_food_sheet'] = FoodSheetForm()
return HttpResponse(render(request, 'warpfood/main.html', pages)) return HttpResponse(render(request, 'warpfood/main.html', pages))
def view(request, sheet_id=0): def view(request, sheet_id=0):
pages['error'] = ""
if request.method == 'POST': if request.method == 'POST':
form = FoodOrderForm(request.POST) form = FoodOrderForm(request.POST)
if form.is_valid(): if form.is_valid():
...@@ -34,15 +44,24 @@ def view(request, sheet_id=0): ...@@ -34,15 +44,24 @@ def view(request, sheet_id=0):
sheet = FoodSheet.objects.get(id=sheet_id) sheet = FoodSheet.objects.get(id=sheet_id)
pages['sheet'] = sheet pages['sheet'] = sheet
pages['orders'] = FoodOrder.objects.filter(sheet=sheet) pages['orders'] = FoodOrder.objects.filter(sheet=sheet)
sum = 0 total_price = 0
for order in pages['orders']: for order in pages['orders']:
sum += order.price total_price += order.price
pages['order_sum'] = sum pages['order_sum'] = format_euro(total_price)
if request.user.is_authenticated(): if request.user.is_authenticated():
pages['create_food_order'] = FoodOrderForm(initial={'sheet': sheet_id, 'user': request.user, 'paid': True}) pages['create_food_order'] = FoodOrderForm(initial={'sheet': sheet_id, 'user': request.user, 'paid': True})
else: else:
pages['create_food_order'] = FoodOrderFormExt(initial={'sheet': sheet_id, 'paid': True}) pages['create_food_order'] = FoodOrderFormExt(initial={'sheet': sheet_id, 'paid': True})
# ToDO: remove DEBUG
products = FoodProduct.objects.filter(food_service=sheet.food_service)
pages['food_products'] = {}
for product in products:
if product.food_category.name not in pages['food_products']:
pages['food_products'][product.food_category.name] = []
pages['food_products'][product.food_category.name].append(product)
print pages['food_products']
return HttpResponse(render(request, 'warpfood/view.html', pages)) return HttpResponse(render(request, 'warpfood/view.html', pages))
@login_required(login_url='/login/', redirect_field_name=None) @login_required(login_url='/login/', redirect_field_name=None)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment