<?php

/**
 * Classe permettant de gérer le module de suivi des documents rattachés
 *
 */
class DocRattache
{

    // Définition des propriétés d'un document rattaché
    protected $typeItem;

    protected $tmpName;
 // Type d'item auquel le doc est rattaché ex : DA, CDE...
    protected $codeItem;
 // Code de l'item de rattachement ex : N°200800054
    protected $critere;
 // critere secondaire
    protected $contexte;
 // Contexte dans lequel les documents rattachés sont appelé, par défaut il s'agit du suivi des documents 'SUIVI_DOC'
    protected $numDoc;
 // Numéro du document
    protected $titreDoc;
 // Titre du doc
    protected $typeDoc;
 // Type de doc
    protected $fichier;
 // Chemin d'accès au fichier à enregistrer
    protected $nomFichier;
 // Nom original du fichier
    protected $dateParution;
 // date de parution du document
    protected $dateValidite;
 // date de validité du document
    protected $auteur;
 // Auteur à l'origine du document
    protected $centre;
 // Centre de publication du doc
    protected $commentaire;
 // Commentaire associé au doc
                            
    // Gestion Fournisseur
    protected $categorie;
 // Catégorie (gestion fournisseur)
    protected $doc_canevas;
 // document issu d'un canevas (gestion fournisseur)
    protected $id_doc_cat;
 // id du document dans la catégorie
    protected $NO_ORDRE;
 // numéro d'ordre dans DOC_ATT
    protected $NePasRelancer;
 // Ne pas relancer (gestion fournisseur)
    protected $PJCommande;
 // Ajouté en PJ des cdes (gestion fournisseur)
    protected $Modifier;
 // Mode modification ?
    protected $AvecHistorisation;
 // Historisation ?
    protected $urlretour = null;

    protected $file_name;

    protected $path_info;

    protected $nom_fichier;

    protected $error_pj; 

    public static $array_correspondance = array(
        TypeSuivi::CDE => 'CA_ENTET',
        TypeSuivi::DA => 'DA_ENTET',
        'AO' => 'AO_ENTET',
        'BR' => 'BR_RECEP',
        TypeSuivi::BAP => 'FAC_ENT',
        'CENTRE' => 'CENTRE',
        'FOURNISS' => 'FOURNISS',
        TypeSuivi::BS => 'BS_ENTET',
        TypeSuivi::AO => 'AO_ENTET'
    );

    /**
     * Constructeur de la classe
     *
     * @param string $typeItem
     *            valeur COD_FOURN (index item) CRITERE_REGROUP
     * @param string $codeItem
     */
    public function __construct($typeItem, $arrayItem, $contexte = 'suiviDoc', $numDoc = null)
    {
        $this->typeItem = $typeItem;
        if ($contexte == 'DOA' || $contexte == 'DOAAction') {
            $this->codeItem = '';
            $this->critere = '';
        } else if (is_array($arrayItem)) {
            $this->codeItem = $arrayItem['COD_FOURN'];
            $this->critere = $arrayItem['CRITERE_REGROUP'];
        } else {
            $this->codeItem = $arrayItem;
            $this->critere = '';
        }
        $this->contexte = $contexte;
        
        $this->numDoc = $numDoc;
        $this->Modifier = false;
        $this->categorie = '';
        $this->doc_canevas = '';

        $this->error_pj = [ '!errorTxt' => '',
                            '!errorMsg' => 1,
                        ];
    }

    public function setUrlRetour($urlRetour)
    {
        $this->urlretour = $urlRetour;
    }

    public function getUrlRetour()
    {
        return $this->urlretour;
    }

    public function getFile()
    {
        return $this->fichier;
    }
    
    public function SetModifier($Modifier)
    {
        $this->Modifier = BoolSql($Modifier);
    }

    public function SetCategorie(& $categorie)
    {
        $this->categorie = $categorie;
    }

    public function SetDocCanevas(& $doc_canevas)
    {
        $this->doc_canevas = $doc_canevas;
    }

