<?php

/**
 * Classe dédiée à la gestion de l'objet du workflow : Envoi AO
 */
class VisuWorflowAOPanierEnvoiAO extends VisuWorflowAOPanier
{

    public function __construct($typeSuivi, $no_doc)
    {
        $this->TYPE = 'E';
        $this->NOM = 'EnvoiAO';
        $this->LIBELLE = trad('Envoi AO');
        
        $this->initETAT($typeSuivi, $no_doc);
        
        if ($this->ETAT) {
            $this->getInfosEntete($no_doc);
            $this->initSTATUT($typeSuivi, $no_doc);
        }
    }

    public function initETAT($typeSuivi, & $no_doc)
    {
        switch ($typeSuivi) {
            case TypeSuivi::AO_PANIER:
                // On affiche tous les éléments à partir du moment où nous sommes sur le suivi des AO
                $this->ETAT = 1;
                break;
            default:
                $this->ETAT = 0;
                break;
        }
    }

    public function initSTATUT(& $typeSuivi, & $no_doc)
    {
        // Statuts = N, C, T, R,
        switch ($typeSuivi) {
            case TypeSuivi::AO_PANIER:
                // Par défaut
                $this->STATUT = 'N';
                
                // est-ce qu'il y a eu validation du fournisseur?
                if ('00000000' != $this->infosEntete['VALCHXFOU']) {
                    $this->STATUT = 'T';
                } else {
                    // On verifie les réponses fournisseurs : ont-elle été envoyées
                    $reqSql = SqlAo::rqAO_FourRetenu($no_doc)->TrouveTous();
                    $allFrsImp = true;
                    $conteurEnvoi = 0;
                    $nombreAoNonEnvoyer = 0;
                    if (is_array($reqSql)) {
                        foreach ($reqSql as & $values)
                            if (0 == $values['EVE_IMP']) {
                                $nombreAoNonEnvoyer++;
                                $allFrsImp = false;
                                break;
                            }
                        $conteurEnvoi++;
                        unset($reqSql);
                    }
                    if ($allFrsImp)
                        $this->STATUT = 'T';
                    // elseif ('00000000' != $this->infosEntete['DTE_VALID_AO'])
                    elseif ($conteurEnvoi != 0 && $nombreAoNonEnvoyer < $conteurEnvoi)
                        // L'AO a été validé, il est au moins commencé
                        $this->STATUT = 'C';
                }
                $this->getArrayInfos($no_doc);
                $this->DATA[] = $this->initDATA($no_doc);
                break;
            default:
                $this->STATUT = 'T';
                break;
        }
    }

    protected function getArrayInfos($no_doc)
    {
        $this->arrayInfos = array();
        $tmpListeEvt = SqlAo::rqGetAOEventements($no_doc)->TrouveTous();
        if (is_array($tmpListeEvt))
            foreach ($tmpListeEvt as &$evt)
                if ('ENV' == $evt['CODE'])
                    $this->arrayInfos[] = $evt;
    }

    public function &initDATA(& $no_doc)
    {
        $data['ENTETE'] = $this->infosEntete;
        $data['ENTETE']['STATUT'] = AO_panier::getAoStatus($data['ENTETE']['DTE_VALID_AO'], $data['ENTETE']['VALCHXFOU']);
        $data['ENTETE']['ACTION']['IMP_AO'] = "CallUrl('suivi_doc.php','action=PDF_non_Chiffre&typ_doc=AO&no_doc={$no_doc}');";
        
        // On recupère les informations liées aux événements sur les AO
        if (count($this->arrayInfos) > 0) {
            foreach ($this->arrayInfos as &$evt) {
                $evt['LIBELLE'] = AO_panier::getLibelleEvenement($evt['CODE']);
                $evt['DTE'] = convertDateSqlToFr($evt['DTE']);
                $evt['HEURE'] = convertHeureSqlToFr($evt['HEURE']);
            }
            $data['LISTE_EVE'] = &$this->arrayInfos;
        }
        return $data;
    }
}
