<?php

class SqlArticle
{

    public static function rqPopupGetAllArticlesHaplus($array_filters, $modeData, $objectSupport = null)
    {
        $sql = 'SELECT ' . ($modeData ? "CODE_ART, 
        (CASE 
            WHEN ISNULL(t.DES_ART, '') = ''
            THEN ARTICLES.DESIGN
            ELSE t.DES_ART
        END) AS DES_ART, 
        UNIT UNIT_ART, ARTICLES.REFARTFAB REF_FAB,  
        CASE  
            WHEN CDIRFMT = 0x54 or AUTOCC = 0x54 
            THEN 1 
            ELSE 0  
        END IS_AUTH_CDE_OXAPROC " : "count(*) CPTRESTBL  ") . '
        FROM ARTICLES WITH(NOLOCK) 
            LEFT OUTER JOIN FABRICAN WITH(NOLOCK) 
                ON  ARTICLES.CODEFAB = FABRICAN.CODE 
            LEFT OUTER JOIN TRAD_ART t WITH(NOLOCK)
                ON ARTICLES.CODE_ART = t.COD_ART
                    AND t.COD_LNG = \'' . $_SESSION['Session_Langue'] . '\'
        WHERE 1=1 ';
        if (array_key_exists('DATA_STRICT', $array_filters)) {
            $sql .= " and upper(CODE_ART) = upper('".ReplaceSqlPointeur($array_filters['DATA_STRICT'])."')";
        }
        
        if (! is_null($objectSupport)) {
            $NVIBOXAP = $objectSupport->getProperties('NVIBOXAP');
            if (! is_null($NVIBOXAP) && $NVIBOXAP == 1) {
                $sql .= ' AND NVIBOXAP = 0x46 ';
            }
        }
        
        // DOSSIER 33392 : Panier de type régul ou avenant : Prise en compte des sous-familles liés au fournisseur et aux sous-familles sans lien avec des fournisseurs si le paramètre « Limiter le choix du fournisseur à la liste des fournisseurs référencés pour la sous-famille et l’article » est activé et si l’utilisateur n'a pas le droit « Oxaproc : Voir tous fourn/art gén »
        if (array_key_exists('limitSsFamFounissPanier', $array_filters)) {
            // Récupération du code fournisseur à prendre en compte
            $codeFrsRegul = '';
            if (array_key_exists('PANIER_TYPE_SPEC', $_SESSION) && 'REGUL' === $_SESSION['PANIER_TYPE_SPEC']) {
                $panierEntete = new PanierEntete();
                $panierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);
                $champSpecifique = explode('=', $panierEntete->getCHPSPECCLT());
                
                if (('codfrs' === $champSpecifique[0] || 'REGUL|codfrs' === $champSpecifique[0]) && '' != $champSpecifique[1]) {
                    $codeFrsRegul = $champSpecifique[1];
                }
            }
            if (array_key_exists('PANIER_FOURNISSEUR_IMPOSE', $_SESSION) && '' != trim($_SESSION['PANIER_FOURNISSEUR_IMPOSE'])) {
                $codeFrsRegul = $_SESSION['PANIER_FOURNISSEUR_IMPOSE'];
            }

            // Si présence d'un fournisseur, alors on ajoute la clause de limitation des sous-famille
            if($codeFrsRegul != ''){
                $r = SqlParam::rqGetParamParavrac('OXAPROC', 'ARTGEN_LISTEFOURN_LIMITEE')->Trouve1();
                $limitationChoixFournisseur = is_array($r) && array_key_exists('LIB01PARV', $r) && $r['LIB01PARV'] == 'O';
                $droitVoirTousFourniss = SqlUsers::droitsUtilisateur('OX_AG_LF_L')->Trouve1()['DROIT'];
                $listeSsfamFourniss = SqlFrs::rqGetListeSousfamilleFournisseurRS($codeFrsRegul)->TrouveTous();
                if($limitationChoixFournisseur && !$droitVoirTousFourniss && is_array($listeSsfamFourniss)){
                    $sql .= " AND (
                        SSFAM in (SELECT distinct(CODE_SFAM) FROM SSFAMFOU where CODE_FOUR='$codeFrsRegul') 
                        or SSFAM not in (SELECT distinct(CODE_SFAM) FROM SSFAMFOU)
                    )";
                }
            }
		}