    /**
     * Fonction construisant le tableau de données qui associé à la xsl permettra l'affichage du formulaire
     * d'enregistrement du document rattaché
     *
     * @return array
     */
    public function &buildXmlformForXsl($id_bloc = null)
    {
        $array_xml = array(); // Initialisation du tableau de données qui sera renvoyé
                              // On définit la liste de correspondance entre le type d'item et le libellé de l'item
        $array_type_item = array(
            'CA_ENTET' => trad(TypeSuivi::CDE),
            'DA_ENTET' => trad(TypeSuivi::DA),
            'AO_ENTET' => trad(TypeSuivi::AO),
            'BR_RECEP' => trad(TypeSuivi::BR),
            'FAC_ENT' => trad(TypeSuivi::BAP),
            'CENTRE' => trad('Centre'),
            'FOURNISS' => trad('Fournisseur'),
            'D' => trad('DOA'),
            'GEST_FOURNISS' => trad('Fournisseur'),
            'XT_JOURN' => trad('Suivi d\'interface')
        );
        
        $array_xml['docAtt']['typeItem'] = $this->typeItem;
        $array_xml['docAtt']['codeItem'] = $this->codeItem;
        $array_xml['docAtt']['critere'] = $this->critere;
        if (! is_null($id_bloc)) {
            $array_xml['docAtt']['id_bloc'] = $id_bloc;
        }
        
        // Dosssier 25665
        if ($this->typeItem == 'FOURNISS' || $this->typeItem == 'GEST_FOURNISS') {
            $clFour = new Fournisseur($this->codeItem);
            $libelleCode = ', ' . ((is_null($clFour->getEC()) || $clFour->getEC() == '') ? $clFour->getRS() : $clFour->getEC()) . ' (' . $this->codeItem . ')';
        } else {
            $libelleCode = trad(', code N°') .' '. $this->codeItem;
        }
 
        // On définit le libellé de l'entête du formulaire de création de doc rattaché
        if($this->codeItem != '')
        {
            $array_xml['docAtt']['libelleItem'] = $array_type_item[$this->typeItem] . $libelleCode;
        }


        // Dossier 25665, si fournisseur il fait ajouter le libellé du fournisseur
        
        // On initialise la date de parution avec la date du jour
        if($this->dateParution)
            $array_xml['docAtt']['dateParution'] = $this->dateParution;
        else
            $array_xml['docAtt']['dateParution'] = convertDateSqlToFr(Date('Ymd'));
                
        
        // On définit les 2 actions de sélection de date avec le calendrier pour les dates de parution et de validité
        $array_xml['docAtt']['selectDateParution'] = 'CL.show(null,document.form_doc_att.dateParution,null,-80);';
        $array_xml['docAtt']['selectDateValidite'] = 'CL.show(null,document.form_doc_att.dateValidite,null,-80);';
        
        // Le champ auteur est initialisé avec le login de l'utilisateur connecté
        if($this->auteur)
            $array_xml['docAtt']['auteur']['value'] = $this->auteur;
        else
            $array_xml['docAtt']['auteur']['value'] = $_SESSION['Session_Login'];
                
        
        // On définit l'action de zoom sur le champ auteur
        $array_xml['docAtt']['auteur']['zoom'] = PopupBrowse::initZoomByCodeTable('AUTEUR', 'form_doc_att', 'auteur', $_SESSION['Session_SocUsr']);
        
        // Le champ auteur est initialisé avec le centre émetteur de la session utilisateur
        if($this->centre)
            $array_xml['docAtt']['centre']['value'] = $this->centre ;
        else
            $array_xml['docAtt']['centre']['value'] = $_SESSION['Session_CodeCtrEmetteur'];

        $array_xml['docAtt']['title']['value'] = $this->titreDoc;
        $array_xml['docAtt']['dateValidite'] = $this->dateValidite;
        $array_xml['textarea'] = $this->commentaire;                
        
        // On définit l'action de zoom sur le champ centre
        $array_xml['docAtt']['centre']['zoom'] = PopupBrowse::initZoomByCodeTable('CENTRE', 'form_doc_att', 'centre', '');
        
        // On définit la liste des types de document
        $array_xml['docAtt']['typeDoc'] = TypeSuivi::getListeTypePJ(true, false);
        
        if($this->typeDoc)
            $array_xml['docAtt']['typeDocDefault'] = $this->typeDoc;
        else
            $array_xml['docAtt']['typeDocDefault'] = 'PJ';
                
        $array_xml['docAtt']['contexte'] = $this->contexte;

        $array_xml['docAtt']['errorPJ'] = $this->error_pj;
        
        
        // On définit les 2 actions disponibles sur le formulaire : l'enregistrement et la fermeture de la popup contenant le formulaire
        
        // Ajout d'un strtoupper() car on a des fois suiviDoc, d'autres fois suiviDOC
        if (strtoupper('suiviDoc') == strtoupper($this->contexte)) { // Lorsque la création de document rattaché est appelée depuis le suivi de document
            $array_xml['docAtt']['actionSubmit'] = "suivi_doc.php?action=enregistrerDocAtt&contexte={$this->contexte}" . (is_null($this->urlretour) ? '' : '&urlRet=' . urlencode($this->urlretour));
            $array_xml['docAtt']['enregistrer'] = "TraiteUrl('suivi_doc.php?action=controlerDocAtt" . "&contexte={$this->contexte}" . (is_null($this->urlretour) ? '' : '&urlRet=' . urlencode($this->urlretour)) . "',document.forms.form_doc_att.typeItem);";
        } elseif ('ajouterDocBlocFrs' == $this->contexte || 'modifierDocBlocFrs' == $this->contexte) { // Lorsque la création de document rattaché est appelée depuis les onglets "Documents rattachés" du récapitulatif panier
            $array_xml['docAtt']['actionSubmit'] = "ajout_doc_rattaches.php?action=enregistrerDocAtt&id_bloc=$id_bloc&contexte={$this->contexte}&id_doc=$this->numDoc";
            $array_xml['docAtt']['enregistrer'] = "TraiteUrl('ajout_doc_rattaches.php?action=controlerDocAtt&contexte={$this->contexte}', document.forms.form_doc_att.typeItem);";
        } elseif ('DOA' == $this->contexte) {
            $array_xml['docAtt']['actionSubmit'] = "ajout_doc_rattaches.php?action=enregistrerDocAtt&id_bloc=$id_bloc&contexte={$this->contexte}&id_doc=$this->numDoc" . (is_null($this->urlretour) ? '' : '&urlRet=' . urlencode($this->urlretour));
            $array_xml['docAtt']['enregistrer'] = "TraiteUrl('ajout_doc_rattaches.php?action=controlerDocAtt&contexte={$this->contexte}" . (is_null($this->urlretour) ? '' : '&urlRet=' . urlencode($this->urlretour)) . "', document.forms.form_doc_att.typeItem);";
        } elseif ('ajoutDocAttGen' == $this->contexte) {
            $array_xml['docAtt']['actionSubmit'] = "ajout_doc_rattaches.php?action=enregistrerDocAtt&id_bloc=$id_bloc&contexte={$this->contexte}&id_doc=$this->numDoc" . (is_null($this->urlretour) ? '' : '&urlRet=' . urlencode($this->urlretour));
            $array_xml['docAtt']['enregistrer'] = "TraiteUrl('ajout_doc_rattaches.php?action=controlerDocAtt&contexte={$this->contexte}" . (is_null($this->urlretour) ? '' : '&urlRet=' . urlencode($this->urlretour)) . "', document.forms.form_doc_att.typeItem);";
        } elseif ('DOAAction' == $this->contexte) {
            $array_xml['docAtt']['actionSubmit'] = "ajout_doc_rattaches.php?action=enregistrerDocAtt&id_bloc=$id_bloc&contexte={$this->contexte}&id_doc=$this->numDoc";
            $array_xml['docAtt']['enregistrer'] = "TraiteUrl('ajout_doc_rattaches.php?action=controlerDocAtt&contexte={$this->contexte}', document.forms.form_doc_att.typeItem);";
        } elseif ('GEST_FOURNISS' == $this->contexte) {
            // On prépare la liste des documents obligatoires
            $options[] = array(
                '!value' => '',
                '!texte' => Trad('Choisir dans la liste') . ' :'
            );
            
            // On prépare les libellé des catégories
            $CODE_TABLE = 'FOURNISS';
            $reqSqlcategories = SqlGestFourniss::rqGetFournissListeCategories($CODE_TABLE)->TrouveTous();
            if (is_array($reqSqlcategories))
                foreach ($reqSqlcategories as $values)
                    $options[] = array(
                        '!value' => $values['CODE_CAT'],
                        '!texte' => $values['LIBELLE_CAT']
                    );
            
            $array_xml['docAtt']['GEST_FOURNISS']['liste']['options'] = $options;
            $array_xml['docAtt']['actionSubmit'] = "ajout_doc_rattaches.php?action=enregistrerDocAtt&id_bloc=$id_bloc&contexte={$this->contexte}&id_doc=$this->numDoc";
            $array_xml['docAtt']['enregistrer'] = "TraiteUrl('ajout_doc_rattaches.php?action=controlerDocAtt&contexte={$this->contexte}', document.forms.form_doc_att.typeItem);";
        }
        
        $array_xml['popup_title'] = trad("Ajout d'un document rattaché");
        
        // Spec 3752
        // EDP 30/12/2016 Cette fonctionnalité doit être globale pas que gestion fournisseur
        if (! ('ajouterDocBlocFrs' == $this->contexte || 'modifierDocBlocFrs' == $this->contexte)) { // Si on n'est pas dans le contexte panier !!! uniquement l'ajout via le recap panier et pas les popup tierces
            if ($this->typeItem == 'CENTRE' || $this->typeItem == 'FOURNISS' || $this->typeItem == 'GRPFOU' || $this->typeItem == 'SOCIETE' || 'GEST_FOURNISS' == $this->contexte) {
                $array_xml['docAtt']['MasquerPjCdeDocRat'] = Param::AllParamsGetValue('MASQUER_PJ_CDE_DOCRAT');
            }
        }
        
        return $array_xml;
    }


