Update
This commit is contained in:
@@ -0,0 +1,192 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Internal\Http\Controllers\Api;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
use Illuminate\Routing\Controller;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use App\Helpers\Helper;
|
||||||
|
use App\Models\OLDLMS\DoctorRating;
|
||||||
|
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||||
|
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
|
||||||
|
use Box\Spout\Common\Entity\Style\CellAlignment;
|
||||||
|
|
||||||
|
class KatalogDokterController extends Controller
|
||||||
|
{
|
||||||
|
public function getData(Request $request)
|
||||||
|
{
|
||||||
|
$limit = $request->has('per_page') ? $request->input('per_page') : 50;
|
||||||
|
$results = DB::connection('oldlms')->table('tm_dokter')
|
||||||
|
->leftJoin('tm_users', 'tm_dokter.nIDUser', '=', 'tm_users.nID')
|
||||||
|
->leftJoin('tx_jadwal_dokter', 'tm_dokter.nID', '=', 'tx_jadwal_dokter.nIDDokter')
|
||||||
|
->leftJoin('tm_users_education', 'tm_dokter.nIDUser', '=', 'tm_users_education.nIDUser')
|
||||||
|
->leftJoin('tm_healthcare', 'tx_jadwal_dokter.nIDHealthCare', '=', 'tm_healthcare.nID')
|
||||||
|
->when($request->input('search'), function ($query, $search) {
|
||||||
|
$query->where(function ($query) use ($search) {
|
||||||
|
$query->orWhere('tm_users.sFirstname', 'like', "%" . $search . "%");
|
||||||
|
$query->orWhere('tm_dokter.sSTR', 'like', "%" . $search . "%");
|
||||||
|
$query->orWhere('tm_healthcare.sHealthCare', 'like', "%" . $search . "%");
|
||||||
|
});
|
||||||
|
})
|
||||||
|
->when($request->has('orderBy'), function ($query) use ($request) {
|
||||||
|
$orderBy = $request->orderBy;
|
||||||
|
$direction = $request->order ?? 'asc';
|
||||||
|
|
||||||
|
$query->orderBy($orderBy, $direction);
|
||||||
|
})
|
||||||
|
->when($request->input('start_date') , function ($query, $start_date) {
|
||||||
|
$query->where(function ($query) use ($start_date) {
|
||||||
|
$query->where('tm_dokter.dSTRExpireDate', '>=', $start_date. ' 00:00:00');
|
||||||
|
});
|
||||||
|
})
|
||||||
|
->when($request->input('end_date') , function ($query, $end_date) {
|
||||||
|
$query->where(function ($query) use ($end_date) {
|
||||||
|
$query->where('tm_dokter.dSTRExpireDate', '<=', $end_date. ' 23:59:59');
|
||||||
|
});
|
||||||
|
})
|
||||||
|
// ->when($request->input('provider') , function ($query, $provider) {
|
||||||
|
// $query->where(function ($query) use ($provider) {
|
||||||
|
// $query->where('request_logs.organization_id', '=', $provider);
|
||||||
|
// });
|
||||||
|
// })
|
||||||
|
// ->where('files.fileable_type', '=', 'App\Models\RequestLog')
|
||||||
|
// ->where('request_logs.final_log', '=', '1')
|
||||||
|
// ->where('request_logs.status_final_log', '=', 'approved')
|
||||||
|
->select(
|
||||||
|
DB::connection('oldlms')->raw("CONCAT(tm_users.sFirstName, ' ', IFNULL(tm_users.sMiddleName, ''), ' ', IFNULL(tm_users.sLastName, '')) as nama_dokter"),
|
||||||
|
'tm_users_education.sUniversitas as lulusan',
|
||||||
|
'tm_dokter.sSTR as str',
|
||||||
|
'tx_jadwal_dokter.sSIP as sip',
|
||||||
|
'tm_healthcare.sHealthCare as tempat_praktek',
|
||||||
|
)
|
||||||
|
->paginate($limit);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return response()->json(Helper::paginateResources($results));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function export(Request $request)
|
||||||
|
{
|
||||||
|
$start_date = $request->input('start_date') ? $request->input('start_date') : 'all';
|
||||||
|
$end_date = $request->input('end_date') ? $request->input('end_date') : 'all';
|
||||||
|
$writer = WriterEntityFactory::createXLSXWriter();
|
||||||
|
$writer->openToFile(public_path('files/Report-Data-Katalog-Dokter-'.$start_date.'-'.$end_date.'.xlsx'));
|
||||||
|
$header = [
|
||||||
|
'No',
|
||||||
|
'Nama Dokter',
|
||||||
|
'Lulusan',
|
||||||
|
'STR',
|
||||||
|
'SIP',
|
||||||
|
'Tempat Praktek',
|
||||||
|
];
|
||||||
|
$style = (new StyleBuilder())
|
||||||
|
->setFontBold()
|
||||||
|
// ->setFontSize(15)
|
||||||
|
// ->setFontColor(Color::BLUE)
|
||||||
|
// ->setShouldWrapText()
|
||||||
|
->setCellAlignment(CellAlignment::LEFT)
|
||||||
|
// ->setBackgroundColor(Color::YELLOW)
|
||||||
|
->build();
|
||||||
|
|
||||||
|
$headerRow = WriterEntityFactory::createRowFromArray($header, $style);
|
||||||
|
$writer->addRow($headerRow);
|
||||||
|
// ============================
|
||||||
|
$results = DB::connection('oldlms')->table('tm_dokter')
|
||||||
|
->leftJoin('tm_users', 'tm_dokter.nIDUser', '=', 'tm_users.nID')
|
||||||
|
->leftJoin('tx_jadwal_dokter', 'tm_dokter.nID', '=', 'tx_jadwal_dokter.nIDDokter')
|
||||||
|
->leftJoin('tm_users_education', 'tm_dokter.nIDUser', '=', 'tm_users_education.nIDUser')
|
||||||
|
->leftJoin('tm_healthcare', 'tx_jadwal_dokter.nIDHealthCare', '=', 'tm_healthcare.nID')
|
||||||
|
->when($request->input('search'), function ($query, $search) {
|
||||||
|
$query->where(function ($query) use ($search) {
|
||||||
|
$query->orWhere('tm_users.sFirstname', 'like', "%" . $search . "%");
|
||||||
|
$query->orWhere('tm_dokter.sSTR', 'like', "%" . $search . "%");
|
||||||
|
$query->orWhere('tm_healthcare.sHealthCare', 'like', "%" . $search . "%");
|
||||||
|
});
|
||||||
|
})
|
||||||
|
->when($request->has('orderBy'), function ($query) use ($request) {
|
||||||
|
$orderBy = $request->orderBy;
|
||||||
|
$direction = $request->order ?? 'asc';
|
||||||
|
|
||||||
|
$query->orderBy($orderBy, $direction);
|
||||||
|
})
|
||||||
|
->when($request->input('start_date') , function ($query, $start_date) {
|
||||||
|
$query->where(function ($query) use ($start_date) {
|
||||||
|
$query->where('tm_dokter.dSTRExpireDate', '>=', $start_date. ' 00:00:00');
|
||||||
|
});
|
||||||
|
})
|
||||||
|
->when($request->input('end_date') , function ($query, $end_date) {
|
||||||
|
$query->where(function ($query) use ($end_date) {
|
||||||
|
$query->where('tm_dokter.dSTRExpireDate', '<=', $end_date. ' 23:59:59');
|
||||||
|
});
|
||||||
|
})
|
||||||
|
// ->when($request->input('provider') , function ($query, $provider) {
|
||||||
|
// $query->where(function ($query) use ($provider) {
|
||||||
|
// $query->where('request_logs.organization_id', '=', $provider);
|
||||||
|
// });
|
||||||
|
// })
|
||||||
|
// ->where('files.fileable_type', '=', 'App\Models\RequestLog')
|
||||||
|
// ->where('request_logs.final_log', '=', '1')
|
||||||
|
// ->where('request_logs.status_final_log', '=', 'approved')
|
||||||
|
->select(
|
||||||
|
DB::connection('oldlms')->raw("CONCAT(tm_users.sFirstName, ' ', IFNULL(tm_users.sMiddleName, ''), ' ', IFNULL(tm_users.sLastName, '')) as nama_dokter"),
|
||||||
|
'tm_users_education.sUniversitas as lulusan',
|
||||||
|
'tm_dokter.sSTR as str',
|
||||||
|
'tx_jadwal_dokter.sSIP as sip',
|
||||||
|
'tm_healthcare.sHealthCare as tempat_praktek',
|
||||||
|
)
|
||||||
|
->get();
|
||||||
|
$no=0;
|
||||||
|
foreach($results as $item)
|
||||||
|
{
|
||||||
|
$no++;
|
||||||
|
$rowData = [
|
||||||
|
$no,
|
||||||
|
$item->nama_dokter,
|
||||||
|
$item->lulusan,
|
||||||
|
$item->str,
|
||||||
|
$item->sip,
|
||||||
|
$item->tempat_praktek,
|
||||||
|
];
|
||||||
|
$style = (new StyleBuilder())
|
||||||
|
//->setFontBold()
|
||||||
|
// ->setFontSize(15)
|
||||||
|
// ->setFontColor(Color::BLUE)
|
||||||
|
// ->setShouldWrapText()
|
||||||
|
->setCellAlignment(CellAlignment::LEFT)
|
||||||
|
// ->setBackgroundColor(Color::YELLOW)
|
||||||
|
->build();
|
||||||
|
$row = WriterEntityFactory::createRowFromArray($rowData, $style);
|
||||||
|
$writer->addRow($row);
|
||||||
|
}
|
||||||
|
$footer = [
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
''
|
||||||
|
];
|
||||||
|
$style = (new StyleBuilder())
|
||||||
|
->setFontBold()
|
||||||
|
// ->setFontSize(15)
|
||||||
|
// ->setFontColor(Color::BLUE)
|
||||||
|
// ->setShouldWrapText()
|
||||||
|
->setCellAlignment(CellAlignment::LEFT)
|
||||||
|
// ->setBackgroundColor(Color::YELLOW)
|
||||||
|
->build();
|
||||||
|
|
||||||
|
$footerRow = WriterEntityFactory::createRowFromArray($footer, $style);
|
||||||
|
$writer->addRow($footerRow);
|
||||||
|
|
||||||
|
$writer->close();
|
||||||
|
|
||||||
|
return Helper::responseJson([
|
||||||
|
'file_name' => 'Report-Data-Katalog-Dokter-'. $start_date.'-'.$end_date,
|
||||||
|
"file_url" => url('files/Report-Data-Katalog-Dokter-'. $start_date.'-'.$end_date.'.xlsx')
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ use Modules\Internal\Http\Controllers\Api\BenefitController;
|
|||||||
use Modules\Internal\Http\Controllers\Api\CityController;
|
use Modules\Internal\Http\Controllers\Api\CityController;
|
||||||
use Modules\Internal\Http\Controllers\Api\ClaimController;
|
use Modules\Internal\Http\Controllers\Api\ClaimController;
|
||||||
use Modules\Internal\Http\Controllers\Api\ClaimRequestController;
|
use Modules\Internal\Http\Controllers\Api\ClaimRequestController;
|
||||||
|
use Modules\Internal\Http\Controllers\Api\KatalogDokterController;
|
||||||
use Modules\Internal\Http\Controllers\Api\RequestLogController;
|
use Modules\Internal\Http\Controllers\Api\RequestLogController;
|
||||||
use Modules\Internal\Http\Controllers\Api\RequestLogBenefitController;
|
use Modules\Internal\Http\Controllers\Api\RequestLogBenefitController;
|
||||||
use Modules\Internal\Http\Controllers\Api\RequestLogMedicineController;
|
use Modules\Internal\Http\Controllers\Api\RequestLogMedicineController;
|
||||||
@@ -337,6 +338,9 @@ Route::prefix('internal')->group(function () {
|
|||||||
Route::get('get-doctorrating', [DoctorRatingController::class, 'getData']);
|
Route::get('get-doctorrating', [DoctorRatingController::class, 'getData']);
|
||||||
Route::get('export-doctorrating', [DoctorRatingController::class, 'export']);
|
Route::get('export-doctorrating', [DoctorRatingController::class, 'export']);
|
||||||
|
|
||||||
|
Route::get('get-dokter-katalog', [KatalogDokterController::class, 'getData']);
|
||||||
|
Route::get('export-dokter-katalog', [KatalogDokterController::class, 'export']);
|
||||||
|
|
||||||
Route::resource('doctors', DoctorController::class);
|
Route::resource('doctors', DoctorController::class);
|
||||||
|
|
||||||
Route::post('generate-log/{member_id}', [CorporateMemberController::class, 'generateLog']);
|
Route::post('generate-log/{member_id}', [CorporateMemberController::class, 'generateLog']);
|
||||||
|
|||||||
@@ -173,6 +173,11 @@ class NavigationSeeder extends Seeder
|
|||||||
'path' => '/report/doctor-rating',
|
'path' => '/report/doctor-rating',
|
||||||
'permission' => 'report-doctor-rating'
|
'permission' => 'report-doctor-rating'
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'title' => 'Katalog Dokter',
|
||||||
|
'path' => '/report/katalog-dokter',
|
||||||
|
'permission' => 'report-katalog-dokter'
|
||||||
|
]
|
||||||
],
|
],
|
||||||
'permission' => null
|
'permission' => null
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -70,7 +70,8 @@ class PermissionTableSeeder extends Seeder
|
|||||||
'report-livechat-payment',
|
'report-livechat-payment',
|
||||||
'report-doctor-rating',
|
'report-doctor-rating',
|
||||||
'user-role-list',
|
'user-role-list',
|
||||||
'user-access-list'
|
'user-access-list',
|
||||||
|
'report-katalog-dokter'
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
####################### CLIENT PORTAL #########################
|
####################### CLIENT PORTAL #########################
|
||||||
|
|||||||
@@ -783,7 +783,7 @@ import {
|
|||||||
/>
|
/>
|
||||||
{!currentImportFileName && (
|
{!currentImportFileName && (
|
||||||
<>
|
<>
|
||||||
<Grid item xs={12} md={4}>
|
<Grid item xs={12} md={5}>
|
||||||
<TextField
|
<TextField
|
||||||
id="search-input"
|
id="search-input"
|
||||||
ref={searchInput}
|
ref={searchInput}
|
||||||
@@ -802,7 +802,7 @@ import {
|
|||||||
<Search />
|
<Search />
|
||||||
</InputAdornment>
|
</InputAdornment>
|
||||||
),
|
),
|
||||||
placeholder: 'Search Code or Name',
|
placeholder: 'Search Name',
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -870,7 +870,7 @@ import {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
</Grid> */}
|
</Grid> */}
|
||||||
<Grid item xs={12} md={3} display="flex" sx={{ gap: '16px' }}>
|
<Grid item xs={12} md={2} display="flex" sx={{ gap: '16px' }}>
|
||||||
{/* <FormControl >
|
{/* <FormControl >
|
||||||
<LoadingButton
|
<LoadingButton
|
||||||
id="upload-button"
|
id="upload-button"
|
||||||
|
|||||||
35
frontend/dashboard/src/pages/Report/KatalogDokter/Index.tsx
Normal file
35
frontend/dashboard/src/pages/Report/KatalogDokter/Index.tsx
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import { Card, Grid, Container } from '@mui/material';
|
||||||
|
import { useParams } from 'react-router-dom';
|
||||||
|
import HeaderBreadcrumbs from '../../../components/HeaderBreadcrumbs';
|
||||||
|
import Page from '../../../components/Page';
|
||||||
|
import useSettings from '../../../hooks/useSettings';
|
||||||
|
import List from './List';
|
||||||
|
|
||||||
|
export default function Index() {
|
||||||
|
const { themeStretch } = useSettings();
|
||||||
|
|
||||||
|
const { id } = useParams();
|
||||||
|
|
||||||
|
const pageTitle = 'Katalog Dokter & Profile';
|
||||||
|
return (
|
||||||
|
<Page title={pageTitle}>
|
||||||
|
<Container maxWidth={themeStretch ? false : 'xl'}>
|
||||||
|
<HeaderBreadcrumbs
|
||||||
|
heading={pageTitle}
|
||||||
|
links={[
|
||||||
|
{
|
||||||
|
name: 'Report',
|
||||||
|
href: '#',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Katalog Dokter & Profile',
|
||||||
|
href: '/report/katalog-dokter',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<List />
|
||||||
|
</Container>
|
||||||
|
</Page>
|
||||||
|
);
|
||||||
|
}
|
||||||
1027
frontend/dashboard/src/pages/Report/KatalogDokter/List.tsx
Normal file
1027
frontend/dashboard/src/pages/Report/KatalogDokter/List.tsx
Normal file
File diff suppressed because it is too large
Load Diff
@@ -14,6 +14,7 @@ import AuthGuard from '../guards/AuthGuard';
|
|||||||
import { Link, useParams, useSearchParams } from 'react-router-dom';
|
import { Link, useParams, useSearchParams } from 'react-router-dom';
|
||||||
import Prescription from '@/pages/Report/Prescription/Index';
|
import Prescription from '@/pages/Report/Prescription/Index';
|
||||||
import DoctorRating from '@/pages/Report/DoctorRating_v2/Index';
|
import DoctorRating from '@/pages/Report/DoctorRating_v2/Index';
|
||||||
|
import KatalogDokter from '@/pages/Report/KatalogDokter/Index';
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -446,6 +447,10 @@ export default function Router() {
|
|||||||
path: 'report/doctor-rating',
|
path: 'report/doctor-rating',
|
||||||
element: <DoctorRating/>,
|
element: <DoctorRating/>,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'report/katalog-dokter',
|
||||||
|
element: <KatalogDokter/>,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'report/linksehat-payments',
|
path: 'report/linksehat-payments',
|
||||||
element: <LinksehatPayment />,
|
element: <LinksehatPayment />,
|
||||||
|
|||||||
Reference in New Issue
Block a user