168 Commits

Author SHA1 Message Date
a08cdd56c8 feat(hospitalportal): implement ProviderOnline bridging endpoints 2026-05-13 16:35:01 +07:00
cf831c4602 feat(hospitalportal): add provider and request log schema 2026-05-13 16:34:54 +07:00
5042cd7800 Merge branch 'staging' 2023-05-10 11:50:22 +07:00
70b0d880fc update harga 2023-05-10 11:50:02 +07:00
6c65b58481 update enrolement benefit 2023-05-10 11:02:00 +07:00
6a94e46f52 update harga 2023-05-08 11:19:30 +07:00
b3e78850d3 Merge branch 'staging' 2023-05-08 08:59:43 +07:00
5df1a85e7c add filter ketika klik all 2023-05-08 08:47:36 +07:00
pajri
c8b06f67d1 Table Component Alarm Center 2023-05-05 17:02:40 +07:00
pajri
49f3a8558d view table alarm-center 2023-05-04 16:59:18 +07:00
12fbef2a12 update biaya 2023-05-04 09:19:47 +07:00
e455fbfbea update 2023-05-04 09:14:37 +07:00
a55b7f4148 update tarif rs awal bros 2023-05-04 08:43:28 +07:00
4f8745d726 Merge branch 'staging' 2023-05-02 14:43:09 +07:00
f5de316768 add filter corporate benefit active 2023-05-02 14:41:10 +07:00
Linksehat Staging Server
d22fa1848f merge 2023-05-02 09:21:30 +07:00
Linksehat Staging Server
cc5201ca3e merge with staging 2023-05-02 09:12:26 +07:00
bb925503f0 Merge branch 'staging' 2023-05-02 09:04:09 +07:00
be5e8950c1 update limit go 2023-05-02 09:03:30 +07:00
Linksehat Staging Server
aefddcbff2 build dashboard fronted & config wkhtmltopdf 2023-04-28 16:16:12 +07:00
5333a65495 Merge branch 'staging' 2023-04-28 14:24:01 +07:00
91be43263a add image di log 2023-04-28 14:23:09 +07:00
947952340d Merge branch 'staging' 2023-04-28 11:04:12 +07:00
affb54b62d update deskripsi 2023-04-28 11:01:56 +07:00
67cd7cdce0 Merge branch 'staging' 2023-04-28 10:08:59 +07:00
27c1bfd6e3 update composer 2023-04-28 09:54:08 +07:00
5c6e7f3122 update 2023-04-26 15:15:19 +07:00
pajri
83e3ff6345 fix bugs Card Policy 2023-04-25 14:47:22 +07:00
3e2c9015ed update validasi 2023-04-20 08:52:59 +07:00
3a5fd67778 update import plans and benefit 2023-04-18 16:15:07 +07:00
0d73222a04 menambah validasi saat input corporate 2023-04-18 15:28:54 +07:00
85f7eeda18 add endpoint member alarm center 2023-04-13 14:17:26 +07:00
R
e91304bb4b Merge branch 'master' of itcorp.primaya.id:rajif/aso 2023-04-06 17:23:46 +07:00
R
da87a53623 Sementara Fix Filter Date 2023-04-06 17:23:25 +07:00
Fajar
70a2cbff9e Merge remote-tracking branch 'origin/master' into feature/client-portal 2023-04-06 15:31:34 +07:00
Fajar
85039893a8 Change Permission & WIP Dashboard Client Portal 2023-04-06 15:30:22 +07:00
R
7d198583a4 Fix Commision 2023-04-06 07:32:47 +07:00
R
3ff0cc1b29 Fix Komisi 2023-04-06 06:49:04 +07:00
R
97486da90f Fix Komisi 2023-04-06 06:25:52 +07:00
R
53075d0ce8 Add Accounting dummy password 2023-04-06 05:06:35 +07:00
R
a2cbc0a270 Merge branch 'master' of itcorp.primaya.id:rajif/aso 2023-04-06 05:04:18 +07:00
R
cca2310f54 [WIP] Add Linksehat Payment Report 2023-04-06 05:03:38 +07:00
R
d54288106b Remove Unused Files 2023-04-04 16:41:59 +07:00
Fajar
4a7c3ebdda [WIP] Claim Report & Dashboard 2023-03-25 16:15:26 +07:00
Fajar
59e7394d13 Merge branch 'feature/client-portal-dashboard' into staging 2023-03-24 15:25:05 +07:00
Fajar
127cdf8708 fixing table filter and search on dashboard 2023-03-24 15:23:41 +07:00
R
c2d084b4ea Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-03-24 14:41:29 +07:00
R
7b9a341ccd [WIP] Claim Encounters 2023-03-24 14:41:02 +07:00
Fajar
606b3c871a refactoring member model 2023-03-24 10:33:59 +07:00
Fajar
5fd33b3784 Merge branch 'feature/client-portal-claim-reports' into staging 2023-03-24 09:23:27 +07:00
Fajar
588b66c050 Merge branch 'feature/client-portal-dashboard' into staging 2023-03-24 09:22:32 +07:00
Fajar
86bb5860f3 create table for claim report from component 2023-03-24 09:20:03 +07:00
Fajar
677a349d4c remove old table dashboard 2023-03-24 09:15:37 +07:00
Fajar
3c5f06ef26 create table component & connect api for dashboard 2023-03-24 09:14:49 +07:00
Fajar
d5dfc7d36c update package and install pusher-js 2023-03-24 09:11:14 +07:00
R
229908e492 [WIP] Encounter 2023-03-16 14:27:53 +07:00
R
f65b28107c [WIP] Encounter 2023-03-16 14:27:25 +07:00
R
e06447bf00 [WIP] Add Diagnosa 2023-03-14 18:19:57 +07:00
R
c35442e652 Add Remove User Insurance 2023-03-12 18:50:07 +07:00
R
26290912ef [WIP] Hotfix Claim Coverage Limit 2023-03-12 14:25:56 +07:00
R
53b35e86c2 [WIP] Copy Claims Pages from Dashboard 2023-03-08 03:13:13 +07:00
R
254420bdae [Hotfix] Date Parsing 2023-03-08 02:23:57 +07:00
R
8c86794340 [Hotfix] Handle undefined relation 2023-03-08 02:22:41 +07:00
R
2b1f5c97df [Hotfix] Final LOG Gender 2023-03-08 02:19:59 +07:00
R
b587178c85 [WIP] Update Dashboard Claim Final LOG 2023-03-08 02:02:15 +07:00
R
ed96878dda [WIP] Update Show Hide Button 2023-03-06 02:22:11 +07:00
R
35119ee8ec [WIP] Update Claim 2023-03-06 02:10:08 +07:00
R
91ba718a50 [WIP] Update 2023-03-03 08:44:08 +07:00
R
9e322c4ee5 Change LOG Detail Benefit 2023-03-01 14:50:07 +07:00
R
5741789ddb Change LOG Detail Benefit 2023-03-01 14:48:51 +07:00
R
d0ee09a6e4 [Hotfix] Create Claim 2023-03-01 12:16:27 +07:00
R
89cd2a9d37 [WIP] A 2023-03-01 12:07:03 +07:00
R
ce0fde18dc Ingest Providers 2023-03-01 12:04:25 +07:00
R
acf9fa348e Change Benefit Display 2023-02-24 11:59:22 +07:00
R
74dd65efde Fix Wrong Loading 2023-02-24 10:56:05 +07:00
R
edc5ba9822 Change 999999999 to As Charge 2023-02-24 10:52:01 +07:00
R
8902718523 Add Dummy Notification Data 2023-02-24 10:45:03 +07:00
R
1c4f03ea83 Separate Invoice Upload 2023-02-24 09:47:35 +07:00
R
627904abba Update Show Claim Request 2023-02-24 09:40:37 +07:00
R
bd3f53b596 Fix Upload Files 2023-02-23 16:18:44 +07:00
R
69919878fa Fix Claim Request Null 2023-02-23 10:13:16 +07:00
R
f3bdf12bc4 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-02-23 09:42:05 +07:00
R
eb1211cde7 Add Plan Limit & Usage 2023-02-23 09:41:58 +07:00
Linksehat Staging Server
b8ed27f2ff [Server Build] Rebuild Dashboard Staging 2023-02-22 08:51:59 +00:00
R
74cfcfa16b Ignore Build Folder 2023-02-22 13:36:15 +07:00
R
9f95e89a9a Merge branch 'feature/aso-digital-card' into staging 2023-02-22 13:21:50 +07:00
R
e51068b0a6 Fix Generate LOG 2023-02-22 12:30:02 +07:00
R
5cd23ff343 [Build] Dashboard Staging 2023-02-21 17:07:28 +07:00
R
615330bb46 Merge branch 'feature/generate-log' into staging 2023-02-21 17:02:53 +07:00
R
bcf6662db6 Update Generate Log 2023-02-21 17:01:57 +07:00
R
be43f8a4a4 Merge branch 'feature/aso-digital-card' into staging 2023-02-20 15:03:14 +07:00
R
dba421ad0b Update Digital Card Get Member Detail 2023-02-20 15:03:05 +07:00
R
c3a78f8a40 [Build] Dashboard Staging 2023-02-17 14:39:12 +07:00
R
6c6a7c3919 Merge branch 'feature/aso-digital-card' into staging 2023-02-17 14:31:02 +07:00
R
5c71b556a0 Update Linking With ASO 2023-02-17 14:29:50 +07:00
R
63c53d18d1 [Build] Staging Dashboard & Hospital Portal 2023-02-15 12:54:43 +07:00
R
a5db01bd25 Fix Download LOG 2023-02-15 12:50:46 +07:00
R
5d4033a9ca Display Uploaded Files 2023-02-15 12:30:35 +07:00
R
912edcdae7 [Build] Dashboard Production 2023-02-15 10:47:39 +07:00
R
5a7695b404 Add Appointment Type 2023-02-15 10:46:37 +07:00
R
5f05f191c6 [Build] Dashboard Prod 2023-02-15 10:14:20 +07:00
R
46af57b17c Show additional patient information in Dashboard Appointment 2023-02-15 10:13:07 +07:00
R
016bd3f605 [Hotfix] No PaymentDetail 2023-02-15 10:02:49 +07:00
R
093f8160d2 [Build] Additional Information 2023-02-15 10:00:53 +07:00
R
d8f493103c Add Additional Information 2023-02-15 09:57:00 +07:00
R
7f77deb09e Order Appointment & Livechat by newset 2023-02-15 09:10:22 +07:00
R
d38bc8dbfc [Build] Dashboard 2023-02-15 09:07:33 +07:00
R
b225084991 Update OLDLMS Appointment & Livechat Status 2023-02-15 09:03:13 +07:00
R
d8a98f4648 Merge remote-tracking branch 'origin/feature/appointment' 2023-02-15 08:08:51 +07:00
R
27523b8cce [WIP] Fix Upload Document from Hospital Portal 2023-02-15 08:00:14 +07:00
R
f6117743ad Fix Filter 2023-02-14 16:32:38 +07:00
R
8c97df9fc4 Remove Dummy Notifications 2023-02-14 15:31:57 +07:00
R
4f2bb19d8a [Build] Dashboard & Hospital Portal 2023-02-14 13:48:59 +07:00
R
13764a3766 [Build] Staging - Hospital Portal 2023-02-14 13:31:49 +07:00
R
ed273fdafa Merge branch 'feature/hospital-portal' 2023-02-14 13:09:14 +07:00
R
d706bf0623 [WIP] Add Approve Button 2023-02-14 13:07:17 +07:00
R
13542cd3c0 [WIP] Add Claim Request 2023-02-14 12:39:51 +07:00
pajri
f309f4039c list dan show appointment 2023-02-10 16:55:24 +07:00
pajri
387658a992 CRUD Doctor Hospital 2023-02-09 13:15:45 +07:00
R
6491f4d3e3 Add corporate Manager soft delete 2023-02-04 08:48:52 +07:00
R
5028b2d82b Fix Division by Zero 2023-02-04 08:46:44 +07:00
R
5d56434aa2 [Build] Client Portal 2023-02-04 08:38:46 +07:00
R
8e05280b7d Fix Name & User Avatar 2023-02-04 08:36:59 +07:00
R
e3de0a3c04 Hide Burger 2023-02-04 08:14:51 +07:00
R
c3a425c93d Fix Error on opening Add Claim Modal 2023-02-04 08:12:53 +07:00
R
431070efc3 Fix OTP Client Portal to 4444 2023-02-04 08:05:03 +07:00
R
e8c3decf85 Change Title 2023-02-01 20:27:53 +07:00
R
99c488baf3 Update Guaranted Letter 2023-02-01 20:21:03 +07:00
R
0b50e4c980 Update Guaranted Letter Styling 2023-02-01 20:17:32 +07:00
R
ba310a21c1 [Build] Both 2023-02-01 19:39:33 +07:00
R
5a0136acf8 Fix Download Blob Pdf 2023-02-01 19:35:30 +07:00
R
75c9781a22 [Build] Staging 2023-02-01 19:20:09 +07:00
R
2a1f0c854a [Build] Production 2023-02-01 19:16:50 +07:00
R
f0c787fede Add Download LOG 2023-02-01 19:15:31 +07:00
pajri
a7e688a52c hospital portal 2023-02-01 16:22:03 +07:00
R
8d5f4bb0bd Fix Import Benefit selecting wrong plan from another corporate 2023-02-01 01:37:53 +07:00
R
248047006e [Build] Staging 2023-02-01 01:16:44 +07:00
R
2c535b4021 [Build] Production 2023-02-01 00:56:17 +07:00
R
59dd63a78f Add name,dob linking tools 2023-02-01 00:51:14 +07:00
R
21282be7b3 Merge remote-tracking branch 'origin/feature/prices' 2023-02-01 00:42:44 +07:00
pajri
8cbfb1929b update csv 2023-02-01 11:52:19 +07:00
R
b8152e6b3f Fix Date Time Write 2023-01-30 12:40:04 +07:00
R
cfbe108629 Remove error sting 2023-01-30 12:20:14 +07:00
R
a8821dfb3c Fix Seeder 2023-01-30 12:08:49 +07:00
pajri
1ce2655b65 update schedule dokter 2023-01-28 09:44:14 +07:00
pajri
335e24b17c add biaya admin 2023-01-27 13:26:42 +07:00
pajri
4776eb5b0a seeder prices jadwal dokter 2023-01-27 09:52:31 +07:00
R
17daf20167 Add MCU 2023-01-26 14:51:32 +07:00
R
18ace75fc7 Add OLDLMS .env.example 2023-01-26 07:35:08 +07:00
R
ad743de98d Fix Bug Member Import 2023-01-19 15:09:32 +07:00
R
96a40842bd [Build] Import Loading Button 2023-01-19 14:43:16 +07:00
R
137fd07a28 Add Loading Button when Import 2023-01-19 14:41:56 +07:00
R
21dc0b1fc1 [Build] Frontend Dashboard 2023-01-19 10:15:55 +07:00
R
f56361de62 [Build] Frontend Dashboard 2023-01-19 10:15:00 +07:00
R
85f319878a Fix Regex Kode Corporate 2023-01-19 10:09:53 +07:00
R
23436164c2 Fix Corporate Create & Update Validation remove allow spaces 2023-01-17 12:40:15 +07:00
R
b19e0876e5 Change Specialities Button 2023-01-15 12:19:31 +07:00
R
704c5ecc44 [Bug Fix] Update Validation : Is there laravel validation update ? 2023-01-15 12:07:44 +07:00
R
9087580138 Add File Import Example Download 2023-01-15 11:28:07 +07:00
R
7ff199a3c1 [Fix] Member Benefit Specific 2023-01-13 14:48:15 +07:00
R
08a2502fb1 Enable Claim Softdeletes 2023-01-13 12:19:00 +07:00
R
65c9153fee [Build] Frontend 2023-01-13 12:14:00 +07:00
R
775f471a07 [WIP] Update Postponed 2023-01-13 12:08:57 +07:00
R
f09eaef5ad [Fix] Display Claim Postponed 2023-01-13 11:50:31 +07:00
R
e116fb814a [WIP] Fix Medicine 2023-01-13 08:19:43 +07:00
R
2f10f913c0 [WIP] Change Check Coverage Appointment 2023-01-13 00:43:58 +07:00
R
3a2dd84500 Fix Breadcrumbs Links 2023-01-12 15:10:59 +07:00
R
7d1872ef1e [Build] Update 2023-01-11 14:49:16 +07:00
1839 changed files with 77733 additions and 8118 deletions