    /**
     * Fonction initialisant l'ensemble des propriétés du document rattaché
     *
     * @param string $typeItem
     * @param string $codeItem
     * @param string $titreDoc
     * @param string $typeDoc
     * @param string $fichier
     * @param string $dateParution
     * @param string $dateValidite
     * @param string $auteur
     * @param string $centre
     * @param string $commentaire
     */
    public function initDocRattache($typeItem, $arrayItem, $titreDoc, $typeDoc, $fichier, $dateParution, $dateValidite, $auteur, $centre, $commentaire, $NO_ORDRE = '', $doc_canevas = '', $NePasRelancer = false, $PJCommande = false, $Modifier = false, $AvecHistorisation = false)
    {
        $this->typeItem = $typeItem;
        
        if (is_array($arrayItem)) {
            $this->codeItem = $arrayItem['COD_FOURN'];
            $this->critere = $arrayItem['CRITERE_REGROUP'];
        } else {
            $this->codeItem = $arrayItem;
            $this->critere = '';
        }
        
        if ('' == $doc_canevas) {
            $this->titreDoc = $titreDoc;
            $this->id_doc_cat = '';
        } else {
            $infos = explode('|', $doc_canevas);
            $categorie = $infos[0];
            $this->id_doc_cat = $infos[1];
            
            $infos_tmp = SqlGestFourniss::rqGetFournissListeDocsRattaches($categorie, $this->id_doc_cat)->Trouve1();
            $this->titreDoc = $infos_tmp['TITRE'];
            $this->categorie = $categorie;
        }
        
        $this->typeDoc = $typeDoc;
        $this->fichier = $fichier;
        $this->dateParution = $dateParution;
        $this->dateValidite = $dateValidite;
        $this->auteur = $auteur;
        $this->centre = $centre;
        $this->commentaire = $commentaire;
        
        $this->NO_ORDRE = $NO_ORDRE;
        $this->NePasRelancer = BoolSql($NePasRelancer);
        $this->PJCommande = BoolSql($PJCommande);
        $this->Modifier = BoolSql($Modifier);
        $this->AvecHistorisation = BoolSql($AvecHistorisation);
    }

    public static function toByteSize($p_sFormatted) {
        $aUnits = array(''=>0, 'K'=>1, 'M'=>2, 'G'=>3, 'T'=>4, 'P'=>5, 'E'=>6, 'Z'=>7, 'Y'=>8);
        $sUnit = strtoupper(trim(substr($p_sFormatted, -1)));
        if (intval($sUnit) !== 0) {
            $sUnit = 'B';
        }
        if (!in_array($sUnit, array_keys($aUnits))) {
            return false;
        }
        $iUnits = trim(substr($p_sFormatted, 0, strlen($p_sFormatted) - 2));
        if (!intval($iUnits) == $iUnits) {
            return false;
        }
        return $iUnits * pow(1024, $aUnits[$sUnit]);
    }
    
    /**
     * Fonction réalisant le contrôle de saisi des champs du formulaire de création du document rattaché
     *
     * @param string $typeItem
     * @param string $codeItem
     * @param string $titreDoc
     * @param string $typeDoc
     * @param string $fichier
     * @param string $dateParution
     * @param string $dateValidite
     * @param string $auteur
     * @param string $centre
     * @param string $commentaire
     * @return array
     */
    public function controleDocRattache($typeItem, $titreDoc, $typeDoc, $fichier, $dateParution, $dateValidite, $auteur, $centre, $commentaire)
    {
        $validation = true; // Initialisation du flag indiquant si le contrôle est OK ou non
        $message = ''; // Initialisation du message qui sera affiché en cas d'erreur de saisie
        
        if ('' == $typeItem)
            $message = trad('Le document rattaché doit être lié à un type d\'item');
        
            //print_r('____' . $$this->contexte); exit; 

        if ('' == $message)
            if ((! is_null($fichier) && '' == $fichier) && ! ('GEST_FOURNISS' == $this->contexte && $this->Modifier))
                $message = trad('Le fichier saisi est incorrect, veuillez vérifier');
        
        if ('' == $message)
            if ('' == $titreDoc)
                $message = trad('Le titre du document rattaché est obligatoire');
        
        if ('' == $message)
            if ('' == $typeDoc)
                $message = trad('Le type du document rattaché est obligatoire');
        
        if ('' == $message)
            if ('' != $dateParution && ! ControleSaisie::isDateValide(convertDateUserToSql($dateParution)))
                $message = trad('La date de parution est incorrecte');
        
        if ('' == $message)
            if ('' != $dateValidite && ! ControleSaisie::isDateValide(convertDateUserToSql($dateValidite)))
                $message = trad('La date de validite est incorrecte');
        
        if ('' == $message)
            if ('' != $auteur) {
                $popup_id = 'AUTEURS';
                $array_search['DATA_STRICT'] = $auteur;
                $r = SearchForBrowse::search($popup_id, $array_search);
                
                if (count($r['resultat']) == 0)
                    $message = trad('L\'auteur saisie n\'existe pas, veuillez vérifier');
            }
        
        if ('' == $message)
            if ('' != $centre) {
                $popup_id = 'CENTRE';
                $array_search['DATA_STRICT'] = $centre;
                $r = SearchForBrowse::search($popup_id, $array_search);
                if (count($r['resultat']) == 0)
                    $message = trad('Le centre saisie n\'existe pas, veuillez vérifier');
            }
        
        if ('' == $message)
            if (mb_strlen($commentaire) > 3000)
                $message = trad('La zone commentaire est limitée à 3000 caractères veuillez vérifier');
        
        if ('' == $message) {
            // Est-ce qu'il existe un document du canevas correspondant?
            $idTmp = '';
            $reqSqlVerif = SqlGestFourniss::rqGetFournissListeDocsRattaches($this->categorie, $idTmp, $titreDoc)->Trouve1();
            // Le fournisseur est-il lié à un partenaire?
            $fournisseurLieALG = GestFourniss::IsFournisseurLieALG($this->codeItem);
            
            if ('' == $this->doc_canevas) {
                // Nous ne sommes pas sur un document du canevas
                if (! $this->Modifier) {
                    // Nous sommes en mode ajout, on vérifie que le titre ne correspond pas à un document géré par un partenaire.
                    
                    if (is_array($reqSqlVerif)) {
                        if ('' !== $reqSqlVerif['CODEPARTENAIRE'])
                            $message = trad('Vous ne pouvez pas ajouter un document géré par un partenaire.');
                        else
                            $message = trad('Vous ne pouvez pas ajouter un document du canevas de cette manière. Vous devez utiliser le bouton "Ajouter" de la ligne correspondante');
                    }
                }
            } else {
                // Nous sommes sur un document du canevas
                // Est-ce qu'il est géré par un partenaire?
                if ((is_array($reqSqlVerif) && '' !== $reqSqlVerif['CODEPARTENAIRE']) && $fournisseurLieALG)
                    $message = trad('Vous ne pouvez pas ajouter un document géré par un partenaire.');
            }
        }
        
        $result['is_valide'] = ('' == $message);
        $result['message'] = $message;
        
        return $result;
    }

