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 = ''; $weight = '-'; $height = '-'; $address = ''; $maritalStatus = ''; } else { // Get nama pasien $user = User::where('nID', $channel->member_id)->with('detail')->first(); $name = $user->sFirstName . ' ' . $user->sLastName; $gender = null; 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'; $avatar = $user->detail->sImage ?? $urlAvatarDefault; $gender = DB::connection('oldlms')->table('tm_jenis_kelamin')->where('nID', $user->detail->nIDJenisKelamin)->first('sJenisKelamin'); $age = Helper::calculateAge($user->detail->dTanggalLahir); if ($gender){ $gender = $gender->sJenisKelamin; } $work = DB::connection('oldlms')->table('tm_pekerjaan')->where('nID', $user->detail->nIDPekerjaan)->first('sPekerjaan'); if($work){ $work = $work->sPekerjaan; } $maritalStatus = DB::connection('oldlms')->table('tm_status_pernikahan')->where('nID', $user->detail->sMartialStatus)->first('sStatusPernikahan'); if($maritalStatus){ $maritalStatus = $maritalStatus->sStatusPernikahan; } $weight = $user->detail->sWeight; $height = $user->detail->sWeight; } else { $avatar = 'https://linksehat.dev/assets/img/users/male-avatar.png'; $age = '-'; $work = '-'; $maritalStatus = '-'; $weight = '-'; $height = '-'; } $question = $livechat->descriptions; $consultationStart = $livechat->start_date; $consultationEnd = $livechat->end_date; $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, 'marital_status' => $maritalStatus, 'age' => $age, 'weight' => $weight, 'height' => $height, 'question' => $question, 'diseases' => [], 'medications' => [], 'allergy' => [], 'family_history' => [], 'start' => $consultationStart, 'end' => $consultationEnd, 'work' => $work, 'address' => $address, 'consultation_id' => $livechat->id, 'consultation_status' => Helper::getStatusLivechat($livechat->status), 'health_sertificate' => $healthSertificate, '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, ] ]); } 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); } }