<?php
//$Id$ 
//gen openMairie le 10/05/2013 09:18

require_once ("../gen/obj/candidature.class.php");

class candidature extends candidature_gen {

    function candidature($id,&$db,$debug) {
        $this->constructeur($id,$db,$debug);
    }// fin constructeur

    function setvalF($val) {
        parent::setvalF($val);
        if ($val['debut']=='') 
            unset($this->valF['debut']);
        if ($val['fin']=='') 
            unset($this->valF['fin']);            
    }

   
    function verifier($val,&$db,$DEBUG){
        parent :: verifier($val,$db,$DEBUG);
        // calcul du temps passe et verification des dates saisies
        if ($val['debut']!="" and $val['fin']!=""){
            $heureD = explode(":", $val['debut']);
            $heureF = explode(":", $val['fin']);
            $heure = $heureF[0]-$heureD[0];
            $minute = $heureF[1]-$heureD[1];
            $total="00:00";
            if($heure<0){
                $this->correct=false;
                $this->msg=$this->msg._("<br>*&nbsp;Heure")."&nbsp;"._("fin")."&nbsp;".
                     _("INFERIEURE")."&nbsp;"._("heure")."&nbsp;"._("depart");
            }else{
                if($minute<0){
                    if($heure>0){
                        $heure=$heure-1;
                        $minute=$minute+60;
                        $total = $heure.":".$minute;
                    }else{
                        $this->correct=false;
                        $this->msg=$this->msg._("<br>*&nbsp;Heure")."&nbsp;"._("fin")."&nbsp;".
                            _("INFERIEURE")."&nbsp;"._("heure")."&nbsp;"._("depart");
                    }
                }else{
                    $total = $heure.":".$minute;
                }
            $this->msg=$this->msg._("<br>*&nbsp;Heure(s) effectuees")."&nbsp;".$heure.":".$minute."&nbsp;";
            }
        }
        // si la saisie est correcte
        if($this->correct==True){   
            // on ne peut pas affecter des heures si il n y a pas de decision d affectation
            if (($val['debut']!="" or $val['fin']!="")
               and $this->valF['decision']!='True' ){
                   $this->correct=false;
                   $this->msg=$this->msg._("<br>*Decision affectation NON PRISE");
            }
    
            //   exception agent centralisation
            // - tous bureau
            // - possibilté plusieurs agents ayant le meme poste
            include ("../dyn/var.inc");
            if($this->valF['poste']!= $agent_centralisation) { // sauf les agents centralisateurs
                // affectation obligatoire d un bureau
                if($this->valF['decision']=='True' and $this->valF['bureau']=='T'){
                    $this->correct=false;
                    $this->msg= $this->msg._("<br>*&nbsp;Decision affectation bureau OBLIGATOIRE").
                    "&nbsp;-&nbsp;"._("TOUS INTERDIT");
                }
                // verification si le poste est occupe par un autre agent
                if($this->valF['decision'] == 'True' and $this->valF['bureau']!='T'){
                    switch ($this->valF['periode']){
                        case "journee" :
                            $sql="select * from ".DB_PREFIXE."candidature where
                               scrutin ='".$this->valF['scrutin']."'
                               and poste ='".$this->valF['poste']."'
                               and bureau ='".$this->valF['bureau']."'
                               and decision  is True";
                               if($this->valF['candidature']!='') //maj==1
                                   $sql=$sql." and candidature !=".$this->valF['candidature'];
                           break;
                        case "matin" :
                            $sql="select * from ".DB_PREFIXE."candidature where
                               scrutin ='".$this->valF['scrutin']."'
                               and poste ='".$this->valF['poste']."'
                               and bureau ='".$this->valF['bureau']."'
                               and (periode ='journee' or periode='matin')
                               and decision  is True";
                               if($this->valF['candidature']!='') //maj==1
                                   $sql=$sql." and candidature !=".$this->valF['candidature'];
                            break;
                        case "apres-midi":
                           $sql="select * from ".DB_PREFIXE."candidature where
                               scrutin ='".$this->valF['scrutin']."'
                               and poste ='".$this->valF['poste']."'
                               and bureau ='".$this->valF['bureau']."'
                               and (periode ='journee' or periode='apres-midi')
                               and decision  is True";
                               if($this->valF['candidature']!='') //maj==1
                                   $sql=$sql." and candidature !=".$this->valF['candidature'];
                            break;
                        default:
                    }
                    $res = $db->query($sql);
                    //if($DEBUG==1) echo $sql;
                    if (DB :: isError($res))
                        die($res->getMessage(). " => Echec  ".$sql);
                    else{
                        $nbligne=$res->numrows();
                        if ($nbligne>0){
                            $this->correct=false;
                            $this->msg = $this->msg."<br>*&nbsp;".$nbligne.
                            " ".$this->valF['poste']."&nbsp;&nbsp;"._("pour")."&nbsp;"._("bureau")."&nbsp;".$this->valF['bureau'].
                            " - ".$this->valF['periode'].
                            " [ ".$this->valF['scrutin']." ]" ;
                        }
                    }
                }
            } //centralisation
            
            // verification si l agent n occupe pas un poste dans la meme periode
            // il peut y avoir plusieurs elections en meme temps
            // si bureau = Tous => il y aura plusieurs agents pour un meme poste
            // par contre un meme agent ne peut pas occuper plusieurs postes
            
            if($this->valF['decision']=='True'){// and $this->valF['bureau']!='T'){
                 // date du scrutin
                $sql="select date_scrutin from ".DB_PREFIXE."scrutin where scrutin = '".
                $this->valF['scrutin']."'";
                $date_scrutin=$db->getOne($sql);
                // test periode
                switch ($this->valF['periode']){
                    case "journee" :
                        $sql="select * from ".DB_PREFIXE."candidature inner join ".DB_PREFIXE."scrutin
                            on scrutin.scrutin=candidature.scrutin
                            where date_scrutin ='".$date_scrutin."'
                            and agent ='".$this->valF['agent']."'
                            and decision  is True";
                            if($this->valF['candidature'])
                                $sql=$sql." and candidature !=".$this->valF['candidature'];
                        break;
                    case "matin" :
                        $sql="select * from ".DB_PREFIXE."candidature inner join ".DB_PREFIXE."scrutin
                            on scrutin.scrutin=candidature.scrutin
                            where date_scrutin ='".$date_scrutin."'
                            and agent ='".$this->valF['agent']."'
                            and (periode ='journee' or periode='matin')
                            and decision  is True";
                            if($this->valF['candidature'])
                                $sql=$sql." and candidature !=".$this->valF['candidature'];
                         break;
                    case "apres-midi":
                        $sql="select * from ".DB_PREFIXE."candidature inner join ".DB_PREFIXE."scrutin
                            on scrutin.scrutin=candidature.scrutin
                            where date_scrutin ='".$date_scrutin."'
                            and agent ='".$this->valF['agent']."'
                            and (periode ='journee' or periode='apres-midi')
                            and decision  is True";
                            if($this->valF['candidature'])
                                $sql=$sql." and candidature !=".$this->valF['candidature'];
                        break;
                    default:
                }
                $res = $db->query($sql);
                if (DB :: isError($res))
                   die($res->getMessage(). " => Echec  ".$sql);
                else{
                    $nbligne=$res->numrows();
                    if ($nbligne>0){
                       $this->correct=false;
                       $this->msg = $this->msg."<br>*&nbsp;".$nbligne.
                       _("poste(s)")."&nbsp;"._("occupe")."&nbsp;"._("pour")."&nbsp;"._("agent")."&nbsp;".$this->valF['agent'].
                       " - ".$this->valF['periode'].
                       " [ ".$date_scrutin." ] ";
                    }
                }
            }    
            // verification des bureau Cas des cantonales
            if($this->valF['bureau']!='T'){
                $sql="select canton from ".DB_PREFIXE."scrutin where scrutin = '".
                $this->valF['scrutin']."'";
                $canton=$db->getOne($sql);
                if($canton!='T'){
                    // selection du canton du bureau
                    $sql="select canton from ".DB_PREFIXE."bureau where bureau = '".
                    $this->valF['bureau']."'";
                    $canton_bureau=$db->getOne($sql);
                    if($canton != $canton_bureau){
                        $this->correct=false;
                        $this->msg = $this->msg._("<br>*&nbsp;Bureau")."&nbsp;".
                        $this->valF['bureau']._(" NON")."&nbsp;"._("dans")."&nbsp;"._("canton")."&nbsp;".$canton.
                        "&nbsp;("._("SCRUTIN")."&nbsp;".$this->valF['scrutin'].")";
                    }
                }
            }
        } 
    }

