<?php

class EcranSuiviCDE extends EcranSuivi
{

    const statutEnAttente = 'EN_ATTENTE';

    const statutEnSignature = 'EN_SIGNATURE';

    const statutRefusee = 'REFUSEE';

    const statutAEnvoyer = 'A_ENVOYER';

    const statutEnvoyee = 'ENVOYEE';

    const statutAReceptionner = 'A_RECEPTIONNER';

    const statutReceptionPartielle = 'RECEPTIONNEE_PARTIEL';

    const statutReceptionnee = 'RECEPTIONNEE';

    const statutFacturee = 'FACTUREE';

    const statutEnLitige = 'EN_LITIGE';

    const statutAnnulee = 'ANNULEE';

    const typeDateValidation = 'VALID';

    const typeDateLivraison = 'LIV';

    const filtreSignataire = 'SIGNAT';

    function __construct(& $initData)
    {
        $this->type_suivi = TypeSuivi::CDE;
        $this->titre_ppal_ecran = Trad("Suivi de Commandes AMI");
        $this->initSuivi($initData);
        $this->hasFavoris = true;
        
        //
        // Préparation de la requête
        //
        $this->requetePaginee = new RequetePaginee_SuiviCde($this->type_suivi);
        $this->requetePaginee->initPerimetre();
        $this->requetePaginee->setNavigationCallbacks(EcranSuivi::$callbackRecherche, CriteresRecherche::btnRechercher, $this->id_form);
    }

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

    function &buildXmlCriteres()
    {
        $array = EcranSuivi::buildXmlCriteres();
        
        // Correction intitulé N° de document
        $array['ecran']['form']['criteres']['!' . ChampRecherche::numdoc . '_lib'] = Trad('N° de DA/CDE');
        
        // Options du statut de commande
        $optionsStatut = & $array['ecran']['form']['criteres'][ChampRecherche::Statut]['liste']['option'];
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::statutEnAttente,
            '!texte' => Trad('En Attente')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::statutEnSignature,
            '!texte' => Trad('En signature')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::statutRefusee,
            '!texte' => Trad('Refusées')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::statutAEnvoyer,
            '!texte' => Trad('A envoyer')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::statutEnvoyee,
            '!texte' => Trad('Envoyées')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::statutAReceptionner,
            '!texte' => Trad('En attente de réception')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::statutReceptionPartielle,
            '!texte' => Trad('Livraison partielle')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::statutReceptionnee,
            '!texte' => Trad('Réceptionnées')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::statutFacturee,
            '!texte' => Trad('Facturées')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::statutEnLitige,
            '!texte' => Trad('En litige')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::statutAnnulee,
            '!texte' => Trad('Annulées')
        );
        
