diff --git a/Modules/Linksehat/Http/Controllers/Api/DoctorController.php b/Modules/Linksehat/Http/Controllers/Api/DoctorController.php index 405f02d0..cc31c3c8 100755 --- a/Modules/Linksehat/Http/Controllers/Api/DoctorController.php +++ b/Modules/Linksehat/Http/Controllers/Api/DoctorController.php @@ -6,6 +6,7 @@ use App\Helpers\Helper; use App\Models\Organization; use App\Models\Practitioner; use App\Models\PractitionerRole; +use Carbon\Carbon; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; @@ -156,6 +157,16 @@ class DoctorController extends Controller 'hospital_id' => 'required_if:type,walkin', 'start_date' => ['required', 'date'] ]); + + $schedules = [ + 'Senin' => [], + 'Selasa' => [], + 'Rabu' => [], + 'Kamis' => [], + 'Jumat' => [], + 'Sabtu' => [], + 'Minggu' => [] + ]; if ($request->type == 'walkin') { @@ -168,19 +179,41 @@ class DoctorController extends Controller if ($practitionerRole) { - $schedules = [ - 'Senin' => [], - 'Selasa' => [], - 'Rabu' => [], - 'Kamis' => [], - 'Jumat' => [], - 'Sabtu' => [], - 'Minggu' => [] - ]; - foreach ($practitionerRole->daily_availabilities as $day => $times) { - $schedules[$day] = array_unique(array_merge($schedules[$day], $times)); - } + $practitionerRole->availabilities->sortBy('start_time') + ->each(function ($availability) use (&$schedules) { + $availability_days = $availability->days->pluck('day')->toArray(); + + foreach ($schedules as $day => $schedule) { + + if (!count($availability->days) || in_array($day, $availability_days)) { + + if (Carbon::parse($availability->start_time) < Carbon::parse("10:00")) { + $schedules[$day]['Pagi'][] = [ + "start" => $availability->start_time, + 'end' => $availability->end_time + ]; + } + + else if (Carbon::parse($availability->start_time) < Carbon::parse("15:00")) { + $schedules[$day]['Siang'][] = [ + "start" => $availability->start_time, + 'end' => $availability->end_time + ]; + } + + else { + $schedules[$day]['Malam'][] = [ + "start" => $availability->start_time, + 'end' => $availability->end_time + ]; + } + + } + + } + + }); } } else if ($request->type == 'teleconsultation') { @@ -197,35 +230,51 @@ class DoctorController extends Controller ->where('id', $id) ->first(); - $schedules = [ - 'Senin' => [], - 'Selasa' => [], - 'Rabu' => [], - 'Kamis' => [], - 'Jumat' => [], - 'Sabtu' => [], - 'Minggu' => [] - ]; - foreach ($practitioner->practitionerRoles as $role) { - foreach ($role->daily_availabilities as $day => $times) { + $role->availabilities->sortBy('start_time') + ->each(function ($availability) use (&$schedules) { + $availability_days = $availability->days->pluck('day')->toArray(); - // Merge All Role Availabilities - $schedules[$day] = array_unique(array_merge($schedules[$day], $times)); - // $schedules[] = [ - // 'day' => $day, - // 'times' => array_unique( array_merge($schedules[$day], $times) ) - // ]; + foreach ($schedules as $day => $schedule) { - } + if (!count($availability->days) || in_array($day, $availability_days)) { + + if (Carbon::parse($availability->start_time) < Carbon::parse("10:00")) { + $schedules[$day]['Pagi'][] = [ + "start" => $availability->start_time, + 'end' => $availability->end_time + ]; + } + + else if (Carbon::parse($availability->start_time) < Carbon::parse("15:00")) { + $schedules[$day]['Siang'][] = [ + "start" => $availability->start_time, + 'end' => $availability->end_time + ]; + } + + else { + $schedules[$day]['Malam'][] = [ + "start" => $availability->start_time, + 'end' => $availability->end_time + ]; + } + + } + + } + + }); + + continue; // TODO Fix This } } $datesAvailabilities = Helper::dailyAvailabilitiesToDate($schedules, $request->start_date, $request->end_date ?? null); - return response()->json($datesAvailabilities); + return Helper::responseJson(data: $datesAvailabilities); return response()->json([ 'message' => 'Jadwal praktek dokter tidak ditemukan' diff --git a/Modules/Linksehat/Routes/api.php b/Modules/Linksehat/Routes/api.php index cc4a1082..145e78b2 100755 --- a/Modules/Linksehat/Routes/api.php +++ b/Modules/Linksehat/Routes/api.php @@ -53,8 +53,8 @@ Route::prefix('linksehat')->group(function () { Route::controller(DoctorController::class)->group(function () { Route::get('doctors/online', 'index')->name('doctors.online'); Route::get('doctors', 'index')->name('doctors.index'); - Route::get('doctors/{id}', 'show')->name('doctors.show'); Route::post('doctors/{id}/schedule', 'schedule')->name('doctors.schedule'); + Route::get('doctors/{id}', 'show')->name('doctors.show'); }); diff --git a/Modules/Linksehat/Transformers/Doctor/DoctorResourceDetail.php b/Modules/Linksehat/Transformers/Doctor/DoctorResourceDetail.php index a5e26ef7..43295984 100755 --- a/Modules/Linksehat/Transformers/Doctor/DoctorResourceDetail.php +++ b/Modules/Linksehat/Transformers/Doctor/DoctorResourceDetail.php @@ -71,6 +71,7 @@ class DoctorResourceDetail extends JsonResource 'award' => empty($award) ? null : $award, 'education' => empty($education) ? null : $education, 'location_practect' => empty($queryHospitals) ? null : HospitalResource::collection($queryHospitals), + 'practice_at' => empty($queryHospitals) ? null : HospitalResource::collection($queryHospitals), 'available' => [ 'is_chat_available' => $isChatAvailable ?? null, 'is_video_available' => $isVideoAvailable ?? null, diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php index 44e2f233..34de3771 100755 --- a/app/Helpers/Helper.php +++ b/app/Helpers/Helper.php @@ -54,7 +54,7 @@ class Helper $datesAvailabilities = []; foreach ($ranges as $date) { - $datesAvailabilities[] = [ + $datesAvailabilities[$date->format('Y-m-d')][] = [ 'date' => $date->format('Y-m-d'), 'day' => $date->dayName, 'slot' => $dailyAvailabilities[$date->dayName],