• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
537 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 (12,630 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 (12,630 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 (12,630 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 (214,530 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 175 wizyt
pytanie zadane 28 lipca 2022 w PHP przez mi-20 Stary wyjadacz (13,250 p.)
+1 głos
1 odpowiedź 177 wizyt
0 głosów
1 odpowiedź 337 wizyt
pytanie zadane 26 października 2020 w PHP przez niezalogowany

93,174 zapytań

142,185 odpowiedzi

321,971 komentarzy

62,503 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1157p. - dia-Chann
  2. 1139p. - Łukasz Piwowar
  3. 1131p. - CC PL
  4. 1126p. - Łukasz Eckert
  5. 1118p. - Tomasz Bielak
  6. 1104p. - Michal Drewniak
  7. 1083p. - Marcin Putra
  8. 1078p. - rucin93
  9. 1071p. - rafalszastok
  10. 1054p. - Adrian Wieprzkowicz
  11. 1047p. - Piotr Aleksandrowicz
  12. 1037p. - Michał Telesz
  13. 1023p. - Mariusz Fornal
  14. 1017p. - Mikbac
  15. 1005p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...