208 lines
7.3 KiB
PHP
208 lines
7.3 KiB
PHP
<?php
|
|
|
|
namespace Modules\Client\Http\Controllers\Api;
|
|
|
|
use App\Events\ClaimRequested;
|
|
use App\Helpers\Helper;
|
|
use App\Models\File;
|
|
use App\Models\Member;
|
|
use App\Models\ClaimRequest;
|
|
use App\Services\ClaimRequestService;
|
|
use Illuminate\Contracts\Support\Renderable;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class ClaimRequestController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
* @return Renderable
|
|
*/
|
|
private static $code_prefix = 'CRQ-C';
|
|
public function index()
|
|
{
|
|
return view('client::index');
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
* @return Renderable
|
|
*/
|
|
public function create()
|
|
{
|
|
return view('client::create');
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
* @param Request $request
|
|
* @return Renderable
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'member_id' => 'required|array',
|
|
'member_id.*' => 'required',
|
|
'service_code.*' => 'required|in:OP,IP'
|
|
]);
|
|
if ($request->member_id){
|
|
foreach($request->member_id as $key => $member_id){
|
|
|
|
$code = $this->getNextCode();
|
|
$member = Member::find($member_id);
|
|
$newClaimRequest = ClaimRequestService::storeClaimRequest(
|
|
row: [],
|
|
code: $code,
|
|
member: $member,
|
|
paymentType: 'reimbursement',
|
|
serviceCode: $request->service_code[$key],
|
|
);
|
|
|
|
ClaimRequested::dispatch($newClaimRequest);
|
|
// Log History
|
|
$newClaimRequest->histories()->create([
|
|
'title' => 'New Claim Requested',
|
|
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
|
|
'type' => 'info',
|
|
'system_origin' => 'client-portal'
|
|
]);
|
|
|
|
// Claim Log
|
|
DB::table('claim_logs')
|
|
->insert([
|
|
'claim_request_id' => $newClaimRequest->id,
|
|
'status' => 'requested',
|
|
'date' => date('Y-m-d H:i:s'),
|
|
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
|
|
'system_origin' => 'hospital-portal',
|
|
'created_by' => auth()->user()->id,
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'updated_at'=> date('Y-m-d H:i:s'),
|
|
]);
|
|
|
|
if ($request->hasFile('laboratorium')) {
|
|
foreach ($request->laboratorium[$key] as $file) {
|
|
$pathFile = File::storeFile('claim-result', $newClaimRequest->id, $file);
|
|
$newClaimRequest->files()->updateOrCreate([
|
|
'type' => 'claim-result',
|
|
'name' => File::getFileName('claim-result', $newClaimRequest->id, $file),
|
|
'original_name' => $file->getClientOriginalName(),
|
|
'extension' => $file->getClientOriginalExtension(),
|
|
'path' => $pathFile,
|
|
'created_by' => auth()->user()->id,
|
|
'updated_by' => auth()->user()->id,
|
|
]);
|
|
}
|
|
}
|
|
|
|
if ($request->hasFile('prescription')) {
|
|
foreach ($request->prescription[$key] as $file) {
|
|
$pathFile = File::storeFile('claim-diagnosis', $newClaimRequest->id, $file);
|
|
$newClaimRequest->files()->updateOrCreate([
|
|
'type' => 'claim-diagnosis',
|
|
'name' => File::getFileName('claim-diagnosis', $newClaimRequest->id, $file),
|
|
'original_name' => $file->getClientOriginalName(),
|
|
'extension' => $file->getClientOriginalExtension(),
|
|
'path' => $pathFile,
|
|
'created_by' => auth()->user()->id,
|
|
'updated_by' => auth()->user()->id,
|
|
]);
|
|
}
|
|
}
|
|
|
|
if ($request->hasFile('invoice')) {
|
|
foreach ($request->invoice[$key] as $file) {
|
|
$pathFile = File::storeFile('claim-kondisi', $newClaimRequest->id, $file);
|
|
$newClaimRequest->files()->updateOrCreate([
|
|
'type' => 'claim-kondisi',
|
|
'name' => File::getFileName('claim-kondisi', $newClaimRequest->id, $file),
|
|
'original_name' => $file->getClientOriginalName(),
|
|
'extension' => $file->getClientOriginalExtension(),
|
|
'path' => $pathFile,
|
|
'created_by' => auth()->user()->id,
|
|
'updated_by' => auth()->user()->id,
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
return Helper::responseJson(data: $request->toArray(), message: 'Claim Request berhasil ajukan!');
|
|
}
|
|
|
|
/**
|
|
* Show the specified resource.
|
|
* @param int $id
|
|
* @return Renderable
|
|
*/
|
|
public function show($id)
|
|
{
|
|
return view('client::show');
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
* @param int $id
|
|
* @return Renderable
|
|
*/
|
|
public function edit($id)
|
|
{
|
|
return view('client::edit');
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
* @param Request $request
|
|
* @param int $id
|
|
* @return Renderable
|
|
*/
|
|
public function update(Request $request, $id)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
* @param int $id
|
|
* @return Renderable
|
|
*/
|
|
public function destroy($id)
|
|
{
|
|
//
|
|
}
|
|
|
|
public static function getNextCode()
|
|
{
|
|
// $last_number = ClaimRequest::max('code');
|
|
// $next_number = empty($last_number) ? 1 : ((int) explode('-', $last_number)[2] + 1);
|
|
// return self::makeCode($next_number);
|
|
|
|
$last_numeric_code = ClaimRequest::select(DB::raw('MAX(CAST(SUBSTRING_INDEX(code, "-", -1) AS SIGNED)) as max_numeric_code'))
|
|
->whereRaw('SUBSTRING_INDEX(code, "-", -1) REGEXP "^[0-9]+$"')
|
|
->value('max_numeric_code');
|
|
// $next_number = 1;
|
|
if ($last_numeric_code) {
|
|
// // Jika ada kode sebelumnya, pecah kode dan tambahkan 1 ke angka terakhir
|
|
// $parts = explode('-', $last_code);
|
|
// $last_number = (int) end($parts);
|
|
$next_number = $last_numeric_code + 1;
|
|
}
|
|
|
|
return self::makeCode($next_number);
|
|
}
|
|
|
|
|
|
public static function makeCode($next_number)
|
|
{
|
|
// Pastikan $next_number adalah integer positif
|
|
$next_number = max(1, (int) $next_number);
|
|
|
|
// Menghasilkan kode dengan format yang diinginkan
|
|
return self::$code_prefix . '-' . str_pad($next_number, 5, '0', STR_PAD_LEFT);
|
|
}
|
|
}
|