Compare commits

...

17 Commits

Author SHA1 Message Date
1a12dcd1d0 Neue Preise, neue Artikel 2024-06-24 13:52:54 +02:00
elpatron68
9f7bc8086c increase version 2024-05-29 16:15:48 +02:00
elpatron68
833287222d Change price 2024-05-29 16:15:16 +02:00
elpatron68
e2cdaf059a Update README 2024-05-28 16:59:11 +02:00
elpatron68
b2e8192a2d Update README 2024-05-28 12:52:52 +02:00
elpatron68
3a15183094 Instructions 2024-05-28 11:03:48 +02:00
elpatron68
08d668c984 4 decimal places 2024-05-28 08:53:08 +02:00
elpatron68
24e9d83a52 Add load time 2024-05-28 08:42:57 +02:00
elpatron68
4d7e352220 Update README 2024-05-27 21:14:07 +02:00
elpatron68
abc4403373 Cache-Control 2024-05-27 19:10:12 +02:00
elpatron68
57930c374a Cache-Control 2024-05-27 19:09:48 +02:00
elpatron68
9318f0b25c prevent cached responses 2024-05-27 19:01:11 +02:00
elpatron68
02a9df95b5 Add timestamp 2024-05-27 15:46:12 +02:00
elpatron68
9ad4038d6b remove line break 2024-05-27 15:28:24 +02:00
elpatron68
c68fcc56f9 Add some keywords 2024-05-27 15:22:27 +02:00
elpatron68
90eccad3f7 change title 2024-05-27 13:38:29 +02:00
elpatron68
2440963afc Add version 2024-05-27 13:29:42 +02:00
3 changed files with 47 additions and 24 deletions

View File