0
.editorconfig Executable file → Normal file
View File

7
.env.example Executable file → Normal file
View File

@@ -15,6 +15,13 @@ 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

0
.gitattributes vendored Executable file → Normal file
View File

3
.gitignore vendored Executable file → Normal file
View File

@@ -12,3 +12,6 @@ npm-debug.log
yarn-error.log
/.idea
/.vscode
/public/dashboard
/public/dashboard-staging

0
.styleci.yml Executable file → Normal file
View File

0
Modules/Client/Config/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Config/config.php Executable file → Normal file
View File

0
Modules/Client/Console/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Database/Migrations/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Database/Seeders/.gitkeep Executable file → Normal file
View File

View File

0
Modules/Client/Database/factories/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Entities/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Http/Controllers/.gitkeep Executable file → Normal file
View File

4
Modules/Client/Http/Controllers/Api/AuthController.php Executable file → Normal file
View File

@@ -35,13 +35,13 @@ class AuthController extends Controller
if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
User::query()->find($user->id)->update([
'email' => $request->phoneOrEmail,
'otp' => rand(1000, 9999),
'otp' => 4444, //rand(1000, 9999),
'otp_created_at' => now()
]);
} else {
User::query()->find($user->id)->update([
'phone' => $request->phoneOrEmail,
'otp' => rand(1000, 9999),
'otp' => 4444,//rand(1000, 9999),
'otp_created_at' => now()
]);
}

