<?php
//$Id$ 
//gen openMairie le 10/02/2011 20:34
/*
$Id: instruction.class.php,v 1.29 2010-10-27 10:52:20 fraynaud Exp $
specific :
- cle secondaire
  destruction autorisée que pour le dernier evenement
  [delete the last event ]
- variable globale [global variables]
    var $archive_date_depot;
    var $retourformulaire;
    var $idxformulaire;
- modification des données dans dossier trigger avant
  [modify dossier data with trigger function]
- function moisdate : pour ajouter des mois a une date
  [add months (delay) and calculation final date]
- voir script_lang.js : bible ...
*/
require_once ("../gen/obj/instruction.class.php");

class instruction extends instruction_gen {

    var $archive_date_depot; // specific
    var $retourformulaire;   // specific
    var $idxformulaire;      // specific

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

    function cleSecondaire($id,&$db,$val,$DEBUG) {
        parent::cleSecondaire($id,$db,$val,$DEBUG);
        // controle suppression cle secondaire [secondary key delete control]
        // ------------------------------------------------------------------------------------
        // specifique detruire que le dernier   [specific instruction : delete the last event ]
        // ------------------------------------------------------------------------------------
        $dernierevenement='';
        $sql="select max(instruction) from ".DB_PREFIXE."instruction where dossier ='".
        $this->idxformulaire."'";
        $dernierevenement = $db->getOne($sql);
         if($dernierevenement==$id){
             $this->correct=true;
             $this->addToMessage(_('Destruction_chronologique'));
          }else{
             $this->addToMessage(_('Destruction_evenement')." : ".$dernierevenement);
             $this->addToMessage(_('Destruction_chronologique'));
             $this->correct=false;
          }
    }

