Mobil (hochkant) keine Buchung über Monatsende hinaus möglich
Describe the bug Auf der Buchungsseite eines Artikels im Frontend wird mobil / hochkant nur ein einzelner Monat im Buchungskalender angezeigt. Die Navigation zu Monaten in der Zukunft funktioniert ohne Probleme. Allerdings ist es hier nicht möglich, eine Buchung über eine Monatsgrenze hinweg anzulegen. Die Selektion des Enddatums schlägt jedes Mal fehl - es wird kein Buchungszeitraum festgelegt. Als Nutzer hat man so nur die Möglichkeit den Artikel für einen Zeitraum innerhalb eines Monats zu buchen oder auf die Zwei-Monatsansicht zu wechseln durch Drehen des Smartphones.
To Reproduce
- Artikel anlegen
- Zeitrahmen dafür anlegen mit Option "Ganzer Tag" und Auswahl buchbarer Tage (bei uns Mo und Do)
- Als Anwender mit Smartphone (hochkant gehalten) versuchen, den Artikel zu buchen für einen Zeitraum, der sich über ein Monatsende hinweg erstreckt
Expected behavior Jeder durch den Zeitrahmen mögliche Buchungszeitraum sollte sich auf jedem Device buchen lassen.
Workaround Wir haben nun aktuell als Workaround die Lightpicker-Konfiguration so angepasst, dass mobil / hochkant auch immer zwei Monate angezeigt werden. Aus Usability-Sicht sehe ich hier ehrlich gesagt auch keine Probleme. Im Allgemeinen muss man mobil auf einer Artikelseite sowieso immer scrollen.
numberOfMonths haben wir hierfür an einer Stelle in public.js bzw. public.min.js auf 2 gesetzt.
Ich konnte diesen Fehler leider auf mehreren Webseiten mit der aktuellen CommonsBooking Version (2.7.2) nicht reproduzieren (weder auf einem echten noch auf einem simulierten Gerät). Kannst du bitte nochmal einen Link zu einer Installation schicken, in der das Problem konkret auftritt? Auf der Leihbar Seite scheint es auch zu funktionieren
@hansmorb auf der Leihbar-Seite habe ich oben genannten Workaround eingebaut - dort sollten immer zwei Monate im Kalender sichtbar sein und das Problem nicht auftreten.
Damit Du es nachvollziehen kannst, binden wir nun auf einer Artikel-Seite die nicht-minifizierte und von uns nicht angepasste public.js ein. Dort sollte es für Dich nachvollziehbar sein.
Screenshot

Hier kann ich es nachvollziehen, das ist aber auch die einzige Seite. Bei dieser URL ( https://leihbarbonn.de/dinge/spanngurt-5m-2/ ) zum Beispiel kann ich z.B. problemlos den Zeitraum vom 29.08. bis 03.10. auswählen . 
Auch auf allen anderen getesten Installationen tritt der Fehler nicht auf, ich bin gerade etwas ratlos wie ich das reproduzieren soll.
@hansmorb ich versuche es noch mal genauer zu erklären.
Auf unserer Seite ist aktuell tatsächlich nur die in meinem zweiten Post genannte Seite betroffen, da ich diese Seite extra für Dich präpariert habe, damit Du das Problem nachvollziehen kannst.
Dort wird die unveränderte public.js eingebunden. Das ist daran zu erkennen, dass dort mobil und hochkant im Kalender nur ein Monat dargestellt wird (s. mein Screenshot). Da wir sehr viele Beschwerden bekommen haben, dass Artikel nicht über Monatsgrenzen hinweg buchbar sind, haben wir nun grundsätzlich auf unserer Seite - also bei allen anderen Artikeln - eine angepasste public.js eingebunden, so dass im Buchungskalender immer zwei Monate dargestellt werden (s. Dein Screenshot). Das ist für uns allerdings nur eine Notlösung, da ich den Fix nach jedem Update von CommonsBooking neu anwenden müsste.
Vielleicht kannst Du es noch mal mit folgender Anleitung versuchen auf einer Deiner Installationen nachzuvollziehen.
To Reproduce
- Artikel anlegen
- Zeitrahmen dafür anlegen:
- Option "Ganzer Tag"
- Zeitrahmenwiederholung "wöchentlich"
- Wochentage "Montag" und "Donnerstag"
- im zugehörigen Standort: Überbuchen geblockter Tage erlauben "aktivieren"
- Als Anwender auf dem Smartphone (hochkant gehalten) dann versuchen den Artikel für den Zeitraum 29. August bis 1. September 2022 zu buchen.
Wichtig ist hier meiner Ansicht nach, dass der letzte Tag im ersten betroffenen Monat selber nicht buchbar ist, sondern überbucht werden muss. Im Frontend wird das Enddatum für die Buchung dann nicht übernommen. Im Kalender wird zwar der Zeitraum richtig farblich hinterlegt dargestellt, aber in der Textzusammenfassung darunter ändert sich bei "Rückgabe" nichts und der Button für die Buchungsprüfung bleibt deaktiviert (s. mein Screenshot).
Analyse
Am Ende von Zeile 1050 in public.js wird versucht, das gewählte Startdatum in this.options.days zu finden. Im genannten Szenario ist aus dem Vormonat aber anscheinend nur der letzte Tag in dem Objekt enthalten. d bleibt also undefined und der Zugriff auf d.lastSlotBooked in der folgenden Zeile führt zum Fehler.
@danielappelt Vielen Dank für den Hinweis. Ich konnte zwar z.B. bei kasimir-lastenrad.de auch gerade problemlos auf dem Smartphone hochkant eine Buchung von 30.08 - 01.09. auswählen (auch bei anzeige von nur einem Monat). Aber von mir aus könnten wir die Anzahl der Monate bei mobile gerne auf 2 hochsetzen. Sehe da auch kein zu großes Problem. @hansmorb Was meinst du?
In #1753 aufgegangen