Release 26.3

Fix:
- NaN-Berechnung bei Monats-/Jahresstunden, wenn im Minuten-Feld die "0"
  gelöscht und das Feld leer gelassen wird (Erstellen & Bearbeiten)
- Datumsfeld lief auf manchen Geräten über den Rand der Eintrags-Karte hinaus

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HvWHvgKgpQ53LNjG6oYpQg
main
Samuel Zielke 3 weeks ago
parent 4f9f357f9c
commit 6a6a1f5962

@ -310,3 +310,16 @@ a:hover {
font-weight: bold; font-weight: bold;
border-radius: 25px 0 0 25px; /* Runde Ecken auf der linken Seite */ 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;
}

@ -327,7 +327,7 @@ NewEntryButton.addEventListener('click', () => {
} }
// Berechnen der Duration (Stunden sind optional -> ohne Eingabe wird 0 gespeichert) // 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 = { const newEntryData = {
date: document.getElementById('datum').value, date: document.getElementById('datum').value,
@ -700,6 +700,10 @@ editsonstigesCheck.addEventListener('change', function() {
document.getElementById('editEntrySubmitButton').addEventListener('click', () => { document.getElementById('editEntrySubmitButton').addEventListener('click', () => {
if (!editallowToSend) {
return
}
var ToEditID = document.getElementById('editEntryID').value var ToEditID = document.getElementById('editEntryID').value
// console.log(`ID: ${ToEditID}, Hours: ${editHours.values}, Minutes: ${editMins.values}`) // console.log(`ID: ${ToEditID}, Hours: ${editHours.values}, Minutes: ${editMins.values}`)
@ -718,7 +722,7 @@ document.getElementById('editEntrySubmitButton').addEventListener('click', () =>
updateEntry(parseInt(ToEditID), 'hours', { updateEntry(parseInt(ToEditID), 'hours', {
date: document.getElementById('editDatum').value, 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, type: type,
status: 1, status: 1,
sondertext: document.getElementById('editsonstigesInput').value, sondertext: document.getElementById('editsonstigesInput').value,
@ -840,16 +844,19 @@ function checkInput() {
allowToSend = true; allowToSend = true;
NewEntryButton.classList.remove('disabled'); NewEntryButton.classList.remove('disabled');
NewEntryButton.classList.replace('btn-light', 'btn-primary'); NewEntryButton.classList.replace('btn-light', 'btn-primary');
NewEntryButton.disabled = false;
} }
} else if (allowToSend) { } else if (allowToSend) {
allowToSend = false; allowToSend = false;
NewEntryButton.classList.add('disabled'); NewEntryButton.classList.add('disabled');
NewEntryButton.classList.replace('btn-primary', 'btn-light'); NewEntryButton.classList.replace('btn-primary', 'btn-light');
NewEntryButton.disabled = true;
} }
} else if (allowToSend) { } else if (allowToSend) {
allowToSend = false; allowToSend = false;
NewEntryButton.classList.add('disabled'); NewEntryButton.classList.add('disabled');
NewEntryButton.classList.replace('btn-primary', 'btn-light'); NewEntryButton.classList.replace('btn-primary', 'btn-light');
NewEntryButton.disabled = true;
} }
} }
@ -880,17 +887,20 @@ function checkEditInput() {
editallowToSend = true; editallowToSend = true;
EditSaveButton.classList.remove('disabled'); EditSaveButton.classList.remove('disabled');
EditSaveButton.classList.replace('btn-light', 'btn-primary'); EditSaveButton.classList.replace('btn-light', 'btn-primary');
EditSaveButton.disabled = false;
} }
} else if (editallowToSend) { } else if (editallowToSend) {
editallowToSend = false; editallowToSend = false;
EditSaveButton.classList.add('disabled'); EditSaveButton.classList.add('disabled');
EditSaveButton.classList.replace('btn-primary', 'btn-light'); EditSaveButton.classList.replace('btn-primary', 'btn-light');
EditSaveButton.disabled = true;
} }
} else if (editallowToSend) { } else if (editallowToSend) {
editallowToSend = false; editallowToSend = false;
EditSaveButton.classList.add('disabled'); EditSaveButton.classList.add('disabled');
EditSaveButton.classList.replace('btn-primary', 'btn-light'); EditSaveButton.classList.replace('btn-primary', 'btn-light');
EditSaveButton.disabled = true;
} }
// Debug ausgabe er Werte // 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}`)
} }

