<?php

class CreationShortList
{

    public static $id_Form = 'frm_creation_short_list';

    public static $id_CODLST = 'CODLST';

    public static $id_LIBELLE = 'LIBELLE';

    public static $id_COMM = 'COMM';

    public static $id_DTE_DEB = 'DTE_DEB';

    public static $id_DTE_FIN = 'DTE_FIN';

    public static function &GetListeChamps()
    {
        $array = array(
            array(
                '!ID' => CreationShortList::$id_CODLST,
                '!LIB' => Trad('Code Liste'),
                '!MAXI' => 18
            ),
            array(
                '!ID' => CreationShortList::$id_LIBELLE,
                '!LIB' => Trad('Libellé'),
                '!MAXI' => 60
            ),
            array(
                '!ID' => CreationShortList::$id_COMM,
                '!LIB' => Trad('Commentaire'),
                '!MAXI' => 3000
            ),
            array(
                '!ID' => CreationShortList::$id_DTE_DEB,
                '!LIB' => Trad('Date début'),
                '!MAXI' => 10
            ),
            array(
                '!ID' => CreationShortList::$id_DTE_FIN,
                '!LIB' => Trad('Date Fin'),
                '!MAXI' => 10
            )
        );
        return $array;
    }

    public static function &BuildXml($codeLst = null)
    {
        $arrayChampsTmp = CreationShortList::GetListeChamps();
        
        if (! is_null($codeLst)) {
            $sql = "SELECT * FROM LST_FOURN WITH(NOLOCK) WHERE CODLST = " . ReplaceSql($codeLst);
            $reqElement = (new RequeteSQL($sql, DB_OXASQLDB))->Trouve1();
        } else
            $reqElement = null;
        
        $icpt = 0;
        foreach ($arrayChampsTmp as &$champ) {
            $key = $champ['!ID'];
            $libelle_champ = $champ['!LIB'];
            $valeur = (is_null($codeLst) ? '' : $reqElement[$key]);
            $longueurMax = $champ['!MAXI'];
            $lgChampTexte = $champ['!MAXI'];
            $champBdd = $key;
            $obligatoire = false;
            
            $id_taxe = 0;
            switch ($key) {
                case CreationShortList::$id_LIBELLE:
                    $obligatoire = true;
                    $arrayChamps[$icpt] = array(
                        '!libelle_chp' => $libelle_champ,
                        '!obligatoire' => $obligatoire,
                        '!name' => $key,
                        '!actif' => true,
                        '!value' => $valeur,
                        '!maxlength' => $longueurMax,
                        '!size' => $lgChampTexte
                    );
                    break;
                case CreationShortList::$id_COMM:
                    $obligatoire = false;
                    $arrayChamps[$icpt] = array(
                        '!libelle_chp' => $libelle_champ,
                        '!obligatoire' => $obligatoire,
                        '!name' => $key,
                        '!actif' => true,
                        '!value' => $valeur,
                        '!rows' => 6,
                        '!cols' => 50
                    );
                    break;
                case CreationShortList::$id_CODLST:
                    $obligatoire = true;
                    if (0 == $longueurMax)
                        $longueurMax = 45;
                    if (0 == $lgChampTexte)
                        $lgChampTexte = 45;
                    break;
                case CreationShortList::$id_DTE_DEB:
                case CreationShortList::$id_DTE_FIN:
                    $obligatoire = false;
                    $valeurTmp = ($valeur == '00000000' ? '' : convertDateSqlToFr($valeur));
                    $format = 'D';
                    $objet = '';
                    $longueurMax = $longueurMax;
                    $lgChampTexte = $longueurMax;
                    
                    // Partie case texte
                    $modifiable = true;
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setName($key);
                    $compXsl->setReadonly(false);
                    $compXsl->setValeur($valeurTmp);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($lgChampTexte);
                    
                    // $compXsl->setAction($jsCheckValeur);
                    // $compXsl->setImgClasse($classeImage);
                    // $compXsl->setImgOnclick($onclickTmp);
                    // $compXsl->setToolTipChangement($valeurModif);
                    
                    $arrayChamps[$icpt] = $compXsl->buildXml();
                    $arrayChamps[$icpt]['!libelle_chp'] = $libelle_champ . '';
                    $arrayChamps[$icpt]['!obligatoire'] = false;
                    break;
            }
            $icpt ++;
        }
        
        $array['champs'] = & $arrayChamps;
        $array['form'] = array(
            '!id' => CreationShortList::$id_Form,
            '!enregistrer' => 'Traite(\'creation_sl.php?action=enregistrer' . (is_null($codeLst) ? '' : '&code=' . $codeLst) . '\', document.' . CreationShortList::$id_Form . '.' . CreationShortList::$id_LIBELLE . ');'
        );
        
        $array['action'] = 'AfficherFiche';
        return $array;
    }

