This commit is contained in:
R
2022-11-22 11:59:06 +07:00
parent 05ae09ab4c
commit b6d5330838
4 changed files with 83 additions and 33 deletions

View File

@@ -6,6 +6,7 @@ use App\Helpers\Helper;
use App\Models\Organization; use App\Models\Organization;
use App\Models\Practitioner; use App\Models\Practitioner;
use App\Models\PractitionerRole; use App\Models\PractitionerRole;
use Carbon\Carbon;
use Illuminate\Contracts\Support\Renderable; use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Routing\Controller; use Illuminate\Routing\Controller;
@@ -157,6 +158,16 @@ class DoctorController extends Controller
'start_date' => ['required', 'date'] 'start_date' => ['required', 'date']
]); ]);
$schedules = [
'Senin' => [],
'Selasa' => [],
'Rabu' => [],
'Kamis' => [],
'Jumat' => [],
'Sabtu' => [],
'Minggu' => []
];
if ($request->type == 'walkin') { if ($request->type == 'walkin') {
$practitionerRole = PractitionerRole::query() $practitionerRole = PractitionerRole::query()
@@ -168,19 +179,41 @@ class DoctorController extends Controller
if ($practitionerRole) { if ($practitionerRole) {
$schedules = [
'Senin' => [],
'Selasa' => [],
'Rabu' => [],
'Kamis' => [],
'Jumat' => [],
'Sabtu' => [],
'Minggu' => []
];
foreach ($practitionerRole->daily_availabilities as $day => $times) { $practitionerRole->availabilities->sortBy('start_time')
$schedules[$day] = array_unique(array_merge($schedules[$day], $times)); ->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') { } else if ($request->type == 'teleconsultation') {
@@ -197,35 +230,51 @@ class DoctorController extends Controller
->where('id', $id) ->where('id', $id)
->first(); ->first();
$schedules = [
'Senin' => [],
'Selasa' => [],
'Rabu' => [],
'Kamis' => [],
'Jumat' => [],
'Sabtu' => [],
'Minggu' => []
];
foreach ($practitioner->practitionerRoles as $role) { 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 foreach ($schedules as $day => $schedule) {
$schedules[$day] = array_unique(array_merge($schedules[$day], $times));
// $schedules[] = [ if (!count($availability->days) || in_array($day, $availability_days)) {
// 'day' => $day,
// 'times' => array_unique( array_merge($schedules[$day], $times) ) 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); $datesAvailabilities = Helper::dailyAvailabilitiesToDate($schedules, $request->start_date, $request->end_date ?? null);
return response()->json($datesAvailabilities); return Helper::responseJson(data: $datesAvailabilities);
return response()->json([ return response()->json([
'message' => 'Jadwal praktek dokter tidak ditemukan' 'message' => 'Jadwal praktek dokter tidak ditemukan'

View File

@@ -53,8 +53,8 @@ Route::prefix('linksehat')->group(function () {
Route::controller(DoctorController::class)->group(function () { Route::controller(DoctorController::class)->group(function () {
Route::get('doctors/online', 'index')->name('doctors.online'); Route::get('doctors/online', 'index')->name('doctors.online');
Route::get('doctors', 'index')->name('doctors.index'); 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::post('doctors/{id}/schedule', 'schedule')->name('doctors.schedule');
Route::get('doctors/{id}', 'show')->name('doctors.show');
}); });

View File

@@ -71,6 +71,7 @@ class DoctorResourceDetail extends JsonResource
'award' => empty($award) ? null : $award, 'award' => empty($award) ? null : $award,
'education' => empty($education) ? null : $education, 'education' => empty($education) ? null : $education,
'location_practect' => empty($queryHospitals) ? null : HospitalResource::collection($queryHospitals), 'location_practect' => empty($queryHospitals) ? null : HospitalResource::collection($queryHospitals),
'practice_at' => empty($queryHospitals) ? null : HospitalResource::collection($queryHospitals),
'available' => [ 'available' => [
'is_chat_available' => $isChatAvailable ?? null, 'is_chat_available' => $isChatAvailable ?? null,
'is_video_available' => $isVideoAvailable ?? null, 'is_video_available' => $isVideoAvailable ?? null,

View File

@@ -54,7 +54,7 @@ class Helper
$datesAvailabilities = []; $datesAvailabilities = [];
foreach ($ranges as $date) { foreach ($ranges as $date) {
$datesAvailabilities[] = [ $datesAvailabilities[$date->format('Y-m-d')][] = [
'date' => $date->format('Y-m-d'), 'date' => $date->format('Y-m-d'),
'day' => $date->dayName, 'day' => $date->dayName,
'slot' => $dailyAvailabilities[$date->dayName], 'slot' => $dailyAvailabilities[$date->dayName],