Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zakazivanje termina

[es] :: PHP :: Zakazivanje termina

[ Pregleda: 2845 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

danield
Daniel Dulic
Web developer, CitySu team
Subotica

Član broj: 101580
Poruke: 113
*.mts.telekom.rs.

ICQ: 443682699
Sajt: www.citysuteam.com


Profil

icon Zakazivanje termina12.11.2013. u 14:19 - pre 127 meseci
Postovani,

Potrebno mi je samo da postavim ispravne uslove ukoliko je neki termin popunjen.

Imam radno vreme i usluge koje mogu da traju jednokratno ili dvokratno (trajanje usluge, trajanje pauze - za vreme pauze moze da se ubaci druga usluga ukoliko je njeno trajanje isto ili krace kao vreme pauze i imam vreme nastavka trajanja usluge).
Radno vreme izlistavam kroz while petlju. Sve sam uspeo napraviti, osim ovih uslova.

Da li je neko imao iskustva sa time?

Ja sam zakomplikovao jako, ali imam osecaj da to sve moze mnogo jednostavnije.

Unapred hvala!

--

With The Best Regards,

Daniel Dulić, Web System Development
http://www.citysuteam.com
Telefon: +381 (0) 64 / 364 - 65 - 91
E-Mail: [email protected]
CitySu team, Web Services Company
Antona Aškerca 44/50,
24000 Subotica
CitySu team
 
Odgovor na temu

deZio
Inđija

Član broj: 150608
Poruke: 345
*.dynamic.isp.telekom.rs.



+38 Profil

icon Re: Zakazivanje termina12.11.2013. u 14:33 - pre 127 meseci
Nije mi jasno kako možeš ubaciti neku uslugu za vreme pauze? Zar pauza nije pauza, tj. ne radi se u toku pauze? :D

Da li imaš već definisane mysql tabele ili na koji način sačuvavaš podatke?
 
Odgovor na temu

danield
Daniel Dulic
Web developer, CitySu team
Subotica

Član broj: 101580
Poruke: 113
*.dynamic.isp.telekom.rs.

ICQ: 443682699
Sajt: www.citysuteam.com


Profil

icon Re: Zakazivanje termina12.11.2013. u 14:41 - pre 127 meseci
U pitanju je frizerski salon, npr satiranje rade pola sata, onda pola sata stoji farba ili ne znam ni ja sta, a dok stoji farba on moze drugoga da radi i posle pola sata nastavlja sa istim.

Imam, evo kod, ali ne znam koliko ce biti jasan:

Code:
<?php 
                        $usluznik=$_POST['usluznik'];
                        $datum=$_POST['datum'];
                        $imeiprezime=$_POST['imeiprezime'];
                        $telefon=$_POST['telefon'];
                         $sql="SELECT a.*, b.*, c.* FROM `cenovnik` AS a 
                INNER JOIN `usluge` AS b ON a.`idUsluge`=b.`idUsluge`
                INNER JOIN `usluznik` AS c ON a.`idUsluznika`=c.`idUsluznika` WHERE a.`idUsluge`='".$idUsluge."' AND a.`idUsluznika`='".$usluznik."'";
                $query=mysql_query($sql);
                $num=mysql_num_rows($query);
                $row=mysql_fetch_array($query);
                    $datumAr=explode("-",$datum);
                    $dan=$datumAr[2];
                    $mesec=$datumAr[1];
                    $godina=$datumAr[0];
                    $ukupnoTrajanje=$row['trajanjeUsluge']+$row['trajanjePauze']+$row['trajanjeNastavka'];
                        ?>
<form action="<?php echo $_SERVER['SCRIPT_URI']."?korak=3&idUsluge=".$idUsluge; ?>" method="post" enctype="multipart/form-data" name="zakazivanje3" id="zakazivanje3">
<?php 
    $tempDate = $godina."-".$mesec."-".$dan;
    $danUNedelji=date('N', strtotime( $tempDate));
    switch($danUNedelji){
        case 1:
            $danUnedeljiPrevedeno="ponedeljak";
            $danUnedeljiPrevedeno2="ponedeljom";
        break;
        case 2:
            $danUnedeljiPrevedeno="utorak";
            $danUnedeljiPrevedeno2="utorkom";
        break;
        case 3:
            $danUnedeljiPrevedeno="sreda";
            $danUnedeljiPrevedeno2="sredom";
        break;
        case 4:
            $danUnedeljiPrevedeno="četvrtak";
            $danUnedeljiPrevedeno2="četvrtkom";
        break;
        case 5:
            $danUnedeljiPrevedeno="petak";
            $danUnedeljiPrevedeno2="petkom";
        break;
        case 6:
            $danUnedeljiPrevedeno="subota";
            $danUnedeljiPrevedeno2="subotom";
        break;
        }
    echo "<p>Izabrali ste <strong>".$row['nazivUsluge']."</strong> kod <strong>".$row['imeUsluznika']." ".$row['prezimeUsluznika']."</strong> čiji je telefon <strong>".$row['telefonUsluznika']."</strong>, a cena usluge je <strong>".$row['cena']." dinara</strong>. Ukoliko želite da promenite neki od parametara, idite <a href=\"javascript:history.back();\">korak nazad</a>. Molimo izaberite željeno vreme kada želite da iskoristite uslugu dana <strong>".$dan.".".$mesec.".".$godina.".</strong> (".$danUnedeljiPrevedeno."). Usluga traje <strong>".$ukupnoTrajanje." minuta</strong>.</p>";
?>
<h3>Izaberite radno vreme</h3>
<p><?php echo $row['imeUsluznika']." ".$row['prezimeUsluznika']." ".$danUnedeljiPrevedeno2;?> radi:
<?php $sqlRadnoVreme="SELECT a.*, b.* FROM `radnoVreme` AS a 
                INNER JOIN `rasponiRadnogVremena` AS b ON a.`idrasponaRadnogVremena`=b.`idrasponaRadnogVremena`
                WHERE a.`idUsluznika`='".$row['idUsluznika']."' AND a.`danUnedelji`='".$danUNedelji."'";
                $queryRadnoVreme=mysql_query($sqlRadnoVreme);
                $rowRadnoVreme=mysql_fetch_array($queryRadnoVreme);
                    echo " <strong>".$rowRadnoVreme['nazivrasponaRadnogVremena']."</strong> od <strong>".sprintf("%02d",$rowRadnoVreme['pocetniRasponSat']).":".sprintf("%02d",$rowRadnoVreme['pocetniRasponMin'])."h</strong> do <strong>".sprintf("%02d",$rowRadnoVreme['krajnjiRasponSat']).":".sprintf("%02d",$rowRadnoVreme['krajnjiRasponMin'])."h</strong>.";?>
</p><?php 
                $sat=$rowRadnoVreme['pocetniRasponSat'];
                $ukupnoRadnoVreme=($rowRadnoVreme['krajnjiRasponSat']*60+$rowRadnoVreme['krajnjiRasponMin'])-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']);
                if($ukupnoTrajanje>59){
                    $satTrajanja=1;
                    $minutTrajanja=$ukupnoTrajanje-60;
                    }
                    while($sat<$rowRadnoVreme['krajnjiRasponSat']){
                        $min=0;
                        while($min<60){
                            $prethodnoRadnoVreme=($sat*60+$min)-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']);
                
                //provera da li je zauzeto
                $sqlProveri="SELECT a.*, b.* FROM `zakazivanje` AS a
                INNER JOIN `usluge` AS b ON a.`idUsluge`=b.`idUsluge`
                 WHERE a.`datum`='".$datum."' AND a.`usluznik`='".$usluznik."'";
                $queryProveri=mysql_query($sqlProveri);
                $numProveri=mysql_num_rows($queryProveri);
                //provera da li je zauzeto
                            if(($ukupnoRadnoVreme-$prethodnoRadnoVreme-$ukupnoTrajanje)>=0){
                                if($numProveri==0){$prikazi=1;}
                                if($numProveri>0){
                                    $prikazi=0;
                                while($rowProveri=mysql_fetch_array($queryProveri)){
                                    $vremeZaka=explode(":",$rowProveri['vremeZakazivanja']);
                                    $vremeZakazivanja=$vremeZaka[0]*60+$vremeZaka[1];
                                    $trenutakZakazivanja=$vremeZakazivanja-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']);
                                if(($trenutakZakazivanja>($sat*60+$min)-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']-$row['trajanjeUsluge'])) && ($trenutakZakazivanja+$rowProveri['trajanjeUsluge'])>(($sat*60+$min)-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']))){
                                    $prikazi=1;
                                    }
                                    if($trenutakZakazivanja+$rowProveri['trajanjeUsluge']>(($sat*60+$min)-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']))){
                                        $prikazi=1;
                                        }
                                }}
                                if($prikazi==1){
                            echo "<label><input name=\"vremeZakazivanja\" id=\"vremeZakazivanja\" value=\"".sprintf("%02d",$sat).":".sprintf("%02d",$min)."\" type=\"radio\"/> <span>".sprintf("%02d",$sat).":".sprintf("%02d",$min)."h </span></label>";}
                            }
                            $min=$min+15;
                            }
                        $sat++;
                        }
                ?>
                <input name="imeiprezime" type="hidden" value="<?php echo $imeiprezime; ?>" />
                <input name="telefon" type="hidden" value="<?php echo $telefon; ?>" />
                <input name="usluznik" type="hidden" value="<?php echo $usluznik; ?>" />
                <input name="datum" type="hidden" value="<?php echo $datum; ?>" />