        // Types de date
        $optionsStatut = & $array['ecran']['form']['criteres'][ChampRecherche::typeDate]['liste']['option'];
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::typeDateValidation,
            '!texte' => Trad('Validation')
        );
        $optionsStatut[] = array(
            '!value' => EcranSuiviCDE::typeDateLivraison,
            '!texte' => Trad('Livraison')
        );
        
        return $array;
    }

    public static function buildXmlLigneResultat(& $NO_CDE, & $AVENANT, & $infos_rupture, & $est_sous_doc = false)
    {
        $array = array();
        $array['!type_ligne'] = 'donnees';
        $array['!est_ss_doc'] = $est_sous_doc;
        
        // On récupère les infos de rupture
        $type_rupture1 = $info_rupture['type_rupture1'];
        $type_rupture2 = $info_rupture['type_rupture2'];
        
        // Les infos à afficher
        $objSuiviDoc = new SuiviDocument('listeCreatedDocs');
        $modeHistorique = false;
        $type_doc_principal = '';
        $no_doc_principal = '';
        $contexte = null;

        $array['infos'] = $objSuiviDoc->buildXmlEnteteCDE($modeHistorique, $NO_CDE, $AVENANT, $type_doc_principal, $type_doc_principal, $contexte);
        
        $CODE_STE = $array['infos']['!CODE_STE'];
        
        $idBtnOuvrir = $array['infos']['btn_aff_masq']['!value'];
        $idBtnLoupe = $array['infos']['btn_aff_masq']['!value'] . '_cs';
        $idZoneSSDoc = $array['infos']['zone_contenu']['!value'];
        $idZoneSsLignes = str_replace('_contenu', '_ss_lignes', $idZoneSSDoc);
        
        $array['infos']['zone_ss_lignes'] = array(
            '!value' => $idZoneSsLignes
        );
        
        $idZoneCSEntete = $array['infos']['zone_globale']['!value'] . '_cs';
        $array['infos']['zone_cs_entete'] = array(
            '!value' => $idZoneCSEntete
        );
        
        //
        // Action principale
        //
        $idBtnAction = 'action_ppale_' . $NO_CDE;
        $action = 'alert("action principale");';
        $libelle = Trad('Principale');
        $composantActionPrincipale = new ComposantXslAction($idBtnAction);
        $composantActionPrincipale->setLibelle($libelle);
        $composantActionPrincipale->setAction($action);
        $composantActionPrincipale->setEstPrimaire(true);
        $array['actionPrincipale'] = $composantActionPrincipale->buildXml();
        
        //
        // Menu contextuel
        //
        $idMenu = 'MC_CDE_' . $NO_CDE;
        $compXslMenu = new ComposantXslMenuContextuel($idMenu);
        
        $idMenuEditer = 'LMC_testMC_' . $NO_CDE;
        $libelle = Trad('Test menu contextuel');
        $action = 'alert("Test menu contextuel");';
        $classeIcone = 'img_result_ok_mini_16x16';
        $menuEditer = new ComposantXslLigneMenuContextuel($idMenuEditer);
        $menuEditer->setLibelle($libelle);
        $menuEditer->setAction($action);
        $menuEditer->setClasseIcone($classeIcone);
        $compXslMenu->addMenu($menuEditer);
        
        $idVide = '';
        $menuSeparateur = new ComposantXslLigneMenuContextuel($idVide);
        $menuSeparateur->setSeparateur();
        $compXslMenu->addMenu($menuSeparateur);
        
        $array['menuContextuel'] = $compXslMenu->buildXml();
        
        //
        // Bouton "Ouvrir"
        //
        $action = EcranSuivi::getJSCollapseAndAction(TypeSuivi::CDE, $NO_CDE, $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();
        
        //
        // Bouton Loupe
        //
        $action = EcranSuivi::getJSAfficherCS($idBtnLoupe, $idZoneCSEntete, $idZoneSsLignes);
        $class_image = ComposantXslAction::img_loupe;
        $composantLoupe = new ComposantXslAction($idBtnLoupe);
        $composantLoupe->setImage($class_image);
        $composantLoupe->setAction($action);
        $array['btnLoupe'] = $composantLoupe->buildXml();
        
        return $array;
    }

    public function &buildXmlSsDoc(& $NO_CDE, & $CODE_STE)
    {
        $array = EcranSuivi::buildXmlSsDoc($NO_CDE, $CODE_STE);
        // ligne 2055
        $objSuiviDoc = new SuiviDocument('listeCreatedDocs');
        $modeHistorique = false;
        $array['infos'] = $objSuiviDoc->buildXmlLigneCDE($NO_CDE, $modeHistorique);
        
        if (! $modeHistorique) {
            if ($liste_cs = SqlDa::getInfoOnLigneCDECS($NO_CDE)->TrouveTous()) {
                SqlCs::traiteResultatCs($liste_cs, $CODE_STE);
                foreach ($array['infos'] as & $ligne)
                    foreach ($liste_cs as & $lignecs)
                        if ($lignecs['NUMERO_LIGNE'] - $ligne['no_po']['!value'] == 0)
                            $ligne['cs'][] = $lignecs;
            }
        }
        
        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)) {
            $type_rupture1 = RequetePaginee::getValue($data, ChampRecherche::rupture1);
            $type_rupture2 = RequetePaginee::getValue($data, ChampRecherche::rupture2);
            $rupture2_existe = ($type_rupture2 != '');
            $val_rupture1_courant = '';
            $val_rupture1_courant = '';
            
            $infos_rupture = array(
                'type_rupture1' => $type_rupture1,
                'type_rupture2' => $type_rupture2,
                'code_rupture1' => '',
                'code_rupture2' => '',
                'val_rupture1' => '',
                'val_rupture2' => ''
            );
            
            if ('' == $type_rupture1 && '' == $type_rupture2) {
                // Gestion de l'entête de rupture
            }
            
            foreach ($resultat as & $values) {
                $NO_CDE = trim($values['NO_CDE']);
                $AVENANT = trim($values['AVENANT']);
                
                $this->id_affiches[$id_ligne] = array(
                    'rupture1' => '',
                    'rupture2' => ''
                );
                
                // Note : les valeur de rupture sur libellé (par exemple pour le demandeur, etc...) sont traités au niveau de la ligne résultat
                $xml_ligne = $this->buildXmlLigneResultat($NO_CDE, $AVENANT, $infos_rupture);
                
                $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;
    }
}
