tambah fitur dokter online
This commit is contained in:
252
Modules/Internal/Http/Controllers/Api/DoctorOnlineController.php
Executable file
252
Modules/Internal/Http/Controllers/Api/DoctorOnlineController.php
Executable file
@@ -0,0 +1,252 @@
|
||||
<?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 DoctorOnlineController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @param int|null $id
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index($id = null)
|
||||
{
|
||||
$query = DoctorRating::query();
|
||||
if ($id !== null) {
|
||||
$query->where('nID', $id);
|
||||
}
|
||||
|
||||
$doctorRatings = $query->with([
|
||||
'user' => function ($query) {
|
||||
$query->select('nID', 'sFirstName'); // Select only necessary columns
|
||||
}
|
||||
])
|
||||
->select('nIDUser', 'sDate', 'sStatus')
|
||||
->get();
|
||||
|
||||
|
||||
// $prescriptions->toArray();
|
||||
// dd($prescriptions);
|
||||
|
||||
return response()->json($doctorRatings);
|
||||
// return response()->json(Helper::paginateResources(LivechatResource::collection($livechat)));
|
||||
}
|
||||
|
||||
public function getData(Request $request)
|
||||
{
|
||||
$limit = $request->has('per_page') ? $request->input('per_page') : 50;
|
||||
$results = DB::connection('oldlms')->table('tx_users_online')
|
||||
->leftJoin('tm_users', 'tx_users_online.nIDUser', '=', 'tm_users.nID')
|
||||
->leftJoin('tm_dokter', 'tx_users_online.nIDUser', '=', 'tm_dokter.nIDUser')
|
||||
->when($request->input('search'), function ($query, $search) {
|
||||
$query->where(function ($query) use ($search) {
|
||||
$query->orWhere('tm_users.sFirstname', 'like', "%" . $search . "%");
|
||||
$query->orWhere('tx_users_online.sStatus', '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('tx_users_online.sDate', '>=', $start_date. ' 00:00:00');
|
||||
});
|
||||
})
|
||||
->when($request->input('end_date') , function ($query, $end_date) {
|
||||
$query->where(function ($query) use ($end_date) {
|
||||
$query->where('tx_users_online.sDate', '<=', $end_date. ' 23:59:59');
|
||||
});
|
||||
})
|
||||
->select(
|
||||
DB::connection('oldlms')->raw("CONCAT('dr. ', tm_users.sFirstName, ' ', IFNULL(tm_users.sMiddleName, ''), ' ', IFNULL(tm_users.sLastName, '')) as nama_dokter"),
|
||||
'tx_users_online.sStatus',
|
||||
'tx_users_online.sDate'
|
||||
)
|
||||
->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-Rating-Dokter-'.$start_date.'-'.$end_date.'.xlsx'));
|
||||
$header = [
|
||||
'No',
|
||||
'Nama Dokter',
|
||||
'Date',
|
||||
'Status',
|
||||
];
|
||||
$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('tx_users_online')
|
||||
->leftJoin('tm_users', 'tx_users_online.nIDUser', '=', 'tm_users.nID')
|
||||
->when($request->input('search'), function ($query, $search) {
|
||||
$query->where(function ($query) use ($search) {
|
||||
$query->orWhere('tm_users.sFirstname', 'like', "%" . $search . "%");
|
||||
$query->orWhere('tm_users.sLastname', '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('tx_users_online.sDate', '>=', $start_date. ' 00:00:00');
|
||||
});
|
||||
})
|
||||
->when($request->input('end_date') , function ($query, $end_date) {
|
||||
$query->where(function ($query) use ($end_date) {
|
||||
$query->where('tx_users_online.sDate', '<=', $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('dr. ', tm_users.sFirstName, ' ', IFNULL(tm_users.sMiddleName, ''), ' ', IFNULL(tm_users.sLastName, '')) as nama_dokter"),
|
||||
'tx_users_online.sStatus',
|
||||
'tx_users_online.sDate'
|
||||
)
|
||||
->get();
|
||||
$no=0;
|
||||
foreach($results as $item)
|
||||
{
|
||||
$no++;
|
||||
$rowData = [
|
||||
$no,
|
||||
$item->nama_dokter,
|
||||
$item->sDate,
|
||||
$item->sStatus
|
||||
];
|
||||
$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-Dokter-Online'. $start_date.'-'.$end_date,
|
||||
"file_url" => url('files/Report-Data-Dokter-Online-'. $start_date.'-'.$end_date.'.xlsx')
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@ use Modules\Internal\Http\Controllers\Api\DivisionController;
|
||||
use Modules\Internal\Http\Controllers\Api\HospitalController;
|
||||
use Modules\Internal\Http\Controllers\Api\DoctorController;
|
||||
use Modules\Internal\Http\Controllers\Api\DoctorRatingController;
|
||||
use Modules\Internal\Http\Controllers\Api\DoctorOnlineController;
|
||||
use Modules\Internal\Http\Controllers\Api\DrugController;
|
||||
use Modules\Internal\Http\Controllers\Api\FormulariumController;
|
||||
use Modules\Internal\Http\Controllers\Api\FormulariumTemplateController;
|
||||
@@ -350,6 +351,9 @@ Route::prefix('internal')->group(function () {
|
||||
Route::get('get-doctorrating', [DoctorRatingController::class, 'getData']);
|
||||
Route::get('export-doctorrating', [DoctorRatingController::class, 'export']);
|
||||
|
||||
Route::get('get-doctoronline', [DoctorOnlineController::class, 'getData']);
|
||||
Route::get('export-doctoronline', [DoctorOnlineController::class, 'export']);
|
||||
|
||||
Route::get('get-dokter-katalog', [KatalogDokterController::class, 'getData']);
|
||||
Route::get('export-dokter-katalog', [KatalogDokterController::class, 'export']);
|
||||
|
||||
|
||||
35
app/Models/OLDLMS/DoctorOnline.php
Executable file
35
app/Models/OLDLMS/DoctorOnline.php
Executable file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\OLDLMS;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class DoctorOnline extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
const CREATED_AT = 'dCreateOn';
|
||||
const UPDATED_AT = 'dUpdateOn';
|
||||
const DELETED_AT = 'dDeleteOn';
|
||||
|
||||
protected $connection = 'oldlms';
|
||||
protected $table = 'tx_user_online';
|
||||
|
||||
// Define a belongsTo relationship with the User model
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'nIDUser');
|
||||
}
|
||||
|
||||
// Include additional fields in the model's JSON form
|
||||
protected $appends = [
|
||||
'user_first_name', // Include the attribute for user's first name
|
||||
];
|
||||
|
||||
// Define an accessor to get the first name of the related user
|
||||
public function getUserFirstNameAttribute()
|
||||
{
|
||||
return $this->user ? $this->user->sFirstName : null;
|
||||
}
|
||||
}
|
||||
@@ -173,6 +173,11 @@ class NavigationSeeder extends Seeder
|
||||
'path' => '/report/doctor-rating',
|
||||
'permission' => 'report-doctor-rating'
|
||||
],
|
||||
[
|
||||
'title' => 'Doctor Online',
|
||||
'path' => '/report/doctor-online',
|
||||
'permission' => 'report-doctor-online'
|
||||
],
|
||||
[
|
||||
'title' => 'Katalog Dokter',
|
||||
'path' => '/report/katalog-dokter',
|
||||
|
||||
@@ -69,6 +69,7 @@ class PermissionTableSeeder extends Seeder
|
||||
'report-livechat-list',
|
||||
'report-livechat-payment',
|
||||
'report-doctor-rating',
|
||||
'report-doctor-online',
|
||||
'user-role-list',
|
||||
'user-access-list',
|
||||
'report-katalog-dokter'
|
||||
|
||||
35
frontend/dashboard/src/pages/Report/DoctorOnline/Index.tsx
Executable file
35
frontend/dashboard/src/pages/Report/DoctorOnline/Index.tsx
Executable 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 = 'Doctor Online';
|
||||
return (
|
||||
<Page title={pageTitle}>
|
||||
<Container maxWidth={themeStretch ? false : 'xl'}>
|
||||
<HeaderBreadcrumbs
|
||||
heading={pageTitle}
|
||||
links={[
|
||||
{
|
||||
name: 'Report',
|
||||
href: '#',
|
||||
},
|
||||
{
|
||||
name: 'Doctor Online',
|
||||
href: '/report/doctor-online',
|
||||
},
|
||||
]}
|
||||
/>
|
||||
|
||||
<List />
|
||||
</Container>
|
||||
</Page>
|
||||
);
|
||||
}
|
||||
1012
frontend/dashboard/src/pages/Report/DoctorOnline/List.tsx
Executable file
1012
frontend/dashboard/src/pages/Report/DoctorOnline/List.tsx
Executable file
File diff suppressed because it is too large
Load Diff
0
frontend/dashboard/src/pages/Report/Rujukan/Index.tsx
Normal file → Executable file
0
frontend/dashboard/src/pages/Report/Rujukan/Index.tsx
Normal file → Executable file
0
frontend/dashboard/src/pages/Report/Rujukan/List.tsx
Normal file → Executable file
0
frontend/dashboard/src/pages/Report/Rujukan/List.tsx
Normal file → Executable file
@@ -13,6 +13,7 @@ import { AuthProvider } from '../contexts/LaravelAuthContext';
|
||||
import AuthGuard from '../guards/AuthGuard';
|
||||
import { Link, useParams, useSearchParams } from 'react-router-dom';
|
||||
import DoctorRating from '@/pages/Report/DoctorRating_v2/Index';
|
||||
import DoctorOnline from '@/pages/Report/DoctorOnline/Index';
|
||||
import KatalogDokter from '@/pages/Report/KatalogDokter/Index';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
@@ -446,6 +447,10 @@ export default function Router() {
|
||||
path: 'report/doctor-rating',
|
||||
element: <DoctorRating/>,
|
||||
},
|
||||
{
|
||||
path: 'report/doctor-online',
|
||||
element: <DoctorOnline/>,
|
||||
},
|
||||
{
|
||||
path: 'report/katalog-dokter',
|
||||
element: <KatalogDokter/>,
|
||||
|
||||
BIN
public/files/Report-Data-Dokter-Online-all-all.xlsx
Normal file
BIN
public/files/Report-Data-Dokter-Online-all-all.xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user