<p class="dugmici"><a href="javascript:history.back();" class="button">Prethodni korak</a>
                <input type="submit" name="potvrdi" value="Potvrdi" class="button" /></p>
    
</form>


Problem se konkretno nalazi ovde:
Code:

                $sat=$rowRadnoVreme['pocetniRasponSat'];
                $ukupnoRadnoVreme=($rowRadnoVreme['krajnjiRasponSat']*60+$rowRadnoVreme['krajnjiRasponMin'])-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']);
                if($ukupnoTrajanje>59){
                    $satTrajanja=1;
                    $minutTrajanja=$ukupnoTrajanje-60;
                    }
                    while($sat<$rowRadnoVreme['krajnjiRasponSat']){
                        $min=0;
                        while($min<60){
                            $prethodnoRadnoVreme=($sat*60+$min)-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']);
                
                //provera da li je zauzeto
                $sqlProveri="SELECT a.*, b.* FROM `zakazivanje` AS a
                INNER JOIN `usluge` AS b ON a.`idUsluge`=b.`idUsluge`
                 WHERE a.`datum`='".$datum."' AND a.`usluznik`='".$usluznik."'";
                $queryProveri=mysql_query($sqlProveri);
                $numProveri=mysql_num_rows($queryProveri);
                //provera da li je zauzeto
                            if(($ukupnoRadnoVreme-$prethodnoRadnoVreme-$ukupnoTrajanje)>=0){
                                if($numProveri==0){$prikazi=1;}
                                if($numProveri>0){
                                    $prikazi=0;
                                while($rowProveri=mysql_fetch_array($queryProveri)){
                                    $vremeZaka=explode(":",$rowProveri['vremeZakazivanja']);
                                    $vremeZakazivanja=$vremeZaka[0]*60+$vremeZaka[1];
                                    $trenutakZakazivanja=$vremeZakazivanja-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']);
                                if(($trenutakZakazivanja>($sat*60+$min)-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']-$row['trajanjeUsluge'])) && ($trenutakZakazivanja+$rowProveri['trajanjeUsluge'])>(($sat*60+$min)-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']))){
                                    $prikazi=1;
                                    }
                                    if($trenutakZakazivanja+$rowProveri['trajanjeUsluge']>(($sat*60+$min)-($rowRadnoVreme['pocetniRasponSat']*60+$rowRadnoVreme['pocetniRasponMin']))){
                                        $prikazi=1;
                                        }
                                }}
                                if($prikazi==1){
                            echo "<label><input name=\"vremeZakazivanja\" id=\"vremeZakazivanja\" value=\"".sprintf("%02d",$sat).":".sprintf("%02d",$min)."\" type=\"radio\"/> <span>".sprintf("%02d",$sat).":".sprintf("%02d",$min)."h </span></label>";}
                            }
                            $min=$min+15;
                            }
                        $sat++;
                        }


