Compare commits
40 Commits
1f175d108a
...
main
Author | SHA1 | Date | |
---|---|---|---|
1a12dcd1d0 | |||
|
9f7bc8086c | ||
|
833287222d | ||
|
e2cdaf059a | ||
|
b2e8192a2d | ||
|
3a15183094 | ||
|
08d668c984 | ||
|
24e9d83a52 | ||
|
4d7e352220 | ||
|
abc4403373 | ||
|
57930c374a | ||
|
9318f0b25c | ||
|
02a9df95b5 | ||
|
9ad4038d6b | ||
|
c68fcc56f9 | ||
|
90eccad3f7 | ||
|
2440963afc | ||
|
08705ae44e | ||
|
a57c5fa837 | ||
|
7a0be8aa61 | ||
|
e2383aefb5 | ||
|
6601cd3e88 | ||
|
4a1b237482 | ||
|
629ca0ea88 | ||
|
6ff60dfb09 | ||
|
db3f8bd13f | ||
|
face097b39 | ||
|
0fd5e9f789 | ||
|
f6acec036a | ||
|
d720848ccb | ||
|
57a57a8e0a | ||
|
ff84b5ec40 | ||
|
9050ec7c03 | ||
|
133d219d6e | ||
|
6823be2c0d | ||
|
9bfe5b8add | ||
|
74b4620b69 | ||
|
222a8f019e | ||
|
b6d6b62223 | ||
|
a73261f18a |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
.venv
|
.venv/
|
||||||
log
|
log/
|
||||||
|
__pycache__/
|
||||||
|
@@ -14,7 +14,8 @@ WORKDIR /app
|
|||||||
# copy every content from the local file to the image
|
# copy every content from the local file to the image
|
||||||
COPY ./app.py /app
|
COPY ./app.py /app
|
||||||
COPY ./templates/index.html /app/templates/index.html
|
COPY ./templates/index.html /app/templates/index.html
|
||||||
COPY ./static/favicon.ico /app/static/favicon.ico
|
COPY ./static/ /app/static/
|
||||||
|
RUN ls -la /app/static/*
|
||||||
COPY ./app.ini /app
|
COPY ./app.ini /app
|
||||||
COPY ./wsgi.py /app
|
COPY ./wsgi.py /app
|
||||||
|
|
||||||
|
37
README.md
37
README.md
@@ -1,18 +1,22 @@
|
|||||||
# erdbeerhannah
|
# erdbeerhannah
|
||||||
|
|
||||||
*Kassen-App für Erdbeerstände*
|
*Simple Rechner-App für Erdbeerstände (und ähnliche Verkausstellen)*
|
||||||
|
|
||||||
## Erdbeerkasse
|
## Motivation
|
||||||
|
|
||||||
Viele Erdbeerstände in Deutschland haben keine elektronische Kasse. Aufgrund der geringen Zahl unterschiedlicher Artikel bietet sich eine simple Rechner-App an, die bis zu sechs verschiedene Artikel in unterschiedlicher Stückzahl summieren kann.
|
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.
|
||||||
|
|
||||||
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*.
|
||||||
|
|
||||||
|
**Der Autor übernimmt keinerlei Haftung für Verfügbarkeit, Funktionalität, insbesondere Richtigkeit der Rechenergebnisse.**
|
||||||
|
|
||||||
## Design
|
## Design
|
||||||
|
|
||||||
Die Web-App *erdbeerhannah* wurde für einfachste Bedienbarkeit auf allen Geräten (Notebook, Smartphone, Tablet) entwickelt. Die Bedienung ist intuitiv und erfordert keine Einarbeitung, das Design klar und farblich sinnvoll gestaltet.
|
Die Web-App *erdbeerhannah* wurde für einfachste Bedienbarkeit auf allen Geräten (Notebook, Smartphone, Tablet) entwickelt. Die Bedienung ist intuitiv und erfordert keine Einarbeitung, das Design ist klar und farblich sinnvoll gestaltet.
|
||||||
|
|
||||||

|

|
||||||
*Darstellung im Webbrowser*
|
*Darstellung im Webbrowser*
|
||||||
@@ -25,21 +29,25 @@ Die Web-App *erdbeerhannah* wurde für einfachste Bedienbarkeit auf allen Gerät
|
|||||||
|
|
||||||
## Anpassung der Artikel und Preise
|
## Anpassung der Artikel und Preise
|
||||||
|
|
||||||
Die Anpassung von Artikeln und Preisen ist derzeit lediglich im Quellcode der App möglich. Die App ist auf maximal sechs Artikel beschränkt.
|
Die Anpassung von Artikeln und Preisen ist derzeit lediglich im Quellcode der App möglich. Die App ist auf maximal sechs Artikel beschränkt.
|
||||||
|
|
||||||
Individuelle Anpassungen (Birnen? Kirschen?) oder Branding können auf Wunsch vom Autor gegen ein angemessenes Entgeld oder eine Spende an eine Organisation der Wahl des Autors vorgenommen werden. Ein Hosting unter der eigenen Domain (z.B. https://kasse.mein-erdbeerhof.de) ist ebenfalls möglich.
|
Individuelle Anpassungen (Birnen? Kirschen? Spargel?) oder ein passendes Branding können auf Wunsch vom Autor gegen ein angemessenes Entgeld oder eine Spende an eine [Organisation der Wahl des Autors](https://www.tagesschau.de/spendenkonten/spendenkonten-133.html) vorgenommen werden. Ein Hosting unter der eigenen Domain (z.B. https://kasse.mein-erdbeerhof.de) ist ebenfalls möglich. Bei Interesse schreiben Sie bitte eine Mail an [m.busche@mailbox.org](mailto:m.busche@mailbox.org?subject=Erdbeerhannah).
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
|
|
||||||
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`
|
||||||
|
|
||||||
## Privatsphäre
|
## Privatsphäre
|
||||||
|
|
||||||
Die App *erdbeerhannah* protokolliert keinerlei Daten. Keine IP-Adressen, keine Klicks, keine Benutzer-Eingaben und auch sonst nichts.
|
Die App *erdbeerhannah* protokolliert keinerlei Daten. Keine IP-Adressen, keine Klicks, keine Benutzer-Eingaben und auch sonst nichts. Es werden keine Cookies genutzt, es findet kein Tracking statt und es gibt keine Werbung.
|
||||||
|
|
||||||
## Lizenz
|
## Lizenz
|
||||||
|
|
||||||
@@ -47,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, Hermany
|
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.
|
||||||
```
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
3
app.ini
3
app.ini
@@ -2,4 +2,5 @@
|
|||||||
wsgi-file = wsgi.py
|
wsgi-file = wsgi.py
|
||||||
master = 5
|
master = 5
|
||||||
http = :90
|
http = :90
|
||||||
die-on-term = true
|
die-on-term = true
|
||||||
|
logto = /app/log/marmelade.log
|
||||||
|
68
app.py
68
app.py
@@ -1,12 +1,25 @@
|
|||||||
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__)
|
||||||
app.config['SECRET_KEY'] = 'j69ol5mcHLsEtLg4Y/+myd9wWD4pp56E'
|
app.config['SECRET_KEY'] = 'j69ol5mcHLsEtLg4Y/+myd9wWD4pp56E'
|
||||||
|
|
||||||
|
# setup logging
|
||||||
|
formatter = logging.Formatter(
|
||||||
|
'%(asctime)s %(levelname)s %(process)d ---- %(threadName)s '
|
||||||
|
'%(module)s : %(funcName)s {%(pathname)s:%(lineno)d} %(message)s','%Y-%m-%dT%H:%M:%SZ')
|
||||||
|
handler = logging.StreamHandler()
|
||||||
|
handler.setFormatter(formatter)
|
||||||
|
app.logger.setLevel(logging.DEBUG)
|
||||||
|
app.logger.addHandler(handler)
|
||||||
|
|
||||||
Bootstrap(app)
|
Bootstrap(app)
|
||||||
|
|
||||||
|
version = "1.0.9/2024-05-28"
|
||||||
|
postcounter = 0
|
||||||
gesamtwert = 0
|
gesamtwert = 0
|
||||||
change = 0
|
change = 0
|
||||||
givenfloat = 0
|
givenfloat = 0
|
||||||
@@ -18,14 +31,36 @@ 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
|
global gesamtwert, item1, item2, item3, item4, item5, item6, sum, givenfloat, change, given, background, postcounter, version
|
||||||
|
background = "bg-white"
|
||||||
|
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
|
postcounter += 1
|
||||||
# wert = float(request.form["wert"])
|
# wert = float(request.form["wert"])
|
||||||
wert = request.form.get('wert', "0", type=float)
|
wert = request.form.get('wert', "0", type=float)
|
||||||
given = request.form.get('given', "0", type=float)
|
given = request.form.get('given', "0", type=float)
|
||||||
|
app.logger.debug('wert: %s, given: %s', wert, given)
|
||||||
wertfloat = float(wert)
|
wertfloat = float(wert)
|
||||||
givenfloat = float(given)
|
givenfloat = float(given)
|
||||||
|
|
||||||
@@ -41,6 +76,7 @@ def index():
|
|||||||
item4 = 0
|
item4 = 0
|
||||||
item5 = 0
|
item5 = 0
|
||||||
item6 = 0
|
item6 = 0
|
||||||
|
background = "bg-white"
|
||||||
# summarize value
|
# summarize value
|
||||||
elif wertfloat != -2:
|
elif wertfloat != -2:
|
||||||
gesamtwert += wertfloat
|
gesamtwert += wertfloat
|
||||||
@@ -49,23 +85,29 @@ 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
|
||||||
if givenfloat > 0:
|
if givenfloat > 0:
|
||||||
gesamtwert = session['summefloat']
|
try:
|
||||||
sum = str(gesamtwert) + "0"
|
gesamtwert = session['summefloat'] or 0
|
||||||
change = str(round((givenfloat - gesamtwert) * -1, 2)) + "0"
|
sum = str(gesamtwert) + "0"
|
||||||
logging.info('Sum %s, given %s, change %s', sum, givenfloat, change)
|
change = str(round((givenfloat - gesamtwert) * -1, 2)) + "0"
|
||||||
|
except:
|
||||||
|
app.logger.warning("Failed to read sum")
|
||||||
|
if givenfloat - gesamtwert < 0:
|
||||||
|
background = "bg-danger"
|
||||||
|
else:
|
||||||
|
background = "bg-white"
|
||||||
|
|
||||||
session['item1'] = item1
|
session['item1'] = item1
|
||||||
session['item2'] = item2
|
session['item2'] = item2
|
||||||
@@ -78,6 +120,9 @@ def index():
|
|||||||
session['change'] = change
|
session['change'] = change
|
||||||
session['given'] = givenfloat
|
session['given'] = givenfloat
|
||||||
|
|
||||||
|
app.logger.info('*** sum %s, given %s, change %s', sum, givenfloat, change)
|
||||||
|
app.logger.info('*** postcounter %s', postcounter)
|
||||||
|
|
||||||
return render_template("index.html", gesamtwert=session.get('summestring', 0),
|
return render_template("index.html", gesamtwert=session.get('summestring', 0),
|
||||||
change=session.get('change', 0),
|
change=session.get('change', 0),
|
||||||
given=session.get('given', 0),
|
given=session.get('given', 0),
|
||||||
@@ -87,6 +132,8 @@ def index():
|
|||||||
item4=session.get('item4', 0),
|
item4=session.get('item4', 0),
|
||||||
item5=session.get('item5', 0),
|
item5=session.get('item5', 0),
|
||||||
item6=session.get('item6', 0),
|
item6=session.get('item6', 0),
|
||||||
|
background=background,
|
||||||
|
version=version,
|
||||||
)
|
)
|
||||||
|
|
||||||
@app.route('/favicon.ico')
|
@app.route('/favicon.ico')
|
||||||
@@ -100,5 +147,4 @@ def favicon():
|
|||||||
# 'about.html')
|
# 'about.html')
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
logging.info('Starting erdbeerhannah v1.0.1')
|
app.run(debug=True, host='127.0.0.1')
|
||||||
app.run(debug=True, host='0.0.0.0')
|
|
@@ -3,7 +3,22 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Erdbeerkasse 🍓💶</title>
|
<meta http-equiv="content-Type" content="text/html; utf-8" />
|
||||||
|
<meta http-equiv="Pragma" content="cache" />
|
||||||
|
<meta name="robots" content="INDEX,FOLLOW" />
|
||||||
|
<meta http-equiv="content-Language" content="de" />
|
||||||
|
<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 kasse calculator bargeld artikel obst erdbeeren spargel kirschen verkaufsstand wechselgeld kostenlos opensource werbefrei" />
|
||||||
|
<meta name="author" content="Markus Busche" />
|
||||||
|
<meta name="publisher" content="Markus Busche" />
|
||||||
|
<meta name="copyright" content="2024 Markus Busche" />
|
||||||
|
<meta name="audience" content="Alle" />
|
||||||
|
<meta name="page-type" content="HTML-Formular" />
|
||||||
|
<meta name="page-topic" content="Dienstleistung" />
|
||||||
|
<meta http-equiv="Reply-to" content="m.busche@mailbox.org" />
|
||||||
|
<meta name="expires" content="" />
|
||||||
|
<meta name="revisit-after" content="2 days" />
|
||||||
|
<title>erdbeerhannah 🍓💶</title>
|
||||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
|
||||||
<style>
|
<style>
|
||||||
body, html {
|
body, html {
|
||||||
@@ -58,41 +73,45 @@
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('[data-toggle="tooltip"]').tooltip();
|
||||||
|
});
|
||||||
|
</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" 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" 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" 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" 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" 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" 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>
|
||||||
<td class="bold-row">🫰 {{ gesamtwert }}€</td>
|
<td data-toggle="tooltip" data-placement="top" title="Summe" class="bold-row">🫰 {{ gesamtwert }}€</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="input-container">
|
<div class="input-container">
|
||||||
<input type="text" class="form-control" name="given" placeholder="{{ given }}">
|
<input type="text" class="form-control" name="given" placeholder="{{ given }}">
|
||||||
<button type="submit" name="wert" value="-2" class="btn btn-xl btn-primary custom-btn-size-med">🧾</button>
|
<button type="submit" name="wert" value="-2" data-toggle="tooltip" data-placement="top" title="Wechselgeld berechnen" class="btn btn-xl btn-primary custom-btn-size-med">🧾</button>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="bold-row">🪙 {{ change }}€</td>
|
<td data-toggle="tooltip" data-placement="top" title="Wechselgeld" class="bold-row {{ background }}">🪙 {{ change }}€</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="3"><button type="submit" name="wert" value="0" id="reset" class="btn btn-xl btn-dark custom-btn-size">Reset 🦭</button></td>
|
<td colspan="3"><button type="submit" name="wert" value="0" id="reset" class="btn btn-xl btn-dark custom-btn-size">Reset 🦭</button></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="3">Made with ♥️, marmalade and zero kowledge in Kiel Strawberry City.<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.1/2024-05-26<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">Weitere Infos</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</form>
|
</form>
|
||||||
|
Reference in New Issue
Block a user