    public function enregistrerIncident($mode, $codeFournisseur, $commentaire, $num_cde, $niveau, $code_inc,$codeBr = null, $description = null, $dateCreatCde = null)
    {
        $xml =  '<IncFournisseurIN LngUtilisation="">
                    <Utilisateur>'.$_SESSION['Session_Login'].'</Utilisateur>
                    <CodeFournisseur>'.$codeFournisseur.'</CodeFournisseur>
                    <Niveau>'.$niveau.'</Niveau>
                    <DateOccurence>'.date("Ymd").'</DateOccurence>
                    <CodeIncid>'.$code_inc.'</CodeIncid>
                    <Description>'.$commentaire.'</Description>
                    <CodeCde>'.$num_cde.'</CodeCde>
                    <LigCA></LigCA>
                    <CodeBR>'.$codeBr.'</CodeBR>
                    <LigBR></LigBR>
                    <CodeArticle></CodeArticle>
                    <DesignArticle></DesignArticle>
                    <Qte></Qte>
                    <DateLiv></DateLiv>
                    <DateCreat>'.($dateCreatCde ?? '').'</DateCreat>
                    <MemoComm>'.($description ?? '').'</MemoComm>
                </IncFournisseurIN>
      ';

        return Wsdl::wsdlCallGen('Oxaproc_Gen.wsdl', 'OXAPRC_FRN_INCIDENT', $xml);
    }
         


    public function BrTempUpload($repertoirePj = false, $inSerialize = false, $array_serialize = null, &$extension = null)
    {
        
        if( $inSerialize == false )
        {
            $fichierExiste = isset($_FILES) && array_key_exists('fichierDoc', $_FILES) && array_key_exists('tmp_name', $_FILES['fichierDoc']) && '' != $_FILES['fichierDoc']['tmp_name'];
        }
        else
        {
           
            $fichierExiste = isset($array_serialize) && array_key_exists('fichierDoc', $array_serialize) && array_key_exists('tmp_name', $array_serialize['fichierDoc']) && '' != $array_serialize['fichierDoc']['tmp_name'];
        }
        
        // Suite remonté BUG HVE correction rapide car la class de gestion ne prend pas bien la notion tmp ou fic_pj WARNING le panier c'est toujours fic_pj
        // Sauf que ajoutDocAttGen gere a la fois des documents d'origine tmp et aussi le panier => bidouille de la ligne qui suit EDP le 24/08/2016
        if ($this->contexte == 'ajouterDocBlocFrs' || $this->contexte == 'modifierDocBlocFrs')
            $repertoirePj = true;
        
        if ($fichierExiste)
        {
            // Cette condition est rajouter Dans le cas ou on veux rajouter des docuements rattaché dans la création de BR
            if($inSerialize == false )
            {
                $file_tmp = $_FILES['fichierDoc']['tmp_name']; // Nom du fichier temporaire copié par PHP
                $file_name = $_FILES['fichierDoc']['name'];
                $this->setFileName($_FILES['fichierDoc']['name']); // Nom du fichier tel qu'il a été saisi
                $path_info = pathinfo($file_name); // Tableau contenant des informations sur le fichier saisi
                $this->SetPathInfo(pathinfo($file_name));
               
            }
            else
            {
                $file_tmp = $array_serialize['fichierDoc']['tmp_name']; // Nom du fichier temporaire copié par PHP
                $file_name = $array_serialize['fichierDoc']['name']; // Nom du fichier tel qu'il a été saisi
                $path_info = pathinfo($file_name); // Tableau contenant des informations sur le fichier saisi
            }


            
            list ($void, $sec) = explode(' ', microtime());
            $new_name = 'file_' . $sec . '.' . $path_info['extension']; // On définit un nouveau nom pour le fichier qui sera unique
            $extension = $path_info['extension'];

            $this->setNomFichier($new_name);
            if ($repertoirePj) {
                $racine = Fichier::getCheminPJ();
                $new_name = Fichier::getExtensionCheminPJ() . $new_name;
            } else {
                $racine = Fichier::getCheminTmp();
            }
        }
        XmlEntities($this->titreDoc);
        XmlEntities($this->nomFichier);
        XmlEntities($this->commentaire);
        XmlEntities($file_name);
        
        // On convertit les 2 dates : validité et parution au format xml aaaa-mm-jj
        // $this->dateParution = convertDateUserToDateXML($this->dateParution);
        // $this->dateValidite = convertDateUserToDateXML($this->dateValidite);
        
        // print_r($file_tmp); exit; 

  // print_r($file_tmp. '_________'.  $racine . $new_name); exit; 
   //move_uploaded_file($file_tmp, $racine . $new_name);
        $bool = false;
        $moove = '';
       //echo $new_name;
         if(move_uploaded_file($file_tmp, $racine . $new_name))
        {
            $bool= true;
            $moove= 'move_uploaded_file';
        }else if( copy ( $file_tmp, $racine . $new_name ))
        {
                $bool= true;
                $moove= 'copy';
        }
        // if($bool) echo 'yes '.$moove. $file_tmp, $racine . $new_name; else echo 'no dans : '.$moove. $file_tmp, $racine . $new_name ;
        // if(file_exists($file_tmp)) echo "okokkkkkk";
        return $file_tmp;
        // exit;
        if ( $bool) {  
      
            
        //   print_r($envoi); exit; 
            // On appelle le wsdl d'enregistrement du doc rattaché
            return true;
        }                // Si le fichier n'a pas pu être copié alors on affiche l'erreur à l'utilisateur
        else
            return array(
                'Statut' => 'E',
                'MsgErreur' => trad('Une erreur est survenue lors de la copie du fichier')
            );

     
            

        

    }

