You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Describe the bug
Ein Zeitrahmen mit der Einstellung "Blocked (not overbookable)" kann keine Einschränkung für einen stündlichen Zeitrahmen vornehmen, ohne den gesamten Tag zu blockieren.
To Reproduce
Artikel mit stündlichem Raster einstellen (zb. von 08:00 -> 18:00 Wiederholung Täglich Ohne Enddatum)
Zeitrahmen vom Typ "Geblockt" erstellen der nur ein paar Stunden dieses Tages umfasst. Der Zeitrahmen muss dafür ein Enddatum haben, die Wiederholung ist egal. (zb. von 08:00->10:00 wiederholung täglich start- und Enddatum der gleiche Tag)
Kalender aufrufen -> Gesamter Tag ist geblockt statt nur ein paar Stunden
Workaround
Für kurze Blocker kann auch einfach eine Nutzungseinschränkung erstellt werden. Ansonsten funktioniert das Feature wie erwartet bei Zeitrahmen OHNE Enddatum, wenn das eine Option ist, dann einfach das Enddatum weglassen.
Expected behavior
Es sollten nur die wenigen Stunden blockiert werden (zb. nur von 08:00 - 10:00) und für die Restzeit sollte der Artikel buchbar sein.
Extra
Das gilt wahrscheinlich auch für Holiday Zeitrahmen (nicht getestet).
Analyse
Das Problem scheint in der Day::getEndSlot Methode zu liegen. Diese gibt für den Repair Zeitrahmen aus diesem Beispiel fälschlicherweise einen Endslot von 24 zurück, das heißt dieser umfasst dann den ganzen Tag. Erwartetes Ergebnis wäre 10, der Slot der 10:00 entspricht. Dafür verantwortlich ist folgender Codeblock:
In diesem Codeblock wird aus einem mir unbekannten Grund definiert, dass Zeitrahmen die nicht überbuchbar sind immer bis zum Ende des Tages gültig sind. Dies ergibt nicht sonderlich viel Sinn, da es ja die Einstellung "partially Booked" gibt und die, wenn sie richtig gesetzt ist, auch die Überbuchung über solche "partially booked" Zeitrahmen nicht zulässt.
"Timeframe ends after the current day" ist meiner Meinung nach etwas missverständlich formuliert, das bedeutet nur, dass der Zeitrahmen noch länger geht als Heute, 23:59. Darüber hinaus ist auch diese Codezeile fehlerhaft, wenn man prüfen will ob der letzte Tag des Zeitrahmens erreicht ist muss man den Abgleich mit 23:59:59 machen und nicht nur 23:59
. Wenn das geändert wurde war es auf einmal auch möglich einen Zeitrahmen nur für das heutige Datum zu erstellen ,der auch korrekt nur den halben Tag blockiert. Für Tage in der Zukunft geht das aber immer noch nicht.
Dieser Codeblock erklärt auch, warum der Fehler nicht für unbeschränkte Zeitrahmen gilt, da für diese kein Enddatum abgerufen werden kann , kann auch kein Check durchgeführt werden ob diese am heutigen Tag enden. Es wurde durch einen PR von @chriwen die Verlängerung des Slots auf den ganzen Tag ausgenommen, damit kein Fatal Error beim Prüfen auf das Enddatum entsteht.
Frage
Ohne die ursprüngliche Idee dahinter warum nicht überbuchbare Zeitrahmen IMMER einen ganzen Tag (alle Slots) umfassen sollen komme ich hier nicht weiter.
The text was updated successfully, but these errors were encountered:
Describe the bug
Ein Zeitrahmen mit der Einstellung "Blocked (not overbookable)" kann keine Einschränkung für einen stündlichen Zeitrahmen vornehmen, ohne den gesamten Tag zu blockieren.
To Reproduce
Workaround
Für kurze Blocker kann auch einfach eine Nutzungseinschränkung erstellt werden. Ansonsten funktioniert das Feature wie erwartet bei Zeitrahmen OHNE Enddatum, wenn das eine Option ist, dann einfach das Enddatum weglassen.
Expected behavior
Es sollten nur die wenigen Stunden blockiert werden (zb. nur von 08:00 - 10:00) und für die Restzeit sollte der Artikel buchbar sein.
Extra
Das gilt wahrscheinlich auch für Holiday Zeitrahmen (nicht getestet).
Analyse
Das Problem scheint in der Day::getEndSlot Methode zu liegen. Diese gibt für den Repair Zeitrahmen aus diesem Beispiel fälschlicherweise einen Endslot von 24 zurück, das heißt dieser umfasst dann den ganzen Tag. Erwartetes Ergebnis wäre 10, der Slot der 10:00 entspricht. Dafür verantwortlich ist folgender Codeblock:
https://github.com/wielebenwir/commonsbooking/blob/af6c19a6f075e0652637efe51140feac2ae3f08b/src/Model/Day.php#L266C3-L272C4
In diesem Codeblock wird aus einem mir unbekannten Grund definiert, dass Zeitrahmen die nicht überbuchbar sind immer bis zum Ende des Tages gültig sind. Dies ergibt nicht sonderlich viel Sinn, da es ja die Einstellung "partially Booked" gibt und die, wenn sie richtig gesetzt ist, auch die Überbuchung über solche "partially booked" Zeitrahmen nicht zulässt.
"Timeframe ends after the current day" ist meiner Meinung nach etwas missverständlich formuliert, das bedeutet nur, dass der Zeitrahmen noch länger geht als Heute, 23:59. Darüber hinaus ist auch diese Codezeile fehlerhaft, wenn man prüfen will ob der letzte Tag des Zeitrahmens erreicht ist muss man den Abgleich mit 23:59:59 machen und nicht nur 23:59
strtotime( $this->getFormattedDate( 'd.m.Y 23:59' ) => strtotime( $this->getFormattedDate( 'd.m.Y 23:59:59' )
. Wenn das geändert wurde war es auf einmal auch möglich einen Zeitrahmen nur für das heutige Datum zu erstellen ,der auch korrekt nur den halben Tag blockiert. Für Tage in der Zukunft geht das aber immer noch nicht.
Dieser Codeblock erklärt auch, warum der Fehler nicht für unbeschränkte Zeitrahmen gilt, da für diese kein Enddatum abgerufen werden kann , kann auch kein Check durchgeführt werden ob diese am heutigen Tag enden. Es wurde durch einen PR von @chriwen die Verlängerung des Slots auf den ganzen Tag ausgenommen, damit kein Fatal Error beim Prüfen auf das Enddatum entsteht.
Frage
Ohne die ursprüngliche Idee dahinter warum nicht überbuchbare Zeitrahmen IMMER einen ganzen Tag (alle Slots) umfassen sollen komme ich hier nicht weiter.
The text was updated successfully, but these errors were encountered: