export import claim request

This commit is contained in:
2024-03-01 09:17:30 +07:00
parent 547ecc0271
commit 19bddcdd22
6 changed files with 316 additions and 19 deletions

View File

@@ -456,6 +456,7 @@ class ClaimController extends Controller
//Data Benefit //Data Benefit
$dataClaimLog = DB::table('request_log_benefits') $dataClaimLog = DB::table('request_log_benefits')
->where('request_log_benefits.request_log_id', '=', $item->id) ->where('request_log_benefits.request_log_id', '=', $item->id)
->where('request_log_benefits.deleted_at', null)
->select( ->select(
'*', '*',
DB::raw(' DB::raw('

View File

@@ -192,15 +192,15 @@ class ClaimController extends Controller
'), '),
'claim_requests.created_at', 'claim_requests.created_at',
DB::raw(' DB::raw('
(SELECT plans.code (SELECT plans.code
FROM plans FROM plans
WHERE plans.id IN ( WHERE plans.id IN (
SELECT member_plans.plan_id SELECT member_plans.plan_id
FROM member_plans FROM member_plans
WHERE member_plans.member_id = claim_requests.member_id WHERE member_plans.member_id = claim_requests.member_id
) )
AND plans.service_code = claim_requests.service_code) AS plan_code AND plans.service_code = claim_requests.service_code) AS plan_code
'), '),
// DB::raw(' // DB::raw('
// (SELECT plans.code FROM plans WHERE plans.id = member_plans.plan_id LIMIT 1) AS plan_code // (SELECT plans.code FROM plans WHERE plans.id = member_plans.plan_id LIMIT 1) AS plan_code
// '), // '),

View File

@@ -17,11 +17,18 @@ use App\Services\ClaimRequestService;
use App\Exceptions\ImportRowException; use App\Exceptions\ImportRowException;
use App\Events\ClaimRequested; use App\Events\ClaimRequested;
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
use Box\Spout\Common\Entity\Style\CellAlignment;
use App\Models\File; use App\Models\File;
use App\Models\FilesMcu; use App\Models\FilesMcu;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use App\Models\Member; use App\Models\Member;
use App\Models\MemberPlan;
use App\Models\Plan;
use App\Models\RequestLogBenefit;
use Carbon\Carbon; use Carbon\Carbon;
class ClaimRequestController extends Controller class ClaimRequestController extends Controller
@@ -53,7 +60,6 @@ class ClaimRequestController extends Controller
} }
}) })
->when($request->service_code, function ($q, $serviceCode) { ->when($request->service_code, function ($q, $serviceCode) {
$q->whereIn('service_code', $serviceCode); $q->whereIn('service_code', $serviceCode);
}) })
@@ -70,7 +76,7 @@ class ClaimRequestController extends Controller
}) })
->with(['member', 'files', 'service', 'member.currentPolicy']) ->with(['member', 'files', 'service', 'member.currentPolicy'])
->paginate(); ->paginate();
return Helper::paginateResources(ClaimRequestResource::collection($claimRequests)); return Helper::paginateResources(ClaimRequestResource::collection($claimRequests));
} }
@@ -722,6 +728,293 @@ class ClaimRequestController extends Controller
return Helper::responseJson(data: $request->toArray(), message: 'Invoice Success Uploaded'); return Helper::responseJson(data: $request->toArray(), message: 'Invoice Success Uploaded');
} }
public function exportClaimRequest(Request $request)
{
$claimRequests = ClaimRequest::query()
->when($request->search, function ($q, $search) {
$q->where('code', 'LIKE', "%".$search."%");
$q->orWhereHas('member', function ($subQuery) use ($search) {
$subQuery->where('name', 'LIKE', "%".$search."%");
});
})
->when($request->start_date, function ($q, $startDate) {
$q->where('submission_date', '>', Carbon::parse($startDate)->subDay());
})
->when($request->end_date, function ($q, $endDate) use ($request) {
// Jika tanggal akhir diberikan dan tidak sama dengan tanggal mulai
if ($request->start_date != $request->end_date) {
$q->where('submission_date', '<', Carbon::parse($endDate)->addDay());
} else {
$q->where('submission_date', '<=', Carbon::parse($endDate));
}
})
->when($request->service_code, function ($q, $serviceCode) {
$q->whereIn('service_code', $serviceCode);
})
->when($request->orderBy, function ($q, $orderBy) use ($request) {
if (in_array($orderBy, ['submission_date', 'code'])) {
$q->orderBy($orderBy, $request->order);
}
})
->when(empty($request->orderBy), function ($q) {
$q->orderBy('created_at', 'desc');
})
->when($request->status, function($q, $status) {
$q->where('status', $status);
})
->with(['member', 'member.currentCorporate', 'files', 'service', 'member.currentPolicy', 'requestLog', 'requestLog.organization',])
->addSelect([
'tot_billing' => function ($query) {
$query->select(DB::raw('SUM(request_log_benefits.amount_approved)'))
->from('request_log_benefits')
->whereColumn('request_log_benefits.request_log_id', 'claim_requests.request_log_id')
->limit(1);
}
])
->get();
$writer = WriterEntityFactory::createXLSXWriter();
$writer->openToFile(public_path('files/Report-Data-Claim-Request.xlsx'));
$header = [
'No',
'Code Claim',
'Date Claim Submission',
'Code LOG',
'Date Submission',
'Date Admission',
'Date Discharge',
'Provider',
'Member ID (BN)',
'Member Name',
'Member Name Principal',
'Plan Code',
'Payor ID',
'Corporate name',
'Policy Number',
'Total Billing',
'Benefit Code',
'Benefit Desc',
'Amt Incurred',
'Amt Approved',
'Amt Not Approved',
'Excess Paid',
// 'Reason',
'Diagnosis',
'Keterangan',
'Catatan',
'Status',
'QC'
];
$style = (new StyleBuilder())
->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$headerRow = WriterEntityFactory::createRowFromArray($header, $style);
$writer->addRow($headerRow);
$results = $claimRequests;
$no=0;
$gr_total = 0;
$rowData=[];
foreach($results as $item)
{
// $gr_total += $item->tot_bill;
// $requestLogData = RequestLogBenefit::selectRaw('*,
// (SELECT code FROM benefits WHERE benefits.id = request_log_benefits.benefit_id) AS benefit_code,
// (SELECT description FROM benefits WHERE benefits.id = request_log_benefits.benefit_id) AS benefit_description,
// sum(amount_incurred) AS total_incurred'
// )
// ->where(['request_log_id' => $item->request_log_id, 'deleted_at' => null])
// ->get()->toArray();
//Data Benefit
$requestLogData = DB::table('request_log_benefits')
->where('request_log_benefits.request_log_id', '=', $item->request_log_id)
->select(
'*',
// DB::raw('SUM(request_log_benefits.amount_incurred) AS total_incurred'),
DB::raw('
(Select benefits.description FROM benefits
WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS benefit_description
'),
DB::raw('
(Select benefits.code FROM benefits
WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS benefit_code
')
)
->get();
if ($item->member){
$member = Member::where('member_id', $item->member->principal_id)->first();
$memberPrincipal = $member->name;
$memberPlan = MemberPlan::where('member_id', $item->member->id)->get('plan_id')->toArray();
$plan= Plan::whereIn('id', $memberPlan)->where('service_code', $item->requestLog->service_code)->first();
$planCode = $plan->code;
if ($item->member->currentCorporate->id == $item->requestLog->organization->corporate_id_partner){
$payor = $item->member->currentCorporate->name;
} else {
$payor = 'LinkSehat';
}
} else {
$memberPrincipal = '-';
$planCode = '-';
$payor = '-';
}
if ($requestLogData){
foreach($requestLogData as $key => $data){
$no++;
if ($key == 0){
$gr_total += $item->tot_billing;
}
$rowItem = [
$no,
$item->code,
$item->submission_date ? $item->submission_date : '',
$item->requestLog ? $item->requestLog->code : '-',
$item->requestLog ? Helper::dateParser($item->requestLog->created_at) : '-', // submission = created_at
$item->requestLog ? $item->requestLog->submission_date : '-',
$item->requestLog ? $item->requestLog->discharge_date : '-',
$item->requestLog ? $item->requestLog->organization->name : '-',
$item->member ? $item->member->member_id : '-',
$item->member ? $item->member->name : '-',
$memberPrincipal,
$key == 0 ? $planCode : '',
$payor,
$item->member ? $item->member->currentCorporate->name : '-',
$item->member ? $item->member->currentPolicy->code : '-',
$key == 0 ? $item->tot_billing : '',
$data->benefit_code,
$data->benefit_description,
$data->amount_incurred ? $data->amount_incurred : '' ,
$data->amount_approved ? $data->amount_approved : '',
$data->amount_not_approved ? $data->amount_not_approved : '',
$data->excess_paid ? $data->excess_paid : '',
// $data->reason ? $data->reason : '',
$item->requestLog ? $item->requestLog->diagnosis : '-',
$item->requestLog ? $item->requestLog->keterangan : '-',
$item->requestLog ? $item->requestLog->catatan : '-',
$item->status ? $item->status : '-'
];
array_push($rowData,$rowItem);
}
} else {
$no++;
if ($item->member){
$member = Member::where('member_id', $item->member->principal_id)->first();
$memberPrincipal = $member->name;
$memberPlan = MemberPlan::where('member_id', $item->member->id)->get('plan_id')->toArray();
$plan= Plan::whereIn('id', $memberPlan)->where('service_code', $item->requestLog->service_code)->first();
$planCode = $plan->code;
if ($item->member->currentCorporate->id == $item->requestLog->organization->corporate_id_partner){
$payor = $item->member->currentCorporate->name;
} else {
$payor = 'LinkSehat';
}
} else {
$memberPrincipal = '-';
$planCode = '-';
$payor = '-';
}
$rowItem = [
$no,
$item->code,
$item->submission_date ? Helper::dateParser($item->submission_date) : '',
$item->requestLog ? $item->requestLog->code : '-',
$item->requestLog ? Helper::dateParser($item->requestLog->created_at) : '-', // submission = created_at
$item->requestLog ? $item->requestLog->submission_date : '-',
$item->requestLog ? $item->requestLog->discharge_date : '-',
$item->requestLog ? $item->requestLog->organization->name : '-',
$item->member ? $item->member->member_id : '-',
$item->member ? $item->member->name : '-',
$memberPrincipal,
$planCode,
$payor,
$item->member ? $item->member->currentCorporate->name : '-',
$item->member ? $item->member->currentPolicy->code : '-',
'',
'',
'',
'',
'',
'',
'',
// '',
$item->requestLog ? $item->requestLog->diagnosis : '-',
$item->requestLog ? $item->requestLog->keterangan : '-',
$item->requestLog ? $item->requestLog->catatan : '-',
$item->status ? $item->status : '-'
];
array_push($rowData,$rowItem);
}
}
$style = (new StyleBuilder())
//->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
foreach ($rowData as $rowItem) {
// if (is_numeric($rowItem[13])) {
// // Jumlahkan nilai angka ke total
// $grand_total_billing += $rowItem[13];
// }
$row = WriterEntityFactory::createRowFromArray($rowItem, $style);
$writer->addRow($row);
}
//Footer
$footer = [
'Total',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
$gr_total,
'',
'',
'',
'',
'',
'',
''
];
$style = (new StyleBuilder())
->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$grand_total_billing = 0;
$footerRow = WriterEntityFactory::createRowFromArray($footer, $style);
$writer->addRow($footerRow);
$writer->close();
return Helper::responseJson([
'file_name' => 'Report-Data-Claim-Request',
"file_url" => url('files/Report-Data-Claim-Request.xlsx')
]);
}
public function submition($id){ public function submition($id){
$claimRequest = ClaimRequest::findOrFail($id); $claimRequest = ClaimRequest::findOrFail($id);
$claimRequest->status = 'submission'; $claimRequest->status = 'submission';

View File

@@ -315,13 +315,14 @@ Route::prefix('internal')->group(function () {
Route::get('claim-requests/list-member', [ClaimRequestController::class, 'getClaimMemberInfiniteScroll']); // Bagaskoro, BSD 31 Oktober 2023 Route::get('claim-requests/list-member', [ClaimRequestController::class, 'getClaimMemberInfiniteScroll']); // Bagaskoro, BSD 31 Oktober 2023
Route::post('claim-requests/{id}/approve', [ClaimRequestController::class, 'approve'])->name('claim-requests.approve'); Route::post('claim-requests/{id}/approve', [ClaimRequestController::class, 'approve'])->name('claim-requests.approve');
Route::post('claim-requests/{id}/submition', [ClaimRequestController::class, 'submition'])->name('claim-requests.submition'); Route::post('claim-requests/{id}/submition', [ClaimRequestController::class, 'submition'])->name('claim-requests.submition');
Route::get('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show'); Route::get('claim-requests/{id}/show', [ClaimRequestController::class, 'show'])->name('claim-requests.show');
Route::post('claim-requests', [ClaimRequestController::class, 'createNew']); // Bagaskoro, BSD 2 November 2023 Route::post('claim-requests', [ClaimRequestController::class, 'createNew']); // Bagaskoro, BSD 2 November 2023
Route::post('claim-requests/{id}/update', [ClaimRequestController::class, 'update']); Route::post('claim-requests/{id}/update', [ClaimRequestController::class, 'update']);
Route::post('claim-requests/import', [ClaimRequestController::class, 'importClaim'])->name('claim-requests.importClaim'); Route::post('claim-requests/import', [ClaimRequestController::class, 'importClaim'])->name('claim-requests.importClaim');
Route::get('claim-requests/detail/{id}', [ClaimRequestController::class, 'claimRequestDetail']); Route::get('claim-requests/detail/{id}', [ClaimRequestController::class, 'claimRequestDetail']);
Route::post('claim-requests/{id}/invoice-files', [ClaimRequestController::class, 'invoiceFiles']); Route::post('claim-requests/{id}/invoice-files', [ClaimRequestController::class, 'invoiceFiles']);
Route::post('claim-requests/{id}/request-files', [ClaimRequestController::class, 'requestFiles']); Route::post('claim-requests/{id}/request-files', [ClaimRequestController::class, 'requestFiles']);
Route::get('claim-requests/export', [ClaimRequestController::class, 'exportClaimRequest']);
Route::get('claim-requests/service/{id}', [ClaimRequestController::class, 'getServiceMember']); Route::get('claim-requests/service/{id}', [ClaimRequestController::class, 'getServiceMember']);

View File

@@ -52,26 +52,28 @@ class ClaimRequest extends Model
]; ];
public static $doc_headers_to_field_map = [ public static $doc_headers_to_field_map = [
"Code" => "code", "Code LOG" => "code",
"Date Submission" => "date_submission", "Date Claim Submission" => "date_submission",
"Total Billing" => "total_billing", "Total Billing" => "total_billing",
"Benefit Code" => "benefit_code", "Benefit Code" => "benefit_code",
"Amt Incurred" => "amount_incurred", "Amt Incurred" => "amount_incurred",
"Amt Approved" => "amount_apporve", "Amt Approved" => "amount_apporve",
"Amt Not Approved" => "amount_not_apporve", "Amt Not Approved" => "amount_not_apporve",
"Excess Paid" => "excess_paid", "Excess Paid" => "excess_paid",
"Reason" => "reason",
"QC" => "qc", "QC" => "qc",
]; ];
public static $listing_doc_headers = [ public static $listing_doc_headers = [
"Code", "Code LOG",
"Date Submission", "Date Claim Submission",
"Total Billing", "Total Billing",
"Benefit Code", "Benefit Code",
"Amt Incurred", "Amt Incurred",
"Amt Approved", "Amt Approved",
"Amt Not Approved", "Amt Not Approved",
"Excess Paid", "Excess Paid",
"Reason",
"QC", "QC",
]; ];

View File

@@ -279,7 +279,7 @@ export default function List() {
} }
const handleGetData = (type :string) => { const handleGetData = (type :string) => {
axios.get(`corporates/${corporate_id}/data-plan-benefit`) axios.get(`claim-requests/export`)
.then((response) => { .then((response) => {
const link = document.createElement('a'); const link = document.createElement('a');
link.href = response.data.data.file_url; link.href = response.data.data.file_url;
@@ -416,7 +416,7 @@ export default function List() {
setDataTableLoading(true); setDataTableLoading(true);
const filter = appliedFilter ? appliedFilter : Object.fromEntries([...searchParams.entries()]); const filter = appliedFilter ? appliedFilter : Object.fromEntries([...searchParams.entries()]);
const response = await axios.get('/claim-requests', { params: filter }); const response = await axios.get('/claim-requests', { params: filter });
console.log(response.data);
setDataTableLoading(false); setDataTableLoading(false);