    /**
     * Fonction réalisant l'enregsitrement du document rattaché avec un appel au wsdl
     *
     * @return array
     */
    public function enregistrerDocRattache($repertoirePj = false, $inSerialize = false, $array_serialize = null)
    {
        if( $inSerialize == false )
        {
            $fichierExiste = isset($_FILES) && array_key_exists('fichierDoc', $_FILES) && array_key_exists('tmp_name', $_FILES['fichierDoc']) && '' != $_FILES['fichierDoc']['tmp_name'];
        }
        else
        {
           
            $fichierExiste = isset($array_serialize) && array_key_exists('fichierDoc', $array_serialize) && array_key_exists('tmp_name', $array_serialize['fichierDoc']) && '' != $array_serialize['fichierDoc']['tmp_name'];
        }
        
        // Suite remonté BUG HVE correction rapide car la class de gestion ne prend pas bien la notion tmp ou fic_pj WARNING le panier c'est toujours fic_pj
        // Sauf que ajoutDocAttGen gere a la fois des documents d'origine tmp et aussi le panier => bidouille de la ligne qui suit EDP le 24/08/2016
        if ($this->contexte == 'ajouterDocBlocFrs' || $this->contexte == 'modifierDocBlocFrs')
            $repertoirePj = true;
        
        if ($fichierExiste)
        {
            // Cette condition est rajouter Dans le cas ou on veux rajouter des docuements rattaché dans la création de BR
            if($inSerialize == false )
            {
                $file_tmp = $_FILES['fichierDoc']['tmp_name']; // Nom du fichier temporaire copié par PHP
                $file_name = $_FILES['fichierDoc']['name']; // Nom du fichier tel qu'il a été saisi
                $path_info = pathinfo($file_name); // Tableau contenant des informations sur le fichier saisi
                $file_size = $_FILES['fichierDoc']['size']; // taille du fichier
            }
            else
            {
                $file_tmp = $array_serialize['fichierDoc']['tmp_name']; // Nom du fichier temporaire copié par PHP
                $file_name = $this->file_name; // Nom du fichier tel qu'il a été saisi
                $path_info = $this->path_info; // Tableau contenant des informations sur le fichier saisi
                $file_size = $array_serialize['fichierDoc']['size']; // taille du fichier
            }

            $extensionsAutorise = [];
            $listeExtentionAutorises = SqlParam::rqParavracAll('PARAMPJ')->TrouveTous();
            if($tailleMaximumFichier = SqlParam::rqParavracAll('PARAMGEN', 'PJ_TAILLEMAX')->Trouve1())
            {
                if(isset($tailleMaximumFichier['LIB01PARV']) && $tailleMaximumFichier['LIB01PARV'] != 0)
                {
                    $tailleMaximumFichierValue = $tailleMaximumFichier['LIB01PARV'] * 1000000;
                }else
                {
                    $tailleMaximumFichierValue = 5000000;
                }
            }else{
                
                $tailleMaximumFichierValue = 5000000;
            }

            foreach($listeExtentionAutorises as $liste)
            {
                $extensionsAutorise = array_merge($extensionsAutorise, [$liste['CODEPARV']]);
            }
            // spec 4041 gestion des extensions autorisés
            // $extensionsAutorise=array('png', 'jpg', 'jpeg', 'bmp', 'gif', 'html', 'htm', 'css', 'ico', 'tiff', 'pdf', 'tif'
            // ,'xls', 'xlsx', 'doc', 'docx', 'txt', 'log', 'ppt', 'pptx', 'odt', 'zip', '7z');

            $fileParse = pathinfo($file_name);
            
            if(!in_array(strtoupper($fileParse['extension']), $extensionsAutorise)) //Si l'extension n'est pas dans le tableau
            {
                
                echo "<script type='text/javascript' charset='utf-8'>alert('".trad('Les fichiers de ce type ne sont pas autorisés')."');</script>";exit;
                // return array(
                //     'Statut' => 'E',
                //     'MsgErreur' => trad('Les fichiers de ce type ne sont pas autorisés')
                // );
            }
            
            if($file_size > $tailleMaximumFichierValue)
            {
                echo "<script type='text/javascript' charset='utf-8'>alert('".trad('Le fichier est trop volumineux')."');</script>";
                exit;
            }
    
            
            list ($void, $sec) = explode(' ', microtime());
            $new_name = 'file_' . $sec . '.' . $path_info['extension']; // On définit un nouveau nom pour le fichier qui sera unique
            if ($repertoirePj) {
                $racine = Fichier::getCheminPJ();
                $new_name = Fichier::getExtensionCheminPJ() . $new_name;
            } else {
                $racine = Fichier::getCheminTmp();
            }
        }
     

        // Si le contexte est celui du suivi des documents
        // echo $this->contexte;exit;
        switch ($this->contexte) {
            case 'ajoutDocAttGen':
            case 'suiviDoc':
                // On neutralise les caractères des données interpretables au niveau xml
                XmlEntities($this->titreDoc);
                XmlEntities($this->nomFichier);
                XmlEntities($this->commentaire);
                XmlEntities($file_name);
                
                // On convertit les 2 dates : validité et parution au format xml aaaa-mm-jj
                $this->dateParution = convertDateUserToDateXML($this->dateParution);
                $this->dateValidite = convertDateUserToDateXML($this->dateValidite);
                
                // print_r($file_tmp); exit; 

          // print_r($file_tmp. '_________'.  $racine . $new_name); exit; 
           //move_uploaded_file($file_tmp, $racine . $new_name);
                $bool = false;
                $moove = '';
                
                if( copy ( $file_tmp, $racine . $new_name ))
                {
                        $bool= true;
                        $moove= 'copy';
                }
                else if(move_uploaded_file($file_tmp, $racine . $new_name))
                {
                    $bool= true;
                    $moove= 'move_uploaded_file';
                }
                // if($bool) echo 'yes '.$moove. $file_tmp, $racine . $new_name; else echo 'no dans : '.$moove. $file_tmp, $racine . $new_name ;
                // if(file_exists($file_tmp)) echo "okokkkkkk";
                
                // exit;
                if ( $bool || $inSerialize) {  
                    
                    // On déplace le fichier temporaire vers sa destination finale avec son nouveau nom unique
                                                                          // echo $file_tmp,"\n", $racine . $new_name,"\n";
                                                                          // Les numéros des documents sont enresgitrés sur 9 positions. On doit faire précéder d'autant de 0 que nécessaire
                    
                    if ('CA_ENTET' == $this->typeItem || 'DA_ENTET' == $this->typeItem || 'AO_ENTET' == $this->typeItem || 'BR_RECEP' == $this->typeItem || 'FAC_ENT' == $this->typeItem) {
                        $this->codeItem = str_pad($this->codeItem, 9, '0', STR_PAD_LEFT);
                        $this->critere = '';
                    }
                    /*
                     * $ModeModification = false;
                     * $NumOrdreDocPourModif = 1;
                     */
                    // AvecHistorisation
                    // $NePasRelancer = BoolWsdl($this->NePasRelancer);
                    $PJCommande = BoolWsdl($this->PJCommande);
                    $modifier = '';
                    if($inSerialize)
                    {
                        $new_name =  $this->nom_fichier;
                        $modifier = '<Modifier>FALSE</Modifier>';
                    }
                    // $AvecHistorisation = BoolWsdl($this->AvecHistorisation);
                    
                    
                    $envoi = "<EnrDocRattacheIn LngUtilisation='{$_SESSION['Session_Langue']}'>" . "<NomFichier>{$new_name}</NomFichier>" . "<NomFichierOrigine>{$file_name}</NomFichierOrigine>" . "<TypeObjet>{$this->typeItem}</TypeObjet>" . "<RefObjet>{$this->codeItem}</RefObjet>" . "<TypePJ>{$this->typeDoc}</TypePJ>" . "<Titre>{$this->titreDoc}</Titre>" . "<Auteur>{$this->auteur}</Auteur>" . "<Centre>{$this->centre}</Centre>" . "<DteParution>{$this->dateParution}</DteParution>" . "<DteValidite>{$this->dateValidite}</DteValidite>" . "<PJCommande>{$PJCommande}</PJCommande>" . "<Commentaire>{$this->commentaire}</Commentaire>" . "<Categorie>{$this->categorie}</Categorie>" . $modifier."</EnrDocRattacheIn>";
                    
                //   print_r($envoi); exit; 
                    // On appelle le wsdl d'enregistrement du doc rattaché
                    return Wsdl::wsdlCallGen('Oxaproc_DocRat.wsdl', 'OXAPRC_DOCRAT_ENREG', $envoi);
                }                // Si le fichier n'a pas pu être copié alors on affiche l'erreur à l'utilisateur
                else
                    return array(
                        'Statut' => 'E',
                        'MsgErreur' => trad('Une erreur est survenue lors de la copie du fichier')
                    );
                break;
            case 'ajouterDocBlocFrs': // Si le contexte est celui du récapitulatif panier
                if (move_uploaded_file($file_tmp, $racine . $new_name)) { // On déplace le fichier temporaire vers sa destination finale avec son nouveau nom unique
                    $tableauTmp = array(
                        'COD_FOURN' => $this->codeItem,
                        'CRITERE_REGROUP' => $this->critere
                    );
                    $dateP = convertDateUserToSql($this->dateParution);
                    $dateV = convertDateUserToSql($this->dateValidite);
                    return SqlDocRattaches::rqInsertDocRattache($_SESSION['id_user'], $_SESSION['id_panier'], $tableauTmp, $this->titreDoc, $this->typeDoc, $file_name, "{$new_name}", $dateP, $dateV, $this->auteur, $this->centre, $this->commentaire)->ExecuteSql();
                } else
                    return false;
                break;
            case 'modifierDocBlocFrs': // Si le contexte est celui du récapitulatif panier
                $tableauTmp = array(
                    'COD_FOURN' => $this->codeItem,
                    'CRITERE_REGROUP' => $this->critere
                );
                $dateP = convertDateUserToSql($this->dateParution);
                $dateV = convertDateUserToSql($this->dateValidite);
                return SqlDocRattaches::rqUpdateDocRattache($_SESSION['id_user'], $_SESSION['id_panier'], $tableauTmp, $this->numDoc, $this->titreDoc, $this->typeDoc, $dateP, $dateV, $this->auteur, $this->centre, $this->commentaire)->ExecuteSql();
                break;
            case 'DOA': // Si le contexte est celui d'un DOA
                if (move_uploaded_file($file_tmp, $racine . $new_name)) { // On déplace le fichier temporaire vers sa destination finale avec son nouveau nom unique
                    $dateP = convertDateUserToSql($this->dateParution);
                    $dateV = convertDateUserToSql($this->dateValidite);
                    
                    $COD_ENR = str_pad($this->numDoc, 9, 0, STR_PAD_LEFT);
                    // save session document
                    $sql = 'SELECT max(NO_ORDRE)+1 NEW_NO_ORDRE FROM DOC_ATT WITH(NOLOCK) WHERE NO_DA=\'DOA\' AND COD_ENR = \'' . $COD_ENR . '\'';
                    $num_doc = (new RequeteSQL($sql, DB_OXASQLDB))->Trouve1();
                    if (! array_key_exists('NEW_NO_ORDRE', $num_doc) || ! is_numeric($num_doc['NEW_NO_ORDRE']))
                        $num_doc = 1;
                    else
                        $num_doc = $num_doc['NEW_NO_ORDRE'];
                    
                    DOA_Action::saveSessionDocument('DOA', $this->numDoc, $num_doc, $this->typeDoc, $this->titreDoc, $file_name, "{$new_name}", $dateP, $dateV, $this->auteur, $this->centre);
                    
                    return SqlDocRattaches::rqInsertDocRattacheDoa($this->titreDoc, $this->typeDoc, $file_name, "{$new_name}", $dateP, $dateV, $this->auteur, $this->centre, $COD_ENR)->ExecuteSql();
                } else
                    return false;
                break;
            case 'DOAAction': // On déplace le fichier temporaire vers sa destination finale avec son nouveau nom unique
                if (move_uploaded_file($file_tmp, $racine . $new_name)) {
                    $dateP = convertDateUserToSql($this->dateParution);
                    $dateV = convertDateUserToSql($this->dateValidite);
                    
                    $COD_ENR = str_pad($this->numDoc, 9, 0, STR_PAD_LEFT);
                    
                    $clSessionAction = DoaDocAction::getSession();
                    $idObjet = $clSessionAction->getIdObjet();
                    $idDonnee = $clSessionAction->getIdDonnee();
                    $idData = $clSessionAction->getIdData();
                    $idRecord = $clSessionAction->getIdRecord();
                    
                    $pile = new PileSql(DB_OXASQLDB);
                    if ($idRecord == - 1) {
                        if ($reqMaxi = SqlDoaActions::rqDOA_getMaxIdRecord_RecordVal($idObjet, $idDonnee)->Trouve1()) {
                            $idRecord = $reqMaxi['ID'];
                        } else {
                            $idRecord = 0;
                        }
                        
                        $idRecord ++;
                        
                        $pile->AddRequeteSql(SqlDoaActions::rqDOA_InsertRecord($idObjet, $idDonnee, $idRecord));
                    }
                    $requeteSql = SqlDocRattaches::rqInsertDocRattacheDoa($this->titreDoc, $this->typeDoc, $file_name, "{$new_name}", $dateP, $dateV, $this->auteur, $this->centre, $COD_ENR);
                    $pile->AddRequeteSql($requeteSql);
                    
                    if ($reqValeur = SqlDoaActions::rqGetInfoDoaRecordVal($idObjet, $idDonnee, $idData, $idRecord)->Trouve1()) {
                        $pile->AddRequeteSql(SqlDocRattaches::rqGetDocRattcheDoa($idObjet, $reqValeur['VALEUR']));
                        
                        $pile->AddRequeteSql(SqlDoaDocument::rqSupprimeDocument('DOA', $COD_ENR, $reqValeur['VALEUR']));
                        
                        $pile->AddRequeteSql(SqlDoaActions::rqDOA_UpdateRecordVal($idObjet, $idDonnee, $idData, $idRecord, $requeteSql->getProperties('NUM_ORDRE')));
                    } else {
                        $pile->AddRequeteSql(SqlDoaActions::rqDOA_InsertRecordVal($idObjet, $idDonnee, $idData, $idRecord, $requeteSql->getProperties('NUM_ORDRE')));
                    }
                    // Il faut faire le refresh de la popup intermediaire
                    if ($pile->Commit()) {
                        $clSessionAction->setIdRecord($idRecord);
                        return true;
                    } else {
                        return false;
                    }
                } else
                    return false;
                
                break;
            case 'GEST_FOURNISS':
                // On neutralise les caractères des données interpretables au niveau xml
                XmlEntities($this->titreDoc);
                XmlEntities($this->numDoc);
                XmlEntities($this->nomFichier);
                XmlEntities($this->commentaire);
                XmlEntities($file_name);
                
                // On convertit les 2 dates : validité et parution au format xml aaaa-mm-jj
                $this->dateParution = convertDateUserToDateXML($this->dateParution);
                $this->dateValidite = convertDateUserToDateXML($this->dateValidite);
                
                if ($fichierExiste) {
                    // On déplace le fichier temporaire vers sa destination finale avec son nouveau nom unique
                    $resultMove = move_uploaded_file($file_tmp, $racine . $new_name);
                } else {
                    $resultMove = true;
                }

                if ($resultMove) {
                    $Modifier = BoolWsdl($this->Modifier);
                    if ($Modifier) {
                        $info_fichier = SqlGestFourniss::rqGetFournissInfosDocCanevas($this->codeItem, $this->categorie, $this->id_doc_cat)->Trouve1();
                        if (is_array($info_fichier))
                            $this->NO_ORDRE = $info_fichier['NO_ORDRE'];
                    }
                    $NePasRelancer = BoolWsdl($this->NePasRelancer);
                    $PJCommande = BoolWsdl($this->PJCommande);
                    $AvecHistorisation = BoolWsdl($this->AvecHistorisation);
                    
                    $envoi = "<EnrDocRattacheIn LngUtilisation='{$_SESSION['Session_Langue']}'>" . "<TypeObjet>FOURNISS</TypeObjet>" . "<RefObjet>{$this->codeItem}</RefObjet>" . "<Categorie>{$this->categorie}</Categorie>" . "<NumOrdre>{$this->NO_ORDRE}</NumOrdre>" . "<NomFichier>{$new_name}</NomFichier>" . "<NomFichierOrigine>{$file_name}</NomFichierOrigine>" . "<TypePJ>{$this->typeDoc}</TypePJ>" . "<Titre>{$this->titreDoc}</Titre>" . "<Auteur>{$this->auteur}</Auteur>" . "<Centre>{$this->centre}</Centre>" . "<DteParution>{$this->dateParution}</DteParution>" . "<DteValidite>{$this->dateValidite}</DteValidite>" . "<Commentaire>{$this->commentaire}</Commentaire>" . "<NePasRelancer>{$NePasRelancer}</NePasRelancer>" . "<PJCommande>{$PJCommande}</PJCommande>" . "<AvecHistorisation>{$AvecHistorisation}</AvecHistorisation>" . "<Modifier>{$Modifier}</Modifier>" . "</EnrDocRattacheIn>";
                    // print_r($envoi); exit; 
                    // On appelle le wsdl d'enregistrement du doc rattaché
                    return Wsdl::wsdlCallGen('Oxaproc_DocRat.wsdl', 'OXAPRC_DOCRAT_ENREG', $envoi);
                }                // Si le fichier n'a pas pu être copié alors on affiche l'erreur à l'utilisateur
                else
                    return array(
                        'Statut' => 'E',
                        'MsgErreur' => trad('Une erreur est survenue lors de la copie du fichier')
                    );
                
                break;
        }
        if ('suiviDoc' == $this->contexte) {} elseif ('ajouterDocBlocFrs' == $this->contexte) {} elseif ('modifierDocBlocFrs' == $this->contexte) {} elseif ('DOA' == $this->contexte) {} elseif ('DOAAction' == $this->contexte) {}
        

    }

