Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    Determinare fascia oraria

    Ciao a tutti ho un piccolo problema di logica che non riesco a cavare fuori :

    Panorama :
    Interventi con data ora inizio.
    Faccio una select per determinare tutti le fasce orarie in cui il tecnico è impegnato.

    Codice PHP:
    $sql="SELECT int_OraInizio, int_OraFine FROM interventi WHERE int_idtecnico = '".$rktec['tec_idtecnico']."' AND int_datafissata = '".$datafissata."' "
    Poi so che la fascia di lavoro del tecnico è dalle :

    Codice PHP:
    $start "09:00";
    $end "18:00"
    Non contiamo la pausa.
    so che il mio intervento ha un peso in ore

    Codice PHP:
    $peso "4"
    Come diamone faccio a fissare l'intervento in una tederminata fascia di orario libero ed emettere un messaggio di errore nel caso in cui questo non fosse possibile?

    N.b tutti gli orari sono in ore precise non ci sono mezzore.
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    allora il tuo ragionamento funziona considerando start ed end come orario di inizio intervento e di fine intervento.
    In questo modo, dato un intervento con orari fissati, verifico se c'è sovrapposizione nell'ora di intervento.

    Start e End sono la giornata di lavoro del tecnico.
    l'intervallo di orari dell'esecuzione intervento sarebbero ti po

    $OraInizio = $start;
    $OraFine = $start + peso;
    "Questa sopra sarebbe la "prima fascia da controllare"

    Ma in questo particolare caso sono io che devo andare a determinare l'intervallo di orario in cui fissare l'intervento.

    Ps dato il tuo esempio mi è venuto un processo da considerare
    Codice PHP:
    //intervallo di lavoro del tecnico
    $start "09:00"
    $end "18:00";

    //durata in ora dell'intervento
    $peso "1";

    $OraInizio_tmp $start;
    $OraFine_tmp $start $peso;
    do{
        
    $sql ="SELECT int_idintervento, int_OraInizio, int_OraFine ";
        
    $sql.="FROM interventi ";
        
    $sql.="WHERE int_idtecnico = '".$rktec['tec_idtecnico']."' ";
        
    $sql.="AND int_datafissata = '".$datafissata."' ";
        
    $sql.="AND int_OraInizio < '".$OraFine_tmp."' AND int_OraFine > '".$OraInizio_tmp."'";

        
    $restmp=myssql_query($sql);
        if(
    mysql_num_rows($restmp) == 0){
            
    $OraInizio $OraInizio_tmp;
            
    $OraFine $OraFine_tmp;
        }
            
        
    $OraInizio_tmp $OraInizio_tmp $peso;
        
    $OraFine_tmp $OraFine_tmp $peso;
    } while (
    $OraFine_tmp $end);

    //se ora inzio e ora fine sono compilare ho trovato la mia fascia libera 
    Puo reggere come ragionamento?
    Le somme che vedi è perchè non so sommare un orario con un determinato numero di ore.
    Se può reggere mi sapresti anche indicare come fare la somma
    Che mestiere difficile.....essere da soli ancora di più

  3. #3
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Ok ma nel caso non ci fossero interventi per quel giorno o peggio ancora ce ne fosse solo uno?
    nel foreach non ci entro e non riesco a determinare la mia fascia oraria
    Che mestiere difficile.....essere da soli ancora di più

  4. #4
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Mi sa di soluzione un po arrabattata ma funziona perfettamente.

    Ho usato il while perche non sono riuscito immediatamente a farlo con il for each.

    Noterai che ho tentato di trattare il peso in modo da ottenere es : 4:00
    L'ho commentato perchè se io vado a confrontare

    2:00>1:00 mi da false
    2:00>1 mi da true

    Non mi chiedere il perchè.

    C'è un replicazione del routine come puoi notare.
    Il problema si presentava quando l'inizio della giornata fosse impegnato ma il resto libero.
    Ovviamente non faceva il controllo.
    In quel caso ho settato ll'inizio del successivo intervento come $end (orario di fine lavoro tecnico)

    Be ci sara da migliorarlo ma funziona e alla grande.... per ora va bene cosi..

    Grazie mille


    Codice PHP:
                $sql="SELECT int_OraInizio, int_OraFine FROM interventi WHERE int_idtecnico = '".$rktec['tec_idtecnico']."' AND int_datafissata = '".$datafissata."' "//echo $sql."
    ";
                
    $res_fasce=mysql_query($sql);
                
    $start = "09:00";
                
    $end = "18:00";
                if(
    $OraInizio=="" || $OraFine==""){

                    //TRATTO IL PESO PER TRASFORMARLO DA INTERO A HH:II DA SISTEMARE
                    
    $peso = intval($peso);
                    //
    $peso = $peso . ":00";
                    //DA RISTUDIARE COME UTILIZZARE IL PESO
                
                    //------------------------------------------------TEST 2
                    
    $last_intervento_fine = $start;
                    
    $counter = 0;
                    
    $nfasce = mysql_num_rows($res_fasce);
                    while(
    $intervento = mysql_fetch_array($res_fasce)){
                        
    $counter++;
                        
    $slot_libero = differenza_ora($last_intervento_fine,$intervento['int_OraInizio'],":"); 
                        if(
    $slot_libero >= $peso){
                            
    $OraInizio = $last_intervento_fine;                        
                            
    $OraFine = somma_ora($OraInizio ,$peso.":00",":");
                            break;
                        }else{
                            
    $last_intervento_fine =$intervento['int_OraFine'];
                        }
                        if(
    $nfasce == $counter){
                            
    $slot_libero = differenza_ora($last_intervento_fine,$end,":"); 
                            if(
    $slot_libero >= $peso){
                                
    $OraInizio = $last_intervento_fine;                        
                                
    $OraFine = somma_ora($OraInizio ,$peso.":00",":");
                                break;
                            }else{
                                
    $last_intervento_fine =$intervento['int_OraFine'];
                            }
                        
                        }                  
                    } 

                    echo "
    OraInizio:".$OraInizio." OraFine:".$OraFine;exit(); 
    Che mestiere difficile.....essere da soli ancora di più

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.