Am o aplicatie de booking pe care o dezvolt cu laravel. Pagina pt booking contine casutele pt nume, prenume, telefon, adresa si un datepicker. In momentul in care utilizatorul alege o data, ii apar niste intervale de timp din 30 in 30 de minute ( 8:00, 8:30, etc… ). Problema este ca utilizatorii existenti au intalniri de 5 minute ( ii programeaza adminul si nu mai trebuie sa completeze formularul ) iar utilizatorii noi au intalniri de 30 minute. Am setat un program diferit pentru fiecare zi a saptamanii, asadar cu ajax afisez ceea ce se salveaza in baza de date.
Dau un exemplu:
marti 16 oct 2018 am setat programul de la 8:00 la 9:30. Intervalele de timp ocupate sunt 8:00-8:05 ( client existent ), 8:05-8:35 ( client nou ), 8:35-9:05 ( client nou ) - mai raman 25 de minute libere pe care doar adminul le poate folosi fiindca seteaza intalnirile de 5 min pt utilizatorii existenti.
Este posibil sa generez pt pagina utilizatorului intervalele de timp de 30min unde imi permite perioadele de timp? Iar pentru pagina de admin intervalele de timp de 5 min unde se poate?
Nu ii dau de capat… Sa explic putin cum am lucrat pana acum.
Am creat un tabel in baza de date pentru programari. Salvez ora si durata ( utilizatorul nou are durata de 30 de minute si cel existent 5 min ). Cu ajax preiau datele salvate in baza de date.
Am programul setat de la 8:00 la 10:00 si urmatoarele progamari:
8:00-8:30, 8:30-8:35, 9:05-9:10, 9:10-9:40
Asadar raman libere urmatoarele intervale de timp:
8:35-9:05 ( aici intra o programare de 30 de min sau 6 de 5 minute )
9:40-10:00 ( aici intra doar 4 programari de 5 minute )
Cum fac asta? Imi trebuie in javascript / jquery solutia. Cred ca ar merge si cu php si sa returnez un json catre ajax.
Am nevoie de un exemplu de algoritm. Nu imi dau seama cum sa verific in intervalul 8:00 - 10:00 slot-urile de timp ramase.
Dau alt exemplu:
program de la 8:00 la 10:00. programari: 8:00-8:05 (5minute), 8:35-9:05 (30minute). In intervalul 8:05-8:35 intra o programare de 30 min sau 6 de 5 minute. Cum fac ca in intervalul de timp setat sa imi gaseasca sloturile libere de 5 si 30 de minute?
Daca ai programarile deja ordonate in baza de date, atunci faci diferenta de timp intre fiecare 2 programari (timp_start_programare2 - timp_end_programare1) si afli cate minute ai libere intre cele 2. Si de-aici afisezi fie X programari de 30 minute, fie Y programari de 5 minute.
35 minute impartit la 30 = 1 programare de 30 + (rest 5 minute : 5 = 1 programare de 5 minute)
10 : 30 = 0 programari de 30 minute + (rest 10 minute : 5 = 2 programari de 5 minute)
Sau poate n-am inteles eu foarte bine problema ta…
Voi incerca sa explic cat mai bine cum functioneaza aplicatia. Am un formular cu date picker si un dropdown. Utilizatorul alege din dropdown daca este client nou( programarea are 30 de minute ) sau existent ( programarea are 5 minute ). Apoi alege data. In functie de ce a ales in dropdown, ii va aparea slot-urile de timp libere ( client nou: din 30 in 30 minute, client existent: din 5 in 5 minute ). Daca in intervalul de timp 8:00-10:00 mai sunt cateva sloturi de timp aleatorii de 5 minute, aceste sloturi vor fi afisate doar pt clientii existenti. Programarile de 30 si 5 minute nu trebuie sa se suprapuna.
Am dat codul de mai sus. Cum obtin un array cu slot-urile de timp disponibile de 30minute fara sa se suprapuna cu cele definite in array-ul $array_booking?
raspunsul depinde in esenta de cum sunt modelate datele (inteleg ca ai nevoie de o solutie tehnica).
pentru asta e nevoie de cateva detalii suplimentare.
oricum, inca nu imi e clara urmatoare situatie:
am liber de la 9:05 pana la 9:40.
ce ii afisezi unui user nou?
a. nimic, pentru ca slotul nu incepe de la fix sau de la si jumatate
b. optiune de la 9:05 pentru ca e primul liber
c. optiuni de la 9:05 si de la 9:10 pentru ca desi sunt exclusive, sunt totusi posibile.
ce nu e ok in ce ti-am explicat eu? mi se pare ca ar functiona pentru ce ai tu nevoie
daca e client nou, faci diferente de timp si vezi daca da o diferenta de cel putin 30 minute
daca e client vechi, vezi daca diferenta e de 5 minute.