feat(migrations): add clinic_id context to weekly_schedules, date_overrides, and holidays
- Introduced clinic_id to weekly_schedules, date_overrides, and holidays to differentiate between personal and clinic schedules. - Updated unique constraints and indexes to accommodate the new clinic context. feat(command): create AssignScheduleClinicCommand to move schedules - Added a command to move a doctor's personal weekly schedule into a clinic context. - Implemented checks to ensure sessions align with the target clinic. feat(context): implement EntityContext and EntityContextResolver - Created EntityContext to represent the effective working environment of a request (doctor or clinic). - Developed EntityContextResolver to determine the execution context based on user roles and active contexts. test: add ServiceModeContextTest for appointment scheduling - Implemented tests to ensure service booking respects clinic and personal contexts. - Verified that financial data is omitted in clinic contexts in InvitedDoctorDashboardScopeTest.
This commit is contained in:
@@ -62,6 +62,32 @@ class DoctorAddressRepository extends ServiceEntityRepository
|
||||
->getSingleScalarResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* آدرسهای قابلانتخاب در یک context. مطب شخصی فقط آدرسهای شخصی خود پزشک را
|
||||
* میبیند و کلینیک فقط آدرسهای خودش — این دو هرگز union نمیشوند.
|
||||
*
|
||||
* @return DoctorAddress[]
|
||||
*/
|
||||
public function findForContext(Doctor $doctor, ?int $clinicId): array
|
||||
{
|
||||
$qb = $this->createQueryBuilder('a');
|
||||
|
||||
if ($clinicId === null) {
|
||||
$qb->where('a.doctor = :doctor')
|
||||
->andWhere('a.type = :personal')
|
||||
->setParameter('doctor', $doctor)
|
||||
->setParameter('personal', DoctorAddress::TYPE_PERSONAL);
|
||||
} else {
|
||||
$qb->where('a.clinicId = :clinicId')
|
||||
->andWhere('a.type = :clinic')
|
||||
->setParameter('clinicId', $clinicId)
|
||||
->setParameter('clinic', DoctorAddress::TYPE_CLINIC);
|
||||
}
|
||||
|
||||
return $qb->orderBy('a.id', 'ASC')->getQuery()->getResult();
|
||||
}
|
||||
|
||||
/** @deprecated آدرسهای دو محیط را union میکند؛ از findForContext() استفاده کن. */
|
||||
public function findAvailableForDoctor(Doctor $doctor, array $clinicIds): array
|
||||
{
|
||||
$qb = $this->createQueryBuilder('a');
|
||||
|
||||
Reference in New Issue
Block a user