250 lines
10 KiB
PHP
250 lines
10 KiB
PHP
<?php
|
|
|
|
namespace Modules\Primaya\Http\Controllers\Api;
|
|
use Illuminate\Contracts\Support\Renderable;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Modules\Primaya\Helpers\ApiResponse;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Modules\Internal\Http\Controllers\Api\RequestLogController as primeCenterRequestLog;
|
|
use App\Helpers\Helper;
|
|
use App\Models\File;
|
|
use Dompdf\Dompdf;
|
|
use Dompdf\Options;
|
|
use Illuminate\Support\Facades\View;
|
|
use App\Models\Member;
|
|
use App\Models\RequestLog;
|
|
use App\Models\Organization;
|
|
use App\Services\ClaimRequestService;
|
|
use App\Models\ClaimRequest;
|
|
use App\Models\RequestLogBenefit;
|
|
|
|
|
|
class RequestLogController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
* @return Renderable
|
|
*/
|
|
private static $code_prefix = 'CLAIM';
|
|
public function requestLog(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,
|
|
'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',
|
|
'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']),
|
|
'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',
|
|
'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']),
|
|
'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,
|
|
'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
|
|
];
|
|
|
|
// 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;
|
|
}
|
|
}
|