<?

/**
 * Fonction retournant la liste des inscriptions à modifier pour un login donné
 * 	@param	array  $login : tableau de login afin de traiter le cas potentiel de délégations
 * 	@param  char 	$mode : mode creation C ou modification M
 */
class SqlInscript
{

    public static function rqGetListDemToCareByResp($login, $mode)
    {
        $sql = "select *
			from   DILISPEC with (nolock), UTILCREAT with (nolock), SOCIETE with (nolock)
			where 	TYPEDICO  = 'WRKFL_CMUS'
			and 	DILISPEC.CODEDICO  = UTILCREAT.CODE
			and 	CREATMOD   = '" . ReplaceSqlPointeur($mode) . "'								 
			and 	LIB01DICO = '" . ReplaceSqlPointeur($login) . "'
			and    UTILCREAT.CODE_STE = SOCIETE.CODE_STE
			order by UTILCREAT.NOM, DTE_DEM, UTILCREAT.CODE_STE, CTR_ADR ";

        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    public static function rqGetDemandeOrCreation($codeDemande)
    {
        $sql = "select CREATMOD from UTILCREAT where CODE='" . ReplaceSqlPointeur($codeDemande) . "'";
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }
    
    /**
     * Fonction retournant la liste des inscriptions à modifier pour un login donné
     * 
     * @param $code :
     *            code de la demande de modification
     */
    public static function rqGetDemToCare($code)
    {
        $sql = ' select UTILCREAT.*,  DILISPEC.LIB01DICO as SIGNAT_DA_FAV from UTILCREAT with (nolock) ' . " left outer join DILISPEC with (nolock) on CODEDICO = UTILCREAT.CODE and DILISPEC.TYPEDICO = 'WRKFL_CMUS' " . " where UTILCREAT.CODE = '" . ReplaceSqlPointeur($code) . '\' ' . ' order by NOM ';
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant les informations relatives à une demandes d'inscription pour un EMAIL donné
     * 
     * @param $email :
     *            email de la demande d'inscription
     */
    public static function rqGetDemForSuivi($email)
    {
        $sql = ' select * from  UTILCREAT with (nolock) ' . " left outer join DILISPEC with (nolock) on CODEDICO = UTILCREAT.CODE and DILISPEC.TYPEDICO = 'ETDEDSDAFA'" . " where EMAIL = '" . ReplaceSqlPointeur($email) . "' ";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * fonction retournant la requete permettant de déterminer le statut d'une demande d'inscription d'un nouvel utilisateur
     */
    public static function rqWaitingForRespHierar($mail)
    {
        $sql = "select * from DILISPEC D with(nolock), UTILCREAT U with(nolock) where D.CODEDICO = U.CODE and U.EMAIL = '" . ReplaceSqlPointeur($mail) . '\'';
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * fonction retournant la requete permettant de récupérer les informations liées à une demande d'inscription
     * en identifiant la demande selon le mail ou l'id de la demande.
     */
    public static function rqGetInfoForInscription($mode, $value)
    {
        $sql = 'select * from   UTILCREAT with (nolock) where  ';
        if ($mode == 'mail') {
            $sql .= "EMAIL = '" . ReplaceSqlPointeur($value) . "'";
        } elseif ($mode == 'code') {
            $sql .= "CODE = '" . ReplaceSqlPointeur($value) . "'";
        }
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction permettant de récupérer les demandes de création à valider par l'administrateur central ou local
     * 
     * @param $profil :
     *            profil de l'user connecté
     * @param $login :
     *            login de l'utilisateur connecté
     * @param $sociéte :
     *            société de l'utilisateur, utilisé uniquement si admin local
     */
    public static function rqGetListDemToCareByAdmin($profil, $mode, $login, $isMulti, $societe = '', $count = false)
    {
        $listePlurisociete = SqlInscript::rqGetListePlurisociete($login)->TrouveTous(); 
        $modeBackup = DroitAcces::IsModeBackup();
        $demSuperieurHierarchique = 0;
        if ((! $modeBackup && $_SESSION['SuperieurHierarchique']) || ($modeBackup && DroitAcces::IsDelegateurResponsable())) {
            $demSuperieurHierarchique = 1;
        }

        if($count)
        {
            $sql = "SELECT COUNT(1) as count ";
        } else {
            $sql = "SELECT UTILCREAT.NOM, UTILCREAT.CODE, UTILCREAT.CODE_STE, UTILCREAT.CTR_ADR, SOCIETE.RAIS_SOC, DILISPEC.LIB01DICO respHierarchique ";
        }

        $sql .= " FROM UTILCREAT with (nolock)
        inner join SOCIETE with (nolock) on UTILCREAT.CODE_STE = SOCIETE.CODE_STE
        left join DILISPEC with (nolock) on UTILCREAT.CODE = DILISPEC.CODEDICO
        where 
        CREATMOD = '" . ReplaceSqlPointeur($mode) . "'";
      

        if(!$demSuperieurHierarchique)
        {
            $sql .= " AND UTILCREAT.CODE not in (select CODEDICO from DILISPEC with (nolock) where TYPEDICO  = 'WRKFL_CMUS')";
        }
        if ($isMulti == 0)
        {
            $sql .= " AND ( UTILCREAT.CODE_STE='" . ReplaceSqlPointeur($societe) . "'";

            if(count($listePlurisociete) > 0)
            { 
                for($i=0; $i<count($listePlurisociete); $i++)
                {
                    $sql .= " or UTILCREAT.CODE_STE='".$listePlurisociete[$i]['COD_STE']."'";
                }
            }
            
            $sql .= " )";
        } 

        if ($profil == 'locale') {
            $sql .= "and UTILCREAT.CTR_ADR in 
					(
						SELECT DISTINCT ctr.CODE_CTR from CENTRE as ctr with(nolock), SOCIETE  as soc with(nolock)
						where ctr.EMISSION=0x54 and ctr.CODE_STE=soc.CODE_STE
						and (ctr.CODE_CTR in (select COD_CTR from ADML_CTR with(nolock) where COD_USR='" . ReplaceSqlPointeur($login) . "')
						or
						soc.CODE_STE in (select SOC_COD from ADML_SOC with(nolock) where COD_USR='" . ReplaceSqlPointeur($login) . "' and TTCTR=0x54)
						or
						soc.GROUPE in (select COD_GRPS from ADMLGRSO with(nolock) where COD_USR='" . ReplaceSqlPointeur($login) . "' and TTSOC=0x54))";
            
            // Si l'utilisateur est monosociété alors on ajoute un filtre sur la société
            // if ($isMulti == 0) 
            // {
                $sql .= " and ctr.CODE_STE='" . ReplaceSqlPointeur($societe) . "'";
                //if(count($listePlurisociete) > 0)
                // { 
                //     for($i=0; $i<count($listePlurisociete); $i++)
                //     {
                //         $sql .= " and ctr.CODE_STE='".$listePlurisociete[$i]['COD_STE']."'";
                //     }
                // }
            // }
            $sql .= ')';
        }
        
        if(!$count)
        {
            $sql .= ' order by UTILCREAT.NOM';
        }

        return new RequeteSQL($sql, DB_OXASQLDB);
    }

      /**
     * Fonction retournant la requete permettant de savoir si une demande de modification est en cours
     */
    public static function rqGetListePlurisociete($login)
    {
        $sql = "select COD_USR, COD_STE from  SOC_USR with (nolock) where COD_USR = '" . ReplaceSqlPointeur($login) . "'";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requete permettant de savoir si une demande de modification est en cours
     */
    public static function rqGetDemandeModificationForUser(& $login)
    {
        $sql = ' select * from  UTILCREAT with (nolock) ' . " left outer join DILISPEC with (nolock) on CODEDICO = UTILCREAT.CODE and DILISPEC.TYPEDICO = 'ETDEDSDAFA'" . " where USR_MOD = '" . ReplaceSqlPointeur($login) . "' and CREATMOD = 'M'";
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction retournant la requête permettant de lister les collaborateurs d'un admin local ou central
     * 
     * @param $profil :
     *            profil de l'user connecté
     * @param $login :
     *            login de l'utilisateur connecté
     * @param $isMulti :
     *            boolean 0/1 1 si l'utilisateur est multisociété
     * @param $sociéte :
     *            société de l'utilisateur, utilisé uniquement si admin local
     *            
     */
    public static function rqGetListUsersForAdmin($profil, $login, $isMulti, $societe = '', $listeSociete = [])
    {
        $sql = "select HASTUTIL.CODE, HASTUTIL.NOM, HASTUTIL.CODE_STE from HASTUTIL with (nolock) where HASTUTIL.CODE !='" . ReplaceSqlPointeur($login) . '\'';
        
        if($listeSociete)
        {
            $sql .= " and HASTUTIL.CODE_STE in ('".implode("','", $listeSociete)."')";
        }
        elseif ($isMulti == 0) {
            $sql .= " and HASTUTIL.CODE_STE='" . ReplaceSqlPointeur($societe) . "'";
        }
        
        
        if ($profil == 'locale') {
            $sql .= " and HASTUTIL.CTR_ADR in 
				(
					select distinct ctr.CODE_CTR from CENTRE as ctr with(nolock), SOCIETE  as soc with(nolock)
					where ctr.EMISSION=0x54 and ctr.CODE_STE=soc.CODE_STE
					and (ctr.CODE_CTR in (select COD_CTR from ADML_CTR with(nolock) where COD_USR='" . ReplaceSqlPointeur($login) . "')
					or
					soc.CODE_STE in (select SOC_COD from ADML_SOC with(nolock) where COD_USR='" . ReplaceSqlPointeur($login) . "' and TTCTR=0x54)
					or
					soc.GROUPE in (select COD_GRPS from ADMLGRSO with(nolock) where COD_USR='" . ReplaceSqlPointeur($login) . "' and TTSOC=0x54))";
            
            // Si l'utilisateur est monosociété alors on ajoute un filtre sur la société
            // if ($isMulti == 0)
            //     $sql .= " and ctr.CODE_STE='" . ReplaceSqlPointeur($societe) . "'";
            
            $sql .= ')';
        }
        
        $sql .= ' order by NOM';
        
        return new RequeteSQL($sql, DB_OXASQLDB);
    }

    /**
     * Fonction permettant de retourner les code des utilisateurs qui sont en cours de blocage sur leur profil
     */
    // Spec 3156
    public static function rqGetListBlockedUsers($profil, $login, $isMulti, $societe = '', $count = false)
    {
        if(!$count)
        {
            $sql = 'select UTILBLOQUE.CODE, HASTUTIL.NOM, SOCIETE.RAIS_SOC, DATE_BLOC, HEURE_BLOC, TXT_BLOC, ORIGINE, ADR_IP, OS_USER, HASTUTIL.CTR_ADR ';
        } else 
        {
            $sql =' select count(1) as count ';
        }
		$sql .= 'from UTILBLOQUE with(nolock)
					left join HASTUTIL with(nolock) on UTILBLOQUE.CODE = HASTUTIL.CODE
					left join SOCIETE with(nolock) on HASTUTIL.CODE_STE = SOCIETE.CODE_STE
					where 1=1 ';
        
        if ($isMulti == 0)
            $sql .= " and HASTUTIL.CODE_STE='" . ReplaceSqlPointeur($societe) . "'";
        
        if ($profil == 'locale') {
            $sql .= "and HASTUTIL.CTR_ADR in 
					(
						select distinct ctr.CODE_CTR from CENTRE as ctr with(nolock), SOCIETE  as soc with(nolock)
						where ctr.EMISSION=0x54 and ctr.CODE_STE=soc.CODE_STE
						and (ctr.CODE_CTR in (select COD_CTR from ADML_CTR with(nolock) where COD_USR='" . ReplaceSqlPointeur($login) . "')
						or
						soc.CODE_STE in (select SOC_COD from ADML_SOC with(nolock) where COD_USR='" . ReplaceSqlPointeur($login) . "' and TTCTR=0x54)
						or
						soc.GROUPE in (select COD_GRPS from ADMLGRSO with(nolock) where COD_USR='" . ReplaceSqlPointeur($login) . "' and TTSOC=0x54))";
            // Si l'utilisateur est monosociété alors on ajoute un filtre sur la société
            // if ($isMulti == 0)
            //     $sql .= " and ctr.CODE_STE='" . ReplaceSqlPointeur($societe) . "'";
            
            $sql .= ')';
        }
        if(!$count)
        {
            $sql .= ' order by HASTUTIL.NOM';
        }
        return new RequeteSQL($sql, DB_OXASQLDB);
    }
}