    /**
     * Fonction permettant la suppression d'un document rattaché via l'appel au wsdl dédié
     *
     * @param string $typeObjet
     *            : Type d'objet auquel est rattaché le document (Ex : DA)
     * @param string $refObjet
     *            : Réference de l'objet en question (Ex : N°200800456)
     * @param int $numOrdre
     *            : Numéro d'ordre (identifiant) du document associé à l'objet (Ex : N°2)
     * @return array : réponse du wsdl
     */
    public static function &supprimerDocRattache($typeObjet, $refObjet, $numOrdre)
    {
        if ('CA_ENTET' == $typeObjet || 'DA_ENTET' == $typeObjet || 'AO_ENTET' == $typeObjet || 'BR_RECEP' == $typeObjet || 'FAC_ENT' == $typeObjet)
            $refObjet = str_pad($refObjet, 9, '0', STR_PAD_LEFT);
        
        $envoi = "<SupDocRattacheIn LngUtilisation='{$_SESSION['Session_Langue']}'><TypeObjet>{$typeObjet}</TypeObjet><RefObjet>{$refObjet}</RefObjet><NumOrdre>{$numOrdre}</NumOrdre></SupDocRattacheIn>";
        return Wsdl::wsdlCallGen('Oxaproc_DocRat.wsdl', 'OXAPRC_DOCRAT_SUPPR', $envoi);
    }