--

With The Best Regards,

Daniel Dulić, Web System Development
http://www.citysuteam.com
Telefon: +381 (0) 64 / 364 - 65 - 91
E-Mail: [email protected]
CitySu team, Web Services Company
Antona Aškerca 44/50,
24000 Subotica
CitySu team
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Zakazivanje termina12.11.2013. u 14:46 - pre 127 meseci
Posmatraj jednu zakazanu dvokratnu uslugu kao dve zakazane jednokratne usluge.
To rešava celu zbrku.

Ako je algoritam ispravan i radi kako treba za jednokratne usluge,
Onda, na primer, u ovom SQL Proveri vrati 2 rekorda OD-DO za dvokratne usluge ili tako nešto.
 
Odgovor na temu

danield
Daniel Dulic
Web developer, CitySu team
Subotica

Član broj: 101580
Poruke: 113
*.dynamic.isp.telekom.rs.

ICQ: 443682699
Sajt: www.citysuteam.com


Profil

icon Re: Zakazivanje termina12.11.2013. u 14:53 - pre 127 meseci
Hvala :) mada mislim da mi nije samo to problem, pokusacu jos nesto :)

--

With The Best Regards,

Daniel Dulić, Web System Development
http://www.citysuteam.com
Telefon: +381 (0) 64 / 364 - 65 - 91
E-Mail: [email protected]
CitySu team, Web Services Company
Antona Aškerca 44/50,
24000 Subotica
CitySu team
 
