<?php

class EcranSuiviDemandeFou extends EcranSuivi
{

    const statutEnSignature = 'EN_SIGNATURE';

    const statutCree = 'CREE';

    const statutRefusee = 'REFUSEE';

    const typeCreation = 'CREAT';

    const typeModification = 'MODIF';

    function __construct(& $initData)
    {
        $this->type_suivi = TypeSuivi::GESTFOURNISS_Dem_four;
        $this->titre_ppal_ecran = Trad("Suivi des demandes fournisseurs");
        $this->initSuivi($initData);
        $this->hasFavoris = false;
        
        //
        // Préparation de la requête
        //
        $this->requetePaginee = new RequetePaginee_SuiviDemFou($this->type_suivi);
        $this->requetePaginee->initPerimetre();
        $this->requetePaginee->setNavigationCallbacks(EcranSuivi::$callbackRecherche, CriteresRecherche::btnRechercher, $this->id_form);
    }

    public static function &getFromSession($initData)
    {
        $objResult = new RequetePaginee_SuiviDemFou($initData);
        $array_tmp = EcranSuivi::getSession($objResult->type_suivi, $objResult);
        if (! is_null($array_tmp)) {
            $objResult->requetePaginee = new RequetePaginee_SuiviDemFou($objResult->type_suivi);
            $objResult->requetePaginee->loadFromString($array_tmp['requetePaginee']);
        }
        
        return $objResult;
    }

    function &buildXmlCriteres()
    {
        $array = EcranSuivi::buildXmlCriteres();
        
        // Options du statut de demande
        $optionsStatut = & $array['ecran']['form']['criteres'][ChampRecherche::Statut]['liste']['option'];
        $optionsStatut[] = array(
            '!value' => EcranSuiviDemandeFou::statutEnSignature,
            '!texte' => Trad('En signature')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviDemandeFou::statutCree,
            '!texte' => Trad('Créé')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviDemandeFou::statutRefusee,
            '!texte' => Trad('Refusé')
        );
        
        // $testDemAch = &$array['ecran']['form']['criteres'][ChampRecherche::Dem_Ach];
        // $testDemAch['!value'] = 'WWWWYWWWWYWWWWY';
        
        // Options du type de demande = Non, c'est un nouveau type donc on laisse tel quel
        // $optionsType = & $array['ecran']['form']['criteres'][ChampRecherche::typeCreMod]['liste']['option'];
        // $optionsType[] = array('!value' => EcranSuiviDemandeFou::typeCreation, '!texte' => Trad('Creation'));
        // $optionsType[] = array('!value' => EcranSuiviDemandeFou::typeModification, '!texte' => Trad('modification'));
        
        return $array;
    }