    function setOnchange(&$form,$maj){
        parent::setOnchange($form,$maj);
        $form->setOnchange('debut','ftime(this)');
        $form->setOnchange('fin','ftime(this)');
    }
    
    function setSelect(&$form, $maj,&$db,$debug) {
        parent::setSelect($form, $maj,$db,$debug);
        include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
        if($maj<2){
            // scrutin
            $res = $db->query($sql_scrutin);
            if (DB :: isError($res))
                 die($res->getMessage().$sql_scrutin);
            else{
             if ($debug == 1)
               echo " la requete ".$sql_scrutin." est exécutée<br>";
               $contenu[0][0]="";
               $contenu[1][0]=_("choisir")."&nbsp;"._("un")."&nbsp;"._("scrutin");
               $k=1;
               while ($row=& $res->fetchRow()){
                $contenu[0][$k]=$row[0];
                $contenu[1][$k]=$row[1];
                $k++;
               }
            $form->setSelect("scrutin",$contenu);
        }
        // bureau
        $contenu=array();
        $res = $db->query($sql_bureau);
        if (DB :: isError($res))
             die($res->getMessage().$sql_bureau);
        else{
            if ($debug == 1)
              echo " la requete ".$sql_bureau." est exécutée<br>";
          //$contenu[0][0]="T";
          //$contenu[1][0]=_("tous")."&nbsp;"._("les")."&nbsp;"._("bureaux");
          //$k=1;
          $k=0;
          while ($row=& $res->fetchRow()){
            $contenu[0][$k]=$row[0];
            $contenu[1][$k]=$row[1];
            $k++;
            }
        $form->setSelect("bureau",$contenu);
        }
        // poste
        $contenu=array();
        $res = $db->query($sql_poste);
        if (DB :: isError($res))
             die($res->getMessage().$sql_poste);
        else{
         if ($debug == 1)
           echo " la requete ".$sql_poste." est exécutée<br>";
           $contenu[0][0]="";
           $contenu[1][0]=_("choisir")."&nbsp;"._("un")."&nbsp;"._("poste");
           $k=1;
           while ($row=& $res->fetchRow()){
            $contenu[0][$k]=$row[0];
            $contenu[1][$k]=$row[1];
            $k++;
           }
        $form->setSelect("poste",$contenu);
        }
        // periode
        $contenu=array();
        $res = $db->query($sql_periode);
        if (DB :: isError($res))
             die($res->getMessage().$sql_periode);
        else{
         if ($debug == 1)
           echo " la requete ".$sql_periode." est exécutée<br>";
           $contenu[0][0]="";
           $contenu[1][0]=_("choisir")."&nbsp;"._("une")."&nbsp;"._("periode");
           $k=1;
           while ($row=& $res->fetchRow()){
            $contenu[0][$k]=$row[0];
            $contenu[1][$k]=$row[1];
            $k++;
           }
        $form->setSelect("periode",$contenu);
        }
        }}
        function setTaille(&$form,$maj){
        $form->setTaille('note', 80);
        }
        function setMax(&$form,$maj){
        $form->setMax('note', 5);
        }
        function setGroupe(&$form,$maj){
        $form->setGroupe('scrutin','D');
        $form->setGroupe('periode','G');
        $form->setGroupe('poste','F');
        
        $form->setGroupe('bureau','D');
        $form->setGroupe('recuperation','F');
        
        $form->setGroupe('decision','D');
        $form->setGroupe('debut','G');
        $form->setGroupe('fin','F');
    }
    function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,&$db,$DEBUG=null){
        parent::setValsousformulaire($form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,$db,$DEBUG=null);
        if ($validation==0) {
          if ($maj == 0){
            if(isset($_SESSION['scrutin']))
                $scrutin=$_SESSION['scrutin'];
            else
                $scrutin="";
            $form->setVal($retourformulaire, $idxformulaire);
            $form->setVal("scrutin", $scrutin);    
            }
        }
    }
    
    function setLib(&$form,$maj) {
        parent::setLib($form,$maj);
        $form->setLib('scrutin','');
        $form->setLib('periode','');
        $form->setLib('poste','');
        $form->setLib('bureau','');
        $form->setLib('debut','heure debut (format :hh:mm) ');
        $form->setLib('fin','heure fin (format : hh:mm) ');
    }

    function setRegroupe(&$form,$maj){
        parent::setRegroupe($form,$maj);
        $form->setRegroupe('scrutin','D',_("scrutin"));
        $form->setRegroupe('periode','G','');
        $form->setRegroupe('poste','F','');
        
        $form->setRegroupe('bureau','D',_("choix"));
        $form->setRegroupe('recuperation','F','');
        
        $form->setRegroupe('decision','D',_("decision")."&nbsp;"._("horaires"));
        $form->setRegroupe('debut','G','');
        $form->setRegroupe('fin','F','');
    }
    
    function triggerajouter($id,&$db,$val,$DEBUG) {
        parent::triggerajouter($id,$db,$val,$DEBUG);
        $this->valF['note']="1ère demande : ".$val['poste'].' au bureau '.$val['bureau'].
        ' pendant  '.$val['periode'];
    }
    
}// fin classe
?>