<?php

/**
 * Classe dédiée à la gestion de l'objet du workflow : BS
 */
class VisuWorflowBS extends ObjetVisuWorflow
{

    protected $TYPE;

    protected $NOM;

    protected $ETAT;

    protected $STATUT;

    protected $LIBELLE;

    protected $DATA;

    public function __construct($typeSuivi, $no_doc)
    {
        $this->TYPE = 'D';
        $this->NOM = 'BS';
        $this->LIBELLE = trad('BS');
        
        $this->initETAT($typeSuivi, $no_doc);
        
        if ($this->ETAT)
            $this->initSTATUT($typeSuivi, $no_doc);
    }

    public function &getETAT()
    {
        return $this->ETAT;
    }

    public function &getSTATUT()
    {
        return $this->STATUT;
    }

    public function &getTYPE()
    {
        return $this->TYPE;
    }

    public function &getNOM()
    {
        return $this->NOM;
    }

    public function &getLIBELLE()
    {
        return $this->LIBELLE;
    }

    public function &getDATA()
    {
        return $this->DATA;
    }

    public function initETAT(& $typeSuivi, & $no_doc)
    {
        $this->ETAT = 0; // On considère par défaut que l'objet DA est à l'état 0
                         // Si le workflow est appelé depuis une DA
        if (TypeSuivi::DA == $typeSuivi) {
            if ($info_ENTETE_DA = SqlDa::getInfoOnEnteteDA($no_doc)->Trouve1()) {
                if ($lignes_DA = SqlDa::getInfoOnLigneDA($no_doc)->TrouveTous())
                    // L'objet BS est affiché si : La DA donne lieu à un BS avec au moins une ligne sur stock
                    foreach ($lignes_DA as & $ligne)
                        if ('' != trim($ligne['SITE_STK']) && '' != trim($info_ENTETE_DA['FM_CODE'])) {
                            $this->ETAT = 1;
                            break;
                        }
            }
        }        // Si le workflow est appelé depuis une CDE, l'objet BS n'est pas affiché
        elseif (TypeSuivi::CDE == $typeSuivi)
            $this->ETAT = 0;
        // Si le workflow est appelé depuis un BR, l'objet BS n'est pas affiché
        elseif (TypeSuivi::BR == $typeSuivi)
            $this->ETAT = 0;
        // Si le workflow est appelé depuis un BAP, l'objet BS n'est pas affiché
        elseif (TypeSuivi::BAP == $typeSuivi)
            $this->ETAT = 0;
    }

    public function initSTATUT(& $typeSuivi, & $no_doc)
    {
        $this->STATUT = 'T'; // On considère par défaut que l'objet DA à le staut terminée
                             // Si le workflow est appelé depuis une DA
        if (TypeSuivi::DA == $typeSuivi) {
            // On récupère les BS associés à la DA
            $liste_BS = SqlBs::rqGetBSfromDA($no_doc)->TrouveTous();
            
            // Si aucun BS n'existe alors le staut est "non commencé"
            if (! is_array($liste_BS) || 0 == count($liste_BS)) {
                $this->STATUT = 'N';
            } else {
                // Si des BS existe, alors si l'un d'entre eux n'est pas validé alors le statut est "commencé"
                foreach ($liste_BS as & $BS) {
                    $info_BS = SqlBs::getInfoOnEnteteBS($BS['NO_BS'])->Trouve1();
                    if ('00000000' == $info_BS['DTE_VALID']) {
                        $this->STATUT = 'C';
                    }
                    $this->DATA[] = $this->initDATA($BS['NO_BS']);
                }
            }
        }
    }

    public function &initDATA(& $no_doc)
    {
        
        // On recupère les informations liées à l'entête du BS
        $data['ENTETE'] = SqlBs::getInfoOnEnteteBS($no_doc)->Trouve1();
        
        // Si l'utilisateur dispose du droit requis, on ajoute l'action d'impression de la CDE
        if (1 == $_SESSION['BS_ImprValo'])
            $data['ENTETE']['ACTION']['IMP_CHIF'] = "CallUrl('suivi_doc.php','action=PDF_Chiffre&typ_doc=BS&no_doc={$no_doc}');";
        
        if (1 == $_SESSION['BS_ImpNValo'])
            $data['ENTETE']['ACTION']['IMP_NOT_CHIF'] = "CallUrl('suivi_doc.php','action=PDF_non_Chiffre&typ_doc=BS&no_doc={$no_doc}');";
        
        if ('00000000' == $data['ENTETE']['DTE_VALID'] || mb_strlen($data['ENTETE']['DTE_VALID']) != 8)
            $data['ENTETE']['DTE_VALID'] = trad('Non validé');
        else
            $data['ENTETE']['DTE_VALID'] = convertDateSqlToFr($data['ENTETE']['DTE_VALID']);
        
        return $data;
    }
}
