22 Commits
0.0.8 ... 0.1.4

Author SHA1 Message Date
3a17338358 Merge branch 'main' of gitea.hottis.de:moerp/Elo-rezept-rechner
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-01-30 18:08:15 +01:00
4761910092 changes 2024-01-30 18:07:16 +01:00
2c499b363b Merge branch 'main' of gitea.hottis.de:moerp/elo-rezept-rechner
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-01-30 17:03:14 +01:00
39e2f2634d small
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2024-01-30 17:03:00 +01:00
ffa6944e7b fix auth for add_nut... 2024-01-30 17:02:58 +01:00
449dba1d7e Merge branch 'main' of gitea.hottis.de:moerp/elo-rezept-rechner
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-01-30 16:56:03 +01:00
b6d1367019 test 2024-01-30 16:55:44 +01:00
2ff8757b74 style 2024-01-30 16:50:15 +01:00
7f06e900bb test 2024-01-30 16:27:16 +01:00
4c2338c34a test
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2024-01-30 16:24:45 +01:00
5f8d49f054 test 2024-01-30 16:19:08 +01:00
5cfba1c068 favicon
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-01-30 15:52:49 +01:00
09a670727f favicon
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2024-01-30 15:50:39 +01:00
f4a4597223 start pipeline, 2 2024-01-30 15:49:37 +01:00
70815f0172 start pipeline 2024-01-30 15:49:06 +01:00
e4e8e19466 small cahnges
All checks were successful
ci/woodpecker/manual/woodpecker Pipeline was successful
2024-01-30 15:33:54 +01:00
2228f0cfb5 db fix 2024-01-30 15:29:46 +01:00
24fb1c2941 libpq, 3
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful
2024-01-30 15:00:51 +01:00
cc3a6381d5 libpq 2024-01-30 14:59:46 +01:00
938562b9d8 requirements, 3
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2024-01-30 14:53:47 +01:00
103d60764b requirements, 2 2024-01-30 14:53:06 +01:00
8a446b8a8d requirements 2024-01-30 14:52:32 +01:00
8 changed files with 95 additions and 49 deletions

View File

@ -7,7 +7,9 @@ COPY start.sh ${APP_DIR}/
WORKDIR ${APP_DIR}
RUN pip install -r requirements.txt
RUN \
apk add --no-cache build-base libpq-dev && \
pip install -r requirements.txt
EXPOSE 8080

View File

