- Implemented SidebarStaff component tests to ensure staff users see only their dashboard and services. - Created StaffMyServicesPage to display assigned services for staff users. - Added migration to link clinic staff rows to user accounts for ROLE_STAFF access. - Defined StaffPermissions class for static permissions related to staff role. - Introduced StaffRouteGuardSubscriber to restrict API access for staff users. - Developed StaffAccountService for managing staff user accounts and linking them to clinic staff. - Added comprehensive tests for StaffAccountService to validate user creation, mobile number handling, and account attachment. - Implemented tests for staff dashboard access to ensure proper permissions and access control. - Created tests for staff login context to verify correct environment visibility based on user roles.
80 lines
2.4 KiB
PHP
80 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Staff\Repository;
|
|
|
|
use App\Auth\Entity\User;
|
|
use App\Staff\Entity\ClinicStaff;
|
|
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
|
use Doctrine\Persistence\ManagerRegistry;
|
|
|
|
class ClinicStaffRepository extends ServiceEntityRepository
|
|
{
|
|
public function __construct(ManagerRegistry $registry)
|
|
{
|
|
parent::__construct($registry, ClinicStaff::class);
|
|
}
|
|
|
|
public function findByUuid(string $uuid): ?ClinicStaff
|
|
{
|
|
return $this->findOneBy(['uuid' => $uuid]);
|
|
}
|
|
|
|
public function findByEntity(string $entityType, int $entityId, bool $activeOnly = false): array
|
|
{
|
|
$qb = $this->createQueryBuilder('s')
|
|
->where('s.entityType = :type')
|
|
->andWhere('s.entityId = :id')
|
|
->setParameter('type', $entityType)
|
|
->setParameter('id', $entityId)
|
|
->orderBy('s.fullName', 'ASC');
|
|
|
|
if ($activeOnly) {
|
|
$qb->andWhere('s.active = true');
|
|
}
|
|
|
|
return $qb->getQuery()->getResult();
|
|
}
|
|
|
|
/**
|
|
* ردیفهای فعالِ این کاربر در همهٔ محیطها — یک نفر میتواند پرسنل چند کلینیک/مطب باشد.
|
|
*
|
|
* @return ClinicStaff[]
|
|
*/
|
|
public function findActiveByUser(User $user): array
|
|
{
|
|
return $this->createQueryBuilder('s')
|
|
->where('s.user = :user')
|
|
->andWhere('s.active = true')
|
|
->setParameter('user', $user)
|
|
->orderBy('s.fullName', 'ASC')
|
|
->getQuery()
|
|
->getResult();
|
|
}
|
|
|
|
public function findActiveByUserAndEntity(User $user, string $entityType, int $entityId): ?ClinicStaff
|
|
{
|
|
return $this->findOneBy([
|
|
'user' => $user,
|
|
'entityType' => $entityType,
|
|
'entityId' => $entityId,
|
|
'active' => true,
|
|
]);
|
|
}
|
|
|
|
/** برای جلوگیری از ثبت دو پرسنل با یک شماره در یک محیط. */
|
|
public function findByEntityAndPhone(string $entityType, int $entityId, string $phone): ?ClinicStaff
|
|
{
|
|
return $this->findOneBy([
|
|
'entityType' => $entityType,
|
|
'entityId' => $entityId,
|
|
'phone' => $phone,
|
|
]);
|
|
}
|
|
|
|
public function save(ClinicStaff $staff): void
|
|
{
|
|
$this->getEntityManager()->persist($staff);
|
|
$this->getEntityManager()->flush();
|
|
}
|
|
}
|