View File

@@ -0,0 +1,136 @@
<?php
namespace Modules\Client\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\Claim;
use App\Services\ClaimService;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Client\Transformers\ClaimShowResource;
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)
{
//
}
}

View File

View File

View File

@@ -3,110 +3,39 @@
namespace Modules\Client\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\Member;
use App\Services\CorporateMemberService;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Client\Transformers\MemberResources;
use Modules\Client\Transformers\ClaimReport\MemberResources as ClaimReportMemberResources;
use Modules\Client\Transformers\Dashboard\MemberResources as DashboardMemberResources;
use Modules\Client\Transformers\Dashboard\MemberAlarmCenterResources as DashboardMemberAlarmResources;
class CorporateMemberController extends Controller
{
public function __construct(public CorporateMemberService $corporateMemberService)
{
}
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request, $corporate_id)
{
$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);
});
switch ($request->input('type')) {
case 'claim-report':
$members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request);
return response()->json(Helper::paginateResources(ClaimReportMemberResources::collection($members)));
case 'claim-submit':
$members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request);
return response()->json(Helper::paginateResources(ClaimReportMemberResources::collection($members)));
case 'alarm-center':
$members = $this->corporateMemberService->getAllMemberAlarmCenter($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)));
}
// 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)));
}
/**
* 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)
{
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)
{
//
}
}

View File

@@ -2,11 +2,12 @@
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\DashboardResources;
use Modules\Client\Transformers\Dashboard\LimitResources;
class CorporatePolicyController extends Controller
{
@@ -14,25 +15,15 @@ class CorporatePolicyController extends Controller
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request, $corporate_id)
public function index($corporate_id)
{
$user = Auth::user();
$currentCorporate = $user->managedCorporates()
$currentCorporate = Auth::user()->managedCorporates()
->with(['currentPolicy', 'employees'])
->find($corporate_id);
$data = DashboardResources::make($currentCorporate);
$data = LimitResources::make($currentCorporate);
return response()->json($data);
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('client::create');
return Helper::responseJson($data);
}
/**

View File

@@ -0,0 +1,71 @@
<?php
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\TopUpLimitResources;
class TopUpController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index($corporate_id)
{
$data = Auth::user()
->managedCorporates()
->with(['currentPolicy', 'employees'])
->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)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
return view('client::show');
}
/**
* 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 Executable file → Normal file
View File

0
Modules/Client/Http/Controllers/ClientController.php Executable file → Normal file
View File

0
Modules/Client/Http/Middleware/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Http/Requests/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Providers/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Providers/ClientServiceProvider.php Executable file → Normal file
View File

0
Modules/Client/Providers/RouteServiceProvider.php Executable file → Normal file
View File

0
Modules/Client/Resources/assets/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Resources/assets/js/app.js Executable file → Normal file
View File

0
Modules/Client/Resources/assets/sass/app.scss Executable file → Normal file
View File

0
Modules/Client/Resources/lang/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Resources/views/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Resources/views/index.blade.php Executable file → Normal file
View File

View File

0
Modules/Client/Routes/.gitkeep Executable file → Normal file
View File

9
Modules/Client/Routes/api.php Executable file → Normal file
View File

@@ -6,6 +6,8 @@ use Modules\Client\Http\Controllers\Api\CorporateManageController;
use Modules\Client\Http\Controllers\Api\CorporateMemberController;
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;
/*
|--------------------------------------------------------------------------
@@ -34,6 +36,13 @@ Route::prefix('client')->group(function () {
Route::get('policy', [CorporatePolicyController::class, 'index']);
Route::get('division', [CorporateDivisionController::class, 'index']);
Route::get('members', [CorporateMemberController::class, 'index']);
Route::get('claims/status', [ClaimController::class, 'status']);
Route::get('claims', [ClaimController::class, 'index']);
Route::get('topup', [TopUpController::class, 'index']);
Route::post('topup', [TopUpController::class, 'store']);
});
Route::get('claims/{id}', [ClaimController::class, 'show']);
});
});

0
Modules/Client/Routes/web.php Executable file → Normal file
View File

0
Modules/Client/Tests/Feature/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Tests/Unit/.gitkeep Executable file → Normal file
View File

View File

@@ -0,0 +1,26 @@
<?php
namespace Modules\Client\Transformers\ClaimReport;
use Illuminate\Http\Resources\Json\JsonResource;
class MemberResources extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'memberId' => $this->member_id,
'fullName' => $this->full_name,
'division' => $this->division_name ?? '',
'submission_date' => '',
'status' => $this->active,
];
}
}

View File

@@ -0,0 +1,41 @@
c<?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;
}
}

View File

@@ -1,11 +1,10 @@
<?php
namespace Modules\Client\Transformers;
namespace Modules\Client\Transformers\Dashboard;
use App\Helpers\Helper;
use Illuminate\Http\Resources\Json\JsonResource;
class DashboardResources extends JsonResource
class LimitResources extends JsonResource
{
/**
* Transform the resource into an array.
@@ -22,17 +21,15 @@ class DashboardResources extends JsonResource
$lockPercentage = (int)$this->currentPolicy->minimal_stop_service_percentage;
return [
'policy' => [
'myLimit' => [
'balance' => $myLimitBalance,
'total' => $myLimitTotal,
'percentage' => ($myLimitBalance / $myLimitTotal) * 100,
],
'lockLimit' => [
'balance' => $lockBalance,
'percentage' => $lockPercentage
]
'myLimit' => [
'balance' => $myLimitBalance,
'total' => $myLimitTotal,
'percentage' => $myLimitTotal ? round(($myLimitBalance / $myLimitTotal) * 100, 2) : 0,
],
'lockLimit' => [
'balance' => $lockBalance,
'percentage' => $lockPercentage
]
];
}
}

View File

@@ -0,0 +1,26 @@
<?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,
'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,
];
}
}

View File

@@ -1,6 +1,6 @@
<?php
namespace Modules\Client\Transformers;
namespace Modules\Client\Transformers\Dashboard;
use Illuminate\Http\Resources\Json\JsonResource;
@@ -18,15 +18,13 @@ class MemberResources extends JsonResource
'id' => $this->id,
'memberId' => $this->member_id,
'fullName' => $this->full_name,
$this->mergeWhen($request->input('claimMember') === 'false', [
'division' => $this->division->name ?? '',
'status' => $this->active
]),
'division' => $this->division_name ?? '',
'limit' => [
'current' => $this->claims_sum_total_claim,
'current' => $this->claims_sum_total_claim ?? 0,
'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,
];
}
}

View File

@@ -0,0 +1,33 @@
<?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)
];
}
}

0
Modules/Client/composer.json Executable file → Normal file
View File

0
Modules/Client/module.json Executable file → Normal file
View File

0
Modules/Client/package.json Executable file → Normal file
View File

0
Modules/Client/webpack.mix.js Executable file → Normal file
View File

View File

View File

@@ -0,0 +1,5 @@
<?php
return [
'name' => 'HospitalPortal'
];

View File

View File

@@ -0,0 +1,21 @@
<?php
namespace Modules\HospitalPortal\Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class HospitalPortalDatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
// $this->call("OthersTableSeeder");
}
}

View File

View File

@@ -0,0 +1,128 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\User;
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;
class AuthController extends Controller
{
public function login(Request $request)
{
$request->validate([
'email' => 'required|email',
'password' => 'required'
]);
$user = User::query()
->where('email', $request->email)
->first();
if (!$user) {
return response(['message' => 'User Tidak Ditemukan'], 404);
}
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)
{
$token = $request->bearerToken();
Auth::user()->tokens()->where('id', $token)->delete();
return response(['message' => 'Berhasil Logout.']);
}
public function resetPassword(Request $request)
{
$user = Auth::user();
$request->validate([
'old_password' => 'required',
'new_password' => 'required',
'confirm_new_password' => 'required'
]);
if (!Hash::check($request['old_password'], $user->password)) {
return response(['message' => 'Password Salah'], 403);
}
if ($request["new_password"] != $request["confirm_new_password"]) {
return response([
'message' => "Password Tidak Sama"
]);
}
$user->update([
'password' => Hash::make($request->confirm_new_password),
]);
return response()->json($user);
}
public function verifyEmail(Request $request)
{
$request->validate([
'email' => 'required|email',
]);
$user = User::query()
->where('email', $request->email)
->first();
if (!$user) {
return response(['message' => 'User Tidak Ditemukan'], 404);
}
Event(new ForgetPassword($user));
// Mail::to($user->email)->send(new SendVerifyEmail($user));
return response()->json($user);
}
public function forgetPassword(Request $request)
{
$request->validate([
'new_password' => 'required',
'confirm_new_password' => 'required'
]);
$token = Crypt::decryptString($request->token);
$email = explode('|', $token)[0];
$user = User::query()
->where('email', $email)
->first();
if (!$user) {
return response(['message' => 'User Tidak Ditemukan'], 404);
}
if ($request["new_password"] != $request["confirm_new_password"]) {
return response([
'message' => "Password Tidak Sama"
], 404);
}
$user->update([
'password' => Hash::make($request->confirm_new_password),
]);
return response()->json($user);
}
}

View File

@@ -0,0 +1,193 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers\Api;
use App\Events\ClaimRequested;
use App\Helpers\Helper;
use App\Models\ClaimRequest;
use App\Models\File;
use App\Models\Member;
use App\Services\ClaimRequestService;
use App\Services\ClaimService;
use Exception;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\HospitalPortal\Transformers\ClaimRequestResource;
use Modules\HospitalPortal\Transformers\ClaimRequestShowResource;
use PDF;
class ClaimRequestController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(request $request)
{
$claimRequests = ClaimRequest::query()
->when($request->search, function ($q, $search) {
$q->where('code', 'LIKE', "%".$search."%");
})
->when($request->orderBy, function ($q, $orderBy) use ($request) {
if (in_array($orderBy, ['submission_date', 'code'])) {
$q->orderBy($orderBy, $request->order);
}
})
->when($request->status, function($q, $status) {
$q->where('status', $status);
})
->with(['member'])
->orderBy('created_at', 'DESC')
->paginate();
return Helper::responseJson($claimRequests);
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('hospitalportal::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
$request->validate([
'member_id' => 'required',
'service_code' => 'required|in:OP,IP'
]);
$member = Member::find($request->member_id);
$newClaimRequest = ClaimRequestService::storeClaimRequest(member: $member, paymentType: 'reimbursement', serviceCode: $request->service_code);
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,
]);
}
}
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!');
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
$claimRequest = ClaimRequest::findOrFail($id);
$claimRequest->load([
'histories' => function ($history) {
$history->latest();
}
]);
return Helper::responseJson(data: ClaimRequestShowResource::make($claimRequest));
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('hospitalportal::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 generateLog($claim_request_id)
{
$claimRequest = ClaimRequest::findOrFail($claim_request_id);
if ($claimRequest->status != 'approved') {
throw new Exception("Belum Teverifikasi", 1);
}
$member = Member::findOrFail($claimRequest->member_id)
->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;
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers\Api;
use App\Helpers\Helper;
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 search(Request $request)
{
$request->validate([
'no_polis' => 'required',
'birth_date' => 'required'
]);
$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();
return Helper::responseJson($member);
}
}

View File

@@ -0,0 +1,565 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers\Api;
use App\Models\Benefit;
use App\Models\CorporateBenefit;
use App\Models\Member;
use App\Models\MemberPlan;
use App\Models\Organization;
use App\Models\Provider;
use App\Models\RequestLog;
use App\Models\RequestLogBenefit;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use PDF;
use Throwable;
class ProviderOnlineController extends Controller
{
public function getHeaderKey(Request $request)
{
$request->validate([
'username' => 'required|string',
'password' => 'required|string',
'kodeprovider' => 'required|string',
]);
$organization = Organization::query()->where('code', $request->kodeprovider)->first();
if (!$organization) {
return $this->headerError('Kode provider tidak ditemukan');
}
$provider = Provider::query()->firstOrNew([
'organization_id' => $organization->id,
'username' => $request->username,
]);
if ($provider->exists) {
$isPasswordValid = Hash::check($request->password, $provider->password) || $provider->password === $request->password;
if (!$isPasswordValid) {
return $this->headerError('Username atau password tidak valid');
}
} else {
$provider->password = Hash::make($request->password);
}
$provider->code = $request->kodeprovider;
$provider->status = 'active';
$provider->header_token = Str::random(64);
$provider->token = Str::random(64);
$provider->save();
return response()->json([
'header-token' => $provider->header_token,
'userid' => $provider->id,
'usertoken' => $provider->token,
'kodeprovider' => $organization->code,
'namaprovider' => $organization->name,
'errornumber' => 0,
'messagestring' => 'Success',
]);
}
public function checkEligibilitasPeserta(Request $request)
{
$request->validate([
'nokartu' => 'required|string',
'kodeprovider' => 'required|string',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$member = Member::query()
->with(['person', 'currentCorporate', 'currentPolicy', 'memberPlans.plan'])
->where('member_id', $request->nokartu)
->first();
if (!$member) {
return $this->statusError('Peserta tidak ditemukan');
}
$benefits = $member->memberPlans
->map(function (MemberPlan $memberPlan) {
$plan = $memberPlan->plan;
if (!$plan) {
return null;
}
return [
'kodebenefit' => $plan->code,
'namabenefit' => $plan->corporate_plan_id,
'planid' => $plan->code,
];
})
->filter()
->values();
return response()->json([
'Status' => $this->okStatus(),
'Data' => [
'nokartu' => $member->member_id,
'memberid' => (string) $member->id,
'namapeserta' => $member->full_name,
'nomorbpjs' => $member->bpjs_id,
'jeniskelamin' => $member->gender_code,
'tanggallahir' => $this->isoDate($member->birth_date),
'hubungankeluarga' => $member->relation_with_principal,
'namaperusahaan' => optional($member->currentCorporate)->name,
'pesertavip' => 'N',
'namapenjamin' => optional($organization)->name,
'nomorpolis' => optional($member->currentPolicy)->code,
'tglmulaipolis' => $this->isoDate(optional($member->currentPolicy)->start),
'tglberakhirpolis' => $this->isoDate(optional($member->currentPolicy)->end),
'phone' => optional($member->person)->phone,
'email' => $member->email,
],
'Benefit' => $benefits,
]);
}
public function createPendaftaran(Request $request)
{
$request->validate([
'kodeprovider' => 'required|string',
'kodebenefit' => 'required|string',
'statusrujukan' => 'nullable|string',
'nomorrujukan' => 'nullable|string',
'keterangan' => 'nullable|string',
'nomorsep' => 'nullable|string',
'nokartu' => 'required|string',
'kelaskamar' => 'nullable|string',
'cobbpjs' => 'nullable|numeric',
'notransaksiprovider' => 'nullable|string',
'inacbgscode' => 'nullable|string',
'inacbgsamount' => 'nullable|numeric',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$member = Member::query()
->with(['person', 'currentCorporate', 'currentPolicy'])
->where('member_id', $request->nokartu)
->first();
if (!$member) {
return $this->statusError('Peserta tidak ditemukan');
}
$plan = $this->resolvePlan($member, $request->kodebenefit);
$requestLog = RequestLog::query()->create([
'organization_id' => $organization->id,
'member_id' => $member->id,
'plan_id' => optional($plan)->id,
'policy_id' => optional($member->currentPolicy)->id ?? 0,
'payment_type' => 'cashless',
'service_code' => $request->kodebenefit,
'type_of_member' => 'member',
'status' => 'approved',
'source' => 'api',
'keterangan' => $request->keterangan,
'hak_kamar_pasien' => $request->kelaskamar ?? '',
'penempatan_kamar' => $request->kelaskamar,
'total_cob' => $request->cobbpjs,
'nominal' => 0,
'import_system' => 0,
'nomor_sep' => $request->nomorsep,
'inacbgs_code' => $request->inacbgscode,
'inacbgs_amount' => $request->inacbgsamount,
'no_transaksi_provider' => $request->notransaksiprovider,
'diagnosis' => '',
'reason' => '',
'reason_final' => '',
'catatan' => '',
'nomor_rujukan' => $request->nomorrujukan,
'status_rujukan' => $request->statusrujukan,
'submission_date' => now(),
'admission_date' => now(),
]);
$limitSubBenefit = collect();
if ($plan) {
$limitSubBenefit = CorporateBenefit::query()
->with('benefit')
->where('plan_id', $plan->id)
->get()
->map(function (CorporateBenefit $corporateBenefit) {
return [
'kodesubbenefit' => optional($corporateBenefit->benefit)->code,
'namasubbenefit' => optional($corporateBenefit->benefit)->description,
'batasan' => (string) ($corporateBenefit->limit_amount ?? 0),
];
});
}
return response()->json([
'Status' => $this->okStatus(),
'Data' => [[
'noklaim' => $requestLog->code,
'namapeserta' => $member->full_name,
'tanggallahir' => $this->isoDate($member->birth_date),
'nokartu' => $member->member_id,
'nopolis' => optional($member->currentPolicy)->code,
'nobpjs' => $member->bpjs_id,
'nosep' => $requestLog->nomor_sep,
'nomorrujukan' => $requestLog->nomor_rujukan,
'planid' => optional($plan)->code,
'masapolis' => optional($member->currentPolicy)->end ? Carbon::parse($member->currentPolicy->end)->format('d/m/Y') : null,
'namaperusahaan' => optional($member->currentCorporate)->name,
'namapenjamin' => $organization->name,
'tanggalmasuk' => $this->isoDate($requestLog->admission_date),
'tanggalkeluar' => $this->isoDate($requestLog->discharge_date),
'hakkamar' => $requestLog->penempatan_kamar,
'hakicu' => null,
'nosuratjaminan' => $requestLog->code,
'namapegawai' => null,
'namabenefit' => optional($plan)->corporate_plan_id,
'kodediagnosa' => $requestLog->diagnosis,
'keterangan' => $requestLog->keterangan,
'catatanTC1' => null,
'catatanTC2' => null,
'catatanTC3' => null,
'catatanTC4' => null,
'catatanTC5' => null,
'catatanTC6' => null,
'catatanTC7' => null,
'catatanTC8' => null,
'catatanTC9' => null,
'catatanTC10' => null,
'statusrujukan' => $requestLog->status_rujukan,
'statusklaim' => 0,
'notransaksiprovider' => $requestLog->no_transaksi_provider,
'inacbgscode' => $requestLog->inacbgs_code,
'inacbgsamount' => (float) ($requestLog->inacbgs_amount ?? 0),
]],
'LimitSubBenefit' => $limitSubBenefit->values(),
]);
}
public function createPengesahan(Request $request)
{
$request->validate([
'noklaim' => 'required|string',
'kodeprovider' => 'required|string',
'tanggalkeluar' => 'nullable|date',
'kodediagnosa' => 'nullable|string',
'inacbgscode' => 'nullable|string',
'inacbgsamount' => 'nullable|numeric',
'daftarbiaya' => 'nullable|array',
'daftarbiaya.*.kodesubbenefit' => 'required_with:daftarbiaya|string',
'daftarbiaya.*.biayaaju' => 'required_with:daftarbiaya|numeric',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$requestLog = RequestLog::query()
->with(['member.person', 'member.currentCorporate', 'member.currentPolicy', 'plan'])
->where('code', $request->noklaim)
->where('organization_id', $organization->id)
->first();
if (!$requestLog) {
return $this->statusError('Nomor klaim tidak ditemukan');
}
$requestLog->update([
'status_final_log' => 'approve',
'final_log' => true,
'discharge_date' => $request->tanggalkeluar,
'diagnosis' => $request->kodediagnosa,
'inacbgs_code' => $request->inacbgscode ?? $requestLog->inacbgs_code,
'inacbgs_amount' => $request->inacbgsamount ?? $requestLog->inacbgs_amount,
]);
foreach (($request->daftarbiaya ?? []) as $biaya) {
$benefit = Benefit::query()->where('code', $biaya['kodesubbenefit'])->first();
if (!$benefit) {
continue;
}
RequestLogBenefit::query()->updateOrCreate(
[
'request_log_id' => $requestLog->id,
'benefit_id' => $benefit->id,
],
[
'amount_incurred' => $biaya['biayaaju'],
'amount_approved' => 0,
'amount_not_approved' => 0,
'excess_paid' => 0,
'keterangan' => null,
]
);
}
$requestLog->load(['requestLogBenefits.benefit']);
$biayaResponse = $requestLog->requestLogBenefits->map(function (RequestLogBenefit $requestLogBenefit) use ($requestLog) {
return [
'noklaim' => $requestLog->code,
'kodesubbenefit' => optional($requestLogBenefit->benefit)->code,
'namasubbenefit' => optional($requestLogBenefit->benefit)->description,
'kodebenefit' => optional($requestLog->plan)->code,
'namabenefit' => optional($requestLog->plan)->corporate_plan_id,
'biayaaju' => (float) ($requestLogBenefit->amount_incurred ?? 0),
'jaminanasuransi' => (float) ($requestLogBenefit->amount_approved ?? 0),
'jaminanpeserta' => (float) ($requestLogBenefit->excess_paid ?? 0),
'keterangan' => $requestLogBenefit->keterangan,
];
})->values();
return response()->json([
'Status' => $this->okStatus(),
'Data' => [[
'noklaim' => $requestLog->code,
'namapeserta' => optional($requestLog->member)->full_name,
'tanggallahir' => $this->isoDate(optional($requestLog->member)->birth_date),
'nokartu' => optional($requestLog->member)->member_id,
'nopolis' => optional(optional($requestLog->member)->currentPolicy)->code,
'nobpjs' => optional($requestLog->member)->bpjs_id,
'nosep' => $requestLog->nomor_sep,
'nomorrujukan' => $requestLog->nomor_rujukan,
'planid' => optional($requestLog->plan)->code,
'masapolis' => optional(optional($requestLog->member)->currentPolicy)->end ? Carbon::parse($requestLog->member->currentPolicy->end)->format('d/m/Y') : null,
'namaperusahaan' => optional(optional($requestLog->member)->currentCorporate)->name,
'namapenjamin' => $organization->name,
'tanggalmasuk' => $this->isoDate($requestLog->admission_date),
'tanggalkeluar' => $this->isoDate($requestLog->discharge_date),
'hakkamar' => $requestLog->penempatan_kamar,
'hakicu' => null,
'nosuratjaminan' => $requestLog->code,
'namapegawai' => null,
'namabenefit' => optional($requestLog->plan)->corporate_plan_id,
'kodediagnosa' => $requestLog->diagnosis,
'keterangan' => $requestLog->keterangan,
'catatanTC1' => null,
'catatanTC2' => null,
'catatanTC3' => null,
'catatanTC4' => null,
'catatanTC5' => null,
'catatanTC6' => null,
'catatanTC7' => null,
'catatanTC8' => null,
'catatanTC9' => null,
'catatanTC10' => null,
'statusrujukan' => $requestLog->status_rujukan,
'statusklaim' => 0,
'notransaksiprovider' => $requestLog->no_transaksi_provider,
'inacbgscode' => $requestLog->inacbgs_code,
'inacbgsamount' => (float) ($requestLog->inacbgs_amount ?? 0),
]],
'Biaya' => $biayaResponse,
]);
}
public function getRincianBiayaKlaim(Request $request)
{
$request->validate([
'noklaim' => 'required|string',
'kodeprovider' => 'required|string',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$requestLog = RequestLog::query()
->with(['plan', 'requestLogBenefits.benefit'])
->where('code', $request->noklaim)
->where('organization_id', $organization->id)
->first();
if (!$requestLog) {
return $this->statusError('Nomor klaim tidak ditemukan');
}
$biaya = $requestLog->requestLogBenefits->map(function (RequestLogBenefit $requestLogBenefit) use ($requestLog) {
return [
'noklaim' => $requestLog->code,
'kodesubbenefit' => optional($requestLogBenefit->benefit)->code,
'namasubbenefit' => optional($requestLogBenefit->benefit)->description,
'kodebenefit' => optional($requestLog->plan)->code,
'namabenefit' => optional($requestLog->plan)->corporate_plan_id,
'biayaaju' => (float) ($requestLogBenefit->amount_incurred ?? 0),
'jaminanasuransi' => (float) ($requestLogBenefit->amount_approved ?? 0),
'jaminanpeserta' => (float) ($requestLogBenefit->excess_paid ?? 0),
'keterangan' => $requestLogBenefit->keterangan,
];
})->values();
return response()->json([
'Status' => $this->okStatus(),
'Data' => [
'noklaim' => $requestLog->code,
'kodeprovider' => $organization->code,
'nosep' => $requestLog->nomor_sep,
'keterangan' => $requestLog->keterangan,
'statusklaim' => $requestLog->status,
],
'Biaya' => $biaya,
]);
}
public function downloadStrukPendaftaran(Request $request)
{
$request->validate([
'noklaim' => 'required|string',
'kodeprovider' => 'required|string',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$requestLog = RequestLog::query()->where('code', $request->noklaim)->where('organization_id', $organization->id)->first();
if (!$requestLog) {
return $this->statusError('Nomor klaim tidak ditemukan');
}
$member = Member::findOrFail($requestLog->member_id)
->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']);
$dateOfAdmission = $requestLog->admission_date ? Carbon::parse($requestLog->admission_date) : now();
try {
$pdf = PDF::loadView('pdf.guaranted_leter', compact('member', 'dateOfAdmission'));
return $pdf->download('Struk-Pendaftaran-' . $requestLog->code . '.pdf');
} catch (Throwable $e) {
return $this->statusError('Gagal generate PDF struk pendaftaran: ' . $e->getMessage(), 500);
}
}
public function downloadStrukPengesahan(Request $request)
{
$request->validate([
'noklaim' => 'required|string',
'kodeprovider' => 'required|string',
'p_user_no' => 'required',
'p_token' => 'required|string',
]);
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
if ($authError) {
return $authError;
}
$requestLog = RequestLog::query()->where('code', $request->noklaim)->where('organization_id', $organization->id)->first();
if (!$requestLog) {
return $this->statusError('Nomor klaim tidak ditemukan');
}
$member = Member::findOrFail($requestLog->member_id)
->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']);
$dateOfAdmission = $requestLog->discharge_date ? Carbon::parse($requestLog->discharge_date) : now();
try {
$pdf = PDF::loadView('pdf.guaranted_leter', compact('member', 'dateOfAdmission'));
return $pdf->download('Struk-Pengesahan-' . $requestLog->code . '.pdf');
} catch (Throwable $e) {
return $this->statusError('Gagal generate PDF struk pengesahan: ' . $e->getMessage(), 500);
}
}
private function resolveProvider(string $kodeProvider, $userId, string $token): array
{
$organization = Organization::query()->where('code', $kodeProvider)->first();
if (!$organization) {
return [null, null, $this->statusError('Kode provider tidak ditemukan')];
}
$provider = Provider::query()
->where('id', $userId)
->where('organization_id', $organization->id)
->where('code', $kodeProvider)
->where('status', 'active')
->first();
if (!$provider) {
return [null, null, $this->statusError('User provider tidak ditemukan')];
}
if ((string) $provider->token !== (string) $token) {
return [null, null, $this->statusError('Token tidak valid')];
}
return [$provider, $organization, null];
}
private function resolvePlan(Member $member, string $serviceCode)
{
$memberPlan = $member->memberPlans()->with('plan')
->where('status', 'active')
->orderByDesc('id')
->get()
->first(function (MemberPlan $item) use ($serviceCode) {
return optional($item->plan)->service_code === $serviceCode;
});
if ($memberPlan && $memberPlan->plan) {
return $memberPlan->plan;
}
return optional($member->memberPlans()->with('plan')->orderByDesc('id')->first())->plan;
}
private function okStatus(): array
{
return [
'errornumber' => 0,
'messagestring' => 'Success',
];
}
private function statusError(string $message, int $statusCode = 400)
{
return response()->json([
'Status' => [
'errornumber' => 1,
'messagestring' => $message,
],
'Data' => null,
], $statusCode);
}
private function headerError(string $message, int $statusCode = 400)
{
return response()->json([
'header-token' => null,
'userid' => 0,
'usertoken' => null,
'kodeprovider' => null,
'namaprovider' => null,
'errornumber' => 1,
'messagestring' => $message,
], $statusCode);
}
private function isoDate($date): ?string
{
if (empty($date)) {
return null;
}
return Carbon::parse($date)->toISOString();
}
}

View File

@@ -0,0 +1,83 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers;
use App\Helpers\Helper;
use App\Models\Claim;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class ClaimController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index()
{
$claims = Claim::where('deleted_at', 'ASD')->paginate(5);
return Helper::responseJson($claims);
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('hospitalportal::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('hospitalportal::show');
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('hospitalportal::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)
{
//
}
}

View File

@@ -0,0 +1,79 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class HospitalPortalController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index()
{
return view('hospitalportal::index');
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('hospitalportal::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('hospitalportal::show');
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('hospitalportal::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)
{
//
}
}

View File

@@ -0,0 +1,112 @@
<?php
namespace Modules\HospitalPortal\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Database\Eloquent\Factory;
class HospitalPortalServiceProvider extends ServiceProvider
{
/**
* @var string $moduleName
*/
protected $moduleName = 'HospitalPortal';
/**
* @var string $moduleNameLower
*/
protected $moduleNameLower = 'hospitalportal';
/**
* Boot the application events.
*
* @return void
*/
public function boot()
{
$this->registerTranslations();
$this->registerConfig();
$this->registerViews();
$this->loadMigrationsFrom(module_path($this->moduleName, 'Database/Migrations'));
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app->register(RouteServiceProvider::class);
}
/**
* Register config.
*
* @return void
*/
protected function registerConfig()
{
$this->publishes([
module_path($this->moduleName, 'Config/config.php') => config_path($this->moduleNameLower . '.php'),
], 'config');
$this->mergeConfigFrom(
module_path($this->moduleName, 'Config/config.php'), $this->moduleNameLower
);
}
/**
* Register views.
*
* @return void
*/
public function registerViews()
{
$viewPath = resource_path('views/modules/' . $this->moduleNameLower);
$sourcePath = module_path($this->moduleName, 'Resources/views');
$this->publishes([
$sourcePath => $viewPath
], ['views', $this->moduleNameLower . '-module-views']);
$this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower);
}
/**
* Register translations.
*
* @return void
*/
public function registerTranslations()
{
$langPath = resource_path('lang/modules/' . $this->moduleNameLower);
if (is_dir($langPath)) {
$this->loadTranslationsFrom($langPath, $this->moduleNameLower);
} else {
$this->loadTranslationsFrom(module_path($this->moduleName, 'Resources/lang'), $this->moduleNameLower);
}
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return [];
}
private function getPublishableViewPaths(): array
{
$paths = [];
foreach (\Config::get('view.paths') as $path) {
if (is_dir($path . '/modules/' . $this->moduleNameLower)) {
$paths[] = $path . '/modules/' . $this->moduleNameLower;
}
}
return $paths;
}
}

