diff --git a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php
index aace3412..da025cfc 100644
--- a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php
+++ b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php
@@ -4,6 +4,7 @@ namespace Modules\HospitalPortal\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\ClaimRequest;
+use App\Models\File;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
@@ -17,7 +18,6 @@ class ClaimRequestController extends Controller
public function index(request $request)
{
$claimRequests = ClaimRequest::query()
- ->with(['member'])
->when($request->search, function ($q, $search) {
$q->where('code', 'LIKE', "%".$search."%");
})
@@ -29,6 +29,7 @@ class ClaimRequestController extends Controller
->when($request->status, function($q, $status) {
$q->where('status', $status);
})
+ ->with(['member'])
->paginate();
return Helper::responseJson($claimRequests);
@@ -64,11 +65,19 @@ class ClaimRequestController extends Controller
if ($request->hasFile('result_files')) {
foreach ($request->result_files as $file) {
- // $newClaimRequest->files()->create()
+ $pathFile = File::storeFile('claim', $newClaimRequest->id, $file);
+ $newClaimRequest->files()->updateOrCreate([
+ 'type' => 'result',
+ 'name' => File::getFileName('claim', $newClaimRequest->id, $file),
+ 'original_name' => $file->getClientOriginalName(),
+ 'extension' => $file->getClientOriginalExtension(),
+ 'path' => $pathFile,
+ 'created_by' => auth()->user()->id,
+ 'updated_by' => auth()->user()->id,
+ ]);
}
}
- return ($request->files_result[0]->getClientOriginalName());
- die('asdasd');
+ return ($request->result_files[0]->getClientOriginalName());
return Helper::responseJson(data: $request->toArray(), message: 'Claim Request berhasil ajukan!');
}
diff --git a/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php b/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php
index 0a0933bc..34cb4877 100644
--- a/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php
+++ b/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php
@@ -7,6 +7,7 @@ use App\Models\ClaimRequest;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
+use Modules\Internal\Transformers\ClaimRequestResource;
class ClaimRequestController extends Controller
{
@@ -14,13 +15,27 @@ class ClaimRequestController extends Controller
* Display a listing of the resource.
* @return Renderable
*/
- public function index()
+ public function index(Request $request)
{
$claimRequests = ClaimRequest::query()
- ->with(['member'])
+ ->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(empty($request->orderBy), function ($q) {
+ $q->orderBy('created_at', 'desc');
+ })
+ ->when($request->status, function($q, $status) {
+ $q->where('status', $status);
+ })
+ ->with(['member', 'files'])
->paginate();
- return $claimRequests;
+ return Helper::paginateResources(ClaimRequestResource::collection($claimRequests));
}
/**
diff --git a/Modules/Internal/Transformers/ClaimRequestResource.php b/Modules/Internal/Transformers/ClaimRequestResource.php
new file mode 100644
index 00000000..79c4f8b8
--- /dev/null
+++ b/Modules/Internal/Transformers/ClaimRequestResource.php
@@ -0,0 +1,33 @@
+files->mapToGroups(function($file) {
+ return [$file->type => $file];
+ });
+
+ $data = [
+ 'id' => $this->id,
+ 'code' => $this->code,
+ 'submission_date' => $this->submission_date,
+ 'member' => $this->member,
+ 'status' => $this->status ?? 'unknown',
+ 'service_type' => $this->service_type,
+ 'files_by_type' => $filesGroupByType
+ ];
+
+ return $data;
+ }
+}
diff --git a/app/Models/File.php b/app/Models/File.php
index cda40085..c905d652 100755
--- a/app/Models/File.php
+++ b/app/Models/File.php
@@ -16,10 +16,20 @@ class File extends Model
'fileable_id',
'type',
'name',
+ 'original_name',
'extension',
'path',
];
+ protected $hidden = [
+ 'created_at',
+ 'updated_at',
+ 'deleted_at',
+ 'created_by',
+ 'updated_by',
+ 'deleted_by',
+ ];
+
public $appends = [
'url'
];
@@ -28,7 +38,7 @@ class File extends Model
'import-temp' => 'import-temp/',
'avatar' => 'user-avatar/',
'dataDiri' => 'data-diri/',
- ''
+ 'claim' => 'claim/'
];
public function fileable()
@@ -46,6 +56,11 @@ class File extends Model
return $type . '-' . $id . '-' . Str::random(10);
}
+ public function getNameAttribute($value)
+ {
+ return !empty($this->original_name) ? $this->original_name : ($value . '.' . $this->extension);
+ }
+
public function getUrlAttribute()
{
return url(Storage::url($this->path));
diff --git a/database/migrations/2023_02_14_102144_create_claim_requests_table.php b/database/migrations/2023_02_14_102144_create_claim_requests_table.php
index f9424a5c..8da85e8d 100644
--- a/database/migrations/2023_02_14_102144_create_claim_requests_table.php
+++ b/database/migrations/2023_02_14_102144_create_claim_requests_table.php
@@ -19,6 +19,7 @@ return new class extends Migration
$table->dateTime('submission_date')->nullable();
$table->foreignId('member_id');
$table->string('status')->nullable();
+ $table->foreignId('claim_id')->nullable()->comment('After Claim is Created');
$table->timestamps();
$table->softDeletes();
diff --git a/database/migrations/2023_02_15_115628_add_original_name_to_files_table.php b/database/migrations/2023_02_15_115628_add_original_name_to_files_table.php
new file mode 100644
index 00000000..5124072b
--- /dev/null
+++ b/database/migrations/2023_02_15_115628_add_original_name_to_files_table.php
@@ -0,0 +1,32 @@
+string('original_name')->nullable()->after('name');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('files', function (Blueprint $table) {
+ $table->dropColumn('original_name');
+ });
+ }
+};
diff --git a/frontend/dashboard/src/pages/ClaimRequests/List.tsx b/frontend/dashboard/src/pages/ClaimRequests/List.tsx
index 981e5223..57c05191 100755
--- a/frontend/dashboard/src/pages/ClaimRequests/List.tsx
+++ b/frontend/dashboard/src/pages/ClaimRequests/List.tsx
@@ -34,6 +34,8 @@ import { fCurrency } from '../../utils/formatNumber';
import EditRoundedIcon from '@mui/icons-material/EditRounded';
import { LoadingButton } from '@mui/lab';
import { enqueueSnackbar } from 'notistack';
+import { Divider } from '@mui/material';
+import Iconify from '@/components/Iconify';
// import LoadingButton from '@/theme/overrides/LoadingButton';
export default function List() {
@@ -179,6 +181,7 @@ export default function List() {
{row.code}
{row.member?.full_name}
{row.submission_date}
+ {row.service_type}
{ row.status == 'requested' && ( {handleApprove(row)}}>Approve )}
@@ -187,9 +190,25 @@ export default function List() {
-
- Description : {row.description}
-
+ }
+ spacing={1}
+ sx={{ marginY: 2 }}
+ >
+
+ Berkas Hasil Penunjang
+ {row.files_by_type?.result &&
+ row.files_by_type?.result.map((file, index) => (
+
+ - {file.name}
+
+ ))}
+
+ { !row.files_by_type?.result && (
+ Tidak ada berkas
+ )}
+
+
@@ -217,6 +236,9 @@ export default function List() {
Submission Date
+
+ Jenis Layanan
+
Status
diff --git a/frontend/hospital-portal/pnpm-lock.yaml b/frontend/hospital-portal/pnpm-lock.yaml
index 96f3e94a..8235b7ae 100755
--- a/frontend/hospital-portal/pnpm-lock.yaml
+++ b/frontend/hospital-portal/pnpm-lock.yaml
@@ -48,7 +48,6 @@ specifiers:
framer-motion: ^6.5.1
highlight.js: ^11.7.0
history: ^5.3.0
- json2formdata: ^1.0.4
jsx-runtime: ^1.2.0
lodash: ^4.17.21
notistack: 3.0.0-alpha.11
@@ -100,7 +99,6 @@ dependencies:
framer-motion: 6.5.1_sfoxds7t5ydpegc3knd667wn6m
highlight.js: 11.7.0
history: 5.3.0
- json2formdata: 1.0.4
jsx-runtime: 1.2.0
lodash: 4.17.21
notistack: 3.0.0-alpha.11_pwge5r66yg44rq5pj4ruhckhdm
@@ -4653,10 +4651,6 @@ packages:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
dev: true
- /json2formdata/1.0.4:
- resolution: {integrity: sha512-caobS2W+raW3Fg3mt2ANGTPryLOUANxukjdfwkWKHY2pam9G1Ns3tifnaVzctMaqKevxhf7NIycFnTEXWYggdg==}
- dev: false
-
/json5/1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
diff --git a/frontend/hospital-portal/src/pages/Dashboard.tsx b/frontend/hospital-portal/src/pages/Dashboard.tsx
index a4468195..a214a4f2 100755
--- a/frontend/hospital-portal/src/pages/Dashboard.tsx
+++ b/frontend/hospital-portal/src/pages/Dashboard.tsx
@@ -68,7 +68,7 @@ export default function Dashboard() {
-
+ {console.log('submit success')}}>
diff --git a/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx b/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx
index a0cc29fc..7a7f7211 100644
--- a/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx
+++ b/frontend/hospital-portal/src/sections/dashboard/CardSearchMember.tsx
@@ -45,7 +45,7 @@ const ItemNotificationStyle = styled(Card)(({ theme }) => ({
// ----------------------------------------------------------------------
-export default function CardSearchMember() {
+export default function CardSearchMember(handleSubmitSuccess) {
const {enqueueSnackbar} = useSnackbar();
const [noPolis, setNoPolis] = useState('AW001-01');
@@ -145,7 +145,7 @@ export default function CardSearchMember() {
title={{name: "Member"}}
openDialog={openDialogBenefit}
setOpenDialog={setOpenDialogBenefit}
- content={DialogMember(currentMember, () => {setOpenDialogBenefit(false)})}
+ content={DialogMember(currentMember, () => {setOpenDialogBenefit(false); handleSubmitSuccess()})}
maxWidth="md"
/>
diff --git a/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx b/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx
index beafa469..5d01b2d3 100644
--- a/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx
+++ b/frontend/hospital-portal/src/sections/dashboard/DialogMember.tsx
@@ -11,7 +11,7 @@ import { Avatar } from '@mui/material';
import Iconify from '@/components/Iconify';
import FormRequestClaim from './FormRequestClaim';
-export default function DialogMember(member, closeDialog) {
+export default function DialogMember(member, handleSubmitSuccess) {
const [currentTab, setCurrentTab] = useState('request')
// ----------------------------------------------------------------------
@@ -92,7 +92,7 @@ export default function DialogMember(member, closeDialog) {
-
+
diff --git a/frontend/hospital-portal/src/sections/dashboard/FormRequestClaim.tsx b/frontend/hospital-portal/src/sections/dashboard/FormRequestClaim.tsx
index 805781e2..d8d268de 100644
--- a/frontend/hospital-portal/src/sections/dashboard/FormRequestClaim.tsx
+++ b/frontend/hospital-portal/src/sections/dashboard/FormRequestClaim.tsx
@@ -60,7 +60,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) {
.post('/claim-requests', formData)
.then((response) => {
enqueueSnackbar(response.data.message ?? 'Berhasil membuat data', { variant: 'success' });
- // handleSubmitSuccess();
+ handleSubmitSuccess();
})
.catch(({ response }) => {
enqueueSnackbar(response.data.message ?? 'Something Went Wrong', { variant: 'error' });
@@ -120,15 +120,15 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }) {
spacing={1}
sx={{ marginY: 2 }}
>
- {filesResult &&
- filesResult.map((file, index) => (
+ {fileHasilPenunjangs &&
+ fileHasilPenunjangs.map((file, index) => (
{file.name}
{
- removeFiles(filesResult, index);
+ removeFiles(fileHasilPenunjangs, index);
}}
>
diff --git a/frontend/hospital-portal/src/sections/dashboard/TableList.tsx b/frontend/hospital-portal/src/sections/dashboard/TableList.tsx
index 859be92a..61a67a6a 100755
--- a/frontend/hospital-portal/src/sections/dashboard/TableList.tsx
+++ b/frontend/hospital-portal/src/sections/dashboard/TableList.tsx
@@ -357,8 +357,8 @@ export default function TableList(props: any) {
sx={{ width: '100%' }}
>
{statusOptions &&
- statusOptions.map((option) => (
-