Odgovor na temu

Tpojka
Ratio, Logic

Član broj: 60114
Poruke: 209

ICQ: 491318095


+33 Profil

icon Re: Zakazivanje termina12.11.2013. u 14:58 - pre 127 meseci
Citat:
dusans: Posmatraj jednu zakazanu dvokratnu uslugu kao dve zakazane jednokratne usluge.
To rešava celu zbrku.


Plus, treba postaviti prioritet usluge sa default-nom vrijednosti, tako da završetak dvokratnog tretmana uvijek ima prednost od novog.
-A Tpojke su Đuro - šta?
-Osnovne jedinice diverzantskih grupa!
 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1099
*.ptt.rs.



+218 Profil

icon Re: Zakazivanje termina13.11.2013. u 12:44 - pre 126 meseci
Nema potrebe za prioritetima jer ne moze istovremeno da radi dve usluge ako jednu ne pauzira, a nije mu cilj da jednu uslugu odlaze zakazivanjem druge pa da jedna od te dve ima prioritet.
Vidim Daniele da smo iz iste ulice :)
Zbog fleksibilnosti mozda bi trebao da kod vremena izvrsenja usluge imas i vremensku toleranciju od do minuta kako bi recimo ako farba na kosi treba da odstoji 20-30 minuta.
Ako striktno stavis 20 minuta onda ne mozes ubaciti uslugu od 25 minuta. Ako stavis striktno 30 minuta onda mozda ti zafali u narednom zakzivanje vremenski interval koji je duzi za
5 minuta pa bi ti odgovarao da je ovo prvo zakazivanje 25 minuta umesto 30.

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

Tpojka
Ratio, Logic

Član broj: 60114
Poruke: 209

ICQ: 491318095


+33 Profil

icon Re: Zakazivanje termina13.11.2013. u 13:23 - pre 126 meseci
Ovo moje vrijedi za slučaj kad ima više radnika.
Pa tek zbog toga flag koji napominje šta neminovno sljedeće da se radi ukoliko slobodan radnik treba da preuzme dio posla (recimo pranje kose poslije farbanja).
Može da vrijedi i za za situacije kad postoje pripravnici/šegrti koji obavljaju samo određene zadatke u salonu.
A može i pojednostavljeno, zavisi kako je organizovan posao.
-A Tpojke su Đuro - šta?
-Osnovne jedinice diverzantskih grupa!
 
Odgovor na temu

[es] :: PHP :: Zakazivanje termina

[ Pregleda: 2845 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.