Compare commits
1 Commits
origin/pro
...
feature/cl
| Author | SHA1 | Date | |
|---|---|---|---|
| 5ee9293daf |
0
.editorconfig
Normal file → Executable file
0
.editorconfig
Normal file → Executable file
83
.env-example
83
.env-example
@@ -1,83 +0,0 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=base64:axfmcy3qUMuukm8emaW6G0x/7SS3wWcLITXo+YAyCps=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost:8000
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=aso_two
|
||||
DB_USERNAME=mysql
|
||||
DB_PASSWORD=password
|
||||
|
||||
OLDLMS_DB_CONNECTION=mysql
|
||||
OLDLMS_DB_HOST=127.0.0.1
|
||||
OLDLMS_DB_PORT=3306
|
||||
OLDLMS_DB_DATABASE=linksehat
|
||||
OLDLMS_DB_USERNAME=mysql
|
||||
OLDLMS_DB_PASSWORD=password
|
||||
|
||||
BROADCAST_DRIVER=pusher
|
||||
CACHE_DRIVER=file
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=sync
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
#MAIL_DRIVER=smtp
|
||||
#MAIL_HOST=smtp.gmail.com
|
||||
#MAIL_PORT=587
|
||||
#MAIL_USERNAME=tumbaltumbal11@gmail.com
|
||||
#MAIL_PASSWORD="pxrrksphndlvkgca"
|
||||
|
||||
#MAIL_USERNAME=noreply@primayahospital.com
|
||||
#MAIL_PASSWORD="eqplciswxchsaart"
|
||||
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_HOST=smtp.mailtrap.io
|
||||
MAIL_PORT=2525
|
||||
MAIL_USERNAME=b488d13fde4349
|
||||
MAIL_PASSWORD=63b64761d270ba
|
||||
MAIL_ENCRYPTION=tls
|
||||
|
||||
MAIL_ENCRYPTION=TLS
|
||||
MAIL_FROM_ADDRESS="hello@example.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
|
||||
PUSHER_APP_ID="app-id"
|
||||
PUSHER_APP_KEY="app-key"
|
||||
PUSHER_APP_SECRET="app-secret"
|
||||
PUSHER_HOST=localhost
|
||||
PUSHER_PORT=6001
|
||||
PUSHER_SCHEME=http
|
||||
# PUSHER_APP_CLUSTER=mt1
|
||||
|
||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||
|
||||
LMS_API_URL="http://lmsapi.primaya.id"
|
||||
|
||||
DUITKU_MERCHANT_KEY=
|
||||
DUITKU_MERCHANT_CODE=
|
||||
DUITKU_IS_SANDBOX=TRUE
|
||||
|
||||
WKHTML_PDF_BINARY=/var/www/aso/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64
|
||||
WKHTML_IMG_BINARY=
|
||||
59
.env.example
Executable file
59
.env.example
Executable file
@@ -0,0 +1,59 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=laravel
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=
|
||||
|
||||
OLDLMS_DB_CONNECTION=mysql
|
||||
OLDLMS_DB_HOST=127.0.0.1
|
||||
OLDLMS_DB_PORT=3306
|
||||
OLDLMS_DB_DATABASE=linksehat
|
||||
OLDLMS_DB_USERNAME=mysql
|
||||
OLDLMS_DB_PASSWORD=password
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=sync
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_HOST=mailhog
|
||||
MAIL_PORT=1025
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
MAIL_FROM_ADDRESS="hello@example.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
PUSHER_APP_ID=
|
||||
PUSHER_APP_KEY=
|
||||
PUSHER_APP_SECRET=
|
||||
PUSHER_APP_CLUSTER=mt1
|
||||
|
||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||
0
.gitattributes
vendored
Normal file → Executable file
0
.gitattributes
vendored
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
0
.styleci.yml
Normal file → Executable file
0
.styleci.yml
Normal file → Executable file
0
Modules/Client/Config/.gitkeep
Normal file → Executable file
0
Modules/Client/Config/.gitkeep
Normal file → Executable file
0
Modules/Client/Config/config.php
Normal file → Executable file
0
Modules/Client/Config/config.php
Normal file → Executable file
0
Modules/Client/Console/.gitkeep
Normal file → Executable file
0
Modules/Client/Console/.gitkeep
Normal file → Executable file
0
Modules/Client/Database/Migrations/.gitkeep
Normal file → Executable file
0
Modules/Client/Database/Migrations/.gitkeep
Normal file → Executable file
0
Modules/Client/Database/Seeders/.gitkeep
Normal file → Executable file
0
Modules/Client/Database/Seeders/.gitkeep
Normal file → Executable file
0
Modules/Client/Database/Seeders/ClientDatabaseSeeder.php
Normal file → Executable file
0
Modules/Client/Database/Seeders/ClientDatabaseSeeder.php
Normal file → Executable file
0
Modules/Client/Database/factories/.gitkeep
Normal file → Executable file
0
Modules/Client/Database/factories/.gitkeep
Normal file → Executable file
0
Modules/Client/Entities/.gitkeep
Normal file → Executable file
0
Modules/Client/Entities/.gitkeep
Normal file → Executable file
0
Modules/Client/Http/Controllers/.gitkeep
Normal file → Executable file
0
Modules/Client/Http/Controllers/.gitkeep
Normal file → Executable file
0
Modules/Client/Http/Controllers/Api/AuthController.php
Normal file → Executable file
0
Modules/Client/Http/Controllers/Api/AuthController.php
Normal file → Executable file
@@ -1,264 +0,0 @@
|
||||
<?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
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,275 +2,62 @@
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ClaimRequest;
|
||||
use Modules\Client\Transformers\ClaimReport\ShowResources;
|
||||
use Illuminate\Support\Facades\Crypt;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\File;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
class ClaimReportController extends Controller
|
||||
{
|
||||
public function claimStatus($corporateId)
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$requesteds = ClaimRequest::query()
|
||||
->whereHas('member', function ($query) use ($corporateId) {
|
||||
$query->whereHas('employeds', function ($corporateEmployee) use ($corporateId) {
|
||||
$corporateEmployee->where('corporate_id', $corporateId);
|
||||
});
|
||||
})
|
||||
->where('status', 'requested')
|
||||
->get();
|
||||
$approveds = ClaimRequest::query()
|
||||
->whereHas('member', function ($query) use ($corporateId) {
|
||||
$query->whereHas('employeds', function ($corporateEmployee) use ($corporateId) {
|
||||
$corporateEmployee->where('corporate_id', $corporateId);
|
||||
});
|
||||
})
|
||||
->whereHas('claim', fn ($query) => $query->where('status', 'approved'))
|
||||
->where('status', 'approved')
|
||||
->get();
|
||||
|
||||
$rejecteds = ClaimRequest::query()
|
||||
->whereHas('member', function ($query) use ($corporateId) {
|
||||
$query->whereHas('employeds', function ($corporateEmployee) use ($corporateId) {
|
||||
$corporateEmployee->where('corporate_id', $corporateId);
|
||||
});
|
||||
})
|
||||
->whereHas('claim', fn ($query) => $query->where('status', 'declined'))
|
||||
->where('status', 'approved')
|
||||
->get();
|
||||
|
||||
$disbrusments = ClaimRequest::query()
|
||||
->whereHas('member', function ($query) use ($corporateId) {
|
||||
$query->whereHas('employeds', function ($corporateEmployee) use ($corporateId) {
|
||||
$corporateEmployee->where('corporate_id', $corporateId);
|
||||
});
|
||||
})
|
||||
->whereHas('claim', fn ($query) => $query->where('status', 'disbrusmented'))
|
||||
->where('status', 'approved')
|
||||
->get();
|
||||
|
||||
return Helper::responseJson([
|
||||
'requesteds' => count($requesteds),
|
||||
'approveds' => count($approveds),
|
||||
'rejecteds' => count($rejecteds),
|
||||
'disbrusments' => count($disbrusments)
|
||||
]);
|
||||
}
|
||||
|
||||
public function claimDetail($corporate_id, $claimRequestId)
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$claimRequestId = Crypt::decrypt($claimRequestId);
|
||||
|
||||
$status = DB::table('claim_requests')
|
||||
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
->where('claim_requests.id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_requests.submission_date',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_requests.status = "requested" THEN "requested"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "approved" THEN "approved"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "declined" THEN "declined"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "disbrusmented" THEN "disbrusmented"
|
||||
/*WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "pending"*/
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "reviewed"
|
||||
ELSE ""
|
||||
END AS status
|
||||
')
|
||||
)
|
||||
->first();
|
||||
$results['status'] = $status;
|
||||
$timeline = DB::table('claim_logs')
|
||||
->where('claim_logs.claim_request_id', '=', $claimRequestId)
|
||||
->select(
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "Request"
|
||||
WHEN claim_logs.status = "reviewed" THEN "Review"
|
||||
WHEN claim_logs.status = "approved" THEN "Approval"
|
||||
WHEN claim_logs.status = "declined" THEN "Decline"
|
||||
ELSE "-"
|
||||
END AS txt_status
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "#159C9C"
|
||||
WHEN claim_logs.status = "reviewed" THEN "#0C53B7"
|
||||
WHEN claim_logs.status = "approved" THEN "#229A16"
|
||||
WHEN claim_logs.status = "declined" THEN "#FF4842"
|
||||
ELSE "-"
|
||||
END AS txt_status_color
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "#00AB5529"
|
||||
WHEN claim_logs.status = "reviewed" THEN "#1890FF29"
|
||||
WHEN claim_logs.status = "approved" THEN "#54D62C29"
|
||||
WHEN claim_logs.status = "declined" THEN "#FF48427A"
|
||||
ELSE "-"
|
||||
END AS txt_status_backgroundColor
|
||||
'),
|
||||
'claim_logs.date',
|
||||
'claim_logs.description',
|
||||
'claim_logs.status'
|
||||
)
|
||||
->orderBy('claim_logs.id', 'desc')
|
||||
->get();
|
||||
$results['timeline'] = $timeline;
|
||||
$request_files = DB::table('claim_request_files')
|
||||
->where('claim_request_files.claim_request_id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_request_files.*',
|
||||
DB::raw('(SELECT files.fileable_id FROM files WHERE files.fileable_id = claim_request_files.claim_request_id AND files.type = claim_request_files.type LIMIT 1) AS check_files'),
|
||||
)
|
||||
->get();
|
||||
$results['request_files'] = $request_files;
|
||||
$documents = DB::table('files')
|
||||
->where('fileable_type', 'App\Models\ClaimRequest')
|
||||
->where('fileable_id', $claimRequestId)
|
||||
->select('original_name', \DB::raw("CONCAT('" . env('APP_URL') . "/storage/', path) as path"), 'type')
|
||||
->orderBy('id', 'desc')
|
||||
->get();
|
||||
$results['documents'] = $documents;
|
||||
|
||||
return Helper::responseJson($results);
|
||||
//
|
||||
}
|
||||
|
||||
public function requestFiles(Request $request, $corporate_id, $claim_id)
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
$claim_id = Crypt::decrypt($claim_id);
|
||||
if ($request->hasFile('fileDiagnosis')) {
|
||||
foreach ($request->fileDiagnosis as $file) {
|
||||
$pathFile = File::storeFile('claim-diagnosis', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-diagnosis',
|
||||
'name' => File::getFileName('claim-diagnosis', $claim_id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('fileKondisis')) {
|
||||
foreach ($request->fileKondisis as $file) {
|
||||
$pathFile = File::storeFile('claim-kondisi', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-kondisi',
|
||||
'name' => File::getFileName('claim-kondisi', $claim_id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('fileResults')) {
|
||||
foreach ($request->fileResults as $file) {
|
||||
$pathFile = File::storeFile('claim-result', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-result',
|
||||
'name' => File::getFileName('claim-result', $claim_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: 'Invoice Success Uploaded');
|
||||
//
|
||||
}
|
||||
|
||||
public function claimDetailHistory($corporate_id, $claimRequestId)
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$claimRequestId = Crypt::decrypt($claimRequestId);
|
||||
|
||||
$member = DB::table('claim_requests')
|
||||
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
->where('claim_requests.id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_requests.code','members.member_id', 'members.name'
|
||||
)
|
||||
->first();
|
||||
$results['member'] = $member;
|
||||
$claim_item = DB::table('claim_items')
|
||||
->leftJoin('claims','claim_items.claim_id', '=', 'claims.id')
|
||||
->leftJoin('benefits', 'claim_items.claim_itemable_id', '=', 'benefits.id')
|
||||
->leftJoin('claim_requests', 'claims.claim_request_id', '=', 'claim_requests.id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
->where('claim_requests.id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_items.nominal_ditagihkan',
|
||||
'claim_items.nominal_dicover',
|
||||
'benefits.description',
|
||||
'claim_requests.submission_date'
|
||||
)
|
||||
->orderBy('claim_items.id', 'desc')
|
||||
->get();
|
||||
$results['claim_item'] = $claim_item;
|
||||
$tot_claim_item = DB::table('claim_items')
|
||||
->leftJoin('claims','claim_items.claim_id', '=', 'claims.id')
|
||||
->leftJoin('benefits', 'claim_items.claim_itemable_id', '=', 'benefits.id')
|
||||
->leftJoin('claim_requests', 'claims.claim_request_id', '=', 'claim_requests.id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
->where('claim_requests.id', '=', $claimRequestId)
|
||||
->select(
|
||||
DB::raw('SUM(claim_items.nominal_ditagihkan) AS nominal_ditagihkan'),
|
||||
DB::raw('SUM(claim_items.nominal_dicover) AS nominal_dicover'),
|
||||
DB::raw('(SUM(claim_items.nominal_ditagihkan) - SUM(claim_items.nominal_dicover)) AS difference'),
|
||||
)
|
||||
->groupBy('claim_items.id')
|
||||
->orderBy('claim_items.id', 'desc')
|
||||
->first();
|
||||
$results['tot_claim_item'] = $tot_claim_item;
|
||||
|
||||
|
||||
return Helper::responseJson($results);
|
||||
//
|
||||
}
|
||||
|
||||
public function show($corporateId, $claimRequestId)
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$data = ClaimRequest::query()
|
||||
->with([
|
||||
'histories:historiable_type,historiable_id,title,description,created_at',
|
||||
'member:id,person_id,name_prefix,name,name_suffix' => [
|
||||
'person:id,name_prefix,name,name_suffix,gender'
|
||||
],
|
||||
'claim:id,status',
|
||||
'claimResults',
|
||||
'claimConditions',
|
||||
'claimDiagnosis'
|
||||
])
|
||||
->find($claimRequestId, ['id', 'submission_date', 'member_id', 'claim_id', 'status']);
|
||||
|
||||
return Helper::responseJson(new ShowResources($data));
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,254 +0,0 @@
|
||||
<?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 = 'CP';
|
||||
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);
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
try {
|
||||
$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'),
|
||||
]);
|
||||
|
||||
$storage_path = storage_path() . "/app/public";
|
||||
$folder = "claim/";
|
||||
|
||||
if (is_dir($storage_path . "/" . $folder) == false) {
|
||||
mkdir($storage_path . "/" . $folder, 0770, true);
|
||||
}
|
||||
|
||||
if (isset($_FILES['laboratorium'])) {
|
||||
foreach ($_FILES['laboratorium']['error']["member_" .$member_id] as $key => $value) {
|
||||
if ($value == 0) {
|
||||
$new_file_name = "claim-result-" . time() . "-" . uniqid();
|
||||
$ekstension = "." . explode("/", $_FILES['laboratorium']['type']["member_" .$member_id][$key])[1];
|
||||
$pathFile = $folder . $new_file_name . $ekstension;
|
||||
|
||||
$tmp_name = $_FILES['laboratorium']['tmp_name']["member_" .$member_id][$key];
|
||||
$full_path = $_FILES['laboratorium']['full_path']["member_" .$member_id][$key];
|
||||
|
||||
if (move_uploaded_file($tmp_name, $storage_path . "/" . $pathFile)) {
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-result',
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_FILES['prescription'])) {
|
||||
foreach ($_FILES['prescription']['error']["member_" .$member_id] as $key => $value) {
|
||||
if ($value == 0) {
|
||||
$new_file_name = "claim-diagnosis-" . time() . "-" . uniqid();
|
||||
$ekstension = "." . explode("/", $_FILES['prescription']['type']["member_" .$member_id][$key])[1];
|
||||
$pathFile = $folder . $new_file_name . $ekstension;
|
||||
|
||||
$tmp_name = $_FILES['prescription']['tmp_name']["member_" .$member_id][$key];
|
||||
$full_path = $_FILES['prescription']['full_path']["member_" .$member_id][$key];
|
||||
|
||||
if (move_uploaded_file($tmp_name, $storage_path . "/" . $pathFile)) {
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-diagnosis',
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_FILES['invoice'])) {
|
||||
foreach ($_FILES['invoice']['error']["member_" .$member_id] as $key => $value) {
|
||||
if ($value == 0) {
|
||||
$new_file_name = "claim-kondisi-" . time() . "-" . uniqid();
|
||||
$ekstension = "." . explode("/", $_FILES['invoice']['type']["member_" .$member_id][$key])[1];
|
||||
$pathFile = $folder . $new_file_name . $ekstension;
|
||||
|
||||
$tmp_name = $_FILES['invoice']['tmp_name']["member_" .$member_id][$key];
|
||||
$full_path = $_FILES['invoice']['full_path']["member_" .$member_id][$key];
|
||||
|
||||
if (move_uploaded_file($tmp_name, $storage_path . "/" . $pathFile)) {
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-kondisi',
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
}
|
||||
catch (\Throwable $th) {
|
||||
DB::rollBack();
|
||||
|
||||
return Helper::responseJson(status: 'failed', statusCode: 500, message: $th->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -1,87 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Member;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\File;
|
||||
use App\Services\CorporateMemberService;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Client\Transformers\ClaimReport\MemberResources as ClaimReportMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberResources as ClaimSubmitMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberResources as DashboardMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberAlarmCenterResources as DashboardMemberAlarmResources;
|
||||
use Modules\Client\Transformers\DataMemberResource;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CorporateCurrentController extends Controller
|
||||
{
|
||||
public function __construct(public CorporateMemberService $corporateMemberService)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request, $id)
|
||||
{
|
||||
$corporates = Corporate::query()
|
||||
->with('currentPolicy', 'subCorporates')
|
||||
->withCount([
|
||||
'employees',
|
||||
'corporateBenefits',
|
||||
'corporatePlans',
|
||||
|
||||
// 'claims'
|
||||
])
|
||||
// ->where('type', 'corporate')
|
||||
->where('id', $id)
|
||||
->paginate(1);
|
||||
|
||||
return $corporates;
|
||||
}
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
|
||||
$validate = $request->validate([
|
||||
'reason' => 'required',
|
||||
]);
|
||||
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
//karena pake formdata
|
||||
$linkingRules = $request->linking_rules;
|
||||
$linkingRules = explode(',', $linkingRules);
|
||||
$corporate = Corporate::findOrFail($id);
|
||||
$corporate->fill($request->all());
|
||||
$corporate->linking_rules = $linkingRules;
|
||||
$corporate->save();
|
||||
|
||||
if ($request->hasFile('logo')) {
|
||||
$pathFileAvatar = File::storeFile('avatar', $corporate->id, $request->file('logo'));
|
||||
|
||||
$corporate->files()->updateOrCreate([
|
||||
'type' => 'avatar',
|
||||
'name' => File::getFileName('avatar', $corporate->id, $request->file('logo')),
|
||||
'extension' => $request->file('logo')->getClientOriginalExtension(),
|
||||
'path' => $pathFileAvatar,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
throw $e;
|
||||
}
|
||||
|
||||
return $corporate;
|
||||
}
|
||||
}
|
||||
0
Modules/Client/Http/Controllers/Api/CorporateDivisionController.php
Normal file → Executable file
0
Modules/Client/Http/Controllers/Api/CorporateDivisionController.php
Normal file → Executable file
5
Modules/Client/Http/Controllers/Api/CorporateManageController.php
Normal file → Executable file
5
Modules/Client/Http/Controllers/Api/CorporateManageController.php
Normal file → Executable file
@@ -37,10 +37,7 @@ class CorporateManageController extends Controller
|
||||
*/
|
||||
public function show($corporate_id)
|
||||
{
|
||||
$userLogin = Auth::user();
|
||||
$corporate = $userLogin->managedCorporates()->where('corporates.id', $corporate_id)->first();
|
||||
|
||||
return response()->json($corporate);
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
287
Modules/Client/Http/Controllers/Api/CorporateMemberController.php
Normal file → Executable file
287
Modules/Client/Http/Controllers/Api/CorporateMemberController.php
Normal file → Executable file
@@ -4,242 +4,109 @@ namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Member;
|
||||
use App\Models\Claim;
|
||||
use App\Models\ClaimRequest;
|
||||
use App\Models\RequestLog;
|
||||
use App\Services\CorporateMemberService;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Client\Transformers\ClaimReport\MemberResources as ClaimReportMemberResources;
|
||||
use Modules\Client\Transformers\AlarmCenter\DataListClaimMemberResource;
|
||||
use Modules\Client\Transformers\AlarmCenter\DataServiceMonitoring;
|
||||
use Modules\Client\Transformers\Dashboard\MemberResources as ClaimSubmitMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberResources as DashboardMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberAlarmCenterResources as DashboardMemberAlarmResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberEmployeeDataResources as DashboardMemberEmployeeDataResources;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
use Modules\Client\Transformers\EmployeeData\UserProfile\DataMemberResource as EmployeeDataProfileMemberResource;
|
||||
use Modules\Internal\Services\MemberEnrollmentService;
|
||||
use Modules\Client\Transformers\MemberResources;
|
||||
|
||||
class CorporateMemberController extends Controller
|
||||
{
|
||||
public $memberEnrollmentService;
|
||||
|
||||
public function __construct(public CorporateMemberService $corporateMemberService, MemberEnrollmentService $memberEnrollmentService)
|
||||
{
|
||||
$this->memberEnrollmentService = $memberEnrollmentService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request, $corporate_id)
|
||||
{
|
||||
switch ($request->input('type')) {
|
||||
case 'employee-data':
|
||||
$members = $this->corporateMemberService->getAllMemberEmployeeData($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberEmployeeDataResources::collection($members)));
|
||||
case 'claim-report':
|
||||
$members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(ClaimReportMemberResources::collection($members)));
|
||||
case 'claim-submit':
|
||||
$members = $this->corporateMemberService->getAllMemberClaimSubmits($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(ClaimSubmitMemberResources::collection($members)));
|
||||
case 'alarm-center':
|
||||
$members = $this->corporateMemberService->getAllMemberAlarmCenter($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberAlarmResources::collection($members)));
|
||||
case 'service-monitoring':
|
||||
$members = $this->corporateMemberService->getAllEncounter($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberAlarmResources::collection($members)));
|
||||
default:
|
||||
$members = $this->corporateMemberService->getAllMemberDashboards($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberResources::collection($members)));
|
||||
$limit = $request->has('per_page') ? $request->per_page : 10;
|
||||
|
||||
$members = Member::query()
|
||||
->whereHas('employeds', function ($corporateEmployee) use ($corporate_id) {
|
||||
$corporateEmployee->where('corporate_id', $corporate_id);
|
||||
})->when($request->input('search'), function ($query, $search) {
|
||||
$query->where('member_id', 'like', "%" . $search . "%")
|
||||
->orWhere('name', 'like', "%" . $search . "%");
|
||||
});
|
||||
|
||||
if ($request->input('claimMember') === 'false') {
|
||||
$members = $members->when($request->input('division'), function ($division, $division_id) {
|
||||
$division->whereHas('division', function ($corporateEmployee) use ($division_id) {
|
||||
$corporateEmployee->where('division_id', $division_id);
|
||||
});
|
||||
})->when($request->has('orderBy'), function ($query) use ($request) {
|
||||
$query->orderBy($request->orderBy, $request->order);
|
||||
});
|
||||
}
|
||||
// else {
|
||||
// $members = $members->get();
|
||||
|
||||
// return response()->json(MemberResources::collection($members));
|
||||
// }
|
||||
$members->with('currentPlan');
|
||||
$members->withSum('claims', 'total_claim');
|
||||
|
||||
$members = $members->paginate($limit);
|
||||
// return $members;
|
||||
|
||||
return response()->json(Helper::paginateResources(MemberResources::collection($members)));
|
||||
}
|
||||
|
||||
public function show($corporate_id, $person_id)
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$data = Member::query()
|
||||
->with(['person'])
|
||||
->where('person_id', $person_id)
|
||||
->whereHas('currentCorporate', function ($query) use ($corporate_id) {
|
||||
$query->where('corporate_id', $corporate_id);
|
||||
})
|
||||
->firstOrFail();
|
||||
|
||||
// Get Families
|
||||
$data->families = Member::query()
|
||||
->with(['person'])
|
||||
->where('principal_id', $data->member_id)
|
||||
->get();
|
||||
|
||||
return response()->json(EmployeeDataProfileMemberResource::make($data));
|
||||
return view('client::create');
|
||||
}
|
||||
|
||||
public function generateMemberList($corporate_id)
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
// Mendapatkan data yang akan diekspor (misalnya, dari database)
|
||||
$data = Member::with(['currentPlan', 'currentCorporate', 'division', 'employeds', 'currentPolicy'])
|
||||
// ->filter($request->all())
|
||||
// ->where('corporate_id', $corporate_id)
|
||||
->whereHas('employeds', function ($employeds) use ($corporate_id) {
|
||||
$employeds->where('corporate_id', $corporate_id);
|
||||
})->get()->toArray();
|
||||
// Membuat penulis entitas Spout
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
|
||||
// Membuka penulis untuk menulis ke file
|
||||
$writer->openToFile(public_path('files/CorporateMembershipList.xlsx'));
|
||||
// Menulis header kolom
|
||||
$headers_map_to_table_fields = $this->memberEnrollmentService->listing_doc_headers;
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields);
|
||||
|
||||
$writer->addRow($headerRow);
|
||||
|
||||
// Menulis data
|
||||
if (!empty($data)) {
|
||||
foreach ($data as $item) {
|
||||
$rowData = [
|
||||
$item['record_mode'], // Recode Mode
|
||||
$item['record_type'], // Recode Type
|
||||
$item['payor_id'], // Payor ID
|
||||
$item['member_id'], // Member ID
|
||||
$item['principal_id'], // Mapping ID
|
||||
NULL, // Link Medis Member ID
|
||||
$item['current_corporate']['code'] ?? null, // Corporate ID
|
||||
$item['employeds'][0]['nik'] ?? null, // NIK
|
||||
$item['division']['code'] ?? null, // Devision
|
||||
$item['employeds'][0]['branch_code'] ?? null, // Branch Code
|
||||
$item['bank_info'], // Bank Info
|
||||
$item['language'], // Language
|
||||
null, // Type of Work
|
||||
$item['race'], // Race
|
||||
$item['current_policy']['code'] ?? null, // Policy Number
|
||||
$item['marital_status'], // Marital Status
|
||||
$item['relation_with_principal'], // Relationship
|
||||
str_replace('-', '', $item['members_effective_date']), // Member effective date
|
||||
str_replace('-', '', $item['members_expire_date']), // Member expiry date
|
||||
NULL, // Faskes FKTP (First Level Provider) or Individual preferred provider
|
||||
NULL, // Faskes FKRTL (Next Level Provider) or Individual group preferred provider
|
||||
$item['bpjs_class'], // The Right Classes Room of BPJS Participants
|
||||
NULL, // Name of Faskes
|
||||
NULL, // Rule BPJSK
|
||||
NULL, // Internal Use
|
||||
$item['full_name'], // Member Name
|
||||
$item['address1'], // Address1
|
||||
$item['address2'], // Address2
|
||||
$item['address3'], // Address3
|
||||
$item['address4'], // Address4
|
||||
$item['city'], // City
|
||||
NULL, // State
|
||||
$item['postal_code'], // Post Code
|
||||
NULL, // Telephone - Mobile
|
||||
NULL, // Telephone - Res
|
||||
NULL, // Telephone - Office
|
||||
$item['nric'], // NRIC
|
||||
$item['passport_no'], // Passport No
|
||||
$item['passport_country'], // Passport Country
|
||||
$item['email'], // Email
|
||||
$item['identification_code'], // Identification Code
|
||||
$item['birth_date'], // Date of Birth
|
||||
$item['gender_code'], // Sex
|
||||
NULL, // Internal Use
|
||||
$item['current_plan']['code'] ?? null, // Plan-ID
|
||||
NULL, // Employment-Status
|
||||
NULL, // Internal Use
|
||||
NULL, // Internal Use
|
||||
NULL, // Internal Use
|
||||
str_replace('-', '', $item['terminated_date']), // Date Terminated
|
||||
$item['pre_existing'], // Pre Existing
|
||||
$item['bpjs_id'], // BPJS ID
|
||||
$item['endorsement_date'], // Endorsement Date
|
||||
$item['remarks'], // Remarks
|
||||
NULL, // Internal Use
|
||||
NULL, // Member Since
|
||||
NULL, // Internal Use
|
||||
$item['policy_in_force'], // Policy Inforce
|
||||
NULL, // Member Suspended
|
||||
str_replace('-', '', $item['activation_date']), // Activation Date
|
||||
NULL, // Internal Use
|
||||
$item['start_no_claim'], // StartNoClaim
|
||||
$item['end_no_claim'], // EndNoClaim
|
||||
NULL, // Option Mode
|
||||
];
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
}
|
||||
|
||||
// Menutup penulis
|
||||
$writer->close();
|
||||
// dd('test');
|
||||
// Mengembalikan response untuk mengunduh file
|
||||
$filePath = public_path('files/CorporateMembershipList.xlsx');
|
||||
// dd($filePath);
|
||||
// Mengembalikan response untuk mengunduh file
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Corporate Plan & Benefit List " . date('Y-m-d h:i:s'),
|
||||
"file_url" => url('files/CorporateMembershipList.xlsx')
|
||||
]);
|
||||
//
|
||||
}
|
||||
|
||||
public function showPerMember(Request $request, $corporate_id, $member_id)
|
||||
/**
|
||||
* Show the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
$per_page = $request->has('per_page') ? $request->input('per_page') : 10;
|
||||
|
||||
$data = Member::query()
|
||||
->with(['requestLogs'])
|
||||
->whereHas('currentCorporate', function ($query) use ($corporate_id) {
|
||||
$query->where('corporate_id', $corporate_id);
|
||||
})
|
||||
->find($member_id);
|
||||
|
||||
return response()->json(['full_name' => $data->full_name ?? null, 'paginations' => Helper::paginateResources(DataListClaimMemberResource::collection($data->requestLogs()->paginate($per_page)))]);
|
||||
return view('client::show');
|
||||
}
|
||||
|
||||
public function serviceMonitoring(int $corporate_id, int $request_log_id)
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
$data = RequestLog::query()
|
||||
->with([
|
||||
'member:id,member_id,person_id,birth_date,email,name_prefix,name,name_suffix' => [
|
||||
'currentCorporate',
|
||||
'person:id,email,name_prefix,name,name_suffix,phone'
|
||||
],
|
||||
'organization:id,name',
|
||||
'requestLogBenefits:id,request_log_id,benefit_id,amount_incurred,amount_approved,amount_not_approved,excess_paid,keterangan' => [
|
||||
'benefit'
|
||||
],
|
||||
'requestLogDailyMonitorings:id,request_log_id,created_at,subject,body_temperature,sistole,diastole,respiration_rate,analysis,lab_date,provider,examination' => [
|
||||
'requestLogMedicalPlans:request_log_daily_monitoring_id,plan,type'
|
||||
],
|
||||
'service:code,name',
|
||||
])
|
||||
->find($request_log_id, ['id', 'submission_date', 'discharge_date', 'member_id', 'service_code', 'organization_id']);
|
||||
return view('client::edit');
|
||||
}
|
||||
|
||||
$dataBenefit = [];
|
||||
if (count($data->requestLogBenefits) > 0) {
|
||||
$totalIncurred = 0;
|
||||
$totalApprove = 0;
|
||||
$totalNotApporve = 0;
|
||||
$totalExcess = 0;
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
foreach ($data->requestLogBenefits as $itemBenefit) {
|
||||
$totalIncurred += $itemBenefit->amount_incurred;
|
||||
$totalApprove += $itemBenefit->amount_approved;
|
||||
$totalNotApporve += $itemBenefit->amount_not_approved;
|
||||
$totalExcess += $itemBenefit->excess_paid;
|
||||
}
|
||||
|
||||
$dataBenefit['totalIncurred'] = $totalIncurred;
|
||||
$dataBenefit['totalApprove'] = $totalApprove;
|
||||
$dataBenefit['totalNotApprove'] = $totalNotApporve;
|
||||
$dataBenefit['totalExcess'] = $totalExcess;
|
||||
}
|
||||
|
||||
$data->benefitTotal = $dataBenefit;
|
||||
|
||||
return Helper::responseJson(DataServiceMonitoring::make($data));
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
23
Modules/Client/Http/Controllers/Api/CorporatePolicyController.php
Normal file → Executable file
23
Modules/Client/Http/Controllers/Api/CorporatePolicyController.php
Normal file → Executable file
@@ -2,12 +2,11 @@
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Modules\Client\Transformers\Dashboard\LimitResources;
|
||||
use Modules\Client\Transformers\DashboardResources;
|
||||
|
||||
class CorporatePolicyController extends Controller
|
||||
{
|
||||
@@ -15,15 +14,25 @@ class CorporatePolicyController extends Controller
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index($corporate_id)
|
||||
public function index(Request $request, $corporate_id)
|
||||
{
|
||||
$currentCorporate = Auth::user()->managedCorporates()
|
||||
->with(['currentPolicy'])
|
||||
$user = Auth::user();
|
||||
$currentCorporate = $user->managedCorporates()
|
||||
->with(['currentPolicy', 'employees'])
|
||||
->find($corporate_id);
|
||||
|
||||
$data = LimitResources::make($currentCorporate);
|
||||
$data = DashboardResources::make($currentCorporate);
|
||||
|
||||
return Helper::responseJson($data);
|
||||
return response()->json($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('client::create');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Person;
|
||||
use App\Models\Member;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
class DataController extends Controller
|
||||
{
|
||||
public function show($id)
|
||||
{
|
||||
try {
|
||||
$data = Person::findOrFail($id);
|
||||
return response()->json($data);
|
||||
} catch (\Exception $e) {
|
||||
return response()->json(['error' => 'Member not found'], 404);
|
||||
}
|
||||
}
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$data = Person::findOrFail($id);
|
||||
$data->update($request->all());
|
||||
|
||||
return response()->json(['message' => 'Data updated successfully']);
|
||||
} catch (\Exception $e) {
|
||||
return response()->json(['error' => 'Failed to update data'], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function updateFamily(Request $request)
|
||||
{
|
||||
try {
|
||||
// Ambil data keluarga dari payload
|
||||
$familyData = $request->json()->all();
|
||||
|
||||
// Loop melalui data keluarga
|
||||
foreach ($familyData as $familyMember) {
|
||||
// Ambil ID anggota keluarga dari payload
|
||||
$person_id = $familyMember['person_id'];
|
||||
|
||||
// Perbarui data anggota keluarga sesuai dengan payload
|
||||
Member::where('person_id', $person_id)->update([
|
||||
'name' => $familyMember['name'],
|
||||
'email' => $familyMember['email'],
|
||||
'relation_with_principal' => $familyMember['relation_with_principal'],
|
||||
'birth_date' => $familyMember['birth_date'],
|
||||
]);
|
||||
|
||||
Person::where('id', $person_id)->update([
|
||||
'name' => $familyMember['name'],
|
||||
'email' => $familyMember['email'],
|
||||
'phone' => $familyMember['phone'],
|
||||
'birth_date' => $familyMember['birth_date']
|
||||
]);
|
||||
}
|
||||
|
||||
// Respon sukses jika pembaruan berhasil
|
||||
return response()->json([$person_id => 'Data keluarga berhasil diperbarui'], 200);
|
||||
} catch (\Exception $e) {
|
||||
// Tangani kesalahan jika ada yang terjadi
|
||||
return response()->json(['error' => 'Gagal memperbarui data keluarga: ' . $e->getMessage()], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Member;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
class MemberController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
return Member::query()
|
||||
->when($request->search, function ($query, $search) {
|
||||
return $query->where('name', 'LIKE', '%' . $search . '%')
|
||||
->orWhere('member_id', 'LIKE', '%' . $search . '%');
|
||||
})
|
||||
->with('currentPlan', 'currentCorporate')
|
||||
->paginate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('internal::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)
|
||||
{
|
||||
return view('internal::show');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
return view('internal::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 benefits($member_id)
|
||||
{
|
||||
$member = Member::findOrFail($member_id);
|
||||
|
||||
return response()->json($member->currentPlan->benefits()->select(['description', 'code', 'id'])->get());
|
||||
}
|
||||
}
|
||||
@@ -1,102 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\CorporatePolicy;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Modules\Client\Transformers\Dashboard\TopUpLimitResources;
|
||||
|
||||
class TopUpController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index($corporate_id)
|
||||
{
|
||||
$data = Auth::user()
|
||||
->managedCorporates()
|
||||
->with(['currentPolicy'])
|
||||
->withCount(['employees', 'claims' => function ($query) {
|
||||
$query->where('claims.status', 'paid');
|
||||
}])
|
||||
->find($corporate_id);
|
||||
|
||||
return Helper::responseJson(TopUpLimitResources::make($data));
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request, $corporate_id)
|
||||
{
|
||||
|
||||
$data = $request->validate([
|
||||
'topup' => 'required|numeric',
|
||||
]);
|
||||
|
||||
$corporatePolicy = CorporatePolicy::query()->where('corporate_id', $corporate_id)->firstOrFail();
|
||||
if (!$corporatePolicy) {
|
||||
return response()->json(['message' => 'Corporate policy not found'], 404);
|
||||
}
|
||||
|
||||
$corporatePolicy->total_premi += $data['topup'];
|
||||
$corporatePolicy->save();
|
||||
|
||||
return response()->json(['message' => 'Amount added to total_premi successfully'], 200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
return view('client::show');
|
||||
}
|
||||
|
||||
public function get($corporate_id)
|
||||
{
|
||||
$data = CorporatePolicy::query()
|
||||
->where('corporate_id', $corporate_id)
|
||||
->with(['currentPolicy', 'employees'])
|
||||
->withCount(['employees', 'claims' => function ($query) {
|
||||
$query->where('claims.status', 'paid');
|
||||
}])
|
||||
->first();
|
||||
|
||||
if (!$data) {
|
||||
return response()->json(['message' => 'Corporate policy not found'], 404);
|
||||
}
|
||||
|
||||
return Helper::responseJson(TopUpLimitResources::make($data));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
0
Modules/Client/Http/Controllers/Api/UserController.php
Normal file → Executable file
0
Modules/Client/Http/Controllers/Api/UserController.php
Normal file → Executable file
0
Modules/Client/Http/Controllers/ClientController.php
Normal file → Executable file
0
Modules/Client/Http/Controllers/ClientController.php
Normal file → Executable file
0
Modules/Client/Http/Middleware/.gitkeep
Normal file → Executable file
0
Modules/Client/Http/Middleware/.gitkeep
Normal file → Executable file
0
Modules/Client/Http/Requests/.gitkeep
Normal file → Executable file
0
Modules/Client/Http/Requests/.gitkeep
Normal file → Executable file
0
Modules/Client/Providers/.gitkeep
Normal file → Executable file
0
Modules/Client/Providers/.gitkeep
Normal file → Executable file
0
Modules/Client/Providers/ClientServiceProvider.php
Normal file → Executable file
0
Modules/Client/Providers/ClientServiceProvider.php
Normal file → Executable file
0
Modules/Client/Providers/RouteServiceProvider.php
Normal file → Executable file
0
Modules/Client/Providers/RouteServiceProvider.php
Normal file → Executable file
0
Modules/Client/Resources/assets/.gitkeep
Normal file → Executable file
0
Modules/Client/Resources/assets/.gitkeep
Normal file → Executable file
0
Modules/Client/Resources/assets/js/app.js
Normal file → Executable file
0
Modules/Client/Resources/assets/js/app.js
Normal file → Executable file
0
Modules/Client/Resources/assets/sass/app.scss
Normal file → Executable file
0
Modules/Client/Resources/assets/sass/app.scss
Normal file → Executable file
0
Modules/Client/Resources/lang/.gitkeep
Normal file → Executable file
0
Modules/Client/Resources/lang/.gitkeep
Normal file → Executable file
0
Modules/Client/Resources/views/.gitkeep
Normal file → Executable file
0
Modules/Client/Resources/views/.gitkeep
Normal file → Executable file
0
Modules/Client/Resources/views/index.blade.php
Normal file → Executable file
0
Modules/Client/Resources/views/index.blade.php
Normal file → Executable file
0
Modules/Client/Resources/views/layouts/master.blade.php
Normal file → Executable file
0
Modules/Client/Resources/views/layouts/master.blade.php
Normal file → Executable file
0
Modules/Client/Routes/.gitkeep
Normal file → Executable file
0
Modules/Client/Routes/.gitkeep
Normal file → Executable file
35
Modules/Client/Routes/api.php
Normal file → Executable file
35
Modules/Client/Routes/api.php
Normal file → Executable file
@@ -4,16 +4,8 @@ use Modules\Client\Http\Controllers\Api\AuthController;
|
||||
use Modules\Client\Http\Controllers\Api\CorporateDivisionController;
|
||||
use Modules\Client\Http\Controllers\Api\CorporateManageController;
|
||||
use Modules\Client\Http\Controllers\Api\CorporateMemberController;
|
||||
use Modules\Client\Http\Controllers\Api\CorporateCurrentController;
|
||||
use Modules\Client\Http\Controllers\Api\MemberController;
|
||||
use Modules\Client\Http\Controllers\Api\CorporatePolicyController;
|
||||
use Modules\Client\Http\Controllers\Api\UserController;
|
||||
use Modules\Client\Http\Controllers\Api\ClaimController;
|
||||
use Modules\Client\Http\Controllers\Api\TopUpController;
|
||||
use Modules\Internal\Http\Controllers\ClaimEncounterController;
|
||||
use Modules\Client\Http\Controllers\Api\ClaimReportController;
|
||||
use Modules\Client\Http\Controllers\Api\ClaimRequestController;
|
||||
use Modules\Client\Http\Controllers\Api\DataController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -36,39 +28,12 @@ Route::prefix('client')->group(function () {
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
|
||||
Route::get('user', [UserController::class, 'index']);
|
||||
Route::get('data/{id}', [DataController::class, 'show']);
|
||||
Route::put('data/{id}', [DataController::class, 'update']);
|
||||
Route::post('update-family', [DataController::class, 'updateFamily']);
|
||||
|
||||
Route::get('corporate-manage', [CorporateManageController::class, 'index']);
|
||||
Route::get('corporate-manage/{corporate_id}', [CorporateManageController::class, 'show']);
|
||||
Route::prefix('{corporate_id}')->group(function () {
|
||||
Route::post('search-member', [MemberController::class, 'index']);
|
||||
Route::get('policy', [CorporatePolicyController::class, 'index']);
|
||||
Route::get('division', [CorporateDivisionController::class, 'index']);
|
||||
Route::get('members', [CorporateMemberController::class, 'index']);
|
||||
Route::get('members/{id}', [CorporateMemberController::class, 'show']);
|
||||
Route::get('export-members/list', [CorporateMemberController::class, 'generateMemberList']);
|
||||
Route::get('alarm-center-members/{id}', [CorporateMemberController::class, 'showPerMember']);
|
||||
Route::get('service-monitoring/{request_log_id}', [CorporateMemberController::class, 'serviceMonitoring']);
|
||||
Route::get('claims/status', [ClaimController::class, 'status']);
|
||||
Route::get('claims', [ClaimController::class, 'index']);
|
||||
Route::get('claims/export', [ClaimController::class, 'export']);
|
||||
Route::get('claims/{claim_id}/encounters', [ClaimEncounterController::class, 'getEncounterData']);
|
||||
Route::get('topup', [TopUpController::class, 'index']);
|
||||
// Route::get('topup', [TopUpController::class, 'get']);
|
||||
Route::post('topup', [TopUpController::class, 'store']);
|
||||
Route::get('claim-report/claim-status', [ClaimReportController::class, 'claimStatus']);
|
||||
Route::get('claim-report/detail/{id}', [ClaimReportController::class, 'claimDetail']);
|
||||
Route::get('claim-report/detail-history/{id}', [ClaimReportController::class, 'claimDetailHistory']);
|
||||
Route::post('claim-report/{id}/request-files', [ClaimReportController::class, 'requestFiles']);
|
||||
|
||||
Route::get('corporate', [CorporateCurrentController::class, 'index']);
|
||||
Route::put('corporate-update', [CorporateCurrentController::class, 'update']);
|
||||
});
|
||||
Route::get('claims/{id}', [ClaimController::class, 'show']);
|
||||
|
||||
Route::post('claim-requests', [ClaimRequestController::class, 'store'])->name('claim-requests.store');
|
||||
Route::post('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show');
|
||||
});
|
||||
});
|
||||
|
||||
0
Modules/Client/Routes/web.php
Normal file → Executable file
0
Modules/Client/Routes/web.php
Normal file → Executable file
0
Modules/Client/Tests/Feature/.gitkeep
Normal file → Executable file
0
Modules/Client/Tests/Feature/.gitkeep
Normal file → Executable file
0
Modules/Client/Tests/Unit/.gitkeep
Normal file → Executable file
0
Modules/Client/Tests/Unit/.gitkeep
Normal file → Executable file
@@ -1,41 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\AlarmCenter;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\Service;
|
||||
|
||||
class DataListClaimMemberResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$serviceData = Service::where('code', $this->service_code)->first();
|
||||
if ($serviceData) {
|
||||
$serviceName = $serviceData->name;
|
||||
} else {
|
||||
$serviceName = $this->service_cod;
|
||||
}
|
||||
|
||||
if ($this->status == 'approved' && $this->status_final_log ){
|
||||
$status = 'Done';
|
||||
} else if ($this->status == 'declined' || $this->status_final_log == 'declined') {
|
||||
$status = 'Declined';
|
||||
} else {
|
||||
$status = 'Ongoing';
|
||||
}
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'admission_date' => $this->submission_date ?? null,
|
||||
'discharge_date' => $this->discharge_date ?? null,
|
||||
'code' => $this->code ?? null,
|
||||
'service_type' => $serviceName,
|
||||
'status' => $status,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,103 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\AlarmCenter;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Carbon;
|
||||
|
||||
class DataServiceMonitoring extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'companyName' => $this->member->currentCorporate->name ?? null,
|
||||
'serviceCode' => $this->service_code ?? null,
|
||||
'memberId' => $this->member->member_id ?? null,
|
||||
'fullName' => $this->member->full_name ?? null,
|
||||
'dateOfBirth' => $this->member->birth_date ?? null,
|
||||
'phoneNumber' => $this->person->phone ?? null,
|
||||
'email' => $this->member->email ?? ($this->member->person->email ?? null),
|
||||
'serviceName' => $this->service->name ?? ($this->service_code ?? null),
|
||||
'benefits' => collect($this->requestLogBenefits)->map(function ($requestLogBenefit) {
|
||||
return [
|
||||
'amountIncurred' => $requestLogBenefit->amount_incurred,
|
||||
'amountApproved' => $requestLogBenefit->amount_approved,
|
||||
'amountNotAprroved' => $requestLogBenefit->amount_not_approved,
|
||||
'excessPaid' => $requestLogBenefit->excess_paid,
|
||||
'description' => $requestLogBenefit->keterangan,
|
||||
'name' => $requestLogBenefit->benefit->description,
|
||||
];
|
||||
})->all() ?? null,
|
||||
'benefitTotal' => $this->benefitTotal ?? null,
|
||||
'hospital' => $this->organization->name ?? null,
|
||||
'admissionDate' => $this->submission_date ?? null,
|
||||
'dischargeDate' => $this->discharge_date ?? null,
|
||||
'dailyMonitorings' => $this->when($this->service_code === 'IP', collect($this->requestLogDailyMonitorings)
|
||||
->groupBy(function ($requestLogDailyMonitoring) {
|
||||
return $requestLogDailyMonitoring->created_at->format('d M Y');
|
||||
})
|
||||
->map(function ($groupedItems) {
|
||||
return collect($groupedItems)
|
||||
->map(function ($requestLogDailyMonitoring) {
|
||||
return [
|
||||
'time' => $requestLogDailyMonitoring->created_at->format('H:i') ?? null,
|
||||
'status' => 'Done' ?? null,
|
||||
'subject' => $requestLogDailyMonitoring->subject ?? null,
|
||||
'bodyTemperature' => $requestLogDailyMonitoring->body_temperature ?? null,
|
||||
'sistole' => $requestLogDailyMonitoring->sistole . 'mm[Hg]' ?? null,
|
||||
'diastole' => $requestLogDailyMonitoring->diastole . 'mm[Hg]' ?? null,
|
||||
'respirationRate' => $requestLogDailyMonitoring->respiration_rate . '/min' ?? null,
|
||||
'analysis' => $requestLogDailyMonitoring->analysis ?? null,
|
||||
'complaints' => $requestLogDailyMonitoring->complaints ?? null,
|
||||
'plans' => $this->when($requestLogDailyMonitoring->requestLogMedicalPlans, collect($requestLogDailyMonitoring->requestLogMedicalPlans)
|
||||
->map(function ($requestLogMedicalPlan) {
|
||||
return [
|
||||
'type' => $requestLogMedicalPlan->type,
|
||||
'plan' => $requestLogMedicalPlan->plan
|
||||
];
|
||||
})
|
||||
->sortBy('type')
|
||||
->all()) ?? null,
|
||||
];
|
||||
})
|
||||
->sortByDesc(function ($item) {
|
||||
return $item['time'];
|
||||
})
|
||||
->values();
|
||||
})
|
||||
->sortByDesc(function ($groupedItems, $date) {
|
||||
return Carbon::createFromFormat('d M Y', $date)->format('Y-m-d');
|
||||
})
|
||||
->all()) ?? null,
|
||||
'laboratoriumResults' => $this->whenLoaded('requestLogDailyMonitorings', collect($this->requestLogDailyMonitorings)
|
||||
->groupBy(function ($requestLogDailyMonitoring) {
|
||||
return Carbon::parse($requestLogDailyMonitoring->lab_date)->format('d M Y');
|
||||
})
|
||||
->map(function ($groupedItems) {
|
||||
return collect($groupedItems)
|
||||
->map(function ($requestLogDailyMonitoring) {
|
||||
return [
|
||||
'code' => $requestLogDailyMonitoring->code,
|
||||
'date' => Carbon::parse($requestLogDailyMonitoring->lab_date)->format('d M Y') ?? null,
|
||||
'examination' => $requestLogDailyMonitoring->examination ?? null,
|
||||
'location' => $requestLogDailyMonitoring->provider ?? null,
|
||||
];
|
||||
})
|
||||
->sortByDesc(function ($item) {
|
||||
return $item['code'];
|
||||
})
|
||||
->values();
|
||||
})
|
||||
->sortByDesc(function ($groupedItems, $date) {
|
||||
return Carbon::createFromFormat('d M Y', $date)->format('Y-m-d');
|
||||
})
|
||||
->all()) ?? null
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\ClaimReport;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class ClaimReportFileShowResources extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'fileName' => $this->name,
|
||||
'fileUrl' => url(Storage::url($this->path))
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\ClaimReport;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Facades\Crypt;
|
||||
|
||||
class MemberResources extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'code' => $this->code,
|
||||
'member_id' => $this->member_id,
|
||||
'full_name' => $this->full_name,
|
||||
'division_name' => $this->division_name ?? '',
|
||||
'status' => $this->status,
|
||||
'claimRequestId' => Crypt::encrypt($this->claim_request_id),
|
||||
'submission_date' => $this->submission_date,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\ClaimReport;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ShowResources extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'claimRequestId' => $this->id,
|
||||
'claimId' => $this->claim_id,
|
||||
'submissionDate' => $this->submission_date,
|
||||
'histories' => $this->whenLoaded('histories'),
|
||||
'fullName' => $this->whenLoaded('member', $this->member->full_name),
|
||||
'status' => $this->status,
|
||||
'files' => [
|
||||
'claimResults' => ClaimReportFileShowResources::collection($this->whenLoaded('claimResults')),
|
||||
'claimConditions' => ClaimReportFileShowResources::collection($this->whenLoaded('claimConditions')),
|
||||
'claimDiagnosis' => ClaimReportFileShowResources::collection($this->whenLoaded('claimDiagnosis'))
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ClaimShowResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$data = parent::toArray($request);
|
||||
// $data['']
|
||||
$data['benefit_items'] = $this->items
|
||||
->filter(function ($item) {
|
||||
return $item->claim_itemable_type == Benefit::class;
|
||||
})
|
||||
->map(function ($item) {
|
||||
$itemData = $item->claim_itemable->toArray();
|
||||
$itemData['nominal_dicover'] = $item['nominal_dicover'] ?? 0;
|
||||
$itemData['nominal_ditagihkan'] = $item['nominal_ditagihkan'] ?? 0;
|
||||
$itemData['nominal_total'] = $item['nominal_total'] ?? 0;
|
||||
|
||||
// For React Frotnend
|
||||
$itemData['biaya_diajukan'] = $itemData['nominal_ditagihkan'];
|
||||
$itemData['biaya_disetujui'] = $itemData['nominal_dicover'];
|
||||
|
||||
return $itemData;
|
||||
});
|
||||
|
||||
$data['primary_diagnosis'] = $this->diagnoses->filter(function ($diagnosis) {
|
||||
return $diagnosis->type == 'primary';
|
||||
})->values();
|
||||
$data['secondary_diagnosis'] = $this->diagnoses->filter(function ($diagnosis) {
|
||||
return $diagnosis->type == 'secondary';
|
||||
})->values();
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
<?php
|
||||
namespace Modules\Client\Transformers\Dashboard;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class MemberAlarmCenterResources extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'personId' => $this->person_id,
|
||||
'memberId' => $this->member_id,
|
||||
'fullName' => $this->full_name,
|
||||
'service' => $this->service_code,
|
||||
'start_date' => $this->members_effective_date,
|
||||
'end_date' => $this->members_expire_date,
|
||||
'status' => $this->active,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\Dashboard;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class MemberEmployeeDataResources extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'personId' => $this->person_id,
|
||||
'memberId' => $this->member_id,
|
||||
'fullName' => $this->full_name,
|
||||
// 'service' => $this->service_code,
|
||||
'start_date' => $this->start_date,
|
||||
'end_date' => $this->end_date,
|
||||
'status' => $this->active,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\Dashboard;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class TopUpLimitResources extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$myLimitBalance = (int)$this->currentPolicy->limit_balance;
|
||||
$myLimitTotal = (int)$this->currentPolicy->total_premi;
|
||||
|
||||
return [
|
||||
'companyName' => $this->name,
|
||||
'policyNumber' => $this->currentPolicy->code,
|
||||
'totalMembers' => $this->employees_count,
|
||||
'totalCases' => $this->claims_count,
|
||||
'myLimit' => [
|
||||
'balance' => $myLimitBalance,
|
||||
'total' => $myLimitTotal,
|
||||
'percentage' => $myLimitTotal ? round(($myLimitBalance / $myLimitTotal) * 100, 2) : 0,
|
||||
],
|
||||
'maxTopUp' => ($myLimitTotal - $myLimitBalance)
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\Dashboard;
|
||||
namespace Modules\Client\Transformers;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class LimitResources extends JsonResource
|
||||
class DashboardResources extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
@@ -21,15 +22,17 @@ class LimitResources extends JsonResource
|
||||
$lockPercentage = (int)$this->currentPolicy->minimal_stop_service_percentage;
|
||||
|
||||
return [
|
||||
'myLimit' => [
|
||||
'balance' => $myLimitBalance,
|
||||
'total' => $myLimitTotal,
|
||||
'percentage' => $myLimitTotal ? round(($myLimitBalance / $myLimitTotal) * 100, 2) : 0,
|
||||
'policy' => [
|
||||
'myLimit' => [
|
||||
'balance' => $myLimitBalance,
|
||||
'total' => $myLimitTotal,
|
||||
'percentage' => $myLimitTotal ? (($myLimitBalance / $myLimitTotal) * 100) : 0,
|
||||
],
|
||||
'lockLimit' => [
|
||||
'balance' => $lockBalance,
|
||||
'percentage' => $lockPercentage
|
||||
]
|
||||
],
|
||||
'lockLimit' => [
|
||||
'balance' => $lockBalance,
|
||||
'percentage' => $lockPercentage
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,92 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class DataMemberResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
// return parent::toArray($request);
|
||||
$data = [
|
||||
'id' => $this->id,
|
||||
'person_id' => $this->person_id,
|
||||
'user_id' => $this->user_id,
|
||||
'member_id' => $this->member_id,
|
||||
'payor_id' => $this->payor_id,
|
||||
'name_prefix' => $this->name_prefix,
|
||||
'name' => $this->name,
|
||||
'name_suffix' => $this->name_suffix,
|
||||
'birth_date' => $this->birth_date,
|
||||
'birth_place' => $this->person->birth_place,
|
||||
'last_weight_kg' => $this->person->last_weight_kg,
|
||||
'last_height_cm'=> $this->person->last_height_cm,
|
||||
'phone' => $this->person->phone,
|
||||
'nik' => $this->person->nik,
|
||||
'religion' => $this->person->religion,
|
||||
'marital_status' => $this->person->marital_status,
|
||||
'last_education' => $this->person->last_education,
|
||||
'current_employment' => $this->person->current_employment,
|
||||
'main_address_id' => $this->person->currentAddress->text,
|
||||
'family' => $this->family,
|
||||
'claim_history' => $this->claim_history,
|
||||
'gender' => $this->gender,
|
||||
'language' => $this->language,
|
||||
'race' => $this->race,
|
||||
'record_type' => $this->record_type,
|
||||
'principal_id' => $this->principal_id,
|
||||
'relation_with_principal' => $this->relation_with_principal,
|
||||
'bpjs_class' => $this->bpjs_class,
|
||||
'nric' => $this->nric,
|
||||
'email' => $this->email,
|
||||
'bank_info' => $this->bank_info,
|
||||
'agent_code' => $this->agent_code,
|
||||
'address1' => $this->address1,
|
||||
'address2' => $this->address2,
|
||||
'address3' => $this->address3,
|
||||
'address4' => $this->address4,
|
||||
'city' => $this->city,
|
||||
'state' => $this->state,
|
||||
'postal_code' => $this->postal_code,
|
||||
'record_mode' => $this->record_mode,
|
||||
'telephone_mobile' => $this->telephone_mobile,
|
||||
'telephone_res' => $this->telephone_res,
|
||||
'telephone_office' => $this->telephone_office,
|
||||
'passport_no' => $this->passport_no,
|
||||
'passport_country' => $this->passport_country,
|
||||
'identification_code' => $this->identification_code,
|
||||
'pre_existing' => $this->pre_existing,
|
||||
'bpjs_id' => $this->bpjs_id,
|
||||
'endorsement_date' => $this->endorsement_date,
|
||||
'members_effective_date' => $this->members_effective_date,
|
||||
'members_expire_date' => $this->members_expire_date,
|
||||
'activation_date' => $this->activation_date,
|
||||
'terminated_date' => $this->terminated_date,
|
||||
'remarks' => $this->remarks,
|
||||
'policy_in_force' => $this->policy_in_force,
|
||||
'start_no_claim' => $this->start_no_claim,
|
||||
'end_no_claim' => $this->end_no_claim,
|
||||
'active' => $this->active,
|
||||
'reason' => $this->reason,
|
||||
'total_claims' => $this->total_claims,
|
||||
'full_name' => $this->full_name,
|
||||
'age' => $this->age,
|
||||
'gender_code' => $this->gender_code,
|
||||
'limit' => [
|
||||
'current' => $this->total_claims ?? 0,
|
||||
'total' => (int)$this->currentPlan->limit_rules ?? 0,
|
||||
'percentage' => (!empty($this->currentPlan->limit_rules ?? 0)) ? (($this->total_claims / $this->currentPlan->limit_rules) * 100) : 0
|
||||
],
|
||||
'benefits' => $this->currentPlan->benefits,
|
||||
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\EmployeeData\UserProfile;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class DataMemberResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'person' => [
|
||||
'name' => $this->full_name ?? null,
|
||||
'weight' => $this->person->last_weight_kg ?? null,
|
||||
'height' => $this->person->last_height_kg ?? null,
|
||||
'placeOfBirth' => ucwords($this->person->birth_place) ?? null,
|
||||
'dateOfBirth' => $this->birth_date ?? $this->person->birth_date,
|
||||
'gender' => ucwords(strtolower($this->gender ?? $this->person->gender)),
|
||||
'phoneNumber' => $this->person->phone ?? null,
|
||||
'email' => $this->email ?? ($this->person->email ?? null),
|
||||
'address' => $this->person->last_height_kg ?? null,
|
||||
'idNumber' => $this->person->nik ?? null,
|
||||
'religion' => ucwords(strtolower($this->person->religion)) ?? null,
|
||||
'maritalStatus' => $this->marital_status,
|
||||
'education' => ucwords(strtolower($this->person->last_education)) ?? null,
|
||||
'occupation' => null,
|
||||
],
|
||||
'families' => collect($this->families)->map(function ($family) {
|
||||
return [
|
||||
'name' => $family->full_name ?? null,
|
||||
'relationship' => $family->relationship ?? null,
|
||||
'dateOfBirth' => $family->birth_date ?? $family->person->birth_date,
|
||||
'email' => $this->email ?? ($this->person->email ?? null),
|
||||
'phoneNumber' => $this->person->phone ?? null,
|
||||
'status' => $this->status ?? null
|
||||
];
|
||||
})->all()
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\Dashboard;
|
||||
namespace Modules\Client\Transformers;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
@@ -14,19 +14,19 @@ class MemberResources extends JsonResource
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
// dd($this->currentPlans);
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'memberId' => $this->member_id,
|
||||
'fullName' => $this->full_name,
|
||||
'division' => $this->division_name ?? '',
|
||||
$this->mergeWhen($request->input('claimMember') === 'false', [
|
||||
'division' => $this->division->name ?? '',
|
||||
'status' => $this->active
|
||||
]),
|
||||
'limit' => [
|
||||
'current' => $this->claims_sum_total_claim ?? 0,
|
||||
'current' => $this->claims_sum_total_claim,
|
||||
'total' => $this->currentPlan->limit_rules ?? 0,
|
||||
'percentage' => (!empty($this->currentPlan->limit_rules ?? 0)) ? (($this->claims_sum_total_claim / $this->currentPlan->limit_rules) * 100) : 0
|
||||
],
|
||||
'status' => $this->active,
|
||||
// 'service_type' => $this->currentPlans,
|
||||
];
|
||||
}
|
||||
}
|
||||
0
Modules/Client/composer.json
Normal file → Executable file
0
Modules/Client/composer.json
Normal file → Executable file
0
Modules/Client/module.json
Normal file → Executable file
0
Modules/Client/module.json
Normal file → Executable file
0
Modules/Client/package.json
Normal file → Executable file
0
Modules/Client/package.json
Normal file → Executable file
0
Modules/Client/webpack.mix.js
Normal file → Executable file
0
Modules/Client/webpack.mix.js
Normal file → Executable file
@@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\HospitalPortal\Helpers;
|
||||
|
||||
class ApiResponse
|
||||
{
|
||||
public static function apiResponse(string $status, array|object $data = null, string|array|object $message = null, int $statusCode)
|
||||
{
|
||||
if ($message instanceof \Illuminate\Support\MessageBag) {
|
||||
$message = $message->first();
|
||||
}
|
||||
return response()->json([
|
||||
'meta' => [
|
||||
'status' => $status,
|
||||
'code' => $statusCode,
|
||||
'message' => $message
|
||||
],
|
||||
'data' => $data,
|
||||
], $statusCode);
|
||||
}
|
||||
}
|
||||
45
Modules/HospitalPortal/Http/Controllers/Api/AuthController.php
Normal file → Executable file
45
Modules/HospitalPortal/Http/Controllers/Api/AuthController.php
Normal file → Executable file
@@ -12,48 +12,33 @@ use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Modules\Internal\Emails\SendVerifyEmail;
|
||||
use Modules\Internal\Events\ForgetPassword;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
public function login(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'email' => $request->email,
|
||||
'password' => $request->password
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
$request->validate([
|
||||
'email' => 'required|email',
|
||||
'password' => 'required'
|
||||
], [
|
||||
'email.required' => trans('validation.required',['attribute' => 'Email']),
|
||||
'email.email' => trans('validation.email'),
|
||||
'password.required' => trans('validation.required',['attribute' => 'Password']),
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
$user = User::query()
|
||||
->where('email', $request->email)
|
||||
->first();
|
||||
|
||||
if (!$user) {
|
||||
return response(['message' => 'User Tidak Ditemukan'], 404);
|
||||
}
|
||||
else
|
||||
{
|
||||
$user = User::where('email', $request->email)->first();
|
||||
if (!$user) {
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('message.not_found'), 404);
|
||||
}
|
||||
|
||||
if (!Hash::check($request->password, $user->password)) {
|
||||
return ApiResponse::apiResponse('Bad Request', $data, trans('message.password'), 400);
|
||||
}
|
||||
|
||||
$res_data = [
|
||||
'user' => $user,
|
||||
'token' => $user->createToken('app')->plainTextToken
|
||||
];
|
||||
|
||||
return ApiResponse::apiResponse("Success", $res_data, trans('message.success'), 200);
|
||||
if (!Hash::check($request->password, $user->password)) {
|
||||
return response(['message' => 'Password Salah'], 403);
|
||||
}
|
||||
|
||||
return response([
|
||||
'message' => 'Selamat Datang',
|
||||
'user' => $user,
|
||||
'token' => $user->createToken('app')->plainTextToken
|
||||
]);
|
||||
}
|
||||
|
||||
public function logout(Request $request)
|
||||
|
||||
@@ -16,9 +16,6 @@ use Illuminate\Routing\Controller;
|
||||
use Modules\HospitalPortal\Transformers\ClaimRequestResource;
|
||||
use Modules\HospitalPortal\Transformers\ClaimRequestShowResource;
|
||||
use PDF;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class ClaimRequestController extends Controller
|
||||
{
|
||||
@@ -26,7 +23,6 @@ class ClaimRequestController extends Controller
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
private static $code_prefix = 'CRQ-H';
|
||||
public function index(request $request)
|
||||
{
|
||||
$claimRequests = ClaimRequest::query()
|
||||
@@ -64,93 +60,69 @@ class ClaimRequestController extends Controller
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'request_logs_id' => $request->request_logs_id,
|
||||
'member_id' => $request->member_id,
|
||||
'service_code' => $request->service_code
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
'request_logs_id' => 'required',
|
||||
$request->validate([
|
||||
'member_id' => 'required',
|
||||
'service_code' => 'required'
|
||||
], [
|
||||
'request_logs_id.required' => trans('Validation.required',['attribute' => 'Request Log ID']),
|
||||
'member_id.required' => trans('Validation.required',['attribute' => 'Member ID']),
|
||||
'service_code.required' => trans('Validation.required',['attribute' => 'Service Code'])
|
||||
]);
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
$check_claim_requests = DB::table('claim_requests')
|
||||
->where('claim_requests.request_log_id', '=', $request->request_logs_id)
|
||||
->first();
|
||||
if(!$check_claim_requests)
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
$code = $this->getNextCode();
|
||||
$member = Member::find($request->member_id);
|
||||
$newClaimRequest = ClaimRequestService::storeClaimRequest(
|
||||
row: [],
|
||||
code: $code,
|
||||
member: $member,
|
||||
paymentType: 'reimbursement',
|
||||
serviceCode: $request->service_code,
|
||||
requestLogID: $request->request_logs_id,
|
||||
);
|
||||
// Log History
|
||||
$newClaimRequest->histories()->create([
|
||||
'title' => 'New Claim Requested',
|
||||
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
|
||||
'type' => 'info',
|
||||
'system_origin' => 'hospital-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('additional_files')) {
|
||||
foreach ($request->additional_files as $file) {
|
||||
$pathFile = File::storeFile('additional-files', $newClaimRequest->id, $file);
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'additional-files',
|
||||
'name' => File::getFileName('additional-files', $newClaimRequest->id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
DB::commit();
|
||||
return ApiResponse::apiResponse('Success', $data, trans('Message.success'), 200);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
return ApiResponse::apiResponse("Error", $data, $e->getMessage(), 500);
|
||||
}
|
||||
|
||||
$member = Member::find($request->member_id);
|
||||
$newClaimRequest = ClaimRequestService::storeClaimRequest(member: $member);
|
||||
|
||||
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' => 'hospital-portal'
|
||||
]);
|
||||
|
||||
if ($request->hasFile('result_files')) {
|
||||
foreach ($request->result_files 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,
|
||||
]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse("Error", $data, trans('Message.already_exists'), 409);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ($request->hasFile('diagnosa_files')) {
|
||||
foreach ($request->diagnosa_files 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('result_files')) {
|
||||
foreach ($request->result_files 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!');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -164,8 +136,7 @@ class ClaimRequestController extends Controller
|
||||
$claimRequest->load([
|
||||
'histories' => function ($history) {
|
||||
$history->latest();
|
||||
},
|
||||
'files',
|
||||
}
|
||||
]);
|
||||
|
||||
return Helper::responseJson(data: ClaimRequestShowResource::make($claimRequest));
|
||||
@@ -206,260 +177,16 @@ class ClaimRequestController extends Controller
|
||||
{
|
||||
$claimRequest = ClaimRequest::findOrFail($claim_request_id);
|
||||
|
||||
$service_code = $claimRequest->service_code;
|
||||
if ($claimRequest->status != 'approved') {
|
||||
throw new Exception("Belum Teverifikasi", 1);
|
||||
}
|
||||
|
||||
$member = Member::findOrFail($claimRequest->member_id)
|
||||
->load([
|
||||
// 'currentPlan',
|
||||
'currentPlan' => function ($plan) use ($claim_request_id, $service_code) {
|
||||
$plan->where('plans.service_code', $service_code);
|
||||
},
|
||||
'currentPolicy',
|
||||
'currentPlan.corporateBenefits',
|
||||
'currentPlan.corporateBenefits.benefit'
|
||||
]);
|
||||
->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']);
|
||||
|
||||
$pdf = PDF::loadView('pdf.guaranted_leter', compact('member', 'claimRequest'));
|
||||
return $pdf->download('Guaranted Letter - '.$member->full_name.'.pdf');
|
||||
|
||||
return $claimRequest;
|
||||
}
|
||||
|
||||
public static function getNextCode()
|
||||
{
|
||||
$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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
public function get_claim_requests(Request $request)
|
||||
{
|
||||
|
||||
$limit = $request->has('per_page') ? $request->input('per_page') : 10;
|
||||
|
||||
$results = DB::table('claim_requests')
|
||||
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id')
|
||||
->when($request->input('search'), function ($query, $search) {
|
||||
$query->where(function ($query) use ($search) {
|
||||
$query->orWhere('claim_requests.code', 'like', "%" . ($search == 'outpatient' || $search == 'Outpatient' ? 'OP' : 'IP') . "%")
|
||||
->orWhere('members.member_id', 'like', "%" . $search . "%")
|
||||
->orWhere('members.name', 'like', "%" . $search . "%")
|
||||
->orWhere('corporate_divisions.name', 'like', "%" . $search . "%")
|
||||
->orWhere('claim_requests.status', 'like', "%" . $search . "%")
|
||||
->orWhere('claim_requests.submission_date', 'like', "%" . $search . "%")
|
||||
->orWhere('claims.status', 'like', "%" . $search . "%");
|
||||
});
|
||||
})
|
||||
->when($request->has('orderBy'), function ($query) use ($request) {
|
||||
$orderBy = $request->orderBy;
|
||||
$direction = $request->order ?? 'asc';
|
||||
|
||||
$query->orderBy($orderBy, $direction);
|
||||
})
|
||||
->when($request->input('start_date') && !$request->input('end_date'), function ($query, $start_date) {
|
||||
$query->where(function ($query) use ($start_date) {
|
||||
$query->where('claim_requests.submission_date', '<', $start_date);
|
||||
});
|
||||
})
|
||||
->when($request->input('status'), function ($query, $status) {
|
||||
$query->where(function ($query) use ($status) {
|
||||
|
||||
if ($status === 'requested') {
|
||||
$query->where('claim_requests.status', '=', 'requested');
|
||||
}
|
||||
|
||||
if ($status === 'reviewed') {
|
||||
$query->where('claim_requests.status', '=', 'approved');
|
||||
$query->where('claims.status', '=', 'received');
|
||||
}
|
||||
|
||||
if ($status === 'approved') {
|
||||
$query->where('claim_requests.status', '=', 'approved');
|
||||
$query->where('claims.status', '=', 'approved');
|
||||
}
|
||||
|
||||
if ($status === 'declined') {
|
||||
$query->where('claim_requests.status', '=', 'approved');
|
||||
$query->where('claims.status', '=', 'declined');
|
||||
}
|
||||
|
||||
});
|
||||
})
|
||||
->select(
|
||||
'members.id',
|
||||
'claim_requests.code',
|
||||
'members.member_id',
|
||||
'members.name as full_name',
|
||||
'corporate_divisions.name AS division_name',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_requests.status = "requested" THEN "requested"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "approved" THEN "approved"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "declined" THEN "declined"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "disbrusmented" THEN "disbrusmented"
|
||||
/*WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "pending"*/
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "reviewed"
|
||||
ELSE ""
|
||||
END AS status
|
||||
'),
|
||||
'claim_requests.id AS claim_request_id',
|
||||
'claim_requests.submission_date',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN service_code = "OP" THEN "Outpatient"
|
||||
WHEN service_code = "IP" THEN "Inpatient"
|
||||
ELSE ""
|
||||
END AS service_type
|
||||
')
|
||||
)
|
||||
->paginate($limit);
|
||||
return response()->json(Helper::paginateResources($results));
|
||||
}
|
||||
|
||||
public function detail_claim_requests($claimRequestId)
|
||||
{
|
||||
|
||||
$status = DB::table('claim_requests')
|
||||
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id')
|
||||
->where('claim_requests.id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_requests.submission_date',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_requests.status = "requested" THEN "requested"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "approved" THEN "approved"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "declined" THEN "declined"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "disbrusmented" THEN "disbrusmented"
|
||||
/*WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "pending"*/
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "reviewed"
|
||||
ELSE ""
|
||||
END AS status
|
||||
')
|
||||
)
|
||||
->first();
|
||||
$results['status'] = $status;
|
||||
$timeline = DB::table('claim_logs')
|
||||
->where('claim_logs.claim_request_id', '=', $claimRequestId)
|
||||
->select(
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "Request"
|
||||
WHEN claim_logs.status = "reviewed" THEN "Review"
|
||||
WHEN claim_logs.status = "approved" THEN "Approval"
|
||||
WHEN claim_logs.status = "declined" THEN "Decline"
|
||||
ELSE "-"
|
||||
END AS txt_status
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "#159C9C"
|
||||
WHEN claim_logs.status = "reviewed" THEN "#0C53B7"
|
||||
WHEN claim_logs.status = "approved" THEN "#229A16"
|
||||
WHEN claim_logs.status = "declined" THEN "#FF4842"
|
||||
ELSE "-"
|
||||
END AS txt_status_color
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "#00AB5529"
|
||||
WHEN claim_logs.status = "reviewed" THEN "#1890FF29"
|
||||
WHEN claim_logs.status = "approved" THEN "#54D62C29"
|
||||
WHEN claim_logs.status = "declined" THEN "#FF48427A"
|
||||
ELSE "-"
|
||||
END AS txt_status_backgroundColor
|
||||
'),
|
||||
'claim_logs.date',
|
||||
'claim_logs.description',
|
||||
'claim_logs.status'
|
||||
)
|
||||
->orderBy('claim_logs.id', 'desc')
|
||||
->get();
|
||||
$results['timeline'] = $timeline;
|
||||
$request_files = DB::table('claim_request_files')
|
||||
->where('claim_request_files.claim_request_id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_request_files.*',
|
||||
DB::raw('(SELECT files.fileable_id FROM files WHERE files.fileable_id = claim_request_files.claim_request_id AND files.type = claim_request_files.type LIMIT 1) AS check_files'),
|
||||
)
|
||||
->get();
|
||||
$results['request_files'] = $request_files;
|
||||
|
||||
return Helper::responseJson($results);
|
||||
}
|
||||
|
||||
public function requestFiles(Request $request, $claim_id)
|
||||
{
|
||||
|
||||
if ($request->hasFile('fileDiagnosis')) {
|
||||
foreach ($request->fileDiagnosis as $file) {
|
||||
$pathFile = File::storeFile('claim-diagnosis', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-diagnosis',
|
||||
'name' => File::getFileName('claim-diagnosis', $claim_id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('fileKondisis')) {
|
||||
foreach ($request->fileKondisis as $file) {
|
||||
$pathFile = File::storeFile('claim-kondisi', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-kondisi',
|
||||
'name' => File::getFileName('claim-kondisi', $claim_id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('fileResults')) {
|
||||
foreach ($request->fileResults as $file) {
|
||||
$pathFile = File::storeFile('claim-result', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-result',
|
||||
'name' => File::getFileName('claim-result', $claim_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: 'Invoice Success Uploaded');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,6 @@ use App\Models\Member;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class MemberController extends Controller
|
||||
{
|
||||
@@ -19,103 +16,26 @@ class MemberController extends Controller
|
||||
*/
|
||||
public function search(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'no_polis' => $request->no_polis,
|
||||
'birth_date' => $request->birth_date
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
$request->validate([
|
||||
'no_polis' => 'required',
|
||||
'birth_date' => 'required'
|
||||
], [
|
||||
'no_polis.required' => trans('Validation.required',['attribute' => 'Member ID']),
|
||||
'birth_date.required' => trans('Validation.required',['attribute' => 'Birth Date']),
|
||||
]);
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
$members = DB::table('members')
|
||||
->leftJoin('member_policies', 'member_policies.member_id','=', 'members.member_id')
|
||||
->leftJoin('persons', 'persons.id', '=', 'members.person_id')
|
||||
->where('members.member_id', '=', $request->no_polis)
|
||||
->where('members.birth_date', '=', $request->birth_date)
|
||||
->select(
|
||||
'members.id',
|
||||
'members.name',
|
||||
'members.member_id',
|
||||
'member_policies.policy_id',
|
||||
'persons.nik',
|
||||
'members.email',
|
||||
'members.birth_date',
|
||||
'members.gender',
|
||||
'members.marital_status',
|
||||
'members.language',
|
||||
'members.race',
|
||||
'members.relation_with_principal')
|
||||
->first();
|
||||
if($members)
|
||||
{
|
||||
$res_data['members'] = $members;
|
||||
|
||||
$benefits = DB::table('member_plans')
|
||||
->leftJoin('corporate_benefits','corporate_benefits.plan_id', '=', 'member_plans.plan_id')
|
||||
->leftJoin('benefits', 'benefits.id', '=', 'corporate_benefits.benefit_id')
|
||||
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
|
||||
->leftJoin('services', 'services.code', '=', 'plans.service_code')
|
||||
->where('member_plans.member_id', '=', $members->id)
|
||||
->select(
|
||||
'benefits.description',
|
||||
'benefits.code',
|
||||
'corporate_benefits.corporate_id',
|
||||
'plans.service_code'
|
||||
)
|
||||
->get();
|
||||
$res_data['benefits'] = $benefits;
|
||||
$member = Member::query()
|
||||
->where('member_id', $request->no_polis)
|
||||
->where('birth_date', $request->birth_date)
|
||||
->with(['person', 'currentCorporate',
|
||||
// 'currentCorporate.corporateServices' => function ($corporateService) {
|
||||
// $corporateService->where('status', 'active');
|
||||
// },
|
||||
// 'currentCorporate.corporateServices.service'
|
||||
// 'currentPlan.benefits',
|
||||
// 'currentPlan.corporateBenefit.plan',
|
||||
'currentPlan.corporateBenefits.benefit'
|
||||
])
|
||||
->firstOrFail();
|
||||
|
||||
$services = DB::table('member_plans')
|
||||
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
|
||||
->leftJoin('services', 'services.code', '=', 'plans.service_code')
|
||||
->where('member_plans.member_id', $members->id)
|
||||
->whereNull('member_plans.deleted_at')
|
||||
->select('plans.service_code', 'services.name')
|
||||
->get();
|
||||
$res_data['services'] = $services;
|
||||
|
||||
// Group Services
|
||||
$groupServices = [];
|
||||
foreach ($res_data['benefits'] as $benefit) {
|
||||
$serviceCode = $benefit->service_code;
|
||||
$groupServices[$serviceCode][] = [
|
||||
'description' => $benefit->description,
|
||||
'code' => $benefit->code,
|
||||
];
|
||||
}
|
||||
|
||||
$res_data['groupServices'] = $groupServices;
|
||||
|
||||
$res_data['type'] = $request->type;
|
||||
|
||||
// Provider
|
||||
$providers = DB::table('organizations')
|
||||
->where('organizations.type', '=', 'hospital')
|
||||
->select(
|
||||
'organizations.id',
|
||||
'organizations.name'
|
||||
)
|
||||
->get();
|
||||
|
||||
$res_data['providers'] = $providers;
|
||||
|
||||
|
||||
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse("Data Not Found", $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
|
||||
}
|
||||
return Helper::responseJson($member);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\HospitalPortal\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Claim;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class NotificationController extends Controller
|
||||
{
|
||||
public function getNotifications(Request $request, $user_id)
|
||||
{
|
||||
$data = [
|
||||
'user_id' => $user_id,
|
||||
];
|
||||
if (!$user_id)
|
||||
{
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
else
|
||||
{
|
||||
try {
|
||||
$notifications = DB::table('notifications')
|
||||
->join('notification_types', 'notification_types.id', '=', 'notifications.type')
|
||||
->select(
|
||||
'notifications.id',
|
||||
'notifications.title',
|
||||
'notifications.description',
|
||||
'notifications.avatar',
|
||||
'notification_types.type',
|
||||
DB::raw('DATE_FORMAT(notifications.created_at, "%Y-%m-%dT%H:%i:%s.000+07:00") as createdAt'),
|
||||
'notifications.isUnRead',
|
||||
)
|
||||
->where('user_id', '=', $user_id)
|
||||
->orderBy('id', 'DESC')
|
||||
->get();
|
||||
$res_data['notifications'] = $notifications;
|
||||
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
return ApiResponse::apiResponse("Error", $data, $e->getMessage(), 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function setReadNotification(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'user_id' => $request->user_id,
|
||||
'id' => $request->id,
|
||||
'isUnRead'=> 0,
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
'user_id' => 'required',
|
||||
'id' => 'required'
|
||||
], [
|
||||
'user_id.required' => trans('Validation.required',['attribute' => 'Hospital ID']),
|
||||
'id.required' => trans('Validation.required',['attribute' => 'ID']),
|
||||
]);
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
DB::table('notifications')
|
||||
->where('notifications.id', '=', $request->id)
|
||||
->update($data);
|
||||
DB::commit();
|
||||
return ApiResponse::apiResponse("Success", $data, trans('Message.read_notification'), 200);
|
||||
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
return ApiResponse::apiResponse("Error", $data, $e->getMessage(), 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,754 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\HospitalPortal\Http\Controllers\Api;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Modules\HospitalPortal\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;
|
||||
|
||||
class RequestLogController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function requestLog(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'member_id' => $request->member_id,
|
||||
'service_code' => $request->service_code,
|
||||
'organization_id' => $request->organization_id,
|
||||
'organization_name' => $request->organization_name,
|
||||
'address_provider' => $request->address_provider
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
'member_id' => 'required',
|
||||
'service_code' => 'required'
|
||||
], [
|
||||
'member_id.required' => trans('Validation.required',['attribute' => 'Member ID']),
|
||||
'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']),
|
||||
]);
|
||||
if($request->organization_id)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'organization_id' => 'required',
|
||||
'member_id' => 'required',
|
||||
'service_code' => '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']),
|
||||
]);
|
||||
}
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
//insert data to organization
|
||||
try {
|
||||
if(!$request->organization_id)
|
||||
{
|
||||
// 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, 1));
|
||||
}
|
||||
|
||||
// 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',
|
||||
'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]);
|
||||
}
|
||||
|
||||
$requestLogControllerInstance = new PrimeCenterRequestLog();
|
||||
$response = $requestLogControllerInstance->createNew($request);
|
||||
|
||||
if($response->original['statusCode'] == 200)
|
||||
{
|
||||
//send email
|
||||
// Insert data notifications
|
||||
$emailTo = 'alarm.center@linksehat.com';
|
||||
$dataNotif = [
|
||||
'email' => $emailTo,
|
||||
'title' => 'Request LOG',
|
||||
'description' => 'Request LOG from Hospital Portal',
|
||||
'type' => 1,
|
||||
'isUnRead' => true,
|
||||
'created_by' => auth()->user()->id,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
$sendNotif = Helper::insertNotification($dataNotif);
|
||||
// Send Email after insert notifications
|
||||
if($sendNotif)
|
||||
{
|
||||
//send to alarm
|
||||
$nameTo = 'Admin LinkSehat';
|
||||
$dataEmail = [
|
||||
'email' => $emailTo,
|
||||
'name' => $nameTo,
|
||||
'subject' => 'Request LOG from Hospital Portal'. ' '.date('Y-m-d H:i:s'),
|
||||
'body' => View::make('email/notif_email', ['name' => $nameTo, 'link' => 'https://primecenter.linksehat.com/'])->render(),
|
||||
];
|
||||
Helper::sendEmail($dataEmail);
|
||||
}
|
||||
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse('Server Error', $data, trans('Message.server_error'), 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', $data, $e->getMessage(), 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getRequestLog(Request $request)
|
||||
{
|
||||
|
||||
$limit = $request->has('per_page') ? $request->input('per_page') : 10;
|
||||
|
||||
$results = DB::table('request_logs')
|
||||
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
|
||||
->when($request->input('search'), function ($query, $search) {
|
||||
$query->where(function ($query) use ($search) {
|
||||
$query->orWhere('request_logs.code', 'like', "%" . $search . "%")
|
||||
->orWhere('members.name', 'like', "%" . $search . "%")
|
||||
->orWhere('request_logs.submission_date', 'like', "%" . $search . "%");
|
||||
});
|
||||
})
|
||||
->when($request->has('orderBy'), function ($query) use ($request) {
|
||||
$orderBy = $request->orderBy;
|
||||
$direction = $request->order ?? 'asc';
|
||||
|
||||
$query->orderBy($orderBy, $direction);
|
||||
})
|
||||
->when($request->input('start_date') && !$request->input('end_date'), function ($query, $start_date) {
|
||||
$query->where(function ($query) use ($start_date) {
|
||||
$query->where('request_logs.submission_date', '<', $start_date);
|
||||
});
|
||||
})
|
||||
->when($request->input('status'), function ($query, $status) {
|
||||
$query->where(function ($query) use ($status) {
|
||||
|
||||
if ($status === 'requested') {
|
||||
$query->where('request_logs.status', '=', 'requested');
|
||||
}
|
||||
|
||||
if ($status === 'reviewed') {
|
||||
$query->where('request_logs.status', '=', 'approved');
|
||||
}
|
||||
|
||||
if ($status === 'approved') {
|
||||
$query->where('request_logs.status', '=', 'approved');
|
||||
}
|
||||
|
||||
if ($status === 'declined') {
|
||||
$query->where('request_logs.status', '=', 'declined');
|
||||
}
|
||||
|
||||
});
|
||||
})
|
||||
->select(
|
||||
'request_logs.id',
|
||||
'request_logs.member_id',
|
||||
'request_logs.final_log',
|
||||
'request_logs.code',
|
||||
'members.name as full_name',
|
||||
'members.member_id as no_polis',
|
||||
'members.birth_date',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN request_logs.status = "requested" THEN "requested"
|
||||
WHEN request_logs.status = "approved" THEN "approved"
|
||||
WHEN request_logs.status = "declined" THEN "declined"
|
||||
WHEN request_logs.status = "reviewed" THEN "reviewed"
|
||||
ELSE ""
|
||||
END AS status
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT organizations.name FROM organizations WHERE organizations.id = request_logs.organization_id LIMIT 1) AS provider
|
||||
'),
|
||||
'request_logs.submission_date')
|
||||
->paginate($limit);
|
||||
return response()->json(Helper::paginateResources($results));
|
||||
}
|
||||
|
||||
public function getFinalLog(Request $request)
|
||||
{
|
||||
|
||||
$limit = $request->has('per_page') ? $request->input('per_page') : 10;
|
||||
|
||||
$results = DB::table('request_logs')
|
||||
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
|
||||
->when($request->input('search'), function ($query, $search) {
|
||||
$query->where(function ($query) use ($search) {
|
||||
$query->orWhere('request_logs.code', 'like', "%" . $search . "%")
|
||||
->orWhere('members.name', 'like', "%" . $search . "%")
|
||||
->orWhere('request_logs.submission_date', 'like', "%" . $search . "%")
|
||||
->orWhere('request_logs.service_code', 'like', "%" . ($search == 'outpatient' || $search == 'Outpatient' ? 'OP' : 'IP') . "%");
|
||||
});
|
||||
})
|
||||
->when($request->has('orderBy'), function ($query) use ($request) {
|
||||
$orderBy = $request->orderBy;
|
||||
$direction = $request->order ?? 'asc';
|
||||
|
||||
$query->orderBy($orderBy, $direction);
|
||||
})
|
||||
->when($request->input('start_date') && !$request->input('end_date'), function ($query, $start_date) {
|
||||
$query->where(function ($query) use ($start_date) {
|
||||
$query->where('request_logs.submission_date', '<', $start_date);
|
||||
});
|
||||
})
|
||||
->when($request->input('status'), function ($query, $status) {
|
||||
$query->where(function ($query) use ($status) {
|
||||
|
||||
if ($status === 'requested') {
|
||||
$query->where('request_logs.status_final_log', '=', 'requested');
|
||||
}
|
||||
|
||||
if ($status === 'reviewed') {
|
||||
$query->where('request_logs.status_final_log', '=', 'approved');
|
||||
}
|
||||
|
||||
if ($status === 'approved') {
|
||||
$query->where('request_logs.status_final_log', '=', 'approved');
|
||||
}
|
||||
|
||||
if ($status === 'declined') {
|
||||
$query->where('request_logs.status_final_log', '=', 'declined');
|
||||
}
|
||||
|
||||
});
|
||||
})
|
||||
->where('request_logs.final_log', '=', 1)
|
||||
->select(
|
||||
'request_logs.id',
|
||||
'request_logs.final_log',
|
||||
'request_logs.code',
|
||||
'members.name as full_name',
|
||||
'members.member_id as no_polis',
|
||||
'members.id AS member_id',
|
||||
'request_logs.service_code',
|
||||
'members.birth_date',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN request_logs.status_final_log = "requested" THEN "requested"
|
||||
WHEN request_logs.status_final_log = "approved" THEN "approved"
|
||||
WHEN request_logs.status_final_log = "declined" THEN "declined"
|
||||
WHEN request_logs.status_final_log = "reviewed" THEN "reviewed"
|
||||
ELSE ""
|
||||
END AS status
|
||||
'),
|
||||
'request_logs.submission_date',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN service_code = "OP" THEN "Outpatient"
|
||||
WHEN service_code = "IP" THEN "Inpatient"
|
||||
ELSE ""
|
||||
END AS service_type
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT organizations.name FROM organizations WHERE organizations.id = request_logs.organization_id LIMIT 1) AS provider
|
||||
'),
|
||||
DB::raw('
|
||||
(Select request_log_id FROM claim_requests WHERE claim_requests.request_log_id = request_logs.id LIMIT 1) AS check_claim
|
||||
')
|
||||
)
|
||||
->paginate($limit);
|
||||
return response()->json(Helper::paginateResources($results));
|
||||
}
|
||||
|
||||
public function requestFinalLog(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'request_logs_id' => $request->request_logs_id
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
'request_logs_id' => 'required'
|
||||
], [
|
||||
'request_logs_id.required' => trans('Validation.required',['attribute' => 'Request Logs ID'])
|
||||
]);
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
DB::table('request_logs')
|
||||
->where('request_logs.id', '=', $request->request_logs_id)
|
||||
->update([
|
||||
'status_final_log' => 'requested',
|
||||
'final_log' => 1
|
||||
]);
|
||||
if ($request->hasFile('result_files')) {
|
||||
foreach ($request->result_files as $file) {
|
||||
$pathFile = File::storeFile('final-log-result', $request->request_logs_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type' => 'App\Models\RequestLog',
|
||||
'fileable_id' => $request->request_logs_id,
|
||||
'type' => 'final-log-result',
|
||||
'name' => File::getFileName('final-log-result', $request->request_logs_id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
if ($request->hasFile('diagnosa_files')) {
|
||||
foreach ($request->diagnosa_files as $file) {
|
||||
$pathFile = File::storeFile('final-log-diagnosis', $request->request_logs_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type' => 'App\Models\RequestLog',
|
||||
'fileable_id' => $request->request_logs_id,
|
||||
'type' => 'final-log-diagnosis',
|
||||
'name' => File::getFileName('final-log-diagnosis', $request->request_logs_id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
if ($request->hasFile('kondisi_files')) {
|
||||
foreach ($request->kondisi_files as $file) {
|
||||
$pathFile = File::storeFile('final-log-kondisi', $request->request_logs_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type' => 'App\Models\RequestLog',
|
||||
'fileable_id' => $request->request_logs_id,
|
||||
'type' => 'final-log-kondisi',
|
||||
'name' => File::getFileName('final-log-kondisi', $request->request_logs_id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
DB::commit();
|
||||
//send email
|
||||
// Insert data notifications
|
||||
$emailTo = 'alarm.center@linksehat.com';
|
||||
$dataNotif = [
|
||||
'email' => $emailTo,
|
||||
'title' => 'Request Final LOG',
|
||||
'description' => 'Request Final LOG from Hospital Portal',
|
||||
'type' => 1,
|
||||
'isUnRead' => true,
|
||||
'created_by' => auth()->user()->id,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
$sendNotif = Helper::insertNotification($dataNotif);
|
||||
// Send Email after insert notifications
|
||||
if($sendNotif)
|
||||
{
|
||||
//send to alarm
|
||||
$nameTo = 'Admin LinkSehat';
|
||||
$dataEmail = [
|
||||
'email' => $emailTo,
|
||||
'name' => $nameTo,
|
||||
'subject' => 'Request Final LOG from Hospital Portal'. ' '.date('Y-m-d H:i:s'),
|
||||
'body' => View::make('email/notif_email', ['name' => $nameTo, 'link' => 'https://primecenter.linksehat.com/'])->render(),
|
||||
];
|
||||
Helper::sendEmail($dataEmail);
|
||||
}
|
||||
return ApiResponse::apiResponse('Success', $data, trans('Message.success'), 200);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
return ApiResponse::apiResponse("Error", $data, $e->getMessage(), 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function downlodLog($request_log_id)
|
||||
{
|
||||
$dataRequestLog = DB::table('request_logs')
|
||||
->where('request_logs.id', '=', $request_log_id)
|
||||
->first();
|
||||
$data['dataRequestLog'] = $dataRequestLog;
|
||||
$dataMember = DB::table('members')
|
||||
->where('members.id', '=', $dataRequestLog->member_id)
|
||||
->select(
|
||||
'members.nric',
|
||||
'members.id',
|
||||
'members.principal_id',
|
||||
'members.name',
|
||||
'members.birth_date',
|
||||
'members.member_id',
|
||||
'members.gender',
|
||||
DB::raw('
|
||||
(Select persons.nik FROM persons WHERE persons.id = members.person_id LIMIT 1) AS nik
|
||||
'),
|
||||
DB::raw('
|
||||
"LinkSehat" AS penjamin
|
||||
'),
|
||||
DB::raw('
|
||||
(Select corporates.name FROM corporates
|
||||
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
|
||||
WHERE corporate_employees.member_id = members.id LIMIT 1) AS nama_perusahaan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select corporates.id FROM corporates
|
||||
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
|
||||
WHERE corporate_employees.member_id = members.id LIMIT 1) AS id_perusahaan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select corporates.code FROM corporates
|
||||
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
|
||||
WHERE corporate_employees.member_id = members.id LIMIT 1) AS code_perusahaan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select services.name FROM services
|
||||
WHERE services.code = "'.$dataRequestLog->service_code.'" LIMIT 1) AS jenis_perwatan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select member_policies.policy_id FROM member_policies WHERE member_policies.member_id = members.member_id LIMIT 1) AS no_polis
|
||||
'),
|
||||
DB::raw('
|
||||
(Select member_policies.status FROM member_policies WHERE member_policies.member_id = members.member_id LIMIT 1) AS status_polis
|
||||
'),
|
||||
DB::raw('
|
||||
(Select plans.code FROM member_plans
|
||||
LEFT JOIN plans ON plans.id = member_plans.plan_id
|
||||
WHERE member_plans.member_id = members.id AND plans.service_code = "'.$dataRequestLog->service_code.'" LIMIT 1) AS code_plan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select plans.limit_rules FROM member_plans
|
||||
LEFT JOIN plans ON plans.id = member_plans.plan_id
|
||||
WHERE member_plans.member_id = members.id LIMIT 1) AS limit_rules
|
||||
'),
|
||||
DB::raw('
|
||||
"IDR" AS mata_uang
|
||||
'),
|
||||
'members.members_effective_date AS mulai',
|
||||
'members.members_expire_date AS akhir'
|
||||
)
|
||||
->first();
|
||||
$data['namaKaryawan'] = '';
|
||||
if($dataMember->principal_id)
|
||||
{
|
||||
$dataNamaKaryawan = DB::table('members')
|
||||
->where('members.member_id', '=', $dataMember->principal_id)
|
||||
->select('members.name')
|
||||
->first();
|
||||
$data['namaKaryawan'] = $dataNamaKaryawan->name;
|
||||
}
|
||||
else{
|
||||
$data['namaKaryawan'] = $dataMember->name;
|
||||
}
|
||||
|
||||
$data['dataMember'] = $dataMember;
|
||||
|
||||
$data['request_logs'] = $dataRequestLog;
|
||||
|
||||
$dataRumahSakit = DB::table('organizations')
|
||||
->leftJoin('addresses', 'addresses.addressable_id', '=', 'organizations.id')
|
||||
->where('organizations.id', '=', $dataRequestLog->organization_id)
|
||||
->where('addresses.addressable_type', '=', 'App\Models\Organization')
|
||||
->select('organizations.name AS nama_rumahsakit', 'addresses.text AS alamat_rumahsakit')
|
||||
->first();
|
||||
|
||||
$data['rumahSakit'] = $dataRumahSakit;
|
||||
|
||||
$logoPerusahaan = DB::table('files')
|
||||
->leftJoin('corporate_employees', 'corporate_employees.corporate_id', '=', 'files.fileable_id')
|
||||
->leftJoin('corporates', 'corporate_employees.corporate_id', '=', 'corporates.id')
|
||||
->where('corporate_employees.member_id', '=', $dataMember->id)
|
||||
->where('files.fileable_type', '=', 'App\Models\Corporate')
|
||||
->select('files.path', 'corporates.code', 'corporates.name')
|
||||
->orderBy('files.id', 'desc')
|
||||
->first();
|
||||
|
||||
$data['logoPerusahaan'] = $logoPerusahaan;
|
||||
|
||||
$signatureDr = DB::table('signatures')
|
||||
->leftJoin('corporate_manager', 'corporate_manager.user_id', '=', 'signatures.user_id')
|
||||
->leftJoin('files', 'files.fileable_id', '=', 'signatures.id')
|
||||
->where('files.fileable_type', '=', 'App\Models\Signature')
|
||||
->where('signatures.type', '=', 1)
|
||||
->where('corporate_manager.corporate_id', '=', $dataMember->id_perusahaan)
|
||||
->select('files.path')
|
||||
->first();
|
||||
|
||||
$data['signatureDr'] = $signatureDr;
|
||||
|
||||
$signatureAd = DB::table('signatures')
|
||||
->leftJoin('files', 'files.fileable_id', '=', 'signatures.id')
|
||||
->where('files.fileable_type', '=', 'App\Models\Signature')
|
||||
->where('signatures.type', '=', 2)
|
||||
->where('signatures.user_id', '=', $dataRequestLog->approved_by)
|
||||
->select(
|
||||
'files.path',
|
||||
DB::raw('
|
||||
(Select persons.name FROM users
|
||||
LEFT JOIN persons ON users.person_id = persons.id
|
||||
WHERE users.id = "'.$dataRequestLog->approved_by.'" LIMIT 1) AS name_approve
|
||||
')
|
||||
)
|
||||
->first();
|
||||
|
||||
$data['signatureAd'] = $signatureAd;
|
||||
|
||||
$pdf = new Dompdf();
|
||||
|
||||
$options = new Options();
|
||||
$options->set('isHtml5ParserEnabled', true);
|
||||
$options->set('isPhpEnabled', true);
|
||||
$options->set(['isRemoteEnabled' => true]);
|
||||
$pdf->setOptions($options);
|
||||
|
||||
$pdf->setPaper('A4', 'portrait');
|
||||
|
||||
// Halaman 1
|
||||
$html1 = view('pdf.req_log_page_1', $data);
|
||||
|
||||
// Halaman 2
|
||||
// $html2 = view('pdf.req_log_page_2', $data);
|
||||
|
||||
// Gabung konten HTML dari dua tampilan
|
||||
// $htmlCombined = $html1 . $html2;
|
||||
$htmlCombined = $html1;
|
||||
|
||||
$pdf->loadHtml($htmlCombined);
|
||||
$pdf->render();
|
||||
|
||||
$headers = [
|
||||
'Content-Type' => 'application/pdf',
|
||||
'Content-Disposition' => 'inline; filename="file.pdf"',
|
||||
];
|
||||
|
||||
return response($pdf->output(), 200, $headers);
|
||||
}
|
||||
|
||||
public function downlodFinalLog($request_log_id)
|
||||
{
|
||||
$dataRequestLog = DB::table('request_logs')
|
||||
->where('request_logs.id', '=', $request_log_id)
|
||||
->first();
|
||||
$data['dataRequestLog'] = $dataRequestLog;
|
||||
$dataMember = DB::table('members')
|
||||
->where('members.id', '=', $dataRequestLog->member_id)
|
||||
->select(
|
||||
'members.nric',
|
||||
'members.id',
|
||||
'members.principal_id',
|
||||
'members.name',
|
||||
'members.birth_date',
|
||||
'members.member_id',
|
||||
'members.gender',
|
||||
DB::raw('
|
||||
(Select persons.nik FROM persons WHERE persons.id = members.person_id LIMIT 1) AS nik
|
||||
'),
|
||||
DB::raw('
|
||||
"LinkSehat" AS penjamin
|
||||
'),
|
||||
DB::raw('
|
||||
(Select corporates.name FROM corporates
|
||||
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
|
||||
WHERE corporate_employees.member_id = members.id LIMIT 1) AS nama_perusahaan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select corporates.id FROM corporates
|
||||
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
|
||||
WHERE corporate_employees.member_id = members.id LIMIT 1) AS id_perusahaan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select corporates.code FROM corporates
|
||||
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
|
||||
WHERE corporate_employees.member_id = members.id LIMIT 1) AS code_perusahaan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select services.name FROM services
|
||||
WHERE services.code = "'.$dataRequestLog->service_code.'" LIMIT 1) AS jenis_perwatan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select member_policies.policy_id FROM member_policies WHERE member_policies.member_id = members.member_id LIMIT 1) AS no_polis
|
||||
'),
|
||||
DB::raw('
|
||||
(Select member_policies.status FROM member_policies WHERE member_policies.member_id = members.member_id LIMIT 1) AS status_polis
|
||||
'),
|
||||
DB::raw('
|
||||
(Select plans.code FROM member_plans
|
||||
LEFT JOIN plans ON plans.id = member_plans.plan_id
|
||||
WHERE member_plans.member_id = members.id AND plans.service_code = "'.$dataRequestLog->service_code.'" LIMIT 1) AS code_plan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select plans.limit_rules FROM member_plans
|
||||
LEFT JOIN plans ON plans.id = member_plans.plan_id
|
||||
WHERE member_plans.member_id = members.id LIMIT 1) AS limit_rules
|
||||
'),
|
||||
DB::raw('
|
||||
"IDR" AS mata_uang
|
||||
'),
|
||||
'members.members_effective_date AS mulai',
|
||||
'members.members_expire_date AS akhir'
|
||||
)
|
||||
->first();
|
||||
$data['namaKaryawan'] = '';
|
||||
if($dataMember->principal_id)
|
||||
{
|
||||
$dataNamaKaryawan = DB::table('members')
|
||||
->where('members.member_id', '=', $dataMember->principal_id)
|
||||
->select('members.name')
|
||||
->limit(1)
|
||||
->first();
|
||||
$data['namaKaryawan'] = $dataNamaKaryawan->name;
|
||||
}
|
||||
else{
|
||||
$data['namaKaryawan'] = $dataMember->name;
|
||||
}
|
||||
|
||||
$data['dataMember'] = $dataMember;
|
||||
|
||||
$data['request_logs'] = $dataRequestLog;
|
||||
|
||||
$dataClaimLog = DB::table('request_log_benefits')
|
||||
->where('request_log_benefits.request_log_id', '=', $request_log_id)
|
||||
->select(
|
||||
'*',
|
||||
DB::raw('
|
||||
(Select benefits.description FROM benefits
|
||||
WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS benfit
|
||||
'),
|
||||
DB::raw('
|
||||
(Select benefits.code FROM benefits
|
||||
WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS code
|
||||
')
|
||||
)
|
||||
->get();
|
||||
|
||||
$data['dataClaimLog'] = $dataClaimLog;
|
||||
|
||||
|
||||
$dataRumahSakit = DB::table('organizations')
|
||||
->leftJoin('addresses', 'addresses.addressable_id', '=', 'organizations.id')
|
||||
->where('organizations.id', '=', $dataRequestLog->organization_id)
|
||||
->where('addresses.addressable_type', '=', 'App\Models\Organization')
|
||||
->select('organizations.name AS nama_rumahsakit', 'addresses.text AS alamat_rumahsakit')
|
||||
->first();
|
||||
|
||||
$data['rumahSakit'] = $dataRumahSakit;
|
||||
|
||||
$logoPerusahaan = DB::table('files')
|
||||
->leftJoin('corporate_employees', 'corporate_employees.corporate_id', '=', 'files.fileable_id')
|
||||
->leftJoin('corporates', 'corporate_employees.corporate_id', '=', 'corporates.id')
|
||||
->where('corporate_employees.member_id', '=', $dataMember->id)
|
||||
->where('files.fileable_type', '=', 'App\Models\Corporate')
|
||||
->select('files.path', 'corporates.code', 'corporates.name')
|
||||
->orderBy('files.id', 'desc')
|
||||
->first();
|
||||
|
||||
$data['logoPerusahaan'] = $logoPerusahaan;
|
||||
|
||||
$signatureDr = DB::table('signatures')
|
||||
->leftJoin('corporate_manager', 'corporate_manager.user_id', '=', 'signatures.user_id')
|
||||
->leftJoin('files', 'files.fileable_id', '=', 'signatures.id')
|
||||
->where('files.fileable_type', '=', 'App\Models\Signature')
|
||||
->where('signatures.type', '=', 1)
|
||||
->where('corporate_manager.corporate_id', '=', $dataMember->id_perusahaan)
|
||||
->select('files.path')
|
||||
->first();
|
||||
|
||||
$data['signatureDr'] = $signatureDr;
|
||||
|
||||
$signatureAd = DB::table('signatures')
|
||||
->leftJoin('files', 'files.fileable_id', '=', 'signatures.id')
|
||||
->where('files.fileable_type', '=', 'App\Models\Signature')
|
||||
->where('signatures.type', '=', 2)
|
||||
->where('signatures.user_id', '=', $dataRequestLog->approved_by)
|
||||
->select(
|
||||
'files.path',
|
||||
DB::raw('
|
||||
(Select persons.name FROM users
|
||||
LEFT JOIN persons ON users.person_id = persons.id
|
||||
WHERE users.id = "'.$dataRequestLog->approved_by.'" LIMIT 1) AS name_approve
|
||||
')
|
||||
)
|
||||
->first();
|
||||
|
||||
$data['signatureAd'] = $signatureAd;
|
||||
|
||||
$pdf = new Dompdf();
|
||||
|
||||
$options = new Options();
|
||||
$options->set('isHtml5ParserEnabled', true);
|
||||
$options->set('isPhpEnabled', true);
|
||||
$options->set(['isRemoteEnabled' => true]);
|
||||
$pdf->setOptions($options);
|
||||
|
||||
// Halaman 1
|
||||
$html1 = view('pdf.final_log_page_1', $data);
|
||||
|
||||
// Halaman 2
|
||||
$html2 = view('pdf.final_log_page_2', $data);
|
||||
|
||||
// Gabung konten HTML dari dua tampilan
|
||||
$htmlCombined = $html1 . $html2;
|
||||
|
||||
$pdf->loadHtml($htmlCombined);
|
||||
$pdf->render();
|
||||
|
||||
$headers = [
|
||||
'Content-Type' => 'application/pdf',
|
||||
'Content-Disposition' => 'inline; filename="file.pdf"',
|
||||
];
|
||||
|
||||
return response($pdf->output(), 200, $headers);
|
||||
}
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\HospitalPortal\Http\Middleware;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Illuminate\Support\Facades\App;
|
||||
|
||||
class Authentication
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$acceptHeader = $request->header('Accept');
|
||||
$contentType = $request->header('Content-Type');
|
||||
$locale = $request->header('Accept-Language');
|
||||
|
||||
// Add language
|
||||
if(!$locale)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('validation.required', ['attribute' => 'Accept-Language']), 401);
|
||||
}
|
||||
if($locale !== 'en-US' && $locale !== 'id-ID')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('validation.invalid', ['attribute' => 'Accept-Language']), 400);
|
||||
}
|
||||
if ($locale === 'en-US')
|
||||
{
|
||||
App::setLocale('en');
|
||||
} elseif ($locale === 'id-ID')
|
||||
{
|
||||
App::setLocale('id');
|
||||
} else
|
||||
{
|
||||
App::setLocale('en');
|
||||
}
|
||||
|
||||
// Validate type accept & content type
|
||||
if (!$acceptHeader)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('validation.required', ['attribute' => 'Accept']), 401);
|
||||
}
|
||||
if (!$contentType)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('validation.required', ['attribute' => 'Content-Type']), 401);
|
||||
}
|
||||
if ($acceptHeader !== 'application/json')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('validation.invalid', ['attribute' => 'Accept']), 400);
|
||||
}
|
||||
if($contentType !== 'application/json')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('validation.invalid', ['attribute' => 'Content-Type']), 400);
|
||||
}
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\HospitalPortal\Http\Middleware;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Illuminate\Support\Facades\App;
|
||||
|
||||
class Authorization
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$acceptHeader = $request->header('Accept');
|
||||
$contentType = $request->header('Content-Type');
|
||||
$locale = $request->header('Accept-Language');
|
||||
$authorization = $request->header('Authorization');
|
||||
|
||||
// Add language
|
||||
if(!$locale)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Accept-Language']), 401);
|
||||
}
|
||||
if($locale !== 'en-US' && $locale !== 'id-ID')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Accept-Language']), 400);
|
||||
}
|
||||
if ($locale === 'en-US')
|
||||
{
|
||||
App::setLocale('en');
|
||||
} elseif ($locale === 'id-ID')
|
||||
{
|
||||
App::setLocale('id');
|
||||
} else
|
||||
{
|
||||
App::setLocale('en');
|
||||
}
|
||||
|
||||
// Validate authorization
|
||||
if (empty($authorization) || strpos($authorization, 'Bearer ') !== 0) {
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Authorization']), 401);
|
||||
}
|
||||
|
||||
// Validate type accept & content type
|
||||
if (!$acceptHeader)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Accept']), 401);
|
||||
}
|
||||
if (!$contentType && $request->isMethod('post'))
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Content-Type']), 401);
|
||||
}
|
||||
if ($acceptHeader !== 'application/json')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Accept']), 400);
|
||||
}
|
||||
if($contentType !== 'application/json' && $request->isMethod('post'))
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Content-Type']), 400);
|
||||
}
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -5,10 +5,6 @@ use Modules\HospitalPortal\Http\Controllers\Api\AuthController;
|
||||
use Modules\HospitalPortal\Http\Controllers\Api\ClaimRequestController;
|
||||
use Modules\HospitalPortal\Http\Controllers\Api\MemberController;
|
||||
use Modules\HospitalPortal\Http\Controllers\ClaimController;
|
||||
use Modules\HospitalPortal\Http\Controllers\Api\NotificationController;
|
||||
use Modules\HospitalPortal\Http\Controllers\Api\RequestLogController;
|
||||
use Modules\HospitalPortal\Http\Middleware\Authentication;
|
||||
use Modules\HospitalPortal\Http\Middleware\Authorization;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -20,66 +16,29 @@ use Modules\HospitalPortal\Http\Middleware\Authorization;
|
||||
| is assigned the "api" middleware group. Enjoy building your API!
|
||||
|
|
||||
*/
|
||||
Route::prefix('v1')->group(function() {
|
||||
Route::prefix('hospitalportal')->group(function () {
|
||||
|
||||
Route::middleware(Authentication::class)->group(function () {
|
||||
Route::controller(AuthController::class)->group(function () {
|
||||
Route::post('login', 'login');
|
||||
});
|
||||
Route::prefix('hospitalportal')->group(function () {
|
||||
|
||||
Route::post('login', [AuthController::class, 'login'])->name('login');
|
||||
Route::post('forget-password', [AuthController::class, 'forgetPassword'])->name('forget-password');
|
||||
Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email');
|
||||
|
||||
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
|
||||
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
|
||||
Route::get('/user', function (Request $request) {
|
||||
return $request->user();
|
||||
});
|
||||
|
||||
//Route::post('forget-password', [AuthController::class, 'forgetPassword'])->name('forget-password');
|
||||
//Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email');
|
||||
Route::put('reset-password', [AuthController::class, 'resetPassword'])->name('resetPassword');
|
||||
|
||||
Route::get('claims', [ClaimController::class, 'index']);
|
||||
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
Route::post('search-member', [MemberController::class, 'search']);
|
||||
|
||||
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
|
||||
Route::get('/user', function (Request $request) {
|
||||
return $request->user();
|
||||
});
|
||||
Route::put('reset-password', [AuthController::class, 'resetPassword'])->name('resetPassword');
|
||||
|
||||
Route::get('claims', [ClaimController::class, 'index']);
|
||||
|
||||
Route::middleware(Authorization::class)->group(function () {
|
||||
//Search Member
|
||||
Route::controller(MemberController::class)->group(function () {
|
||||
Route::post('search-member', 'search');
|
||||
});
|
||||
// Request LOG
|
||||
Route::controller(RequestLogController::class)->group(function () {
|
||||
Route::post('request-log', 'requestLog');
|
||||
Route::get('get-request-log', 'getRequestLog');
|
||||
Route::get('get-final-log', 'getFinalLog');
|
||||
Route::post('request-final-log', 'requestFinalLog');
|
||||
Route::get('download-log/{request_log_id}', 'downlodLog');
|
||||
Route::get('download-final-log/{request_log_id}', 'downlodFinalLog');
|
||||
});
|
||||
//Notification
|
||||
Route::controller(NotificationController::class)->group(function() {
|
||||
//get notifications
|
||||
Route::get('notifications/{user_id}', 'getNotifications');
|
||||
//Set read notification
|
||||
Route::post('set-read-notification', 'setReadNotification');
|
||||
});
|
||||
});
|
||||
// Request Final LOG
|
||||
Route::controller(RequestLogController::class)->group(function () {
|
||||
Route::post('request-final-log', 'requestFinalLog');
|
||||
});
|
||||
// Claim Submit
|
||||
Route::controller(ClaimRequestController::class)->group(function () {
|
||||
Route::post('claim-requests', 'store');
|
||||
});
|
||||
Route::get('claim-requests', [ClaimRequestController::class, 'index'])->name('claim-requests.index');
|
||||
// Route::post('claim-requests', [ClaimRequestController::class, 'store'])->name('claim-requests.store');
|
||||
Route::get('claim-requests/{claim_request_id}/log', [ClaimRequestController::class, 'generateLog'])->name('claim-requests.generate-log');
|
||||
Route::get('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show');
|
||||
Route::get('get-claim-requests', [ClaimRequestController::class, 'get_claim_requests'])->name('claim-requests.get_claim_requests');
|
||||
Route::get('detail-claim-requests/{id}', [ClaimRequestController::class, 'detail_claim_requests'])->name('claim-requests.detail_claim_requests');
|
||||
Route::post('claim-requests/{id}/request-files', [ClaimRequestController::class, 'requestFiles']);
|
||||
});
|
||||
Route::get('claim-requests', [ClaimRequestController::class, 'index'])->name('claim-requests.index');
|
||||
Route::post('claim-requests', [ClaimRequestController::class, 'store'])->name('claim-requests.store');
|
||||
Route::get('claim-requests/{claim_request_id}/log', [ClaimRequestController::class, 'generateLog'])->name('claim-requests.generate-log');
|
||||
Route::get('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
namespace Modules\HospitalPortal\Transformers;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class ClaimRequestShowResource extends JsonResource
|
||||
{
|
||||
@@ -26,12 +25,6 @@ class ClaimRequestShowResource extends JsonResource
|
||||
'histories' => $histories
|
||||
];
|
||||
}
|
||||
|
||||
// Map Files by type
|
||||
$filesGroupByType = $this->files->mapToGroups(function($file) {
|
||||
return [Str::slug($file->type, '_') => $file];
|
||||
});
|
||||
$data['files_by_type'] = $filesGroupByType;
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
0
Modules/Internal/Config/.gitkeep
Normal file → Executable file
0
Modules/Internal/Config/.gitkeep
Normal file → Executable file
0
Modules/Internal/Config/config.php
Normal file → Executable file
0
Modules/Internal/Config/config.php
Normal file → Executable file
0
Modules/Internal/Console/.gitkeep
Normal file → Executable file
0
Modules/Internal/Console/.gitkeep
Normal file → Executable file
0
Modules/Internal/Database/Migrations/.gitkeep
Normal file → Executable file
0
Modules/Internal/Database/Migrations/.gitkeep
Normal file → Executable file
0
Modules/Internal/Database/Seeders/.gitkeep
Normal file → Executable file
0
Modules/Internal/Database/Seeders/.gitkeep
Normal file → Executable file
0
Modules/Internal/Database/Seeders/InternalDatabaseSeeder.php
Normal file → Executable file
0
Modules/Internal/Database/Seeders/InternalDatabaseSeeder.php
Normal file → Executable file
0
Modules/Internal/Database/factories/.gitkeep
Normal file → Executable file
0
Modules/Internal/Database/factories/.gitkeep
Normal file → Executable file
0
Modules/Internal/Entities/.gitkeep
Normal file → Executable file
0
Modules/Internal/Entities/.gitkeep
Normal file → Executable file
0
Modules/Internal/Http/Controllers/.gitkeep
Normal file → Executable file
0
Modules/Internal/Http/Controllers/.gitkeep
Normal file → Executable file
@@ -1,91 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\AuditTrail;
|
||||
use App\Models\ExclusionRules;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Internal\Transformers\AuditTrailResource;
|
||||
|
||||
class AuditTrailController extends Controller {
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request, $id)
|
||||
{
|
||||
$audittrails = AuditTrail::query()
|
||||
->where('model', '=', $request->model)
|
||||
->where('model_id', '=', $id)
|
||||
->latest()
|
||||
->paginate(1000);
|
||||
return response()->json(Helper::paginateResources(AuditTrailResource::collection($audittrails)));
|
||||
}
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('internal::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)
|
||||
{
|
||||
$appointments = Appointment::query()
|
||||
->with('doctor.user', 'doctor.speciality', 'appointmentDetail', 'healthCare')
|
||||
->where('nID', $id)
|
||||
->first();
|
||||
return response()->json(new AppointmentResource($appointments));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
return view('internal::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)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
?>
|
||||
59
Modules/Internal/Http/Controllers/Api/AuthController.php
Normal file → Executable file
59
Modules/Internal/Http/Controllers/Api/AuthController.php
Normal file → Executable file
@@ -4,33 +4,27 @@ namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use App\Models\Person;
|
||||
use Crypt;
|
||||
use Error;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Modules\Internal\Emails\SendVerifyEmail;
|
||||
use Modules\Internal\Events\ForgetPassword;
|
||||
use App\Helpers\Helper;
|
||||
use Validator;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
public function login(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'email' => 'required',
|
||||
'email' => 'required|email',
|
||||
'password' => 'required'
|
||||
]);
|
||||
|
||||
$user = User::query()
|
||||
->where(function ($query) use ($request) {
|
||||
$query->where('email', $request->email)
|
||||
->orWhere('username', $request->email);
|
||||
})
|
||||
->first();
|
||||
|
||||
->where('email', $request->email)
|
||||
->first();
|
||||
|
||||
if (!$user) {
|
||||
return response(['message' => 'User Tidak Ditemukan'], 404);
|
||||
@@ -97,7 +91,7 @@ class AuthController extends Controller
|
||||
|
||||
Event(new ForgetPassword($user));
|
||||
|
||||
Mail::to($user->email)->send(new SendVerifyEmail($user));
|
||||
// Mail::to($user->email)->send(new SendVerifyEmail($user));
|
||||
|
||||
return response()->json($user);
|
||||
}
|
||||
@@ -131,47 +125,4 @@ class AuthController extends Controller
|
||||
]);
|
||||
return response()->json($user);
|
||||
}
|
||||
|
||||
public function register(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'required|email|unique:users,email',
|
||||
'username' => 'required|unique:users,username',
|
||||
'name' => 'required',
|
||||
'password' => [
|
||||
'required',
|
||||
'min:5',
|
||||
// 'regex:/.*[0-9].*/',
|
||||
// 'regex:/.*[a-z].*/',
|
||||
// 'regex:/.*[A-Z].*/',
|
||||
]
|
||||
], [
|
||||
// 'password.regex' => "Password harus minimal 8 karakter, kombinasi huruf besar kecil dan angka"
|
||||
])->validate();
|
||||
|
||||
try {
|
||||
$user = User::create([
|
||||
'email' => $request->email,
|
||||
'username' => $request->username,
|
||||
'password' => Hash::make($request->password),
|
||||
]);
|
||||
|
||||
$person = Person::updateOrCreate(
|
||||
[
|
||||
'id' => $user->person_id
|
||||
],
|
||||
[
|
||||
'name' => $request->name ?? null
|
||||
]
|
||||
);
|
||||
$user->person_id = $person->id;
|
||||
$user->save();
|
||||
return response()->json($user);
|
||||
} catch (\Exception $e) {
|
||||
return response()->json([
|
||||
'message' => 'Terjadi masalah ketika mendaftar'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
0
Modules/Internal/Http/Controllers/Api/BenefitController.php
Normal file → Executable file
0
Modules/Internal/Http/Controllers/Api/BenefitController.php
Normal file → Executable file
File diff suppressed because it is too large
Load Diff
@@ -4,29 +4,17 @@ namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\ClaimRequest;
|
||||
use App\Models\Organization;
|
||||
use App\Services\ClaimService;
|
||||
use App\Services\ImportService;
|
||||
use App\Models\Member;
|
||||
use Exception;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Knp\Snappy\Pdf;
|
||||
use Modules\Internal\Transformers\ClaimRequestResource;
|
||||
use Modules\Internal\Transformers\ClaimRequestShowResource;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use App\Services\ClaimRequestService;
|
||||
use App\Exceptions\ImportRowException;
|
||||
use App\Events\ClaimRequested;
|
||||
|
||||
|
||||
use App\Models\File;
|
||||
use App\Models\FilesMcu;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\Member;
|
||||
|
||||
class ClaimRequestController extends Controller
|
||||
{
|
||||
private static $code_prefix = 'CRQ-C';
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
@@ -36,9 +24,6 @@ class ClaimRequestController extends Controller
|
||||
$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->orderBy, function ($q, $orderBy) use ($request) {
|
||||
if (in_array($orderBy, ['submission_date', 'code'])) {
|
||||
@@ -51,7 +36,7 @@ class ClaimRequestController extends Controller
|
||||
->when($request->status, function($q, $status) {
|
||||
$q->where('status', $status);
|
||||
})
|
||||
->with(['member', 'files', 'service', 'member.currentPolicy'])
|
||||
->with(['member', 'files'])
|
||||
->paginate();
|
||||
|
||||
return Helper::paginateResources(ClaimRequestResource::collection($claimRequests));
|
||||
@@ -67,150 +52,13 @@ class ClaimRequestController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* Create New Calim Request
|
||||
*
|
||||
* Bagaskoro, BSD 03 November 2023
|
||||
* Store a newly created resource in storage.
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function createNew(Request $request)
|
||||
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);
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
try {
|
||||
$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'),
|
||||
]);
|
||||
|
||||
$storage_path = storage_path() . "/app/public";
|
||||
$folder = "claim/";
|
||||
|
||||
if (is_dir($storage_path . "/" . $folder) == false) {
|
||||
mkdir($storage_path . "/" . $folder, 0770, true);
|
||||
}
|
||||
|
||||
if (isset($_FILES['file_penunjang'])) {
|
||||
foreach ($_FILES['file_penunjang']['error']["member_" .$member_id] as $key => $value) {
|
||||
if ($value == 0) {
|
||||
$new_file_name = "claim-result-" . time() . "-" . uniqid();
|
||||
$ekstension = "." . explode("/", $_FILES['file_penunjang']['type']["member_" .$member_id][$key])[1];
|
||||
$pathFile = $folder . $new_file_name . $ekstension;
|
||||
|
||||
$tmp_name = $_FILES['file_penunjang']['tmp_name']["member_" .$member_id][$key];
|
||||
$full_path = $_FILES['file_penunjang']['full_path']["member_" .$member_id][$key];
|
||||
|
||||
if (move_uploaded_file($tmp_name, $storage_path . "/" . $pathFile)) {
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-result',
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_FILES['file_diagnosa'])) {
|
||||
foreach ($_FILES['file_diagnosa']['error']["member_" .$member_id] as $key => $value) {
|
||||
if ($value == 0) {
|
||||
$new_file_name = "claim-diagnosis-" . time() . "-" . uniqid();
|
||||
$ekstension = "." . explode("/", $_FILES['file_diagnosa']['type']["member_" .$member_id][$key])[1];
|
||||
$pathFile = $folder . $new_file_name . $ekstension;
|
||||
|
||||
$tmp_name = $_FILES['file_diagnosa']['tmp_name']["member_" .$member_id][$key];
|
||||
$full_path = $_FILES['file_diagnosa']['full_path']["member_" .$member_id][$key];
|
||||
|
||||
if (move_uploaded_file($tmp_name, $storage_path . "/" . $pathFile)) {
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-diagnosis',
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_FILES['file_kondisi'])) {
|
||||
foreach ($_FILES['file_kondisi']['error']["member_" .$member_id] as $key => $value) {
|
||||
if ($value == 0) {
|
||||
$new_file_name = "claim-kondisi-" . time() . "-" . uniqid();
|
||||
$ekstension = "." . explode("/", $_FILES['file_kondisi']['type']["member_" .$member_id][$key])[1];
|
||||
$pathFile = $folder . $new_file_name . $ekstension;
|
||||
|
||||
$tmp_name = $_FILES['file_kondisi']['tmp_name']["member_" .$member_id][$key];
|
||||
$full_path = $_FILES['file_kondisi']['full_path']["member_" .$member_id][$key];
|
||||
|
||||
if (move_uploaded_file($tmp_name, $storage_path . "/" . $pathFile)) {
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-kondisi',
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
}
|
||||
catch (\Throwable $th) {
|
||||
DB::rollBack();
|
||||
|
||||
return Helper::responseJson(status: 'failed', statusCode: 500, message: $th->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Helper::responseJson(status: 'success', statusCode: 201, message: 'Claim Request berhasil ajukan!', data: $request->toArray());
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -225,10 +73,7 @@ class ClaimRequestController extends Controller
|
||||
'histories' => function ($history) {
|
||||
$history->latest();
|
||||
},
|
||||
'files',
|
||||
'member',
|
||||
'claim',
|
||||
'organization',
|
||||
'files'
|
||||
]);
|
||||
|
||||
return Helper::responseJson(data: ClaimRequestShowResource::make($claimRequest));
|
||||
@@ -252,83 +97,7 @@ class ClaimRequestController extends Controller
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$claimRequest = ClaimRequest::findOrFail($id);
|
||||
$claimRequest->load([
|
||||
'histories' => function ($history) {
|
||||
$history->latest();
|
||||
},
|
||||
'files',
|
||||
'member',
|
||||
'claim',
|
||||
'organization',
|
||||
]);
|
||||
$organization = Organization::where('code', $request->provider_code)->first();
|
||||
if (!$organization) {
|
||||
return response()->json(['error' => true, 'message' => 'Data tidak ditemukan'], 404);
|
||||
}
|
||||
|
||||
$updateClaimRequest = ClaimRequestService::updateClaimRequest(organization_id: $organization->id, claim_request_id: $id);
|
||||
|
||||
ClaimRequested::dispatch($updateClaimRequest);
|
||||
// Log History
|
||||
$updateClaimRequest->histories()->create([
|
||||
'title' => 'Update Claim Requested',
|
||||
'description' => "Update Claim Requested for Member : {$claimRequest->member->member_id} - ({$claimRequest->member->full_name})",
|
||||
'type' => 'update',
|
||||
'system_origin' => 'prime-center'
|
||||
]);
|
||||
|
||||
if ($request->hasFile('result_files')) {
|
||||
foreach ($request->result_files as $file) {
|
||||
$pathFile = File::storeFile('claim-result', $id, $file);
|
||||
$updateClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-result',
|
||||
'name' => File::getFileName('claim-result', $id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('diagnosa_files')) {
|
||||
foreach ($request->diagnosa_files as $file) {
|
||||
$pathFile = File::storeFile('claim-diagnosis', $id, $file);
|
||||
$updateClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-diagnosis',
|
||||
'name' => File::getFileName('claim-diagnosis', $id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('kondisi_files')) {
|
||||
foreach ($request->kondisi_files as $file) {
|
||||
$pathFile = File::storeFile('claim-kondisi', $id, $file);
|
||||
$updateClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-kondisi',
|
||||
'name' => File::getFileName('claim-kondisi', $id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => 'Update succses',
|
||||
'data' => $updateClaimRequest],
|
||||
200);
|
||||
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -345,429 +114,20 @@ class ClaimRequestController extends Controller
|
||||
{
|
||||
$claimRequest = ClaimRequest::findOrFail($id);
|
||||
$member = $claimRequest->member;
|
||||
|
||||
try {
|
||||
|
||||
// Create New Claim
|
||||
$newClaim = ClaimService::storeClaim(member: $member, status: 'received', claimRequest: $claimRequest);
|
||||
|
||||
// Update Claim Request Status & Link with Claim
|
||||
$claimRequest->status = 'approved';
|
||||
$claimRequest->claim_id = $newClaim->id;
|
||||
$claimRequest->save();
|
||||
|
||||
// Store Generated Documents LOG
|
||||
$logContent = view('pdf.guaranted_leter', compact('member', 'claimRequest'));
|
||||
$claimRequest->generatedDocuments()->create([
|
||||
'type' => 'guarantee_letter',
|
||||
'title' => 'Guarantee Letter for '. $member->full_name,
|
||||
'document_type' => 'type',
|
||||
'html_content' => $logContent,
|
||||
'system_origin' => 'primecenter'
|
||||
]);
|
||||
|
||||
// Claim Log
|
||||
DB::table('claim_logs')
|
||||
->insert([
|
||||
'claim_request_id' => $id,
|
||||
'status' => 'reviewed',
|
||||
'date' => date('Y-m-d H:i:s'),
|
||||
'description' => "Claim Requested Successfully Reviewed",
|
||||
'system_origin' => 'prime-center',
|
||||
'created_by' => auth()->user()->id,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at'=> date('Y-m-d H:i:s'),
|
||||
]);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return $e->getMessage();
|
||||
}
|
||||
|
||||
$claimRequest->status = 'approved';
|
||||
$claimRequest->save();
|
||||
|
||||
// Store Generated Documents
|
||||
$logContent = view('pdf.guaranted_leter', compact('member', 'claimRequest'));
|
||||
$claimRequest->generatedDocuments()->create([
|
||||
'type' => 'guarantee_letter',
|
||||
'title' => 'Guarantee Letter for '. $member->full_name,
|
||||
'document_type' => 'type',
|
||||
'html_content' => $logContent,
|
||||
'system_origin' => 'primecenter'
|
||||
]);
|
||||
|
||||
return $claimRequest;
|
||||
}
|
||||
|
||||
public function filesMcu(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'id' => 'required',
|
||||
'memberid' => 'required'
|
||||
]);
|
||||
if ($request->hasFile('result_files')) {
|
||||
$pathFile = File::storeFile('claim-result', $request->id, $request->result_files);
|
||||
$data = [
|
||||
'memberid' => $request->id,
|
||||
'original_name' => $request->result_files->getClientOriginalName(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id
|
||||
];
|
||||
FilesMcu::create($data);
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'Berhasil tambah file MemberID '.$request->memberid.', silahkan lihat dilaporan');
|
||||
}
|
||||
else
|
||||
{
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'Tidak ada file member yang ditambahkan');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function importClaim(Request $request)
|
||||
{
|
||||
|
||||
$request->validate([
|
||||
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
|
||||
]);
|
||||
$file_name = now()->getPreciseTimestamp(3) . '-' . $request->file('file')->getClientOriginalName();
|
||||
$file = $request->file('file')->storeAs('temp', $file_name);
|
||||
$fileWrite = Storage::disk('public')->path('temp/result-' . $file_name);
|
||||
$fileRead = Storage::path('temp/' . $file_name);
|
||||
$import = new ImportService();
|
||||
$import->read($fileRead);
|
||||
$import->write($fileWrite, 'xsls');
|
||||
foreach ($import->sheetsIterator() as $sheetIndex => $sheet) {
|
||||
if ($sheetIndex == 1) { // Rename First Sheet to Writer
|
||||
$firstWriterSheet = $import->writer->getCurrentSheet();
|
||||
$firstWriterSheet->setName($sheet->getName());
|
||||
} else { // Add New Sheet to Writer
|
||||
$nextWriterSheet = $import->writer->addNewSheetAndMakeItCurrent();
|
||||
$nextWriterSheet->setName($sheet->getName());
|
||||
}
|
||||
|
||||
$headers_map_to_table_fields = ClaimRequest::$doc_headers_to_field_map;
|
||||
|
||||
// Write Header to File
|
||||
$result_headers = array_keys($headers_map_to_table_fields);
|
||||
$result_headers = array_merge($result_headers, ['Ingest Code', 'Ingest Note']);
|
||||
|
||||
$import->addArrayToRow($result_headers);
|
||||
$doc_headers_indexes = [];
|
||||
foreach ($sheet->getRowIterator() as $index => $row) {
|
||||
if ($index == 1) { // First Row Must be Header
|
||||
foreach ($row->getCells() as $index => $cell) {
|
||||
$title = $cell->getValue();
|
||||
$title = preg_replace("/\r|\n/", " ", $title);
|
||||
$title = preg_replace('/\xc2\xa0/', " ", $title);
|
||||
$title = rtrim($title);
|
||||
$title = ltrim($title);
|
||||
$doc_headers_indexes[$index] = $title;
|
||||
}
|
||||
// TODO Validate if First Row not Header
|
||||
} else { // Next Row Should be Data
|
||||
$row_data = [];
|
||||
foreach ($row->getCells() as $header_index => $cell) {
|
||||
if (isset($headers_map_to_table_fields[$doc_headers_indexes[$header_index]]))
|
||||
$row_data[$headers_map_to_table_fields[$doc_headers_indexes[$header_index]]] = $cell->getValue();
|
||||
}
|
||||
try { // Process the Row Data
|
||||
$claimRequestService = new ClaimRequestService();
|
||||
|
||||
$claimRequestService->handleClaimRequestRow($row_data);
|
||||
|
||||
// Write Success Result to File
|
||||
// $import->read($fileRead);
|
||||
// $import->write($fileWrite, 'xsls');
|
||||
$result_headers = array_merge($row_data, ['Ingest Code' =>200, 'Ingest Note' => 'Success']);
|
||||
|
||||
$import->addArrayToRow($result_headers, $sheet->getName());
|
||||
|
||||
} catch (ImportRowException $e) {
|
||||
// Write Data Validation Error to File
|
||||
// $import->read($fileRead);
|
||||
// $import->write($fileWrite, 'xsls');
|
||||
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => $e->getCode(),
|
||||
'Ingest Note' => $e->getMessage(),
|
||||
]), $sheet->getName());
|
||||
}
|
||||
// catch (\Exception $e) {
|
||||
// // throw new \Exception($e);
|
||||
// // Write Server Error to File
|
||||
// // $import->read($fileRead);
|
||||
// // $import->write($fileWrite, 'xsls');
|
||||
// dd( $e->getMessage());
|
||||
// $import->addArrayToRow(array_merge($row_data, [
|
||||
// 'Ingest Code' => 500,
|
||||
// 'Ingest Note' => env('APP_DEBUG') ? $e->getMessage() : 'Server Error',
|
||||
// ]), $sheet->getName());
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
$import->reader->close();
|
||||
Storage::delete('temp/' . $file_name);
|
||||
$import->writer->close();
|
||||
|
||||
return [
|
||||
// 'total_successed_row' => $imported_plan_data,
|
||||
// 'total_failed_row' => count($failed_plan_data),
|
||||
// 'failed_row' => $failed_plan_data,
|
||||
'result_file' => [
|
||||
'url' => Storage::disk('public')->url('temp/result-' . $file_name),
|
||||
'name' => 'result-' . $file_name,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function claimRequestDetail($claimRequestId)
|
||||
{
|
||||
$status = DB::table('claim_requests')
|
||||
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id')
|
||||
->where('claim_requests.id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_requests.submission_date',
|
||||
'claim_requests.code',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_requests.status = "requested" THEN "requested"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "approved" THEN "approved"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "declined" THEN "declined"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "disbrusmented" THEN "disbrusmented"
|
||||
/*WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "pending"*/
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "reviewed"
|
||||
ELSE ""
|
||||
END AS status
|
||||
')
|
||||
)
|
||||
->first();
|
||||
$results['status'] = $status;
|
||||
$timeline = DB::table('claim_logs')
|
||||
->where('claim_logs.claim_request_id', '=', $claimRequestId)
|
||||
->select(
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "Request"
|
||||
WHEN claim_logs.status = "reviewed" THEN "Review"
|
||||
WHEN claim_logs.status = "approved" THEN "Approval"
|
||||
WHEN claim_logs.status = "declined" THEN "Decline"
|
||||
ELSE "-"
|
||||
END AS txt_status
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "#159C9C"
|
||||
WHEN claim_logs.status = "reviewed" THEN "#0C53B7"
|
||||
WHEN claim_logs.status = "approved" THEN "#229A16"
|
||||
WHEN claim_logs.status = "declined" THEN "#FF4842"
|
||||
ELSE "-"
|
||||
END AS txt_status_color
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "#00AB5529"
|
||||
WHEN claim_logs.status = "reviewed" THEN "#1890FF29"
|
||||
WHEN claim_logs.status = "approved" THEN "#54D62C29"
|
||||
WHEN claim_logs.status = "declined" THEN "#FF48427A"
|
||||
ELSE "-"
|
||||
END AS txt_status_backgroundColor
|
||||
'),
|
||||
'claim_logs.date',
|
||||
'claim_logs.description',
|
||||
'claim_logs.status'
|
||||
)
|
||||
->orderBy('claim_logs.id', 'desc')
|
||||
->get();
|
||||
$results['timeline'] = $timeline;
|
||||
$request_files = DB::table('claim_request_files')
|
||||
->where('claim_request_files.claim_request_id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_request_files.*',
|
||||
DB::raw('(SELECT files.fileable_id FROM files WHERE files.fileable_id = claim_request_files.claim_request_id AND files.type = claim_request_files.type LIMIT 1) AS check_files'),
|
||||
)
|
||||
->get();
|
||||
$results['request_files'] = $request_files;
|
||||
$documents = DB::table('files')
|
||||
->where('fileable_type', 'App\Models\ClaimRequest')
|
||||
->where('fileable_id', $claimRequestId)
|
||||
->select('original_name', \DB::raw("CONCAT('" . env('APP_URL') . "/storage/', path) as path"), 'type')
|
||||
->orderBy('id', 'desc')
|
||||
->get();
|
||||
$results['documents'] = $documents;
|
||||
$dialog_submits = DB::table('claim_requests')
|
||||
->leftJoin('members', 'claim_requests.member_id','=', 'members.id')
|
||||
->where('claim_requests.id', $claimRequestId)
|
||||
->select('claim_requests.code', 'members.name', 'claim_requests.submission_date', 'claim_requests.service_code','claim_requests.status')
|
||||
->first();
|
||||
$results['dialog_submits'] = $dialog_submits;
|
||||
|
||||
return Helper::responseJson($results);
|
||||
}
|
||||
|
||||
public function invoiceFiles(Request $request, $claim_id)
|
||||
{
|
||||
if ($request->hasFile('invoice_files')) {
|
||||
foreach ($request->invoice_files as $file) {
|
||||
$pathFile = File::storeFile('claim-invoice', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-invoice',
|
||||
'name' => File::getFileName('claim-invoice', $claim_id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
if($request->date)
|
||||
{
|
||||
DB::table('claim_requests')
|
||||
->where('id', $claim_id)
|
||||
->update(['invoice_date' => $request->date]);
|
||||
|
||||
}
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'Invoice Success Uploaded');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Claim Member - Infinite Scroll
|
||||
*
|
||||
* Bagaskoro, BSD 31 Oktober 2023
|
||||
*/
|
||||
public function getClaimMemberInfiniteScroll(Request $request)
|
||||
{
|
||||
$offset = 0;
|
||||
$limit = 10;
|
||||
$page = $request->get('page');
|
||||
$keyword = $request->get('keyword');
|
||||
|
||||
if ($page > 1) {
|
||||
$offset = ($page*$limit)-$limit;
|
||||
}
|
||||
|
||||
$memberList = DB::table('members')
|
||||
->select('id','member_id','name')
|
||||
->where("name", "like", "%$keyword%")
|
||||
->orWhere("member_id", "like", "%$keyword%")
|
||||
->orderBy('created_at', 'asc')
|
||||
->offset($offset)
|
||||
->limit($limit)
|
||||
->get();
|
||||
|
||||
$data = [];
|
||||
if(count($memberList)>0){
|
||||
$temp = [];
|
||||
foreach($memberList as $d){
|
||||
$serviceType = $this->getServiceMember($d->id);
|
||||
$temp['id'] = $d->id;
|
||||
$temp['member_id'] = $d->member_id;
|
||||
$temp['name'] = $d->name;
|
||||
$temp['service_type'] = $serviceType;
|
||||
|
||||
|
||||
array_push($data, $temp);
|
||||
}
|
||||
|
||||
}
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => [
|
||||
'member_list'=> $data,
|
||||
]
|
||||
],200);
|
||||
}
|
||||
|
||||
public function getServiceMember($id){
|
||||
$service = DB::table('member_plans')
|
||||
->select('plans.service_code as code', 'services.name')
|
||||
->join('plans', 'member_plans.plan_id', '=', 'plans.id')
|
||||
->join('services', 'plans.service_code', '=', 'services.code')
|
||||
->where('member_id', $id)
|
||||
->get()
|
||||
->toArray();
|
||||
return $service;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
public function requestFiles(Request $request, $claim_id)
|
||||
{
|
||||
|
||||
if ($request->hasFile('fileDiagnosis')) {
|
||||
foreach ($request->fileDiagnosis as $file) {
|
||||
$pathFile = File::storeFile('claim-diagnosis', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-diagnosis',
|
||||
'name' => File::getFileName('claim-diagnosis', $claim_id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('fileKondisis')) {
|
||||
foreach ($request->fileKondisis as $file) {
|
||||
$pathFile = File::storeFile('claim-kondisi', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-kondisi',
|
||||
'name' => File::getFileName('claim-kondisi', $claim_id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('fileResults')) {
|
||||
foreach ($request->fileResults as $file) {
|
||||
$pathFile = File::storeFile('claim-result', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-result',
|
||||
'name' => File::getFileName('claim-result', $claim_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: 'Invoice Success Uploaded');
|
||||
}
|
||||
}
|
||||
|
||||
19
Modules/Internal/Http/Controllers/Api/CorporateBenefitController.php
Normal file → Executable file
19
Modules/Internal/Http/Controllers/Api/CorporateBenefitController.php
Normal file → Executable file
@@ -20,12 +20,10 @@ class CorporateBenefitController extends Controller
|
||||
$benefits = CorporateBenefit::query()
|
||||
->filter($request->all())
|
||||
->where('corporate_id', $corporate_id)
|
||||
->with('benefit', 'plan')
|
||||
->paginate(10)
|
||||
->paginate(0)
|
||||
->appends($request->all());
|
||||
return $benefits;
|
||||
}
|
||||
|
||||
public function activation(Request $request, $benefit_id)
|
||||
{
|
||||
$request->validate([
|
||||
@@ -33,9 +31,9 @@ class CorporateBenefitController extends Controller
|
||||
]);
|
||||
|
||||
// abort(404);
|
||||
$benefit = CorporateBenefit::find($benefit_id);
|
||||
$benefit->active = $request->active == 1 ? 0 : 1;
|
||||
$benefit->reason = $request->reason;
|
||||
|
||||
$benefit = CorporateBenefit::findOrFail($benefit_id);
|
||||
$benefit->active = $request->active == '1';
|
||||
|
||||
if ($benefit->save()) {
|
||||
return response()->json([
|
||||
@@ -109,15 +107,18 @@ class CorporateBenefitController extends Controller
|
||||
{
|
||||
|
||||
$corporateBenefit = CorporateBenefit::findOrFail($id);
|
||||
|
||||
$request->validate([
|
||||
'budget' => [
|
||||
'code' => [
|
||||
'required',
|
||||
Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporateBenefit->id)
|
||||
],
|
||||
'name' => 'required'
|
||||
]);
|
||||
|
||||
$corporateBenefit->fill([
|
||||
'budget' => $request->budget,
|
||||
'code' => $request->code,
|
||||
'name' => $request->name,
|
||||
'active' => $request->active,
|
||||
])->save();
|
||||
|
||||
return $corporateBenefit;
|
||||
|
||||
357
Modules/Internal/Http/Controllers/Api/CorporateController.php
Normal file → Executable file
357
Modules/Internal/Http/Controllers/Api/CorporateController.php
Normal file → Executable file
@@ -19,13 +19,11 @@ use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
use App\Models\File;
|
||||
use Illuminate\Support\Facades\File as FacadesFile;
|
||||
use Illuminate\Support\Facades\Response;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Modules\Internal\Services\CorporateService;
|
||||
use App\Models\FilesDoc;
|
||||
|
||||
class CorporateController extends Controller
|
||||
{
|
||||
@@ -79,11 +77,9 @@ class CorporateController extends Controller
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
|
||||
$request->validate([
|
||||
'code' => 'required|regex:/^[a-zA-Z0-9_]+$/',
|
||||
'code' => 'required|regex:/^[a-zA-Z0-9]+$/',
|
||||
'name' => 'required',
|
||||
'payor_id' => 'required',
|
||||
// 'logo' => 'required',
|
||||
'policy_code' => 'required_with:policy_id',
|
||||
'policy_total_premi' => 'required_with:policy_code',
|
||||
@@ -94,6 +90,7 @@ class CorporateController extends Controller
|
||||
'policy_stop_service_percentage' => 'required_with:policy_code',
|
||||
'policy_stop_service_net' => 'required_with:policy_code',
|
||||
]);
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
$corporate_data = $request->all();
|
||||
@@ -101,9 +98,9 @@ class CorporateController extends Controller
|
||||
|
||||
$newCorporate = Corporate::create($request->all());
|
||||
if ($request->has('policy_code') && !empty($request->policy_code)) {
|
||||
// dd($request->policy_code, 'fuck you');
|
||||
$newCorporate->policies()->create([
|
||||
'code' => $request->policy_code ?? NULL,
|
||||
'payor_id' => $request->payor_id ?? NULL,
|
||||
'total_premi' => $request->policy_total_premi ?? NULL,
|
||||
'minimal_deposit_percentage' => $request->policy_minimal_deposit_percentage ?? NULL,
|
||||
'minimal_deposit_net' => $request->policy_minimal_deposit_net ?? NULL,
|
||||
@@ -121,9 +118,9 @@ class CorporateController extends Controller
|
||||
$services = [
|
||||
[
|
||||
'id' => 1,
|
||||
'name' => 'Outpatient',
|
||||
'name' => 'Out Patient',
|
||||
'code' => 'OP',
|
||||
'description' => 'Outpatient',
|
||||
'description' => 'Out Patient',
|
||||
],
|
||||
[
|
||||
'id' => 2,
|
||||
@@ -304,8 +301,7 @@ class CorporateController extends Controller
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$request->validate([
|
||||
'code' => 'required|regex:/^[a-zA-Z0-9_]+$/',
|
||||
'payor_id' => 'required',
|
||||
'code' => 'required|regex:/^[a-zA-Z0-9]+$/',
|
||||
'name' => 'required',
|
||||
'policy_code' => 'required_with:policy_id',
|
||||
'policy_total_premi' => 'required_with:policy_code',
|
||||
@@ -332,7 +328,6 @@ class CorporateController extends Controller
|
||||
['id' => $request->policy_id],
|
||||
[
|
||||
'code' => $request->policy_code ?? NULL,
|
||||
'payor_id' => $request->payor_id ?? NULL,
|
||||
'total_premi' => $request->policy_total_premi ?? NULL,
|
||||
'minimal_deposit_percentage' => $request->policy_minimal_deposit_percentage ?? NULL,
|
||||
'minimal_deposit_net' => $request->policy_minimal_deposit_net ?? NULL,
|
||||
@@ -381,15 +376,13 @@ class CorporateController extends Controller
|
||||
public function activation(Request $request, $corporate_id)
|
||||
{
|
||||
$request->validate([
|
||||
'active' => 'required',
|
||||
'reason' => 'required'
|
||||
'active' => 'required'
|
||||
]);
|
||||
|
||||
// abort(404);
|
||||
|
||||
$corporate = Corporate::findOrFail($corporate_id);
|
||||
$corporate->active = $request->active == 0 ? 1 : 0;
|
||||
$corporate->reason = $request->reason;
|
||||
$corporate->active = $request->active == '1';
|
||||
|
||||
if ($corporate->save()) {
|
||||
return response()->json([
|
||||
@@ -404,14 +397,14 @@ class CorporateController extends Controller
|
||||
$request->validate([
|
||||
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
|
||||
]);
|
||||
// dd($request->toArray());
|
||||
$file_name = now()->getPreciseTimestamp(3) . '-' . $request->file('file')->getClientOriginalName();
|
||||
$file = $request->file('file')->storeAs('temp', $file_name);
|
||||
$corporate = Corporate::with(['plans'])->findOrFail($corporate_id);
|
||||
$fileWrite = Storage::disk('public')->path('temp/result-' . $file_name);
|
||||
$fileRead = Storage::path('temp/' . $file_name);
|
||||
|
||||
$import = new ImportService();
|
||||
$import->read($fileRead);
|
||||
$import->write($fileWrite, 'xsls');
|
||||
$import->read(Storage::path('temp/' . $file_name));
|
||||
$import->write(Storage::disk('public')->path('temp/result-' . $file_name), 'xsls');
|
||||
|
||||
foreach ($import->sheetsIterator() as $sheetIndex => $sheet) {
|
||||
if (!in_array($sheet->getName(), ['Plan', 'Benefit'])) {
|
||||
@@ -434,11 +427,9 @@ class CorporateController extends Controller
|
||||
// Write Header to File
|
||||
$result_headers = array_keys($headers_map_to_table_fields);
|
||||
$result_headers = array_merge($result_headers, ['Ingest Code', 'Ingest Note']);
|
||||
|
||||
// $import->read($fileRead);
|
||||
// $import->write($fileWrite, 'xsls');
|
||||
$import->addArrayToRow($result_headers);
|
||||
}
|
||||
|
||||
$doc_headers_indexes = [];
|
||||
foreach ($sheet->getRowIterator() as $index => $row) {
|
||||
if ($index == 1) { // First Row Must be Header
|
||||
@@ -453,10 +444,12 @@ class CorporateController extends Controller
|
||||
// TODO Validate if First Row not Header
|
||||
} else { // Next Row Should be Data
|
||||
$row_data = [];
|
||||
|
||||
foreach ($row->getCells() as $header_index => $cell) {
|
||||
if (isset($headers_map_to_table_fields[$doc_headers_indexes[$header_index]]))
|
||||
$row_data[$headers_map_to_table_fields[$doc_headers_indexes[$header_index]]] = $cell->getValue();
|
||||
}
|
||||
|
||||
try { // Process the Row Data
|
||||
$corporateService = new CorporateService();
|
||||
if ($sheet->getName() == 'Plan') {
|
||||
@@ -464,17 +457,14 @@ class CorporateController extends Controller
|
||||
} else if ($sheet->getName() == 'Benefit') {
|
||||
$corporateService->handleBenefitRow($corporate, $row_data);
|
||||
}
|
||||
|
||||
// Write Success Result to File
|
||||
// $import->read($fileRead);
|
||||
// $import->write($fileWrite, 'xsls');
|
||||
$result_headers = array_merge($row_data, ['Ingest Code' =>200, 'Ingest Note' => 'Success']);
|
||||
|
||||
$import->addArrayToRow($result_headers, $sheet->getName());
|
||||
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => 200,
|
||||
'Ingest Note' => 'Success',
|
||||
]), $sheet->getName());
|
||||
} catch (ImportRowException $e) {
|
||||
// Write Data Validation Error to File
|
||||
// $import->read($fileRead);
|
||||
// $import->write($fileWrite, 'xsls');
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => $e->getCode(),
|
||||
'Ingest Note' => $e->getMessage(),
|
||||
@@ -482,8 +472,6 @@ class CorporateController extends Controller
|
||||
} catch (\Exception $e) {
|
||||
// throw new \Exception($e);
|
||||
// Write Server Error to File
|
||||
// $import->read($fileRead);
|
||||
// $import->write($fileWrite, 'xsls');
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => 500,
|
||||
'Ingest Note' => env('APP_DEBUG') ? $e->getMessage() : 'Server Error',
|
||||
@@ -507,18 +495,7 @@ class CorporateController extends Controller
|
||||
];
|
||||
}
|
||||
|
||||
public function deleteAllImportPlanBenefit(Request $request, $corporate_id){
|
||||
$deleteBenefit = CorporateBenefit::where('corporate_id', $corporate_id)->delete();
|
||||
$deletePlan = Plan::where('corporate_id', $corporate_id)->delete();
|
||||
if ( $deleteBenefit && $deletePlan ){
|
||||
return Helper::responseJson(data: [], message: 'Berhasil delete semua benefit');
|
||||
} else {
|
||||
return Helper::responseJson(data: [], message: 'Gagal delete semua benefit', statusCode:404);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function importDocumentExample($document_type)
|
||||
public function importDocumentExample($document_type)
|
||||
{
|
||||
switch ($document_type) {
|
||||
case 'plan-benefit':
|
||||
@@ -532,304 +509,16 @@ class CorporateController extends Controller
|
||||
'file_name' => "Corporate Membership Import.xlsx",
|
||||
"file_url" => url('files/Corporate Membership Import.xlsx')
|
||||
]);
|
||||
break;
|
||||
break;
|
||||
case 'diagnosis-exclusion':
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Corporate Exclusion Import.xlsx",
|
||||
"file_url" => url('files/Corporate Exclusion Import.xlsx')
|
||||
]);
|
||||
break;
|
||||
case 'master-icd':
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Template - ICD.xlsx",
|
||||
"file_url" => url('files/Template - ICD.xlsx')
|
||||
]);
|
||||
break;
|
||||
case 'master-formularium':
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Template - Formularium.xlsx",
|
||||
"file_url" => url('files/Template - Formularium.xlsx')
|
||||
]);
|
||||
break;
|
||||
case 'master-formularium-corporate':
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Template - Formularium.xlsx",
|
||||
"file_url" => url('files/Template - Formularium - Corporate.xlsx')
|
||||
]);
|
||||
break;
|
||||
case 'claim-request':
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Template Format Claim.xlsx",
|
||||
"file_url" => url('files/Template Format Claim.xlsx')
|
||||
]);
|
||||
break;
|
||||
case 'request-log':
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Template Update Status Request LOG.xlsx",
|
||||
"file_url" => url('files/Template Update Status Request LOG.xlsx')
|
||||
]);
|
||||
break;
|
||||
case 'template-request-log':
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Template Import Request LOG.xlsx.xlsx",
|
||||
"file_url" => url('files/Template Import Request LOG.xlsx.xlsx')
|
||||
]);
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
return Helper::responseJson([], 'error', 404);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public function dataPlanBenefit(Request $request, $corporate_id){
|
||||
|
||||
$file_name = 'Corporate Plan and Benefit';
|
||||
// Membuat penulis entitas Spout
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
// Membuka penulis untuk menulis ke file
|
||||
$writer->openToFile(public_path('files/CorporatePlan&BenefitImportData.xlsx'));
|
||||
|
||||
// Sheet 1
|
||||
$writer->getCurrentSheet()->setName('Plans');
|
||||
$headers_map_to_table_fields = Plan::$listing_doc_headers;
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields);
|
||||
$writer->addRow($headerRow);
|
||||
|
||||
$dataPlans = Plan::query()
|
||||
->filter($request->all())
|
||||
->where('corporate_id', $corporate_id)
|
||||
// ->whereHas('corporatePlan', function ($corporatePlan) use ($corporate_id) {
|
||||
// $corporatePlan->where('corporate_id', $corporate_id);
|
||||
// })
|
||||
// ->with('corporatePlan')
|
||||
->orderBy('corporate_plan_id', 'asc')
|
||||
->get()->toArray();
|
||||
foreach ($dataPlans as $index => $row){
|
||||
$rowData = [
|
||||
$row['service_code'], // Service
|
||||
$row['corporate_plan_id'], // Plan
|
||||
$row['code'], // Customer plans
|
||||
$row['type'], // Plan Type
|
||||
$row['start'], // Start Date of Plan
|
||||
$row['end'], // End Date of Plan
|
||||
$row['require_referral'], // Referral
|
||||
$row['referral_source'], // Referral Source
|
||||
$row['referral_duration'], // Referral Duration
|
||||
$row['family_plan'], // Family Plan
|
||||
$row['family_plan_share_rules'], // Family Sharing Overflow
|
||||
$row['limit_rules'], // Plan Limit
|
||||
$row['layer'], // Layer ID
|
||||
$row['layer_conditions'], // Layer Condition
|
||||
$row['budget_type'], // Budget Type
|
||||
$row['budget_code'], // Budget Code
|
||||
$row['budget_conditions'], // Budget Condition
|
||||
$row['surgery_limit'], // Surgery
|
||||
$row['non_surgery_limit'], // Non Surgery
|
||||
$row['max_claim_limit'], // Max/Claim
|
||||
$row['max_claim_count'], // Max Count of Claim
|
||||
$row['area_limit'], // Area
|
||||
$row['limit_shared_plans'], // Shared Plan
|
||||
$row['limit_shared_plan_type'], // Shared Plan Type
|
||||
$row['cashless_percentage'], // Cashless(%)
|
||||
$row['reimbursement_percentage'], // Reimbursement(%)
|
||||
$row['digital_percentage'], // Digital(%)
|
||||
$row['co_share_m_percentage'], // CoShareM(%)
|
||||
$row['co_share_s_percentage'], // CoShareS(%)
|
||||
$row['co_share_c_percentage'], // CoShareC(%)
|
||||
$row['cashless_deductible'], // Cashless Deductible
|
||||
$row['cashless_deductible'], // Reimbursement Deductible
|
||||
$row['digital_deductible'], // Digital Deductible
|
||||
$row['co_share_m_deductible'], // DeductibleM
|
||||
$row['co_share_s_deductible'], // DeductibleS
|
||||
$row['co_share_c_deductible'], // DeductibleC
|
||||
$row['co_share_deductible_condition'], // Co-share & Deductible Condition
|
||||
$row['msc'], // MSC
|
||||
$row['genders'], // Gender
|
||||
$row['min_age'], // Min Age
|
||||
$row['max_age'], // Max Age
|
||||
$row['rule_of_excess'], // Rule of Excess
|
||||
$row['max_excess_covered'], // Max Excess Covered
|
||||
$row['prorate_type'], // Prorate Type
|
||||
$row['prorate_lookup'], // Prorate Lookup
|
||||
$row['currency'], // Currency
|
||||
$row['max_surgery_reinstatement_days'], // Reinstatement days for Surgery NonSurgery
|
||||
$row['max_surgery_periode_days'], // Max Periode of Surgery Non Surgery
|
||||
];
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
|
||||
// Menutup penulis
|
||||
|
||||
// Sheet 2
|
||||
$writer->addNewSheetAndMakeItCurrent();
|
||||
$writer->getCurrentSheet()->setName('Benefit');
|
||||
$headers_map_to_table_fields = CorporateBenefit::$listing_doc_headers;
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields);
|
||||
$writer->addRow($headerRow);
|
||||
|
||||
$dataBenfit = CorporateBenefit::query()
|
||||
->where('corporate_id', $corporate_id)
|
||||
->with('benefit', 'plan')
|
||||
->orderBy('plan_id', 'asc')
|
||||
->get()->toArray();
|
||||
// dd($dataBenfit);
|
||||
foreach($dataBenfit as $index => $row){
|
||||
$rowData = [
|
||||
$row['benefit']['service_code'] ?? NULL, // "Service",
|
||||
$row['plan']['type'] ?? NULL, // "Plan",
|
||||
$row['benefit']['code'] ?? NULL, // "Benefit Code",
|
||||
$row['benefit']['code'] ?? NULL, // "Customer Benefit Code",
|
||||
$row['benefit']['description'] ?? NULL, // "Detail Benefit",
|
||||
$row['budget'], // "ASO/Budget",
|
||||
$row['budget_conditions'], // "Budget Condition",
|
||||
$row['budget_code'], // "Budget Code",
|
||||
$row['primary_benefit_code'], // "Primary benefit",
|
||||
$row['benefit_mode'], // "Benefit Mode",
|
||||
$row['room_class_coverage'], // "Room Class",
|
||||
$row['max_bed_coverage'], // "Max Bed",
|
||||
$row['tolerance_parameter'], // "Tolerance Paramater",
|
||||
$row['max_room_class'], // "Max. Room Class",
|
||||
$row['limit_amount'], // "Limit Value",
|
||||
$row['area_limit'], // "Area",
|
||||
$row['shared_benefit'], // "Shared Benefit With",
|
||||
$row['shared_benefit_type'], // "Shared Benefit Type",
|
||||
$row['msc'], // "MSC",
|
||||
$row['genders'], // "Gender",
|
||||
$row['min_age'], // "Min Age",
|
||||
$row['max_age'], // "Max Age",
|
||||
$row['max_frequency_period'], // "Freq. Period",
|
||||
$row['daily_frequency'], // "Daily Frequency",
|
||||
$row['weekly_frequency'], // "Weekly Frequency",
|
||||
$row['monthly_frequency'], // "Monthly Frequency",
|
||||
$row['yearly_frequency'], // "Yearly Frequency",
|
||||
$row['custom_frequency_days'], // "Custom Duration",
|
||||
$row['custom_duration_value'], // "Custom Duration Value",
|
||||
NULL, // "Cashless, Reimbursement",
|
||||
$row['high_plan_factor'], // "High Plan Factor",
|
||||
$row['pre_post_treatment'], // "Pre Post Treatment",
|
||||
$row['pre_treatment_days'], // "Pre Treatment",
|
||||
$row['post_treatment_days'], // "Post Treatment",
|
||||
$row['layer_type_1'], // "Layer Type 1",
|
||||
$row['layer_value_1'], // "Layer Value 1",
|
||||
$row['layer_type_2'], // "Layer Type 2",
|
||||
$row['layer_value_2'], // "Layer Value 2",
|
||||
$row['cashless_percentage'], // "Cashless (%)",
|
||||
$row['reimbursement_percentage'], // "Reimburse (%)",
|
||||
$row['digital_percentage'], // "Digital (%)",
|
||||
$row['co_share_m_percentage'], // "CoShareM (%)",
|
||||
$row['co_share_s_percentage'], // "CoShareS (%)",
|
||||
$row['co_share_c_deductible'], // "CoShareC (%)",
|
||||
$row['cashless_deductible'], // "Cashless Deductible",
|
||||
$row['reimbursement_deductible'], // "Reimbursement Deductible",
|
||||
$row['digital_deductible'], // "Digital Deductible",
|
||||
$row['co_share_m_deductible'], // "DeductibleM",
|
||||
$row['co_share_s_deductible'], // "DeductibleS",
|
||||
$row['co_share_c_deductible'], // "DeductibleC",
|
||||
$row['prorate_type'], // "Prorate Type",
|
||||
$row['prorate_lookup'], // "Prorate Lookup",
|
||||
$row['max_days_for_disability'], // "Max Days for Disability",
|
||||
$row['max_period_for_disability'], // "Max Periode of Disability",
|
||||
$row['limit_free_tc'], // "Currency",
|
||||
$row['currency'], // "Currency",
|
||||
$row['show_benefit_item'], // "Show Benefit Item",
|
||||
$row['show_benefit_value'], // "Show Benefit Value",
|
||||
];
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
|
||||
$writer->close();
|
||||
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Data Corporate Plan & Benefit List " . date('Y-m-d h:i:s'),
|
||||
"file_url" => url('files/CorporatePlan&BenefitImportData.xlsx')
|
||||
]);
|
||||
}
|
||||
|
||||
public function corporateCode(Request $request){
|
||||
$corporates = Corporate::query()
|
||||
->when($request->search, function ($query, $search) {
|
||||
return $query->where('name', 'LIKE', '%' . $search . '%')
|
||||
->orWhere('code', 'LIKE', '%' . $search . '%');
|
||||
})
|
||||
->with('currentPolicy', 'subCorporates')
|
||||
->withCount([
|
||||
'employees',
|
||||
'corporateBenefits',
|
||||
'corporatePlans',
|
||||
|
||||
// 'claims'
|
||||
])
|
||||
->where('active', 1)
|
||||
->get()
|
||||
->pluck('code');
|
||||
|
||||
return $corporates;
|
||||
}
|
||||
|
||||
public function addFilesDoc(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'corporate_id' => 'required'
|
||||
]);
|
||||
if ($request->hasFile('result_files')) {
|
||||
$pathFile = File::storeFile('docs', $request->corporate_id, $request->result_files);
|
||||
$data = [
|
||||
'corporate_id' => $request->corporate_id,
|
||||
'original_name' => $request->result_files->getClientOriginalName(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id
|
||||
];
|
||||
FilesDoc::create($data);
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'Berhasil tambah file '.$data['original_name']);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'Tidak ada file yang ditambahkan');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function getFilesDoc(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'corporate_id' => 'required'
|
||||
]);
|
||||
$datas = FilesDoc::where('corporate_id', $request->corporate_id)
|
||||
->select('original_name', \DB::raw("CONCAT('" . env('APP_URL') . "/storage/', path) as path"), 'status_download')
|
||||
->orderBy('id', 'desc')
|
||||
//->limit(1)
|
||||
->get();
|
||||
if ($datas->isEmpty()) {
|
||||
return Helper::responseJson(data: [], message: 'Tidak ada data');
|
||||
}
|
||||
return Helper::responseJson(data: $datas, message: 'Berhasil mendapatkan data');
|
||||
}
|
||||
|
||||
public function updateStatusFilesDoc(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'status_download' => 'required',
|
||||
'corporate_id' => 'required'
|
||||
]);
|
||||
|
||||
$data_requests = [
|
||||
'status_download' => $request->status_download
|
||||
];
|
||||
|
||||
FilesDoc::where('corporate_id', $request->corporate_id)
|
||||
->update($data_requests);
|
||||
|
||||
$datas = FilesDoc::where('corporate_id', $request->corporate_id)
|
||||
->select('status_download')
|
||||
->orderBy('id', 'desc')
|
||||
->limit(1)
|
||||
->get();
|
||||
|
||||
return Helper::responseJson(data: $datas, message: 'Berhasil update status download menjadi '.($request->status_download == 0 ? 'Inactive' : 'Active'));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
317
Modules/Internal/Http/Controllers/Api/CorporateFormulariumController.php
Normal file → Executable file
317
Modules/Internal/Http/Controllers/Api/CorporateFormulariumController.php
Normal file → Executable file
@@ -2,25 +2,13 @@
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Exceptions\ImportRowException;
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\CorporateFormularium;
|
||||
use App\Models\Formularium;
|
||||
use App\Models\FormulariumTemplate;
|
||||
use App\Services\ImportService;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Modules\Internal\Transformers\CorporateFormulariumResource;
|
||||
use Modules\Internal\Services\FormulariumService;
|
||||
|
||||
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
|
||||
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
|
||||
use Box\Spout\Common\Entity\Style\CellAlignment;
|
||||
use Box\Spout\Common\Entity\Style\Color;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
use Box\Spout\Common\Entity\Row;
|
||||
|
||||
class CorporateFormulariumController extends Controller
|
||||
{
|
||||
@@ -28,24 +16,25 @@ class CorporateFormulariumController extends Controller
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function __construct(FormulariumService $formulariumService)
|
||||
{
|
||||
$this->formulariumService = $formulariumService;
|
||||
}
|
||||
public function index(Request $request, $corporate_id)
|
||||
{
|
||||
$formulariums = CorporateFormularium::query()
|
||||
->where('corporate_id', $corporate_id)
|
||||
->paginate(15);
|
||||
// if (!empty($request->status) && $request->status == 'inactive') {
|
||||
// $formulariums = $formulariums->whereDoesntHave('corporateFormulariums');
|
||||
// } else if (!empty($request->status) && $request->status == 'all') {
|
||||
$formulariums = Formularium::query()
|
||||
->filter($request->all());
|
||||
if (!empty($request->status) && $request->status == 'inactive') {
|
||||
$formulariums = $formulariums->whereDoesntHave('corporateFormulariums');
|
||||
} else if (!empty($request->status) && $request->status == 'all') {
|
||||
|
||||
} else { // Active or Default
|
||||
$formulariums->whereHas('corporateFormulariums', function ($corporateFormularium) use ($corporate_id){
|
||||
$corporateFormularium->where('corporate_id', $corporate_id);
|
||||
});
|
||||
}
|
||||
$formulariums = $formulariums->with(['corporateFormulariums' => function ($query) use ($corporate_id) {
|
||||
$query->where('corporate_id', $corporate_id);
|
||||
}])
|
||||
->withCount('items')
|
||||
->paginate();
|
||||
|
||||
// } else { // Active or Default
|
||||
// $formulariums->whereHas('corporateFormulariums', function ($corporateFormularium) use ($corporate_id){
|
||||
// $corporateFormularium->where('corporate_id', $corporate_id);
|
||||
// });
|
||||
// }
|
||||
return Helper::paginateResources(CorporateFormulariumResource::collection($formulariums));
|
||||
}
|
||||
|
||||
@@ -53,16 +42,9 @@ class CorporateFormulariumController extends Controller
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create(Request $request, $corporate_id)
|
||||
public function create()
|
||||
{
|
||||
$data = CorporateFormularium::where('corporate_id', $corporate_id)->pluck('formularium_template_id')->toArray(); // agar tidak dobel
|
||||
$formularium_template = FormulariumTemplate::whereNotIn('id', $data)->get();
|
||||
$respone = [
|
||||
"status" => 200,
|
||||
"message" => 'data berhasil diambil',
|
||||
"data" => $formularium_template
|
||||
];
|
||||
return $respone;
|
||||
return view('internal::create');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -70,36 +52,9 @@ class CorporateFormulariumController extends Controller
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request, $corporate_id)
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'id' => 'required'
|
||||
]);
|
||||
|
||||
$checkFormularium = FormulariumTemplate::find($request->id);
|
||||
if (!$checkFormularium){
|
||||
$respone = [
|
||||
"status" => 404,
|
||||
"message" => "data master formularium tidak ditemukan",
|
||||
"data" => []
|
||||
];
|
||||
return $respone;
|
||||
}
|
||||
$newCorporateFormularium = CorporateFormularium::create([
|
||||
'corporate_id' => $corporate_id,
|
||||
'formularium_template_id' => $request->id,
|
||||
'active' => 1
|
||||
]);
|
||||
|
||||
if ($newCorporateFormularium){
|
||||
$respone = [
|
||||
"status" => 200,
|
||||
"message" => "data berhasil disimpan"
|
||||
];
|
||||
return $respone;
|
||||
}
|
||||
|
||||
return $newCorporatePlan;
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -107,15 +62,9 @@ class CorporateFormulariumController extends Controller
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show(Request $request, $corporate_id, $id)
|
||||
public function show($id)
|
||||
{
|
||||
$data = Formularium::where('formularium_template_id', $id)->get();
|
||||
$respone = [
|
||||
"status" => 200,
|
||||
"message" => 'data berhasil diambil',
|
||||
"data" => $data
|
||||
];
|
||||
return $respone;
|
||||
return view('internal::show');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -123,16 +72,9 @@ class CorporateFormulariumController extends Controller
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function edit(Request $request, $corporate_id)
|
||||
public function edit($id)
|
||||
{
|
||||
$data = CorporateFormularium::where('corporate_id', $corporate_id)->pluck('formularium_template_id')->toArray(); // agar tidak dobel
|
||||
$formularium_template = FormulariumTemplate::whereNotIn('id', $data)->get();
|
||||
$respone = [
|
||||
"status" => 200,
|
||||
"message" => 'data berhasil diambil',
|
||||
"data" => $formularium_template
|
||||
];
|
||||
return $respone;
|
||||
return view('internal::edit');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -159,7 +101,7 @@ class CorporateFormulariumController extends Controller
|
||||
public function updateStatus($corporate_id, $formularium_id , $status)
|
||||
{
|
||||
if ($status == 'activate') {
|
||||
$corporateFormularium = CorporateFormularium::updateOrCreate([
|
||||
$corporateFormularium = CorporateFormularium::firstOrCreate([
|
||||
'corporate_id' => $corporate_id,
|
||||
'formularium_id' => $formularium_id
|
||||
], [
|
||||
@@ -186,213 +128,4 @@ class CorporateFormulariumController extends Controller
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function active(Request $request, $corporate_id, $id)
|
||||
{
|
||||
$corporateFormularium = CorporateFormularium::find($id);
|
||||
$corporateFormularium->fill([
|
||||
'active' => $request->active,
|
||||
])->save();
|
||||
|
||||
$respone = [
|
||||
"status" => 200,
|
||||
"message" => 'data berhasil diedit',
|
||||
"data" => $corporateFormularium
|
||||
];
|
||||
|
||||
return $respone;
|
||||
}
|
||||
|
||||
public function import(Request $request, $id)
|
||||
{
|
||||
$request->validate([
|
||||
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
|
||||
]);
|
||||
// dd($request->toArray());
|
||||
$file_name = now()->getPreciseTimestamp(3).'-'.$request->file('file')->getClientOriginalName();
|
||||
$file = $request->file('file')->storeAs('temp', $file_name);
|
||||
|
||||
// $importLog = $corporate->importLogs()->create([
|
||||
// 'type' => 'diagnosis-exclusions',
|
||||
// 'file_path' => $file,
|
||||
// 'status' => 'pending',
|
||||
// 'progress' => 0,
|
||||
// ]);
|
||||
|
||||
$import = new ImportService();
|
||||
$import->read(Storage::path('temp/'.$file_name));
|
||||
$import->write(Storage::disk('public')->path('temp/result-'.$file_name), 'xsls');
|
||||
foreach ($import->sheetsIterator() as $sheetIndex => $sheet) {
|
||||
$doc_headers_indexes = [];
|
||||
foreach ($sheet->getRowIterator() as $index => $row) {
|
||||
if ($index == 1) { // First Row Must be Header
|
||||
foreach ($row->getCells() as $index => $cell) {
|
||||
$title = $cell->getValue();
|
||||
$title = preg_replace( "/\r|\n/", " ", $title );
|
||||
$title = preg_replace('/\xc2\xa0/', " ", $title );
|
||||
$title = rtrim($title);
|
||||
$title = ltrim($title);
|
||||
$doc_headers_indexes[$index] = $title;
|
||||
}
|
||||
|
||||
// Write Header to File
|
||||
// $result_headers = array_merge($doc_headers_indexes, ['Ingest Code', 'Ingest Note']);
|
||||
// Tambahkan 'Ingest Code' dan 'Ingest Note' ke akhir array
|
||||
$doc_headers_indexes[] = 'Ingest Code';
|
||||
$doc_headers_indexes[] = 'Ingest Note';
|
||||
$import->addArrayToRow($doc_headers_indexes);
|
||||
|
||||
// TODO Validate if First Row not Header
|
||||
} else { // Next Row Should be Data
|
||||
$row_data = [];
|
||||
$row_map = [
|
||||
0 => 'code',
|
||||
1 => 'active',
|
||||
];
|
||||
|
||||
foreach ($row->getCells() as $header_index => $cell) {
|
||||
if (isset($row_map[$header_index])) {
|
||||
$value = $cell->getValue();
|
||||
$value = preg_replace( "/\r|\n/", " ", $value );
|
||||
$value = preg_replace('/\xc2\xa0/', " ", $value );
|
||||
$value = rtrim($value);
|
||||
$value = ltrim($value);
|
||||
$row_data[$row_map[$header_index]] = $cell->getValue();
|
||||
}
|
||||
}
|
||||
|
||||
try { // Process the Row Data
|
||||
if (empty($row_data['code'])){
|
||||
throw new ImportRowException(__('Internal Code is REQUIRED'), 405, null, $row_data);
|
||||
}
|
||||
if (
|
||||
// empty($row_data['code']) &&
|
||||
// empty($row_data['description']) &&
|
||||
empty($row_data['code']) &&
|
||||
empty($row_data['active'])
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Save the Row
|
||||
$formulariums = Formularium::where('code', $row_data['code'])->first();
|
||||
if ($formulariums){
|
||||
$row_data['formularium_id'] = $formulariums->id;
|
||||
} else {
|
||||
throw new ImportRowException(__('Internal Code is Not Found'), 405, null, $row_data);
|
||||
}
|
||||
$formulariumService = new FormulariumService();
|
||||
$formulariumService->handleFormuariumCorporateRow($row_data, $id);
|
||||
|
||||
// Write Success Result to File
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => 200,
|
||||
'Ingest Note' => 'Success',
|
||||
]), $sheet->getName());
|
||||
|
||||
} catch (ImportRowException $e) {
|
||||
// Write Data Validation Error to File
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => $e->getCode(),
|
||||
'Ingest Note' => $e->getMessage(),
|
||||
]), $sheet->getName());
|
||||
} catch (\Exception $e) {
|
||||
throw new \Exception($e);
|
||||
// Write Server Error to File
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => 500,
|
||||
'Ingest Note' => env('APP_DEBUG') ? $e->getMessage() : 'Server Error',
|
||||
]), $sheet->getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break; // Only Read First Row
|
||||
}
|
||||
$import->reader->close();
|
||||
Storage::delete('temp/'.$file_name);
|
||||
$import->writer->close();
|
||||
|
||||
return [
|
||||
// 'total_successed_row' => $imported_plan_data,
|
||||
// 'total_failed_row' => count($failed_plan_data),
|
||||
// 'failed_row' => $failed_plan_data,
|
||||
'result_file' => [
|
||||
'url' => Storage::disk('public')->url('temp/result-'.$file_name),
|
||||
'name' => 'result-'.$file_name,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function generateFormulariumList(Request $request, $id){
|
||||
// Mendapatkan data yang akan diekspor (misalnya, dari database)
|
||||
// $data = Formularium::get()->toArray();
|
||||
$formulariums = Formularium::query()
|
||||
->filter($request->all());
|
||||
// if (!empty($request->status) && $request->status == 'inactive') {
|
||||
// $formulariums = $formulariums->whereDoesntHave('corporateFormulariums');
|
||||
// } else if (!empty($request->status) && $request->status == 'all') {
|
||||
|
||||
// } else { // Active or Default
|
||||
// $formulariums->whereHas('corporateFormulariums', function ($corporateFormularium) use ($corporate_id){
|
||||
// $corporateFormularium->where('corporate_id', $corporate_id);
|
||||
// });
|
||||
// }
|
||||
$data = $formulariums->with(['corporateFormulariums' => function ($query) use ($id) {
|
||||
$query->where('corporate_id', $id);
|
||||
}])->get()->toArray();
|
||||
// Membuat penulis entitas Spout
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
|
||||
// Membuka penulis untuk menulis ke file
|
||||
$writer->openToFile(public_path('files/TemplateFormulariumList.xlsx'));
|
||||
/** Create a style with the StyleBuilder */
|
||||
$style = (new StyleBuilder())
|
||||
->setFontBold()
|
||||
->build();
|
||||
|
||||
// Menulis header kolom
|
||||
$headers_map_to_table_fields = $this->formulariumService->listing_doc_headers;
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields, $style);
|
||||
|
||||
$writer->addRow($headerRow);
|
||||
|
||||
// Menulis data
|
||||
if (!empty($data)) {
|
||||
foreach ($data as $item) {
|
||||
$rowData = [
|
||||
$item['code'], // code
|
||||
$item['name'], // name
|
||||
$item['description'], // Description
|
||||
$item['manufacturer'], // manufacturer
|
||||
$item['category_name'], // category_name
|
||||
$item['kategori_obat'], // kategori_obat
|
||||
$item['uom'], // uom
|
||||
$item['general_indication'], // Description
|
||||
$item['composition'], // composition
|
||||
$item['atc_code'], // atc_code
|
||||
$item['class'], // class
|
||||
$item['bpom_registration'], // bpom_registration
|
||||
$item['classifications'], // classifications
|
||||
$item['cat_for'], // cat_for
|
||||
|
||||
];
|
||||
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
}
|
||||
|
||||
// Menutup penulis
|
||||
$writer->close();
|
||||
|
||||
// Mengembalikan response untuk mengunduh file
|
||||
$filePath = public_path('files/TemplateFormulariumList.xlsx');
|
||||
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Formularium List " . date('Y-m-d h:i:s'),
|
||||
"file_url" => url('files/TemplateFormulariumList.xlsx')
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,82 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Models\User;
|
||||
use App\Models\CorporateManager;
|
||||
use Modules\Internal\Transformers\CorporateManageResource;
|
||||
|
||||
|
||||
|
||||
class CorporateManageController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$userCorporateManage = CorporateManager::with(['user', 'corporate'])->get();
|
||||
|
||||
return response()->json($userCorporateManage);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'user_id' => [
|
||||
'required',
|
||||
],
|
||||
'corporate_id' => 'required'
|
||||
]);
|
||||
|
||||
$newCorporateManage = CorporateManager::create([
|
||||
'corporate_id' => $request->corporate_id,
|
||||
'user_id' => $request->user_id,
|
||||
]);
|
||||
|
||||
return $newCorporateManage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$updateCorporateManage = CorporateManager::findOrFail($id);
|
||||
$request->validate([
|
||||
'user_id' => [
|
||||
'required',
|
||||
],
|
||||
'corporate_id' => 'required'
|
||||
]);
|
||||
|
||||
$updateCorporateManage->fill([
|
||||
'corporate_id' => $request->corporate_id,
|
||||
'user_id' => $request->user_id,
|
||||
])->save();
|
||||
|
||||
return $updateCorporateManage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
// Soft delete model
|
||||
$corporateManage = CorporateManager::find($id);
|
||||
$corporateManage->delete();
|
||||
|
||||
return $corporateManage;
|
||||
}
|
||||
}
|
||||
269
Modules/Internal/Http/Controllers/Api/CorporateMemberController.php
Normal file → Executable file
269
Modules/Internal/Http/Controllers/Api/CorporateMemberController.php
Normal file → Executable file
@@ -6,7 +6,6 @@ use App\Exceptions\ImportRowException;
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Resources\MemberDataTableResource;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\CorporateEmployee;
|
||||
use App\Models\Member;
|
||||
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
@@ -16,13 +15,8 @@ use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Console\Command;
|
||||
use Modules\Internal\Services\MemberEnrollmentService;
|
||||
use PDF;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Spatie\Browsershot\Browsershot;
|
||||
|
||||
class CorporateMemberController extends Controller
|
||||
{
|
||||
@@ -34,11 +28,14 @@ class CorporateMemberController extends Controller
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request, $corporate_id )
|
||||
public function index(Request $request, $corporate_id)
|
||||
{
|
||||
$members = Member::query()
|
||||
->joinCorporateEmployees('left')
|
||||
->where('corporate_employees.corporate_id', $corporate_id)
|
||||
->filter($request->all())
|
||||
// ->where('corporate_id', $corporate_id)
|
||||
->whereHas('employeds', function ($employeds) use ($corporate_id) {
|
||||
$employeds->where('corporate_id', $corporate_id);
|
||||
})
|
||||
->with([
|
||||
'employeds',
|
||||
'currentPolicy',
|
||||
@@ -47,46 +44,25 @@ class CorporateMemberController extends Controller
|
||||
// return $claim->whereBetween('requested_at', [now()->startOfYear(), now()->endOfYear()]);
|
||||
// return $claim->used(now()->startOfYear(), now()->endOfYear());
|
||||
},
|
||||
'currentPlans',
|
||||
'currentPlan',
|
||||
// 'currentPlan' => function ($currentPlan) use ($service_code){
|
||||
// return $currentPlan->where([
|
||||
// 'plans.service_code' => $service_code
|
||||
// ]);
|
||||
// },
|
||||
'currentPlan.benefits' => function ($benefit) use ($corporate_id){
|
||||
return $benefit->where([
|
||||
'corporate_benefits.active' => 1,
|
||||
'corporate_benefits.corporate_id' => $corporate_id,
|
||||
// 'corporate_benefits.plan_id' => $corporate_id,
|
||||
]);
|
||||
}
|
||||
'currentPlan.benefits'
|
||||
])
|
||||
->when($request->input('search'), function (Builder $query, $search) {
|
||||
$query->where(function (Builder $query) use ($search) {
|
||||
$query->orWhere('members.member_id', 'like', "%" . $search . "%")
|
||||
->orWhere('members.name', 'like', "%" . $search . "%");
|
||||
});
|
||||
})
|
||||
->select('members.*')
|
||||
->selectRaw('(SELECT GROUP_CONCAT(files_mcu.original_name SEPARATOR ", ") AS file_mcu_names from files_mcu WHERE files_mcu.memberid = members.id) AS file_mcu_names')
|
||||
->paginate()
|
||||
->appends($request->all());
|
||||
|
||||
return Helper::paginateResources(MemberDataTableResource::collection($members));
|
||||
}
|
||||
|
||||
public function activation(Request $request, $member_id)
|
||||
{
|
||||
$request->validate([
|
||||
'active' => 'required',
|
||||
'reason' => 'required',
|
||||
'active' => 'required'
|
||||
]);
|
||||
|
||||
// abort(404);
|
||||
|
||||
$member = Member::findOrFail($member_id);
|
||||
$member->active = $request->active;
|
||||
$member->reason = $request->reason;
|
||||
$member->active = $request->active == '1';
|
||||
|
||||
if ($member->save()) {
|
||||
return response()->json([
|
||||
@@ -159,9 +135,6 @@ class CorporateMemberController extends Controller
|
||||
|
||||
public function import(Request $request, $corporate_id)
|
||||
{
|
||||
// setting tambahan php
|
||||
Helper::setCustomPHPIniSettings();
|
||||
|
||||
$request->validate([
|
||||
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
|
||||
]);
|
||||
@@ -170,7 +143,7 @@ class CorporateMemberController extends Controller
|
||||
$file_name = now()->getPreciseTimestamp(3) . '-' . $request->file('file')->getClientOriginalName();
|
||||
$file = $request->file('file')->storeAs('temp', $file_name);
|
||||
|
||||
$reader = ReaderEntityFactory::createXLSXReader(Storage::path('temp/' . $file_name));
|
||||
$reader = ReaderEntityFactory::createReaderFromFile(Storage::path('temp/' . $file_name));
|
||||
$reader->open(Storage::path('temp/' . $file_name));
|
||||
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
@@ -185,7 +158,6 @@ class CorporateMemberController extends Controller
|
||||
|
||||
$imported_member_data = 0;
|
||||
$failed_member_data = [];
|
||||
|
||||
foreach ($reader->getSheetIterator() as $sheet) {
|
||||
$doc_headers_indexes = [];
|
||||
foreach ($sheet->getRowIterator() as $index => $row) {
|
||||
@@ -209,7 +181,9 @@ class CorporateMemberController extends Controller
|
||||
}
|
||||
|
||||
try {
|
||||
// dd($new_member_data);
|
||||
$rowResponse = $this->memberEnrollmentService->handleImportRow($corporate, $new_member_data);
|
||||
|
||||
// Write Success Result to File
|
||||
$singleRow = WriterEntityFactory::createRow($this->memberEnrollmentService->makeResultRowWithResultFormat($rowResponse));
|
||||
$writer->addRow($singleRow);
|
||||
@@ -241,11 +215,11 @@ class CorporateMemberController extends Controller
|
||||
|
||||
break; //only read first sheet
|
||||
}
|
||||
|
||||
$reader->close();
|
||||
$writer->close();
|
||||
Storage::delete('temp/' . $file_name);
|
||||
// throw(404);
|
||||
|
||||
return [
|
||||
'total_success_row' => $imported_member_data,
|
||||
'total_failed_row' => count($failed_member_data),
|
||||
@@ -260,35 +234,16 @@ class CorporateMemberController extends Controller
|
||||
|
||||
public function generateLog(Request $request, $member_id)
|
||||
{
|
||||
$corporate_id = CorporateEmployee::where('member_id', $member_id)->value('corporate_id');
|
||||
// $member = Member::findOrFail($member_id)
|
||||
// ->load([
|
||||
// 'currentPlan',
|
||||
// 'currentPolicy',
|
||||
// 'currentPlan.corporateBenefits' => function ($benefit) use ($request) {
|
||||
// return $benefit->when($request->benefit_ids, function ($q, $ids) {
|
||||
|
||||
// $q->whereIn('benefit_id', $ids)
|
||||
// ->where([
|
||||
// 'corporate_benefits.active' => 1,
|
||||
// 'corporate_benefits.corporate_id' => $corporate_id,
|
||||
// ]);
|
||||
// });
|
||||
// },
|
||||
// // 'currentPlan.corporateBenefits.benefit'
|
||||
// ]);
|
||||
$member = Member::with([
|
||||
'currentPlan',
|
||||
'currentPolicy',
|
||||
'currentPlan.corporateBenefits' => function ($query) use ($request, $corporate_id) {
|
||||
$query->when($request->benefit_ids, function ($q, $ids) use ($corporate_id) {
|
||||
$q->whereIn('benefit_id', $ids)
|
||||
->where('active', 1)
|
||||
->where('corporate_id', $corporate_id);
|
||||
});
|
||||
},
|
||||
// 'currentPlan.corporateBenefits.benefit'
|
||||
])->findOrFail($member_id);
|
||||
$member = Member::findOrFail($member_id)
|
||||
->load([
|
||||
'currentPlan',
|
||||
'currentPolicy',
|
||||
'currentPlan.corporateBenefits' => function ($benefit) use ($request) {
|
||||
return $benefit->when($request->benefit_ids, function ($q, $ids) {
|
||||
return $q->whereIn('benefit_id', $ids);
|
||||
});
|
||||
},
|
||||
'currentPlan.corporateBenefits.benefit']);
|
||||
|
||||
$dateOfAdmission = $request->date_of_admission ? Carbon::parse($request->date_of_admission) : now();
|
||||
|
||||
@@ -296,180 +251,4 @@ class CorporateMemberController extends Controller
|
||||
$pdf = PDF::loadView('pdf.guaranted_leter', compact(['member', 'dateOfAdmission']));
|
||||
return $pdf->download('Guaranted Letter - '.$member->full_name.'.pdf');
|
||||
}
|
||||
|
||||
public function generateMemberList(Request $request, $corporate_id){
|
||||
// Mendapatkan data yang akan diekspor (misalnya, dari database)
|
||||
$data = Member::with(['currentPlan', 'currentCorporate', 'division', 'employeds', 'currentPolicy'])
|
||||
// ->filter($request->all())
|
||||
// ->where('corporate_id', $corporate_id)
|
||||
->whereHas('employeds', function ($employeds) use ($corporate_id) {
|
||||
$employeds->where('corporate_id', $corporate_id);
|
||||
})->get()->toArray();
|
||||
// Membuat penulis entitas Spout
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
|
||||
// Membuka penulis untuk menulis ke file
|
||||
$writer->openToFile(public_path('files/CorporateMembershipList.xlsx'));
|
||||
// Menulis header kolom
|
||||
$headers_map_to_table_fields = $this->memberEnrollmentService->listing_doc_headers;
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields);
|
||||
|
||||
$writer->addRow($headerRow);
|
||||
// dd('test');
|
||||
// Menulis data
|
||||
if (!empty($data)) {
|
||||
foreach ($data as $item) {
|
||||
$rowData = [ $item['record_mode'], // Recode Mode
|
||||
$item['record_type'], // Recode Type
|
||||
$item['payor_id'], // Payor ID
|
||||
$item['member_id'], // Member ID
|
||||
$item['principal_id'], // Mapping ID
|
||||
NULL, // Link Medis Member ID
|
||||
$item['current_corporate']['code'] ?? null, // Corporate ID
|
||||
$item['employeds'][0]['nik'] ?? null, // NIK
|
||||
$item['division']['code'] ?? null, // Devision
|
||||
$item['employeds'][0]['branch_code'] ?? null, // Branch Code
|
||||
$item['bank_info'], // Bank Info
|
||||
$item['language'], // Language
|
||||
null, // Type of Work
|
||||
$item['race'], // Race
|
||||
$item['current_policy']['code'] ?? null, // Policy Number
|
||||
$item['marital_status'], // Marital Status
|
||||
$item['relation_with_principal'], // Relationship
|
||||
str_replace('-', '',$item['members_effective_date']), // Member effective date
|
||||
str_replace('-', '',$item['members_expire_date']), // Member expiry date
|
||||
NULL, // Faskes FKTP (First Level Provider) or Individual preferred provider
|
||||
NULL, // Faskes FKRTL (Next Level Provider) or Individual group preferred provider
|
||||
$item['bpjs_class'], // The Right Classes Room of BPJS Participants
|
||||
NULL, // Name of Faskes
|
||||
NULL, // Rule BPJSK
|
||||
NULL, // Internal Use
|
||||
$item['full_name'], // Member Name
|
||||
$item['address1'], // Address1
|
||||
$item['address2'], // Address2
|
||||
$item['address3'], // Address3
|
||||
$item['address4'], // Address4
|
||||
$item['city'], // City
|
||||
NULL, // State
|
||||
$item['postal_code'], // Post Code
|
||||
NULL, // Telephone - Mobile
|
||||
NULL, // Telephone - Res
|
||||
NULL, // Telephone - Office
|
||||
$item['nric'], // NRIC
|
||||
$item['passport_no'], // Passport No
|
||||
$item['passport_country'], // Passport Country
|
||||
$item['email'], // Email
|
||||
$item['identification_code'], // Identification Code
|
||||
$item['birth_date'], // Date of Birth
|
||||
$item['gender_code'], // Sex
|
||||
NULL, // Internal Use
|
||||
$item['current_plan']['code'] ?? null, // Plan-ID
|
||||
NULL, // Employment-Status
|
||||
NULL, // Internal Use
|
||||
NULL, // Internal Use
|
||||
NULL,// Internal Use
|
||||
str_replace('-', '',$item['terminated_date']), // Date Terminated
|
||||
$item['pre_existing'], // Pre Existing
|
||||
$item['bpjs_id'], // BPJS ID
|
||||
$item['endorsement_date'], // Endorsement Date
|
||||
$item['remarks'], // Remarks
|
||||
NULL, // Internal Use
|
||||
NULL,// Member Since
|
||||
NULL,// Internal Use
|
||||
$item['policy_in_force'], // Policy Inforce
|
||||
NULL, // Member Suspended
|
||||
str_replace('-', '',$item['activation_date']), // Activation Date
|
||||
NULL, // Internal Use
|
||||
$item['start_no_claim'], // StartNoClaim
|
||||
$item['end_no_claim'], // EndNoClaim
|
||||
NULL, // Option Mode
|
||||
];
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
}
|
||||
|
||||
// Menutup penulis
|
||||
$writer->close();
|
||||
// dd('test');
|
||||
// Mengembalikan response untuk mengunduh file
|
||||
$filePath = public_path('files/CorporateMembershipList.xlsx');
|
||||
// dd($filePath);
|
||||
// Mengembalikan response untuk mengunduh file
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Corporate Plan & Benefit List " . date('Y-m-d h:i:s'),
|
||||
"file_url" => url('files/CorporateMembershipList.xlsx')
|
||||
]);
|
||||
}
|
||||
|
||||
public function sendAllECard(Request $request, $corporate_id){
|
||||
$members = Member::with([
|
||||
'currentPlan',
|
||||
'currentPolicy',
|
||||
'currentCorporate',
|
||||
// 'currentPlan.corporateBenefits.benefit'
|
||||
])->whereHas('currentCorporate', function ($query) use ($corporate_id) {
|
||||
$query->where('corporate_id', $corporate_id);
|
||||
})->get();
|
||||
$data = [];
|
||||
$countSuccesSend = 0;
|
||||
foreach($members as $member){
|
||||
// Simpan file PDF ke direktori yang diinginkan
|
||||
$pdfPath = storage_path('app/pdf/ecards/E-card-' . $member->name. '.pdf');
|
||||
// Cek apakah file sudah ada
|
||||
if (!File::exists($pdfPath)) {
|
||||
$pdf = PDF::loadView('pdf.ecard', compact('member'))->setPaper('A5', 'portrait');
|
||||
$pdf->save($pdfPath);
|
||||
}
|
||||
|
||||
$dataEmail = [
|
||||
// 'email' => $member->email,
|
||||
'email' => 'tbfajri',
|
||||
'name' => $member->name,
|
||||
'subject' => 'Digital E Card '. $member->name,
|
||||
'body' => '<h1>Hi ' . $member->name . '</h1> <br> ini adalah uji coba kirim e-card' ,
|
||||
'attach' => $pdfPath,
|
||||
];
|
||||
$sendEmail = Helper::sendEmailattachData($dataEmail);
|
||||
|
||||
if ($sendEmail === true){
|
||||
$countSuccesSend ++;
|
||||
|
||||
File::delete($pdfPath);
|
||||
} else {
|
||||
$dataFaild = [
|
||||
'email' => $member->email,
|
||||
'name' => $member->name,
|
||||
'message' => $sendEmail
|
||||
];
|
||||
array_push($data, $dataFaild);
|
||||
}
|
||||
}
|
||||
$response = [
|
||||
'data_fail_send' => count($data),
|
||||
'message' => $data,
|
||||
'data_succes_send' => $countSuccesSend,
|
||||
];
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
public function viewECard(Request $request, $member_id){
|
||||
$member = Member::with([
|
||||
'currentPlan',
|
||||
'currentPolicy',
|
||||
'currentCorporate',
|
||||
'currentCorporate.files',
|
||||
// 'currentPlan.corporateBenefits.benefit'
|
||||
])->find($member_id);
|
||||
|
||||
if ($member->currentCorporate->id == 5){ // Vale
|
||||
$pdf = PDF::loadView('pdf.ecard', compact('member'))->setPaper('A5', 'portrait');
|
||||
} else {
|
||||
$pdf = PDF::loadView('pdf.ecard-lms', compact('member'))->setPaper('A5', 'portrait');
|
||||
}
|
||||
return $pdf->download('Ecard - '.$member->full_name.'.pdf');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
42
Modules/Internal/Http/Controllers/Api/CorporatePlanController.php
Normal file → Executable file
42
Modules/Internal/Http/Controllers/Api/CorporatePlanController.php
Normal file → Executable file
@@ -25,31 +25,6 @@ class CorporatePlanController extends Controller
|
||||
return $benefits;
|
||||
}
|
||||
|
||||
public function filter(Request $request, $corporate_id){
|
||||
|
||||
$benefits = CorporatePlan::query()
|
||||
->filter($request->all())
|
||||
->where('corporate_id', $corporate_id);
|
||||
// ->where('type', $request->type)
|
||||
// ->where('code', $request->code);
|
||||
|
||||
if ($request->has('service_code') && is_array($request->service_code) && count($request->service_code) > 0) {
|
||||
$benefits->whereIn('service_code', $request->service_code);
|
||||
}
|
||||
if ($request->has('type') && is_array($request->type) && count($request->type) > 0) {
|
||||
$benefits->whereIn('type', $request->type);
|
||||
}
|
||||
if ($request->has('code') && is_array($request->code) && count($request->code) > 0) {
|
||||
$benefits->whereIn('code', $request->code);
|
||||
}
|
||||
|
||||
|
||||
$benefits = $benefits->paginate(0)->appends($request->all());
|
||||
|
||||
return $benefits;
|
||||
|
||||
}
|
||||
|
||||
public function activation(Request $request, $plan_id)
|
||||
{
|
||||
$request->validate([
|
||||
@@ -59,8 +34,7 @@ class CorporatePlanController extends Controller
|
||||
// abort(404);
|
||||
|
||||
$plan = CorporatePlan::findOrFail($plan_id);
|
||||
$plan->active = $request->active == 1 ? 0 : 1;
|
||||
$plan->reason = $request->reason;
|
||||
$plan->active = $request->active == '1';
|
||||
|
||||
if ($plan->save()) {
|
||||
return response()->json([
|
||||
@@ -135,21 +109,21 @@ class CorporatePlanController extends Controller
|
||||
public function update(Request $request, $corporate_id, $id)
|
||||
{
|
||||
$corporatePlan = CorporatePlan::findOrFail($id);
|
||||
|
||||
$request->validate([
|
||||
'code' => [
|
||||
'required',
|
||||
// Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id)
|
||||
Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id)
|
||||
],
|
||||
'name' => 'required'
|
||||
]);
|
||||
|
||||
$corporatePlan->fill([
|
||||
'code' => $request->code,
|
||||
'corporate_plan_id' => $request->plan,
|
||||
'service_code' => $request->service,
|
||||
'type' => $request->type,
|
||||
'limit_rules' => $request->limit
|
||||
'name' => $request->name,
|
||||
'active' => $request->active,
|
||||
'description' => $request->description
|
||||
])->save();
|
||||
|
||||
|
||||
return $corporatePlan;
|
||||
}
|
||||
|
||||
|
||||
121
Modules/Internal/Http/Controllers/Api/CorporateServiceController.php
Normal file → Executable file
121
Modules/Internal/Http/Controllers/Api/CorporateServiceController.php
Normal file → Executable file
@@ -136,7 +136,6 @@ class CorporateServiceController extends Controller
|
||||
|
||||
public function corporateServiceUpdate(Request $request, $corporate_id, $service_code)
|
||||
{
|
||||
// dd($request->all);
|
||||
// $corporate = Corporate::findOrFail($corporate_id);
|
||||
$corporateService = CorporateService::query()
|
||||
->where('corporate_id', $corporate_id)
|
||||
@@ -144,8 +143,7 @@ class CorporateServiceController extends Controller
|
||||
// ->with('configs', 'service')
|
||||
->first();
|
||||
$corporateService->fill([
|
||||
'status' => $request->status == 'active' ? 'inactive' : 'active',
|
||||
'reason' => $request->reason
|
||||
'status' => $request->status == 'active' ? 'active' : 'inactive'
|
||||
]);
|
||||
$corporateService->save();
|
||||
|
||||
@@ -154,6 +152,8 @@ class CorporateServiceController extends Controller
|
||||
|
||||
public function corporateServiceSpecialityUpdate(Request $request, $corporate_id, $service_code)
|
||||
{
|
||||
|
||||
|
||||
// return response()->json([$request->checked, $request->value, $request->speciality_id]);
|
||||
|
||||
$corporateService = CorporateService::query()
|
||||
@@ -161,6 +161,7 @@ class CorporateServiceController extends Controller
|
||||
->where('service_code', $service_code)
|
||||
->first();
|
||||
|
||||
|
||||
$corporateServiceSpeciality = CorporateServiceSpeciality::updateOrCreate([
|
||||
'corporate_service_id' => $corporateService->id,
|
||||
'speciality_id' => $request->speciality_id,
|
||||
@@ -190,116 +191,6 @@ class CorporateServiceController extends Controller
|
||||
return response()->json($selected_specialities);
|
||||
}
|
||||
|
||||
public function corporateServiceSpecialityAllUpdate(Request $request, $corporate_id, $service_code)
|
||||
{
|
||||
// return response()->json([$request->checked, $request->value, $request->speciality_id]);
|
||||
|
||||
$corporateService = CorporateService::query()
|
||||
->where('corporate_id', $corporate_id)
|
||||
->where('service_code', $service_code)
|
||||
->first();
|
||||
|
||||
$specialities = Speciality::get()->toArray();
|
||||
|
||||
if ($specialities){
|
||||
foreach($specialities as $s){
|
||||
$corporateServiceSpeciality = CorporateServiceSpeciality::updateOrCreate([
|
||||
'corporate_service_id' => $corporateService->id,
|
||||
'speciality_id' => $s['id'],
|
||||
], [
|
||||
'corporate_service_id' => $corporateService->id,
|
||||
'speciality_id' => $s['id'],
|
||||
'active' => $request->active
|
||||
]);
|
||||
|
||||
$corporateServiceSpeciality = CorporateServiceSpeciality::updateOrCreate([
|
||||
'corporate_service_id' => $corporateService->id,
|
||||
'speciality_id' => $s['id'],
|
||||
], [
|
||||
'corporate_service_id' => $corporateService->id,
|
||||
'speciality_id' => $s['id'],
|
||||
'active' => $request->active
|
||||
]);
|
||||
|
||||
$corporateServiceSpecialityRule = CorporateServiceSpeciality::where('corporate_service_id', $corporateService->id)
|
||||
->where('speciality_id', $s['id'])
|
||||
->with('exclusions.rules')
|
||||
->first();
|
||||
|
||||
// Exclusion Rules
|
||||
if (empty($corporateServiceSpecialityRule)) {
|
||||
$corporateServiceSpecialityRule = CorporateServiceSpeciality::create([
|
||||
'corporate_service_id' => $corporateService->id,
|
||||
'speciality_id' => $s['id'],
|
||||
'active' => false,
|
||||
]);
|
||||
|
||||
$corporateServiceSpecialityRule->exclusions()->updateOrCreate([
|
||||
'corporate_id' => $corporate_id,
|
||||
'service_code' => $service_code,
|
||||
], [
|
||||
'corporate_id' => $corporate_id,
|
||||
'service_code' => $service_code,
|
||||
'type' => 'speciality',
|
||||
]);
|
||||
} else {
|
||||
$corporateServiceSpecialityRule->exclusions()->updateOrCreate([
|
||||
'corporate_id' => $corporate_id,
|
||||
'service_code' => $service_code,
|
||||
], [
|
||||
'corporate_id' => $corporate_id,
|
||||
'service_code' => $service_code,
|
||||
'type' => 'speciality',
|
||||
]);
|
||||
}
|
||||
|
||||
$exclusion = $corporateServiceSpecialityRule->exclusions()->where('corporate_id', $corporate_id)->where('service_code', $service_code)->first();
|
||||
|
||||
// if($exclusion){
|
||||
$exclusion_rule = $exclusion->rules()->updateOrCreate([
|
||||
'exclusion_id' => $exclusion->id,
|
||||
'name' => 'msc',
|
||||
], [
|
||||
'name' => 'msc',
|
||||
'values' => $request->active ? 'm,s,c' : '',
|
||||
]);
|
||||
|
||||
$exclusion_rule = $exclusion->rules()->updateOrCreate([
|
||||
'exclusion_id' => $exclusion->id,
|
||||
'name' => 'gender',
|
||||
], [
|
||||
'name' => 'gender',
|
||||
'values' => $request->active ? 'male,female' : '',
|
||||
]);
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$exclusion = $corporateServiceSpeciality->exclusions()->updateOrCreate([
|
||||
'corporate_id' => $corporate_id,
|
||||
'service_code' => $service_code,
|
||||
], [
|
||||
'corporate_id' => $corporate_id,
|
||||
'service_code' => $service_code,
|
||||
'type' => 'speciality',
|
||||
]);
|
||||
|
||||
$selected_specialities = CorporateServiceSpeciality::query()
|
||||
->where('corporate_service_id', $corporateService->id)
|
||||
->where('active', true)
|
||||
->with('speciality')
|
||||
->get()
|
||||
->pluck('speciality.name', 'speciality.id');
|
||||
|
||||
// return response()->json($selected_specialities);
|
||||
return response()->json([
|
||||
'selected_specialities' => $selected_specialities,
|
||||
'service' => CorporateServiceConfigResource::make($corporateService),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
public function storeExclusion(Request $request, $corporate_id, $service_code)
|
||||
{
|
||||
|
||||
@@ -334,10 +225,12 @@ class CorporateServiceController extends Controller
|
||||
|
||||
|
||||
if ($request->type == 'msc') {
|
||||
|
||||
$value_input = $request->value;
|
||||
$current_msc = $exclusion->rules()->where('name', 'msc')->first()->values ?? null;
|
||||
|
||||
if (!empty($current_msc)) {
|
||||
|
||||
$values = "";
|
||||
if ($request->value == 'm' && $request->checked == "1") {
|
||||
$values = $current_msc . "," . $value_input;
|
||||
@@ -543,6 +436,4 @@ class CorporateServiceController extends Controller
|
||||
'service' => CorporateServiceConfigResource::make($corporateService),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,410 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Models\DailyMonitoring;
|
||||
use App\Models\RequestDailyMonitoring;
|
||||
use App\Models\MedicalPlan;
|
||||
use DB;
|
||||
use Exception;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Models\File;
|
||||
|
||||
/**
|
||||
* Bagaskoro BSD 27-10-2023
|
||||
*
|
||||
* Controller untuk daily monitoring
|
||||
*/
|
||||
class DailyMonitoringController extends Controller
|
||||
{
|
||||
protected $path_for_store = 'public/lab_result';
|
||||
protected function messages()
|
||||
{
|
||||
return [
|
||||
'required' => ':attribute harus diisi',
|
||||
'integer' => ':attribute harus angka',
|
||||
'unique' => ':attribute (:input) sudah ada',
|
||||
'max' => ':attribute maximal :max karakter',
|
||||
'exists' => ':attribute (:input) tidak ditemukan',
|
||||
'numeric' => ':attribute harus angka',
|
||||
'digits_between'=> ':attribute maximal :max digit minimal :min digit'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Member List
|
||||
*/
|
||||
public function GetMemberList()
|
||||
{
|
||||
$memberList = DB::table('request_logs')
|
||||
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
|
||||
->leftJoin('member_plans', 'request_logs.member_id', '=', 'member_plans.member_id')
|
||||
->leftJoin('organizations', 'organizations.id', '=', 'request_logs.organization_id')
|
||||
->select('members.member_id','members.name','members.members_effective_date AS startdate','members.members_expire_date AS enddate', 'request_logs.submission_date as addmision_date', 'organizations.name as provider' )
|
||||
->where('request_logs.service_code', 'IP')
|
||||
->where('request_logs.status_final_log', 'approved')
|
||||
->groupBy('request_logs.member_id')
|
||||
->orderBy('request_logs.created_at', 'desc')
|
||||
->get();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => [
|
||||
'member_list'=> $memberList,
|
||||
]
|
||||
],200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Claim List - by member id
|
||||
*/
|
||||
public function GetClaimList(Request $request, $member_id)
|
||||
{
|
||||
$memberDetail = DB::table('members')
|
||||
->select('id','member_id','name')
|
||||
->where('member_id', $member_id)
|
||||
->first();
|
||||
|
||||
$claimList = DB::table('request_logs')
|
||||
->leftJoin('services', 'services.code', '=', 'request_logs.service_code')
|
||||
->leftJoin('members', 'members.id', '=', 'request_logs.member_id')
|
||||
->select('request_logs.id','request_logs.submission_date AS admission_date','request_logs.discharge_date','request_logs.code','services.name as service_name','request_logs.status','members.name', 'members.member_id')
|
||||
->where('request_logs.service_code', 'IP')
|
||||
->where('request_logs.status_final_log', 'approved')
|
||||
->where("request_logs.member_id", "=", $memberDetail->id)
|
||||
->orderBy("request_logs.created_at", "desc")
|
||||
->get();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => [
|
||||
'member_detail'=> $memberDetail,
|
||||
'claim_list' => $claimList,
|
||||
]
|
||||
],200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Detail Monitoring List - by claim_code
|
||||
*/
|
||||
public function GetDetailMonitoringList(Request $request, $request_code)
|
||||
{
|
||||
// get id request log
|
||||
$request_logs = DB::table('request_logs')
|
||||
->select('id')
|
||||
->where('code', $request_code)
|
||||
->first();
|
||||
|
||||
$detail_list = RequestDailyMonitoring::where('request_log_id', empty($request_logs) == false ? $request_logs->id : '')
|
||||
->orderBy("created_at", "desc")
|
||||
->get();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => [
|
||||
'detail_list'=> $detail_list,
|
||||
]
|
||||
],200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Detail Monitoring List
|
||||
*/
|
||||
public function AddDetailMonitoringList(Request $request, $claim_code)
|
||||
{
|
||||
$request->merge(['claim_code' => $claim_code]);
|
||||
|
||||
// validation rule
|
||||
$validator = Validator::make($request->all(),[
|
||||
'claim_code' => 'required|exists:claim_requests,code',
|
||||
'subject' => 'required',
|
||||
'sistole' => 'required|numeric',
|
||||
'diastole' => 'required|numeric',
|
||||
'body_temperature' => 'required|numeric',
|
||||
'respiration_rate' => 'required|numeric',
|
||||
'analysis' => 'required',
|
||||
'complaints' => 'required',
|
||||
'medical_plan' => 'required',
|
||||
],$this->messages());
|
||||
|
||||
// validation error
|
||||
if ($validator->fails()) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $validator->getMessageBag()
|
||||
],400);
|
||||
}
|
||||
|
||||
// get claim request
|
||||
$claim_request = DB::table('claim_requests')
|
||||
->select('id')
|
||||
->where('code', $claim_code)
|
||||
->first();
|
||||
|
||||
// get claim
|
||||
$claim = DB::table('claims')
|
||||
->select('id')
|
||||
->where('claim_request_id', $claim_request->id)
|
||||
->first();
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
// insert claim daily monitoring
|
||||
$db_response = DailyMonitoring::create([
|
||||
'claim_id' => $claim->id,
|
||||
'subject' => $request->subject,
|
||||
'sistole' => $request->sistole,
|
||||
'diastole' => $request->diastole,
|
||||
'body_temperature' => $request->body_temperature,
|
||||
'respiration_rate' => $request->respiration_rate,
|
||||
'analysis' => $request->analysis,
|
||||
'complaints' => $request->complaints,
|
||||
]);
|
||||
|
||||
|
||||
// cek medical plan
|
||||
$num_medical_plan = 0;
|
||||
|
||||
foreach ($request->medical_plan as $row) {
|
||||
if ($row['medical_plan_str']) {
|
||||
$num_medical_plan++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($num_medical_plan == 0) {
|
||||
DB::rollBack();
|
||||
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => [
|
||||
'medical_plan' => ['medical plan harus diisi']
|
||||
],
|
||||
'data' => []
|
||||
],400);
|
||||
}
|
||||
|
||||
// insert medical plan
|
||||
foreach ($request->medical_plan as $row) {
|
||||
MedicalPlan::create([
|
||||
'claim_daily_monitoring_id' => $db_response->id,
|
||||
'plan' => $row['medical_plan_str'],
|
||||
]);
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => []
|
||||
],200);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $e->getMessage(),
|
||||
'data' => []
|
||||
],500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Detail Request LOG LIST
|
||||
*/
|
||||
public function AddDetailMonitoringListRequestLog(Request $request, $request_code)
|
||||
{
|
||||
$request->merge(['request_code' => $request_code]);
|
||||
|
||||
// validation rule
|
||||
$validator = Validator::make($request->all(),[
|
||||
'request_code' => 'required|exists:request_logs,code',
|
||||
'subject' => 'required',
|
||||
'body_temperature' => 'required|numeric',
|
||||
'sistole' => 'required|numeric',
|
||||
'diastole' => 'required|numeric',
|
||||
'respiration_rate' => 'required|numeric',
|
||||
'analysis' => 'required',
|
||||
'medical_plan' => 'required',
|
||||
'non_medikamentosa_plan' => 'required',
|
||||
],$this->messages());
|
||||
|
||||
// validation error
|
||||
if ($validator->fails()) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $validator->getMessageBag()
|
||||
],400);
|
||||
}
|
||||
|
||||
// get claim request
|
||||
$request_log = DB::table('request_logs')
|
||||
->select('id')
|
||||
->where('code', $request_code)
|
||||
->first();
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
// insert claim daily monitoring
|
||||
$db_response = RequestDailyMonitoring::create([
|
||||
'request_log_id' => $request_log->id,
|
||||
'subject' => $request->subject,
|
||||
'sistole' => $request->sistole,
|
||||
'diastole' => $request->diastole,
|
||||
'body_temperature' => $request->body_temperature,
|
||||
'respiration_rate' => $request->respiration_rate,
|
||||
'analysis' => $request->analysis,
|
||||
'lab_date' => $request->lab_date,
|
||||
'provider' => $request->provider,
|
||||
'examination' => $request->examination,
|
||||
'created_by' => auth()->user()->id,
|
||||
]);
|
||||
|
||||
|
||||
// cek medical plan
|
||||
$num_medical_plan = 0;
|
||||
foreach ($request->medical_plan as $row) {
|
||||
if ($row['medical_plan_str']) {
|
||||
$num_medical_plan++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($num_medical_plan == 0) {
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => [
|
||||
'medical_plan' => ['medical plan harus diisi']
|
||||
],
|
||||
'data' => []
|
||||
],400);
|
||||
}
|
||||
|
||||
// insert medical plan
|
||||
foreach ($request->medical_plan as $row) {
|
||||
DB::table('request_log_medical_plan')->insert([
|
||||
'request_log_daily_monitoring_id' => $db_response->id,
|
||||
'plan' => $row['medical_plan_str'],
|
||||
'type' => 1,
|
||||
'created_at' => date('Y-m-d'),
|
||||
]);
|
||||
}
|
||||
|
||||
// insert non medical plan
|
||||
foreach ($request->non_medikamentosa_plan as $row) {
|
||||
DB::table('request_log_medical_plan')->insert([
|
||||
'request_log_daily_monitoring_id' => $db_response->id,
|
||||
'plan' => $row['non_medikamentosa_plan_str'],
|
||||
'type' => 2,
|
||||
'created_at' => date('Y-m-d'),
|
||||
]);
|
||||
}
|
||||
|
||||
// insert file result
|
||||
if ($request->confirmation_medical_leter){
|
||||
foreach ($request->confirmation_medical_leter as $file) {
|
||||
$name = 'labresult-' . uniqid();
|
||||
$extension= $file->getClientOriginalExtension();
|
||||
$fileName = $name . '.' . $extension;
|
||||
$path = $file->storeAs($this->path_for_store, $fileName);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $db_response->id,
|
||||
'type' => 'confirmation-medical-letter',
|
||||
'name' => $name,
|
||||
'original_name' => $fileName,
|
||||
'extension' => $extension,
|
||||
'path' => $path,
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
if ($request->medical_action_letter){
|
||||
foreach ($request->medical_action_letter as $file) {
|
||||
$name = 'labresult-' . uniqid();
|
||||
$extension= $file->getClientOriginalExtension();
|
||||
$fileName = $name . '.' . $extension;
|
||||
$path = $file->storeAs($this->path_for_store, $fileName);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $db_response->id,
|
||||
'type' => 'medical-action-letter',
|
||||
'name' => $name,
|
||||
'original_name' => $fileName,
|
||||
'extension' => $extension,
|
||||
'path' => $path,
|
||||
]);
|
||||
|
||||
// $file->storeAs($this->path_for_store, $fileName);
|
||||
}
|
||||
}
|
||||
if ($request->result){
|
||||
foreach ($request->result as $file) {
|
||||
$name = 'labresult-' . uniqid();
|
||||
$extension= $file->getClientOriginalExtension();
|
||||
$fileName = $name . '.' . $extension;
|
||||
$path = $file->storeAs($this->path_for_store, $fileName);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $db_response->id,
|
||||
'type' => 'laboratorium-result',
|
||||
'name' => $name,
|
||||
'original_name' => $fileName,
|
||||
'extension' => $extension,
|
||||
'path' => $path,
|
||||
]);
|
||||
|
||||
// $file->storeAs($this->path_for_store, $fileName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => []
|
||||
],200);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $e->getMessage(),
|
||||
'data' => []
|
||||
],500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Status Request LOG
|
||||
*/
|
||||
public function UpdateListRequestLog(Request $request, $request_code)
|
||||
{
|
||||
// get claim request
|
||||
$request_log = DB::table('request_logs')
|
||||
->where('code', $request_code)
|
||||
->update([
|
||||
'discharge_date' => now(),
|
||||
'updated_by' => auth()->user()->id,
|
||||
'updated_at' => now()
|
||||
]);
|
||||
if ($request_log) {
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => []
|
||||
], 200);
|
||||
} else {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $e->getMessage(),
|
||||
'data' => []
|
||||
],500);
|
||||
}
|
||||
}
|
||||
}
|
||||
200
Modules/Internal/Http/Controllers/Api/DiagnosisController.php
Normal file → Executable file
200
Modules/Internal/Http/Controllers/Api/DiagnosisController.php
Normal file → Executable file
@@ -3,40 +3,20 @@
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Icd;
|
||||
use App\Services\ImportService;
|
||||
use App\Helpers\Helper;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
|
||||
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
|
||||
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
|
||||
use Box\Spout\Common\Entity\Style\CellAlignment;
|
||||
use Box\Spout\Common\Entity\Style\Color;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
use Box\Spout\Common\Entity\Row;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Modules\Internal\Services\IcdService;
|
||||
|
||||
class DiagnosisController extends Controller
|
||||
{
|
||||
public function __construct(IcdService $icdService)
|
||||
{
|
||||
$this->icdService = $icdService;
|
||||
}
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request, $diagnosis_template_id)
|
||||
public function index(Request $request)
|
||||
{
|
||||
|
||||
$diagnosis = Icd::query()
|
||||
->filter($request->toArray())
|
||||
->where('icd_template_id', '=', $diagnosis_template_id)
|
||||
->orderBy('code', 'ASC')
|
||||
->paginate(15);
|
||||
$diagnosis = Icd::withTrashed()->filter($request->toArray())->paginate();
|
||||
|
||||
return $diagnosis;
|
||||
}
|
||||
|
||||
@@ -107,178 +87,4 @@ class DiagnosisController extends Controller
|
||||
->orWhere('code', 'LIKE', '%'.$search.'%');
|
||||
})->limit(10)->get();
|
||||
}
|
||||
|
||||
public function import(Request $request, $id)
|
||||
{
|
||||
$request->validate([
|
||||
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
|
||||
]);
|
||||
$file_name = now()->getPreciseTimestamp(3).'-'.$request->file('file')->getClientOriginalName();
|
||||
$file = $request->file('file')->storeAs('temp', $file_name);
|
||||
|
||||
$import = new ImportService();
|
||||
$import->read(Storage::path('temp/'.$file_name));
|
||||
$import->write(Storage::disk('public')->path('temp/result-'.$file_name), 'xsls');
|
||||
|
||||
$imported_icd_data = 0;
|
||||
$failed_icd_data = [];
|
||||
foreach ($import->sheetsIterator() as $sheetIndex => $sheet) {
|
||||
$doc_headers_indexes = [];
|
||||
foreach ($sheet->getRowIterator() as $index => $row) {
|
||||
if ($index == 1) { // First Row Must be Header
|
||||
foreach ($row->getCells() as $index => $cell) {
|
||||
$title = $cell->getValue();
|
||||
$title = preg_replace( "/\r|\n/", " ", $title );
|
||||
$title = preg_replace('/\xc2\xa0/', " ", $title );
|
||||
$title = rtrim($title);
|
||||
$title = ltrim($title);
|
||||
$doc_headers_indexes[$index] = $title;
|
||||
}
|
||||
|
||||
// Write Header to File
|
||||
$result_headers = array_merge($doc_headers_indexes, ['Ingest Code', 'Ingest Note']);
|
||||
$import->addArrayToRow($result_headers);
|
||||
|
||||
// TODO Validate if First Row not Header
|
||||
} else { // Next Row Should be Data
|
||||
$row_data = [];
|
||||
$row_map = [
|
||||
0 => 'ICD_Code',
|
||||
1 => 'Description',
|
||||
];
|
||||
|
||||
foreach ($row->getCells() as $header_index => $cell) {
|
||||
if (isset($row_map[$header_index])) {
|
||||
$value = $cell->getValue();
|
||||
$value = preg_replace( "/\r|\n/", " ", $value );
|
||||
$value = preg_replace('/\xc2\xa0/', " ", $value );
|
||||
$value = rtrim($value);
|
||||
$value = ltrim($value);
|
||||
$row_data[$row_map[$header_index]] = $cell->getValue();
|
||||
}
|
||||
}
|
||||
|
||||
try { // Process the Row Data
|
||||
if (
|
||||
empty($row_data['ICD_Code']) &&
|
||||
empty($row_data['Description'])
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Save the Row
|
||||
$icdService = new IcdService();
|
||||
$icdService->handleIcdRow($row_data, $id);
|
||||
|
||||
// Write Success Result to File
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => 200,
|
||||
'Ingest Note' => 'Success',
|
||||
]), $sheet->getName());
|
||||
$imported_icd_data++;
|
||||
|
||||
} catch (ImportRowException $e) {
|
||||
// Write Data Validation Error to File
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => $e->getCode(),
|
||||
'Ingest Note' => $e->getMessage(),
|
||||
]), $sheet->getName());
|
||||
$failed_icd_data[] = ['row_number' => $index, 'error' => $e->getMessage(), 'data' => $row_data];
|
||||
} catch (\Exception $e) {
|
||||
throw new \Exception($e);
|
||||
// Write Server Error to File
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => 500,
|
||||
'Ingest Note' => env('APP_DEBUG') ? $e->getMessage() : 'Server Error',
|
||||
]), $sheet->getName());
|
||||
$failed_icd_data[] = ['row_number' => $index, 'error' => $e->getMessage(), 'data' => $row_data];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break; // Only Read First Row
|
||||
}
|
||||
$import->reader->close();
|
||||
Storage::delete('temp/'.$file_name);
|
||||
$import->writer->close();
|
||||
|
||||
return [
|
||||
'total_successed_row' => $imported_icd_data,
|
||||
'total_failed_row' => count($failed_icd_data),
|
||||
'failed_row' => $failed_icd_data,
|
||||
'result_file' => [
|
||||
'url' => Storage::disk('public')->url('temp/result-'.$file_name),
|
||||
'name' => 'result-'.$file_name,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function activation(Request $request, $diagnosis_id)
|
||||
{
|
||||
$request->validate([
|
||||
'active' => 'required'
|
||||
]);
|
||||
|
||||
$Icd = Icd::findOrFail($diagnosis_id);
|
||||
$Icd->active = $request->active == '1';
|
||||
|
||||
if ($Icd->save()) {
|
||||
return response()->json([
|
||||
'icd' => $Icd,
|
||||
'message' => 'Status Updated Successfully'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function generateIcdList(Request $request, $diagnosis_id){
|
||||
// Mendapatkan data yang akan diekspor (misalnya, dari database)
|
||||
$data = Icd::where('icd_template_id', $diagnosis_id)->get()->toArray();
|
||||
|
||||
// Membuat penulis entitas Spout
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
|
||||
// Membuka penulis untuk menulis ke file
|
||||
$writer->openToFile(public_path('files/TemplateICDList.xlsx'));
|
||||
/** Create a style with the StyleBuilder */
|
||||
$style = (new StyleBuilder())
|
||||
->setFontBold()
|
||||
->build();
|
||||
|
||||
// Menulis header kolom
|
||||
$headers_map_to_table_fields = $this->icdService->listing_doc_headers;
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields, $style);
|
||||
|
||||
$writer->addRow($headerRow);
|
||||
|
||||
// Menulis data
|
||||
if (!empty($data)) {
|
||||
foreach ($data as $item) {
|
||||
$rowData = [
|
||||
// $item['rev'], // Rev
|
||||
// $item['version'], // Version
|
||||
$item['code'], // Code
|
||||
// $item['parent_code'], // Parent Code
|
||||
$item['name'], // Name
|
||||
// $item['description'], // Description
|
||||
// $item['active'] == 1 ? 'Active' : 'Inactive', // Status
|
||||
// $item['type'], // Type
|
||||
];
|
||||
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
}
|
||||
|
||||
// Menutup penulis
|
||||
$writer->close();
|
||||
|
||||
// Mengembalikan response untuk mengunduh file
|
||||
$filePath = public_path('files/TemplateICDList.xlsx');
|
||||
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Diagnosis ICD List " . date('Y-m-d h:i:s'),
|
||||
"file_url" => url('files/TemplateICDList.xlsx')
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
108
Modules/Internal/Http/Controllers/Api/DiagnosisExclusionController.php
Normal file → Executable file
108
Modules/Internal/Http/Controllers/Api/DiagnosisExclusionController.php
Normal file → Executable file
@@ -7,7 +7,6 @@ use App\Helpers\Helper;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\CorporateService;
|
||||
use App\Models\Exclusion;
|
||||
use App\Models\ExclusionImport;
|
||||
use App\Models\Icd;
|
||||
use App\Models\ImportLog;
|
||||
use App\Services\ImportService;
|
||||
@@ -18,8 +17,6 @@ use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Modules\Internal\Services\ExclusionService;
|
||||
use Modules\Internal\Transformers\DiagnosisExclusionResource;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class DiagnosisExclusionController extends Controller
|
||||
{
|
||||
@@ -40,22 +37,6 @@ class DiagnosisExclusionController extends Controller
|
||||
return Helper::paginateResources(DiagnosisExclusionResource::collection($exclusions));
|
||||
}
|
||||
|
||||
public function listDiagnosis(Request $request, $corporate_id){
|
||||
$exclusion = Exclusion::query()
|
||||
->where('corporate_id', $corporate_id)
|
||||
->where('type', 'diagnosis')
|
||||
->where('deleted_at', null)
|
||||
// ->with(['rules'])
|
||||
->get('exclusionable_id')->toArray();
|
||||
|
||||
$icd = Icd::query()
|
||||
->whereNotIn('id', $exclusion)
|
||||
->limit(100)
|
||||
->get()
|
||||
->toArray();
|
||||
return Helper::responseJson($icd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
@@ -235,13 +216,7 @@ class DiagnosisExclusionController extends Controller
|
||||
$import->reader->close();
|
||||
Storage::delete('temp/' . $file_name);
|
||||
$import->writer->close();
|
||||
ExclusionImport::updateOrCreate([
|
||||
'corporate_id' => $corporate_id
|
||||
],[
|
||||
'file_name' => $file_name,
|
||||
'file_path' => 'temp/result-' . $file_name,
|
||||
|
||||
]);
|
||||
return [
|
||||
// 'total_successed_row' => $imported_plan_data,
|
||||
// 'total_failed_row' => count($failed_plan_data),
|
||||
@@ -293,7 +268,6 @@ class DiagnosisExclusionController extends Controller
|
||||
$gender = implode(",", $gender);
|
||||
$gender = trim($gender, ",");
|
||||
|
||||
$exclusion->rules()->corporate_id = $corporate_id;
|
||||
|
||||
$exclusion->rules()->updateOrCreate([
|
||||
'exclusion_id' => $exclusion->id,
|
||||
@@ -319,6 +293,7 @@ class DiagnosisExclusionController extends Controller
|
||||
'values' => $data['min_age'] ?? '',
|
||||
]);
|
||||
|
||||
|
||||
$exclusion->rules()->updateOrCreate([
|
||||
'exclusion_id' => $exclusion->id,
|
||||
'name' => 'max_age',
|
||||
@@ -345,85 +320,4 @@ class DiagnosisExclusionController extends Controller
|
||||
// return $exclusions;
|
||||
return Helper::paginateResources(DiagnosisExclusionResource::collection($exclusions));
|
||||
}
|
||||
|
||||
/**
|
||||
* Bagaskoro BSD 20-10-2023
|
||||
*
|
||||
* Fungsi untuk get detil exclusion
|
||||
*/
|
||||
public function detilExclusion(Request $request, $corporate_id, $id_exclusion)
|
||||
{
|
||||
$corporate = Corporate::query()
|
||||
->with(['currentPolicy', 'plans'])
|
||||
->withCount('corporatePlans')
|
||||
->withCount('employees')
|
||||
->findOrFail($corporate_id);
|
||||
|
||||
$plans = $corporate['plans']->map(function ($plan) {
|
||||
return $plan['code'];
|
||||
});
|
||||
|
||||
$exclusions = Exclusion::query()
|
||||
->where('id', $id_exclusion)
|
||||
->where('type', 'diagnosis')
|
||||
->where('deleted_at', null)
|
||||
->with(['rules'])
|
||||
->get();
|
||||
|
||||
$exclusion = DiagnosisExclusionResource::collection($exclusions);
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'messages' => "success",
|
||||
'data' => [
|
||||
'exclusion' => empty($exclusion) ? [] : $exclusion[0],
|
||||
'plans' => $plans,
|
||||
]
|
||||
],200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bagaskoro BSD 19-10-2023
|
||||
*
|
||||
* Fungsi untuk update status active
|
||||
*/
|
||||
protected function messages()
|
||||
{
|
||||
return [
|
||||
'required' => ':attribute harus diisi',
|
||||
'integer' => ':attribute harus angka',
|
||||
'unique' => ':attribute (:input) sudah ada',
|
||||
'max' => ':attribute maximal :max karakter',
|
||||
'exists' => ':attribute (:input) tidak ditemukan',
|
||||
'digits_between'=> ':attribute maximal :max digit minimal :min digit'
|
||||
];
|
||||
}
|
||||
|
||||
public function updateActivation(Request $request)
|
||||
{
|
||||
// validation rule
|
||||
$validator = Validator::make($request->all(),[
|
||||
'id' => 'required|exists:exclusions',
|
||||
'active' => 'required|in:0,1',
|
||||
],$this->messages());
|
||||
|
||||
// validation error
|
||||
if ($validator->fails()) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'messages' => $validator->getMessageBag()
|
||||
],400);
|
||||
}
|
||||
|
||||
Exclusion::where('id', $request->id)->update([
|
||||
'active' => $request->active == 1 ? 0 : 1,
|
||||
'reason' => $request->reason
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'messages' => "status berhasil diupdate",
|
||||
'data' => []
|
||||
],200);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,314 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Icd;
|
||||
use App\Models\IcdTemplate;
|
||||
use App\Services\ImportService;
|
||||
use App\Helpers\Helper;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
|
||||
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
|
||||
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
|
||||
use Box\Spout\Common\Entity\Style\CellAlignment;
|
||||
use Box\Spout\Common\Entity\Style\Color;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
use Box\Spout\Common\Entity\Row;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
use Modules\Internal\Services\IcdService;
|
||||
|
||||
class DiagnosisTemplateController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
if ($request->search){
|
||||
return IcdTemplate::when($request->search ?? null, function($icd, $search) {
|
||||
$icd->where('name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('code', 'LIKE', '%'.$search.'%');
|
||||
})->paginate(15);
|
||||
} else {
|
||||
$diagnosisTemplate = IcdTemplate::query()
|
||||
// ->filter($request->toArray())
|
||||
->orderBy('code', 'ASC')
|
||||
->paginate(15);
|
||||
return $diagnosisTemplate;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('internal::create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'required'
|
||||
]);
|
||||
|
||||
$newDiagnosisTemplate = IcdTemplate::create($request->all());
|
||||
|
||||
return $newDiagnosisTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
return view('internal::show');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
$IcdTemplate = IcdTemplate::findOrFail($id);
|
||||
|
||||
return $IcdTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$IcdTemplate = IcdTemplate::findOrFail($id);
|
||||
$request->validate([
|
||||
'name' => 'required'
|
||||
]);
|
||||
$IcdTemplate->fill([
|
||||
// 'code' => $request->code,
|
||||
'name' => $request->name,
|
||||
'description' => $request->description,
|
||||
'active' => $request->active,
|
||||
])->save();
|
||||
|
||||
return $IcdTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function search(Request $request)
|
||||
{
|
||||
return IcdTemplate::when($request->search ?? null, function($icd, $search) {
|
||||
$icd->where('name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('code', 'LIKE', '%'.$search.'%');
|
||||
})->limit(10)->get();
|
||||
}
|
||||
|
||||
public function import(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
|
||||
]);
|
||||
$file_name = now()->getPreciseTimestamp(3).'-'.$request->file('file')->getClientOriginalName();
|
||||
$file = $request->file('file')->storeAs('temp', $file_name);
|
||||
|
||||
$import = new ImportService();
|
||||
$import->read(Storage::path('temp/'.$file_name));
|
||||
$import->write(Storage::disk('public')->path('temp/result-'.$file_name), 'xsls');
|
||||
|
||||
$imported_icd_data = 0;
|
||||
$failed_icd_data = [];
|
||||
foreach ($import->sheetsIterator() as $sheetIndex => $sheet) {
|
||||
$doc_headers_indexes = [];
|
||||
foreach ($sheet->getRowIterator() as $index => $row) {
|
||||
if ($index == 1) { // First Row Must be Header
|
||||
foreach ($row->getCells() as $index => $cell) {
|
||||
$title = $cell->getValue();
|
||||
$title = preg_replace( "/\r|\n/", " ", $title );
|
||||
$title = preg_replace('/\xc2\xa0/', " ", $title );
|
||||
$title = rtrim($title);
|
||||
$title = ltrim($title);
|
||||
$doc_headers_indexes[$index] = $title;
|
||||
}
|
||||
|
||||
// Write Header to File
|
||||
$result_headers = array_merge($doc_headers_indexes, ['Ingest Code', 'Ingest Note']);
|
||||
$import->addArrayToRow($result_headers);
|
||||
|
||||
// TODO Validate if First Row not Header
|
||||
} else { // Next Row Should be Data
|
||||
$row_data = [];
|
||||
$row_map = [
|
||||
0 => 'code',
|
||||
1 => 'parent_code',
|
||||
2 => 'reff_exc',
|
||||
3 => 'description_en',
|
||||
4 => 'description_id',
|
||||
5 => 'keywords',
|
||||
6 => 'version',
|
||||
7 => 'active',
|
||||
];
|
||||
|
||||
foreach ($row->getCells() as $header_index => $cell) {
|
||||
if (isset($row_map[$header_index])) {
|
||||
$value = $cell->getValue();
|
||||
$value = preg_replace( "/\r|\n/", " ", $value );
|
||||
$value = preg_replace('/\xc2\xa0/', " ", $value );
|
||||
$value = rtrim($value);
|
||||
$value = ltrim($value);
|
||||
$row_data[$row_map[$header_index]] = $cell->getValue();
|
||||
}
|
||||
}
|
||||
|
||||
try { // Process the Row Data
|
||||
if (
|
||||
empty($row_data['code']) &&
|
||||
empty($row_data['parent_code']) &&
|
||||
empty($row_data['reff_exc']) &&
|
||||
empty($row_data['description_en']) &&
|
||||
empty($row_data['description_id']) &&
|
||||
empty($row_data['keywords']) &&
|
||||
empty($row_data['version']) &&
|
||||
empty($row_data['active'])
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Save the Row
|
||||
$icdService = new IcdService();
|
||||
$icdService->handleIcdRow($row_data);
|
||||
|
||||
// Write Success Result to File
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => 200,
|
||||
'Ingest Note' => 'Success',
|
||||
]), $sheet->getName());
|
||||
$imported_icd_data++;
|
||||
|
||||
} catch (ImportRowException $e) {
|
||||
// Write Data Validation Error to File
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => $e->getCode(),
|
||||
'Ingest Note' => $e->getMessage(),
|
||||
]), $sheet->getName());
|
||||
$failed_icd_data[] = ['row_number' => $index, 'error' => $e->getMessage(), 'data' => $row_data];
|
||||
} catch (\Exception $e) {
|
||||
throw new \Exception($e);
|
||||
// Write Server Error to File
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
'Ingest Code' => 500,
|
||||
'Ingest Note' => env('APP_DEBUG') ? $e->getMessage() : 'Server Error',
|
||||
]), $sheet->getName());
|
||||
$failed_icd_data[] = ['row_number' => $index, 'error' => $e->getMessage(), 'data' => $row_data];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break; // Only Read First Row
|
||||
}
|
||||
$import->reader->close();
|
||||
Storage::delete('temp/'.$file_name);
|
||||
$import->writer->close();
|
||||
|
||||
return [
|
||||
'total_successed_row' => $imported_icd_data,
|
||||
'total_failed_row' => count($failed_icd_data),
|
||||
'failed_row' => $failed_icd_data,
|
||||
'result_file' => [
|
||||
'url' => Storage::disk('public')->url('temp/result-'.$file_name),
|
||||
'name' => 'result-'.$file_name,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function activation(Request $request, $id)
|
||||
{
|
||||
$request->validate([
|
||||
'active' => 'required'
|
||||
]);
|
||||
$Icd = IcdTemplate::findOrFail($id);
|
||||
$Icd->active = $request->active == '1';
|
||||
|
||||
if ($Icd->save()) {
|
||||
return response()->json([
|
||||
'icd' => $Icd,
|
||||
'message' => 'Status Updated Successfully'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function generateIcdList(Request $request){
|
||||
// Mendapatkan data yang akan diekspor (misalnya, dari database)
|
||||
$data = Icd::get()->toArray();
|
||||
|
||||
// Membuat penulis entitas Spout
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
|
||||
// Membuka penulis untuk menulis ke file
|
||||
$writer->openToFile(public_path('files/CorporateMembershipList.xlsx'));
|
||||
/** Create a style with the StyleBuilder */
|
||||
$style = (new StyleBuilder())
|
||||
->setFontBold()
|
||||
->build();
|
||||
|
||||
// Menulis header kolom
|
||||
$headers_map_to_table_fields = $this->icdService->listing_doc_headers;
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields, $style);
|
||||
|
||||
$writer->addRow($headerRow);
|
||||
|
||||
// Menulis data
|
||||
if (!empty($data)) {
|
||||
foreach ($data as $item) {
|
||||
$rowData = [
|
||||
$item['rev'], // Rev
|
||||
$item['version'], // Version
|
||||
$item['code'], // Code
|
||||
$item['parent_code'], // Parent Code
|
||||
$item['name'], // Name
|
||||
$item['description'], // Description
|
||||
$item['active'] == 1 ? 'Active' : 'Inactive', // Status
|
||||
$item['type'], // Type
|
||||
];
|
||||
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
}
|
||||
|
||||
// Menutup penulis
|
||||
$writer->close();
|
||||
|
||||
// Mengembalikan response untuk mengunduh file
|
||||
$filePath = public_path('files/CorporateMembershipList.xlsx');
|
||||
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Diagnosis ICD List " . date('Y-m-d h:i:s'),
|
||||
"file_url" => url('files/CorporateMembershipList.xlsx')
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
5
Modules/Internal/Http/Controllers/Api/DivisionController.php
Normal file → Executable file
5
Modules/Internal/Http/Controllers/Api/DivisionController.php
Normal file → Executable file
@@ -19,7 +19,6 @@ class DivisionController extends Controller
|
||||
$benefits = CorporateDivision::query()
|
||||
->filter($request->all())
|
||||
->where('corporate_id', $corporate_id)
|
||||
->orderBy('id', 'DESC')
|
||||
->paginate(0)
|
||||
->appends($request->all());
|
||||
|
||||
@@ -53,7 +52,6 @@ class DivisionController extends Controller
|
||||
'corporate_id' => $corporate_id,
|
||||
'code' => $request->code,
|
||||
'name' => $request->name,
|
||||
'description' => $request->description ? $request->description : null,
|
||||
]);
|
||||
|
||||
return $newCorporatePlan;
|
||||
@@ -93,6 +91,7 @@ class DivisionController extends Controller
|
||||
$request->validate([
|
||||
'code' => [
|
||||
'required',
|
||||
Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id)
|
||||
],
|
||||
'name' => 'required'
|
||||
]);
|
||||
@@ -100,7 +99,7 @@ class DivisionController extends Controller
|
||||
$corporatePlan->fill([
|
||||
'code' => $request->code,
|
||||
'name' => $request->name,
|
||||
'description' => $request->description,
|
||||
'active' => $request->active,
|
||||
])->save();
|
||||
|
||||
return $corporatePlan;
|
||||
|
||||
@@ -1,103 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Routing\Controller;
|
||||
use App\Models\OLDLMS\DoctorRating;
|
||||
|
||||
class DoctorRatingController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @param int|null $id
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index($id = null)
|
||||
{
|
||||
$query = DoctorRating::query();
|
||||
if ($id !== null) {
|
||||
$query->where('nID', $id);
|
||||
}
|
||||
|
||||
$doctorRatings = $query->with([
|
||||
'user' => function ($query) {
|
||||
$query->select('nID', 'sFirstName'); // Select only necessary columns
|
||||
}
|
||||
])
|
||||
->select('nIDUser', 'nIDDokter', 'nRating', 'sNotes', 'dCreateOn')
|
||||
->get();
|
||||
|
||||
|
||||
// $prescriptions->toArray();
|
||||
// dd($prescriptions);
|
||||
|
||||
return response()->json($doctorRatings);
|
||||
// return response()->json(Helper::paginateResources(LivechatResource::collection($livechat)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('internal::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)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
return view('internal::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)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user