    /**
     * Fonction retournant un boolean indiquant si sur un item donné des docuements rattachés sont présents
     *
     * @param string $type_item
     *            : Type d'item. Ex CDE, DA etc....
     * @param string $code_item
     *            : Code identifiant de l'item
     * @return boolean : vrai si des doc sont présents, faux sinon.
     */
    public static function isDocRattByItem($type_item, $code_item)
    {
        $result = DocRattache::getListDocRattByItem($type_item, $code_item);
        return (is_array($result) && count($result) > 0);
    }

    /**
     * Fonction retournant la liste des documents rattachés à un item donné
     *
     * @param string $type_item
     *            : Type d'item. Ex CDE, DA etc....
     * @param string $code_item
     *            : Code identifiant de l'item
     * @return array : Liste des documents rattachés à un item donné
     */
    public static function getListDocRattByItem($type_item, $code_item)
    {
        $type_item = DocRattache::$array_correspondance[$type_item];
        return SqlInfo::rqGetDocRattByItem($type_item, $code_item)->TrouveTous();
    }

    public static function &buildXmlAffichageListeDocRatt($type_item = null, $code_item, $modifAutorise = 1)
    {
        if ($type_item == 'GEN') {
            $listeDocRatt = Article::getDocAttInfoFromCodArt($code_item, true);
        } else {
            if (TypeSuivi::AO_PANIER_GLOB == $type_item || TypeSuivi::AO_PANIER == $type_item)
                $type_item = 'AO';
            $listeDocRatt = DocRattache::getListDocRattByItem($type_item, $code_item);
        }
        
        $array_liste_doc = array();
        $ind_doc = 0;
        
        if ($type_item == 'GEN') {
            $array_liste_doc['listeDocRatt']['libelle_entete']['!value'] = trad('Documents attachés à l\'article ') . $code_item;
        }
        if ($type_item == 'FOURNISS') {
            $array_liste_doc['listeDocRatt']['libelle_entete']['!value'] = trad('Document(s) attaché(s) pour le fournisseur') . ' ' . SqlFournisseur::rqGetRSFournisseur($code_item)->Trouve1()['RS'] .'('. $code_item . ')';
        } else {
            $array_liste_doc['listeDocRatt']['libelle_entete']['!value'] = trad('Document(s) rattaché(s) sur') . ' ' . trad($type_item) . ' ' . trad('N°') . $code_item;
            
            if ($_SESSION['DOC_RAT'] && (is_null($modifAutorise) || $modifAutorise == 1)) {
                $array_liste_doc['listeDocRatt']['ajouterDocRatt']['!value'] = "OpenPopup('suivi_doc.php?action=ajouterDocAtt&typeItem=" . DocRattache::$array_correspondance[$type_item] . "&codeItem=" . urlencode($code_item) . "','popup_doc_att',600,400);";
            }
        }
        
        if (is_array($listeDocRatt))
            foreach ($listeDocRatt as & $doc) {
                if ($type_item != 'GEN') {
                    $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['TYPE_ITEM']['!value'] = & $doc['TYPE_ITEM'];
                    $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['CODE_ITEM']['!value'] = & $doc['CODE_ITEM'];
                    $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['AUTEUR_NOM']['!value'] = & $doc['AUTEUR_NOM'];
                }
                $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['TYPE_PJ']['!value'] = & $doc['TYPE_PJ'];
                $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['TITRE']['!value'] = & $doc['TITRE'];
                $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['COMMENT']['!value'] = & $doc['COMMENT'];
                $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['NOM_ORI']['!value'] = & $doc['NOM_ORI'];
                $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['AUTEUR']['!value'] = & $doc['AUTEUR'];
                $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['CENTRE']['!value'] = & $doc['CENTRE'];
                $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['DT_PARUT']['!value'] = convertDateSqlToFr($doc['DT_PARUT']);
                $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['DT_VALID']['!value'] = convertDateSqlToFr($doc['DT_VALID']);
                $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['ouvrir']['!value'] = "window.open('" . Fichier::GetUrl('pj', $doc['NOM_FIC'], $doc['NOM_ORI']) . '\');';
                
                // Action de visualisation du document rattaché
                if ($type_item != 'GEN') {
                    // Action de suppression du document rattaché rajout du test droit dossier 20532
                    if ($_SESSION['DOC_RAT'] && (is_null($modifAutorise) || $modifAutorise == 1)) {
                        $message_confirmation = cnv_to_javascript(trad('Confirmez-vous la suppression définitive de ce document rattaché ?'));
                        $array_liste_doc['listeDocRatt']['docRatt'][$ind_doc]['supprimer']['!value'] = "if(window.confirm('$message_confirmation')){CallUrl('suivi_doc.php?action=supprimerDocAtt&typeItem={$doc['TYPE_ITEM']}&codeItem={$doc['CODE_ITEM']}&numOrdre={$doc['NO_ORDRE']}');}";
                    }
                }
                $ind_doc ++;
            }
        
        $array_liste_doc['popup_title'] = Trad('Documents rattachés');
        return $array_liste_doc;
    }