    /**
     * Si codLst vaut null alors mode création sinon c'est la référence interne de la short list
     * 
     * @param string $codLst
     * @return NULL[]|string[]
     */
    public static function &checkValues($codLst = null)
    {
        $arrayWsdl = array();
        $messageErreur = '';
        $arrayChampsFou = CreationShortList::GetListeChamps();
        
        $ChampSIREN = 0;
        
        foreach ($arrayChampsFou as &$infoChamp) {
            $id = $infoChamp['!ID'];
            $valeur = & getValue($id);
            
            $valeur = trim($valeur);
            
            $lgChampMax = $infoChamp['!MAXI'];
            $lib = $infoChamp['!LIB'];
            
            if (0 != $lgChampMax) {
                if (! ControleSaisie::LengthControl($valeur, $lgChampMax)) {
                    $messageErreur = strBuild(Trad('Le champ \'@1@\' est limité à @2@'), $lib, $lgChampMax);
                    break;
                }
            }
            switch ($id) {
                case CreationShortList::$id_LIBELLE:
                    if ($valeur == '') {
                        $messageErreur = strBuild(Trad('Le champ \'@1@\' est obligatoire, veuillez le renseigner.'), $lib);
                        break;
                    }
                    break;
                case CreationShortList::$id_COMM:
                    $obligatoire = false;
                    break;
                case CreationShortList::$id_DTE_DEB:
                    if ($valeur != '') {
                        if (ControleSaisie::isDateValideFormat($valeur)) {
                            $valeur = convertDateUserToSql($valeur); // Normalisation de la donnée recu
                        } else
                            $messageErreur = strBuild(Trad('Le champ \'@1@\' est invalide, veuillez le renseigner.'), $lib);
                    }
                    $obligatoire = false;
                    break;
                case CreationShortList::$id_DTE_FIN:
                    if ($valeur != '') {
                        if (ControleSaisie::isDateValideFormat($valeur)) {
                            $valeur = convertDateUserToSql($valeur); // Normalisation de la donnée recu
                        } else
                            $messageErreur = strBuild(Trad('Le champ \'@1@\' est invalide, veuillez le renseigner.'), $lib);
                    }
                    $obligatoire = false;
                    break;
                default:
                    $obligatoire = false;
                    break;
            }
            
            if ($messageErreur != '')
                break;
            $arrayWsdl[$id] = $valeur;
        }
        
        // Controle de coherence sur les dates deb et fin en cas de saisie
        if ($messageErreur == '') {
            $dtDeb = getValue(CreationShortList::$id_DTE_DEB);
            $dtFin = getValue(CreationShortList::$id_DTE_FIN);
            
            if ($dtDeb > $dtFin && $dtDeb != '' && $dtFin != '') {
                $messageErreur = Trad('La saisie des date de début et fin est erronée');
            } else {
                if (is_null($codLst)) { // test en mode création
                    $sql = 'SELECT NULL FROM LST_FOURN WITH(NOLOCK) ' . 'WHERE LIBELLE = \'' . ReplaceSql(getValue(CreationShortList::$id_LIBELLE)) . '\' ' . '';
                    if ($req = (new RequeteSQL($sql, DB_OXASQLDB))->Trouve1()) {
                        $messageErreur = Trad('Une short list existe déjà avec ce libellé');
                    }
                } else { // Test en mode modification
                    $sql = 'SELECT NULL FROM LST_FOURN WITH(NOLOCK) ' . 'WHERE LIBELLE = \'' . ReplaceSql(getValue(CreationShortList::$id_LIBELLE)) . '\' ' . 'AND   CODLST <> ' . ReplaceSql($codLst) . ' ' . '';
                    if ($req = (new RequeteSQL($sql, DB_OXASQLDB))->Trouve1()) {
                        $messageErreur = Trad('Une short list existe déjà avec ce libellé');
                    }
                }
            }
            
            // Traitement de sauvegarde
        }
        
        $resultat = array(
            'messageErreur' => $messageErreur,
            'tableauValeurs' => & $arrayWsdl
        );
        return $resultat;
    }

    /**
     * Fonction de mise à jour en base création / modification des données de la short list
     * Si codLst vaut null alors mode création sinon c'est la référence interne de la short list
     * 
     * @param string $codLst
     * @return number
     */
    public static function enregistre($codLst = null)
    { // true creation | false modification
        if (is_null($codLst))
            $sql = 'insert into LST_FOURN (LIBELLE,COMM,DTE_DEB,DTE_FIN) ' . 'values (' . '\'' . ReplaceSqlPointeur(getValue(CreationShortList::$id_LIBELLE)) . '\'' . ',' . '\'' . ReplaceSqlPointeur(getValue(CreationShortList::$id_COMM)) . '\'' . ',' . '\'' . ReplaceSqlPointeur(getValue(CreationShortList::$id_DTE_DEB)) . '\'' . ',' . '\'' . ReplaceSqlPointeur(getValue(CreationShortList::$id_DTE_FIN)) . '\'' . ')';
        else
            $sql = 'update LST_FOURN ' . 'SET ' . CreationShortList::$id_LIBELLE . ' = \'' . ReplaceSqlPointeur(getValue(CreationShortList::$id_LIBELLE)) . '\' ' . ',   ' . CreationShortList::$id_COMM . ' = \'' . ReplaceSqlPointeur(getValue(CreationShortList::$id_COMM)) . '\' ' . ',   ' . CreationShortList::$id_DTE_DEB . ' = \'' . ReplaceSqlPointeur(getValue(CreationShortList::$id_DTE_DEB)) . '\' ' . ',   ' . CreationShortList::$id_DTE_FIN . ' = \'' . ReplaceSqlPointeur(getValue(CreationShortList::$id_DTE_FIN)) . '\' ' . 'WHERE CODLST = ' . ReplaceSql($codLst);
        
        $req = new RequeteSQL($sql, DB_OXASQLDB);
        return $req->ExecuteSql();
    }

    public static function supprime($code)
    {
        $sql = 'DELETE FROM LST_FOURN WHERE CODLST = ' . ReplaceSql($code);
        $req = new RequeteSQL($sql, DB_OXASQLDB);
        return $req->ExecuteSql();
    }
}