View File

@@ -0,0 +1,69 @@
<?php
namespace Modules\HospitalPortal\Providers;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
class RouteServiceProvider extends ServiceProvider
{
/**
* The module namespace to assume when generating URLs to actions.
*
* @var string
*/
protected $moduleNamespace = 'Modules\HospitalPortal\Http\Controllers';
/**
* Called before routes are registered.
*
* Register any model bindings or pattern based filters.
*
* @return void
*/
public function boot()
{
parent::boot();
}
/**
* Define the routes for the application.
*
* @return void
*/
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
}
/**
* Define the "web" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @return void
*/
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace($this->moduleNamespace)
->group(module_path('HospitalPortal', '/Routes/web.php'));
}
/**
* Define the "api" routes for the application.
*
* These routes are typically stateless.
*
* @return void
*/
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->moduleNamespace)
->group(module_path('HospitalPortal', '/Routes/api.php'));
}
}

View File

@@ -0,0 +1,9 @@
@extends('hospitalportal::layouts.master')
@section('content')
<h1>Hello World</h1>
<p>
This view is loaded from module: {!! config('hospitalportal.name') !!}
</p>
@endsection

View File

@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Module HospitalPortal</title>
{{-- Laravel Mix - CSS File --}}
{{-- <link rel="stylesheet" href="{{ mix('css/hospitalportal.css') }}"> --}}
</head>
<body>
@yield('content')
{{-- Laravel Mix - JS File --}}
{{-- <script src="{{ mix('js/hospitalportal.js') }}"></script> --}}
</body>
</html>

