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) => ( - + statusOptions.map((option, index) => ( + {option} ))}