$request->member_id, 'service_code' => $request->service_code, 'organization_id' => $request->organization_id, 'organization_name' => !empty($request->organization_name) ? $request->organization_name : null, 'address_provider' => !empty($request->address_provider) ? $request->address_provider : null, 'submission_date' => $request->submission_date, 'approved_at' => $request->approved_at, 'approved_final_log_at' => $request->approved_final_log_at, 'discharge_date' => $request->discharge_date, 'corporate_id_partner' => !empty($request->corporate_id_partner) ? $request->corporate_id_partner : [], 'specialities_id' => $request->specialities_id, 'dppj' => $request->dppj ]; $validator = Validator::make($request->all(), [ 'member_id' => 'required', 'service_code' => 'required', 'submission_date' => 'required', 'approved_at' => 'required', 'approved_final_log_at' => 'required', 'discharge_date' => 'required', 'specialities_id' => 'required', 'dppj' => 'required', ], [ 'member_id.required' => trans('Validation.required',['attribute' => 'Member ID']), 'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']), 'submission_date.required' => trans('Validation.required',['attribute' => 'Submission Date']), 'approved_at.required' => trans('Validation.required',['attribute' => 'Submission Date']), 'approved_final_log_at.required' => trans('Validation.required',['attribute' => 'Submission Date']), 'discharge_date.required' => trans('Validation.required',['attribute' => 'Discharge Date']), 'specialities_id.required' => trans('Validation.required',['attribute' => 'Specialities']), 'dppj.required' => trans('Validation.required',['attribute' => 'DPJP']), ]); if(!empty($request->organization_id)) { $validator = Validator::make($request->all(), [ 'organization_id' => 'required', 'member_id' => 'required', 'service_code' => 'required', 'submission_date' => 'required', 'approved_at' => 'required', 'approved_final_log_at' => 'required', 'discharge_date' => 'required', 'specialities_id' => 'required', 'dppj' => 'required', ], [ 'organization_id.required' => trans('Validation.required',['attribute' => 'Provider ID']), 'member_id.required' => trans('Validation.required',['attribute' => 'Member ID']), 'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']), 'submission_date.required' => trans('Validation.required',['attribute' => 'Submission Date']), 'approved_at.required' => trans('Validation.required',['attribute' => 'Approved At Date']), 'approved_final_log_at.required' => trans('Validation.required',['attribute' => 'Approved Final Log At Date']), 'discharge_date.required' => trans('Validation.required',['attribute' => 'Discharge Date']), 'specialities_id.required' => trans('Validation.required',['attribute' => 'Specialities']), 'dppj.required' => trans('Validation.required',['attribute' => 'DPJP']), ]); } if ($validator->fails()) { return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400); } else { //insert data to organization try { if (!empty($request->organization_name) && !empty($request->address_provider)) { // Memulai transaksi DB::beginTransaction(); // Membuat singkatan dari nama rumah sakit $singkatan = ""; $words = explode(' ', $request->organization_name); foreach ($words as $word) { $singkatan .= strtoupper(substr($word, 0, 2)); } // Membuat kode organisasi $kodeOrganisasi = "ORG000" . $singkatan; // Insert data ke tabel organizations $organization_id = DB::table('organizations') ->insertGetId([ 'name' => $request->organization_name, 'code' => $kodeOrganisasi, 'type' => 'hospital', 'corporate_id_partner' => $request->corporate_id_partner ? implode(',', $request->corporate_id_partner) : null, 'created_at' => now(), // 'created_by' => auth()->user()->id ]); // Insert data ke tabel addresses $address_id = DB::table('addresses') ->insertGetId([ 'text'=> $request->address_provider, 'addressable_type' => 'App\Models\Organization', 'addressable_id' => $organization_id, 'type' => 'hospital', 'created_at' => now(), // 'created_by' => auth()->user()->id ]); // Update main_address_id di tabel organizations DB::table('organizations') ->where('organizations.id', '=', $organization_id) ->update(['main_address_id' => $address_id]); // Commit transaksi DB::commit(); $request->merge(['organization_id' => $organization_id]); } try { DB::beginTransaction(); $requestLogControllerInstance = new PrimeCenterRequestLog(); $code = $requestLogControllerInstance->getNextCode($request); $member = Member::find($request->member_id); $requestLogData = [ 'code' => $code, 'member_id' => $request->member_id, 'submission_date' => $request->submission_date ?? now(), 'discharge_date' => $request->discharge_date ?? now(), 'status' => 'approved', 'status_final_log' => 'approved', 'final_log' => 1, 'approved_at' => $request->approved_at ?? now(), 'approved_final_log_at' => $request->approved_final_log_at ?? now(), 'payment_type' => 'cashless', 'service_code' => $request->service_code, 'policy_id' => $member->currentPolicy->id ?? null, 'organization_id' => $request->organization_id ?? 0, 'source' => $request->source, 'specialities_id' => $request->specialities_id, 'dppj' => $request->dppj, 'log_type' => $request->type === 'final' ? 'consultation' : ($request->type ?? 'consultation') ]; // SIMPAN LOG $requestLog = RequestLog::create($requestLogData); /* =============================== INSERT BENEFIT DI SINI =============================== */ if (!empty($request->benefits)) { $benefitData = []; foreach ($request->benefits as $benefit) { $benefitData[] = [ 'request_log_id' => $requestLog->id, 'benefit_id' => $benefit['benefit_id'], 'amount_incurred' => $benefit['amount_incurred'] ?? 0, 'amount_approved' => $benefit['amount_approved'] ?? 0, 'amount_not_approved' => $benefit['amount_not_approved'] ?? 0, 'excess_paid' => $benefit['excess_paid'] ?? 0, 'keterangan' => $benefit['keterangan'] ?? '', ]; } $insertBenefit = $this->insertBenefit($benefitData); if (!$insertBenefit) { throw new \Exception('Insert Benefit Gagal'); } } DB::commit(); return ApiResponse::apiResponse( 'Success Create Log', $requestLog, 'Berhasil create LOG dan Benefit', 200 ); } catch (\Exception $e) { DB::rollBack(); return ApiResponse::apiResponse( 'Server Error Create Log', $data, $e->getMessage(), 500 ); } } catch (\Exception $e) { // Rollback transaksi jika terjadi kesalahan DB::rollBack(); // Handle error, bisa di-log atau dikembalikan sebagai response return ApiResponse::apiResponse('Server Error 3', $data, $e->getMessage(), 500); } } } public function insertBenefit($benefitData) { if (count($benefitData) > 0) { foreach ($benefitData as $value) { $data = [ 'request_log_id' => $value['request_log_id'], 'benefit_id' => $value['benefit_id'], 'amount_incurred' => $value['amount_incurred'], 'amount_approved' => $value['amount_approved'], 'amount_not_approved' => $value['amount_not_approved'], 'excess_paid' => $value['excess_paid'], 'keterangan' => $value['keterangan'] ?? '', // 'created_by' => auth()->user()->id, ]; RequestLogBenefit::create($data); } return true; } return true; } public function requestLogAwal(Request $request) { $data = [ 'member_id' => $request->member_id, 'service_code' => $request->service_code, 'organization_id' => $request->organization_id, 'organization_name' => !empty($request->organization_name) ? $request->organization_name : null, 'address_provider' => !empty($request->address_provider) ? $request->address_provider : null, 'submission_date' => $request->submission_date, 'approved_at' => $request->approved_at, 'approved_final_log_at' => $request->approved_final_log_at, 'corporate_id_partner' => !empty($request->corporate_id_partner) ? $request->corporate_id_partner : [], 'specialities_id' => $request->specialities_id, 'dppj' => $request->dppj ]; $validator = Validator::make($request->all(), [ 'member_id' => 'required', 'service_code' => 'required', 'submission_date' => 'required', 'approved_at' => 'required', 'approved_final_log_at' => 'required', 'specialities_id' => 'required', 'dppj' => 'required', ], [ 'member_id.required' => trans('Validation.required',['attribute' => 'Member ID']), 'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']), 'submission_date.required' => trans('Validation.required',['attribute' => 'Submission Date']), 'approved_at.required' => trans('Validation.required',['attribute' => 'Approved At Date']), 'approved_final_log_at.required' => trans('Validation.required',['attribute' => 'Approved Final Log At Date']), 'specialities_id.required' => trans('Validation.required',['attribute' => 'Specialities']), 'dppj.required' => trans('Validation.required',['attribute' => 'DPJP']), ]); if(!empty($request->organization_id)) { $validator = Validator::make($request->all(), [ 'organization_id' => 'required', 'member_id' => 'required', 'service_code' => 'required', 'submission_date' => 'required', 'approved_at' => 'required', 'approved_final_log_at' => 'required', 'specialities_id' => 'required', 'dppj' => 'required', ], [ 'organization_id.required' => trans('Validation.required',['attribute' => 'Provider ID']), 'member_id.required' => trans('Validation.required',['attribute' => 'Member ID']), 'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']), 'submission_date.required' => trans('Validation.required',['attribute' => 'Submission Date']), 'approved_at.required' => trans('Validation.required',['attribute' => 'Submission Date']), 'approved_final_log_at.required' => trans('Validation.required',['attribute' => 'Submission Date']), 'specialities_id.required' => trans('Validation.required',['attribute' => 'Specialities']), 'dppj.required' => trans('Validation.required',['attribute' => 'DPJP']), ]); } if ($validator->fails()) { return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400); } else { //insert data to organization try { if (!empty($request->organization_name) && !empty($request->address_provider)) { // Memulai transaksi DB::beginTransaction(); // Membuat singkatan dari nama rumah sakit $singkatan = ""; $words = explode(' ', $request->organization_name); foreach ($words as $word) { $singkatan .= strtoupper(substr($word, 0, 2)); } // Membuat kode organisasi $kodeOrganisasi = "ORG000" . $singkatan; // Insert data ke tabel organizations $organization_id = DB::table('organizations') ->insertGetId([ 'name' => $request->organization_name, 'code' => $kodeOrganisasi, 'type' => 'hospital', 'corporate_id_partner' => $request->corporate_id_partner ? implode(',', $request->corporate_id_partner) : null, 'created_at' => now(), // 'created_by' => auth()->user()->id ]); // Insert data ke tabel addresses $address_id = DB::table('addresses') ->insertGetId([ 'text'=> $request->address_provider, 'addressable_type' => 'App\Models\Organization', 'addressable_id' => $organization_id, 'type' => 'hospital', 'created_at' => now(), // 'created_by' => auth()->user()->id ]); // Update main_address_id di tabel organizations DB::table('organizations') ->where('organizations.id', '=', $organization_id) ->update(['main_address_id' => $address_id]); // Commit transaksi DB::commit(); $request->merge(['organization_id' => $organization_id]); } try { DB::beginTransaction(); $requestLogControllerInstance = new PrimeCenterRequestLog(); $code = $requestLogControllerInstance->getNextCode($request); $member = Member::find($request->member_id); $requestLogData = [ 'code' => $code, 'member_id' => $request->member_id, 'submission_date' => $request->submission_date ?? now(), 'status' => 'approved', 'payment_type' => 'cashless', 'service_code' => $request->service_code, 'policy_id' => $member->currentPolicy->id ?? null, 'organization_id' => $request->organization_id ?? 0, 'source' => $request->source, 'specialities_id' => $request->specialities_id, 'dppj' => $request->dppj, 'approved_at' => $request->approved_at ?? now(), 'approved_final_log_at' => $request->approved_final_log_at ?? now(), 'log_type' => $request->type ?? 'reference' ]; // SIMPAN LOG $requestLog = RequestLog::create($requestLogData); DB::commit(); return ApiResponse::apiResponse( 'Success Create Log', $requestLog, 'Berhasil create LOG dan Benefit', 200 ); } catch (\Exception $e) { DB::rollBack(); return ApiResponse::apiResponse( 'Server Error Create Log', $data, $e->getMessage(), 500 ); } } catch (\Exception $e) { // Rollback transaksi jika terjadi kesalahan DB::rollBack(); // Handle error, bisa di-log atau dikembalikan sebagai response return ApiResponse::apiResponse('Server Error 3', $data, $e->getMessage(), 500); } } } }