@@ -1,6 +1,6 @@
# erdbeerhannah # erdbeerhannah
*Simple Rechner-App für Erdbeerstände* *Simple Rechner-App für Erdbeerstände (und ähnliche Verkausstellen)*
## Motivation ## Motivation
@@ -8,7 +8,7 @@ Viele Erdbeerstände in Deutschland haben keine elektronische Kasse. Aufgrund de
Für jeden Artikel gibt es einen großen Knopf. Ein Klick addiert 1x den ausgewählten Artikel zur Gesamtsumme. Optional kann per Eingabefeld das Wechselgeld berechnet werden. Für jeden Artikel gibt es einen großen Knopf. Ein Klick addiert 1x den ausgewählten Artikel zur Gesamtsumme. Optional kann per Eingabefeld das Wechselgeld berechnet werden.
Eine Demo-Instanz der App kann [hier](https://erdbeerhannah.elpatron.me/) zum freien Testen aufgerufen werden. Eine Demo-Instanz der App kann [hier](https://erdbeerhannah.elpatron.me/) zur freien Nutzung aufgerufen werden.
Die Demo-Instanz ist werbefrei und die Nutzung dauerhaft kostenlos. Details siehe in den Abschnitten *Anpassung* und *Privatsphäre*. Die Demo-Instanz ist werbefrei und die Nutzung dauerhaft kostenlos. Details siehe in den Abschnitten *Anpassung* und *Privatsphäre*.
@@ -37,6 +37,10 @@ Individuelle Anpassungen (Birnen? Kirschen? Spargel?) oder ein passendes Brandin
Die Bereitstellung der App erfolgt am einfachsten mit Docker: Die Bereitstellung der App erfolgt am einfachsten mit Docker:
`git clone https://gitea.elpatron.me/elpatron/erdbeerhannah.git`
`cd erdbeerhannah`
`docker image build -t erdbeerhannah:latest .` `docker image build -t erdbeerhannah:latest .`
`docker run -p 9090:90 -t erdbeerhannah:latest` `docker run -p 9090:90 -t erdbeerhannah:latest`
@@ -51,16 +55,15 @@ Die App *erdbeerhannah* protokolliert keinerlei Daten. Keine IP-Adressen, keine
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004 Version 2, December 2004
Copyright (C) 2024 Markus Busche; Knorrstr. 16, 24106 Kiel, Germany Copyright (C) 2024 Markus Busche; Knorrstr. 16, 24106 Kiel, Germany
Everyone is permitted to copy and distribute verbatim or modified Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long copies of this license document, and changing it is allowed as long
as the name is changed. as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO. 0. You just DO WHAT THE FUCK YOU WANT TO.
```
``` ```

33
app.py
View File

@@ -1,6 +1,7 @@
import os import os
import time
import logging import logging
from flask import Flask, render_template, request, session, send_from_directory from flask import Flask, render_template, request, session, send_from_directory, g
from flask_bootstrap import Bootstrap from flask_bootstrap import Bootstrap
app = Flask(__name__) app = Flask(__name__)
@@ -14,10 +15,10 @@ handler = logging.StreamHandler()
handler.setFormatter(formatter) handler.setFormatter(formatter)
app.logger.setLevel(logging.DEBUG) app.logger.setLevel(logging.DEBUG)
app.logger.addHandler(handler) app.logger.addHandler(handler)
app.logger.info('Starting erdbeerhannah v1.0.5')
Bootstrap(app) Bootstrap(app)
version = "1.0.9/2024-05-28"
postcounter = 0 postcounter = 0
gesamtwert = 0 gesamtwert = 0
change = 0 change = 0
@@ -30,9 +31,28 @@ item4 = 0
item5 = 0 item5 = 0
item6 = 0 item6 = 0
app.logger.info('Starting erdbeerhannah ' + version)
# https://code-maven.com/flask-display-elapsed-time
@app.before_request
def before_request():
g.request_start_time = time.time()
g.request_time = lambda: "%.4fs" % (time.time() - g.request_start_time)
# prevent cached responses
# https://stackoverflow.com/questions/47376744/how-to-prevent-cached-response-flask-server-using-chrome
@app.after_request
def add_header(r):
"""
Add headers to both force latest IE rendering engine or Chrome Frame,
and also to cache the rendered page for 10 minutes.
"""
r.headers["Cache-Control"] = "no-store, max-age=0"
return r
@app.route("/", methods=["GET", "POST"]) @app.route("/", methods=["GET", "POST"])
def index(): def index():
global gesamtwert, item1, item2, item3, item4, item5, item6, sum, givenfloat, change, given, background, postcounter global gesamtwert, item1, item2, item3, item4, item5, item6, sum, givenfloat, change, given, background, postcounter, version
background = "bg-white" background = "bg-white"
if request.method == "POST": if request.method == "POST":
@@ -65,15 +85,15 @@ def index():
sum = str(gesamtwert) + "0" sum = str(gesamtwert) + "0"
# summarize items # summarize items
if wertfloat == 5.8: if wertfloat == 4.9:
item1 += 1 item1 += 1
if wertfloat == 4.8: if wertfloat == 4.8:
item2 += 1 item2 += 1
if wertfloat == 3.3: if wertfloat == 3.3:
item3 += 1 item3 += 1
if wertfloat == 8.8: if wertfloat == 4.5:
item4 += 1 item4 += 1
if wertfloat == 5.5: if wertfloat == 5:
item5 += 1 item5 += 1
if wertfloat == .2: if wertfloat == .2:
item6 += 1 item6 += 1
@@ -113,6 +133,7 @@ def index():
item5=session.get('item5', 0), item5=session.get('item5', 0),
item6=session.get('item6', 0), item6=session.get('item6', 0),
background=background, background=background,
version=version,
) )
@app.route('/favicon.ico') @app.route('/favicon.ico')

View File

@@ -7,8 +7,8 @@
<meta http-equiv="Pragma" content="cache" /> <meta http-equiv="Pragma" content="cache" />
<meta name="robots" content="INDEX,FOLLOW" /> <meta name="robots" content="INDEX,FOLLOW" />
<meta http-equiv="content-Language" content="de" /> <meta http-equiv="content-Language" content="de" />
<meta name="description" content="Viele Erdbeerstände in Deutschland haben keine elektronische Kasse. Aufgrund der geringen Zahl unterschiedlicher Artikel bietet sich diese simple Rechner-App an, die bis zu sechs verschiedene Artikel in unterschiedlicher Stückzahl summieren kann." /> <meta name="description" content="Viele Obststände in Deutschland haben keine elektronische Kasse. Aufgrund der geringen Zahl unterschiedlicher Artikel bietet sich diese simple Rechner-App an, die bis zu sechs verschiedene Artikel in unterschiedlicher Stückzahl summieren kann." />
<meta name="keywords" content="rechner calculator bargeld artikel obst erdbeeren spargel kirschen verkaufsstand wechselgeld" /> <meta name="keywords" content="rechner kasse calculator bargeld artikel obst erdbeeren spargel kirschen verkaufsstand wechselgeld kostenlos opensource werbefrei" />
<meta name="author" content="Markus Busche" /> <meta name="author" content="Markus Busche" />
<meta name="publisher" content="Markus Busche" /> <meta name="publisher" content="Markus Busche" />
<meta name="copyright" content="2024 Markus Busche" /> <meta name="copyright" content="2024 Markus Busche" />
@@ -77,23 +77,23 @@
$(document).ready(function(){ $(document).ready(function(){
$('[data-toggle="tooltip"]').tooltip(); $('[data-toggle="tooltip"]').tooltip();
}); });
</script> </script>
<body> <body>
<div class="container-fluid table-container"> <div class="container-fluid table-container">
<table class="table table-bordered"> <table class="table table-bordered">
<form method="post"> <form method="post">
<tbody> <tbody>
<tr class="bold-row"> <tr class="bold-row">
<td colspan="3">erdbeerkasse 🍓💶</td> <td colspan="3">erdbeerrechner 🍓💶</td>
</tr> </tr>
<tr> <tr>
<td><button type="submit" name="wert" value="5.8" data-toggle="tooltip" data-placement="top" title="500g Erdbeeren" class="btn btn-xl btn-primary custom-btn-size">🍓 5,80€ ({{ item1 }})</button></td> <td><button type="submit" name="wert" value="4.9" data-toggle="tooltip" data-placement="top" title="500g Erdbeeren" class="btn btn-xl btn-primary custom-btn-size">🍓 4,90€ ({{ item1 }})</button></td>
<td><button type="submit" name="wert" value="4.8" data-toggle="tooltip" data-placement="top" title="Marmelade groß" class="btn btn-xl btn-danger custom-btn-size">🫙🫙 4,80€ ({{ item2 }})</button></td> <td><button type="submit" name="wert" value="4.8" data-toggle="tooltip" data-placement="top" title="Marmelade groß" class="btn btn-xl btn-danger custom-btn-size">🫙🫙 4,80€ ({{ item2 }})</button></td>
<td><button type="submit" name="wert" value="3.3" data-toggle="tooltip" data-placement="top" title="Marmelade klein" class="btn btn-xl btn-danger custom-btn-size">🫙 3,30€ ({{ item3 }})</button></td> <td><button type="submit" name="wert" value="3.3" data-toggle="tooltip" data-placement="top" title="Marmelade klein" class="btn btn-xl btn-danger custom-btn-size">🫙 3,30€ ({{ item3 }})</button></td>
</tr> </tr>
<tr> <tr>
<td><button type="submit" name="wert" value="8.8" data-toggle="tooltip" data-placement="top" title="Saft 5l" class="btn btn-xl btn-warning custom-btn-size">🧃🧃 8,80€ ({{ item4 }})</button></td> <td><button type="submit" name="wert" value="5.0" data-toggle="tooltip" data-placement="top" title="500g Kirschen" class="btn btn-xl btn-warning custom-btn-size">🍒 5,00€ ({{ item4 }})</button></td>
<td><button type="submit" name="wert" value="5.5" data-toggle="tooltip" data-placement="top" title="Saft 3l" class="btn btn-xl btn-warning custom-btn-size">🧃 5,50€ ({{ item5 }})</button></td> <td><button type="submit" name="wert" value="4.5" data-toggle="tooltip" data-placement="top" title="500g Himbeeren" class="btn btn-xl btn-warning custom-btn-size">🫐 4,50€ ({{ item5 }})</button></td>
<td><button type="submit" name="wert" value="0.2" data-toggle="tooltip" data-placement="top" title="Tragetasche" class="btn btn-xl btn-success custom-btn-size">🛍️ 0,20€ ({{ item6 }})</button></td> <td><button type="submit" name="wert" value="0.2" data-toggle="tooltip" data-placement="top" title="Tragetasche" class="btn btn-xl btn-success custom-btn-size">🛍️ 0,20€ ({{ item6 }})</button></td>
</tr> </tr>
<tr> <tr>
@@ -111,8 +111,7 @@
</tr> </tr>
<tr> <tr>
<td colspan="3">Made with ♥️, marmalade and zero knowledge in <a href="https://kiel-sailing-city.de/" target="_blank">Kiel Strawberry City.</a><br> <td colspan="3">Made with ♥️, marmalade and zero knowledge in <a href="https://kiel-sailing-city.de/" target="_blank">Kiel Strawberry City.</a><br>
Version: 1.0.5/2024-05-27<br> Version: {{ version }} ({{ g.request_time() }}), <a href="https://gitea.elpatron.me/elpatron/erdbeerhannah/src/branch/main/README.md" target="_blank">Infos</a></td>
<a href="https://gitea.elpatron.me/elpatron/erdbeerhannah/src/branch/main/README.md" target="_blank">Weitere Infos</a></td>
</tr> </tr>
</tbody> </tbody>
</form> </form>