diff --git a/Modules/Internal/Http/Controllers/Api/ReportLogController.php b/Modules/Internal/Http/Controllers/Api/ReportLogController.php index 262e3d92..1e04ab65 100644 --- a/Modules/Internal/Http/Controllers/Api/ReportLogController.php +++ b/Modules/Internal/Http/Controllers/Api/ReportLogController.php @@ -17,6 +17,7 @@ use Illuminate\Support\Facades\Storage; use App\Exceptions\ImportRowException; use App\Events\RequestLoged; use Carbon\Carbon; +use Illuminate\Database\Eloquent\Builder; use Maatwebsite\Excel\Facades\Excel; use Box\Spout\Reader\Common\Creator\ReaderEntityFactory; @@ -41,39 +42,52 @@ class ReportLogController extends Controller public function index(Request $request) { - $requestLog = RequestLog::query() - ->where('deleted_at', null) - ->when($request->final_log, function($q, $final_log) { - $q->where('final_log', $final_log); - }) - ->when($request->search, function ($q, $search) { - $q->where('code', 'LIKE', "%".$search."%"); - $q->orWhereHas('member', function ($subQuery) use ($search) { - $subQuery->where('name', 'LIKE', "%".$search."%"); - }); - }) - ->when($request->orderBy, function ($q, $orderBy) use ($request) { - if (in_array($orderBy, ['submission_date', 'code', 'service_code', 'status'])) { - $q->orderBy($orderBy, $request->order); - } - }) - ->when(empty($request->orderBy), function ($q) { - $q->orderBy('submission_date', 'desc'); - }) - ->when($request->service_code, function($q, $service_code) { - if ($service_code == 'IP'){ // Penjagaan sementara agar ini hanya muncul di inpatient monitoring - $q->where('service_code', $service_code); - } else { - $q->where('service_code', '!=', 'IP'); // Dan selain IP muncul di final LOG - } - }) - // ->where('status', $request->status) - ->with(['member', 'files', 'service', 'member.currentPolicy']) - ->paginate(); + // Membuat objek DateTime dari string tanggal + $start_date = $request->start_date ? Carbon::parse($request->start_date)->toDateTimeString() : null; + $end_date = $request->end_date ? Carbon::parse($request->end_date) : null; + $requestLog = RequestLog::query() + ->where('deleted_at', null) + ->when($request->final_log, function ($q, $final_log) { + $q->where('final_log', $final_log); + }) + ->when($request->start_date, function ($q) use ($request) { + $q->where('created_at', '>=', $request->start_date); + }) + ->when($request->end_date, function ($q) use ($request) { + $q->where('created_at', '<=', Carbon::parse($request->end_date)->addDay()); + }) + ->when($request->search, function ($q, $search) { + $q->where(function ($subQuery) use ($search) { + $subQuery->where('code', 'LIKE', '%' . $search . '%') + ->orWhereHas('member', function ($subSubQuery) use ($search) { + $subSubQuery->where('name', 'LIKE', '%' . $search . '%'); + }); + }); + }) + ->when($request->orderBy, function ($q, $orderBy) use ($request) { + if (in_array($orderBy, ['submission_date', 'code', 'service_code', 'status'])) { + $q->orderBy($orderBy, $request->order); + } + }) + ->when(empty($request->orderBy), function ($q) { + $q->orderBy('submission_date', 'desc'); + }) + ->when($request->service_code, function ($q, $service_code) { + if ($service_code == 'IP') { + $q->where('service_code', $service_code); + } else { + $q->where('service_code', '!=', 'IP'); + } + }) + ->with(['member', 'files', 'service', 'member.currentPolicy']); + + $requestLog = $requestLog->paginate(); return Helper::paginateResources(ReportLogResource::collection($requestLog)); + } + /** * Show the form for creating a new resource. * @return Renderable @@ -145,7 +159,7 @@ class ReportLogController extends Controller * Generate Export Excel Request LOG */ - public function generateDataRequestLogExcel(){ + public function generateDataRequestLogExcel(Request $request){ Helper::setCustomPHPIniSettings(); $file_name = 'Data Request LOG'; // Membuat penulis entitas Spout @@ -178,9 +192,16 @@ class ReportLogController extends Controller $writer->addRow($headerRow); $dataRequestLog = RequestLog::query() + ->where('deleted_at', null) // ->whereHas('corporatePlan', function ($corporatePlan) use ($corporate_id) { // $corporatePlan->where('corporate_id', $corporate_id); // }) + ->when($request->start_date, function ($q) use ($request) { + $q->where('created_at', '>=', $request->start_date); + }) + ->when($request->end_date, function ($q) use ($request) { + $q->where('created_at', '<=', Carbon::parse($request->end_date)->addDay()); + }) ->with('member') ->orderBy('id', 'desc') ->get()->toArray(); diff --git a/frontend/dashboard/src/pages/Report/Log/List.tsx b/frontend/dashboard/src/pages/Report/Log/List.tsx index b24297ef..4ac7e04f 100644 --- a/frontend/dashboard/src/pages/Report/Log/List.tsx +++ b/frontend/dashboard/src/pages/Report/Log/List.tsx @@ -39,13 +39,15 @@ import { LaravelPaginatedData, LaravelPaginatedDataDefault } from '../../../@typ import DataTable from '../../../components/LaravelTable'; import { LoadingButton } from '@mui/lab'; import { enqueueSnackbar } from 'notistack'; -import { fDateTimesecond } from '@/utils/formatTime'; +import { fDateOnly, fDateTimesecond } from '@/utils/formatTime'; import { capitalizeFirstLetter } from '@/utils/formatString'; import Label from '@/components/Label'; import TableMoreMenu from '@/components/table/TableMoreMenu'; import { Import } from '@/@types/claims'; // import DialogDeleteRequestLOG from '../Request/Components/DialogDeleteRequestLOG'; import { HeadCell, Order } from '@/@types/table'; +import {DesktopDatePicker, LocalizationProvider } from '@mui/x-date-pickers'; +import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; import { ReportLog } from './Model/Type'; // import LoadingButton from '@/theme/overrides/LoadingButton'; @@ -60,12 +62,26 @@ export default function List() { // SEARCH const searchInput = useRef(null); const [searchText, setSearchText] = useState(''); + const [selectedStartDate, setSelectedStartDate] = useState(null); + const [selectedEndDate, setSelectedEndDate] = useState(''); + // Start Date + // con const handleSearchChange = (event: any) => { const newSearchText = event.target.value ?? ''; setSearchText(newSearchText); }; + const handleStartDateChange = (date: any) => { + setSelectedStartDate(date); + }; + + const handleEndDateChange = (date: any) => { + setSelectedEndDate(date); + }; + + console.log(selectedEndDate) + const handleSearchSubmit = (event: any) => { event.preventDefault(); props.onSearch({ search: searchText }); // Trigger to Parent @@ -77,17 +93,77 @@ export default function List() { }, []); return ( -
- + + + + { + if (event.key === 'Enter') { + // handleSearchSubmit(event); + + const filter = Object.fromEntries([ + ...searchParams.entries(), + ['search', searchText], + ]); + setSearchParams(filter); + loadDataTableData(filter); + } + }} + value={searchText} + placeholder='Search Code or Name...' + /> + + + + { + try { + if (value && !!Date.parse(value)) { + const date:string = value ? fDateOnly(value) : ''; + var entries = [...searchParams.entries(), ['start_date', date ?? '']]; + const filter = Object.fromEntries(entries); + setSearchParams(filter); + loadDataTableData(filter); + } + } catch (e) {} + }} + renderInput={(params) => } + /> + + + + + { + try { + if (value && !!Date.parse(value)) { + const date = fDateOnly(value); + var entries = [...searchParams.entries(), ['end_date', date ?? '']]; + const filter = Object.fromEntries(entries); + handleEndDateChange(date) + setSearchParams(filter); + loadDataTableData(filter); + } + } catch (e) {} + }} + renderInput={(params) => } + /> + + + + ); } @@ -99,7 +175,6 @@ export default function List() { const createMenu = Boolean(anchorEl); const importForm = useRef(null); const [currentImportFileName, setCurrentImportFileName] = useState(null); - const [importLoading, setImportLoading] = useState(false); const handleClick = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); @@ -117,11 +192,6 @@ export default function List() { } }; - const handleCancelImportButton = () => { - importForm.current.value = ''; - importForm.current.dispatchEvent(new Event('change', { bubbles: true })); - }; - const handleImportChange = (event: any) => { if (event.target.files[0]) { setCurrentImportFileName(event.target.files[0].name); @@ -130,56 +200,31 @@ export default function List() { } }; - const handleUpload = () => { - if (importForm.current?.files.length) { - const formData = new FormData(); - formData.append('file', importForm.current?.files[0]); - - setImportLoading(true); - axios - .post(`customer-service/request/import`, formData) - .then((response) => { - handleCancelImportButton(); - loadDataTableData(); - setImportResult(response.data); - // alert('Succesfully read '+ response.data.total_successed_row + ' with ' + response.data.total_failed_row + ' failed rows'); - setImportLoading(false); - }) - .catch((response) => { - enqueueSnackbar( - 'Looks like something went wrong. Please check your data and try again. ' + - response.message, - { variant: 'error' } - ); - setImportLoading(false); - }); - } else { - enqueueSnackbar('No File Selected', { variant: 'warning' }); - } - }; - - const handleGetTemplate = (type :string) => { - axios.get('corporates/import-document-example/' + type) - .then((response) => { - const link = document.createElement('a'); - link.href = response.data.data.file_url; - link.setAttribute('download', response.data.data.file_name); - document.body.appendChild(link); - link.click(); - handleClose(); - }) - } - const handleGetData = (type :string) => { - axios.get(`report/logs/export`) - .then((response) => { - const link = document.createElement('a'); - link.href = response.data.data.file_url; - link.setAttribute('download', response.data.data.file_name); - document.body.appendChild(link); - link.click(); - handleClose(); - }) + const parameters = + Object.keys(appliedParams).length !== 0 + ? appliedParams + : Object.fromEntries([...searchParams.entries(), ['order', order], ['orderBy', orderBy]]); + + axios.get('/report/logs/export', { + params: { ...parameters }, + }).then((response) => { + const link = document.createElement('a'); + link.href = response.data.data.file_url; + link.setAttribute('download', response.data.data.file_name); + document.body.appendChild(link); + link.click(); + handleClose(); + }); + // axios.get(`report/logs/export`) + // .then((response) => { + // const link = document.createElement('a'); + // link.href = response.data.data.file_url; + // link.setAttribute('download', response.data.data.file_name); + // document.body.appendChild(link); + // link.click(); + // handleClose(); + // }) } return ( @@ -216,54 +261,6 @@ export default function List() { )} - - {currentImportFileName && ( - - - - - - - } - sx={{ p: 1.8 }} - onClick={handleUpload} - loading={importLoading} - > - Upload - - - )} - - {importResult && ( - - - Last Import Result :{' '} - - {importResult.total_success_row ?? 0} - {' '} - Row Processed,{' '} - - {importResult.total_failed_row} - {' '} - Failed, Report :{' '} - - {importResult.result_file?.name ?? '-'} - - - - )} ); } @@ -281,9 +278,9 @@ export default function List() { ? appliedParams : Object.fromEntries([...searchParams.entries(), ['order', order], ['orderBy', orderBy]]); - const response = await axios.get('/report/logs', { - params: { ...parameters }, - }); + const response = await axios.get('/report/logs', { + params: { ...parameters }, + }); setDataTableLoading(false); setDataTableData(response.data);