    public static function supprimerDocRattacheFromRecapPanier($id_user, $id_panier, $liste_four, $id_doc)
    {
        return SqlDocRattaches::rqDeleteDocsRattaches($id_user, $id_panier, $liste_four, $id_doc)->ExecuteSql();
    }

    public function setCodeItem($value)
    {
        $this->codeItem = $value;
    }

    public function setTmpName($value)
    {
        $this->tmpName = $value;
    }

    public function setFileName($value)
    {
        $this->file_name = $value;
    }

    public function SetPathInfo($value)
    {
        $this->path_info = $value;
    }

    public function setNomFichier($value)
    {
        $this->nom_fichier = $value;
    }


    // GETTER
    public function getTypeItem()
    {
        return $this->typeItem;
    }
    public function getCodeItem()
    {
        return $this->codeItem;
    }
    public function getFichier()
    {
        return $this->fichier; 
    } 
    public function getTitreDoc()
    {
        return $this->titreDoc;
    }
    public function getTypeDoc()
    {
        return $this->typeDoc;
    }
    public function getDateParution()
    {
        return $this->dateParution;
    }
    public function getDateValidite()
    {
        return $this->dateValidite;
    }

    public function getAuteur()
    {
        return $this->auteur; 
    }

    public function getCentre()
    {
        return $this->centre; 
    }
    public function getCommentaire()
    {
        return $this->commentaire;
    }
}