Merge remote-tracking branch 'origin/staging' into origin/production
This commit is contained in:
21
Modules/Linksehat/Helpers/Doctor/ApiResponse.php
Normal file
21
Modules/Linksehat/Helpers/Doctor/ApiResponse.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Helpers\Doctor;
|
||||
|
||||
class ApiResponse
|
||||
{
|
||||
public static function apiResponse(string $status, array|object $data = null, string|array|object $message = null, int $statusCode)
|
||||
{
|
||||
if ($message instanceof \Illuminate\Support\MessageBag) {
|
||||
$message = $message->first();
|
||||
}
|
||||
return response()->json([
|
||||
'meta' => [
|
||||
'status' => $status,
|
||||
'code' => $statusCode,
|
||||
'message' => $message
|
||||
],
|
||||
'data' => $data,
|
||||
], $statusCode);
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,9 @@
|
||||
namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\Icd;
|
||||
use App\Models\Drug;
|
||||
use App\Models\Unit;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
@@ -93,5 +96,51 @@ class AutocompleteController extends Controller {
|
||||
}
|
||||
return Helper::responseJson($data);
|
||||
}
|
||||
|
||||
public function diagnosis(){
|
||||
$icds = Icd::query()
|
||||
->get();
|
||||
|
||||
$manipulatedIcds = $icds->map(function ($icd) {
|
||||
// Contoh manipulasi, tambahkan atau ubah properti sesuai kebutuhan
|
||||
return [
|
||||
'value' => $icd->code, // Ganti dengan properti yang sesuai dari model Icd
|
||||
'label' => $icd->code . ' - ' .$icd->name, // Ganti dengan properti yang sesuai dari model Icd
|
||||
];
|
||||
});
|
||||
return Helper::responseJson(data: $manipulatedIcds);
|
||||
}
|
||||
|
||||
public function drugList(Request $request){
|
||||
$drugs = Drug::query()
|
||||
->where([
|
||||
'atc_code' => 'lms', // ini untuk menggunakan list obat yang baru
|
||||
])
|
||||
->get();
|
||||
|
||||
$manipulatedDrugs = $drugs->map(function ($drug) {
|
||||
// Contoh manipulasi, tambahkan atau ubah properti sesuai kebutuhan
|
||||
return [
|
||||
'value' => $drug->id, // Ganti dengan properti yang sesuai dari model Icd
|
||||
'label' => $drug->name, // Ganti dengan properti yang sesuai dari model Icd
|
||||
];
|
||||
});
|
||||
return Helper::responseJson(data: $manipulatedDrugs);
|
||||
}
|
||||
|
||||
public function unitList(Request $request){
|
||||
$units = Unit::query()
|
||||
->get();
|
||||
|
||||
$manipulatedUnits = $units->map(function ($unit) {
|
||||
// Contoh manipulasi, tambahkan atau ubah properti sesuai kebutuhan
|
||||
return [
|
||||
'value' => $unit->id, // Ganti dengan properti yang sesuai dari model Icd
|
||||
'label' => $unit->name, // Ganti dengan properti yang sesuai dari model Icd
|
||||
];
|
||||
});
|
||||
return Helper::responseJson(data: $manipulatedUnits);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
323
Modules/Linksehat/Http/Controllers/Api/ChatController.php
Normal file
323
Modules/Linksehat/Http/Controllers/Api/ChatController.php
Normal file
@@ -0,0 +1,323 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Channel;
|
||||
use App\Events\ChatMessageSent;
|
||||
use App\Models\UserChannel;
|
||||
use App\Models\Message;
|
||||
use App\Models\File;
|
||||
use App\Models\Livechat;
|
||||
use App\Models\Person;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserDetail;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Dompdf\Dompdf;
|
||||
use Dompdf\Options;
|
||||
use Pusher\Pusher;
|
||||
|
||||
class ChatController extends Controller
|
||||
{
|
||||
public function createChannel(Request $request){
|
||||
// Validasi data yang diterima dari request
|
||||
$validatedData = $request->validate([
|
||||
'member_id' => 'required',
|
||||
'doctor_id' => 'required',
|
||||
], [
|
||||
'member_id.required' => 'Member ID harus diisi.',
|
||||
'doctor_id.required' => 'Doctor ID harus diisi.',
|
||||
]);
|
||||
|
||||
// Buat dan simpan data channel ke dalam tabel
|
||||
$channel = Channel::updateOrCreate([
|
||||
'name' => $request->member_id .'_' . $request->doctor_id,
|
||||
],
|
||||
[
|
||||
'name' => $request->member_id .'_' . $request->doctor_id,
|
||||
'type' => $request->type,
|
||||
'member_id' => $request->member_id,
|
||||
'doctor_id' => $request->doctor_id,
|
||||
]);
|
||||
|
||||
// Menggunakan updateOrCreate untuk menambahkan data UserChannel untuk member_id
|
||||
$userChannelMember = UserChannel::updateOrCreate(
|
||||
[
|
||||
'user_id' => $request->member_id,
|
||||
'channel_id' => $channel->id
|
||||
],
|
||||
[
|
||||
'user_id' => $request->member_id,
|
||||
'channel_id' => $channel->id
|
||||
]
|
||||
);
|
||||
|
||||
// Menggunakan updateOrCreate untuk menambahkan data UserChannel untuk doctor_id
|
||||
$userChannelDoctor = UserChannel::updateOrCreate(
|
||||
[
|
||||
'user_id' => $request->doctor_id,
|
||||
'channel_id' => $channel->id
|
||||
],
|
||||
[
|
||||
'user_id' => $request->doctor_id,
|
||||
'channel_id' => $channel->id
|
||||
]
|
||||
);
|
||||
|
||||
// Berikan respons yang sesuai ke klien
|
||||
return response()->json(['message' => 'Channel created successfully', 'channel' => $channel]);
|
||||
}
|
||||
|
||||
public function listChannel(Request $request){
|
||||
// Validasi request jika diperlukan
|
||||
$channel = Channel::where('member_id',$request->user_id)->get()->toArray();
|
||||
|
||||
if (!$channel) {
|
||||
$dataChannel = Channel::where('doctor_id',$request->user_id)->get()->toArray();
|
||||
$data = [];
|
||||
if ($dataChannel){
|
||||
foreach($dataChannel as $d){
|
||||
$user = User::with('detail')->where('nID', $d['member_id'])->first();
|
||||
$lastMessage = Message::where('channel_id', $d['id'])
|
||||
->latest('created_at')
|
||||
->first();
|
||||
$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;
|
||||
|
||||
$arr['id'] = $d['id'];
|
||||
$arr['avatar'] = $avatarMember;
|
||||
$arr['name'] = $user->sFirstName .' '.$user->sLastName;
|
||||
$arr['last_message'] = $lastMessage;
|
||||
|
||||
array_push($data, $arr);
|
||||
}
|
||||
}
|
||||
$channel = $data;
|
||||
}
|
||||
|
||||
|
||||
return response()->json(['message' => 'Get List Channel successfully', 'channel' => $channel]);
|
||||
}
|
||||
|
||||
public function sendMessage(Request $request)
|
||||
{
|
||||
// Validasi request jika diperlukan
|
||||
$validatedData = $request->validate([
|
||||
'user_id' => 'required'
|
||||
]);
|
||||
|
||||
// Ambil data dari request
|
||||
$message = Message::create([
|
||||
'content' => $request->message,
|
||||
'from_user' => $request->user_id,
|
||||
'channel_id' => $request->channel_id,
|
||||
'type' => $request->message ? 'text' : 'file'
|
||||
]);
|
||||
|
||||
$pathFile = null;
|
||||
if ($request->hasFile('file_chat')) {
|
||||
foreach ($request->file_chat as $file) {
|
||||
$pathFile = File::storeFile('chat', $message->id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\Message',
|
||||
'fileable_id' => $message->id,
|
||||
'type' => 'chat',
|
||||
'name' => File::getFileName('chat', $message->id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
|
||||
$message->update([
|
||||
'content' => env('LMS_APP_STORAGE') . 'storage/' . $pathFile,
|
||||
'from_user' => $request->user_id,
|
||||
'channel_id' => $request->channel_id,
|
||||
'type' => 'file',
|
||||
]);
|
||||
}
|
||||
// Berikan respons yang sesuai ke klien
|
||||
|
||||
$channel = Channel::where('id',$request->channel_id)->first();
|
||||
if($channel->member_id == $request->user_id){
|
||||
// Get nama dokter
|
||||
$person = Person::where('id', $channel->doctor_id)->first();
|
||||
$name = $person->name;
|
||||
} else {
|
||||
// Get nama pasien
|
||||
$person = User::where('nID', $channel->member_id)->first();
|
||||
$name = $person->sFirstName . ' ' . $person->sLastName;
|
||||
}
|
||||
|
||||
ChatMessageSent::dispatch($message);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Message sent successfully',
|
||||
'data' => [
|
||||
'header' => $name,
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
public function getMessage(Request $request)
|
||||
{
|
||||
// Buat instance Pusher dengan konfigurasi yang sesuai
|
||||
$channel = Channel::where('id',$request->channel_id)->first();
|
||||
$livechat = Livechat::where([
|
||||
'doctor_id' => $channel->doctor_id,
|
||||
'patient_id' => $channel->member_id,
|
||||
])->latest('created_at')->first();
|
||||
|
||||
if($channel->member_id == $request->user_id){
|
||||
// Get nama dokter
|
||||
$person = Person::where('id', $channel->doctor_id)->first();
|
||||
$name = $person->name;
|
||||
$avatar = '';
|
||||
$age = '';
|
||||
$gender = '';
|
||||
$question = '';
|
||||
|
||||
$consultationStart = $livechat->start_date;
|
||||
$consultationEnd = $livechat->end_date;
|
||||
$work = '';
|
||||
$address = '';
|
||||
} else {
|
||||
// Get nama pasien
|
||||
$user = User::where('nID', $channel->member_id)->with('detail')->first();
|
||||
$name = $user->sFirstName . ' ' . $user->sLastName;
|
||||
$urlAvatarDefault = $user->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
|
||||
$avatar = $user->detail->sImage ?? $urlAvatarDefault;
|
||||
$gender = DB::connection('oldlms')->table('tm_jenis_kelamin')->where('nID', $user->detail->nIDJenisKelamin)->first('sJenisKelamin');
|
||||
if ($gender){
|
||||
$gender = $gender->sJenisKelamin;
|
||||
}
|
||||
$age = Helper::calculateAge($user->detail->dTanggalLahir);
|
||||
$question = $livechat->descriptions;
|
||||
$consultationStart = $livechat->start_date;
|
||||
$consultationEnd = $livechat->end_date;
|
||||
$work = DB::connection('oldlms')->table('tm_pekerjaan')->where('nID', $user->detail->nIDPekerjaan)->first('sPekerjaan');
|
||||
|
||||
if($work){
|
||||
$work = $work->sPekerjaan;
|
||||
}
|
||||
$address = DB::connection('oldlms')->table('tm_users_address')->where('nIDUser', $user->nID)->first('sAlamat');
|
||||
if($address){
|
||||
$address = $address->sAlamat;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Ini Untul Chat
|
||||
$perPage = $request->input('per_page', 10); // Default 10 pesan per halaman
|
||||
$page = $request->input('page', 1); // Default halaman 1
|
||||
|
||||
$data = Message::where('channel_id', $request->channel_id)
|
||||
->where('type', '!=', 'trigger')
|
||||
->orderBy('created_at', 'desc') // Urutkan berdasarkan created_at secara descending
|
||||
->paginate($perPage, ['*'], 'page', $page);
|
||||
|
||||
// Data Consultation Summary
|
||||
$consultationSummary = [
|
||||
'subject' => $livechat->subject,
|
||||
'object' => $livechat->object,
|
||||
'assessment' => $livechat->assessment,
|
||||
'plan' => $livechat->plan,
|
||||
];
|
||||
|
||||
$healthSertificate = false;
|
||||
if ($livechat->health_certificate_start && $livechat->health_certificate_end){
|
||||
$healthSertificate = True;
|
||||
}
|
||||
// Berikan respons yang sesuai ke klien
|
||||
return response()->json([
|
||||
'message' => 'Message sent successfully',
|
||||
'data' => [
|
||||
'header' => $name,
|
||||
'avatar' => $avatar,
|
||||
'gender' => $gender,
|
||||
'age' => $age,
|
||||
'question' => $question,
|
||||
'start' => $consultationStart,
|
||||
'end' => $consultationEnd,
|
||||
'work' => $work,
|
||||
'address' => $address,
|
||||
'chat' => $data->items(),
|
||||
'pagination' => [
|
||||
'total' => $data->total(),
|
||||
'per_page' => $data->perPage(),
|
||||
'current_page' => $data->currentPage(),
|
||||
'last_page' => $data->lastPage(),
|
||||
'from' => $data->firstItem(),
|
||||
'to' => $data->lastItem(),
|
||||
],
|
||||
'summary' => $consultationSummary,
|
||||
'livechat_id' => $livechat->id,
|
||||
'health_sertificate' => $healthSertificate,
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
public function downloadHealtcare($id){
|
||||
$pdf = new Dompdf();
|
||||
|
||||
$options = new Options();
|
||||
$options->set('isHtml5ParserEnabled', true);
|
||||
$options->set('isPhpEnabled', true);
|
||||
$options->set(['isRemoteEnabled' => true]);
|
||||
$pdf->setOptions($options);
|
||||
|
||||
$pdf->setPaper('A4', 'portrait');
|
||||
|
||||
$livechat = Livechat::where([
|
||||
'id' => $id
|
||||
])->latest('created_at')->first();
|
||||
|
||||
$user = User::where('nID', $livechat->patient_id)->with('detail')->first();
|
||||
$name = $user->sFirstName . ' ' . $user->sLastName;
|
||||
$age = Helper::calculateAge($user->detail->dTanggalLahir);
|
||||
|
||||
$person = Person::where('id', $livechat->doctor_id)->first();
|
||||
$doctorName = $person->name;
|
||||
|
||||
$work = DB::connection('oldlms')->table('tm_pekerjaan')->where('nID', $user->detail->nIDPekerjaan)->first('sPekerjaan');
|
||||
if($work){
|
||||
$work = $work->sPekerjaan;
|
||||
}
|
||||
$address = DB::connection('oldlms')->table('tm_users_address')->where('nIDUser', $user->nID)->first('sAlamat');
|
||||
if($address){
|
||||
$address = $address->sAlamat;
|
||||
}
|
||||
// Memuat view pdf_view.php ke dalam variabel
|
||||
$calculateDate = Helper::calculateDateDifference($livechat->health_certificate_start, $livechat->health_certificate_end);
|
||||
|
||||
$data = [
|
||||
'name' => $name,
|
||||
'age' => $age,
|
||||
'work' => $work,
|
||||
'address' => $address,
|
||||
'doctor_name' => $doctorName,
|
||||
'date' => $livechat->created_at,
|
||||
'start_date' => $livechat->health_certificate_start,
|
||||
'end_date' => $livechat->health_certificate_end,
|
||||
'calculate_date' => $calculateDate
|
||||
];
|
||||
// Halaman 1
|
||||
$html1 = view('pdf.health_sertificate', $data);
|
||||
$htmlCombined = $html1 ;
|
||||
|
||||
$pdf->loadHtml($htmlCombined);
|
||||
$pdf->render();
|
||||
|
||||
$headers = [
|
||||
'Content-Type' => 'application/pdf',
|
||||
'Content-Disposition' => 'inline; filename="file.pdf"',
|
||||
];
|
||||
|
||||
return response($pdf->output(), 200, $headers);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,264 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Controllers\Api\Doctor;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use Crypt;
|
||||
use Error;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Modules\Internal\Emails\SendVerifyEmail;
|
||||
use Modules\Internal\Events\ForgetPassword;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
use App\Helpers\Helper;
|
||||
use Illuminate\Support\Facades\View;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class AuthDoctorController extends Controller
|
||||
{
|
||||
public function login(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'email' => $request->email,
|
||||
'password' => $request->password
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'required|email',
|
||||
'password' => 'required'
|
||||
], [
|
||||
'email.required' => trans('Validation.required',['attribute' => 'Email']),
|
||||
'email.email' => trans('Validation.email'),
|
||||
'password.required' => trans('Validation.required',['attribute' => 'Password']),
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
$user = User::where('email', $request->email)->first();
|
||||
if (!$user) {
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
|
||||
if (!Hash::check($request->password, $user->password)) {
|
||||
return ApiResponse::apiResponse('Bad Request', $data, trans('Message.password'), 400);
|
||||
}
|
||||
|
||||
$res_data = [
|
||||
// 'user' => $user,
|
||||
'token' => $user->createToken('app')->plainTextToken
|
||||
];
|
||||
|
||||
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
|
||||
}
|
||||
}
|
||||
|
||||
public function logout(Request $request)
|
||||
{
|
||||
$request->user()->tokens()->delete();
|
||||
|
||||
return ApiResponse::apiResponse('Success', [], trans('Message.logout'), 200);
|
||||
}
|
||||
|
||||
public function forgotPassword(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'email' => $request->email,
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'required|email',
|
||||
], [
|
||||
'email.required' => trans('Validation.required',['attribute' => 'Email']),
|
||||
'email.email' => trans('Validation.email'),
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
$user = User::where('email', $request->email)->first();
|
||||
if (!$user) {
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
|
||||
//send email
|
||||
// Insert data notifications
|
||||
$emailTo = $request->email;
|
||||
$dataNotif = [
|
||||
'user_id' => $user->id,
|
||||
'email' => $emailTo,
|
||||
'title' => 'Forgot Password',
|
||||
'description' => 'Request forgot password from App Doctor',
|
||||
'type' => 1,
|
||||
'isUnRead' => true,
|
||||
'created_by' => auth()->check() ? auth()->user()->id : null,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
$sendNotif = Helper::insertNotification($dataNotif);
|
||||
//Insert data password reset
|
||||
$token = mt_rand(100000, 999999); // Menghasilkan angka acak antara 100000 dan 999999
|
||||
$p_resets = DB::table('password_resets')
|
||||
->insert([
|
||||
'email' => $request->email,
|
||||
'token' => $token,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
// Send Email after insert notifications
|
||||
if($sendNotif && $p_resets)
|
||||
{
|
||||
//send to alarm
|
||||
$nameTo = 'User';
|
||||
$dataEmail = [
|
||||
'email' => $emailTo,
|
||||
'name' => $nameTo,
|
||||
'subject' => 'Request Forgot Password from App Doctor Date '. date('Y-m-d H:i:s'),
|
||||
'body' => View::make('email/forgot_password', ['token' => $token])->render(),
|
||||
];
|
||||
Helper::sendEmail($dataEmail);
|
||||
|
||||
$res = DB::table('password_resets')
|
||||
->where('email', '=', $request->email)
|
||||
->where('token', '=', $token)
|
||||
->get();
|
||||
|
||||
return ApiResponse::apiResponse("Success", $res, trans('Message.success'), 200);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse("Internal Server Error", $data, trans('Message.server_error'), 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function verifCode(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'email' => $request->email,
|
||||
'token' => $request->token,
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'required|email',
|
||||
'token' => 'required|numeric',
|
||||
], [
|
||||
'email.required' => trans('Validation.required',['attribute' => 'Email']),
|
||||
'email.email' => trans('Validation.email'),
|
||||
'token.required' => trans('Validation.required',['attribute' => 'Token']),
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Check Time
|
||||
$check = DB::table('password_resets')
|
||||
->where('email', '=', $request->email)
|
||||
->where('token', '=', $request->token)
|
||||
->select('created_at')
|
||||
->first();
|
||||
|
||||
if($check)
|
||||
{
|
||||
$created_at = strtotime($check->created_at); // Konversi string waktu ke UNIX timestamp
|
||||
$now = time(); // Waktu sekarang dalam UNIX timestamp
|
||||
|
||||
// Hitung selisih waktu dalam menit
|
||||
$diffInMinutes = ($now - $created_at) / 60;
|
||||
|
||||
if ($diffInMinutes > 60) {
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.token_expired'), 404);
|
||||
} else {
|
||||
// Lanjutkan dengan proses pemulihan kata sandi
|
||||
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function resetPassword(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'email' => $request->email,
|
||||
'token' => $request->token,
|
||||
'new_password' => $request->new_password
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'required|email',
|
||||
'token' => 'required|numeric',
|
||||
'new_password' => [
|
||||
'required',
|
||||
'min:8',
|
||||
'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/'
|
||||
]
|
||||
], [
|
||||
'email.required' => trans('Validation.required',['attribute' => 'Email']),
|
||||
'email.email' => trans('Validation.email'),
|
||||
'token.required' => trans('Validation.required',['attribute' => 'Token']),
|
||||
'new_password.required' => trans('Validation.required',['attribute' => 'New Password']),
|
||||
'new_password.min' => trans('Validation.min',['attribute' => 'New Password']),
|
||||
'new_password.regex' => trans('Validation.regex',['attribute' => 'New Password']),
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Check Time
|
||||
$check = DB::table('password_resets')
|
||||
->where('email', '=', $request->email)
|
||||
->where('token', '=', $request->token)
|
||||
->select('created_at')
|
||||
->first();
|
||||
|
||||
if($check)
|
||||
{
|
||||
$created_at = strtotime($check->created_at); // Konversi string waktu ke UNIX timestamp
|
||||
$now = time(); // Waktu sekarang dalam UNIX timestamp
|
||||
|
||||
// Hitung selisih waktu dalam menit
|
||||
$diffInMinutes = ($now - $created_at) / 60;
|
||||
|
||||
if ($diffInMinutes > 60) {
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.token_expired'), 404);
|
||||
} else {
|
||||
// Lanjutkan dengan proses pemulihan kata sandi
|
||||
$user = User::where('email', $request->email)->first();
|
||||
if ($user)
|
||||
{
|
||||
$newPassword = Hash::make($request->new_password);
|
||||
$user->password = $newPassword;
|
||||
$user->save();
|
||||
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.token_expired'), 404);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Controllers\Api\Doctor;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use App\Models\OLDLMS\User as UserLMS;
|
||||
use App\Models\Livechat;
|
||||
use App\Models\Channel;
|
||||
use App\Models\Message;
|
||||
use App\Models\Prescription;
|
||||
use App\Models\PrescriptionItem;
|
||||
use Crypt;
|
||||
use Error;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Modules\Internal\Emails\SendVerifyEmail;
|
||||
use Modules\Internal\Events\ForgetPassword;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
use App\Helpers\Helper;
|
||||
use Illuminate\Support\Facades\View;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ChatDoctorController extends Controller
|
||||
{
|
||||
public function getChat()
|
||||
{
|
||||
$data = [
|
||||
'user_id' => auth()->check() ? auth()->user()->id : null,
|
||||
];
|
||||
$user_id = auth()->check() ? auth()->user()->id : null;
|
||||
//Get data Chat
|
||||
$user = User::where('id',$user_id)->with('person')->first();
|
||||
$chat = Livechat::where([
|
||||
'doctor_id'=> $user->person_id,
|
||||
'accept_date'=> null,
|
||||
'status' => 1
|
||||
])->get();
|
||||
|
||||
$dataIncomingChat = [];
|
||||
if($chat) {
|
||||
foreach($chat as $c){
|
||||
$patient = UserLMS::where('nID',$c->patient_id)->with('detail')->first();
|
||||
$urlAvatarDefault = $patient->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
|
||||
$avatarMember = $patient->detail->sImage ?? $urlAvatarDefault;
|
||||
$arr['id'] = $c->id;
|
||||
$arr['patient_id'] = $patient->nID;
|
||||
$arr['avatar'] = $avatarMember;
|
||||
$arr['name'] = $patient->sFirstName .' '.$patient->sLastName; ;
|
||||
array_push($dataIncomingChat, $arr);
|
||||
}
|
||||
}
|
||||
|
||||
$dataChannel = Channel::where('doctor_id',$user->person_id)->get()->toArray();
|
||||
$dataOnGoing = [];
|
||||
if ($dataChannel){
|
||||
foreach($dataChannel as $d){
|
||||
$user = UserLMS::with('detail')->where('nID', $d['member_id'])->first();
|
||||
$lastMessage = Message::where('channel_id', $d['id'])
|
||||
->latest('created_at')
|
||||
->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';
|
||||
$avatarMember = $user->detail->sImage ?? $urlAvatarDefault;
|
||||
} else {
|
||||
$avatarMember = 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
}
|
||||
|
||||
$arr['id'] = $d['id'];
|
||||
$arr['avatar'] = $avatarMember;
|
||||
$arr['name'] = $user->sFirstName .' '.$user->sLastName;
|
||||
$arr['last_message'] = $lastMessage;
|
||||
|
||||
array_push($dataOnGoing, $arr);
|
||||
}
|
||||
}
|
||||
$channel = $data;
|
||||
|
||||
$data = [
|
||||
'incoming_chat' => $dataIncomingChat,
|
||||
'ongoing_chat' => $dataOnGoing
|
||||
];
|
||||
|
||||
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
|
||||
|
||||
}
|
||||
|
||||
public function getChatDetail($id){
|
||||
$livechat = Livechat::find($id);
|
||||
$user = UserLMS::with('detail')->where('nID', $livechat->patient_id)->first();
|
||||
$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;
|
||||
$gender = DB::connection('oldlms')->table('tm_jenis_kelamin')->where('nID', $user->detail->nIDJenisKelamin)->first('sJenisKelamin');
|
||||
$maritalStaus = DB::connection('oldlms')->table('tm_status_pernikahan')->where('nID', $user->detail->sMartialStatus)->first('sStatusPernikahan');
|
||||
$data = [];
|
||||
if ($livechat->status != 2){
|
||||
$data = [
|
||||
'id' => $user->nID,
|
||||
'name' => $user->sFirstName . ' ' . $user->sLastName,
|
||||
'avatar' => $avatarMember,
|
||||
'gender' => $gender->sJenisKelamin,
|
||||
'marital_status' => $maritalStaus->sStatusPernikahan,
|
||||
'age' => Helper::calculateAge($user->detail->dTanggalLahir),
|
||||
'weight' => $user->detail->sWeight,
|
||||
'height' => $user->detail->sHeight,
|
||||
'question' => $livechat->descriptions,
|
||||
'diseases' => [],
|
||||
'medications' => [],
|
||||
'allergy' => [],
|
||||
'family_history' => []
|
||||
];
|
||||
} else if ($livechat->status == 2){ // sudah accept, tinggal tunggu bayar pasient
|
||||
$data = [
|
||||
'message' => 'waiting payment'
|
||||
];
|
||||
}
|
||||
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
|
||||
}
|
||||
|
||||
public function declineChat(Request $request)
|
||||
{
|
||||
$livechat = Livechat::find($request->id);
|
||||
if ($livechat) {
|
||||
// Memperbarui atribut model
|
||||
$livechat->status = 3; // Decline
|
||||
// Menyimpan perubahan ke database
|
||||
$livechat->save();
|
||||
return ApiResponse::apiResponse("Success",['message' => 'Livechat updated successfully'], trans('Message.success'), 200);
|
||||
} else {
|
||||
return response()->json(['message' => 'Livechat not found'], 404);
|
||||
}
|
||||
}
|
||||
|
||||
public function approveChat(Request $request)
|
||||
{
|
||||
$livechat = Livechat::find($request->id);
|
||||
if ($livechat) {
|
||||
// Memperbarui atribut model
|
||||
$livechat->status = 2; // Accept
|
||||
$livechat->accept_date = date('Y-m-d H:i:s'); // Accept
|
||||
// Menyimpan perubahan ke database
|
||||
$livechat->save();
|
||||
return ApiResponse::apiResponse("Success",['message' => 'Livechat updated successfully'], trans('Message.success'), 200);
|
||||
} else {
|
||||
return response()->json(['message' => 'Livechat not found'], 404);
|
||||
}
|
||||
}
|
||||
|
||||
public function endChat(Request $request)
|
||||
{
|
||||
$livechat = Livechat::find($request->id);
|
||||
if ($livechat) {
|
||||
// Memperbarui atribut model
|
||||
$livechat->status = 6; // End Chat
|
||||
$livechat->end_date = date('Y-m-d H:i:s'); // Accept
|
||||
// Menyimpan perubahan ke database
|
||||
$livechat->save();
|
||||
return ApiResponse::apiResponse("Success",['message' => 'Livechat updated successfully'], trans('Message.success'), 200);
|
||||
} else {
|
||||
return response()->json(['message' => 'Livechat not found'], 404);
|
||||
}
|
||||
}
|
||||
|
||||
public function summaryChat(Request $request)
|
||||
{
|
||||
|
||||
$livechat = Livechat::find($request->id);
|
||||
if ($livechat) {
|
||||
// Memperbarui atribut model
|
||||
$livechat->subject = $request->subject; // Subject
|
||||
$livechat->object = $request->object; // Object
|
||||
$livechat->assessment = $request->assessment; // Assessment
|
||||
$livechat->plan = $request->plan; // Plan
|
||||
|
||||
$livechat->health_certificate_start = $request->health_certificate_start; // start
|
||||
$livechat->health_certificate_end = $request->health_certificate_end; // end
|
||||
// Menyimpan perubahan ke database
|
||||
$livechat->save();
|
||||
|
||||
$prescriptions = Prescription::create([
|
||||
'livechat_id' => $livechat->id,
|
||||
'organization_id' => $livechat->organization_id,
|
||||
]);
|
||||
|
||||
if ($request->prescriptions) {
|
||||
foreach ($request->prescriptions as $prescription) {
|
||||
$prescriptionItem = PrescriptionItem::create([
|
||||
'prescription_id' => $prescriptions->id,
|
||||
'drug_id' => $prescription['medicine'],
|
||||
'signa' => $prescription['dosis'],
|
||||
'direction' => $prescription['direction'],
|
||||
'note' => $prescription['note'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
return ApiResponse::apiResponse("Success",['message' => 'Livechat updated successfully'], trans('Message.success'), 200);
|
||||
} else {
|
||||
return response()->json(['message' => 'Livechat not found'], 404);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,175 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Controllers\Api\Doctor;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use Crypt;
|
||||
use Error;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Modules\Internal\Emails\SendVerifyEmail;
|
||||
use Modules\Internal\Events\ForgetPassword;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
use App\Helpers\Helper;
|
||||
use Illuminate\Support\Facades\View;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ProfileDoctorController extends Controller
|
||||
{
|
||||
public function getProfile()
|
||||
{
|
||||
$data = [
|
||||
'user_id' => auth()->check() ? auth()->user()->id : null,
|
||||
];
|
||||
$user_id = auth()->check() ? auth()->user()->id : null;
|
||||
//Get data Profile
|
||||
$dataProfile = DB::table('users')
|
||||
->join('persons','persons.id', '=', 'users.person_id')
|
||||
->leftJoin('person_educations','person_educations.person_id', '=', 'persons.id')
|
||||
->leftJoin('practitioners','practitioners.person_id', '=', 'persons.id')
|
||||
->leftJoin('practitioner_roles','practitioner_roles.practitioner_id', '=', 'practitioners.id')
|
||||
->where('users.id', '=', $user_id)
|
||||
->select(
|
||||
'persons.name',
|
||||
DB::raw('
|
||||
"Pediatrics" AS specialist
|
||||
'),
|
||||
DB::raw('
|
||||
"4" AS rating
|
||||
'),
|
||||
'persons.name AS full_name',
|
||||
'persons.birth_date as date_of_birth',
|
||||
'persons.gender',
|
||||
'persons.phone AS mobile_number',
|
||||
'persons.email',
|
||||
'practitioners.str_number',
|
||||
'practitioners.exp_date_str',
|
||||
'practitioner_roles.sip_number',
|
||||
'practitioner_roles.exp_date_sip'
|
||||
)
|
||||
->first();
|
||||
|
||||
//Name
|
||||
$dataName = [
|
||||
'name' => $dataProfile->name,
|
||||
'specialist' => $dataProfile->specialist,
|
||||
'rating' => $dataProfile->rating
|
||||
];
|
||||
$res_data['dataName'] = $dataName;
|
||||
|
||||
// Basic
|
||||
$dataProfileBasic = [
|
||||
'full_name' => $dataProfile->full_name,
|
||||
'date_of_birth' => $dataProfile->date_of_birth ? date('d M Y', strtotime($dataProfile->date_of_birth)) : '',
|
||||
'gender' => $dataProfile->gender
|
||||
];
|
||||
$res_data['dataProfileBasic'] = $dataProfileBasic;
|
||||
|
||||
//Contact
|
||||
$dataProfileContact = [
|
||||
'mobile_number' => $dataProfile->mobile_number,
|
||||
'email' => $dataProfile->email
|
||||
];
|
||||
$res_data['dataProfileContact'] = $dataProfileContact;
|
||||
|
||||
//Education
|
||||
$dataEdu = DB::table('users')
|
||||
->join('persons','persons.id', '=', 'users.person_id')
|
||||
->leftJoin('person_educations','person_educations.person_id', '=', 'persons.id')
|
||||
->where('users.id', '=', $user_id)
|
||||
->select(
|
||||
'person_educations.level_id',
|
||||
'person_educations.name',
|
||||
'person_educations.start_date',
|
||||
'person_educations.end_date',
|
||||
)
|
||||
->get();
|
||||
$dataEducations = [];
|
||||
foreach($dataEdu as $val)
|
||||
{
|
||||
$dataEducations[] = [
|
||||
'level_id' => $val->level_id,
|
||||
'name' => $val->name,
|
||||
'start_date' => date('d/m/Y', strtotime($val->start_date)),
|
||||
'end_date' => date('d/m/Y', strtotime($val->end_date)),
|
||||
];
|
||||
}
|
||||
$res_data['dataEducations'] = $dataEducations;
|
||||
|
||||
//Work Experience
|
||||
$dataWork = DB::table('users')
|
||||
->join('persons','persons.id', '=', 'users.person_id')
|
||||
->leftJoin('practitioners','practitioners.person_id', '=', 'persons.id')
|
||||
->leftJoin('practitioner_roles','practitioner_roles.practitioner_id', '=', 'practitioners.id')
|
||||
->leftJoin('organizations','organizations.id', '=', 'practitioner_roles.organization_id')
|
||||
->where('users.id', '=', $user_id)
|
||||
->select(
|
||||
'organizations.name',
|
||||
'practitioner_roles.period_start',
|
||||
'practitioner_roles.period_end',
|
||||
)
|
||||
->get();
|
||||
$dataWorkExperience = [];
|
||||
foreach ($dataWork as $val)
|
||||
{
|
||||
$dataWorkExperience[] = [
|
||||
'name' => $val->name ? $val->name : '',
|
||||
'period' => $this->fWorkExperience($val->period_start, $val->period_end)
|
||||
];
|
||||
}
|
||||
$res_data['dataWorkExperience'] = $dataWorkExperience;
|
||||
|
||||
//STR
|
||||
$dataStr = [
|
||||
'str_number' => $dataProfile->str_number,
|
||||
'exp_date_str' => $dataProfile->exp_date_str ? date('d M Y', strtotime($dataProfile->exp_date_str)) : ''
|
||||
];
|
||||
$res_data['dataStr'] = $dataStr;
|
||||
|
||||
//SIP
|
||||
$dataSip = [
|
||||
'sip_number' => $dataProfile->sip_number,
|
||||
'exp_date_sip' => $dataProfile->exp_date_sip ? date('d M Y', strtotime($dataProfile->exp_date_sip)) : ''
|
||||
];
|
||||
$res_data['dataSip'] = $dataSip;
|
||||
|
||||
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
|
||||
|
||||
}
|
||||
public function fWorkExperience($start, $end)
|
||||
{
|
||||
$startDateString = $start; // Tanggal dan waktu awal
|
||||
$endDateString = $end ; // Tanggal dan waktu akhir
|
||||
|
||||
// Mengubah string tanggal ke timestamp UNIX
|
||||
$startTime = strtotime($startDateString);
|
||||
$endTime = strtotime($endDateString);
|
||||
|
||||
// Menghitung selisih waktu dalam detik
|
||||
$timeDifference = $endTime - $startTime;
|
||||
|
||||
// Menghitung jumlah tahun, bulan, dan hari dari selisih waktu
|
||||
$years = floor($timeDifference / (365 * 24 * 60 * 60));
|
||||
$months = floor(($timeDifference - ($years * 365 * 24 * 60 * 60)) / (30 * 24 * 60 * 60));
|
||||
$days = floor(($timeDifference - ($years * 365 * 24 * 60 * 60) - ($months * 30 * 24 * 60 * 60)) / (24 * 60 * 60));
|
||||
|
||||
// Formatkan hasilnya
|
||||
$experience = '';
|
||||
if ($years > 0) {
|
||||
$experience .= $years . ' years ';
|
||||
}
|
||||
if ($months > 0) {
|
||||
$experience .= $months . ' months ';
|
||||
}
|
||||
if ($days > 0) {
|
||||
$experience .= $days . ' days';
|
||||
}
|
||||
|
||||
return $experience;
|
||||
|
||||
}
|
||||
}
|
||||
360
Modules/Linksehat/Http/Controllers/Api/DuitkuController.php
Normal file
360
Modules/Linksehat/Http/Controllers/Api/DuitkuController.php
Normal file
@@ -0,0 +1,360 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Organization;
|
||||
use App\Models\Speciality;
|
||||
use App\Models\Livechat;
|
||||
use App\Models\Channel;
|
||||
use App\Models\UserChannel;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Exception;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\Redirect;
|
||||
|
||||
class DuitkuController extends Controller
|
||||
{
|
||||
public function configuration()
|
||||
{
|
||||
$duitkuConfig = new \Duitku\Config(env('API_KEY_DUITKU'), env('CODE_MERCHANT_DUITKU'));
|
||||
// false for production mode
|
||||
// true for sandbox mode
|
||||
$duitkuConfig->setSandboxMode(true);
|
||||
// set sanitizer (default : true)
|
||||
$duitkuConfig->setSanitizedMode(false);
|
||||
// set log parameter (default : true)
|
||||
$duitkuConfig->setDuitkuLogs(false);
|
||||
return $duitkuConfig;
|
||||
}
|
||||
|
||||
public function createInvoice(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'paymentMethod' => $request->paymentMethod,
|
||||
'paymentAmount' => $request->paymentAmount,
|
||||
'email' => $request->email,
|
||||
'phoneNumber' => $request->phoneNumber,
|
||||
'productDetails' => $request->productDetails,
|
||||
'merchantOrderId' => $request->merchantOrderId,
|
||||
'additionalParam' => $request->additionalParam,
|
||||
'merchantUserInfo' => $request->merchantUserInfo,
|
||||
'customerVaName' => $request->customerVaName,
|
||||
// 'callbackUrl' => $request->callbackUrl,
|
||||
// 'returnUrl' => $request->returnUrl,
|
||||
// 'expiryPeriod' => $request->expiryPeriod,
|
||||
'firstName' => $request->firstName,
|
||||
'lastName' => $request->lastName,
|
||||
'alamat' => $request->alamat,
|
||||
'city' => $request->city,
|
||||
'postalCode' => $request->postalCode,
|
||||
// 'countryCode' => $request->countryCode
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
'paymentMethod' => 'nullable',
|
||||
'paymentAmount' => 'required',
|
||||
'email' => 'required|email',
|
||||
'phoneNumber' => 'nullable',
|
||||
'productDetails' => 'required',
|
||||
'merchantOrderId' => 'required',
|
||||
'additionalParam' => 'nullable',
|
||||
'merchantUserInfo' => 'nullable',
|
||||
'customerVaName' => 'required',
|
||||
// 'callbackUrl' => 'required',
|
||||
// 'returnUrl' => 'nullable',
|
||||
// 'expiryPeriod' => 'required',
|
||||
'firstName' => 'required',
|
||||
'lastName' => 'required',
|
||||
'alamat' => 'required',
|
||||
'city' => 'required',
|
||||
'postalCode' => 'required',
|
||||
// 'countryCode' => 'required'
|
||||
|
||||
], [
|
||||
'paymentAmount.required' => 'Jumlah pembayaran harus diisi',
|
||||
'email.required' => 'Email harus diisi',
|
||||
'email.email' => 'Format email salah',
|
||||
'productDetails.required' => 'Judul pembayaran harus diisi',
|
||||
'merchantOrderId.required' => 'Order ID harus diisi',
|
||||
'customerVaName.required' => 'Nama panggilan pelanggan harus diisi',
|
||||
'firstName.required' => 'Nama depan pelanggan harus diisi',
|
||||
'lastName.required' => 'Nama belakang pelanggan harus diisi',
|
||||
'alamat.required' => 'Alamat pelanggan harus diisi',
|
||||
'city.required' => 'Kota pelanggan harus diisi',
|
||||
'postalCode.required' => 'Kode pos pelanggan harus diisi',
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
return Helper::responseJson(
|
||||
data: $data,
|
||||
status: 'Bad Request',
|
||||
statusCode: 400,
|
||||
message: $validator->errors()
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
#CONTOH DARI DUITKU
|
||||
// $paymentMethod = ""; // PaymentMethod list => https://docs.duitku.com/pop/id/#payment-method
|
||||
// $paymentAmount = 10000; // Amount
|
||||
// $email = "customer@gmail.com"; // your customer email
|
||||
// $phoneNumber = "081234567890"; // your customer phone number (optional)
|
||||
// $productDetails = "Test Payment";
|
||||
// $merchantOrderId = "2"; // from merchant, unique
|
||||
// $additionalParam = ''; // optional
|
||||
// $merchantUserInfo = ''; // optional
|
||||
// $customerVaName = 'John Doe'; // display name on bank confirmation display
|
||||
// $callbackUrl = 'http://YOUR_SERVER/callback'; // url for callback
|
||||
// $returnUrl = 'http://YOUR_SERVER/return'; // url for redirect
|
||||
// $expiryPeriod = 60; // set the expired time in minutes
|
||||
|
||||
// // Customer Detail
|
||||
// $firstName = "John";
|
||||
// $lastName = "Doe";
|
||||
|
||||
// // Address
|
||||
// $alamat = "Jl. Kembangan Raya";
|
||||
// $city = "Jakarta";
|
||||
// $postalCode = "11530";
|
||||
// $countryCode = "ID";
|
||||
|
||||
$paymentMethod = $request->paymentMethod; // PaymentMethod list => https://docs.duitku.com/pop/id/#payment-method
|
||||
$paymentAmount = $request->paymentAmount; // Amount
|
||||
$email = $request->email; // your customer email
|
||||
$phoneNumber = $request->phoneNumber; // your customer phone number (optional)
|
||||
$productDetails = $request->productDetails;
|
||||
$merchantOrderId = $request->merchantOrderId; // from merchant, unique
|
||||
$additionalParam = $request->additionalParam; // optional
|
||||
$merchantUserInfo = $request->merchantUserInfo; // optional
|
||||
$customerVaName = $request->customerVaName; // display name on bank confirmation display
|
||||
$callbackUrl = env('APP_URL').'/api/linksehat/callback-duitku'; // url for callback
|
||||
$returnUrl = env('APP_URL').'/api/linksehat/redirect-duitku';; // url for redirect
|
||||
$expiryPeriod = 60; // set the expired time in minutes
|
||||
|
||||
// Customer Detail
|
||||
$firstName = $request->firstName;
|
||||
$lastName = $request->lastName;
|
||||
|
||||
// Address
|
||||
$alamat = $request->alamat;
|
||||
$city = $request->city;
|
||||
$postalCode = $request->postalCode;
|
||||
$countryCode = "ID";
|
||||
|
||||
$address = array(
|
||||
'firstName' => $firstName,
|
||||
'lastName' => $lastName,
|
||||
'address' => $alamat,
|
||||
'city' => $city,
|
||||
'postalCode' => $postalCode,
|
||||
'phone' => $phoneNumber,
|
||||
'countryCode' => $countryCode
|
||||
);
|
||||
|
||||
$customerDetail = array(
|
||||
'firstName' => $firstName,
|
||||
'lastName' => $lastName,
|
||||
'email' => $email,
|
||||
'phoneNumber' => $phoneNumber,
|
||||
'billingAddress' => $address,
|
||||
'shippingAddress' => $address
|
||||
);
|
||||
|
||||
// Item Details
|
||||
$item1 = array(
|
||||
'name' => $productDetails,
|
||||
'price' => $paymentAmount,
|
||||
'quantity' => 1
|
||||
);
|
||||
|
||||
$itemDetails = array(
|
||||
$item1
|
||||
);
|
||||
|
||||
$params = array(
|
||||
'paymentAmount' => $paymentAmount,
|
||||
'merchantOrderId' => $merchantOrderId,
|
||||
'productDetails' => $productDetails,
|
||||
'additionalParam' => $additionalParam,
|
||||
'merchantUserInfo' => $merchantUserInfo,
|
||||
'customerVaName' => $customerVaName,
|
||||
'email' => $email,
|
||||
'phoneNumber' => $phoneNumber,
|
||||
'itemDetails' => $itemDetails,
|
||||
'customerDetail' => $customerDetail,
|
||||
'callbackUrl' => $callbackUrl,
|
||||
'returnUrl' => $returnUrl,
|
||||
'expiryPeriod' => $expiryPeriod
|
||||
);
|
||||
$duitkuConfig = $this->configuration();
|
||||
try {
|
||||
// createInvoice Request
|
||||
$responseDuitkuPop = \Duitku\Pop::createInvoice($params, $duitkuConfig);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
echo $responseDuitkuPop;
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function paymentMethod(Request $request)
|
||||
{
|
||||
$duitkuConfig = $this->configuration();
|
||||
try {
|
||||
$paymentAmount = "10000"; //"YOUR_AMOUNT";
|
||||
$paymentMethodList = \Duitku\Pop::getPaymentMethod($paymentAmount, $duitkuConfig);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
echo $paymentMethodList;
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
public function checkStatus(Request $request)
|
||||
{
|
||||
$duitkuConfig = $this->configuration();
|
||||
$data = [
|
||||
'merchantOrderId' => $request->merchantOrderId
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
'merchantOrderId' => 'required',
|
||||
], [
|
||||
'merchantOrderId.required' => 'Order ID harus diisi',
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
return Helper::responseJson(
|
||||
data: $data,
|
||||
status: 'Bad Request',
|
||||
statusCode: 400,
|
||||
message: $validator->errors()
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
try {
|
||||
$merchantOrderId = $request->merchantOrderId;
|
||||
$transactionList = \Duitku\Pop::transactionStatus($merchantOrderId, $duitkuConfig);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
$transaction = json_decode($transactionList);
|
||||
|
||||
// var_dump($transactionList);
|
||||
|
||||
if ($transaction->statusCode == "00") {
|
||||
// Action Success
|
||||
} else if ($transaction->statusCode == "01") {
|
||||
// Action Pending
|
||||
} else {
|
||||
// Action Failed Or Expired
|
||||
}
|
||||
echo $transaction->statusCode;
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function callback(Request $request)
|
||||
{
|
||||
$duitkuConfig = $this->configuration();
|
||||
try {
|
||||
$callback = \Duitku\Pop::callback($duitkuConfig);
|
||||
|
||||
header('Content-Type: application/json');
|
||||
$notif = json_decode($callback);
|
||||
|
||||
// $notif = $request; ini untuk di local
|
||||
|
||||
DB::table('api_logs')
|
||||
->insert([
|
||||
'type' => 'in',
|
||||
'target' => env('APP_URL').'/api/linksehat/callback-duitku',
|
||||
'request' => $callback,
|
||||
'created_by' => auth()->check() ? auth()->user()->id : null,
|
||||
'created_at' => date('Y-m-d H:i:s')
|
||||
]);
|
||||
|
||||
if ($notif->resultCode == "00") {
|
||||
// Action Success
|
||||
$livechat = Livechat::where('uuid', $notif->merchantOrderId)->first();
|
||||
// Update status pembayaran
|
||||
$livechat->payment_method = $notif->paymentCode;
|
||||
$livechat->status = 5; // success payment
|
||||
$livechat->save();
|
||||
|
||||
// Update start chat
|
||||
$livechat->start_date = date('Y-m-d H:i:s');
|
||||
// Buat dan simpan data channel ke dalam tabel
|
||||
$channel = Channel::updateOrCreate([
|
||||
'name' => $livechat->patient_id .'_' . $request->doctor_id,
|
||||
],
|
||||
[
|
||||
'name' => $livechat->patient_id .'_' . $livechat->doctor_id,
|
||||
'type' => 'Private',
|
||||
'member_id' => $livechat->patient_id,
|
||||
'doctor_id' => $livechat->doctor_id,
|
||||
]);
|
||||
|
||||
// Menggunakan updateOrCreate untuk menambahkan data UserChannel untuk member_id
|
||||
$userChannelMember = UserChannel::updateOrCreate(
|
||||
[
|
||||
'user_id' => $livechat->patient_id,
|
||||
'channel_id' => $channel->id
|
||||
],
|
||||
[
|
||||
'user_id' => $livechat->patient_id,
|
||||
'channel_id' => $channel->id
|
||||
]
|
||||
);
|
||||
|
||||
// Menggunakan updateOrCreate untuk menambahkan data UserChannel untuk doctor_id
|
||||
$userChannelDoctor = UserChannel::updateOrCreate(
|
||||
[
|
||||
'user_id' => $livechat->doctor_id,
|
||||
'channel_id' => $channel->id
|
||||
],
|
||||
[
|
||||
'user_id' => $livechat->doctor_id,
|
||||
'channel_id' => $channel->id
|
||||
]
|
||||
);
|
||||
|
||||
// Berikan respons yang sesuai ke klien
|
||||
return response()->json(['message' => 'Channel created successfully', 'channel' => $channel]);
|
||||
|
||||
} else if ($notif->resultCode == "01") {
|
||||
// Action Failed
|
||||
$livechat = Livechat::where('uuid', $notif->merchantOrderId)->first();
|
||||
// Update status pembayaran
|
||||
$livechat->payment_method = $notif->paymentCode;
|
||||
$livechat->status = 7; // failed payment
|
||||
$livechat->save();
|
||||
|
||||
return response()->json(['message' => 'User Gagal melakukan pembayaran']);
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
http_response_code(400);
|
||||
echo $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
public function redirect(Request $request)
|
||||
{
|
||||
$resultCode = $request->input('resultCode');
|
||||
$merchantOrderId = $request->input('merchantOrderId');
|
||||
$reference = $request->input('reference');
|
||||
return Redirect::to('https://linksehat.com/');
|
||||
}
|
||||
}
|
||||
75
Modules/Linksehat/Http/Controllers/Api/HomeController.php
Normal file
75
Modules/Linksehat/Http/Controllers/Api/HomeController.php
Normal file
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Organization;
|
||||
use App\Models\PractitionerRole;
|
||||
use App\Models\OLDLMS\User;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Modules\Linksehat\Transformers\Article\ArticleResource;
|
||||
use Modules\Linksehat\Transformers\Home\HomeResource;
|
||||
use Modules\Linksehat\Transformers\Doctor\DoctorResource;
|
||||
use Modules\Linksehat\Transformers\Hospital\HospitalResource;
|
||||
|
||||
class HomeController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$user = User::with('detail')
|
||||
->where('nId', $request->id)
|
||||
->first();
|
||||
return Helper::responseJson([
|
||||
'home' => HomeResource::make($user, $request),
|
||||
]);
|
||||
}
|
||||
|
||||
public function listHospital(Request $request){
|
||||
// Hospital List
|
||||
$hospitalList = [];
|
||||
$hospitals = Organization::where([
|
||||
'type' => 'hospital',
|
||||
'status' => 'active',
|
||||
])
|
||||
->with('currentAddress')
|
||||
->get()->toArray();
|
||||
foreach($hospitals as $hospital){
|
||||
$lat = 0;
|
||||
$lang = 0;
|
||||
if ($hospital['current_address']['lat']){
|
||||
$lat = $hospital['current_address']['lat'];
|
||||
}
|
||||
if ($hospital['current_address']['lng']){
|
||||
$lang = $hospital['current_address']['lng'];
|
||||
}
|
||||
|
||||
$address = '';
|
||||
if ($hospital['current_address']['text']){
|
||||
$address = $hospital['current_address']['text'];
|
||||
}
|
||||
|
||||
$radius = 0;
|
||||
if ($lat && $lang && $request->longitude && $request->latitude){
|
||||
$radius = round(Helper::calculateDistance($lat, $lang, $request->latitude, $request->longitude), 2);
|
||||
}
|
||||
|
||||
$data = [
|
||||
'name' => $hospital['name'],
|
||||
'radius' => $radius,
|
||||
'image' => '',
|
||||
'address' => $address
|
||||
];
|
||||
|
||||
array_push($hospitalList, $data);
|
||||
}
|
||||
usort($hospitalList, function($a, $b) {
|
||||
return $a['radius'] <=> $b['radius'];
|
||||
});
|
||||
return Helper::responseJson([
|
||||
'hospital' => $hospitalList
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,8 @@ namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Person;
|
||||
use App\Models\RequestLogBenefit;
|
||||
use App\Models\RequestLog;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\Member;
|
||||
use App\Models\OLDLMS\User;
|
||||
@@ -135,4 +137,39 @@ class LinkingController extends Controller
|
||||
$message = $member->currentPolicy->corporate->welcome_message;
|
||||
return Helper::responseJson(data: MemberResource::make($member), message: $message);
|
||||
}
|
||||
|
||||
public function card_detail($member_id, $id){
|
||||
$member = Member::where('member_id', $member_id)->get()->toArray();
|
||||
$requestLogBenefits = RequestLogBenefit::where('request_log_id', $id)->with('benefit')->get()->toArray();
|
||||
$requestLog = RequestLog::find($id)->first();
|
||||
$benefitItem = [];
|
||||
$dataRequestLog = [
|
||||
'code' => $requestLog['code'],
|
||||
'diagnosis' => Helper::diagnosisName($requestLog['diagnosis']),
|
||||
'service_type' => Helper::serviceName($requestLog['service_code']),
|
||||
|
||||
];
|
||||
foreach($requestLogBenefits as $requestLogBenefit) {
|
||||
$data = [
|
||||
'benefit_item' => $requestLogBenefit['benefit']['description'],
|
||||
'amount_incurred' => $requestLogBenefit['amount_incurred'],
|
||||
'amount_approved' => $requestLogBenefit['amount_approved'],
|
||||
'amount_not_approved' => $requestLogBenefit['amount_not_approved'],
|
||||
'excess_paid' => $requestLogBenefit['excess_paid'],
|
||||
];
|
||||
|
||||
$benefitItem[] = $data;
|
||||
};
|
||||
$dataRequestLog['benefit_item'] = $benefitItem;
|
||||
|
||||
// dd($dataRequestLog);
|
||||
// $data = [
|
||||
// 'id' => $requestLog['id'],
|
||||
// 'code' => $requestLog['code'],
|
||||
// 'submission_date' => Carbon::parse($requestLog['submission_date'])->format('d M Y H:i:s'),
|
||||
// 'provider_name' => $requestLog['organization']['name'],
|
||||
// 'service' => Helper::serviceName($requestLog['service_code'])
|
||||
// ];
|
||||
return Helper::responseJson(data:$dataRequestLog);
|
||||
}
|
||||
}
|
||||
|
||||
308
Modules/Linksehat/Http/Controllers/Api/LivechatController.php
Normal file
308
Modules/Linksehat/Http/Controllers/Api/LivechatController.php
Normal file
@@ -0,0 +1,308 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Helpers\DuitkuHelper;
|
||||
use App\Services\Duitku;
|
||||
use App\Models\Organization;
|
||||
use App\Models\PractitionerRole;
|
||||
use App\Models\Invoice;
|
||||
use App\Models\PaymentsMethods;
|
||||
use App\Models\Livechat;
|
||||
use App\Models\OLDLMS\User;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Modules\Linksehat\Transformers\Livechat\LivechatResource;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Controllers\DuitkuController;
|
||||
|
||||
use DB;
|
||||
use Str;
|
||||
|
||||
class LivechatController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$user = User::with('detail')
|
||||
->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
|
||||
|
||||
/**
|
||||
* Status Livechat
|
||||
* 1=Request, 2=Accept, 3=Decline, 4=Waiting Payment, 5=Success Payment, 6 = End Chat
|
||||
*/
|
||||
|
||||
$timezone = date_default_timezone_get();
|
||||
$data['request_date'] = date('Y-m-d H:i:s');
|
||||
$data['timezone'] = $timezone;
|
||||
$data['uuid'] = (string) Str::orderedUuid();
|
||||
$data['status'] = 1;
|
||||
$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)
|
||||
{
|
||||
try {
|
||||
// Mengambil data Livechat dengan relasi doctor dan practitioner
|
||||
$livechat = Livechat::with(['doctor', 'practitioner'])->find($request->consultation_id);
|
||||
|
||||
if (!$livechat) {
|
||||
return response()->json(['success' => false, 'message' => 'Consultation not found'], 404);
|
||||
}
|
||||
|
||||
// Update status
|
||||
$livechat->status = 4;
|
||||
$livechat->save();
|
||||
|
||||
$practitionerRole = PractitionerRole::find($livechat->practitioner->id);
|
||||
$price = $practitionerRole->price ?? 30000; // Gunakan null coalescing operator
|
||||
$adminFee = 5000;
|
||||
$discount = 0;
|
||||
$totalPay = $price + $adminFee - $discount;
|
||||
|
||||
// Mengambil user dari database
|
||||
$user = User::with('detail')->where('nId', $livechat->patient_id)->first();
|
||||
$address = DB::connection('oldlms')->table('tm_users_address')->where('nIDUser', $user->nID)->first('sAlamat');
|
||||
if($address){
|
||||
$address = $address->sAlamat;
|
||||
}
|
||||
if (!$user) {
|
||||
return response()->json(['success' => false, 'message' => 'User not found'], 404);
|
||||
}
|
||||
|
||||
// Menyiapkan data untuk invoice
|
||||
$data = [
|
||||
'paymentMethod' => $request->payment_code,
|
||||
'paymentAmount' => $totalPay,
|
||||
'email' => $user->sEmail,
|
||||
'phoneNumber' => $user->sPhone,
|
||||
'productDetails' => 'INV-' . date('Ymd') . '-' . rand(100, 999),
|
||||
'merchantOrderId' => $livechat->uuid,
|
||||
'additionalParam' => '',
|
||||
'merchantUserInfo' => '',
|
||||
'customerVaName' => $user->sFirstName . ' ' . $user->sLastName,
|
||||
'firstName' => $user->sFirstName,
|
||||
'lastName' => $user->sLastName,
|
||||
'alamat' => $address,
|
||||
'city' => '',
|
||||
'postalCode' => ''
|
||||
];
|
||||
|
||||
// Membuat invoice menggunakan DuitkuHelper
|
||||
$duitku = DuitkuHelper::createInvoice($data);
|
||||
|
||||
|
||||
return response()->json(['success' => true, 'data' => $duitku], 200);
|
||||
} catch (Exception $e) {
|
||||
// Menangkap error dan mengembalikan respon error
|
||||
return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function consultation_check_payment($id){
|
||||
$livechat = Livechat::where('id',$id)->with(['doctor', 'practitioner'])->first();
|
||||
$duitku = DuitkuHelper::checkStatus($livechat->uuid);
|
||||
|
||||
return $duitku;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -43,7 +43,46 @@ class ProfileController extends Controller
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
$validator = Validator::make($request->all(), [
|
||||
'id_user' => 'required',
|
||||
'first_name' => 'required',
|
||||
'last_name' => 'required',
|
||||
'date_of_birth' => 'required',
|
||||
// 'email' => 'required',
|
||||
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return response()->json(['errors' => $validator->errors()], 422);
|
||||
} else {
|
||||
$value = [
|
||||
'nIDuser' => $request->id_user,
|
||||
'sIPAddress' => $request->ip(),
|
||||
'sPassword' => null,
|
||||
'sFirstName' => $request->first_name,
|
||||
'sLastName' => $request->last_name,
|
||||
];
|
||||
|
||||
$user = User::create($value);
|
||||
$dataDetail = [
|
||||
'nIDUser' => $user->nID,
|
||||
'dTanggalLahir' => $request->date_of_birth,
|
||||
'nIDJenisKelamin' => $request->gender
|
||||
];
|
||||
|
||||
$userDetail = UserDetail::create(
|
||||
$dataDetail
|
||||
);
|
||||
|
||||
$data['data'] = [
|
||||
'status' => 200,
|
||||
'message' => 'data berhasil di tambahkan',
|
||||
'error' => 'false'
|
||||
|
||||
];
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
65
Modules/Linksehat/Http/Middleware/Doctor/Authentication.php
Normal file
65
Modules/Linksehat/Http/Middleware/Doctor/Authentication.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Middleware\Doctor;
|
||||
use Modules\Linksehat\Helpers\Doctor\ApiResponse;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Illuminate\Support\Facades\App;
|
||||
|
||||
class Authentication
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$acceptHeader = $request->header('Accept');
|
||||
$contentType = $request->header('Content-Type');
|
||||
$locale = $request->header('Accept-Language');
|
||||
|
||||
// Add language
|
||||
if(!$locale)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Accept-Language']), 401);
|
||||
}
|
||||
if($locale !== 'en-US' && $locale !== 'id-ID')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Accept-Language']), 400);
|
||||
}
|
||||
if ($locale === 'en-US')
|
||||
{
|
||||
App::setLocale('en');
|
||||
} elseif ($locale === 'id-ID')
|
||||
{
|
||||
App::setLocale('id');
|
||||
} else
|
||||
{
|
||||
App::setLocale('en');
|
||||
}
|
||||
|
||||
// Validate type accept & content type
|
||||
if (!$acceptHeader)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Accept']), 401);
|
||||
}
|
||||
if (!$contentType)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Content-Type']), 401);
|
||||
}
|
||||
if ($acceptHeader !== 'application/json')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Accept']), 400);
|
||||
}
|
||||
if($contentType !== 'application/json')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Content-Type']), 400);
|
||||
}
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
71
Modules/Linksehat/Http/Middleware/Doctor/Authorization.php
Normal file
71
Modules/Linksehat/Http/Middleware/Doctor/Authorization.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Middleware\Doctor;
|
||||
use Modules\Linksehat\Helpers\Doctor\ApiResponse;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Illuminate\Support\Facades\App;
|
||||
|
||||
class Authorization
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$acceptHeader = $request->header('Accept');
|
||||
$contentType = $request->header('Content-Type');
|
||||
$locale = $request->header('Accept-Language');
|
||||
$authorization = $request->header('Authorization');
|
||||
|
||||
// Add language
|
||||
if(!$locale)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Accept-Language']), 401);
|
||||
}
|
||||
if($locale !== 'en-US' && $locale !== 'id-ID')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Accept-Language']), 400);
|
||||
}
|
||||
if ($locale === 'en-US')
|
||||
{
|
||||
App::setLocale('en');
|
||||
} elseif ($locale === 'id-ID')
|
||||
{
|
||||
App::setLocale('id');
|
||||
} else
|
||||
{
|
||||
App::setLocale('en');
|
||||
}
|
||||
|
||||
// Validate authorization
|
||||
if (empty($authorization) || strpos($authorization, 'Bearer ') !== 0) {
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Authorization']), 401);
|
||||
}
|
||||
|
||||
// Validate type accept & content type
|
||||
if (!$acceptHeader)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Accept']), 401);
|
||||
}
|
||||
if (!$contentType && $request->isMethod('post'))
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Content-Type']), 401);
|
||||
}
|
||||
if ($acceptHeader !== 'application/json')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Accept']), 400);
|
||||
}
|
||||
if($contentType !== 'application/json' && $request->isMethod('post'))
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Content-Type']), 400);
|
||||
}
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,8 @@ use Modules\Linksehat\Http\Controllers\Api\AuthController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\DashboardController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\AutocompleteController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\DoctorController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\DuitkuController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\ChatController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\HospitalController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\NotificationTokenController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\PersonController;
|
||||
@@ -12,7 +14,13 @@ use Modules\Linksehat\Http\Controllers\Api\ProfileController;
|
||||
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;
|
||||
use Modules\Linksehat\Http\Middleware\Doctor\Authentication;
|
||||
use Modules\Linksehat\Http\Middleware\Doctor\Authorization;
|
||||
use Modules\Linksehat\Http\Controllers\Api\Doctor\AuthDoctorController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\Doctor\ProfileDoctorController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\Doctor\ChatDoctorController;
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| API Routes
|
||||
@@ -24,8 +32,9 @@ use Modules\Linksehat\Http\Controllers\Api\LinkingController;
|
||||
|
|
||||
*/
|
||||
|
||||
Broadcast::routes(['middleware' => ['auth:sanctum']]);
|
||||
Route::prefix('linksehat')->group(function () {
|
||||
|
||||
|
||||
Route::get('dashboard/{query}/{limit?}', [DashboardController::class, 'index']);
|
||||
|
||||
Route::controller(SearchController::class)->group(function () {
|
||||
@@ -63,11 +72,11 @@ Route::prefix('linksehat')->group(function () {
|
||||
Route::get('doctors/{id}', 'show')->name('doctors.show');
|
||||
});
|
||||
|
||||
|
||||
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');
|
||||
Route::post('profile', [ProfileController::class, 'update'])->name('profile.update');
|
||||
Route::post('profile-add', [ProfileController::class, 'store'])->name('profile.store');
|
||||
Route::post('notification-tokens/delete/{id}', [NotificationTokenController::class, 'destroy'])->name('profile.delete.token');
|
||||
Route::post('notification-tokens', [NotificationTokenController::class, 'store'])->name('profile.store.token');
|
||||
Route::apiResource('appointment', AppointmentController::class);
|
||||
@@ -77,10 +86,84 @@ Route::prefix('linksehat')->group(function () {
|
||||
Route::get('autocomplete/blood_type', [AutocompleteController::class, 'bloodType']);
|
||||
Route::get('autocomplete/relationship', [AutocompleteController::class, 'relationship']);
|
||||
Route::get('autocomplete/corporate', [AutocompleteController::class, 'corporate']);
|
||||
Route::get('autocomplete/drugs', [AutocompleteController::class, 'drugList']);
|
||||
Route::get('autocomplete/units', [AutocompleteController::class, 'unitList']);
|
||||
Route::get('autocomplete/diagnosis', [AutocompleteController::class, 'diagnosis']);
|
||||
|
||||
Route::post('manual-linking', [LinkingController::class, 'linkingValidate']);
|
||||
|
||||
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::get('livechat/consultation-request/consultation-payment-check/{id}', 'consultation_check_payment');
|
||||
|
||||
Route::post('livechat/consultation-payment', 'consultation_payment');
|
||||
});
|
||||
|
||||
Route::controller(ChatController::class)->group(function () {
|
||||
Route::post('livechat/send-message', 'sendMessage');
|
||||
Route::get('livechat/get-message', 'getMessage');
|
||||
Route::post('livechat/channel','createChannel');
|
||||
Route::get('livechat/channel','listChannel');
|
||||
Route::get('livechat/{id}/health-sertificate','downloadHealtcare');
|
||||
});
|
||||
|
||||
|
||||
Route::post('create-invoice-duitku', [DuitkuController::class, 'createInvoice']);
|
||||
Route::post('check-status-duitku', [DuitkuController::class, 'checkStatus']);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
Route::post('payment-method-duitku', [DuitkuController::class, 'paymentMethod']);
|
||||
Route::post('callback-duitku', [DuitkuController::class, 'callback']);
|
||||
Route::get('redirect-duitku', [DuitkuController::class, 'redirect']);
|
||||
|
||||
//DOCTOR API
|
||||
Route::prefix('doctor')->group(function() {
|
||||
//Version 1.0
|
||||
Route::prefix('v1')->group(function() {
|
||||
Route::middleware(Authentication::class)->group(function () {
|
||||
Route::controller(AuthDoctorController::class)->group(function () {
|
||||
Route::post('login', 'login');
|
||||
});
|
||||
});
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
Route::middleware(Authorization::class)->group(function () {
|
||||
Route::controller(AuthDoctorController::class)->group(function () {
|
||||
Route::post('logout', 'logout');
|
||||
Route::post('forgot-password', 'forgotPassword');
|
||||
});
|
||||
Route::controller(ProfileDoctorController::class)->group(function () {
|
||||
Route::get('get-profile', 'getProfile');
|
||||
});
|
||||
Route::controller(ChatDoctorController::class)->group(function () {
|
||||
Route::get('chat', 'getChat');
|
||||
Route::post('decline', 'declineChat');
|
||||
Route::post('approve', 'approveChat');
|
||||
Route::post('end', 'endChat');
|
||||
Route::post('summary', 'summaryChat');
|
||||
Route::get('chat/{id}', 'getChatDetail');
|
||||
});
|
||||
});
|
||||
});
|
||||
Route::controller(AuthDoctorController::class)->group(function () {
|
||||
Route::post('forgot-password', 'forgotPassword');
|
||||
Route::post('verif-code', 'verifCode');
|
||||
Route::post('resend-code', 'forgotPassword');
|
||||
Route::post('reset-password', 'resetPassword');
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
;});
|
||||
|
||||
280
Modules/Linksehat/Transformers/Home/HomeResource.php
Normal file
280
Modules/Linksehat/Transformers/Home/HomeResource.php
Normal file
@@ -0,0 +1,280 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Transformers\Home;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserDetail;
|
||||
use App\Models\OLDLMS\UserInsurance;
|
||||
use App\Models\Organization;
|
||||
use App\Models\Practitioner;
|
||||
use App\Models\PractitionerRole;
|
||||
use App\Models\Member;
|
||||
use App\Models\Person;
|
||||
use App\Models\CorporateEmployee;
|
||||
use App\Models\Corporate;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Carbon\Carbon;
|
||||
use App\Helpers\Helper;
|
||||
use DB;
|
||||
|
||||
|
||||
class HomeResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
|
||||
protected $request;
|
||||
|
||||
protected $connection = 'oldlms';
|
||||
|
||||
public function __construct($resource, $request)
|
||||
{
|
||||
$this->request = $request;
|
||||
parent::__construct($resource);
|
||||
}
|
||||
|
||||
public function toArray($request)
|
||||
{
|
||||
$memberProfile = User::with('detail')->where('nIDUser', $this->nID)->get()->toArray();
|
||||
$dataMemberProfile = [];
|
||||
|
||||
$userInsurance = UserInsurance::where('nIDUser', $this->nID)->get()->first();
|
||||
$memberId = null;
|
||||
$linking = false;
|
||||
|
||||
$jam = date('G'); // Ambil jam dalam format 24 jam
|
||||
|
||||
if ($jam < 12) {
|
||||
$wellcome = "Good Morning!";
|
||||
} elseif ($jam < 18) {
|
||||
$wellcome = "Good Afternoon!";
|
||||
} else {
|
||||
$wellcome = "Good Evening!";
|
||||
}
|
||||
|
||||
if($userInsurance){
|
||||
$memberId = $userInsurance->sNoPolis;
|
||||
$linking = true;
|
||||
} else {
|
||||
$member = Member::where('email', $this->sEmail)->get()->first();
|
||||
$person = Person::where('phone', $this->sPhone)->get()->first();
|
||||
if ($member || $person){ // Autolinking
|
||||
$corporateEmployee = CorporateEmployee::where('member_id', $member->id)->get()->first(); // cek corporate id empolyee/member
|
||||
if ($corporateEmployee){
|
||||
$corporate = Corporate::findOrFail($corporateEmployee->corporate_id)->automatic_linking; // cek autocomplete
|
||||
if ($corporate){
|
||||
if($member) {
|
||||
// Insert into database linksehat
|
||||
$insurance = UserInsurance::updateOrCreate(
|
||||
[
|
||||
'nIDUser' => $this->nID,
|
||||
],
|
||||
[
|
||||
'nIDUser' => $this->nID,
|
||||
'nIDInsurance' => $_ENV['LINKSEHAT_ASO_INSURANCE_ID'],
|
||||
'sNoPolis' => $member->member_id,
|
||||
'sNamaPeserta' => $member->fullName,
|
||||
'sKartuPeserta' => '',
|
||||
'sLayanan' => 'RJ,TC',
|
||||
'dStartDate' => $member->members_effective_date,
|
||||
'dExpireDate' => $member->members_expire_date,
|
||||
'dTanggalLahir' => $member->birth_date,
|
||||
'nNoKTP' => $member->nric != '' ? $member->nric : 0 ,
|
||||
'sIsConfrimed' => 1,
|
||||
'sStatus' => 1,
|
||||
]);
|
||||
$message = $member->currentPolicy->corporate->welcome_message;
|
||||
$linking = true;
|
||||
|
||||
$memberId = $member->member_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (count($memberProfile) > 0){
|
||||
|
||||
$urlAvatarDefault = $this->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
|
||||
$avatarMember = $this->detail->sImage ?? $urlAvatarDefault;
|
||||
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $this->nIDHubunganKeluarga)->first('sHubunganKeluarga');
|
||||
|
||||
$dataUser = [
|
||||
'id' => $this->nID,
|
||||
'name' => $this->sFirstName . ' ' . $this->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 = $this->nIDUser ? $this->nIDUser : $this->nID;
|
||||
if ($nID){
|
||||
$memberProfile = User::with('detail')->where('nIDUser', $nID)->get()->toArray();
|
||||
|
||||
$dataMember = User::with('detail')->where('nID', $nID)->get()->first();
|
||||
|
||||
if ($this->detail){
|
||||
$urlAvatarDefault = $this->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 = $this->detail->sImage ?? $urlAvatarDefault;
|
||||
|
||||
$avatarMember = $dataMember->detail->sImage ?? $urlAvatarDefault;
|
||||
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $this->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);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Principal
|
||||
if ($this->detail){
|
||||
$urlAvatarDefault = $this->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 = $this->detail->sImage ?? $urlAvatarDefault;
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
// Hospital List
|
||||
$hospitalList = [];
|
||||
|
||||
$hospitals = Organization::where([
|
||||
'type' => 'hospital',
|
||||
'status' => 'active',
|
||||
])
|
||||
->with('currentAddress')
|
||||
->get()->toArray();
|
||||
foreach($hospitals as $hospital){
|
||||
$lat = 0;
|
||||
$lang = 0;
|
||||
if ($hospital['current_address']['lat']){
|
||||
$lat = $hospital['current_address']['lat'];
|
||||
}
|
||||
if ($hospital['current_address']['lng']){
|
||||
$lang = $hospital['current_address']['lng'];
|
||||
}
|
||||
|
||||
$address = '';
|
||||
if ($hospital['current_address']['text']){
|
||||
$address = $hospital['current_address']['text'];
|
||||
}
|
||||
|
||||
$radius = 0;
|
||||
if ($lat && $lang && $request->longitude && $request->latitude){
|
||||
$radius = round(Helper::calculateDistance($lat, $lang, $request->latitude, $request->longitude), 2);
|
||||
}
|
||||
|
||||
$data = [
|
||||
'name' => $hospital['name'],
|
||||
'radius' => $radius,
|
||||
'image' => '',
|
||||
'address' => $address
|
||||
];
|
||||
|
||||
array_push($hospitalList, $data);
|
||||
}
|
||||
|
||||
|
||||
usort($hospitalList, function($a, $b) {
|
||||
return $a['radius'] <=> $b['radius'];
|
||||
});
|
||||
|
||||
$hospitalList = array_slice($hospitalList, 0, 5);
|
||||
|
||||
return [
|
||||
'id' => $this->nID,
|
||||
'message' => $wellcome,
|
||||
'full_name' => $this->sFirstName . ' '. $this->sLastName,
|
||||
'avatar' => $avatar,
|
||||
'member_id' => $memberId,
|
||||
'linking' => $linking,
|
||||
'doctors_livechat' => $doctorsLivechat,
|
||||
'hospital' => $hospitalList
|
||||
];
|
||||
}
|
||||
}
|
||||
85
Modules/Linksehat/Transformers/Livechat/LivechatResource.php
Normal file
85
Modules/Linksehat/Transformers/Livechat/LivechatResource.php
Normal file
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Transformers\Livechat;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\Practitioner;
|
||||
use App\Models\PractitionerRole;
|
||||
use App\Models\Speciality;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Carbon\Carbon;
|
||||
use App\Helpers\Helper;
|
||||
use DB;
|
||||
|
||||
|
||||
class LivechatResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
|
||||
protected $request;
|
||||
|
||||
protected $connection = 'oldlms';
|
||||
|
||||
public function __construct($resource, $request)
|
||||
{
|
||||
$this->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
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user