• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP - laravel rezerwacji. Wyszukiwanie wolnych godzin

VPS Starter Arubacloud
0 głosów
277 wizyt
pytanie zadane 6 października 2022 w PHP przez mikey Użytkownik (820 p.)

Cześć,
muszę stworzyć wyszukiwanie dostępnych godzina na rezerwacje w danym dniu.
Muszę tutaj rozwiązać kilka kwestii

  1. Terminy nie mogą nachodzić na już zarezerwowane.
  2. Admin może definiować wolne godziny
  3. Użytkownik może tymczasowo zarezerwować godzinę usługi

Dostępne godziny w całym dniu to np 10:00 11:00 12:00 13:00 ... do 18 co godzinę

//tak wygląda zwracana tablica godzin
$hours = [
  0 => "12:00"
  1 => "13:00"
  2 => "14:00"
  3 => "15:00"
  4 => "16:00"
  5 => "17:00"
  6 => "18:00"
]

myślę że to jest oczywiste o co chodzi ale napiszę przykład
admin definiuje wolne godziny 15-16

i są już dwie rezerwacji na 13 - trwa 1:10 min
i na 17 - trwa 50 min

i teraz ktoś chce zarezerwować kolejną rezerwację która również będzie trwała 1:10 min. Realnie dostępne godziny dla takiej rezerwacji
to 15
ponieważ na 12 nie zdąży do 13
na 13 już jest i ona zajmuje czas do 14:10 więc do 15 nie zdąży
na 16 też nie może ponieważ nie zdąży do 17 może tylko na 15 ponieważ o 15 kończy mu się "przerwa" a następna rezerwacja jest dopiero o 17. Rezerwując na 15 skończy o 16:10

Dodam tylko że czas rezerwacji jest znany z góry. Tzn klient wybiera usługę, jakieś dodatki i wiadomo ile będzie to trwało. Czas trwania jest w minutach dla łatwości.

Wskazówki, kroki itd mile widziane ponieważ trochę się z tym zaplątałem

2 odpowiedzi

+2 głosów
odpowiedź 6 października 2022 przez AnimaVillis Stary wyjadacz (11,190 p.)
Wypluj sobie tablicę z usługami, później tablicę z godzinami rezerwacji, następnie od godziny którą zarezerwuje klient przesuwaj kolejne rezerwacje i wtedy nic Ci nie będzie nachodziło na siebie.
komentarz 6 października 2022 przez mikey Użytkownik (820 p.)
przeniesione 6 października 2022 przez Arkadiusz Waluk

Mam tablicę 

$allHours = [];

w której są wszystkie godziny w danym dniu czyli powiedzmy od 10 do 16 co godzina 10:00 11:00 12:00

Drugą tablicę gdzie mam wszystkie godziny 

i drugą tablicę z zajętymi godzinami czyli np ["10:00", "11:00", "15:00", "16:00"] i w niej są wszystkie godziny zajęte czyli np 10:00-11:00 - przerwa 15:00-16:00 - rezerwacja i robię coś takiego że usuwam te godziny z tablicy $allHours - tak w dużym uproszczeniu. Wtedy teoretycznie zostają tylko wolne godziny. Jednak to rozwiązanie nie sprawdza wszystkiego ponieważ jeśli rezerwacja trwa 1h 10 min to system nie powinien pokazać godziny 14 tylko 13 ponieważ o 14 nie zdąży do 15.

Natomiast trochę nie rozumiem

"

następnie od godziny którą zarezerwuje klient przesuwaj kolejne rezerwacje i wtedy nic Ci nie będzie nachodziło na siebie.

"

jakbyś mógł bardziej wytłumaczyć będę wdzięczny

komentarz 6 października 2022 przez AnimaVillis Stary wyjadacz (11,190 p.)
Okej inaczej.

Robisz sobie przykładowo tak: masz od 13-14. czyli 60 minut. Zakładając, że salon jest czynny od 10 do 18 to masz 8 godzin.

Czyli: 8 * 60 = 480 minut. Skoro pierwsza usługa o 10 trwa 70 minut czyli do 11:10 to robisz kolejny wolny czas rezerwacji właśnie od tej godziny nie od pełnej. Nie przeskoczysz czasu, który masz dostępny na rezerwację.
komentarz 6 października 2022 przez mikey Użytkownik (820 p.)
Ok, ale jest jeszcze jedna kwestia.

jeśli jedna rezerwacja jest na 11 i trwa do 12 a kolejna jest na 13 to jeśli rezerwuje usługę na 1h 10min 12 nie jest dostępna natomiast jeśli rezerwują n 45 min to już 12 jest dostępna. Czy to wtedy przejdzie? Możesz jakiś przykładowy fragment kodu podesłać?
komentarz 6 października 2022 przez AnimaVillis Stary wyjadacz (11,190 p.)
To odejmij sobie od zarezerwowanego 30 sekund i już będziesz miał dostępne, różnicy to nie zrobi a zamysł zostanie.

Najszybciej jutro niestety
0 głosów
odpowiedź 6 października 2022 przez Ehlert Ekspert (212,630 p.)

Po pierwsze polecam rozpatrywać takie problemy w oderwaniu od frameworka - nie ma on nic do rzeczy.

Myślę że wolne terminy możesz wyciągać stricte na poziomie query do bazy, operując też na tym co zdefiniował admin.

Pamietaj o dodaniu lock'a na rekordzie w ramach którego dana rezerwacja będzie mieć miejsce - w przeciwnym wypadku jak polecą dwa requesty, to będziesz mieć dwie osoby, na tą samą godzinę. wink

Jak nie chcesz pesimistic locków to możesz zrobić rezerwacje tymczasowe, tak jak to jest w przypadku systemów biletowych.

komentarz 7 października 2022 przez mikey Użytkownik (820 p.)
Mam właśnie dodane rezerwacje tymczasowe. Możesz coś więcej jak wyciągnąć to zwykłym query?

Podobne pytania

+1 głos
0 odpowiedzi 145 wizyt
pytanie zadane 28 lipca 2022 w PHP przez mi-20 Stary wyjadacz (13,190 p.)
+1 głos
1 odpowiedź 149 wizyt
0 głosów
1 odpowiedź 240 wizyt
pytanie zadane 26 października 2020 w PHP przez niezalogowany

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...