• User Newbie

    muchas gracias por los saludos! 😉
    allora ogni carrello ha un orario fisso, ti faccio un esempio piu concreto
    Carrello 1: orario 7.30-10.30 lunedi nel luogo A - presenti risorsa 1 e risorsa 2, eventualmente risorsa 3 come jolly
    Carrello 2: orario 7.30-10.30 lunedi nel luogo B- presenti risorsa 4 e risorsa 5, eventualmente risorsa 6 come jolly
    Carrello 3: orario 7.30-10.30 lunedi nel luogo C- presenti risorsa 7 e risorsa 8, eventualmente risorsa 9 come jolly

    Carrello 1: orario 7.30-10.30 martedi nel luogo A - presenti risorsa 10 e risorsa 11, eventualmente risorsa 12 come jolly
    Carrello 2: orario 7.30-10.30 martedi nel luogo B- presenti risorsa 13 e risorsa 14, eventualmente risorsa 15 come jolly
    Carrello 3: orario 7.30-10.30 martedi nel luogo C- presenti risorsa 16 e risorsa 17, eventualmente risorsa 18 come jolly

    e cosi via, finite le 40 risorse si reinizia con la prima. non importando in che carrello va. esempio:
    Carrello 1: orario 7.30-10.30 martedi nel luogo A - presenti risorsa 37 e risorsa 38, eventualmente risorsa 39 come jolly
    Carrello 2: orario 7.30-10.30 martedi nel luogo B- presenti risorsa 40 e risorsa 1, eventualmente risorsa 2 come jolly
    Carrello 3: orario 7.30-10.30 martedi nel luogo C- presenti risorsa 3 e risorsa 4, eventualmente risorsa 5 come jolly

    in modo che nessuna risorsa si ripete fino a che non è finito il giro completo.

    1. lo stato del carrello dipende dal fatto che abbia le risorse assegnate, se le ha è occupato.
    2. i dati di output dovrebbero essere:
      lunedi:
      Carrello 1 con risorsa 1 risorsa 2 e jolly risorsa 3
      Carrello 2 con risorsa 4 risorsa 5 e jolly risorsa 6
      Carrello 3 con risorsa 7 risorsa 8 e jolly risorsa 9
      e cosi via per gli altri giorni.

    il problema per me è l'assegnazione dei turni delle risorse in maniera automatica e senza ripetere le risorse prima della fine del ciclo turni.


  • Moderatore

    Il jolly vale come assegnazione?
    Es. martedì risorsa 3 non deve essere assegnata perché ha fatto da jolly lunedì oppure ci deve essere?


  • User Newbie

    buona domanda... no penso che il jolly non valga come assegnazione dato che come supplente non deve partecipare a tutti i costi.


  • Moderatore

    Ok, grazie.


  • User Newbie

    grazie a te e per l'aiuto che mi puoi dare.


  • Moderatore

    Hai previsto un db per conservare queste info? nel caso mysql va bene?


  • User Newbie

    si pensavo mysql. con php è l'ideale.


  • Moderatore

    Copia e incolla in una pagina vuota, denomina il file come vuoi (es. turni.php) e lancia da locale o remoto.
    La pagina stampa la coda (serve solo come esempio) e l'array con i turni.

    Puoi cambiare i parametri:

    • numRisorse, ora impostato a 40;
    • numServenti, ora impostato a 3;
    • numRisorseServente, ora impostato a 2;
    • numeJollyServente, ora impostato a 1.

    Teoricamente potresti cambiare anche *puntatore *per fare iniziare la rotazione da una risorsa diversa dalla prima (ricorda che deve essere minore o uguale a numRisorse-1):

    • puntatore, ora impostato a 0.

    Ho dato per scontato che la coda contenesse tutte le risorse, ma di solito non è così (per evidenziare questa cosa ho impostato *numQueue *uguale a numRisorse).

    
    <!doctype html>
    <html>
        <head>
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
            <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
            <title>Turni rotativi con PHP</title>
            <meta name="description" content="">
            <meta name="robots" content="noindex, nofollow" />
        </head>
        <body>
            <header>
                    <h1>Turni rotativi con PHP</h1>
            </header>
            <div>
                <h2>Array della Coda</h2>
                <?php
                //Inizializza la coda con le risorse e stampa l'array $queue
                $numRisorse = 40;
                $numQueue = $numRisorse;
                for ($i=0; $i<=$numQueue-1; $i++) {
                    $queue* = 'R' . ($i+1);
                }
                ?>
                <pre>
                <?php print_r($queue); ?>
                </pre>
                
                <h2>Array dei turni</h2>
                <?php
                //Crea i turni e stampa l'array $turni
                $numServenti = 3;
                $numRisorseServente = 2;
                $numJollyServente = 1;
                $numTurni = 3;
                $puntatore = 0;
                for ($t=0; $t<=$numTurni-1; $t++) {
                    $idTurno = 'T' . ($t+1);
                    $turni = array('idTurno' => $idTurno);
                    for ($i=0; $i<=$numServenti-1; $i++) {
                        $idServente = 'S' . ($i+1);
                        $turni* = array('idServente' => $idServente);
                        for ($k=0; $k<=$numRisorseServente-1; $k++) {
                            $idRisorsaServente = $queue[$puntatore];
                            $turni*[$k] = array ('idRisorsaServente' => $idRisorsaServente, 'statoRisorsaServente' => '1');
                            $puntatore += 1;
                        }
                        for ($k=0; $k<=$numJollyServente-1; $k++) {
                            $z = $numRisorseServente + $k;
                            $idJollyServente = $queue[$puntatore + ($numServenti-$i-1)*($numRisorseServente)+$i*$numJollyServente + $k];
                            $turni*[$z] = array ('idJollyServente' => $idJollyServente, 'statoJollyServente' => '1');
                        }
                    }
                }
                ?>
                <pre>
                <?php print_r($turni); ?>
                </pre>
            </div>
        </body>
    </html>
    
    

    Fammi sapere come va. 🙂
    Poi se ho tempo ti faccio la versione con mysql.


  • User Newbie

    ma sei un mito!! non so come ringraziarti davvero. oggi lo provo. per mysql provo io a fare le connessioni, altrimenti ti farò toc toc un'altra volta. se potessi fare qualcosa io per te...


  • Moderatore

    Ho tolto qualche riga inutile dal PHP.

    
    <!doctype html>
    <html>
        <head>
            <meta charset="utf-8" />
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
            <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport" />
            <title>Turni rotativi con PHP</title>
            <meta name="description" content="" />
            <meta name="robots" content="noindex, nofollow" />
        </head>
        <body>
            <header>
                <h1>Turni rotativi con PHP</h1>
            </header>
            <div>
                <h2>Array della coda</h2>
                <?php
                $numRisorse = 40;
                $numQueue = $numRisorse;
                for ($i=0; $i<=$numQueue-1; $i++) {
                    $queue* = 'R' . ($i+1);
                }
                ?>
                <pre>
                <?php print_r($queue); ?>
                </pre>
                
                <h2>Array dei turni</h2>
                <?php
                $numServenti = 3;
                $numRisorseServente = 2;
                $numJollyServente = 1;
                $numTurni = 3;
                $puntatore = 0;
                for ($t=0; $t<=$numTurni-1; $t++) {
                    for ($i=0; $i<=$numServenti-1; $i++) {
                        for ($k=0; $k<=$numRisorseServente-1; $k++) {
                            $idRisorsaServente = $queue[$puntatore];
                            $turni*[$k] = array ('idRisorsaServente' => $idRisorsaServente, 'statoRisorsaServente' => '1');
                            $puntatore += 1;
                        }
                        for ($k=0; $k<=$numJollyServente-1; $k++) {
                            $z = $numRisorseServente + $k;
                            $idJollyServente = $queue[$puntatore + ($numServenti-$i-1)*($numRisorseServente)+$i*$numJollyServente + $k];
                            $turni*[$z] = array ('idJollyServente' => $idJollyServente, 'statoJollyServente' => '1');
                        }
                    }
                }
                ?>
                <pre>
                <?php print_r($turni); ?>
                </pre>
            </div>
        </body>
    </html>