View File

View File

@@ -0,0 +1,55 @@
<?php
use Illuminate\Http\Request;
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\Api\ProviderOnlineController;
use Modules\HospitalPortal\Http\Controllers\ClaimController;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
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::put('reset-password', [AuthController::class, 'resetPassword'])->name('resetPassword');
Route::get('claims', [ClaimController::class, 'index']);
Route::post('search-member', [MemberController::class, 'search']);
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::prefix('v1/bridging-service/ProviderOnline')->group(function () {
Route::post('HeaderKey', [ProviderOnlineController::class, 'getHeaderKey']);
Route::post('EligibilitasPeserta', [ProviderOnlineController::class, 'checkEligibilitasPeserta']);
Route::post('Pendaftaran', [ProviderOnlineController::class, 'createPendaftaran']);
Route::post('Pengesahan', [ProviderOnlineController::class, 'createPengesahan']);
Route::post('RincianBiayaKlaim', [ProviderOnlineController::class, 'getRincianBiayaKlaim']);
Route::post('StrukPendaftaran', [ProviderOnlineController::class, 'downloadStrukPendaftaran']);
Route::post('StrukPengesahan', [ProviderOnlineController::class, 'downloadStrukPengesahan']);
});

View File

@@ -0,0 +1,16 @@
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::prefix('hospitalportal')->group(function() {
Route::get('/', 'HospitalPortalController@index');
});

