265 lines
9.8 KiB
PHP
265 lines
9.8 KiB
PHP
<?php
|
|
|
|
namespace Modules\Client\Http\Controllers\Api;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
use App\Helpers\Helper;
|
|
use App\Models\Claim;
|
|
use App\Models\CorporateEmployee;
|
|
use App\Models\Icd;
|
|
use App\Models\ClaimHistoryCare;
|
|
use App\Models\Corporate;
|
|
use App\Services\ClaimService;
|
|
use Illuminate\Contracts\Support\Renderable;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\Client\Transformers\ClaimShowResource;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
|
|
|
class ClaimController extends Controller
|
|
{
|
|
public function __construct(public ClaimService $claimService)
|
|
{
|
|
}
|
|
|
|
public function status($corporate_id)
|
|
{
|
|
$claims = $this->claimService->getCountClaimRequestPerStatus($corporate_id);
|
|
|
|
// dd($claims);
|
|
|
|
return Helper::responseJson([
|
|
'count_requested' => 0,
|
|
'count_approval' => 0,
|
|
'count_disbrushment' => 0,
|
|
'count_rejected' => 0,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
* @return Renderable
|
|
*/
|
|
public function index(Request $request, $corporate_id)
|
|
{
|
|
$claims = Claim::query()
|
|
->when($request->search ?? null, function ($query, $search) {
|
|
$query->where('code', 'LIKE', '%' . $search . '%');
|
|
})
|
|
->with([
|
|
'member',
|
|
'diagnoses' => function ($diagnosis) {
|
|
return $diagnosis->where('type', 'primary');
|
|
},
|
|
'diagnoses.icd',
|
|
'plan',
|
|
'benefit',
|
|
'claimRequest',
|
|
'claimRequest.service'
|
|
])
|
|
->paginate(10);
|
|
|
|
return Helper::responseJson($claims);
|
|
}
|
|
|
|
/**
|
|
* 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)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Show the specified resource.
|
|
* @param int $id
|
|
* @return Renderable
|
|
*/
|
|
public function show($id)
|
|
{
|
|
$claim = Claim::query()
|
|
->with([
|
|
'member',
|
|
'member.currentPlan',
|
|
'member.currentPlan.benefits',
|
|
'member.currentCorporate',
|
|
'member.currentPolicy',
|
|
'diagnosis',
|
|
'diagnoses',
|
|
'benefit',
|
|
'files',
|
|
'claimRequest',
|
|
'claimRequest.files',
|
|
'items',
|
|
'items.claim_itemable',
|
|
])
|
|
->findOrFail($id);
|
|
|
|
return Helper::responseJson(ClaimShowResource::make($claim));
|
|
}
|
|
|
|
/**
|
|
* 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 function export($corporate_id){
|
|
$corporate = Corporate::where('id', $corporate_id)->with(['currentPolicy'])->first();
|
|
$member_id = CorporateEmployee::where('corporate_id', $corporate_id)->get('member_id')->toArray();
|
|
// dd($member_id);
|
|
$claim = Claim::whereIn('member_id', $member_id)->with(['member', 'member.plans'])->get();
|
|
$data = [];
|
|
|
|
if (count( $claim) > 0){
|
|
$temp = [];
|
|
foreach($claim as $c) {
|
|
|
|
$diagnosis = ClaimHistoryCare::where('claim_id', 34)->with('icd')->get();
|
|
$diagnosisName = '';
|
|
if (count($diagnosis) > 0){
|
|
$tempDiagnosis = [];
|
|
foreach($diagnosis as $key => $d){
|
|
$diagnosis = Icd::where('id', $d['main_diagnosis_id'])->first();
|
|
array_push($tempDiagnosis, $diagnosis->name);
|
|
}
|
|
|
|
$diagnosisName = implode(", ", $tempDiagnosis);
|
|
|
|
}
|
|
$temp['id'] = $c['id'];
|
|
$temp['plan_id'] = $c['member']['plans'][0]['code'];
|
|
$temp['payor_id'] = $c['member']['payor_id'];
|
|
$temp['corporate_id'] = $corporate->name;
|
|
$temp['policy_number'] = $corporate->currentPolicy->code;
|
|
$temp['member_id'] = $c['member']['member_id'];
|
|
$temp['benefit_code'] = $c['benefit_code'];
|
|
$temp['benefit_desc'] = $c['benefit_desc'];
|
|
$temp['amount_incurred'] = $c['amount_incurred'];
|
|
$temp['amount_approved'] = $c['amount_approved'];
|
|
$temp['amount_not_approved'] = $c['amount_not_approved'];
|
|
$temp['excess_paid'] = $c['excess_paid'];
|
|
$temp['diganosis'] = $diagnosisName;
|
|
array_push($data, $temp);
|
|
}
|
|
|
|
$headers = [
|
|
['value' => 'Plan ID', 'cell' => 'A1', 'mergeCell' => false, 'mergeToCell' => ''],
|
|
['value' => 'Payor ID', 'cell' => 'B1', 'mergeCell' => false, 'mergeToCell' => ''],
|
|
['value' => 'Corporate ID', 'cell' => 'C1', 'mergeCell' => false, 'mergeToCell' => ''],
|
|
['value' => 'Policy Number', 'cell' => 'D1', 'mergeCell' => false, 'mergeToCell' => ''],
|
|
['value' => 'Member ID', 'cell' => 'E1', 'mergeCell' => false, 'mergeToCell' => ''],
|
|
['value' => 'Benefit Code', 'cell' => 'F1', 'mergeCell' => false, 'mergeToCell' => ''],
|
|
['value' => 'Benefit Desc', 'cell' => 'G1', 'mergeCell' => false, 'mergeToCell' => ''],
|
|
['value' => 'Amt Incurred', 'cell' => 'H1', 'mergeCell' => false, 'mergeToCell' => ''],
|
|
['value' => 'Amt Approved', 'cell' => 'I1', 'mergeCell' => false, 'mergeToCell' => ''],
|
|
['value' => 'Amt Not Approved', 'cell' => 'J1', 'mergeCell' => false, 'mergeToCell' => ''],
|
|
['value' => 'Excess Paid', 'cell' => 'K1', 'mergeCell' => false, 'mergeToCell' => ''],
|
|
['value' => 'Diagnosis', 'cell' => 'L1', 'mergeCell' => false, 'mergeToCell' => 'J2'],
|
|
|
|
];
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
|
|
foreach ($headers as $header) {
|
|
$sheet->setCellValue($header['cell'], $header['value']);
|
|
|
|
if ($header['mergeCell'] === true) {
|
|
$sheet->mergeCells($header['cell'] . ':' . $header['mergeToCell']);
|
|
}
|
|
|
|
$sheet->getStyle($header['cell'])->getFont()->setBold(true);
|
|
$sheet->getStyle($header['cell'])->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER)->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
|
|
}
|
|
|
|
$startFrom = 2;
|
|
|
|
foreach($data as $i => $d){
|
|
$sheet->setCellValue('A' . $startFrom, $d['plan_id'] ?? '-');
|
|
$sheet->setCellValue('B' . $startFrom, $d['payor_id'] ?? '-');
|
|
$sheet->setCellValue('C' . $startFrom, $d['corporate_id'] ?? '-');
|
|
$sheet->setCellValue('D' . $startFrom, $d['policy_number'] ?? '-');
|
|
$sheet->setCellValue('E' . $startFrom, $d['member_id'] ?? '-');
|
|
$sheet->setCellValue('F' . $startFrom, $d['benefit_code'] ?? '-');
|
|
$sheet->setCellValue('G' . $startFrom, $d['benefit_desc'] ?? '-');
|
|
$sheet->setCellValue('H' . $startFrom, $d['amount_incurred'] ?? '-');
|
|
$sheet->setCellValue('I' . $startFrom, $d['amount_approved'] ?? '-');
|
|
$sheet->setCellValue('J' . $startFrom, $d['amount_not_approved'] ?? '-');
|
|
$sheet->setCellValue('K' . $startFrom, $d['excess_paid'] ?? '-');
|
|
$sheet->setCellValue('L' . $startFrom, $d['diganosis'] ?? '-');
|
|
|
|
$startFrom++;
|
|
}
|
|
|
|
foreach (['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K'] as $header) {
|
|
if ($header === 'A') {
|
|
$spreadsheet->getActiveSheet()->getColumnDimension($header)->setWidth(35, 'px');
|
|
} elseif ($header === 'H' || $header === 'I') {
|
|
$spreadsheet->getActiveSheet()->getColumnDimension($header)->setWidth(100, 'px');
|
|
} else {
|
|
$spreadsheet->getActiveSheet()->getColumnDimension($header)->setAutoSize(true);
|
|
}
|
|
}
|
|
|
|
$spreadsheet->getActiveSheet()->getStyle('A2:A' . $startFrom)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER)->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
|
|
|
|
$sheet->getDefaultRowDimension()->setRowHeight(-1);
|
|
$sheet->setTitle('Alarm Center Report');
|
|
|
|
$writer = new Xlsx($spreadsheet);
|
|
ob_start();
|
|
$writer->save('php://output');
|
|
$content = ob_get_contents();
|
|
ob_end_clean();
|
|
|
|
$fileName = 'result-' . now()->getPreciseTimestamp(3) . '-alarm-center-report.xlsx';
|
|
Storage::disk('public')->put('temp/' . $fileName, $content);
|
|
|
|
$fileUrl = url('storage/temp/' . $fileName);
|
|
|
|
return Helper::responseJson([
|
|
"file_url" => $fileUrl
|
|
]);
|
|
}
|
|
}
|
|
}
|