2a0b202d32
Deux lots regroupés sur la branche feat/absence-management. Suppression complète du portail client : - retire ROLE_CLIENT (security.yaml) ; User::getRoles() ajoute toujours ROLE_USER - supprime l'entité ClientTicket (+ repo, states, relations), User.client et User.allowedProjects, NotificationService, ProjectAllowedExtension, le bloc ROLE_CLIENT de MailAccessChecker - front : pages /portal, layout portal, composants client-ticket/, AdminClientTicketTab, services/dto/i18n/docs associés - fixtures : retire les users client-liot / client-acme - migration Version20260522110000 (drop client_ticket, user_allowed_projects, colonnes liées ; task_document.task_id -> NOT NULL) - tests : retire les cas obsolètes testant le blocage des clients sur le mail Module gestion des absences (WIP) : - entités / migrations (Version20260521160000, Version20260522090000) - pages absences.vue / team-absences.vue, composants frontend/components/absence/ - services front, AccrueLeaveCommand, PublicHolidayController Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
63 lines
1.6 KiB
PHP
63 lines
1.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Repository;
|
|
|
|
use App\Entity\User;
|
|
use DateTimeInterface;
|
|
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
use Doctrine\Persistence\ManagerRegistry;
|
|
|
|
/**
|
|
* @extends ServiceEntityRepository<User>
|
|
*/
|
|
class UserRepository extends ServiceEntityRepository
|
|
{
|
|
public function __construct(ManagerRegistry $registry)
|
|
{
|
|
parent::__construct($registry, User::class);
|
|
}
|
|
|
|
/**
|
|
* @return User[]
|
|
*/
|
|
public function findByRole(string $role): array
|
|
{
|
|
$conn = $this->getEntityManager()->getConnection();
|
|
$sql = 'SELECT id FROM "user" WHERE roles::text LIKE :role';
|
|
$ids = $conn->executeQuery($sql, ['role' => '%"'.$role.'"%'])->fetchFirstColumn();
|
|
|
|
if ([] === $ids) {
|
|
return [];
|
|
}
|
|
|
|
return $this->createQueryBuilder('u')
|
|
->where('u.id IN (:ids)')
|
|
->setParameter('ids', $ids)
|
|
->getQuery()
|
|
->getResult()
|
|
;
|
|
}
|
|
|
|
/**
|
|
* Employees active on the given date (hired on/before it, not yet left).
|
|
*
|
|
* @return User[]
|
|
*/
|
|
public function findActiveEmployees(DateTimeInterface $date): array
|
|
{
|
|
$dateStr = $date->format('Y-m-d');
|
|
|
|
return $this->createQueryBuilder('u')
|
|
->where('u.isEmployee = true')
|
|
->andWhere('u.hireDate IS NULL OR u.hireDate <= :date')
|
|
->andWhere('u.endDate IS NULL OR u.endDate >= :date')
|
|
->setParameter('date', $dateStr)
|
|
->orderBy('u.username', 'ASC')
|
|
->getQuery()
|
|
->getResult()
|
|
;
|
|
}
|
|
}
|