<?php
/**
 *  Classe actions définit pour chaque type de document la liste des actions possibles sur chaque documents
 *  Les droits et le parametrage utilisateur doit être pris en compte pour définir si  on crée ou non l'action.
 *  Définit lors de la spec refonte suivi 2257
 */
class ActionsDocument {
    
    /**
     *  Attributs
     */
    protected $typeSuivi;	//type de suivi selectionné
    protected $num_doc;	 //numéro du document sélectionné
    protected $listeNomAction;  //liste des noms des actions possibles à partir d'un document.
    protected $listeObjectAction; //liste d'actions créée pour un document dépendant d'un type de suivi.
    protected $tabInfo; //Tableau contenant les informations pour chaque Action
    protected $actionPrincipale; // Action qui sert de lien d'action principal sur le document (hors de la roue dentée)
    /**
     * Constructeur qui définit les actions a construire pour chaque type de document
     *
     * @param $typeSuivi (DA, CDE, BR, BS)
     * @param $num_doc (numero du document sur lequel on doit construir les actions)
     * @param $zone_globale
     * @param $zone_actions
     */
    
    function __construct($typeSuivi, $num_doc, $zone_globale = '', $zone_actions = '', $contexte = '', $array_info = array()) {
        $this->typeSuivi = & $typeSuivi; //init du type de suivi
        $this->num_doc = & $num_doc; //init du type de suivi
        $this->actionPrincipale = null;
        $this->listeNomAction   = null;

        //liste des actions à créer pour le type de suivi sélectionné
        switch ($this->typeSuivi) {
            case TypeSuivi::DA:
                
                //la liste des actions
                if ($_SESSION['contexteSuivi'] == 'modeCollaborateur'){
                    $this->listeNomAction = array('Aff_EVT', 'Aff_EVT_SIG');
                }
                else {
                    switch ($array_info['contexte']) {
                        case 'ContexteSuivi':
                            $this->listeNomAction = array('AjoutSignatDA', 'Modifier', 'Supprimer', 'Dupliquer', 'Aff_EVT', 'Aff_PJ', 'visuDocRatt', 'Aff_EVT_SIG');
                            // Suite demande YA confirmé par PP Suppression de test TRAITE = false  le 15/02/2016
                            array_push($this->listeNomAction, 'Chif_Exec');
                            
                            /**
                             * SPEC 3495
                             * Suite à la mise de cette regle donc
                             * l'action de devalidation si le droit est existant est possible
                             * SI PAS STATUT TRAITE et SI TRAITER ALORS LE PARAMETRE D'INTERDICTION NE DOIT PAS EXISTER
                             */
                            if ($_SESSION['DA_Devalid'] && (!is_array($array_info) || (isset($array_info['TRAITEE']) && !BoolSql($array_info['TRAITEE'])) || ! SqlParam::isRegleParavracOk('PARAMGEN', 'INT_DEVAL_DA_TRAITEE', 'O')))
                                array_push($this->listeNomAction, 'Devalider');
                                
                                break;
                        case 'ContexteVisu':
                        default:
                            // /!\ ne pas ajouter visuDocRatt, puiqu'il permet l'ajout de docs rattachés
                            $this->listeNomAction = array('Aff_EVT', 'Aff_PJ', 'Aff_EVT_SIG');
                            break;
                    }
                }
                    
                if ($_SESSION['DA_AuthImprim'] && SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'])    array_push($this->listeNomAction, 'PDF_Chiffre');
                    
                if ($_SESSION['DA_AuthImprimNValo'])    array_push($this->listeNomAction, 'PDF_non_Chiffre');
                    
                if (Param::isConsoBudgetSign() && SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'])     array_push($this->listeNomAction, 'ConsoBudget');
                    
                break;
            case TypeSuivi::SignDA:
            case TypeSuivi::DelSignDA:
                //la liste des actions
                $is_signable = $array_info['is_signable'];
                
                $this->listeNomAction = array();
                
                if ($is_signable) {
                    $this->actionPrincipale = 'Signer';
                    array_push($this->listeNomAction, 'Signer');
                    
                    if ($_SESSION['AuthModifDASign']) {
                        array_push($this->listeNomAction, 'ModifierEtSigner');
                    }
                    
                    array_push($this->listeNomAction, 'Refuser');
                    
                    if ($this->typeSuivi == TypeSuivi::SignDA) {
                        if (BoolSql(Param::isAutoriseSignataireChanger()))
                            array_push($this->listeNomAction, 'ChangerSignataire');
                            
                            if (BoolSql(Param::isAutoriseSignataireAjouter()))
                                array_push($this->listeNomAction, 'AjouterSignataire');
                    }
                    
                    // pour la présentation
                    array_push($this->listeNomAction, 'LigneHorizontale');
                }
                // affichage événement
                array_push($this->listeNomAction, 'Aff_EVT');
                array_push($this->listeNomAction, 'Aff_EVT_SIG');
                
                // Création de l'objet de gestion des PJ
                $gestionPJ = new Attachement($num_doc, TypeSuivi::DA);
                $listePJ = $gestionPJ->getAttachementArray();
                if (is_array($listePJ) && count($listePJ) > 0)
                    array_push($this->listeNomAction, 'Aff_PJ');
                    
                    // visu docs rattachés
                    if ($_SESSION['DOC_RAT'] || DocRattache::isDocRattByItem(TypeSuivi::DA, $num_doc))
                        array_push($this->listeNomAction, 'visuDocRatt');
                        
                        if (Param::isConsoBudgetSign()) array_push($this->listeNomAction, 'ConsoBudget');
                        
                        // Les Pdfs
                        array_push($this->listeNomAction, 'PdfSignature');
                        
                        // Si la DA est de type DA pour commande et que l'utilisateur a le droit d'imprimer les commandes
                        if (DemandeAchat::isDAPourCdeDirecte($num_doc) && $_SESSION['CDE_AuthEditionInterne'])
                            array_push($this->listeNomAction, 'PdfCdeSignature');
                            
                            break;
                            
            case TypeSuivi::CDE:  
                // Spec 3680
                $contexteAffichage = array_key_exists('contexte', $array_info)?$array_info['contexte']:'';
                $AfficheRelanceBR  = array_key_exists('AffRelanceBR', $array_info)?$array_info['AffRelanceBR']:'';
                
                if(array_key_exists('zone_actions', $array_info) && array_key_exists('!value', $array_info['zone_actions'])){
                    $tblZoneAction = explode('_', $array_info['zone_actions']['!value']);
                }

                $this->listeNomAction = array();
                
                if (array_key_exists('contexteSuivi', $_SESSION) && $_SESSION['contexteSuivi'] == 'modeCollaborateur')
                {
                    array_push($this->listeNomAction, 'Aff_EVT');
                    array_push($this->listeNomAction, 'Aff_EVT_SIG');
                }


                    
                    // Lorsque le contexte est l'affichage des documents nouvellement créés alors on ajoute l'action de routage en première position
                    if ('envoiActivated' == $contexte && 'ContexteSuivi' == $contexteAffichage) {
                        $this->actionPrincipale = 'Routage';
                        $this->listeNomAction[] = 'Routage';
                    }
                    
                    if (!array_key_exists('contexteSuivi', $_SESSION) || $_SESSION['contexteSuivi'] != 'modeCollaborateur') {
                        if (false === stripos($num_doc, '/')) {
                            if ('ContexteSuivi' == $contexteAffichage){
                                array_push($this->listeNomAction, 'VisuHistorique', 'Dupliquer', 'Afficher_Planning_Prev');
                                
                                if(
                                    (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]=='BR' && (SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'] || SqlUsers::droitsUtilisateur('HA_BR_PX')->Trouve1()['DROIT']))
                                    ||
                                    (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]!='BR' && SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'])
                                )   array_push($this->listeNomAction, 'PDF_Chiffre');
                                
                                if ($_SESSION['CDE_AuthImprimNValo'])   array_push($this->listeNomAction, 'PDF_non_Chiffre');
                                
                                array_push($this->listeNomAction, 'Aff_EVT');
                                array_push($this->listeNomAction, 'Aff_EVT_SIG');
                            }else{
                                array_push($this->listeNomAction, 'VisuHistorique', 'Afficher_Planning_Prev');

                                if(
                                    (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]=='BR' && (SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'] || SqlUsers::droitsUtilisateur('HA_BR_PX')->Trouve1()['DROIT']))
                                    ||
                                    (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]!='BR' && SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'])
                                )   array_push($this->listeNomAction, 'PDF_Chiffre');

                                if ($_SESSION['CDE_AuthImprimNValo'])   array_push($this->listeNomAction, 'PDF_non_Chiffre');

                                array_push($this->listeNomAction, 'Aff_EVT');
                                array_push($this->listeNomAction, 'Aff_EVT_SIG');
                            }
                            
                            
                            if ('ContexteSuivi' == $contexteAffichage && $info = SqlStatutDocument::rqGetEtatCDE($num_doc)->Trouve1()) {

                                if ($info['ETAT_CDE'] == 'Z' /*&& $_SESSION['Session_NumClient'] == '151'*/)
                                {
                                    array_push($this->listeNomAction, 'SPEC_4909');
                                }

                                // Dossier 21604 : on doit pouvboir désolder une commande soldée
                                if ($info['ETAT_CDE'] == 'E' || $info['ETAT_CDE'] == 'S')
                                {
                                    
                                    array_push($this->listeNomAction, 'Solde_physique');                                        
                                    if (
                                            (
                                                (SqlUsers::droitsUtilisateur('HA_CA_SFM')->Trouve1()['DROIT']) 
                                                && $info['DTE_VALID'] != '00000000' 
                                                && $info['ETAT_CDE'] != 'Z'  && $info['ETAT_FIN'] != 'F'
                                            )
                                    || (
                                        SqlUsers::droitsUtilisateur('HA_CA_DFM')->Trouve1()['DROIT'] 
                                        && ($info['ETAT_CDE'] == 'Z' || $info['ETAT_FIN'] == 'F' && $info['DTE_VALID'] != '00000000')
                                        )
                                    ) {
                                        
                                        array_push($this->listeNomAction, 'Desolde_Financier_ligne');
                                        
                                    }
                                }
                                
                                if ($info['ETAT_CDE'] != 'Z')
                                    array_push($this->listeNomAction, 'Devalider', 'Supprimer', 'CreationAvenant');   
                            }
                        }
                        if ('ContexteSuivi' == $contexteAffichage)
                                array_push($this->listeNomAction, 'Aff_PJ', 'visuDocRatt', 'Aff_Note');
                            else
                                array_push($this->listeNomAction, 'Aff_PJ', 'Aff_Note');
                    }
                    // autorisation de l'annulation de commande Spec 3090
                    if ('ContexteSuivi' == $contexteAffichage && ($_SESSION['CDE_AuthAnnulation'] || DroitAcces::GetALL())) {
                        // Specifique groupe Bouygues, on regarde si != etat O avec SAP
                        if ($_SESSION['Session_NumClient_Licence'] == 37) {
                            // Le champ dans la table fait 9 char et est comble par des zeros devant, nous faisons de même
                            $num_cde = substr_replace('000000000', $num_doc, 9 - strlen($num_doc));
                            $array = SqlStatutDocument::rqEtatSapCDE($num_cde)->Trouve1();
                            if (is_null($array))
                                // Si la commande rempli les critéres (etat E, pas de br, pas de factures)
                                if (($array = SqlStatutDocument::rqCheckAnnul($num_doc)->Trouve1()) && array_key_exists('NO_CDE', $array)) {
                                    $this->listeNomAction[] = 'Annuler_Commande';
                                   // $this->actionPrincipale = 'ANNULER_CDE';
                                }
                        } else
                            // Si la commande rempli les critéres (etat E, pas de br, pas de factures)
                            if (($array = SqlStatutDocument::rqCheckAnnul($num_doc)->Trouve1()) && array_key_exists('NO_CDE', $array)) {
                                $this->listeNomAction[] = 'Annuler_Commande';
                             //   $this->actionPrincipale = 'ANNULER_CDE';
                            }
                    }
                    
                    // Autorisation a la reimpression 3103
                    // La commande devra être à l’état E ou S rqCheckImpReImp
                    $array = SqlStatutDocument::rqCheckImpReImp($num_doc)->Trouve1();
                    if ('ContexteSuivi' == $contexteAffichage && $array && array_key_exists('NO_CDE', $array)) {
                        $isDemAchCDE = SqlCde::isAchDemCDE($num_doc)->Trouve1();
                        $isDemLigneCDE = SqlCde::isDemLigneCDE($num_doc)->Trouve1();
                        $isTypeDocImprCDE = SqlCde::isTypeDocImprCDE($num_doc)->Trouve1();
                        
                        if (($array['ETAT_CDE'] == 'E') && ($_SESSION['CDE_AuthReimpCde'] || $isTypeDocImprCDE) && ($isDemAchCDE || $isDemLigneCDE)) {
                            $this->listeNomAction[] = 'Reimp_Commande';
                            $this->actionPrincipale = 'REIMP_CDE';
                        } else if ($array['ETAT_CDE'] == 'S' && ($_SESSION['CDE_AuthReimpCdeSoldee'] || $isTypeDocImprCDE) && ($isDemAchCDE || $isDemLigneCDE)) {
                            $this->listeNomAction[] = 'Reimp_Commande';
                            $this->actionPrincipale = 'REIMP_CDE';
                        }
                        elseif(($array['ETAT_CDE'] == 'Z' && $_SESSION['CDE_AuthReimpCde']) && ($isDemAchCDE || $isDemLigneCDE))
                        {
                            $this->listeNomAction[] = 'Routage';
                            $this->actionPrincipale = 'Routage';
                        } else {
                            // Soit l'user a le droit sur les centres emetteurs
                            if ($array = SqlStatutDocument::rqCheckDroitCtrReimp($num_doc)->Trouve1()) {
                                $this->listeNomAction[] = 'Reimp_Commande';
                                $this->actionPrincipale = 'REIMP_CDE';
                            }
                        }
                    }
                    if ('ContexteSuivi' == $contexteAffichage && (isset($array_info['!creationBROk']) && $array_info['!creationBROk'] != '' && $array_info['!creationBROk']!=0)) $this->listeNomAction[] = 'CreerBRDepuisCDE';
                    
                    array_push($this->listeNomAction, 'CreatIncidentCde');
                    
                    if(
                        Param::isConsoBudgetSign() 
                        && 
                        (
                            (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]=='BR' && (SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'] || SqlUsers::droitsUtilisateur('HA_BR_PX')->Trouve1()['DROIT']))
                            ||
                            (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]!='BR' && SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'])
                        )
                    )   array_push($this->listeNomAction, 'ConsoBudget');

                    //MFC spec 3674
                    if('ContexteSuivi' == $contexteAffichage){
                        if($AfficheRelanceBR){
                            array_push($this->listeNomAction, 'RelanceBR');
                        }
                    }else{
                        $resultTmp = SqlCde::isCdePermetRelanceBR($num_doc)->Trouve1();
                        if ($resultTmp['nb'] > 0) {
                            array_push($this->listeNomAction, 'EnvoiBRetourFour');
                        }
                    }
                        
                    //28965
                    if(SqlCde::isBlocNoteCde($num_doc)->Trouve1()) array_push($this->listeNomAction, 'BlocNote');
                    
                    // SPEC 4404 SPECIFIQUE IDEX
                    if($_SESSION['Session_NumClient_Licence'] == 128){
                        $numFix = SqlParam::rqGetParamDilispec('PARNCS0128', 'NCS_CA_ENTET_LITIGE_ON')->Trouve1()['LIB01DICO'];
                        $codeEnr =str_pad($num_doc, 9, '0', STR_PAD_LEFT);
                        $r = SqlCs::rqGetValCsDonForNumFix('CA_ENTET', '', 0, $codeEnr, $numFix)->Trouve1(true, false);
                        if (isset($r['VALEUR']) && $r['VALEUR']=='O') {
                            array_push($this->listeNomAction, 'CloturelitigeCde128');
                        }
                    }
                    break;
            case TypeSuivi::SignCDE:
            case TypeSuivi::DelSignCDE:
                $this->listeNomAction = array();
                $this->actionPrincipale = 'Signer';
                array_push($this->listeNomAction, 'Signer');
                
                if ($_SESSION['AuthModifDASign'])
                    array_push($this->listeNomAction, 'ModifierEtSigner');
                    
                    array_push($this->listeNomAction, 'Refuser');
                    
                    if ($this->typeSuivi == TypeSuivi::SignCDE) {
                        if (BoolSql(Param::isAutoriseSignataireChanger()))
                            array_push($this->listeNomAction, 'ChangerSignataire');
                            if (BoolSql(Param::isAutoriseSignataireAjouter()))
                                array_push($this->listeNomAction, 'AjouterSignataire');
                    }
                    
                    // pour la présentation
                    array_push($this->listeNomAction, 'LigneHorizontale');
                    
                    // affichage événement
                    array_push($this->listeNomAction, 'Aff_EVT');
                    array_push($this->listeNomAction, 'Aff_EVT_SIG');
                    
                    // Création de l'objet de gestion des PJ
                    $gestionPJ = new Attachement($num_doc, TypeSuivi::CDE);
                    $listePJ = $gestionPJ->getAttachementArray();
                    if (is_array($listePJ) && count($listePJ) > 0)
                        array_push($this->listeNomAction, 'Aff_PJ');
                        
                        
                        // visu docs rattachés
                        if ($_SESSION['DOC_RAT'] || DocRattache::isDocRattByItem(TypeSuivi::CDE, $num_doc)) array_push($this->listeNomAction, 'visuDocRatt');
                            
                        if (Param::isConsoBudgetSign() && SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT']) array_push($this->listeNomAction, 'ConsoBudget');
                            
                        // Les Pdfs
                        array_push($this->listeNomAction, 'PdfSignature');
                        
                        //28965
                        if(SqlCde::isBlocNoteCde($num_doc)->Trouve1())
                            array_push($this->listeNomAction, 'BlocNote');
                        
                        break;
                            
            // Cas des commandes à noter
            case TypeSuivi::CdeToRate:
                $this->listeNomAction = array();
                
                if ($_SESSION['contexteSuivi'] != 'modeCollaborateur')
                    $this->listeNomAction = array(
                        'visualiserNotationCde', // Action de visualiser les notations sur les différents thèmes
                        'saisirNotationCde', // Action de saisir 	les notations sur les différents thèmes
                        'validerNotationCde'
                    );   // Action de valider 	les notations lorsque tous les thèmes obligatoires ont été renseignés
                    
                    break;
                    
                    // Cas des commandes à noter
            case TypeSuivi::SCdeToRate:
                
                $this->listeNomAction = array();
                
                if ($_SESSION['contexteSuivi'] != 'modeCollaborateur')
                    $this->listeNomAction[] = 'visualiserNotationCde'; // Action de visualiser les notations sur les différents thèmes
                    
                    break;
                    
            case TypeSuivi::BR:
                // Spec 3680
                
                $contexteAffichage 	= (is_array($array_info) &&  array_key_exists('contexte', $array_info))?$array_info['contexte']:'';
                $TypeDeBR 			= $array_info['type_br']['!value'] ?? '';

                if(array_key_exists('zone_actions', $array_info) && array_key_exists('!value', $array_info['zone_actions'])){
                    $tblZoneAction = explode('_', $array_info['zone_actions']['!value']);
                }
          
                
                if ($_SESSION['contexteSuivi'] == 'modeCollaborateur'){
                    $this->listeNomAction = array('Aff_EVT');
                }
                else {
                    if ('ContexteSuivi' == $contexteAffichage){
                        $this->listeNomAction = array('bonRetour', 'Valider', 'Devalider', 'Modifier', 'Supprimer', 'Aff_EVT', 'Controler','CreatIncidentBR');

                        if(
                            (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]=='BR' && (SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'] || SqlUsers::droitsUtilisateur('HA_BR_PX')->Trouve1()['DROIT']))
                            ||
                            (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]!='BR' && SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'])
                        )   array_push($this->listeNomAction, 'PDF_Chiffre');

                        array_push($this->listeNomAction, 'PDF_non_Chiffre', 'visuDocRatt', 'Visu_Repartition');
                    } else {
                        // Spec 3680 : ne pas mettre visuDocRatt, qui permet de modifier les documents rattachés
                        $this->listeNomAction = array('bonRetour', 'Aff_EVT', 'PDF_non_Chiffre', 'PDF_Chiffre');
                    }
                    if ($TypeDeBR == 'A')
                        array_push($this->listeNomAction, 'RelanceBR');
                }
                break;
                    
            case TypeSuivi::BS:
                if ($_SESSION['contexteSuivi'] == 'modeCollaborateur'){
                    $this->listeNomAction = array('Aff_EVT');
                }
                else{
                    $this->listeNomAction = array('PDF_non_Chiffre');
                    if (SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT']) array_push($this->listeNomAction, 'PDF_Chiffre');
                }
                break;
                        
            case TypeSuivi::AO:
                $this->listeNomAction = array('AO_DocRatt');
                break;
                
            case TypeSuivi::BAP:
                // Spec 3680
                $contexteAffichage = (array_key_exists('contexte', $array_info))?$array_info['contexte']:'';
                if(array_key_exists('zone_actions', $array_info) && array_key_exists('!value', $array_info['zone_actions'])){
                    $tblZoneAction = explode('_', $array_info['zone_actions']['!value']);
                }

                // Dossier 26666 : ajout des documents rattachés 'visuDocRatt'
                if ('ContexteSuivi' == $contexteAffichage){
                    $this->listeNomAction = array('Aff_EVT', 'Aff_PJ', 'visuDocRatt'); // Afficher les PJ associées au BAP
                    array_push($this->listeNomAction, 'Aff_EVT_SIG');

                    if(
                        (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]=='BR' && (SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'] || SqlUsers::droitsUtilisateur('HA_BR_PX')->Trouve1()['DROIT']))
                        ||
                        (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]!='BR' && SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'])
                    )   array_push($this->listeNomAction, 'PDF_Chiffre');

                    array_push($this->listeNomAction, 'visuDocRatt');
                }
                else{
                    $this->listeNomAction = array('Aff_EVT', 'Aff_PJ');
                    array_push($this->listeNomAction, 'Aff_EVT_SIG');

                    if(
                        (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]=='BR' && (SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'] || SqlUsers::droitsUtilisateur('HA_BR_PX')->Trouve1()['DROIT']))
                        ||
                        (isset($tblZoneAction) && is_array($tblZoneAction) && $tblZoneAction[0]!='BR' && SqlUsers::droitsUtilisateur('HA_CA_VIPX')->Trouve1()['DROIT'])
                    )   array_push($this->listeNomAction, 'PDF_Chiffre');

                    array_push($this->listeNomAction, 'visuDocRatt');
                }
                
                if(SqlBap::rqGetListeReglementsFacture($num_doc)->TrouveTous())
                   array_push($this->listeNomAction, 'Aff_reglement_FAC');
                
                break;
                        
            case TypeSuivi::SignBAP:
            case TypeSuivi::DelSignBAP:
                $this->listeNomAction = array();
                
                $this->actionPrincipale = 'Signer';
                array_push($this->listeNomAction, 'Signer');
                // if($_SESSION['EasyDemat'] == 1){
                    array_push($this->listeNomAction, 'EtatFacture');
                // }
                
                if (!Param::AllParamsGetValue('BAP_REFUS_INTERDIT'))
                    array_push($this->listeNomAction, 'Refuser');
                    
                    if ($this->typeSuivi == TypeSuivi::SignBAP) {
                        if (BoolSql(Param::isAutoriseSignataireChanger()))
                            array_push($this->listeNomAction, 'ChangerSignataire');
                            if (BoolSql(Param::isAutoriseSignataireAjouter()))
                                array_push($this->listeNomAction, 'AjouterSignataire');
                    }
                    
                    // pour la présentation
                    array_push($this->listeNomAction, 'LigneHorizontale');
                    
                    // affichage événement
                    array_push($this->listeNomAction, 'Aff_EVT');
                    array_push($this->listeNomAction, 'Aff_EVT_SIG');
                    
                    if (DocRattache::isDocRattByItem('BAP', $num_doc) || $_SESSION['DOC_RAT'])  array_push($this->listeNomAction, 'visuDocRatt');
                    
                    array_push($this->listeNomAction, 'PdfSignature');
                    
                    break;
                    
            case TypeSuivi::DOC:
                $this->actionPrincipale = 'docAtt';
                $this->listeNomAction = array('docAtt', 'ajoutDocAtt', 'supprDocAtt'); // Afficher le document attaché
                
                break;
                
            case TypeSuivi::MOD:
            case TypeSuivi::DOA:
                // A partir du $num_doc on retrouve le DOA donc si modele alors
                if ($reqDoa = SqlDoa::rqGetInfoSuiviDoa($num_doc)->Trouve1()){
                    $this->actionPrincipale = 'DOAdetail';
                    $this->listeNomAction = array('DOAdetail'); // Afficher la DOA
                    if (BoolSql($reqDoa['MODELE'])){
                        if (Param::canCreateDoaModele()){ // 25170 Section modele
                            array_push($this->listeNomAction, 'ModifierDOA');
                            array_push($this->listeNomAction, 'DOAduplique');
                            array_push($this->listeNomAction, 'CreeDossierDOA');
                            array_push($this->listeNomAction, 'SupprimerDOA');
                        }
                    }else{
                        if (Param::canCreateDoaModele()){ // 25170 Section DOA
                            if (DOA_Referentiel::STATUT_INITIAL === $reqDoa['STATUT'] || $reqDoa['STATUT'] == DOA_Referentiel::STATUT_INITIALISATION){
                                $this->listeNomAction[] = 'ModifierDOA';
                                if (!$reqDoa['MODELE']) {
                                    if (DOA_Referentiel::STATUT_INITIAL == $reqDoa['STATUT'])
                                        array_push($this->listeNomAction, 'ValiderDOA');
                                        
                                }
                                
                            }
                            else
                                if (DOA_Referentiel::STATUT_ENCOURS === $reqDoa['STATUT']){
                                    $this->listeNomAction[] = 'CloturerDOA';
                            }
                            if (Param::canCreateDoaModele()){ // 25170
                                $this->listeNomAction[] = 'DuppliquerDOA';
                                if (DOA_Referentiel::STATUT_INITIAL == $reqDoa['STATUT'] || $reqDoa['STATUT'] == DOA_Referentiel::STATUT_INITIALISATION)
                                    $this->listeNomAction[] = 'SupprimerDOA';
                            }
                        }
                        //4474
                        if ($reqDoa['STATUT'] == DOA_Referentiel::STATUT_INITIALISATION || $reqDoa['STATUT'] == DOA_Referentiel::STATUT_INITIAL){
                            $this->listeNomAction[] = 'TransmettreDOA';
                        }
                    }
                }
                
                break;
            case TypeSuivi::DOA_Entete:
                if (Param::canCreateDoaModele()){ // 25170
                    if (DOA_Referentiel::STATUT_INITIAL === $array_info['STATUT'] || $array_info['STATUT'] == DOA_Referentiel::STATUT_INITIALISATION){
                        $this->listeNomAction[] = 'ModifierDOA';
                        if (!$array_info['MODELE']) {
                            if (DOA_Referentiel::STATUT_INITIAL == $array_info['STATUT'])
                                array_push($this->listeNomAction, 'ValiderDOA');
                        }
                    }
                    else
                        if (DOA_Referentiel::STATUT_ENCOURS === $array_info['STATUT'])
                            $this->listeNomAction[] = 'CloturerDOA';
                            
                            $this->listeNomAction[] = 'DuppliquerDOA';
                            if($array_info['MODELE']){
                                $this->listeNomAction[] = 'CreeDossierDOA';
                            }
                            if (DOA_Referentiel::STATUT_INITIAL == $array_info['STATUT'] || $array_info['STATUT'] == DOA_Referentiel::STATUT_INITIALISATION)
                                $this->listeNomAction[] = 'SupprimerDOA';
                }
                
                //4474
                if ($array_info['STATUT'] == DOA_Referentiel::STATUT_INITIALISATION || $array_info['STATUT'] == DOA_Referentiel::STATUT_INITIAL){
                    $this->listeNomAction[] = 'TransmettreDOAEntete';
                }
                
                break;
            case TypeSuivi::DOA_Tache:
                if (($reqDoa = SqlDoa::rqGetInfoSuiviDoa($array_info['ID_OBJET'])->Trouve1())){
                    if ($reqDoa['STATUT'] == DOA_Referentiel::STATUT_INITIAL){
                        $this->listeNomAction = array(
                            'DOA_Tache_Modifier',
                            'DOA_Tache_Supprimer',
                            'DOA_Tache_Afficher',
                            'DOA_Tache_NouvelleAction'
                        );
                    }
                    else
                        if ($reqDoa['STATUT'] == DOA_Referentiel::STATUT_ENCOURS){
                            
                            $this->listeNomAction = array('DOA_Tache_Afficher',
                                //'DOA_Tache_SuiviTache',
                                //'DOA_Tache_EnvoiMail'
                            );
                            $this->actionPrincipale = 'DOA_Tache_Afficher';
                    }
                    else
                        if ($reqDoa['STATUT'] == DOA_Referentiel::STATUT_TERMINE){
                            $this->listeNomAction = array(
                                'DOA_Tache_Afficher',
                                //'DOA_Tache_SuiviTache',
                                //'DOA_Tache_EnvoiMail'
                            );
                            $this->actionPrincipale = 'DOA_Tache_Afficher';
                    }
                }
                break;
            case TypeSuivi::DOA_Tache_Action:
                if (($reqDoa = SqlDoa::rqGetInfoSuiviDoa($array_info['ID_OBJET'])->Trouve1())){
                    if ($reqDoa['STATUT'] == DOA_Referentiel::STATUT_INITIAL){
                        $this->listeNomAction = array(
                            'DOA_Tache_Action_Afficher',
                            'DOA_Tache_Action_Modifier',
                            'DOA_Tache_Action_Monter',
                            'DOA_Tache_Action_Descendre',
                            'DOA_Tache_Action_Supprimer'
                        );
                    }
                    else
                    {
                        if ($reqDoa['STATUT'] == DOA_Referentiel::STATUT_ENCOURS)
                        {
                            if (BoolSql($array_info['STATUT']) ){ // ATTENTION ICI C'est le statut de l'action de plus attention en base c'est le champs TERMINE qui a été retranscris en STATUT super !!!!
                                $this->listeNomAction = array(
                                    'DOA_Tache_Action_Afficher',
                                    //'DOA_Tache_Action_EnvoiMail'
                                );
                                $this->actionPrincipale = 'DOA_Tache_Action_Afficher';
                            }
                            else{
                                $this->listeNomAction[] = 'DOA_Tache_Action_Afficher';
                                
                                /**
                                 * Numéro : Regle DOA_EXE_R8
                                 */
                                if (DOA_Action::isActeurRACI($array_info,$reqDoa['PROPRIETAIRE'],$reqDoa['PRESCRIPTEUR'])){
                                    $this->listeNomAction[] = 'DOA_Tache_Action_Executer';
                                    $this->actionPrincipale = 'DOA_Tache_Action_Executer';
                                }
                                else{
                                    $this->actionPrincipale = 'DOA_Tache_Action_Afficher';
                                }
                                
                                //'DOA_Tache_Action_EnvoiMail'
                            }
                        }
                        else
                        {
                            if ($reqDoa['STATUT'] == DOA_Referentiel::STATUT_TERMINE)
                            {
                                $this->listeNomAction = array(
                                    'DOA_Tache_Action_Afficher',
                                    //'DOA_Tache_Action_EnvoiMail'
                                );
                                $this->actionPrincipale = 'DOA_Tache_Action_Afficher';
                            }
                        }
                    }
                }
                break;
            case TypeSuivi::CAMPEVE:
                if ($reqSql = SqlCampEve::rqGetCampagneEnt($num_doc)->Trouve1()){
                    $this->listeNomAction = array();
                    
                    
                    if ($reqSql['STATUT'] == CampEve::STATUT_ENCOURS && $reqSql['CREEEPAR'] == $_SESSION['Session_Login']
                        /** Mis en commentaire vu avec YA le 22/09/15 pas de test au niveau des questions
                         * && ! CampEve::isModeNotation($num_doc)
                         */
                        ){
                            array_push($this->listeNomAction, 'Aff_CLOT_CAMP');
                            $this->actionPrincipale = 'Aff_CLOT_CAMP';
                    }
                    
                    array_push($this->listeNomAction, 'PdfCamp');
                }
                else{
                    $this->actionPrincipale = 'detailCAMP';
                    $this->listeNomAction = array('detailCAMP');
                }
                break;
            case TypeSuivi::CAMPNOT:
                if ($reqSql = SqlPanier::rqGetRecordFournisseur($num_doc)->Trouve1())
                    $this->listeNomAction = array();
                    
                    break;
            case TypeSuivi::AO_PANIER:
                // Spec 3680
                $contexteAffichage      = $array_info['contexte'];
                
                
                if ($reqSql = SqlAo::rqGetAOPanier($num_doc)->Trouve1()){
                    if ($reqSql['DTE_VALID_AO']=='00000000'){ // En preparation
                        if ('ContexteSuivi' == $contexteAffichage) {
                            $this->actionPrincipale[] = 'AO_Valider';
                            
                            $this->listeNomAction[] = 'AO_Voir';
                            $this->listeNomAction[] = 'AO_Clause';
                            
                            // TODO Pour le moment en standby $this->listeNomAction[] = 'AO_Modifier';
                            $this->listeNomAction[] = 'AO_Ajout_Fournisseur';
                            $this->listeNomAction[] = 'AO_Ref_Frs';
                            $this->listeNomAction[] = 'AO_Valider';
                            $this->listeNomAction[] = 'AO_Supprimer';
                            $this->listeNomAction[] = 'AO_Duplication';
                            $this->listeNomAction[] = 'AO_Gestion_PJ';
                            
                            // Le menu « Choix fournisseurs retenus » ne doit pas être présent sur les AO au statut « En préparation » 26110
                        }
                    }
                    else
                        if ($reqSql['VALCHXFOU']=='00000000'){ // En cours
                            if ('ContexteSuivi' == $contexteAffichage) {
                                $this->listeNomAction[] = 'AO_Voir';
                                $this->listeNomAction[] = 'AO_Clause';
                                $this->actionPrincipale = 'AO_Reponse_Saisie';
                                
                                $this->listeNomAction[] = 'AO_Envoyer';
                                $this->listeNomAction []= 'AO_Ajout_Fournisseur'; // L'ajout fournisseur doit etre possible aussi dans le statut encours
                                if (0 == $array_info['NbReponsesAO'])
                                    $this->listeNomAction[] = 'AO_Devalider';
                                    $this->listeNomAction[] = 'AO_Reponse_Saisie';
                                    $this->listeNomAction[] = 'AO_Reponse_Editer';
                                    $this->listeNomAction[] = 'AO_Tableau_Editer'; // Suite dossier 25444 ajout au travers du statut encours
                                    $this->listeNomAction[] = 'AO_Duplication';
                                    //$this->listeNomAction[] = 'AO_Val_Chx_Four';
                                    // Tester les droits HA_AO_ADMIN ou acheteur de l'AO
                                    //MFC spec 3680
                                    $this->listeNomAction[] = 'AO_Reponse_Import_Fichier';
                                    if (DroitAcces::GetAOAdmin()){
                                        $this->listeNomAction[] = 'AO_Chx_Four_Retenu';
                                        $this->listeNomAction[] = 'AO_Export_Tbl_Cmp_Xsl';
                                    }
                                    
                                    $this->listeNomAction[] = 'AO_Gestion_PJ';
                                    
                            } else {
                                $this->listeNomAction[] = 'AO_Voir';
                                $this->listeNomAction[] = 'AO_Clause';
                                $this->listeNomAction[] = 'AO_Envoyer';
                                $this->listeNomAction[] = 'AO_Reponse_Editer';
                                $this->listeNomAction[] = 'AO_Tableau_Editer'; // Suite dossier 25444 ajout au travers du statut encours
                                
                                $this->listeNomAction[] = 'AO_Gestion_PJ';
                                $this->listeNomAction[] = 'AO_Duplication';
                            }
                            
                    }
                    else{
                        // Terminé
                        // Pas d'action principale
                        
                        if ('ContexteSuivi' == $contexteAffichage) {
                            $this->listeNomAction[] = 'AO_Voir';
                            $this->listeNomAction[] = 'AO_Clause';
                            $this->listeNomAction[] = 'AO_Reponse_Editer';
                            $this->listeNomAction[] = 'AO_Tableau_Editer';
                            $this->listeNomAction[] = 'AO_Duplication';
                            $this->listeNomAction[] = 'AO_Deval_Chx_Four';
                            $this->listeNomAction[] = 'AO_Gestion_PJ';
                            
                            
                        } else {
                            $this->listeNomAction[] = 'AO_Voir';
                            $this->listeNomAction[] = 'AO_Clause';
                            $this->listeNomAction[] = 'AO_Reponse_Editer';
                            $this->listeNomAction[] = 'AO_Tableau_Editer';
                            $this->listeNomAction[] = 'AO_Duplication';
                            $this->listeNomAction[] = 'AO_Gestion_PJ';
                            
                        }
                        /**
                         * Donner la possibilité de créer un panier uniquement sur UN seul fournisseur mais ce dernier doit etre retenu
                         * et pour le moment uniquement via le type_fg = 'F'
                         */
                        $this->listeNomAction[] = 'AO_CreePanier';
                    }
                    /**
                     *  26110 Le menu « Afficher les documents rattachés » doit toujours être disponible quelque soit le statut de l’AO.
                     *  On doit également pouvoir rajouter à loisir des documents sans contraintes de statut. demande PP meme en statut terminé, EDP je comprend plus rien au demandes....
                     */
                    $this->listeNomAction[] = 'AO_DocRatt';
                }
                $this->listeNomAction[] = 'Aff_EVT';
                break;
        }
            
        //création des champs renseignés dans listeNomChamps dans un tableau d'objet $listeObjectChamp
        if (is_array($this->listeNomAction))
            foreach ($this->listeNomAction as & $action)
            {
                $this->listeObjectAction[] = new TypeAction($action, $this->typeSuivi, $this->num_doc, $array_info);
            }
                //Création du tableau d'information des champs pour l'affichage
                $tabObj = array();
                
                if (is_array($this->listeObjectAction))
                    foreach ($this->listeObjectAction as $i => & $action)
                        if ($action->isVisible() && (trim($action->getOnclick()) != '' || $action->getCode() == 'LigneHorizontale')) {
                            $tabObj[$i] = array('!code' => $action->getCode(),
                                '!libelle' => $action->getLibelle(),
                                '!image_src' => $action->getImage_src(),
                                '!onclick' => $action->getOnclick(),
                                '!refresh' => $action->getRefresh(),
                                '!principal' => ($this->actionPrincipale == $action->getCode()) ? 1 : 0
                            );
                            
                            if ('' != $zone_globale)
                                $tabObj[$i]['zone']['!zone_globale'] = $zone_globale;
                                
                                if ('' != $zone_actions)
                                    $tabObj[$i]['zone']['!zone_actions'] = $zone_actions;
                        }
                    
                    $this->tabInfo = & $tabObj;
    }
    
    /**
     *  Méthodes GET and SET
     */
    public function & getTabInfo() {
        return $this->tabInfo;
    }
    
    /**
     * Fonction permettant de construire le tableau des actions disponibles pour un document.
     * Cette fonction est utilisée dans le cas du rafraichissement des actions disponibles suite à l'exécution d'une action.
     *
     * @return array : Tableau des actions possibles
     */
    public function & getTabInfoForRefresh() {
        $tab['document']['actions'][] = & $this->tabInfo;
        
        return $tab;
    }
    
    /**
     *  Méthodes avec requêtes SQL
     */
    /**
     *  Autres méthodes
     */
}