View File

@@ -0,0 +1,31 @@
<?php
namespace Modules\HospitalPortal\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
class ClaimRequestResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
$data = parent::toArray($request);
$historiesGroupByDate = $this->histories->mapToGroups(function($history) {
return [$history->created_at->format('Y-m-d') => $history];
});
$data['histories_by_date'] = [];
foreach ($historiesGroupByDate as $date => $histories) {
$data['histories_by_date'][] = [
'date' => $date,
'histories' => $histories
];
}
return $data; //parent::toArray($request);
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace Modules\HospitalPortal\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
class ClaimRequestShowResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
$data = parent::toArray($request);
$historiesGroupByDate = $this->histories->mapToGroups(function($history) {
return [$history->created_at->format('Y-m-d') => $history];
});
$data['histories_by_date'] = [];
foreach ($historiesGroupByDate as $date => $histories) {
$data['histories_by_date'][] = [
'date' => $date,
'histories' => $histories
];
}
return $data;
}
}

View File

@@ -0,0 +1,23 @@
{
"name": "nwidart/hospitalportal",
"description": "",
"authors": [
{
"name": "Nicolas Widart",
"email": "n.widart@gmail.com"
}
],
"extra": {
"laravel": {
"providers": [],
"aliases": {
}
}
},
"autoload": {
"psr-4": {
"Modules\\HospitalPortal\\": ""
}
}
}

