From 6a6a1f596209645e27fdf85fb8ed2563bb0eb3d2 Mon Sep 17 00:00:00 2001 From: Samuel Zielke Date: Sat, 3 Oct 2026 20:34:31 +0200 Subject: [PATCH] =?UTF-8?q?Release=2026.3=20Fix:=20-=20NaN-Berechnung=20be?= =?UTF-8?q?i=20Monats-/Jahresstunden,=20wenn=20im=20Minuten-Feld=20die=20"?= =?UTF-8?q?0"=20=20=20gel=C3=B6scht=20und=20das=20Feld=20leer=20gelassen?= =?UTF-8?q?=20wird=20(Erstellen=20&=20Bearbeiten)=20-=20Datumsfeld=20lief?= =?UTF-8?q?=20auf=20manchen=20Ger=C3=A4ten=20=C3=BCber=20den=20Rand=20der?= =?UTF-8?q?=20Eintrags-Karte=20hinaus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01HvWHvgKgpQ53LNjG6oYpQg --- app/static/app/css/custom.css | 13 +++++++++++++ app/static/app/js/home01.js | 16 +++++++++++++--- app/templates/app/updateinfo.html | 18 +++++++++--------- app/urls.py | 1 + app/views.py | 25 ++++++++++++++----------- piomint/pwa_settings.py | 2 +- piomint/settings.py | 2 +- 7 files changed, 52 insertions(+), 25 deletions(-) diff --git a/app/static/app/css/custom.css b/app/static/app/css/custom.css index b438b90..f2b6c65 100644 --- a/app/static/app/css/custom.css +++ b/app/static/app/css/custom.css @@ -309,4 +309,17 @@ a:hover { line-height: 30px; font-weight: bold; border-radius: 25px 0 0 25px; /* Runde Ecken auf der linken Seite */ +} + +/* Datumsfeld (Neuer Eintrag / Bearbeiten): Safari/iOS ignoriert bei input[type=date] + die gesetzte width:100% und rendert das Feld in seiner nativen Breite, wodurch es + über den Rand der Modal-Karte hinausläuft. -webkit-appearance: none nimmt dem + Feld die native Breitenberechnung und lässt es sich wie ein normales .form-control + verhalten. */ +input[type="date"].form-control { + width: 100%; + max-width: 100%; + box-sizing: border-box; + -webkit-appearance: none; + appearance: none; } \ No newline at end of file diff --git a/app/static/app/js/home01.js b/app/static/app/js/home01.js index fe6bcbe..4898668 100644 --- a/app/static/app/js/home01.js +++ b/app/static/app/js/home01.js @@ -327,7 +327,7 @@ NewEntryButton.addEventListener('click', () => { } // Berechnen der Duration (Stunden sind optional -> ohne Eingabe wird 0 gespeichert) - const duration = ((parseInt(hours.value) || 0)*60) + parseInt(mins.value) + const duration = ((parseInt(hours.value) || 0)*60) + (parseInt(mins.value) || 0) const newEntryData = { date: document.getElementById('datum').value, @@ -700,6 +700,10 @@ editsonstigesCheck.addEventListener('change', function() { document.getElementById('editEntrySubmitButton').addEventListener('click', () => { + if (!editallowToSend) { + return + } + var ToEditID = document.getElementById('editEntryID').value // console.log(`ID: ${ToEditID}, Hours: ${editHours.values}, Minutes: ${editMins.values}`) @@ -718,7 +722,7 @@ document.getElementById('editEntrySubmitButton').addEventListener('click', () => updateEntry(parseInt(ToEditID), 'hours', { date: document.getElementById('editDatum').value, - duration: ((parseInt(edithours.value) || 0)*60) + parseInt(editMins.value), + duration: ((parseInt(edithours.value) || 0)*60) + (parseInt(editMins.value) || 0), type: type, status: 1, sondertext: document.getElementById('editsonstigesInput').value, @@ -840,16 +844,19 @@ function checkInput() { allowToSend = true; NewEntryButton.classList.remove('disabled'); NewEntryButton.classList.replace('btn-light', 'btn-primary'); + NewEntryButton.disabled = false; } } else if (allowToSend) { allowToSend = false; NewEntryButton.classList.add('disabled'); NewEntryButton.classList.replace('btn-primary', 'btn-light'); + NewEntryButton.disabled = true; } } else if (allowToSend) { allowToSend = false; NewEntryButton.classList.add('disabled'); NewEntryButton.classList.replace('btn-primary', 'btn-light'); + NewEntryButton.disabled = true; } } @@ -880,17 +887,20 @@ function checkEditInput() { editallowToSend = true; EditSaveButton.classList.remove('disabled'); EditSaveButton.classList.replace('btn-light', 'btn-primary'); + EditSaveButton.disabled = false; } } else if (editallowToSend) { editallowToSend = false; EditSaveButton.classList.add('disabled'); EditSaveButton.classList.replace('btn-primary', 'btn-light'); + EditSaveButton.disabled = true; } } else if (editallowToSend) { editallowToSend = false; EditSaveButton.classList.add('disabled'); EditSaveButton.classList.replace('btn-primary', 'btn-light'); + EditSaveButton.disabled = true; } // Debug ausgabe er Werte - console.log(`Status: ${editallowToSend} - Check: ${editsonstigesCheck.checked} - Input: ${editsonstigesInput.value} - Stunden: ${edithours.value} - Min: ${editMinuten.value}`) + console.log(`Status: ${editallowToSend} - Check: ${editsonstigesCheck.checked} - Input: ${editsonstigesInput.value} - Stunden: ${edithours.value} - Min: ${editMins.value}`) } diff --git a/app/templates/app/updateinfo.html b/app/templates/app/updateinfo.html index 8d318ff..1679c1d 100644 --- a/app/templates/app/updateinfo.html +++ b/app/templates/app/updateinfo.html @@ -1,22 +1,22 @@
-

Update 26.2

+

Kurzer Hotfix 26.3


Hey! 👋 -
Zwei Kleinigkeiten aus euren Rückmeldungen sind jetzt mit drin: +
Zwei gemeldete Fehler sind jetzt behoben:

- Wie immer: Danke fürs Mitdenken und Melden! 🙏 + Danke fürs Melden! 🙏
Gruß Samuel


- + diff --git a/app/urls.py b/app/urls.py index b07b48e..4e2b981 100644 --- a/app/urls.py +++ b/app/urls.py @@ -21,6 +21,7 @@ urlpatterns = [ path("v260/", views.v260), path("v261/", views.v261), path("v262/", views.v262), + path("v263/", views.v263), path("track/", views.track_usage), path("dashboard/", views.usage_dashboard), ] diff --git a/app/views.py b/app/views.py index ca827c2..324ae9f 100644 --- a/app/views.py +++ b/app/views.py @@ -21,42 +21,45 @@ def install(request): return render(request, "app/install.html") def home(request): - return redirect("/app/v262") + return redirect("/app/v263") def login(request): return render(request, "app/login.html") def v1321(request): - return redirect("/app/v262") + return redirect("/app/v263") def v1322(request): - return redirect("/app/v262") + return redirect("/app/v263") def v133(request): - return redirect("/app/v262") + return redirect("/app/v263") def v1332(request): - return redirect("/app/v262") + return redirect("/app/v263") def v1333(request): - return redirect("/app/v262") + return redirect("/app/v263") def v1334(request): - return redirect("/app/v262") + return redirect("/app/v263") def v1335(request): - return redirect("/app/v262") + return redirect("/app/v263") def v1340(request): - return redirect("/app/v262") + return redirect("/app/v263") def v260(request): - return redirect("/app/v262") + return redirect("/app/v263") def v261(request): - return redirect("/app/v262") + return redirect("/app/v263") def v262(request): + return redirect("/app/v263") + +def v263(request): return render(request, "app/home.html") diff --git a/piomint/pwa_settings.py b/piomint/pwa_settings.py index 743b507..0d6ab4e 100644 --- a/piomint/pwa_settings.py +++ b/piomint/pwa_settings.py @@ -9,7 +9,7 @@ PWA_APP_BACKGROUND_COLOR = '#9FEDD7' PWA_APP_DISPLAY = 'standalone' PWA_APP_SCOPE = '/' PWA_APP_ORIENTATION = 'portrait' -PWA_APP_START_URL = '/app/v262/' +PWA_APP_START_URL = '/app/v263/' PWA_APP_STATUS_BAR_COLOR = 'black-translucent' PWA_SERVICE_WORKER_PATH = os.path.join(BASE_DIR, 'app/static/app/js', 'serviceworker.js') PWA_APP_ICONS = [ diff --git a/piomint/settings.py b/piomint/settings.py index 22926b6..c558127 100644 --- a/piomint/settings.py +++ b/piomint/settings.py @@ -161,7 +161,7 @@ STATIC_ROOT = '/var/www/piomint/static/' # Directory to collect static files. # während schon neues HTML ausgeliefert wird - das führte u.a. zu eingefrorenen Screens # (kein Scroll, kein Button erreichbar) bei Bestandsnutzern. Bei jedem Release erhöhen, # zusammen mit der Versions-URL in app/urls.py / app/views.py. -STATIC_VERSION = '26.2' +STATIC_VERSION = '26.3' # Default primary key field type # https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field