Compare commits
17 Commits
08705ae44e
...
main
Author | SHA1 | Date | |
---|---|---|---|
1a12dcd1d0 | |||
|
9f7bc8086c | ||
|
833287222d | ||
|
e2cdaf059a | ||
|
b2e8192a2d | ||
|
3a15183094 | ||
|
08d668c984 | ||
|
24e9d83a52 | ||
|
4d7e352220 | ||
|
abc4403373 | ||
|
57930c374a | ||
|
9318f0b25c | ||
|
02a9df95b5 | ||
|
9ad4038d6b | ||
|
c68fcc56f9 | ||
|
90eccad3f7 | ||
|
2440963afc |
21
README.md
21
README.md
@@ -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
33
app.py
@@ -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')
|
||||||
|
@@ -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>
|
||||||
|
Reference in New Issue
Block a user