From 23ce443b52ae322ca2f809d480486623bfcbc388 Mon Sep 17 00:00:00 2001 From: Tb Fajri Date: Wed, 27 Sep 2023 12:04:59 +0700 Subject: [PATCH] update input transaksi --- .../Http/Controllers/Api/MemberController.php | 93 ++++++++++++++++++ Modules/Client/Routes/api.php | 2 + .../Http/Controllers/Api/ClaimController.php | 16 +-- .../src/sections/dashboard/CardPolicy.tsx | 10 +- .../dashboard/DialogClaimSubmitMember.tsx | 28 +++++- frontend/dashboard/src/pages/Claims/List.tsx | 2 +- public/files/Benefit Usage Report.xlsx | 0 .../CorporatePlan&BenefitImportData.xlsx | Bin 6831 -> 5449 bytes 8 files changed, 137 insertions(+), 14 deletions(-) create mode 100644 Modules/Client/Http/Controllers/Api/MemberController.php create mode 100644 public/files/Benefit Usage Report.xlsx diff --git a/Modules/Client/Http/Controllers/Api/MemberController.php b/Modules/Client/Http/Controllers/Api/MemberController.php new file mode 100644 index 00000000..1c6b6fa0 --- /dev/null +++ b/Modules/Client/Http/Controllers/Api/MemberController.php @@ -0,0 +1,93 @@ +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()); + } +} diff --git a/Modules/Client/Routes/api.php b/Modules/Client/Routes/api.php index 856d2637..9b29e2b8 100644 --- a/Modules/Client/Routes/api.php +++ b/Modules/Client/Routes/api.php @@ -4,6 +4,7 @@ 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\MemberController; use Modules\Client\Http\Controllers\Api\CorporatePolicyController; use Modules\Client\Http\Controllers\Api\UserController; use Modules\Client\Http\Controllers\Api\ClaimController; @@ -40,6 +41,7 @@ Route::prefix('client')->group(function () { 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']); diff --git a/Modules/Internal/Http/Controllers/Api/ClaimController.php b/Modules/Internal/Http/Controllers/Api/ClaimController.php index c339e819..3a9ceaac 100644 --- a/Modules/Internal/Http/Controllers/Api/ClaimController.php +++ b/Modules/Internal/Http/Controllers/Api/ClaimController.php @@ -300,7 +300,7 @@ class ClaimController extends Controller // Membuat penulis entitas Spout $writer = WriterEntityFactory::createXLSXWriter(); // Membuka penulis untuk menulis ke file - $writer->openToFile(public_path('files/CorporatePlan&BenefitImportData.xlsx')); + $writer->openToFile(public_path('files/Benefit Usage Report.xlsx')); // Sheet 1 $writer->getCurrentSheet()->setName('Worksheet'); @@ -320,15 +320,17 @@ class ClaimController extends Controller 'plan', 'benefit', 'claimRequest', - 'claimRequest.service' + 'claimRequest.service', + 'encounters', ]) // ->latest() ->get()->toArray(); foreach ($claims as $index => $row){ + dd($row); $rowData = [ '', // Count of Usage $row['code'], // Claim Number - '', // Insurar Code + $row['member']? $row['member']['payor_id'] : '-', // Insurar Code $row['member']['current_policy']? $row['member']['current_policy']['code'] : '', // Policy no $row['member']['current_corporate']? $row['member']['current_corporate']['name'] : '', // Corporate Name $row['member']['current_plan']? $row['member']['current_plan']['code'] : '', // Plan Code @@ -339,7 +341,7 @@ class ClaimController extends Controller $row['member']['current_corporate']? $row['member']['current_corporate']['code'] : '', // Institution Code '', // Invoice Line Number $row['status'], // Claim Status - '', // Admission Date + $row['claim_request']? $row['claim_request']['submission_date'] : '-', // Admission Date '', // Discharge Date '', // Date Of Service '', // Place Of Service @@ -354,7 +356,7 @@ class ClaimController extends Controller $row['claim_request'] ? $row['claim_request']['service']['description'] : '', // ServiceDescription '', // UnitPrice '', // Quantity - '', // Tarif + $row['member']['current_policy']['latest_limit_journal'] ? abs($row['member']['current_policy']['latest_limit_journal']['total_credit']): '', // Tarif '', // Claimable amount '', // Paid by customer '', // HD Disc @@ -369,7 +371,7 @@ class ClaimController extends Controller '', // Claimable Status $row['claim_request'] ? $row['claim_request']['service']['description'] : '', // ServiceDescription, // Benefit Code ]; - + // dd($rowData); $row = WriterEntityFactory::createRowFromArray($rowData); $writer->addRow($row); } @@ -444,7 +446,7 @@ class ClaimController extends Controller return Helper::responseJson([ 'file_name' => "Data Claim Report " . date('Y-m-d h:i:s'), - "file_url" => url('files/CorporatePlan&BenefitImportData.xlsx') + "file_url" => url('files/Benefit Usage Report.xlsx') ]); } } diff --git a/frontend/client-portal/src/sections/dashboard/CardPolicy.tsx b/frontend/client-portal/src/sections/dashboard/CardPolicy.tsx index 41ba3808..53c9bad1 100644 --- a/frontend/client-portal/src/sections/dashboard/CardPolicy.tsx +++ b/frontend/client-portal/src/sections/dashboard/CardPolicy.tsx @@ -61,6 +61,10 @@ type CardPolicyProps = { }; maxTopUp: number; }; + members: { + memberId: string; + memberFullName: string; + } }; }; @@ -95,7 +99,7 @@ export default function CardPolicy(props: CardPolicyProps) { const [dialogTitle, setDialogTitle] = useState(''); const [isDialog, setIsDialog] = useState(''); - const { limit, topUpLimit } = props.data || {}; + const { limit, topUpLimit, members } = props.data || {}; if (!limit || !topUpLimit) { return null; } @@ -185,14 +189,14 @@ export default function CardPolicy(props: CardPolicyProps) { - {/* {isDialog === 'submitClaim' && ( + {isDialog === 'submitClaim' && ( - )} */} + )} {isDialog === 'topUpLimit' && ( ) => { - event.preventDefault(); - - await new Promise((resolve) => setTimeout(resolve, 500)); + // await new Promise((resolve) => setTimeout(resolve, 500)); + // setLoadingBenefit(true) + + // axios.post('/search-member', { + // search: searchText, + // }) + // .then((response) => { + // setOpenDialogBenefit(true) + // setCurrentMember(response.data.data) + // setNameMember(response.data.data.name); + // }) + // .catch(({response}) => { + // enqueueSnackbar(response.data.errors ? response.data.errors[0] : (response.data ? response.data.meta.message : 'Opps, Something went Wrong!'), {variant : "error"}) + // }) + // .then(() => { + // setLoadingBenefit(false) + // }); }; /* -------------------------------------------------------------------------- */ diff --git a/frontend/dashboard/src/pages/Claims/List.tsx b/frontend/dashboard/src/pages/Claims/List.tsx index 9e32e720..2da719bf 100644 --- a/frontend/dashboard/src/pages/Claims/List.tsx +++ b/frontend/dashboard/src/pages/Claims/List.tsx @@ -173,8 +173,8 @@ export default function List() { {open ? : } - {row.code} {row.claim_request?.code} + {row.code} {row.member?.full_name} {row.plan?.code} {row.claim_request?.service?.name} diff --git a/public/files/Benefit Usage Report.xlsx b/public/files/Benefit Usage Report.xlsx new file mode 100644 index 00000000..e69de29b diff --git a/public/files/CorporatePlan&BenefitImportData.xlsx b/public/files/CorporatePlan&BenefitImportData.xlsx index 4c003fd1ee0ae8482972e57961a325d336f7374a..523b1f62f3e853d14fb0ceaf68c1f137537bde57 100644 GIT binary patch delta 4047 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 QU(!fNcau(>(+u*Jxk{9> zd0ep=nuKFpcpxj?_PzHIq+Fv?%oQYLl$y~&Px4p8VJ>}*jjJXGB7=>8SsS1UauI#w z8trf70U);uFv0#1J=`8}-pU<5XQ^{p)ed037Ppt>bOrikFU!%2@4%$6`~xOTJJtsu zL6c__HCdZm12N*`FQ-nQ#Z}?vFB+YfOcQuNN~31!!k`07#@CSiQpv-C=|W*CU_M4u zZOOx!wN7m}8!2GdpDtiEHb27pbODdk{EoU0 zuS1k2_iTERu}|$}vIT53XCoQyW=qQSDr+{(b)F1X5QTY28zd6As6W1{&NEkdwI|S9 zLj%*3T<78LsY!?Fjp@e<0BmLRlDZx;qmWPNW-|98KbetJF@1Sj$;dy0n{GR$SVql1 zLy&HZts?NYa2`#?L-`7_W($if4f(OAbIXU4Z%;O-YY4Q<% z*~d``vo(`}&?+;GFV%NczY4pf`tkk+X7P`wos?3hK@8Q5hQpzfrajp)gj~FFtc!Iz z{Njg=cF3OO4rJ+!w~?BN6v!JSK#+Y_N0tl1dV~mtk1+s(D`_WNR z7!b&mgo6Y|op5Zat8z#&!=8?apxNn+CdM0tWanJ0zl~W>0AD=I)YX%tV0GIb_Bt0e zTj}&NLhG8}3FPB%&KF2Iu-2l3TpA=BA$Mn7n7|7%``Ce%*@cQpC?Jmb_6IWS?bjRJ zlV7+0Q{i4Pjz%xt6}GbpghY%$UHpXYT?3&1zz;wFa+UwBx?Gmga4xdk5483Wur`GZ zq2?PZYr2v<^*y)Tr`fhI{i!O2ir(uSC@f$(nWU}fPPV9dwDUTD5f?8r(cqfp{(@rW zSn!NXT7U~q7Lw=GS|V3XMDCHcDep)GsZ71h&-ai=<#HWesZW2#7!CpA)2T}hEdo4e z>_pE7b5E0Ll(Ekd6TPo$-FiEi-!^}zbqw->Ocoh~j#D_cUNMxjkkiH^Q;(F_Tg=8D zdw63J@Nxq0#L(%yKlfj{xI2{`1Z2qcdE~7chaK+$$&~*r?hnA1JK=X*Z@7EO|J3#g zEX0MlzvVy0`;xJQX<|;mU9giVJ&T{0G#^>mS}muaULU=WdPU;Q)iQ?~xkVZ;?b@}A z3=2LDsLs>CdTtshrPf*+VvB#Q?T{~kUv5@n=}?p_!B%Chfh~ee^ujh$F6t6S6FmOQ zf*px9|D=e$KlwoNF~mpemot)jD3eNB0@Nf>}ursiYiUTQfd$1{F}H_=u_5v-nFLhFWO@+?Z5fn;@!agU(?A) z1=D1QV?cu@b9|3990No?N;|z5UmP3qIX%>MP*02Jj~MhzjE5?2g-_00gf6H{x%x6T zsVQ}oWSv*~)GNEvcNk#c@Lq*YX>3~XBm+9e{uuwjFoBMA3gZqi#1SbG8sR_scL{`K z{Pe%S{I|n&*JdHUgZV#K!5bjKgzUj@_k=fO5VV+tEHYY#-yVNAU;Zt+{`P=kCU9cX z0BTBT=;9cEHx2(!ru|o?{p}!)`~PdU|BdqBqks+q(flXG-B|F3nCwp!V^<4%w>$lp z@Q57pXW7rmA?PgR35>)P34Y`Re={eJoC1A?JfWDJ{*T$nof!{B!WQ|zH;V^`uwYSw dK>rTM^*gAV5*GIF8S(G#kh|&0e``(9zW_@s^Zft-