<?php
namespace App\Repository\Ajustes;
use App\Entity\Ajustes\Usuario;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Symfony\Component\Security\Core\User\PasswordUpgraderInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Security;
/**
* @method Usuario|null find($id, $lockMode = null, $lockVersion = null)
* @method Usuario|null findOneBy(array $criteria, array $orderBy = null)
* @method Usuario[] findAll()
* @method Usuario[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class UsuarioRepository extends ServiceEntityRepository implements PasswordUpgraderInterface
{
public function __construct(ManagerRegistry $registry, Security $security)
{
parent::__construct($registry, Usuario::class);
$this->security = $security;
}
/**
* Used to upgrade (rehash) the user's password automatically over time.
*/
public function upgradePassword(UserInterface $user, string $newEncodedPassword): void
{
if (!$user instanceof Usuario) {
throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', \get_class($user)));
}
$user->setPassword($newEncodedPassword);
$this->_em->persist($user);
$this->_em->flush();
}
// /**
// * @return Usuario[] Returns an array of Usuario objects
// */
/*
public function findByExampleField($value)
{
return $this->createQueryBuilder('u')
->andWhere('u.exampleField = :val')
->setParameter('val', $value)
->orderBy('u.id', 'ASC')
->setMaxResults(10)
->getQuery()
->getResult()
;
}
*/
/*
public function findOneBySomeField($value): ?Usuario
{
return $this->createQueryBuilder('u')
->andWhere('u.exampleField = :val')
->setParameter('val', $value)
->getQuery()
->getOneOrNullResult()
;
}
*/
public function filter($data, $partial = "", $getQuery = false, $limit = null){
$parameters = array();
$query = $this
->createQueryBuilder('usr')
->leftJoin('usr.UsuRoles', 'rls')
;
if($partial != ""){
$query->select($partial);
}
if(($data['texto']['texto'] ?? $data['texto'] ?? '') != ''){
$query->andwhere('
usr.UsuUsername like :where1 OR
usr.UsuName like :where1 OR
usr.UsuSurname like :where1
');
$parameters[':where1'] = '%'.($data['texto']['texto'] ?? $data['texto']).'%';
}
if(($data['enabled'] ?? '') != ''){
$query->andwhere('usr.UsuEnabled = :ena');
$parameters[':ena'] = $data['enabled'];
}
if(isset($data['roles']) && $data['roles'] != "" && !empty($data['roles'] )){
$query->andwhere('rls.id in (:rls)');
$parameters[':rls'] = $data['role'];
}
if(!empty($parameters)){
$query->setParameters($parameters);
}
if ($limit != null){
$query->setMaxResults($limit);
}
if($getQuery){
return $query->getQuery();
}
return $query->getQuery()->getResult();
}
// Form usuarios coordinadores
public function findCoordinador(){
$query = $this
->createQueryBuilder('usr')
->where('usr.UsuEnabled = true')
->andWhere('usr.UsuCoordinador = true')
;
return $query;
}
public function findCoordinadorCommand(){
$query = $this
->createQueryBuilder('usr')
->leftJoin('usr.UsuRoles', 'Role')
->andWhere('Role.id = 10')
;
return $query;
}
// Form usuarios comerciales
public function findComercial($comercial = null){
$query = $this
->createQueryBuilder('usr')
->where('usr.UsuEnabled = true')
->andWhere('usr.UsuCoordinador = false or usr.UsuCoordinador is null')
;
if ($this->security->isGranted('ROLE_COORDINADOR')) {
$query->andwhere('usr.id in (:im) or usr.id in (:UserCoords) ');
$parameters[':im'] = $this->security->getUser()->getId();
$parameters[':UserCoords'] = $this->security->getUser()->getUsuCoordinados();
}elseif ($this->security->isGranted('ROLE_COMERCIAL')) {
$query->andwhere('usr.id in (:im)');
$parameters[':im'] = $this->security->getUser()->getId();
}
if($comercial != "" && !empty($comercial)){
$query->orwhere('usr.id in (:comercial)');
$parameters[':comercial'] = $comercial;
}
if(!empty($parameters)){
$query->setParameters($parameters);
}
return $query;
}
// Form usuarios comerciales
public function findComercialVista($getQuery=false){
$query = $this
->createQueryBuilder('usr')
->where('usr.UsuCoordinador = true')
;
if ($this->security->isGranted('ROLE_COORDINADOR')) {
$query->andwhere('usr.id in (:im) or usr.id in (:UserCoords) ');
$parameters[':im'] = $this->security->getUser()->getId();
$parameters[':UserCoords'] = $this->security->getUser()->getUsuCoordinados();
}elseif ($this->security->isGranted('ROLE_COMERCIAL')) {
$query->andwhere('usr.id in (:im)');
$parameters[':im'] = $this->security->getUser()->getId();
}
if(!empty($parameters)){
$query->setParameters($parameters);
}
if($getQuery){
return $query->getQuery();
}
return $query->getQuery()->getResult();
}
// Find ususarios que dependen de un coordinador
public function findUsuariosVista($coordinador,$getQuery=false){
$parameters = array();
$query = $this
->createQueryBuilder('usr')
//->where('usr.UsuEnabled = true')
->Where('usr.UsuCoordinador = false OR usr.UsuCoordinador is null')
->andWhere('usr.UsuCoordinadoPor = :id')
;
$parameters[':id'] = $coordinador->getId();
if ($this->security->isGranted('ROLE_COORDINADOR')) {
$query->andwhere('usr.id in (:im) or usr.id in (:UserCoords) ');
$parameters[':im'] = $this->security->getUser()->getId();
$parameters[':UserCoords'] = $this->security->getUser()->getUsuCoordinados();
}elseif ($this->security->isGranted('ROLE_COMERCIAL')) {
$query->andwhere('usr.id in (:im)');
$parameters[':im'] = $this->security->getUser()->getId();
}
if(!empty($parameters)){
$query->setParameters($parameters);
}
if($getQuery){
return $query->getQuery();
}
return $query->getQuery()->getResult();
}
// Find ususarios que no dependen de un coordinador ni son coordinadors
public function findUsuariosNoCoordVista($getQuery=false){
$parameters = array();
$query = $this
->createQueryBuilder('usr')
//->where('usr.UsuEnabled = true')
->Where('usr.UsuCoordinador = false OR usr.UsuCoordinador is null')
->andWhere('usr.UsuCoordinadoPor = false OR usr.UsuCoordinadoPor is null')
;
if ($this->security->isGranted('ROLE_COORDINADOR')) {
$query->andwhere('usr.id in (:im) or usr.id in (:UserCoords) ');
$parameters[':im'] = $this->security->getUser()->getId();
$parameters[':UserCoords'] = $this->security->getUser()->getUsuCoordinados();
}elseif ($this->security->isGranted('ROLE_COMERCIAL')) {
$query->andwhere('usr.id in (:im)');
$parameters[':im'] = $this->security->getUser()->getId();
}
if(!empty($parameters)){
$query->setParameters($parameters);
}
if($getQuery){
return $query->getQuery();
}
return $query->getQuery()->getResult();;
}
}