View File

@@ -0,0 +1,13 @@
{
"name": "HospitalPortal",
"alias": "hospitalportal",
"description": "",
"keywords": [],
"priority": 0,
"providers": [
"Modules\\HospitalPortal\\Providers\\HospitalPortalServiceProvider"
],
"aliases": {},
"files": [],
"requires": []
}

View File

@@ -0,0 +1,21 @@
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "mix",
"watch": "mix watch",
"watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "mix watch --hot",
"prod": "npm run production",
"production": "mix --production"
},
"devDependencies": {
"axios": "^0.21.4",
"dotenv": "^10.0.0",
"dotenv-expand": "^5.1.0",
"laravel-mix": "^6.0.31",
"laravel-mix-merge-manifest": "^2.0.0",
"lodash": "^4.17.21",
"postcss": "^8.3.7"
}
}

View File

@@ -0,0 +1,14 @@
const dotenvExpand = require('dotenv-expand');
dotenvExpand(require('dotenv').config({ path: '../../.env'/*, debug: true*/}));
const mix = require('laravel-mix');
require('laravel-mix-merge-manifest');
mix.setPublicPath('../../public').mergeManifest();
mix.js(__dirname + '/Resources/assets/js/app.js', 'js/hospitalportal.js')
.sass( __dirname + '/Resources/assets/sass/app.scss', 'css/hospitalportal.css');
if (mix.inProduction()) {
mix.version();
}

0
Modules/Internal/Config/.gitkeep Executable file → Normal file
View File

0
Modules/Internal/Config/config.php Executable file → Normal file
View File

0
Modules/Internal/Console/.gitkeep Executable file → Normal file
View File

0
Modules/Internal/Database/Migrations/.gitkeep Executable file → Normal file
View File

0
Modules/Internal/Database/Seeders/.gitkeep Executable file → Normal file
View File

View File

0
Modules/Internal/Database/factories/.gitkeep Executable file → Normal file
View File

0
Modules/Internal/Entities/.gitkeep Executable file → Normal file
View File

0
Modules/Internal/Http/Controllers/.gitkeep Executable file → Normal file
View File

View File

@@ -0,0 +1,89 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\OLDLMS\Appointment;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Internal\Transformers\AppointmentResource;
class AppointmentController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index()
{
$appointments = Appointment::query()
->with('doctor.user', 'doctor.speciality', 'appointmentDetail', 'healthCare', 'user', 'user.detail')
->latest()
->paginate(15);
return response()->json(Helper::paginateResources(AppointmentResource::collection($appointments)));
}
/**
* 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)
{
//
}
}

View File

View File

Some files were not shown because too many files have changed in this diff Show More