Generare slot-uri de timp

Salut,

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?

Eu cred ca este posibil, ce probleme ai intampinat sau ce te retine?

2 Likes

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.

Rezolva pas cu pas.

  1. Decide in ce structura ai nevoie de informatia respectiva.
  2. Creeaza structura respectiva cu date statice.
  3. Foloseste structura asa cum ai nevoie.
  4. Transforma printr-un algoritm (poate ajuta niste pseudocod inainte) structura de date statice in date dinamice.
1 Like

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…

poate pentru ca pui caruta inaintea cailor.
mie nu imi e clar (si am impresia ca nici tie) cum trebuie sa se comporte aplicatia.
adica:

  • ai nevoie de restrictii pentru a asigura incarcarea optima a sloturilor de timp?
  • poti rezerva orice slot, chiar daca asta inseamna ca nu mai ramane loc pentru o rezervare mare?
  • etc
    sau ai nevoie doar sa cauti in baza de date daca exista slot disponibil pentru rezervarea ta, indiferent de orice restrictii / reguli?

daca tot ce ai nevoie e sa cauti loc liber in baza de date… conteaza foarte tare cum ai modelat date in db.

  • ai predefinit niste sloturi libere pe care apoi le marchezi ca ocupate?
  • salvezi doar niste intervale ocupate?
  • etc?

in functie de cele de mai sus… raspunsul ar trebui sa devina mai clar.

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.

<?php

    $booking_start_time          = '08:00';
    $booking_end_time            = '12:00';
    $booking_frequency           = 30;   		

    $array_booking = array(
        array(
            'start' => '8:00',
            'end' => '8:30'
        ),
        array(
            'start' => '9:00',
            'end' => '9:30'
        ),
        array(
            'start' => '8:40',
            'end' => '8:45'
        )
    );

    usort($array_booking, function($a, $b) {
        return $a['start'] - $b['start'];
    });

    echo '<pre>'; print_r($array_booking); echo '</pre>';

?>

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.

unui user nou - o intalnire de 30 de minute
unui user existent - toate intalnirile de 5 minute ( 9:05-9:10, 9:10-9:15,…,9:35-9:40 )

Ma poate ajuta cineva cu un algoritm? Sau sa imi zica cum sa fac asta pas cu pas?

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.

Iti raspund pe privat