    function &buildXmlLigneResultat($CODE)
    {
        $array = array();
        $infos = array();
        
        $infos['!CODE_FRS'] = $CODE;
        $reqSql = SqlFrs::rqGetRecordFournis($CODE)->Trouve1();
        if (is_array($reqSql)) {
            $infos['!NO_DEMANDE'] = $CODE;
            $infos['!CODE_STE'] = '3.14';
            $infos['!RAIS_SOC_STE'] = 'RAISON_SOC';
            $infos['!LIB_FRS'] = $reqSql['RS'];
            
            $infos['!CODE_DEMAND'] = 'Tagada';
            $infos['!LIB_DEMAND'] = 'Lib Tagada';
            
            $statut = EcranSuiviDemandeFou::statutCree;
            $lib_statut = '';
            switch ($statut) {
                case EcranSuiviDemandeFou::statutCree:
                    $lib_statut = trad('Créé');
                    break;
                case EcranSuiviDemandeFou::statutEnSignature:
                    $lib_statut = trad('En signature');
                    break;
                case EcranSuiviDemandeFou::statutRefusee:
                    $lib_statut = trad('Refusé');
                    break;
                default:
                    $lib_statut = trad('Indéterminé');
                    break;
            }
            $infos['!STATUT'] = $lib_statut;
            $infos['!DATE'] = convertDateSqlToFr('20171225');
            
            $type = EcranSuiviDemandeFou::typeCreation;
            $lib_type = '';
            switch ($type) {
                case EcranSuiviDemandeFou::typeCreation:
                    $lib_type = trad('Création');
                    break;
                case EcranSuiviDemandeFou::typeModification:
                    $lib_type = trad('Modification');
                    break;
            }
            $infos['!TYPE'] = $lib_type;
        }
        $array['infos'] = &$infos;
        
        //
        // Menu contextuel
        //
        $idMenu = 'MC_FOUR_' . $CODE;
        $compXslMenu = new ComposantXslMenuContextuel($idMenu);
        
        $idMenuEditer = 'LMC_FOUR_' . $CODE;
        $libelle = Trad('Accès aux évènements de signatures');
        $no_doc = 90;
        $action = ListeEvenementDemandeFou::getJSPopup($this->type_suivi, $no_doc);
        $classeIcone = 'img_result_ok_mini_16x16';
        $menuEditer = new ComposantXslLigneMenuContextuel($idMenuEditer);
        $menuEditer->setLibelle($libelle);
        $menuEditer->setAction($action);
        $menuEditer->setClasseIcone($classeIcone);
        $compXslMenu->addMenu($menuEditer);
        
        $idMenuRefuser = 'LMC_REFUS_' . $CODE;
        $libelle = Trad('Refuser');
        $no_doc = 90;
        $action = EcranSuivi::getJSSwitchVersConfirmation($this->id_div_principal, $this->id_div_confirmation, $this->type_suivi, $no_doc);
        $classeIcone = 'img_result_ok_mini_16x16';
        $menuEditer = new ComposantXslLigneMenuContextuel($idMenuEditer);
        $menuEditer->setLibelle($libelle);
        $menuEditer->setAction($action);
        $menuEditer->setClasseIcone($classeIcone);
        $compXslMenu->addMenu($menuEditer);
        
        $array['menuContextuel'] = $compXslMenu->buildXml();
        
        //
        // Bouton "Ouvrir"
        //
        $CODE_STE = '';
        $idBtnLoupe = '';
        $idZoneSSDoc = 'SS_DOC_' . $CODE;
        $idZoneSsLignes = 'SS_LIGNE_' . $CODE;
        
        $array['infos']['zone_ss_lignes'] = array(
            '!value' => $idZoneSsLignes
        );
        $array['infos']['zone_contenu'] = array(
            '!value' => $idZoneSSDoc
        );
        
        $action = EcranSuivi::getJSCollapseAndAction(TypeSuivi::GESTFOURNISS_Dem_four, $CODE, $CODE_STE, $idBtnLoupe, $idZoneSSDoc, $idZoneSsLignes);
        $libelle = Trad('Ouvrir');
        $composantOuvrir = new ComposantXslAction($idBtnOuvrir);
        $composantOuvrir->setLibelle($libelle);
        $composantOuvrir->setAction($action);
        $composantOuvrir->setEstPrimaire(false);
        $array['btnOuvrir'] = $composantOuvrir->buildXml();
        
        return $array;
    }

    function &buildXmlResultat(& $data)
    {
        $array = array();
        $array_resultat = array();
        $sql_where_filtre = '';
        unset($this->id_affiches);
        $this->id_affiches = array();
        
        $this->requetePaginee->traiteFiltres($data);
        
        // On tient compte des ruptures pour la requête SQL
        //
        $this->requetePaginee->traiteRupture($data);
        
        //
        // On prépare l'affichage du count
        //
        $count_total = $this->requetePaginee->getCountResultatFiltre();
        
        //
        // On prépare l'affichage du résultat
        //
        $num_page = CriteresRecherche::getValue($data, BarreNavigation::id_num_page);
        $resultat = $this->requetePaginee->getResultat($num_page);
        
        if (is_array($resultat)) {
            foreach ($resultat as & $values) {
                $CODE = trim($values['CODE']);
                $xml_ligne = $this->buildXmlLigneResultat($CODE);
                $array_resultat[] = $xml_ligne;
            }
        }
        
        $this->setToSession(); // On doit conserver plusieurs informations calculées ici
        
        $array['action'] = 'AfficheResultats';
        $array['type_suivi'] = $this->type_suivi;
        $array['resultats'] = & $array_resultat;
        $array['navigation'] = $this->requetePaginee->buildXmlBarreNavigation($num_page);
        
        return $array;
    }

    function &buildXmlSsDoc(& $CODE, & $CODE_STE)
    {
        $array = EcranSuivi::buildXmlSsDoc($CODE, $CODE_STE);
        return $array;
    }
}
