<?

/**
 * Fonction permettant de récupérer le type d'un catalogue donné
 *
 * @param  string 	$id_cat	: Id du catalogue recherché
 * @return string			: Type de catalogue
 */
class SqlFavoriCatalogue
{

    public static function rqGetTypeCatalogue($id_cat)
    {
        $sql = 'select TYPECATA  from CATAENT with(nolock) where ID_CATAL = \'' . ReplaceSqlPointeur($id_cat) . '\'';
        return new RequeteSQL($sql, DB_OXACATDB);
    }
    
    public static function rqGetTypeCatalogueEnt($id_cat)
    {
        $sql = 'select *  from CATAENT with(nolock) where ID_CATAL = \'' . ReplaceSqlPointeur($id_cat) . '\'';
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    /**
     * Fonction retournant la requête permettant d'obtenir les informations liées aux ctalogues présents dans la liste passée en paramètre
     *
     * @param string $chaine_catalogue
     *            : Liste de catalogues recherchés passés sous forme de chaine de caractères Ex : ('57','28','45'.......).
     * @return string $sql : Requête SQL
     */
    public static function rqGetListeCatalogue(& $chaine_catalogue)
    {
        $sql = " select * from CATAPRIVE with(nolock) 	where ID_CATPR in $chaine_catalogue ORDER BY NCATAPR asc ";
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    public static function rqGetListeCataloguePrive(& $ID_CATPR)
    {
        $sql = " select * from CATAPRIVE with(nolock) 	where ID_CATPR = '".ReplaceSqlPointeur($ID_CATPR)."' ORDER BY NCATAPR asc ";
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    /**
     * Fonction retournant la requête permettant d'obtenir les informations liées aux ctalogues présents dans la liste passée en paramètre
     *
     * @param string $chaine_catalogue
     *            : Liste de catalogues recherchés passés sous forme de chaine de caractères Ex : ('57','28','45'.......).
     * @return string $sql : Requête SQL
     */
    public static function rqGetIdCatalogueByIdCatPrive($id_cat_prive)
    {
        $sql = ' select VALINFO IDCAT from CPSTRUCT with(nolock) where ID_CATPR = \''.ReplaceSqlPointeur($id_cat_prive).'\'';
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    /**
     * Fonction retournant la requête permettant d'obtenir toutes les informations relatives à un catalogue de type Punch Out
     *
     * @param int $id_cat_prive
     *            : Identifiant du catalogue privé
     * @return string sql
     */
    public static function rqGetInfoOnCatPunchOutByIdCat($id_cat_prive)
    {
        $sql = " select top 1 * from PARCATPUNCH with(nolock), VERSCATA with(nolock), CPSTRUCT with(nolock), CATAPRIVE with(nolock), CATAENT with(nolock)
                left join CFORMATS with (nolock) on CFORMATS.IDFORMAT = CATAENT.IDFORMAT
					 where
							CPSTRUCT.VALINFO   = VERSCATA.ID_CATAL
						and VERSCATA.IDATACATA = PARCATPUNCH.IDVERSION
						and CATAPRIVE.ID_CATPR = CPSTRUCT.ID_CATPR
						and CATAENT.ID_CATAL   = CPSTRUCT.VALINFO
						and (CATAPRIVE.SRCDATA = 'PO' or CATAPRIVE.SRCDATA = 'PC')
						and (VERSCATA.STATUT   = 'A' or VERSCATA.STATUT = 'P')
						and CPSTRUCT.TYPEINFO  ='CCATASRC'
						and CATAPRIVE.ID_CATPR = '".ReplaceSqlPointeur($id_cat_prive)."' ";
        
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    /**
     * Fonction retournant la requête permettant de savoir si une transcodification existe pour un format de catalogue Punch Out donné
     *
     * @param int $id_cat_prive
     *            : Identifiant du catalogue privé
     * @return string sql
     */
    public static function rqGetTranscoOnCatPunchOutByIdCat($id_cat_prive, $type_data, $value_entree = '')
    {
        $sql = " select * from CATAPRIVE with(nolock), CPSTRUCT with(nolock), CATAENT with(nolock), CFORMATS with(nolock), TRANSCOD with(nolock), STRUCATA with(nolock)	
						where 
							CATAPRIVE.ID_CATPR = CPSTRUCT.ID_CATPR
						and	CATAENT.ID_CATAL   = CPSTRUCT.VALINFO
						and CFORMATS.IDFORMAT  = CATAENT.IDFORMAT
						and TRANSCOD.IDFORMAT  = CFORMATS.IDFORMAT
						and STRUCATA.TDBNAME   = '".ReplaceSqlPointeur($type_data)."'
						and TRANSCOD.LGMAPPING = STRUCATA.LIGNE
						and CATAPRIVE.ID_CATPR = '".ReplaceSqlPointeur($id_cat_prive)."'
						and (CFORMATS.TYPDATAS = 'cXML' or CFORMATS.TYPDATAS  = 'OCI')";
        
        if ('' != $value_entree)
            $sql .= ' and TRANSCOD.VALENTREE = \'' . ReplaceSqlPointeur($value_entree) . '\'';

        return new RequeteSQL($sql, DB_OXACATDB);
    }

    /**
     * Fonction retournant la requête permettant de savoir si une transcodification existe pour un format de catalogue Punch Out donné
     *
     * @param int $id_cat_prive
     *            : Identifiant du catalogue privé
     * @return string sql
     */
    public static function rqGetDefaultTranscoOnCatPunchOutByIdCat($id_cat_prive, $type_data)
    {
        $sql = " 	select * from CATAPRIVE with(nolock), CPSTRUCT with(nolock), CATAENT with(nolock), CFORMATS with(nolock), STRUCATA with(nolock), FVALDEF with(nolock)
						where 
							CATAPRIVE.ID_CATPR = CPSTRUCT.ID_CATPR
						and	CATAENT.ID_CATAL   = CPSTRUCT.VALINFO
						and CFORMATS.IDFORMAT  = CATAENT.IDFORMAT
						and STRUCATA.TDBNAME   = '".ReplaceSqlPointeur($type_data)."'
						and CATAPRIVE.ID_CATPR = '".ReplaceSqlPointeur($id_cat_prive)."'
						and (CFORMATS.TYPDATAS = 'cXML' or CFORMATS.TYPDATAS  = 'OCI')
						and FVALDEF.IDFORMAT   = CFORMATS.IDFORMAT  
						and FVALDEF.Ligne      = STRUCATA.LIGNE";
        
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    /**
     * Fonction retournant la requête permettant de sélectionner pour un article donné l'ensemble des prix dégressifs associés
     *
     * @param string $provenance
     * @param int $id_cat
     * @param int $id_ligne_cat
     * @param string $code_art
     * @return string $sql
     */
    public static function rqGetListePrixDegressifByArt(& $provenance, & $id_cat, & $id_ligne_cat, & $code_art, $qte = null)
    {
        $sqlplus = '';
        $top = '';
        if (null != $qte) {
            $top = " top 1";
        }
        $sql = " select {$top} RQTECAT.IDCAT, RQTECAT.IDVERCATA, RQTECAT.IDLIGNE, RQTECAT.COD_ART, RQTECAT.QTETRANCHE, RQTECAT.REMQTE, RQTECAT.PRIXNET from RQTECAT with(nolock) where 1=1 ";
        
        // Si l'articl est du type catalogue alors on rehcerche les prix degressif selon l'id catalogue et l'id de la ligne catalogue
        if ('CAT' == $provenance)
            $sqlplus .= " and IDCAT = '".ReplaceSqlPointeur($id_cat)."' and IDLIGNE = ".(int)$id_ligne_cat." ";
        // S'il s'agit d'un article Haplus alors on le sélectionne à partir de son cide article
        elseif ('HAP' == $provenance)
            $sqlplus .= " and COD_ART = '".ReplaceSqlPointeur($code_art)."'";
        
        if (null != $qte) {
            $sqlplus .= " and RQTECAT.QTETRANCHE <= '".ReplaceSqlPointeur($qte)."' ";
            $sqlplus .= ' order by RQTECAT.QTETRANCHE desc ';
        } else
            $sqlplus .= ' order by RQTECAT.QTETRANCHE';
        
        if ($sqlplus != '') {
            $sql .= $sqlplus;
        } else
            $sql .= ' AND 2 = 1 '; // Car sinon cela fait une requete sur toute la base et donc sort le premier prix dans le systeme
        
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    public static function rqGetIdCatFromFrs(& $codFrs)
    {
        $sql = "select IDCAT from RGAMCAT a INNER JOIN VERSCATA b ON a.IDVERCATA=b.IDATACATA and b.STATUT = 'A' and dbo.DateHaplus(getdate()) >= b.DATEPUB and dbo.DateHaplus(getdate()) <= b.VALIDCATA and CODEFOUR= '".ReplaceSqlPointeur($codFrs)."' GROUP BY IDCAT;";
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    /**
     * Spec 3853
     *
     * @param unknown $codeUser
     * @param unknown $arrayArticle
     * @return RequeteSQL
     */
    public static function rqGetFavorisCatalogue($codeUser, & $arrayArticle)
    {
        $sql = 'select * from FAVEPUBLI with(nolock) ' . 'where CODE_USER = \'' . HttpReplacePointeur($codeUser) . '\' ' . 'and   ID_CATPR   = ' . (array_key_exists('ID_CATPR', $arrayArticle) ? $arrayArticle['ID_CATPR'] : $arrayArticle['ID_CAT']) . '';
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    /**
     *
     * @param unknown $codeUser
     * @param unknown $arrayArticle
     * @return RequeteSQL
     */
    public static function rqInsertFavorisCatalogue($codeUser, & $arrayArticle)
    {
        $sql = 'insert into FAVEPUBLI ' . '(CODE_USER,ID_CATPR) ' . 'values ' . '(\'' . HttpReplacePointeur($codeUser) . '\' ' . ',' . HttpReplacePointeur($arrayArticle['ID_CATPR']) . ')';
        
        return new RequeteSQL($sql, DB_OXACATDB);
    }

    public static function rqDelFavorisCatalogue($codeUser, & $arrayArticle)
    {
        $sql = 'delete from FAVEPUBLI ' . 'where CODE_USER = \'' . HttpReplacePointeur($codeUser) . '\' ' . 'and   ID_CATPR  = ' . HttpReplacePointeur($arrayArticle['ID_CATPR']) . '';
        
        return new RequeteSQL($sql, DB_OXACATDB);
    }
}