        $clause = '';
        $is_clause = false;
        if (array_key_exists('relevance', $array_filters)) {
            switch ($array_filters['relevance']) {
                case 'OR':
                case 'AND':
                    if ('' != trim($array_filters['CODE_ART'])) {
                        $liste_code = explode(' ', $array_filters['CODE_ART']);
                        foreach ($liste_code as $code)
                            if ('' !== trim($code))
                                $clause .= " upper(CODE_ART) like upper('%".ReplaceSqlPointeur($code)."%') {$array_filters['relevance']}";
                        $clause = mb_substr($clause, 0, mb_strlen($clause) - mb_strlen($array_filters['relevance']));
                        if ('' != $clause) {
                            $clause = " ({$clause})";
                            $is_clause = true;
                        }
                    }
                    if ('' != trim($array_filters['DES_ART'])) {
                        $liste_des = explode(' ', $array_filters['DES_ART']);
                        if ($is_clause)
                            $clause .= ' AND ';
                        foreach ($liste_des as $des)
                            if ('' !== trim($des))
                                $clause .= " upper(DESIGN) like upper('%".ReplaceSqlPointeur($des)."%') {$array_filters['relevance']}";
                        $clause = mb_substr($clause, 0, mb_strlen($clause) - mb_strlen($array_filters['relevance']));
                        if ('' != trim($clause)) {
                            $clause = "({$clause})";
                            $is_clause = true;
                        }
                    }
                    if ('' != trim($array_filters['UNIT_ART'])) {
                        if ($is_clause)
                            $clause .= ' AND ';
                        $liste_unit = explode(' ', $array_filters['UNIT_ART']);
                        foreach ($liste_unit as $unite)
                            if ('' !== trim($unite))
                                $clause .= " upper(UNIT) like upper('%".ReplaceSqlPointeur($unite)."%') {$array_filters['relevance']}";
                        $clause = mb_substr($clause, 0, mb_strlen($clause) - mb_strlen($array_filters['relevance']));
                        if ('' != trim($clause)) {
                            $clause = "({$clause})";
                            $is_clause = true;
                        }
                    }
                    break;
                case 'strict':
                    if ('' != trim($array_filters['CODE_ART'])) {
                        $clause .= "(upper(CODE_ART) like upper('".ReplaceSqlPointeur($array_filters['CODE_ART'])."%'))";
                        $is_clause = true;
                    }
                    if ('' != trim($array_filters['DES_ART'])) {
                        if ($is_clause)
                            $clause .= ' AND ';
                        $clause .= "(upper(DESIGN) like upper('".ReplaceSqlPointeur($array_filters['DES_ART'])."%'))";
                        $is_clause = true;
                    }
                    if ('' != trim($array_filters['UNIT_ART'])) {
                        if ($is_clause)
                            $clause .= ' AND ';
                        $clause .= "(upper(UNIT) like upper('".ReplaceSqlPointeur($array_filters['UNIT_ART'])."%'))";
                        $is_clause = true;
                    }
                    break;
            }
            if ($is_clause)
                $sql .= ' AND ' . $clause;
            if ($modeData && array_key_exists('orderByField', $array_filters) && '' != $array_filters['orderByValue'])
                $sql .= " order by {$array_filters['orderByField']} {$array_filters['orderByValue']}";
        }
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction permettant de déterminer si un code article existe dans HAPLUS
     * 
     * @param string $code_art
     *            : code article recherché
     */
    public static function rqIsArticleHaplus(& $code_art, $NVIBOXAP = null, $clauseSsFam = false)
    {
        $sql = "SELECT ISNULL(TRAD_ART.DES_ART, ARTICLES.DESIGN) LIB_ART, ARTICLES.*, FABRICAN.AUTOCC 
                FROM ARTICLES WITH (NOLOCK)
                    left join TRAD_ART with (nolock) on ARTICLES.CODE_ART = TRAD_ART.COD_ART and COD_LNG = '{$_SESSION['Session_Langue']}'
                    LEFT OUTER JOIN FABRICAN WITH (NOLOCK) 
                        ON FABRICAN.CODE = ARTICLES.CODEFAB
                WHERE ARTICLES.CODE_ART = '" . ReplaceSqlPointeur($code_art) . '\' ' . (is_null($NVIBOXAP) ? '' : ' AND NVIBOXAP = 0x46 ');
        
        // DOSSIER 33392 : Panier de type régul ou avenant : Prise en compte des sous-familles liés au fournisseur et aux sous-familles sans lien avec des fournisseurs si le paramètre « Limiter le choix du fournisseur à la liste des fournisseurs référencés pour la sous-famille et l’article » est activé et si l’utilisateur n'a pas le droit « Oxaproc : Voir tous fourn/art gén »
        if ($clauseSsFam) {
            // Récupération du code fournisseur à prendre en compte
            $codeFrsRegul = '';
            if (array_key_exists('PANIER_TYPE_SPEC', $_SESSION) && 'REGUL' === $_SESSION['PANIER_TYPE_SPEC']) {
                $panierEntete = new PanierEntete();
                $panierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);
                $champSpecifique = explode('=', $panierEntete->getCHPSPECCLT());
                
                if (('codfrs' === $champSpecifique[0] || 'REGUL|codfrs' === $champSpecifique[0]) && '' != $champSpecifique[1]) {
                    $codeFrsRegul = $champSpecifique[1];
                }
            }
            if (array_key_exists('PANIER_FOURNISSEUR_IMPOSE', $_SESSION) && '' != trim($_SESSION['PANIER_FOURNISSEUR_IMPOSE'])) {
                $codeFrsRegul = $_SESSION['PANIER_FOURNISSEUR_IMPOSE'];
            }

            // Si présence d'un fournisseur, alors on ajoute la clause de limitation des sous-famille
            if($codeFrsRegul != ''){
                $r = SqlParam::rqGetParamParavrac('OXAPROC', 'ARTGEN_LISTEFOURN_LIMITEE')->Trouve1();
                $limitationChoixFournisseur = is_array($r) && array_key_exists('LIB01PARV', $r) && $r['LIB01PARV'] == 'O';
                $droitVoirTousFourniss = SqlUsers::droitsUtilisateur('OX_AG_LF_L')->Trouve1()['DROIT'];
                $listeSsfamFourniss = SqlFrs::rqGetListeSousfamilleFournisseurRS($codeFrsRegul)->TrouveTous();
                if($limitationChoixFournisseur && !$droitVoirTousFourniss && is_array($listeSsfamFourniss)){
                    $sql .= " AND (
                        SSFAM in (SELECT distinct(CODE_SFAM) FROM SSFAMFOU where CODE_FOUR='$codeFrsRegul') 
                        or SSFAM not in (SELECT distinct(CODE_SFAM) FROM SSFAMFOU)
                    )";
                }
            }
        }

        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    public static function rqIsArticleGenerique(& $code_art)
    {
        $sql = "SELECT GENRERIQUE 
        FROM ARTICLES WITH (NOLOCK) 
        WHERE ARTICLES.CODE_ART='" . ReplaceSqlPointeur($code_art) . '\'';
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction permettant de déterminer si un code article existe dans HAPLUS
     * 
     * @param string $unite
     *            : code unité recherché
     */
    public static function rqIsUniteHaplus(&$unite)
    {
        $sql = '
            select
                *
            from
                UNITES with (nolock)
            where
                CODE_UNI=\'' . ReplaceSqlPointeur($unite) . '\'
        ';

        $cacheName = __FUNCTION__.'.'.$unite;

        return \SqlWincache::getSql($cacheName, $sql);
    }

    /**
     * Fonction retournant le prix d'un article donné exprimé selon unité HAPLUS
     *
     * @param string $code_art
     *            : Code de l'article HAPLUS
     * @param string $unite
     *            : Unité de l'article dans intuition
     * @param int $prix_art
     *            : Prix de l'article retourné par intuition
     * @return string SQL
     */
    public static function getPrixArtInCondHaplus(& $code_art, & $unite, & $prix_art)
    {
        $sql = "	select 'PRIX_ART_IN_CDT_HAPLUS' = (" . ReplaceSqlPointeur($prix_art) . " / CONVERS.VAL_1_2)
					from	CONVERS with (nolock), ARTICLES with (nolock)
					where   CONVERS.CODE_UNI1 = '" . ReplaceSqlPointeur($unite) . "'
					and		CONVERS.CODE_UNI2 = ARTICLES.UNIT
					and		ARTICLES.CODE_ART = '" . ReplaceSqlPointeur($code_art) . '\'';
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requete permettant de convertir une quantité d'une unité vers la quantité équivalente dans une autre unité
     *
     * @param int $qte
     *            : Quantité à convertir
     * @param string $cond1
     *            : Conditionnement dans lequel est exprimé la quantité passée en paramètre
     * @param string $cond2
     *            : Conditionnement dans lequel on souhaite exprimer la quantité passée en paramètre
     * @return string SQL
     */
    public static function rqGetQteArtInCond($qte, $unite1, $unite2)
    {
        if (! is_numeric($qte))
            $qte = 0;
        if (! is_string($unite1))
            $unite1 = '';
        if (! is_string($unite2))
            $unite2 = '';
        $sql = "select 'QUANTITE' = (" . ReplaceSqlPointeur($qte) . " * CONVERS.VAL_1_2)
					from	CONVERS with (nolock)
					where   CONVERS.CODE_UNI1 = '" . ReplaceSqlPointeur($unite1) . "'
					and		CONVERS.CODE_UNI2 = '" . ReplaceSqlPointeur($unite2) . '\'';
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requete permettant de convertir une quantité vers la quantité équivalente dans une autre unité
     *
     *
     * @param int $qte
     *            : Quantité à convertir
     * @param string $code_art
     *            : code article pour lesquel la conversion de quantité va s'effectuer
     * @param string $unite
     *            : Conditionnement dans lequel on souhaite exprimer la quantité passé en paramétre
     * @return string SQL
     */
    public static function rqGetQteArtInCondCONV_ART($qte, $code_art, $unite)
    {
        if (! is_numeric($qte))
            $qte = 0;
        if (! is_string($code_art))
            $code_art = '';
        if (! is_string($unite))
            $unite = '';
        $sql = "	select 'QUANTITE' = (" . ReplaceSqlPointeur($qte) . " * CONV_ART.VAL_1_2)
					from	CONV_ART with (nolock)
					where   CONV_ART.CODE_ART = '" . ReplaceSqlPointeur($code_art) . "'
					and		CONV_ART.CODE_UNI2 = '" . ReplaceSqlPointeur($unite) . '\'';
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requete permettant pour un fournisseur donné et un prix article donné de retourné le prix article dans la devise pivot HAPLUS
     *
     * @param string $code_fournisseur
     *            : Code du fournisseur
     *            // * @param string $prix_article : Prix article à convertir dans la devise pivot
     * @return string : requete SQL
     */
    public static function getPrixArtInDevisePivot(& $code_fournisseur, $prix_article)
    {
        if (! is_numeric($prix_article))
            $prix_article = 0;
        if (! is_string($code_fournisseur))
            $prix_article = '';
        $sql = "select 'PRIX_ART_IN_DEVISE_PIVOT' = (" . ReplaceSqlPointeur($prix_article) . " * (DEVISES.VALEUR))
					from    DEVISES with (nolock), FOURNISS with (nolock)
					where	DEVISES.CODE_DEVI =  FOURNISS.DEVISE
					and     FOURNISS.CODE     =	'" . ReplaceSqlPointeur($code_fournisseur) . '\'';
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction permettant de déterminer si un code article existe dans HAPLUS
     * 
     * @param string $code_art
     *            : code article recherché
     */
    public static function rqGetInfoOnArticleHaplus(& $code_art)
    {
        $sql = 'SELECT ARTICLES.*, SISTEART.SI, SCASTEAR.SCA, CDCSTEAR.CDC  
        FROM ARTICLES WITH (NOLOCK) 
            LEFT OUTER JOIN SISTEART WITH (NOLOCK) 
                ON ARTICLES.CODE_ART  = SISTEART.CODE_ART ';
        
        $sql .= ' AND SISTEART.CODE_STE = \'' . (Param::IsSISecto() ? ReplaceSqlPointeur($_SESSION['Session_SocUsr']) : '') . '\' ';
        
        $sql .= ' LEFT OUTER JOIN SCASTEAR WITH (NOLOCK) ON ARTICLES.CODE_ART  = SCASTEAR.CODE_ART ';
        
        $sql .= ' AND SCASTEAR.CODE_STE = \'' . (Param::IsSCASecto() ? ReplaceSqlPointeur($_SESSION['Session_SocUsr']) : '') . '\' ';
        
        $sql .= ' LEFT OUTER JOIN CDCSTEAR WITH (NOLOCK) ON ARTICLES.CODE_ART  = CDCSTEAR.CODE_ART ';
        
        $sql .= ' AND CDCSTEAR.CODE_STE = \'' . (Param::IsCDCSecto() ? ReplaceSqlPointeur($_SESSION['Session_SocUsr']) : '') . '\' ';
        
        $sql .= ' WHERE ARTICLES.CODE_ART=\'' . ReplaceSqlPointeur($code_art) . '\'';

        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction permettant de determiner si un article est présent sur un accord-cadre
     * 
     * @param string $code_art
     *            : code article recherché
    */
    public static function rqGetAccadreData($code_acd, $code_art)
    {
        $dateJour = Date('Ymd');
        $sql = "select * FROM ACART a
            left outer join ACCCADRE ac on ac.CODE_ACD=a.CODE_ACD 
            where 1=1 and DATE_DEB <= ".ReplaceSqlPointeur($dateJour)." and (DATE_FIN > ".ReplaceSqlPointeur($dateJour)." or DATE_FIN='00000000')
            and 1 = (
                case when MARCHE<>'' and exists(select * from MARCHUSR where CODE_MAR=MARCHE)
                    then 
                        case when exists(select * from MARCHUSR where CODE_MAR=MARCHE and CODE_USR='".$_SESSION['Session_Login']."') 
                            then 1 
                            else 0 
                        end
                    else 1
                end)
            and 1 = (
                case when MARCHE<>'' and exists(select * from MARCHSOC where CODEMARCH=MARCHE)
                    then 
                        case when exists(select * from MARCHSOC where CODEMARCH=MARCHE and CODESOC='".$_SESSION['Session_SocUsr']."') 
                            then 1 
                            else 0 
                        end
                    else 1
                end)";
        
        if($code_acd != '')
        {
            $sql .= ' and ac.CODE_ACD= \'' . ReplaceSqlPointeur($code_acd) . '\'';
        }

        if($code_art != '')
        {
            $sql .= ' and a.CODE_ART = \'' . ReplaceSqlPointeur($code_art) . '\''; 
        }

        $sql .=" order by PU asc";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }
    /**
     * Fonction permettant de determiner si un article est présent sur un accord-cadre
     * 
     * @param string $code_art
     *            : code article recherché
     */
    public static function rqGetAcartInfo($code_acd, $code_art)
    {
        $sql = 'select QTEMAX FROM ACART  where CODE_ACD=\'' . ReplaceSqlPointeur($code_acd) . '\' AND CODE_ART =  where CODE_ART=\'' . ReplaceSqlPointeur($code_art) . '\'';

        return new RequeteSQL($sql, DB_OXASQLDB);
    }


         /**
     * Fonction permettant de determiner si un article est présent sur un accord-cadre
     * 
     * @param string $code_art
     *            : code article recherché
     */
    public static function rqGetPuByFourn($case, $code_acd = '', $code_fou = '', $qte = '', $code_art = '')
    {
        switch ($case)
        {
            /* si pas d'accord-cadre ou si article pas présent sur l'acd : tarif "article pr fournisseur" */
            case 'noAcd': 
                $sql = 'SELECT * from PXAFO where CODE_ART=\'' . ReplaceSqlPointeur($code_art) . '\' and CODE_FOU=\'' . ReplaceSqlPointeur($code_fou) . '\' and QTE<=\'' . ReplaceSqlPointeur($qte) . '\' order by QTE ASC';
                break;
            /* prix de base de l'article sur l'accord-cadre*/
            case 'acdArt': 
                $sql = 'SELECT PU from ACART where CODE_ACD =\'' . ReplaceSqlPointeur($code_acd) . '\' and CODE_ART=\'' . ReplaceSqlPointeur($code_art) . '\'';
                break;
            /* prix sur qté */
            case 'PuQte': 
                
                $trouveTous = (SqlArticle::getPuTx($code_acd, $qte, $code_art))->Trouve1(); 
               
                if($trouveTous['TYPTAR'] == 'T')
                {
                    if($trouveTous['ASS_PU'] == 'B')
                    {
                        $sql = 'SELECT PU from ACART where CODE_ACD =\'' . ReplaceSqlPointeur($code_acd) . '\' and CODE_ART=\'' . ReplaceSqlPointeur($code_art) . '\'';
                    }
                    if($trouveTous['ASS_PU'] == 'P')
                    {
                        $i=1;
                        do
                        {
                            $qtei = $qte - $i;
                            $sql = 'SELECT TOP 1 PU_TX from ACARTDET where CODE_ACD=\''. ReplaceSqlPointeur($code_acd) . '\' and CODE_ART=\'' . ReplaceSqlPointeur($code_art) . '\' and QTEMIN<=\'' . ReplaceSqlPointeur($qtei)  . '\' order by QTEMIN DESC';
                            if((new RequeteSQL($sql, DB_OXASQLDB))->Trouve1()['ASS_PU'] == 'B' && (new RequeteSQL($sql, DB_OXASQLDB))->Trouve1()['TYPTAR'] == 'T')
                            {
                                break;
                            }
                        }while((new RequeteSQL($sql, DB_OXASQLDB))->Trouve1()['ASS_PU'] == 'P' && (new RequeteSQL($sql, DB_OXASQLDB))->Trouve1()['TYPTAR'] == 'T');

                    }
                }
                if($trouveTous['TYPTAR'] == 'P')
                {
                    $sql = 'SELECT TOP 1 PU_TX from ACARTDET where CODE_ACD=\''. ReplaceSqlPointeur($code_acd) . '\' and CODE_ART=\'' . ReplaceSqlPointeur($code_art) . '\' and QTEMIN<=\'' . ReplaceSqlPointeur($qte)  . '\' order by QTEMIN DESC';
                }
                break;
                 
        }    

        return new RequeteSQL($sql, DB_OXASQLDB);
    }
    public static function getPuTx($code_acd, $qte, $code_art, $all = false)
    {

        $sql = 'SELECT PU_TX, TYPTAR, ASS_PU, QTEMIN, TAUX from ACARTDET where CODE_ACD=\''. ReplaceSqlPointeur($code_acd) . '\' and CODE_ART=\'' . ReplaceSqlPointeur($code_art) . '\'';
        if($all == false)
        {
            $sql .= 'and QTEMIN <=\'' . ReplaceSqlPointeur($qte) . '\' order by QTEMIN DESC';
        }
        else
        {
            $sql .= 'and QTEMIN !=\'' . ReplaceSqlPointeur($qte) . '\' order by QTEMIN DESC';
        }

        return new RequeteSQL($sql, DB_OXASQLDB);
    }
    /**
     * Fonction retournant la requete permettant de savoir si un ACD donné est valide
     *
     * @param string $code_acd
     *            : Accord-cadre dont on souhaite tester la validité
     * @param string $code_four
     *            : Code fournisseur dont on souhaite tester la validité
     * @return string SQL
     */
    public static function rqIsAcdValide(& $code_acd, & $code_four = '')
    {
        $sql = '	select	ACCCADRE.* from	ACCCADRE with(nolock) where	CODE_ACD = \'' . ReplaceSqlPointeur($code_acd) . '\' ';
        if ('' != $code_four)
            $sql .= " and CODE_FOUR = '" . ReplaceSqlPointeur($code_four) . "' ";
        if (Param::AcdIsCtrlDateMin())
            $sql .= " and (ACCCADRE.DATE_DEB <= CONVERT(char(8),GETDATE(),112) or ACCCADRE.DATE_DEB = 00000000) ";
        if (Param::AcdIsCtrlDateMax())
            $sql .= " and (ACCCADRE.DATE_FIN >=  CONVERT(char(8),GETDATE(),112) or ACCCADRE.DATE_FIN = 00000000) ";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requete permettant de savoir si un lien article/fournisseur est valide en prenant en compte le paramétrage HAPLUS
     *
     * @param string $code_art
     * @param string $code_art_frs
     * @param string $frs
     * @return string sql
     */
    public static function rqIsLienArtFrsValide(& $code_art, & $ref_frs, & $frs)
    {
        $sql = "select	ARTFOURN.* 	from	ARTFOURN with(nolock)
					where	CODE_ART 	= '" . ReplaceSqlPointeur($code_art) . "'
					and 	FOU		 	= '" . ReplaceSqlPointeur($frs) . "'
					and 	REFARTFOU 	= '" . ReplaceSqlPointeur($ref_frs) . "'
				";
        if (Param::LienArtFrsIsCtrlDateMin())
            $sql .= ' and (ARTFOURN.DTEVALMIN <= CONVERT(char(8),GETDATE(),112) or ARTFOURN.DTEVALMIN = 00000000) ';
        if (Param::LienArtFrsIsCtrlDateMax())
            $sql .= ' and (ARTFOURN.DTEVALMAX >=  CONVERT(char(8),GETDATE(),112) or ARTFOURN.DTEVALMAX = 00000000) ';
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requête permettant de savoir si un article est stocké sur le site de stockage rattaché par
     * défaut au centre de livraison donné.
     *
     * @param string $centre_liv
     * @param string $code_art
     *
     * @return $string : requête SQL
     */
    public static function rqIsArtStkForCtrLiv(& $centre_liv, & $code_art)
    {
        $sql = " select count(*) TROUVE from SSTOCKLO with(nolock), SARTICLE with(nolock)
				   where
					   SSTOCKLO.CODE_ART=SARTICLE.CODE_ART
				   and SSTOCKLO.SITE= (select SITSTOCK from CENTRE with(nolock) where LIVRAISON = 0x54 and CODE_CTR = '" . ReplaceSqlPointeur($centre_liv) . "')
				   and SSTOCKLO.CODE_ART='" . ReplaceSqlPointeur($code_art) . "'
				   and (SARTICLE.DTE_FERM='00000000' or SARTICLE.DTE_FERM >= CONVERT(char(8),GETDATE(),112))
				   and (SSTOCKLO.DTE_FERM='00000000' or SSTOCKLO.DTE_FERM >= CONVERT(char(8),GETDATE(),112))";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requête permettant de sélectionner les informations d'un article HAPLUS.
     * Cette requête est utilisée notamment dans le cadre des popup article appelée sur les article issus de formulaire métier.
     *
     * @param string $code_art
     *            : Code de l'article recherché
     * @return string sql
     */
    public static function rqSelectInfoArtFrmForPopup(& $code_art)
    {
        
        // Spec 3864 : ajout de la jointure vers les contrats cadre ?
        $sql = "  SELECT
				ARTICLES.CODE_ART			COD_ART,
                (CASE 
                    WHEN ISNULL(t.DES_ART, '') = ''
                    THEN ARTICLES.DESIGN
                    ELSE t.DES_ART
                END) AS DES_ART,
				ARTICLES.CODEGAM			COD_GAM,
				GAMMES.DESIGN				LIB_GAM,
				ARTICLES.REFARTFAB			REF_FAB,
				ARTICLES.SSFAM				COD_SFAM,
				SSFAMILL.DESIGNAT			LIB_SFAM,
				''							DES_COMP,
				ARTICLES.UNIT				COD_UNIT,
				''							COD_ACD	,
				ARTICLES.PRXPLBAS			PX_ART  ,
				0							DELAI,
				ARTICLES.IMAGART			IMGART,
				ARTICLES.CODEFAB			COD_FAB,
				FABRICAN.RS					RS_FAB,
				FAMILLE.CODE_FAM			CODE_FAM,
				(CASE 
                    WHEN ISNULL(t2.DESIGNAT, '') = ''
                    THEN FAMILLE.DESIGNAT 
                    ELSE t2.DESIGNAT
                END) AS DESIGNFAM,
				ARTICLES.TXTVA,
				ARTICLES.RECEP_AUTO,
				ARTICLES.NONRECEPT
	
		FROM ARTICLES WITH(NOLOCK)
	
				LEFT OUTER JOIN SSFAMILL WITH(NOLOCK) on ARTICLES.SSFAM   = SSFAMILL.CODE_SFA
                LEFT OUTER JOIN TRAD_ART t WITH(NOLOCK) ON ARTICLES.CODE_ART = t.COD_ART AND t.COD_LNG = '{$_SESSION['Session_Langue']}'
				LEFT OUTER JOIN GAMMES   WITH(NOLOCK) on ARTICLES.CODEGAM = GAMMES.CODEGAMME and ARTICLES.CODEFAB = GAMMES.CODEFABR
				LEFT OUTER JOIN FABRICAN WITH(NOLOCK) on ARTICLES.CODEFAB = FABRICAN.CODE
				LEFT OUTER JOIN FAMILLE  WITH(NOLOCK) on  FAMILLE.CODE_FAM = SSFAMILL.CODE_FAM
                LEFT OUTER JOIN TRAD_FAM t2 WITH(NOLOCK) ON t2.CODE_FAM = FAMILLE.CODE_FAM AND t2.COD_LNG = '{$_SESSION['Session_Langue']}'
	
		WHERE ARTICLES.CODE_ART = '" . ReplaceSqlPointeur($code_art) . '\'';
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }
    
    public static function rqSelectDesignationSousFamille(& $code_ssfamille)
    {
        $sql = " select (case when (EXISTS (select TRAD_SFA.DESIGNAT from TRAD_SFA with(nolock) where TRAD_SFA.CODE_SFA = '" . ReplaceSqlPointeur($code_ssfamille) . "' and TRAD_SFA.COD_LNG = '".$_SESSION['Session_Langue']."') and (select TRAD_SFA.DESIGNAT from TRAD_SFA with(nolock) where TRAD_SFA.CODE_SFA = '" . ReplaceSqlPointeur($code_ssfamille) . "' and TRAD_SFA.COD_LNG = '".$_SESSION['Session_Langue']."')<>'') then (select TRAD_SFA.DESIGNAT from TRAD_SFA with(nolock) where TRAD_SFA.CODE_SFA = '" . ReplaceSqlPointeur($code_ssfamille) . "' and TRAD_SFA.COD_LNG = '".$_SESSION['Session_Langue']."') else SSFAMILL.DESIGNAT end) AS LIB_SFAM
        from SSFAMILL with(nolock)
        where SSFAMILL.CODE_SFA = '" . ReplaceSqlPointeur($code_ssfamille) . "'";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }
    
    public static function rqSelectDesignationFamille(& $code_famille)
    {
        $sql = " SELECT (case when (EXISTS (select TRAD_FAM.DESIGNAT from TRAD_FAM with(nolock) where TRAD_FAM.CODE_FAM = '" . ReplaceSqlPointeur($code_famille) . "' and TRAD_FAM.COD_LNG = '".$_SESSION['Session_Langue']."') and (select TRAD_FAM.DESIGNAT from TRAD_FAM with(nolock) where TRAD_FAM.CODE_FAM = '" . ReplaceSqlPointeur($code_famille) . "' and TRAD_FAM.COD_LNG = '".$_SESSION['Session_Langue']."')<>'') then (select TRAD_FAM.DESIGNAT from TRAD_FAM with(nolock) where TRAD_FAM.CODE_FAM = '" . ReplaceSqlPointeur($code_famille) . "' and TRAD_FAM.COD_LNG = '".$_SESSION['Session_Langue']."') else FAMILLE.DESIGNAT end) AS DESIGNFAM
        from FAMILLE with(nolock)
        where FAMILLE.CODE_FAM = '" . ReplaceSqlPointeur($code_famille) . "'";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    public static function rqCaractInfoFromIdLigne($idLigne)
    {
        $sql = "select
                CATCARACTINFO.ID_LIGNE, CATCARACTINFO.COD_ART, CATCARACTINFO.ID_CAR, CATCARACTINFO.TYP_CAR,
                CATCARACTINFO.COD_CAR, CATCARACTINFO.VAL_CAR, CATCARACTINFO.ISSU_CHARG, CATCARACTINFO.IDCATVER,
                
                case when ISNULL(TYPECARSEL.TITRE_CAR,'')<>'' then TYPECARSEL.TITRE_CAR else CATCARACTINFO.TITRE_CAR end TITRE_CAR
                
                from CATCARACTINFO with(nolock)
                LEFT JOIN TYPECARSEL with(nolock) on TYPECARSEL.COD_CAR = CATCARACTINFO.COD_CAR 
                where ID_LIGNE= " . ReplaceSqlPointeur($idLigne);
        
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    public static function rqGetCaractSelect()
    {
        $sql = ' select * from TYPECARSEL with(nolock) ';
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    public static function rqDocAttInfoFromIdLigne($idLigne)
    {
        $sql = ' select CATCARACTINFO.*,TYPECARSEL.TITRE_CAR from CATCARACTINFO with(nolock) LEFT JOIN TYPECARSEL with(nolock) on TYPECARSEL.COD_CAR = CATCARACTINFO.COD_CAR where ID_LIGNE = ' . ReplaceSqlPointeur($idLigne);
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    public static function rqDocAttInfoFromCodArt(& $codeArticle, $typeFt = null)
    {
        $sql = " select DOC_ATT.COPIE,DOC_ATT.TYPE_FT,DOC_ATT.TITRE, DOC_ATT.NOM_ORI, DOC_ATT.AUTEUR, DOC_ATT.CENTRE, DOC_ATT.DT_PARUT, DOC_ATT.DT_VALID, DOC_ATT.NOM_FIC,
		  MEMOS.NODEMEMO,CAST(MEMOS.CONTMEMO AS TEXT) AS CONTMEMO
		  from DOC_ATT with (nolock)
		  left outer join MEMOS    with(nolock) on MEMOS.NODEMEMO = DOC_ATT.NM_COMM
		  left outer join HASTUTIL with(nolock) on HASTUTIL.CODE  = DOC_ATT.AUTEUR
		  where NO_DA='ARTICLES'
		  AND   COD_ENR = '" . ReplaceSqlPointeur($codeArticle) . "'
		  AND   (DT_VALID = '00000000' OR DT_VALID >= CONVERT(char(8),GETDATE(),112)) ";
        if ($typeFt != null)
            if ($typeFt == 'U')
                $sql .= ' AND (TYPE_FT = \'U\' OR COPIE = 0x54) ';
            else
                $sql .= " AND TYPE_FT = '".ReplaceSqlPointeur($typeFt)."' ";
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Requete permettant de retourner un booleen indiquant si un article pour un fournisseur, un fabricant et un accord-cadre donné est autorisé à commande oxaproc
     *
     * @param string $code_fourn
     *            : Code fournisseur
     * @param string $code_fab
     *            : Code fabricant
     * @param string $code_acd
     *            : Code accord-cadre
     * @param string $code_article
     *            : Code article
     * @return string $sql
     */
    public static function rqIsArtAuthCdeOxaproc($code_fourn, $code_fab, $code_acd, $code_article)
    {
        // Une des conditions pour l'autorisation à commande chantier est le montant max de commande autorisé pour le fournisseur
        
        $sql_montant_max = " (select MTMAXCC from FOURNISS with(nolock) where FOURNISS.CODE = '".ReplaceSqlPointeur($code_fourn)."') ";
        $sql = "select
		case
		when
		(
		select		1
		from		FOURNISS with (nolock), FABRICAN with (nolock)
		where		FOURNISS.CODE				= '".ReplaceSqlPointeur($code_fourn)."'
		and		FABRICAN.CODE				= '".ReplaceSqlPointeur($code_fab)."'
		and		FOURNISS.AUTOCC				= 0x54
		and		FABRICAN.AUTOCC				= 0x54
		and		ltrim(rtrim(FOURNISS.CODE)) != ''
		and		ltrim(rtrim(FABRICAN.CODE)) != ''
		and 	$sql_montant_max > 0
		) = 1
		then 1
		when   (
		select		1
		from		ACCCADRE with (nolock)
		where		CODE_ACD					= '".ReplaceSqlPointeur($code_acd)."'
		and AUTOCC						= 0x54
		and ltrim(rtrim(CODE_ACD)) 		!= ''
		and $sql_montant_max > 0
		) = 1
		then 1
		when	(
		select  1
		from	FOURNISS with (nolock), ARTICLES with (nolock)
		where	FOURNISS.CODE					 = '".ReplaceSqlPointeur($code_fourn)."'
		and ARTICLES.CODE_ART				 = '".ReplaceSqlPointeur($code_article)."'
		and FOURNISS.AUTOCC					 = 0x54
		and ARTICLES.CDIRFMT				 = 0x54
		and	ltrim(rtrim(FOURNISS.CODE))		!= ''
		and	ltrim(rtrim(ARTICLES.CODE_ART)) != ''
		and $sql_montant_max > 0
		) = 1
		then 1
		else 0
		end	AUTOCC ";
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requête permettant d'obtenir la liste globale des caractéristiques articles ou bien les infos d'une caractéristique ou bien les informations
     * sur une liste de caractéristiques
     *
     * @param string $id_caract_art
     *            : Identifiant de la caractéristique recherchée
     * @param string $liste_carac_art
     *            : Liste des identifiants des caractéristiques recherchées sous la forme '0001','0002', etc....
     * @return unknown
     */
    public static function rqGetAllCaractArt($id_caract_art = '', $liste_carac_art = '')
    {
        $sql = 'select CAR_ID, CAR_DES, CAR_IMG from CAR_ART with(nolock) 	';
        if ('' != $id_caract_art)
            $sql .= " where CAR_ID = '" . ReplaceSqlPointeur(str_pad($id_caract_art, 4, '0', STR_PAD_LEFT)) . "'";
        elseif ('' != $liste_carac_art)
            $sql .= " where CAR_ID in ($liste_carac_art)			 		";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requête permettant d'obtenir la liste des accords cadre valide pour un article et un fournisseur donnés
     *
     * @param string $id_caract_art
     *            : Identifiant de la caractéristique recherchée
     * @param string $liste_carac_art
     *            : Liste des identifiants des caractéristiques recherchées sous la forme '0001','0002', etc....
     * @return unknown
     */
    public static function rqGetAllAcdByArtAndFrs($code_art, $code_frs)
    {
        // SPEC 4100 remplacer le centre émetteur de la session par le centre émetteur du panier s'il existe
        $panierEntete = new PanierEntete();
        if($panierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user'])){
            $centreEmetteur = $panierEntete->getCENTRE_EMETTEUR();
        }
        else{
            $centreEmetteur = $_SESSION['Session_CodeCtrEmetteur'];
        }
        
        $sql = "select MIN(ACART.PU) PU, ACART.CODE_ACD from ACART with(nolock), ACCCADRE with(nolock)
		left outer join MARCHSOC with(nolock) on MARCHSOC.CODEMARCH=ACCCADRE.MARCHE and MARCHSOC.CODESOC='".$centreEmetteur."'
		where
		ACART.CODE_ACD = ACCCADRE.CODE_ACD
		and (
		FOURNISS = '".ReplaceSqlPointeur($code_frs)."'
		or
		(ACART.TYPE_FG = 'G' and ACART.CODE_ACD in (select FS_ACD.CODE_ACD from FS_ACD with(nolock) where CODE_FOU ='".ReplaceSqlPointeur($code_frs)."'))
		) and CODE_ART = '".ReplaceSqlPointeur($code_art)."' and PU > 0 and
		(rtrim(ltrim(ACCCADRE.MARCHE)) = '' or MARCHSOC.CODESOC = '{$_SESSION['Session_SocUsr']}')
		and(
		(	not exists (select null from ACCTR with(nolock) where ACCTR.CODE_ACD     	= ACART.CODE_ACD)
		and
		not exists (select null from ACCTRLIV with(nolock) where ACCTRLIV.CODE_ACD  = ACART.CODE_ACD)
		)
		or
		exists (select null from ACCTR with(nolock) where ACCTR.CODE_ACD   	   		= ACART.CODE_ACD and CODE_CTR = '{$centreEmetteur}' )
		or
		exists (select null from ACCTRLIV with(nolock)  where ACCTRLIV.CODE_ACD	    = ACART.CODE_ACD and CODE_CTR = '{$_SESSION['Session_CodeCtrLivraison']}')
		)";
        if (Param::AcdIsCtrlDateMin())
            $sql .= " and (ACART.DDEBVAL <= CONVERT(char(8),GETDATE(),112) or ACART.DDEBVAL = '00000000') ";
        
        if (Param::AcdIsCtrlDateMax())
            $sql .= " and (ACART.DFINVAL >=  CONVERT(char(8),GETDATE(),112) or ACART.DFINVAL = '00000000') ";
        
        // Contrôle de l'association au centre émetteur
        if (Param::isControlCentreOnFrs())
            $sql .= " and exists (select null from FOURNCTR with(nolock) where FOURNCTR.CODE_FOUR = '".ReplaceSqlPointeur($code_frs)."' and FOURNCTR.CODE_CTR = '".$centreEmetteur."' and ASSOCIE = 0x54)";
        
        $sql .= ' group by ACART.CODE_ACD, ACART.PU order by ACART.PU asc ';
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    // Spec 3864
    public static function rqGetAllAcdByArtAndAcd(& $art, & $acd)
    {
        $sql = 'select * from ACART with(nolock) where CODE_ART = \'' . ReplaceSqlPointeur($art) . '\' and CODE_ACD = \'' . ReplaceSqlPointeur($acd) . '\'';
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la traduction de la désignation d'un article donné
     *
     * @param string $code_art
     * @param string $langue
     * @return string sql
     */
    public static function rqGetDesignatArt(& $code_art, $langue)
    {
        $sql = "select * from TRAD_ART with(nolock) where COD_ART = '" . ReplaceSqlPointeur($code_art) . "' and COD_LNG = '" . ReplaceSqlPointeur($langue) . "'";
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction reoturnant la requête permettant d'obtenir les informations relatives à une caractéristique sélective
     *
     * @param string $code_caract
     *            : code de la caractéristique recherchée
     * @return string sql
     */
    public static function rqGetCaractSelective($code_caract = '')
    {
        $sql = 'select COD_CAR, TITRE_CAR, ICONE_CAR, ORDRE_CAR from TYPECARSEL with(nolock)';
        if ('' != $code_caract)
            $sql .= " where COD_CAR = '" . ReplaceSqlPointeur($code_caract) . "'";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    public static function rqGetSousFamille(& $codeSousFamille, $NVIBOXAP = null)
    {
        $sql = 'select * FROM SSFAMILL with(nolock) ' . 'WHERE SSFAMILL.CODE_SFA = \'' . ReplaceSqlPointeur($codeSousFamille) . '\' ' . (is_null($NVIBOXAP) ? '' : ' AND NVISIPROC = 0x46 ');
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    public static function rqGetFabricant(& $codeFabricant)
    {
        $sql = "select * FROM FABRICAN with(nolock) WHERE FABRICAN.CODE = '".ReplaceSqlPointeur($codeFabricant)."' ";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    public static function rqGetFabricantGamme(& $codeFabricant, & $codeGamme)
    {
        $sql = "select * FROM GAMMES with(nolock) WHERE GAMMES.CODEFABR = '".ReplaceSqlPointeur($codeFabricant)."' AND CODEGAMME = '".ReplaceSqlPointeur($codeGamme)."' ";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    public static function rqGetLibelleRayon($idRayon)
    {
        $sql = "select LIBRAYON, AUTHCLIC, NIVRAYON FROM CAT_RAYON with(nolock) WHERE IDRAYON = '".ReplaceSqlPointeur($idRayon)."'";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    
    /**
     * Cette fonction va nous permettre de savoir combien on à d'article dans un panier model en fonction du nom du panier model
     * @param $idRayon => Libelle Panier model 
     * @return total 
     */
    public static function rqGetTotalPanierModel($libellePanierModel)
    {
        $sql = "select * FROM oxa_users_panier_ligne pnl RIGHT join oxa_users_panier oxpn on oxpn.id_user = pnl.id_user and pnl.id_panier = oxpn.id_panier
        where oxpn.id_panier != 0 and oxpn.id_user = ".$_SESSION['id_user']." and oxpn.lib_panier = '".ReplaceSqlPointeur($libellePanierModel)."'";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la référence fournisseur d'un article donné
     *
     * @param string $code_art
     * @param string $codeFou
     * @return string sql
     */
    public static function rqGetRefFou($code_art, $codeFou = '')
    {
        $sql = "SELECT isnull(ARTFOURN.REFARTFOU, isnull(ARTGF.REFARTFOU, '')) REF_FOUR
        FROM ARTICLES with(nolock)
        LEFT JOIN ARTFOURN with(nolock) on ARTFOURN.CODE_ART=ARTICLES.CODE_ART AND ARTFOURN.FOU = '" . ReplaceSqlPointeur($codeFou) . "'
        LEFT JOIN FOURNISS with(nolock) on FOURNISS.CODE=ARTFOURN.FOU
        LEFT JOIN ARTGF with(nolock) on ARTGF.CODE_ART=ARTICLES.CODE_ART AND ARTGF.CODE_GF = FOURNISS.FOURPRIN
        WHERE ARTICLES.CODE_ART = '" . ReplaceSqlPointeur($code_art) . "'";
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant le contrôle qualité d'un article donné
     *
     * @param string $code_art
     * @param string $codeFou
     * @return string sql
     */
    public static function rqGetCtrlQualite($code_art, $codeFou = '')
    {
        $sql = "SELECT isnull(ARTFOURN.CTRL_QUA, isnull(ARTGF.CTRL_QUA, isnull(ARTICLES.CTRL_QUA, ''))) CTRL_QUA
        FROM ARTICLES with(nolock)
        LEFT JOIN ARTFOURN with(nolock) on ARTFOURN.CODE_ART=ARTICLES.CODE_ART AND ARTFOURN.FOU = '" . ReplaceSqlPointeur($codeFou) . "'
        LEFT JOIN FOURNISS with(nolock) on FOURNISS.CODE=ARTFOURN.FOU
        LEFT JOIN ARTGF with(nolock) on ARTGF.CODE_ART=ARTICLES.CODE_ART AND ARTGF.CODE_GF = FOURNISS.FOURPRIN
        WHERE ARTICLES.CODE_ART = '" . ReplaceSqlPointeur($code_art) . "'";
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant le contrôle qualité d'un article donné
     *
     * @param string $code_art
     * @param string $codeFou
     * @return string sql
     */
    public static function rqGetDelaiFromAcart($acd, $code_art)
    {
        $sql = "SELECT DELAI
        FROM ACART with(nolock)
        WHERE CODE_ACD = '" . ReplaceSqlPointeur($acd) . "' AND CODE_ART = '" . ReplaceSqlPointeur($code_art) . "'";
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requete permettant de savoir si un ACD donné est valide
     *
     * @param string $code_acd
     *            : Accord-cadre dont on souhaite tester la validité
     * @param string $code_four
     *            : Code fournisseur dont on souhaite tester la validité
     * @return string SQL
     */
    public static function rqGetDelaiFromMarches($marche)
    {
        $sql = 'SELECT DELAILIV FROM MARCHES with(nolock) WHERE CODE = \'' . ReplaceSqlPointeur($marche) . '\' ';
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

}