diff --git a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php index 54d56720..3d27eb3a 100644 --- a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php @@ -7,6 +7,9 @@ use App\Helpers\Helper; use App\Models\ClaimRequest; use App\Models\File; use App\Models\Member; +use App\Models\RequestLog; +use App\Models\Organization; + use App\Services\ClaimRequestService; use App\Services\ClaimService; use Exception; @@ -26,7 +29,7 @@ class ClaimRequestController extends Controller * Display a listing of the resource. * @return Renderable */ - private static $code_prefix = 'CRQ-H'; + private static $code_prefix = 'CLAIM'; public function index(request $request) { $claimRequests = ClaimRequest::query() @@ -85,21 +88,26 @@ class ClaimRequestController extends Controller else { $check_claim_requests = DB::table('claim_requests') - ->where('claim_requests.request_log_id', '=', $request->request_logs_id) - ->first(); + ->where('claim_requests.request_log_id', '=', $request->request_logs_id) + ->first(); if(!$check_claim_requests) { try { DB::beginTransaction(); - $code = $this->getNextCode(); + $code = $this->getNextCode($request->request_logs_id); $member = Member::find($request->member_id); + $requestLogData = RequestLog::where('id',$request->request_logs_id)->first(); + $organization = Organization::where(['id' => $requestLogData->organization_id, 'type' => 'hospital'])->first('code'); + $provideCode = $organization ? $organization->code : ''; + $newClaimRequest = ClaimRequestService::storeClaimRequest( row: [], code: $code, member: $member, - paymentType: 'reimbursement', + paymentType: 'cashless', serviceCode: $request->service_code, requestLogID: $request->request_logs_id, + organization_code: $provideCode, ); // Log History $newClaimRequest->histories()->create([ @@ -228,21 +236,36 @@ class ClaimRequestController extends Controller return $claimRequest; } - public static function getNextCode() + public static function getNextCode($request_log_id = 0) { - $last_number = ClaimRequest::withTrashed()->max('code'); - $last_number_parts = explode('-', $last_number); - $next_number = count($last_number_parts) < 3 ? 1 : ((int) $last_number_parts[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; + } else { + $next_number = 1; + } + return self::makeCode($next_number, $request_log_id); } - public static function makeCode($next_number) + public static function makeCode($next_number, $request_log_id) { // Pastikan $next_number adalah integer positif $next_number = max(1, (int) $next_number); - + $requestLogData = RequestLog::where('id', $request_log_id)->first(); + $organization = Organization::where(['id' => $requestLogData->organization_id, 'type' => 'hospital'])->first('code'); + $provideCode = $organization ? $organization->code : ''; + $member = Member::with('currentCorporate')->where(['id' => $requestLogData->member_id])->first(); + $sparator = '.'; + $date = date('ymd'); // Menghasilkan kode dengan format yang diinginkan - return self::$code_prefix . '-' . str_pad($next_number, 5, '0', STR_PAD_LEFT); + return self::$code_prefix . $sparator. 'H' . $sparator. $provideCode . $sparator. $date. $sparator . $member->currentPolicy->code . $sparator. $member->member_id . $sparator. str_pad($next_number, 5, '0', STR_PAD_LEFT); + return self::$code_prefix . '.' . str_pad($next_number, 6, '0', STR_PAD_LEFT); } public function get_claim_requests(Request $request)