@ -20,15 +20,13 @@ app.config.update({
oidc = OpenIDConnect(app)
def calculate_nutrition(food, weight):
try:
conn = psycopg2.connect()
with conn.cursor() as cursor:
# Abfrage der Nährwertdaten aus der Datenbank
cursor.execute('SELECT kcal, EW, Fett, KH, BST, CA FROM nutrition_table WHERE name = ?', (food,))
cursor.execute('SELECT kcal, EW, Fett, KH, BST, CA FROM nutrition_table WHERE name = %s', (food,))
result = cursor.fetchone()
@ -51,6 +49,7 @@ def calculate_nutrition(food, weight):
conn.close()
# Index-Route
@app.route('/')
@oidc.require_login
@ -67,7 +66,6 @@ def get_products():
with conn.cursor() as cursor:
cursor.execute('SELECT name FROM nutrition_table')
products = cursor.fetchall()
print("ter")
return {'products': [product[0] for product in products]}
finally:
if conn:
@ -98,25 +96,31 @@ def add_lm():
return "Lebensmittel nicht gefunden.", 404
def convert_decimal(value):
try:
return float(value.replace(',', '.'))
except (ValueError, TypeError):
return 0.0 # Rückgabe eines Standardwertes im Fehlerfall
@app.route('/add_nutrition', methods=['POST'])
@oidc.accept_token(require_token=True, scopes_required=['openid'])
@oidc.require_login
def add_nutrition():
food = request.form.get('food')
kcal = float(request.form.get('kcal'))
ew = float(request.form.get('ew'))
fett = float(request.form.get('fett'))
kh = float(request.form.get('kh'))
bst = float(request.form.get('bst'))
ca = float(request.form.get('ca'))
kcal = convert_decimal(request.form.get('kcal'))
ew = convert_decimal(request.form.get('ew'))
fett = convert_decimal(request.form.get('fett'))
kh = convert_decimal(request.form.get('kh'))
bst = convert_decimal(request.form.get('bst'))
ca = convert_decimal(request.form.get('ca'))
print("test")
# Verbindung zur Datenbank herstellen und Daten einfügen
try:
conn = psycopg2.connect()
with conn.cursor() as cursor:
cursor.execute("INSERT INTO nutrition_table (name, kcal, ew, fett, kh, bst, ca) VALUES (?, ?, ?, ?, ?, ?, ?)",
(food, kcal, ew, fett, kh, bst, ca))
cursor.execute("INSERT INTO nutrition_table (name, kcal, ew, fett, kh, bst, ca) VALUES (%s, %s, %s, %s, %s, %s, %s)",
(food, kcal, ew, fett, kh, bst, ca))
return redirect(url_for('nutrition'))
finally:

View File

@ -13,6 +13,8 @@ itsdangerous==2.1.2
Jinja2==3.1.3
MarkupSafe==2.1.4
packaging==23.2
psycopg==3.1.17
psycopg2==2.9.9
pycparser==2.21
requests==2.31.0
typing_extensions==4.9.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -34,13 +34,20 @@ button:not(:disabled):hover {
}
button#remove-button {
background-color: #f443366f; /* Helles Rot */
background-color: #640000; /* Helles Rot */
}
button#remove-button:disabled {
background-color: #cccccc;
color: #666666;
}
button#remove-button:not(:disabled):hover {
background-color: #d32f2f3d; /* Dunkleres Rot */
background-color: #490000; /* Dunkleres Rot */
}
table {
width: 100%;
border-collapse: collapse;
@ -65,7 +72,7 @@ tr:nth-child(even) {
}
.selected, tr.selected {
background-color: #ffdd99; /* Hervorhebung der Auswahl */
background-color: #e19595; /* Hervorhebung der Auswahl */
}
tr:hover:not(.selected) {
@ -121,3 +128,27 @@ tr:hover:not(.selected) {
padding: 20px;
margin: 20px 0;
}
#nutrition-input-table {
width: 100%; /* Tabelle nimmt die volle Breite ein */
border-collapse: collapse; /* Entfernt doppelte Ränder */
}
#nutrition-input-table th, #nutrition-input-table td {
border: 1px solid #ddd; /* Fügt Ränder hinzu */
padding: 8px; /* Fügt Innenabstand hinzu */
text-align: left; /* Ausrichtung des Textes */
}
#nutrition-input-table input {
width: 100%; /* Eingabefelder nehmen die volle Breite der Zelle ein */
box-sizing: border-box; /* Box-Modell für die Breitenberechnung */
}
@media screen and (max-width: 600px) {
#nutrition-input-table {
display: block;
overflow-x: auto; /* Ermöglicht horizontales Scrollen auf kleinen Bildschirmen */
}
}

View File