    function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
        if ($validation==0 and $maj<2) {
            if ($maj == 0){
                $form->setVal("destinataire", $idxformulaire);
                $form->setVal("dossier", $idxformulaire);
                $form->setVal("datecourrier", date('Y-m-d'));
            }
            $form->setVal("bible_auto","bible_auto()");
            $form->setVal("bible","bible()");
            $form->setVal("bible2","bible2()");
        }
        $this->retourformulaire=$retourformulaire;
        $this->idxformulaire=$idxformulaire;
    }

    function setType(&$form,$maj) {
        parent::setType($form,$maj);
        if ($maj < 2) { //ajouter et modifier
            $form->setType('destinataire', 'hidden');
            $form->setType('lettretype', 'hiddenstatic');
            $form->setType('complement', 'textarea');
            $form->setType('complement2', 'textarea');
            $form->setType('bible_auto', 'httpclick');
            $form->setType('bible', 'httpclick');
            $form->setType('bible2', 'httpclick');
            $form->setType('dossier', 'hiddenstatic');   
            $form->setType('libelle', 'hiddenstatic');
            if($maj==0){ // add
                $form->setType('instruction', 'hiddenstatic');
                $form->setType('evenement', 'select');
                $form->setType('datecourrier', 'date2');
            }else{ // modify
                $form->setType('instruction', 'hiddenstatic');
                $form->setType('evenement', 'hiddenstatic');
                //$form->setType('datecourrier', 'hiddenstaticdate');
                $form->setType('datecourrier', 'date2');
                // necessaire pour calcul de date en modification
                $form->setType('delai', 'hiddenstatic');
            }
        } elseif($maj==2){
            $form->setType('dossier', 'hiddenstatic');
        }else {
            $form->setType('destinataire', 'hidden');
            $form->setType('dossier', 'static');
        }
        $form->setType('complement3', 'hidden');
        $form->setType('bible_auto', 'hidden');
        $form->setType('bible', 'hidden');
        $form->setType('bible2', 'hidden');
        $form->setType('bible3', 'hidden');
        $form->setType('complement4', 'hidden');
        $form->setType('bible4', 'hidden');
        $form->setType('complement5', 'hidden');
        $form->setType('bible5', 'hidden');
        $form->setType('complement6', 'hidden');
        $form->setType('bible6', 'hidden');
        $form->setType('complement7', 'hidden');
        $form->setType('bible7', 'hidden');
        $form->setType('complement8', 'hidden');
        $form->setType('bible8', 'hidden');
        $form->setType('complement9', 'hidden');
        $form->setType('bible9', 'hidden');
        $form->setType('complement10', 'hidden');
        $form->setType('bible10', 'hidden');
        $form->setType('complement11', 'hidden');
        $form->setType('bible11', 'hidden');
        $form->setType('complement12', 'hidden');
        $form->setType('bible12', 'hidden');
        $form->setType('complement13', 'hidden');
        $form->setType('bible13', 'hidden');
        $form->setType('complement14', 'hidden');
        $form->setType('bible14', 'hidden');
        $form->setType('complement15', 'hidden');
        $form->setType('bible15', 'hidden');
        $form->setType('delai', 'hidden');
        $form->setType('etat', 'hidden');
        $form->setType('accord_tacite', 'hidden');
        $form->setType('action', 'hidden');
        $form->setType('delai_notification', 'hidden');
        $form->setType('avis', 'hidden');
        $form->setType('archive_delai', 'hidden');
        $form->setType('archive_etat', 'hidden');
        $form->setType('archive_accord_tacite', 'hidden');
        $form->setType('archive_avis', 'hidden');
        $form->setType('archive_date_complet', 'hidden');
        $form->setType('archive_date_rejet', 'hidden');
        $form->setType('archive_date_limite', 'hidden');
        $form->setType('archive_date_notification_delai', 'hidden');
        $form->setType('archive_date_decision', 'hidden');
        $form->setType('archive_date_validite', 'hidden');
        $form->setType('archive_date_achevement', 'hidden');
        $form->setType('archive_date_conformite', 'hidden');
        $form->setType('archive_date_chantier', 'hidden');  
    }
    
    function setSelect(&$form, $maj,&$db,$DEBUG) {
        if(file_exists ("../sql/".$db->phptype."/".$this->table.".form.inc.php"))
            include ("../sql/".$db->phptype."/".$this->table.".form.inc.php");

        // *** evenement ***
        $contenu=array();
        // etat du dossier
        $sql="select etat from ".DB_PREFIXE."dossier where dossier ='".
              $this->idxformulaire."'";
        $etat_dossier = $db->getOne($sql);
        $nature_dossier= substr($this->idxformulaire,0,2);
        // recherche des evenement de transition
        $sql= $sql_transition." where transition.etat ='".$etat_dossier."' and (evenement.nature ='".
              $nature_dossier."' or (nature ='T' and nature !='CU')) order by evenement.action";
        
        // *** attention en dur le CU
        

        $res = $db->query($sql);
        if (database::isError($res))
            die($res->getMessage());
        $contenu[0][0]="";
        $contenu[1][0]=_('choisir')." "._('evenement');
        $k=1;
        while ($row=& $res->fetchRow()){
            if($maj==0){ // ajouter
                $contenu[0][$k]=$row[0];
                $contenu[1][$k]=$row[1];
                $k++;
            }else{
                // select hiddenstatic
                $contenu[0][$k]=$row[0];
                $contenu[1][$k]=$row[1];
                $k++;
            }
        }
        $form->setSelect("evenement",$contenu);
        // lien bible_auto  [link]
        $contenu=array();
        $contenu[0]=" automatique ";
        $form->setSelect("bible_auto",$contenu);
        // lien bible1
        $contenu=array();
        $contenu[0]=" Bible ";
        $form->setSelect("bible",$contenu);
        // lien bible2
        $contenu=array();
        $contenu[0]=" Bible ";
        $form->setSelect("bible2",$contenu);
    } // function select

    function setGroupe(&$form,$maj){
        $form->setGroupe('evenement','D');
        $form->setGroupe('libelle','G');
        $form->setGroupe('datecourrier','G');
        $form->setGroupe('lettretype','F');
    }

    function setRegroupe(&$form,$maj){      
        $form->setRegroupe('evenement','D',_('evenement'), "collapsible");
        $form->setRegroupe('libelle','G','');
        $form->setRegroupe('datecourrier','G','');
        $form->setRegroupe('lettretype','F','');
        $form->setRegroupe('complement','D',_('complement'), "collapsible");
        $form->setRegroupe('bible_auto','G','');
        $form->setRegroupe('bible','F','');
        $form->setRegroupe('complement2','D',_('complement2'), "startClosed");
        $form->setRegroupe('bible2','F','');
    }
    
    function setLib(&$form,$maj) {
        parent :: setLib($form,$maj);
        $form->setLib('libelle',' ');
        $form->setLib('bible_auto',"");
        $form->setLib('bible',"");
        $form->setLib('bible2',"");
        $form->setLib('lettretype',"->"._(" courrier "));
        $form->setLib('datecourrier',_(" du "));
    }

    // ==================================================================
    // trigger avant modification données    [trigger before modify data]
    // ==================================================================
    function triggerajouter($id,&$db,$val,$DEBUG) {
        // mise a jour instruction avec evenement
        // [modify instruction with evenement]
        $sql= "select * from ".DB_PREFIXE."evenement where evenement =".$this->valF['evenement'];
        $res = $db->query($sql);
        if (database::isError($res)) die($res->getMessage());
        if ($DEBUG == 1)
            echo " la requete ".$sql." est exécutée<br>";
        while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
            if(isset($row['action']) and !empty($row['action'])) {
                $this->valF['action']=$row['action'];
            } else {
                $this->valF['action']=NULL;
            }
            $this->valF['delai']=$row['delai'];
            if(isset($row['etat']) and !empty($row['etat'])) {
                $this->valF['etat']=$row['etat'];
            } else {
                $this->valF['etat']=NULL;
            }
            $this->valF['accord_tacite']=$row['accord_tacite'];
            $this->valF['delai_notification']=$row['delai_notification'];
            if(isset($row['avis']) and !empty($row['avis'])) {
                $this->valF['avis']=$row['avis'];
            } else {
                $this->valF['avis']=NULL;
            }
            if($row['lettretype']!="")
                $this->valF['lettretype']=$row['lettretype'];
            else
                $this->valF['lettretype']="standard";
        }
        $sql= "select * from ".DB_PREFIXE."dossier where dossier = '".$this->valF['dossier']."'";
        $res = $db->query($sql);
        if (database::isError($res))
            die($res->getMessage());
        if ($DEBUG == 1)
            echo " la requete ".$sql." est exécutée<br>";
        while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
            //
            $this->archive_date_depot = $row['date_depot'];
            // archive en instruction (si suppression)
            $this->valF['archive_delai']=$row['delai'];
            $this->valF['archive_accord_tacite']=$row['accord_tacite'];
            $this->valF['archive_etat']=$row['etat'];
            $this->valF['archive_avis']=$row['avis'];
            // compatibilite pgsql
            if($row['date_complet']!='')
               $this->valF['archive_date_complet']=$row['date_complet'];
            if($row['date_rejet']!='')
               $this->valF['archive_date_rejet']= $row['date_rejet'];
            if($row['date_limite']!='')
               $this->valF['archive_date_limite']= $row['date_limite'];
            if($row['date_notification_delai']!='')
               $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
            if($row['date_decision']!='')
               $this->valF['archive_date_decision']= $row['date_decision'];
            if($row['date_validite']!='')
               $this->valF['archive_date_validite']= $row['date_validite'];
            if($row['date_achevement']!='')
               $this->valF['archive_date_achevement']= $row['date_achevement'];
            if($row['date_chantier']!='')
               $this->valF['archive_date_chantier']= $row['date_chantier'];
            if($row['date_conformite']!='')
               $this->valF['archive_date_conformite']= $row['date_conformite'];  
        }
    }
    
    function regle($regle){
        $temp = explode ("+",$regle);
        //echo '|'.$regle;
        // cas rejet
        if($regle=="null") // 1 dimension -> null
            return null;
        if(sizeof($temp)==1) // 1 dimension
            if($temp[0]=="archive_date_depot") // initialisation avec le depot
                return $this->$regle;
            else // cas general
                return $this->valF[$regle];
        if(sizeof($temp)==2){ // 2 dimensions
            if($temp[0]=="archive_date_depot") //initialisation avec le depot
                if(is_numeric($temp[1]))
                    return  $this->moisdate($this->$temp[0], $temp[1]);  
                else
                    return  $this->moisdate($this->$temp[0], $this->valF[$temp[1]]);
            if($temp[0]=="archive_delai") // majoration de delai
                return  $this->valF[$temp[0]]+$this->valF[$temp[1]];
            // cas general 2 dimensions
            if(is_numeric($temp[1]))
                return $this->moisdate($this->valF[$temp[0]], $temp[1]);
            else               
               return  $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
        }
        if(sizeof($temp)==3){ // 3 dimensions
            // cas date de validite de sursis
            if(is_numeric($temp[1]))
                $temp1 = $this->moisdate($this->valF[$temp[0]], $temp[1]);
            else               
                $temp1 = $this->moisdate($this->valF[$temp[0]], $this->valF[$temp[1]]);
            if(is_numeric($temp[2]))
                return $this->moisdate($temp1, $temp[2]);
            else
                return $this->moisdate($temp1, $this->valF[$temp[2]]);
        }
    }
    
    
    
    // ==================================================================
    // valeur dossier  apres modification   [values dossier after action]
    // ==================================================================
    function triggerajouterapres($id,&$db,$val,$DEBUG) {
        // mise a null au lieu de "" / voir compatibilite mysql
        // voir parametrage CU en dur
        // voir parametrage des actions en dur
        $param=1;
        if($param==1){
        $sql="select * from ".DB_PREFIXE."action where action = '".$this->valF['action']."'";
        $res = $db->query($sql);
        if (database::isError($res))
            die($res->getMessage());
        while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
            if($row['regle_etat']!=''){
                $valF['etat']= $this->regle($row['regle_etat']);
            }
            if($row['regle_delai']!=''){
                $valF['delai']= $this->regle($row['regle_delai']);
            }
            if($row['regle_accord_tacite']!=''){
                $valF['accord_tacite']= $this->regle($row['regle_accord_tacite']);
            }
            if($row['regle_avis']!=''){
                $valF['avis']= $this->regle($row['regle_avis']);
            }
            if($row['regle_date_limite']!=''){
                $valF['date_limite']= $this->regle($row['regle_date_limite']);
            }
            if($row['regle_date_complet']!=''){
                $valF['date_complet']= $this->regle($row['regle_date_complet']);
            }
            if($row['regle_date_notification_delai']!=''){
                $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
            }
            if($row['regle_date_decision']!=''){
                $valF['date_decision']= $this->regle($row['regle_date_decision']);
            }
            if($row['regle_date_rejet']!=''){
                $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
            }
           if($row['regle_date_validite']!=''){
                $valF['date_validite']= $this->regle($row['regle_date_validite']);
            }
           if($row['regle_date_chantier']!=''){
                $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
            }
           if($row['regle_date_achevement']!=''){
                $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
            }
           if($row['regle_date_conformite']!=''){
                $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
            }
        }
        }else{
            switch ($this->valF['action']) {
            case "initialisation" :
                $valF['delai']= $this->valF['delai'];
                $valF['etat']= $this->valF['etat'];
                $valF['accord_tacite']= $this->valF['accord_tacite'];
                // la date_complet est la date de depot
                $valF['date_complet']= $this->archive_date_depot; // ****
                $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);
                $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);
                break;
            case "notification" :
                $valF['delai']= $this->valF['delai'];
                $valF['etat']= $this->valF['etat'];
                $valF['accord_tacite']= $this->valF['accord_tacite'];
                // la date_complet est celle precedemment saisie
                $valF['date_complet']=$this->valF['archive_date_complet'];
                $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);
                $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);
                // la date du courrier ne doit pas etre depasse par rapport au delai de
                // notification    [verify notification date]
                if($this->valF['archive_date_notification_delai']<$this->valF['datecourrier'])
                    $this->msg=$this->msg."<br><img src='../img/erreur.gif'> "._("date_notification_delai")." ".
                    $this->valF['archive_date_notification_delai']." < "._('datecourrier');
                //
                break;
            case "retour" :
                $valF['delai']= $this->valF['delai'];
                $valF['etat']= $this->valF['etat'];
                $valF['accord_tacite']= $this->valF['accord_tacite'];
                // la date_complet est celle de l evenement
                $valF['date_complet']= $this->valF['datecourrier'];
                $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);
                $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);
                break;
            case "rejet" :
                //$valF['delai']=0;   // *** delai a garder pour etat dpc
                $valF['etat']= $this->valF['etat'];
                $valF['accord_tacite']= $this->valF['accord_tacite'];
                // la date rejet est initialisee
                $valF['date_rejet']= $this->valF['datecourrier'];
                // les dates de depart et fin d instruction sont annulées
                $valF['date_limite'] =null;
                $valF['date_notification_delai'] =null;
                $valF['date_complet']=null;
                break;
            case "majoration" :
                $valF['delai']= $this->valF['archive_delai']+$this->valF['delai'];
                $valF['etat']= $this->valF['etat'];
                $valF['accord_tacite']= $this->valF['accord_tacite'];
                $valF['date_complet']=$this->valF['archive_date_complet'];
                // majoration de la date limite
                $valF['date_limite'] =  $this->moisdate($valF['date_complet'],$valF['delai']);
                $valF['date_notification_delai'] =  $this->moisdate($valF['date_complet'],1);
                // la date du courrier ne doit pas etre depasse par rapport au delai de
                // notification
                if($this->valF['archive_date_notification_delai']<$this->valF['datecourrier'])
                    $this->msg=$this->msg."<br><img src='../img/erreur.gif'>"._("date_notification_delai").
                $this->valF['archive_date_notification_delai']." < "._('datecourrier');
                break;
            case "acceptation" :
                $valF['etat']= $this->valF['etat'];
                $valF['date_decision']= $this->valF['datecourrier'];
                $valF['avis']= $this->valF['avis'];
                // date de validite = date de l evenement + delai
                $valF['date_validite'] =  $this->moisdate($this->valF['datecourrier'],$this->valF['delai']);
                   break;
            case "refus" :
                $valF['etat']= $this->valF['etat'];
                $valF['date_decision']= $this->valF['datecourrier'];
                $valF['avis']= $this->valF['avis'];
                break;
            case "prolongation" :
                $valF['date_validite'] =  $this->moisdate($this->valF['archive_date_validite'],$this->valF['delai']);
                break;
            case "sursis" :
                $valF['date_limite'] =  $this->moisdate($this->valF['datecourrier'],$this->valF['delai']);
                $valF['etat']= $this->valF['etat'];
                $valF['accord_tacite']= $this->valF['accord_tacite'];
                $valF['avis']= $this->valF['avis'];
                $valF['date_decision']= $this->valF['datecourrier'];
                $temp = $valF['date_limite'];
                $valF['date_validite']= $this->moisdate($temp,2);
                break;
            case "execution" :
                $valF['etat']= $this->valF['etat'];
                $valF['date_chantier'] =  $this->valF['datecourrier'];
                //echo $this->msg=$this->msg.$valF['date_chantier']."";
                break;
            case "achevement" :
                $valF['etat']= $this->valF['etat'];
                $valF['date_achevement'] = $this->valF['datecourrier'];
                break;
            case "archivage" :
                $valF['etat']= $this->valF['etat'];
                $valF['date_conformite'] = $this->valF['datecourrier'];
                break;
    
            default:
            if ($this->valF['etat']!="")
               $valF['etat']= $this->valF['etat'];
            }// end switch
        } // end param
        if($valF!=""){
            $cle= " dossier = '".$this->valF['dossier']."'";
            $res1= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);
            if (database::isError($res1))
                die($res->getMessage());
            if ($DEBUG == 1)
              echo "La requête de mise à jour est effectuée.<br>";
            $this->msg=$this->msg."<br>"._('enregistrement')." ".
            $this->valF['dossier']." "._('table')." dossier [".
            $db->affectedRows()." "._('enregistrement').
            " "._('mis_a_jour')."]" ;
        }
    }

    function triggermodifierapres($id,&$db,$val,$DEBUG) {
        /*
         * cette fonction apour objet de permettre de modifier la date courrier 
        */ 
        $valF=array();
        $sql= "select action from ".DB_PREFIXE."evenement where evenement =".$this->valF['evenement'];
        $action = $db->getOne($sql);
        if (database::isError($action)) die($action->getMessage().$sql);
        $sql="select * from ".DB_PREFIXE."action where action = '".$action."'";
        $res = $db->query($sql);
        if (database::isError($res)) die($res->getMessage().$sql);
        while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
            // application des regles sur le courrier + delai
            if(preg_match("/datecourrier/",$row['regle_date_limite'])){
                $valF['date_limite']= $this->regle($row['regle_date_limite']);
            }
            if(preg_match("/datecourrier/",$row['regle_date_complet'])){
                $valF['date_complet']= $this->regle($row['regle_date_complet']);
            }
            if(preg_match("/datecourrier/",$row['regle_date_notification_delai'])){
                $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai']);
            }
            if(preg_match("/datecourrier/",$row['regle_date_decision'])){
                $valF['date_decision']= $this->regle($row['regle_date_decision']);
            }
            if(preg_match("/datecourrier/",$row['regle_date_rejet'])){
                $valF['date_rejet']= $this->regle($row['regle_date_rejet']);
            }
            if(preg_match("/datecourrier/",$row['regle_date_validite'])){
                $valF['date_validite']= $this->regle($row['regle_date_validite']);
            }
            if(preg_match("/datecourrier/",$row['regle_date_chantier'])){
                $valF['date_chantier']= $this->regle($row['regle_date_chantier']);
            }
            if(preg_match("/datecourrier/",$row['regle_date_achevement'])){
                $valF['date_achevement']= $this->regle($row['regle_date_achevement']);
            }
            if(preg_match("/datecourrier/",$row['regle_date_conformite'])){
                $valF['date_conformite']= $this->regle($row['regle_date_conformite']);
            }
        } // while
        if($valF!=array()){
            $cle= " dossier = '".$this->valF['dossier']."'";
            $res1= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);
            if (database::isError($res1))
                die($res->getMessage());
            if ($DEBUG == 1)
              echo "La requête de mise à jour est effectuée.<br>";
            $this->msg=$this->msg."<br>"._('enregistrement')." ".
            $this->valF['dossier']." "._('table')." dossier [".
            $db->affectedRows()." "._('enregistrement').
            " "._('mis_a_jour')."]" ;
        }
    } 


    
    // trigger before delete
    function triggersupprimer($id,&$db,$val,$DEBUG) {
        // archive en instruction (si suppression) [archive if delete instruction]
        $valF['delai']=$val['archive_delai'];
        $valF['accord_tacite']=$val['archive_accord_tacite'];
        $valF['etat']=$val['archive_etat'];
        if($val['archive_avis']=='')
            $valF['avis']= null;
        else
            $valF['avis']=$val['archive_avis'];
        // if= compatibilite pgsql
        if($val['archive_date_complet']!='')
            $valF['date_complet']=$val['archive_date_complet'];
        if($val['archive_date_rejet']!='')
            $valF['date_rejet']= $val['archive_date_rejet'];
        if($val['archive_date_limite']!='')
            $valF['date_limite']= $val['archive_date_limite'];
        if($val['archive_date_notification_delai']!='')
            $valF['date_notification_delai']= $val['archive_date_notification_delai'];
        if($val['archive_date_decision']!='') 
            $valF['date_decision']= $val['archive_date_decision'];
        if($val['archive_date_validite']!='')
            $valF['date_validite']= $val['archive_date_validite'];
        if($val['archive_date_achevement']!='')
            $valF['date_achevement']= $val['archive_date_achevement'];
        if($val['archive_date_chantier']!='')
            $valF['date_chantier']= $val['archive_date_chantier'];
        if($val['archive_date_conformite']!='')
            $valF['date_conformite']= $val['archive_date_conformite'];
        
        $cle= " dossier = '".$val['dossier']."'";
        $res= $db->autoExecute(DB_PREFIXE.'dossier',$valF,DB_AUTOQUERY_UPDATE,$cle);
        if (database::isError($res))
            die($res->getMessage());
        else{
            if ($DEBUG == 1)
                echo "La requête de mise à jour est effectuée.<br>";
        }
    }
    // =============================================
    // calcul de date avec ajout de mois (delais)
    // [add months (delay) and calculation final date]
    // LIMITE DE LA FONCTION si delai >24 MOIS
    // [limit : delay < 24 month]
    // =============================================
    function moisdate($date,$delaimois) {
       $temp = explode("-" , $date);
       $jour = (int) $temp[2];
       $mois = (int) $temp[1];
       $annee = (int) $temp[0];
       // calcul si delai superieur à 12 (limite 24) [delay > 24 month]
       if($delaimois>=12){
           $delaimois=$delaimois-12;
           $annee=$annee+1;
       }
       if($delaimois>=12){
           $delaimois=$delaimois-12;
           $annee=$annee+1;
       }
       // mois
       $mois=$mois+$delaimois;
       // calcul mois annee  [calculation number of years if > 12 month]
       // nb de mois > à 12
       if ($mois>12){
           $mois=$mois-12;
           $annee=$annee+1;
       }
       // Calcul du nombre de jours dans le mois sélectionné [calculation number of days]
        switch($mois) {
            case "2":
              if ($annee % 4 == 0 && $annee % 100 != 0 || $annee % 400 == 0)
                  $jourmax = 29;
              else
                  $jourmax = 28;
            break;
            case "4":
            case "6":
            case "9":
            case "11":
             $jourmax = 30;
             break;
            default:
             $jourmax = 31;
        }
        if ($jour > $jourmax)
           $jour = $jourmax;
    //$dateretour=$annee."-".$mois."-".$jour;
    return $annee."-".$mois."-".$jour ;
    }

}// fin classe
?>
