<?php
/*
$Id: peripherique.class.php,v 1.18 2008-04-08 09:56:58 fgiva Exp $
*/
require_once ("formulaireparc.class.php");
require_once ("element.class.php");

class peripherique extends element {

var $numero;
 
function bouton($maj,$val=null){  //surcharge pour bouton mettre au rebut
// (archivé si noserie ou numero present)
// =======================================================================
// Bouton Ajouter, modifier, supprimer
// =======================================================================
// * custom *
if(file_exists("../dyn/custom/var.inc")) {
   include("../dyn/custom/var.inc");
}
else {
  include("../dyn/var.inc");
}
//*
if (!$this->correct){
  if ($maj == 2) {//supprimer
    $numserie=$this->val[array_search('numserie',$this->champs)];//pour test
    $numero=$this->val[array_search('numero',$this->champs)];
    if ($numserie<>"" || $numero<>"") {
      $bouton = "Mettre au rebut";
    } else {
      $bouton = "Supprimer"; //periph sans no serie ou numero mairie
      $this->msg=$this->msg."<br>Attention! Pas d'archivage sans numéro série ou numéro mairie!";
    }
  } else
    if ($maj == 1) // modifier   
      $bouton = "Modifier";
    else // ajouter
      $bouton = "Ajouter";
  echo "<tr><td><br></td></tr><tr><td colspan=2><center><input type='submit' value='".$bouton." ".ucwords($this->table)."' style=".$styleBouton;
        $bouton." ".ucwords($this->table)."' style=".$styleBouton;
   if (!strstr($val["station"],"WMI"))
     echo " >";
   else
     echo " disabled=true >";
}
}

function setVal(&$form,$maj,$validation,&$db,$idx=0){
include ("../dyn/connexion.php");
include ("../sql/".$dsn['phptype']."/".$this->table.".form.inc");
if ($maj < 2){
  //numero proposé ou imposé à tous periph en création sauf periphstation
  $numero=date("ym")."%'";
  $temp = $db->getone($sql_numerostation.$numero);
  $temp2= $db->getone($sql_numeroelement.$numero);
  $temp=max($temp,$temp2);
  if ($temp=="")
    $this->numero=date("ym001");
  else 
    $this->numero=date("ym").sprintf("%03u",intval(substr($temp,4))+1);
  if ($maj==0 && $validation==0) {
    switch ($this->nature) {
      case 'interco':
      $form->setVal('idorganisme',2);
      break;
      case 'ecoles':
      $form->setVal('idorganisme',3);
      break;
      default:
      $form->setVal('idorganisme',1);
    }
    if (is_a($this,"peripheriquenonaffecte")) //champ etat masque donc mettre en stock
      $form->setVal('idetatelement',4); //en stock par defaut à la création
    else  //sinon champ etat visible donc affecte par defaut
      $form->setVal('idetatelement',1); //affecte par defaut à la création
  }
} 
}

function setvalF($val){
  parent::setvalF($val);
  $this->valF['numero'] = $val['numero'];  //ajout 
  $this->valF['numserie'] = $val['numserie']; //ajout
  $this->valF['notag'] = $val['notag']; //ajout
  if($val['edateachat']!="")
    $this->valF['dateachat'] = $this->dateDB($val['edateachat']); //==
  $this->valF['idfournisseur'] = $val['idfournisseur'];
  $this->valF['garantie'] = $val['garantie'];
  $this->valF['bc'] = $val['bc'];
  $this->valF['idorganisme'] = $val['idorganisme'];
  $this->valF['idetatelement'] = $val['idetatelement'];
}

function setType(&$form,$maj) {
  parent::setType($form,$maj); 
  if ($maj < 2) { //ajouter et modifier
    $form->setType('numserie', 'text');
    $form->setType('notag', 'text');
    $form->setType('edateachat', 'date');
    $form->setType('idfournisseur', 'select');
    $form->setType('garantie', 'select');
    $form->setType('bc', 'text');
    $form->setType('idorganisme', 'select');
    if (!is_a($this,"copieur"))  //pas de stockage pour copieur
      $form->setType('idetatelement', 'select');
  }
}

function setSelect(&$form, $maj,$db,$debug) {
  include ("../dyn/connexion.php");
  include ("../sql/".$dsn['phptype']."/".$this->table.".form.inc");
  parent::setSelect($form, $maj,$db,$debug);
  if($maj<2){
    $form->setSelect("idetatelement",$this->selectArray($db,$sql_etat,0," Choisir un état"));
    $form->setSelect("idfournisseur",$this->selectArray($db,$sql_fournisseur,0," Choisir un fournisseur"));
    $contenu=array();
    $contenu[0]=array('1','2','3','4','5');
    $contenu[1]=array('1','2','3','4','5');
    $form->setSelect("garantie",$contenu);
    $form->setSelect("idorganisme",$this->selectArray($db,$sql_organisme));
  }
}

function setLib(&$form,$maj) {
  parent::setLib($form,$maj);
  $form->setLib('idfournisseur','Fournisseur');
  $form->setLib('bc','Bon de commande');
  $form->setLib('idorganisme','Organisme');
}

function setOnchange(&$form,$maj){    //attention a la casse dans java: majuscules obligatoires   
parent::setOnchange($form,$maj);
$form->setOnchange("idetatelement","traiteretat(this)"); 
}

function triggerajouter($id,&$db,$val,$DEBUG) { //controle du numero et eventuellement correction
  include ("../dyn/connexion.php");
  include ("../sql/".$dsn['phptype']."/".$this->table.".form.inc");
  //if (is_a($this,"periphlibre")||is_a($this,"reseau"))
  if ($val["numero"]){  //si numero saisi verification validite du numero
    $numero=date("ym")."%'";
    $temp = $db->getone($sql_numerostation.$numero);
    $temp2= $db->getone($sql_numeroelement.$numero);
    $temp=max($temp,$temp2);
    if (is_null($temp))
      $numero=date("ym001");
    else 
      $numero=date("ym").sprintf("%03u",intval(substr($temp,4))+1);
    if ($this->valF["numero"]<>$numero && $this->valF["numero"]<>"") {
      $this->valF["numero"]=$numero;
      $this->msg= $this->msg."<br>Numero changé de ".$this->valF["numero"]." vers ".$numero; 
    }
  }
  //ajouter interv enregistrement
//  $this->ajouterIntervention($db,$this->valF["idelement"],"Enregistrement");
  if (($val["idetatelement"]==1) && !(is_a($this,"peripheriquestation") && !$val["numserie"])) { //affectation 
    //ajouter interv mise en place 
    //pour periph de station ssi numserie existe
    $this->ajouterIntervention($db,$this->valF["idelement"],"Mise en place",$val["idstation"],$val["idutilisateur"],$val["idservice"],$val["idbatiment"]);
  }
}

//test passage en atelier ou affectaion
function triggermodifier($id,&$db,$val,$DEBUG) { 
  if ($val["idetatelement"]>1 && $db->getOne("select idetatelement from element where idelement=".$this->valF['idelement'])==1) {
  //retrait du periph  
    switch ($val["idetatelement"]) { 
    case 2: //panne
      $this->ajouterIntervention($db,$val["idelement"],"Retour en atelier");
      break;
    case 3: //reparation
      $this->ajouterIntervention($db,$val["idelement"],"Dépot pour réparation");
      break;
    case 4: //stock
      $this->ajouterIntervention($db,$val["idelement"],"Retour en stock");
    }
    $this->valF['dateatelier'] = date("Y-m-d");
    if (is_a($this,"peripheriquestation")) {
    //raz des idstation dans intervention pour le periph
      $cle= " idperipherique = ".$val['idelement'];
      $valF="";
      $valF['idstation']= 0;
      $res= $db->autoExecute('intervention',$valF,DB_AUTOQUERY_UPDATE,$cle);
      if (DB :: isError($res))
        die($res->getMessage()." échec maj");
      else{
        if ($DEBUG == 1)
          echo "La requête de mise à jour est effectuée.<br>";
        $this->msg=$this->msg."<br>Enregistrement ".$val['idelement']." de la table intervention"." [".$db->affectedRows()." enregistrement mis à jour]<br>" ;
      }
    }
    if (is_a($this,"imprimante")) { //prn reseau ou copieur
      //effacer adresseip sans referant periph
      $sql= "delete from tcpip where idperipherique=".$val["idelement"];
      $res= $db->query($sql);
      if (DB :: isError($res))
        $this->erreur_db($res->getDebugInfo(),$res->getMessage(),'');
      else{
        if ($DEBUG == 1)
          echo "La requête".$sql." est effectuée.<br>";
        $this->msg=$this->msg."<br>Enregistrement(s) de la table tcpip [".$db->affectedRows()." enregistrement supprimé]" ;
      } // requete maj
    }
  } //affectation ou reaffectation (changement de station)
  $oldidstation=$db->getOne("select idstation from element where idelement=".$this->valF['idelement']);
  if ($val["idetatelement"]==1 && ($db->getOne("select idetatelement from element where idelement=".$this->valF['idelement'])>1 || $oldidstation!=$val["idstation"])) {
    //ajouter interv mise en place
    $this->ajouterIntervention($db,$val["idelement"],"Mise en place",$val['idstation'],$val["idutilisateur"],$val['idservice'],$val['idbatiment']);
    if ($val['idstation']>0) {
    //vers station  maj des idstation dans intervention pour le periph
      $cle= " idperipherique = ".$val['idelement'];
      $valF="";
      $valF['idstation']= $val['idstation'];
      $res= $db->autoExecute('intervention',$valF,DB_AUTOQUERY_UPDATE,$cle);
      if (DB :: isError($res))
        die($res->getMessage()." échec maj");
      else{
        if ($DEBUG == 1)
          echo "La requête de mise à jour est effectuée.<br>";
        $this->msg=$this->msg."<br>Enregistrement ".$val['idelement']." de la table intervention"." [".$db->affectedRows()." enregistrement mis à jour]<br>" ;
      }
    }
  }  
}

function triggersupprimer($id,&$db,$val,$DEBUG) {
  if ($val["numserie"]<>"" || $val["numero"]<>"") {  //archivage si noserie ou numero existe et interv enregistrees 
//puis suppression peripherique et interventions plus referees
//sinon supression simple periph et interv attenantes
    //ajouter interv mise au rebut
    $this->ajouterIntervention($db,$val["idelement"],"Mise au rebut");
    if (is_a($this,"imprimante")) { //prn reseau ou copieur 
      //effacer adresseip sans referant periph
      $sql= "delete from tcpip where idperipherique=".$val["idelement"];
      $res= $db->query($sql);
      if (DB :: isError($res))
        $this->erreur_db($res->getDebugInfo(),$res->getMessage(),'');
      else{
        if ($DEBUG == 1)
          echo "La requête".$sql." est effectuée.<br>";
        $this->msg=$this->msg."<br>Enregistrement(s) de la table tcpip [".$db->affectedRows()." enregistrement supprimé]" ;
      } // requete maj
    }
    $rebutvalF['idelement']=$db->nextID("elementrebut");//$val["idelement"];
    $rebutvalF['numero'] = $val["numero"];
    $rebutvalF['idmodele'] = $val["idmodele"];
/*if($val["edateachat"]!="")*/ $rebutvalF['dateachat'] = /*$this->dateDB(*/$val["edateachat"]/*)*/;
    $rebutvalF['daterebut'] = date("Y-m-d");
    $rebutvalF['garantie'] = $val["garantie"];
    $rebutvalF['idfournisseur'] = $val["idfournisseur"];
    $rebutvalF['bc'] = $val["bc"];
    $rebutvalF['numserie'] = $val["numserie"];
    $rebutvalF['adressemac'] = $val["adressemac"];
    $res= $db->autoExecute("elementrebut",$rebutvalF,DB_AUTOQUERY_INSERT);
    if (DB :: isError($res))
      $this->erreur_db($res->getDebugInfo(),$res->getMessage(),'');
    else{
      if ($DEBUG == 1)
        echo "La requête de mise à jour est effectuée.<br>";
    $this->msg=$this->msg."<br>Enregistrement ".
    $val['idelement']." de la table elementrebut [".$db->affectedRows()." enregistrement ajouté]" ;
    } // requete creation elementrebut
    $sql="select * from intervention where idperipherique = ".$val["idelement"];  
    $res = $db->query($sql);
    if (DB :: isError($res))
      die($res->getMessage().$sql);
    else{
      if ($DEBUG == 1)
        echo " la requete ".$sql." est exécutée<br>";
      while ($row=& $res->fetchRow()){ //archivage des interv du periph
        $rebutelvalF="";
        $rebutelvalF['idintervention']=$db->nextID("interventionrebut");//$row[0];
        $rebutelvalF['idperipherique']=$rebutvalF['idelement'];
        $rebutelvalF['idtype']=$row[3];
        $rebutelvalF['iddemandeur']=$row[4];
        $rebutelvalF['idintervenant']=$row[5];
        $rebutelvalF['dateouverture']=$row[6];
        $rebutelvalF['datecloture']=$row[7];
        $rebutelvalF['observations']=$row[8];
        $res3= $db->autoExecute("interventionrebut",$rebutelvalF,DB_AUTOQUERY_INSERT);
        if (DB :: isError($res3))
          $this->erreur_db($res3->getDebugInfo(),$res3->getMessage(),'');
        else{
          if ($DEBUG == 1)
            echo "La requête de mise à jour est effectuée.<br>";
            $this->msg=$this->msg."<br>Enregistrement ".
    $row[0]." de la table interventionrebut [".$db->affectedRows()." enregistrement ajouté]" ;
        }
      }
    }
  }
  //effacer interventions sans referant periph
  $sql= "delete from intervention where idperipherique=".$val["idelement"];
  $res= $db->query($sql);
  if (DB :: isError($res))
    $this->erreur_db($res->getDebugInfo(),$res->getMessage(),'');
  else{
    if ($DEBUG == 1)
      echo "La requête".$sql." est effectuée.<br>";
    $this->msg=$this->msg."<br>Enregistrement(s) de la table intervention [".$db->affectedRows()." enregistrement supprimé]" ;
  } // requete maj
}

function setOnkeyup(&$form,$maj) {
$form->setOnkeyup("utilisateur","peupleruser(this)");
?>
<script language="javascript">
function peupleruser(t1) {
  var l2 = document.getElementsByName("idutilisateur");   
  var xhr_object = null;   
          
  if(window.XMLHttpRequest) // Firefox   
    xhr_object = new XMLHttpRequest();   
  else if(window.ActiveXObject) // Internet Explorer   
    xhr_object = new ActiveXObject("Microsoft.XMLHTTP");   
  else { // XMLHttpRequest non supporté par le navigateur   
    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");   
    return;   
  }   
 
  var data = "nom="+escape(t1.value)+"&form="+f1.name+"&select=idutilisateur";   

  xhr_object.open("POST", "../spg/dynselectutilisateur.php", true);   
     
  xhr_object.onreadystatechange = function() {   
    if(xhr_object.readyState == 4) {   
      eval(xhr_object.responseText);
     //alert("transfert fini"+l2(0).value);
     }   
  }   
  xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");   
  xhr_object.send(data);   
}
</script>
<?php
}

function setOnclick(&$form,$maj){
$form->setOnclick("numero","affichernumero(this)");
$form->setOnclick("idutilisateur","majuser(this)");  
?>
<script language="javascript">
function affichernumero(t1) {
alert("<?php echo($this->numero);?>");
t1.value="<?php echo($this->numero);?>";
}
function majuser(l1) {
  var t1 = document.getElementsByName("utilisateur");   
  t1[0].value=l1.options[l1.selectedIndex].text;
}
</script>
<?php
}

function ajouterIntervention(&$db,$idperipherique,$type,$idstation=0,$idutilisateur=0,$idservice=0,$idbatiment=0) {
  include ("../dyn/connexion.php");
  include ("../sql/".$dsn['phptype']."/".$this->table.".form.inc");
  //ajouter interv periph
  $intervalF="";
  $intervalF['idintervention']=$db->nextID("intervention");
  $intervalF['idperipherique']=$idperipherique;
  if ($idstation) {
    $intervalF['idstation']=$idstation;
    $intervalF['observations']="$type du périphérique et affectation à la station ".$db->getOne("select numero from station where idstation=$idstation").".";
  } else if ($idutilisateur) {
    $intervalF['observations']="$type du périphérique et affectation à ".$db->getOne("select concat(prenom,' ',nom) from personnel where idutilisateur=$idutilisateur").".";
  } else if ($idservice) {
    $intervalF['observations']="$type du périphérique et affectation au service ".$db->getOne("select libservice from service where idservice=$idservice").".";
  } else if ($idbatiment) {
    $intervalF['observations']="$type du périphérique et affectation au batiment ".$db->getOne("select libbatiment from batiment where idbatiment=$idbatiment").".";
  } else {
    $intervalF['observations']="$type du périphérique.";
  }
  $intervalF['idtype']=$db->getOne("select idtype from typeintervention where libtype='$type'");
  $intervalF['dateouverture']=date("Y-m-d");
  $intervalF['datecloture']=date("Y-m-d");
  $intervalF['idetatintervention']=3;  //cloturee
  $res= $db->autoExecute("intervention",$intervalF,DB_AUTOQUERY_INSERT);
  if (DB :: isError($res))
    $this->erreur_db($res->getDebugInfo(),$res->getMessage(),'');
  else{
    if ($DEBUG == 1)
      echo "La requête de mise à jour est effectuée.<br>";
      $this->msg=$this->msg."<br>Enregistrement ".
$intervalF['idintervention']." de la table intervention [".$db->affectedRows()." enregistrement ajouté]" ;
  }
}

function verifier(&$db){
  include ("../dyn/connexion.php");
  include ("../sql/".$dsn['phptype']."/".$this->table.".form.inc");
  parent::verifier();
  //verif unicité numserie
  if ($this->valF['numserie'] && $this->correct) {  //si numserie fixé
    $sql="select idelement from element where idmodele=".$this->valF['idmodele']." and numserie like '%".$this->valF['numserie']."%'";
    if ($this->valF['idelement'])
      $sql.=" and idelement<>".$this->valF['idelement'];
    $element=$db->getOne($sql);
    if ($element) {
      $this->correct=false;
      $this->msg= $this->msg."<br>No serie déjà utilisé par l'élément ".$element;
    }
  }
}

function setGroupe(&$form,$maj,&$db,$idx){
  if ($maj>0) {
    $form->setGroupe('idelement','D');
    $form->setGroupe('numero','G');
    $form->setGroupe('station','G');
    $form->setGroupe('idorganisme','F');
  } else {
    $form->setGroupe('numero','D');
    $form->setGroupe('station','G');
    $form->setGroupe('idorganisme','F');
  }
  $form->setGroupe('typeelement','D');
  $form->setGroupe('idmodele','F');
  $form->setGroupe('libmodele','F');
  $form->setGroupe('numserie','D');
  $form->setGroupe('notag','F');

  if ($maj<2) {
    $form->setGroupe('utilisateur','D');
    $form->setGroupe('idservice','F');
    $form->setGroupe('idutilisateur','D');
    $form->setGroupe('idbatiment','F');
    $form->setGroupe('idetatelement','D');
    $form->setGroupe('idstation','F');
  }

  $form->setGroupe('nomelement','D');
  $form->setGroupe('adressemac','F');
  $form->setGroupe('fax','D');
  $form->setGroupe('scanner','F');
  $form->setGroupe('dateatelier','D');
  $form->setGroupe('boitierext','F');

  $form->setGroupe('edateachat','D');
  $form->setGroupe('idfournisseur','F');
  $form->setGroupe('bc','D');
  $form->setGroupe('garantie','F');
}

function setRegroupe(&$form,$maj,&$db,$idx){
  if ($maj>0) {
    $form->setRegroupe('idelement','D','Identification');
    $form->setRegroupe('numero','G','');
    $form->setRegroupe('station','G','');
    $form->setRegroupe('idorganisme','G','');
  } else {
    $form->setRegroupe('numero','D','Identification');
    $form->setRegroupe('station','G','');
    $form->setRegroupe('idorganisme','G','');
  }
  $form->setRegroupe('typeelement','G','');
  $form->setRegroupe('idmodele','G','');
  $form->setRegroupe('libmodele','G','');
  $form->setRegroupe('numserie','G','');
  $form->setRegroupe('notag','F','');

  $form->setRegroupe('nomelement','D','Options');
  $form->setRegroupe('adressemac','G','');
  $form->setRegroupe('fax','G','');
  $form->setRegroupe('scanner','G','');
  $form->setRegroupe('dateatelier','G','');
  $form->setRegroupe('boitierext','F','');

  $form->setRegroupe('edateachat','D','Informations administratives');
  $form->setRegroupe('idfournisseur','G','');
  $form->setRegroupe('bc','G','');
  $form->setRegroupe('garantie','F','');
}

}// fin de classe
?>