@ -4,10 +4,9 @@
<meta charset="UTF-8">
<title>Nährwertberechnungs-App</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
<link rel="shortcut icon" href="../static/images/favicon.ico">
<script>
// JavaScript-Funktion, um die Produkte beim Laden der Seite zu holen
document.addEventListener('DOMContentLoaded', function() {
cleanUpLocalStorage();
restoreTableFromLocalStorage();
@ -176,7 +175,7 @@ function updateTotalNutrition() {
</head>
<body>
<nav id="navbar">
<h1>Elos Rezept Rechner</h1>
<h1>Elo's Rezept Rechner</h1>
<ul>
<li><a href="/" class="active">Rechner</a></li>
<li><a href="/nutrition">Neue Lebensmittel</a></li>
@ -211,6 +210,8 @@ function updateTotalNutrition() {
<button id="remove-button" onclick="removeSelectedRow()" disabled>Entfernen</button>
<table id="total-nutrition-table">
<tr>
<th>Lebensmittel</th>
<th>Gewicht (g)</th>
<th>kcal</th>
<th>EW</th>
<th>Fett</th>
@ -219,6 +220,8 @@ function updateTotalNutrition() {
<th>CA</th>
</tr>
<tr>
<t>Gesamtwerte</td>
<td></td>-</td>
<td id="total-kcal">0</td>
<td id="total-ew">0</td>
<td id="total-fett">0</td>

View File

@ -4,6 +4,8 @@
<meta charset="UTF-8">
<title>Neue Lebensmittel hinzufügen</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
<link rel="shortcut icon" href="../static/images/favicon.ico">
<script>
function updateSubmitButtonState() {
const inputs = document.querySelectorAll('#nutrition-form input');
@ -14,35 +16,35 @@
function addNutritionEntry() {
const form = document.getElementById('nutrition-form');
const formData = new FormData(form);
const formData = new FormData(form);
fetch('/add_nutrition', {
method: 'POST',
body: formData
}).then(response => {
// Behandlung der Serverantwort
// Beispielsweise das Formular zurücksetzen
form.reset();
updateSubmitButtonState();
}).catch(error => {
console.error('Fehler:', error);
});
// ... Code, um den Eintrag zur Datenbank hinzuzufügen
fetch('/add_nutrition', {
method: 'POST',
body: formData
}).then(response => {
// Behandlung der Serverantwort
// Beispielsweise das Formular zurücksetzen
form.reset();
updateSubmitButtonState();
}).catch(error => {
console.error('Fehler:', error);
});
// ... Code, um den Eintrag zur Datenbank hinzuzufügen
// Nach dem Hinzufügen, setze alle Eingabefelder zurück
document.querySelectorAll('#nutrition-form input').forEach(input => {
input.value = ''; // Setzt den Wert jedes Eingabefeldes zurück
});
// Nach dem Hinzufügen, setze alle Eingabefelder zurück
document.querySelectorAll('#nutrition-form input').forEach(input => {
input.value = ''; // Setzt den Wert jedes Eingabefeldes zurück
});
// Deaktiviere den "Hinzufügen"-Button wieder
document.getElementById('submit-button').disabled = true;
}
// Deaktiviere den "Hinzufügen"-Button wieder
document.getElementById('submit-button').disabled = true;
}
</script>
</head>
<body>
<nav id="navbar">
<h1>Elos Rezept Rechner</h1>
<h1>Elo's Rezept Rechner</h1>
<ul>
<li><a href="/">Rechner</a></li>
<li><a href="/nutrition" class="active">Neue Lebensmittel</a></li>
@ -62,13 +64,13 @@
<th>CA</th>
</tr>
<tr>
<td><input type="text" name="food" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="kcal" pattern="\d+(\.\d{1,2})?" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="ew" pattern="\d+(\.\d{1,2})?" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="fett" pattern="\d+(\.\d{1,2})?" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="kh" pattern="\d+(\.\d{1,2})?" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="bst" pattern="\d+(\.\d{1,2})?" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="ca" pattern="\d+(\.\d{1,2})?" oninput="updateSubmitButtonState()"></td>
<td><input type="text" name="food" placeholder="Lebensmittel" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="kcal" pattern="\d+([.,]\d{1,2})?" placeholder="g" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="ew" pattern="\d+([.,]\d{1,2})?" placeholder="g" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="fett" pattern="\d+([.,]\d{1,2})?" placeholder="g" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="kh" pattern="\d+([.,]\d{1,2})?" placeholder="g" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="bst" pattern="\d+([.,]\d{1,2})?" placeholder="g" oninput="updateSubmitButtonState()"></td>
<td><input <input type="text" name="ca" pattern="\d+([.,]\d{1,2})?" placeholder="mg" oninput="updateSubmitButtonState()"></td>
</tr>
</table>
<button type="submit" id="submit-button" disabled>Hinzufügen</button>

View File

@ -2,3 +2,5 @@
gunicorn 'Run:app' --bind 0.0.0.0:8080 --log-level=info --workers=4