@ -1,22 +1,22 @@
<br> <br>
<div class="text-center"> <div class="text-center">
<h1 style="margin-bottom: 0;">Update <span style="color: rgb(120,170,86);">26.2</span></h1> <h1 style="margin-bottom: 0;">Kurzer Hotfix <span style="color: rgb(120,170,86);">26.3</span></h1>
</div> </div>
<br> <br>
<p> <p>
Hey! 👋 Hey! 👋
<br>Zwei Kleinigkeiten aus euren Rückmeldungen sind jetzt mit drin: <br>Zwei gemeldete Fehler sind jetzt behoben:
</p> </p>
<ul style="padding-left: 1.25rem;"> <ul style="padding-left: 1.25rem;">
<li>🤝 <b>Neu: Partner-Feld</b> – beim Eintragen (und Bearbeiten) kannst du jetzt <li>🧮 <b>Falsche Berechnung</b> – wenn man beim Erstellen/Bearbeiten eines Eintrags
optional festhalten, mit wem du im Dienst warst.</li> die "0" bei den Minuten gelöscht hat, konnten die Monats- und Jahresstunden
<li>✉️ <b>Feedback direkt per E-Mail</b> – unter Einstellungen → Kontakt findest du durcheinandergeraten. Behoben.</li>
jetzt neben der WhatsApp-Community auch eine E-Mail-Adresse für Feedback und <li>📅 <b>Datumsfeld zu breit</b> – das Datumsfeld beim neuen Eintrag lief auf
Fehler.</li> manchen Geräten über den Rand der Karte hinaus. Behoben.</li>
</ul> </ul>
<p> <p>
Wie immer: Danke fürs Mitdenken und Melden! 🙏 Danke fürs Melden! 🙏
<br><b>Gruß Samuel</b> <br><b>Gruß Samuel</b>
</p> </p>
<br> <br>
<input type="text" name="versionnumber" id="versionnumber" class="d-none" value="26.2"> <input type="text" name="versionnumber" id="versionnumber" class="d-none" value="26.3">

@ -21,6 +21,7 @@ urlpatterns = [
path("v260/", views.v260), path("v260/", views.v260),
path("v261/", views.v261), path("v261/", views.v261),
path("v262/", views.v262), path("v262/", views.v262),
path("v263/", views.v263),
path("track/", views.track_usage), path("track/", views.track_usage),
path("dashboard/", views.usage_dashboard), path("dashboard/", views.usage_dashboard),
] ]

@ -21,42 +21,45 @@ def install(request):
return render(request, "app/install.html") return render(request, "app/install.html")
def home(request): def home(request):
return redirect("/app/v262") return redirect("/app/v263")
def login(request): def login(request):
return render(request, "app/login.html") return render(request, "app/login.html")
def v1321(request): def v1321(request):
return redirect("/app/v262") return redirect("/app/v263")
def v1322(request): def v1322(request):
return redirect("/app/v262") return redirect("/app/v263")
def v133(request): def v133(request):
return redirect("/app/v262") return redirect("/app/v263")
def v1332(request): def v1332(request):
return redirect("/app/v262") return redirect("/app/v263")
def v1333(request): def v1333(request):
return redirect("/app/v262") return redirect("/app/v263")
def v1334(request): def v1334(request):
return redirect("/app/v262") return redirect("/app/v263")
def v1335(request): def v1335(request):
return redirect("/app/v262") return redirect("/app/v263")
def v1340(request): def v1340(request):
return redirect("/app/v262") return redirect("/app/v263")
def v260(request): def v260(request):
return redirect("/app/v262") return redirect("/app/v263")
def v261(request): def v261(request):
return redirect("/app/v262") return redirect("/app/v263")
def v262(request): def v262(request):
return redirect("/app/v263")
def v263(request):
return render(request, "app/home.html") return render(request, "app/home.html")

@ -9,7 +9,7 @@ PWA_APP_BACKGROUND_COLOR = '#9FEDD7'
PWA_APP_DISPLAY = 'standalone' PWA_APP_DISPLAY = 'standalone'
PWA_APP_SCOPE = '/' PWA_APP_SCOPE = '/'
PWA_APP_ORIENTATION = 'portrait' PWA_APP_ORIENTATION = 'portrait'
PWA_APP_START_URL = '/app/v262/' PWA_APP_START_URL = '/app/v263/'
PWA_APP_STATUS_BAR_COLOR = 'black-translucent' PWA_APP_STATUS_BAR_COLOR = 'black-translucent'
PWA_SERVICE_WORKER_PATH = os.path.join(BASE_DIR, 'app/static/app/js', 'serviceworker.js') PWA_SERVICE_WORKER_PATH = os.path.join(BASE_DIR, 'app/static/app/js', 'serviceworker.js')
PWA_APP_ICONS = [ PWA_APP_ICONS = [

@ -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 # 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, # (kein Scroll, kein Button erreichbar) bei Bestandsnutzern. Bei jedem Release erhöhen,
# zusammen mit der Versions-URL in app/urls.py / app/views.py. # 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 # Default primary key field type
# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field # https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field

Loading…
Cancel
Save

Powered by TurnKey Linux.