diff --git a/Modules/Linksehat/Http/Controllers/Api/LivechatController.php b/Modules/Linksehat/Http/Controllers/Api/LivechatController.php new file mode 100644 index 00000000..c2db0d4e --- /dev/null +++ b/Modules/Linksehat/Http/Controllers/Api/LivechatController.php @@ -0,0 +1,235 @@ +where('nId', $request->id) + ->first(); + return Helper::responseJson([ + 'livechat' => LivechatResource::make($user, $request), + ]); + } + + public function consultation(Request $request) + { + $dataMemberProfile = []; + $user = User::with('detail') + ->where('nId', $request->member_id) + ->first(); + $memberProfile = User::with('detail')->where('nIDUser', $request->member_id)->get()->toArray(); + if (count($memberProfile) > 0){ + $urlAvatarDefault = $user->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png'; + $avatarMember = $user->detail->sImage ?? $urlAvatarDefault; + $relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $user->nIDHubunganKeluarga)->first('sHubunganKeluarga'); + + $dataUser = [ + 'id' => $user->nID, + 'name' => $user->sFirstName . ' ' . $user->sLastName, + 'relationship' => $relationship ? $relationship->sHubunganKeluarga : '-', + 'avatar' => $avatarMember + ]; + + array_push($dataMemberProfile, $dataUser); + + foreach($memberProfile as $m){ + $urlAvatarDefault = $m['detail']['nIDJenisKelamin'] == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png'; + $avatarMember = $m['detail']['sImage'] ?? $urlAvatarDefault; + $relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $m['nIDHubunganKeluarga'])->first('sHubunganKeluarga'); + + $data = [ + 'id' => $m['nID'], + 'name' => $m['full_name'], + 'relationship' => $relationship ? $relationship->sHubunganKeluarga : '-', + 'avatar' => $avatarMember, + ]; + + array_push($dataMemberProfile, $data); + } + } else { + $nID = $user->nIDUser ? $user->nIDUser : $user->nID; + if ($nID){ + $memberProfile = User::with('detail')->where('nIDUser', $nID)->get()->toArray(); + + $dataMember = User::with('detail')->where('nID', $nID)->get()->first(); + + if ($user->detail){ + $urlAvatarDefault = $user->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png'; + } else { + $urlAvatarDefault = 'https://linksehat.dev/assets/img/users/male-avatar.png'; + } + $avatar = $user->detail->sImage ?? $urlAvatarDefault; + + $avatarMember = $dataMember->detail->sImage ?? $urlAvatarDefault; + $relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $user->detail->nIDHubunganKeluarga)->first('sHubunganKeluarga'); + + $dataUser = [ + 'id' => $dataMember->nID, + 'name' => $dataMember->sFirstName . ' ' . $dataMember->sLastName, + 'relationship' => 'Me', + 'avatar' => $avatarMember + ]; + array_push($dataMemberProfile, $dataUser); + + if (count($memberProfile) > 0){ + foreach($memberProfile as $m){ + $urlAvatarDefault = $m['detail']['nIDJenisKelamin'] == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png'; + $avatarMember = $m['detail']['sImage'] ?? $urlAvatarDefault; + $relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $m['nIDHubunganKeluarga'])->first('sHubunganKeluarga'); + + $data = [ + 'id' => $m['nID'], + 'name' => $m['full_name'], + 'relationship' => $relationship->sHubunganKeluarga, + 'avatar' => $avatarMember, + ]; + + array_push( $dataMemberProfile, $data); + } + } + } + } + + return Helper::responseJson([ + 'member' => $dataMemberProfile + ]); + } + + public function consultation_request(Request $request) + { + $data = [ + 'doctor_id' => $request->doctor_id, + 'patient_id' => $request->patient_id, + 'organization_id' => $request->organization_id, + 'descriptions' => $request->descriptions + ]; + + $validator = Validator::make($request->all(), [ + 'doctor_id' => 'required', + 'patient_id' => 'required', + 'descriptions' => 'required', + ], [ + 'doctor_id.required' => 'ID Dokter harus diisi', + 'patient_id.required' => 'ID Dokter harus diisi', + 'descriptions.required' => 'Description harus diisi', + ]); + + if ($validator->fails()){ + return Helper::responseJson( + status: 'Bad Request', + statusCode: 400, + message: $validator->errors() + ); + } else { + // insert table livechat + $timezone = date_default_timezone_get(); + $data['request_date'] = date('Y-m-d H:i:s'); + $data['timezone'] = $timezone; + $data['uuid'] = (string) Str::orderedUuid(); + $livechat = Livechat::create($data); + $doctor = $livechat->doctor; + $data = [ + 'id' => $livechat->id, + 'request_date' => $livechat->request_date, + 'image_path' =>'https' + ]; + + + return Helper::responseJson(data: $data); + } + } + public function consultation_request_show($id){ + $livechat = Livechat::where('id', $id)->with(['doctor', 'practitioner'])->first(); + $practitionerRole = PractitionerRole::where('id',$livechat->practitioner->id)->first(); + + $price = $practitionerRole->price ? $practitionerRole->price : 30000; + $discount = 0; + $adminFee = 5000; + $totalPay = $price + $adminFee - $discount; + $data = [ + 'id' => $livechat->id, + 'code_transaksi' => $livechat->uuid, + 'doctor_id' => $livechat->doctor_id, + 'doctor_name' => $livechat->doctor->name, + 'doctor_specialist' => 'Umum', + 'price' => $price, + 'admin_price' => $adminFee, + 'promo' => [ + [ + 'id' => 1, + 'code' => 'SEHATBERSAMA', + 'discount_percent' => 20 + ], + [ + 'id' => 2, + 'code' => 'MARET MERIAH', + 'discount_percent' => 5 + ], + ], + 'total' => $totalPay + + ]; + return Helper::responseJson(data: $data); + } + public function consultation_payment_choose($id){ + $livechat = Livechat::where('id', $id)->with(['doctor', 'practitioner'])->first(); + $practitionerRole = PractitionerRole::where('id',$livechat->practitioner->id)->first(); + $eWallet = PaymentsMethods::where( + [ + 'active' => 1, + 'config_pmc_id' => 3, + ])->get()->toArray(); + $va = PaymentsMethods::where( + [ + 'active' => 1, + 'config_pmc_id' => 2, + ])->get()->toArray(); + + $payment = DuitkuHelper::paymentMethod(); + + $price = $practitionerRole->price ? $practitionerRole->price : 30000; + $discount = 0; + $adminFee = 5000; + $totalPay = $price + $adminFee - $discount; + $data = [ + 'id' => $livechat->id, + 'code_transaksi' => $livechat->uuid, + 'price' => $price, + 'admin_price' => $adminFee, + 'total' => $totalPay, + 'payment_method' => [ + 'ewallet' => $eWallet, + 'va' => $va + ] + // 'payment_method' => json_decode($payment) + + ]; + return Helper::responseJson(data: $data); + } + + public function consultation_payment(Request $request){ + + $duitku = DuitkuHelper::paymentMethod(); + dd($duitku); + } +} diff --git a/Modules/Linksehat/Routes/api.php b/Modules/Linksehat/Routes/api.php index 9a4aaed8..01de1ffe 100644 --- a/Modules/Linksehat/Routes/api.php +++ b/Modules/Linksehat/Routes/api.php @@ -14,6 +14,7 @@ use Modules\Linksehat\Http\Controllers\Api\SearchController; use Modules\Linksehat\Http\Controllers\Api\SpecialityController; use Modules\Linksehat\Http\Controllers\Api\LinkingController; use Modules\Linksehat\Http\Controllers\Api\HomeController; +use Modules\Linksehat\Http\Controllers\Api\LivechatController; /* |-------------------------------------------------------------------------- @@ -65,12 +66,6 @@ Route::prefix('linksehat')->group(function () { Route::get('doctors/{id}', 'show')->name('doctors.show'); }); - Route::controller(HomeController::class)->group(function () { - Route::get('home', 'index')->name('homes.index'); - Route::get('home/hospital', 'listHospital')->name('homes.listHospital'); - }); - - Route::middleware('auth:sanctum')->group(function () { Route::get('profile/{id}', [ProfileController::class, 'index'])->name('profile'); Route::get('change-profile/{id}', [ProfileController::class, 'changeProfile'])->name('change-profile'); @@ -90,12 +85,26 @@ Route::prefix('linksehat')->group(function () { Route::get('card/{member_id}', [LinkingController::class, 'card']); Route::get('card/{member_id}/{log_id}', [LinkingController::class, 'card_detail']); + Route::controller(HomeController::class)->group(function () { + Route::get('home', 'index')->name('homes.index'); + Route::get('home/hospital', 'listHospital')->name('homes.listHospital'); + }); + + Route::controller(LivechatController::class)->group(function () { + Route::get('livechat', 'index')->name('livechats.index'); + Route::get('livechat/consultation', 'consultation')->name('livechats.consultation'); + Route::post('livechat/consultation-request', 'consultation_request')->name('livechats.consultation-request'); + Route::get('livechat/consultation-request/{id}', 'consultation_request_show'); + Route::get('livechat/consultation-request/consultation_payment_choose/{id}', 'consultation_payment_choose'); + Route::post('livechat/consultation-payment', 'consultation_payment'); + }); + + Route::post('create-invoice-duitku', [DuitkuController::class, 'createInvoice']); + Route::post('check-status-duitku', [DuitkuController::class, 'checkStatus']); }); - Route::post('create-invoice-duitku', [DuitkuController::class, 'createInvoice']); Route::post('payment-method-duitku', [DuitkuController::class, 'paymentMethod']); - Route::post('check-status-duitku', [DuitkuController::class, 'checkStatus']); Route::post('callback-duitku', [DuitkuController::class, 'callback']); ;}); diff --git a/Modules/Linksehat/Transformers/Home/HomeResource.php b/Modules/Linksehat/Transformers/Home/HomeResource.php index 834a7fe9..bfb93dfc 100644 --- a/Modules/Linksehat/Transformers/Home/HomeResource.php +++ b/Modules/Linksehat/Transformers/Home/HomeResource.php @@ -209,6 +209,7 @@ class HomeResource extends JsonResource } } $data = [ + 'id' => $doctor['id'], 'full_name' => $doctor['person']['name'], 'specialist' => $specialist, 'experience' => $year, @@ -270,28 +271,12 @@ class HomeResource extends JsonResource 'message' => $wellcome, 'full_name' => $this->sFirstName . ' '. $this->sLastName, 'avatar' => $avatar, - // 'member_type' => $this->nIDUser ? 'Dependent' : 'Principal', - // 'member_profile' => $dataMemberProfile, 'member_id' => $memberId, 'linking' => $linking, 'doctors_livechat' => [ $doctorsLivechat ], 'hospital' => $hospitalList - - - // [ - // [ - // 'name' => 'PRIMAYA HOSPITAL NORTH BEKASI', - // 'image' => '', - // 'range' => 6 - // ], - // [ - // 'name' => 'PRIMAYA HOSPITAL TANGERANG', - // 'image' => '', - // 'range' => 10 - // ], - // ] ]; } } diff --git a/Modules/Linksehat/Transformers/Livechat/LivechatResource.php b/Modules/Linksehat/Transformers/Livechat/LivechatResource.php new file mode 100644 index 00000000..d77f95fe --- /dev/null +++ b/Modules/Linksehat/Transformers/Livechat/LivechatResource.php @@ -0,0 +1,85 @@ +request = $request; + parent::__construct($resource); + } + + public function toArray($request) + { + // Specialis + $specialists = Speciality::all(); + + // Doctor livechat + $doctors = Practitioner::with('person', 'practitionerRoles.organization', 'practitionerRoles.speciality') + ->whereHas('person', function ($query) { + $query->where('isOnline', 1); // hanya online + }) + ->get() + ->toArray(); + $doctorsLivechat = []; + foreach($doctors as $doctor){ + $specialist = 'Umum'; + $year = 0; + $price = 0; + if (!empty($doctor['person']['start_date_work'])) { + $starExperience = Carbon::parse($doctor['person']['start_date_work'])->format('Y-m-d'); + $experience = Carbon::createFromFormat('Y-m-d', $starExperience); + $year = $experience->diffInYears(Carbon::now()); + } + if ($doctor['practitioner_roles']) { + if ($doctor['practitioner_roles'][0]['speciality']){ + $specialist = $doctor['practitioner_roles'][0]['speciality']['name']; + } + if ($doctor['practitioner_roles'][0]['price']){ + $price = $doctor['practitioner_roles'][0]['price']; + } + } + $data = [ + 'id' => $doctor['id'], + 'full_name' => $doctor['person']['name'], + 'specialist' => $specialist, + 'experience' => $year, + 'review' => $doctor['person']['review'], + 'price' => $price, + 'price_real' => $price + ]; + array_push($doctorsLivechat, $data); + } + + return [ + 'jadwal_weekday' => 'Senin - Jumat (08:00 - 17:30)', + 'jadwal_weekend' => 'Sabtu (08:00 - 12:00)', + 'doctors_livechat' => [ + $doctorsLivechat + ], + 'specialist' => $specialists + ]; + } +} diff --git a/app/Helpers/DuitkuHelper.php b/app/Helpers/DuitkuHelper.php new file mode 100644 index 00000000..f99aa6c7 --- /dev/null +++ b/app/Helpers/DuitkuHelper.php @@ -0,0 +1,33 @@ +setSandboxMode(true); + // set sanitizer (default : true) + $duitkuConfig->setSanitizedMode(false); + // set log parameter (default : true) + $duitkuConfig->setDuitkuLogs(false); + return $duitkuConfig; + } + + public static function paymentMethod() + { + $duitkuConfig = self::configuration(); + try { + $paymentAmount = "10000"; //"YOUR_AMOUNT"; + $paymentMethodList = \Duitku\Pop::getPaymentMethod($paymentAmount, $duitkuConfig); + + header('Content-Type: application/json'); + return $paymentMethodList; + } catch (Exception $e) { + return $e->getMessage(); + } + } +} \ No newline at end of file diff --git a/app/Models/Livechat.php b/app/Models/Livechat.php new file mode 100644 index 00000000..151f0086 --- /dev/null +++ b/app/Models/Livechat.php @@ -0,0 +1,37 @@ +belongsTo(Person::class, 'doctor_id', 'id'); + } + + public function practitioner() { + return $this->belongsTo(Practitioner::class, 'doctor_id', 'id'); + } + + +} diff --git a/app/Models/PaymentsMethods.php b/app/Models/PaymentsMethods.php new file mode 100644 index 00000000..1db98639 --- /dev/null +++ b/app/Models/PaymentsMethods.php @@ -0,0 +1,20 @@ +id(); + $table->foreignId('doctor_id'); + $table->foreignId('patient_id'); + $table->foreignId('organization_id'); + $table->string('timezone')->nullable()->default(null); + $table->text('descriptions'); + $table->string('payment_method'); + $table->dateTime('request_date')->nullable(); + $table->dateTime('accept_date')->nullable(); + $table->dateTime('start_date')->nullable(); + $table->dateTime('end_date')->nullable(); + $table->timestamps(); + $table->softDeletes(); + + $table->foreignId('created_by')->nullable(); + $table->foreignId('updated_by')->nullable(); + $table->foreignId('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('livechats'); + } +}; diff --git a/database/migrations/2024_04_22_084927_add_column_to_livechats_table.php b/database/migrations/2024_04_22_084927_add_column_to_livechats_table.php new file mode 100644 index 00000000..8cfb806b --- /dev/null +++ b/database/migrations/2024_04_22_084927_add_column_to_livechats_table.php @@ -0,0 +1,32 @@ +string('uuid')->after('id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('livechats', function (Blueprint $table) { + $table->dropColumn('uuid'); + }); + } +};