240 lines
7.7 KiB
PHP
Executable File
240 lines
7.7 KiB
PHP
Executable File
<?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)
|
|
{
|
|
// Menyimpan tanggal mulai dan tanggal selesai dari request
|
|
$start_date = $request->input('start_date') ? $request->input('start_date') : 'all';
|
|
$end_date = $request->input('end_date') ? $request->input('end_date') : 'all';
|
|
|
|
// Membuat writer untuk file XLSX
|
|
$writer = WriterEntityFactory::createXLSXWriter();
|
|
|
|
// Pastikan folder 'files' ada dan bisa ditulis
|
|
$filePath = public_path('files');
|
|
if (!is_dir($filePath)) {
|
|
mkdir($filePath, 0755, true); // Membuat folder jika belum ada
|
|
}
|
|
|
|
// Menyimpan file Excel ke folder yang sesuai
|
|
$fileName = 'Report-Data-Rating-Dokter-' . $start_date . '-' . $end_date . '.xlsx';
|
|
$writer->openToFile(public_path('files/' . $fileName));
|
|
|
|
// Header Excel
|
|
$header = [
|
|
'No',
|
|
'Nama Dokter',
|
|
'Date',
|
|
'Status',
|
|
];
|
|
|
|
// Styling untuk header (bold)
|
|
$headerStyle = (new StyleBuilder())
|
|
->setFontBold() // Menambahkan font bold hanya pada header
|
|
->setCellAlignment(CellAlignment::LEFT)
|
|
->build();
|
|
|
|
// Menambahkan header ke dalam file
|
|
$headerRow = WriterEntityFactory::createRowFromArray($header, $headerStyle);
|
|
$writer->addRow($headerRow);
|
|
|
|
// Query untuk mengambil data dari database
|
|
$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('tx_users_online.sDate', '>=', $start_date . ' 00:00:00');
|
|
})
|
|
->when($request->input('end_date'), function ($query, $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'
|
|
)
|
|
->get();
|
|
|
|
// Styling untuk baris data (tidak ada bold)
|
|
$dataStyle = (new StyleBuilder())
|
|
->setCellAlignment(CellAlignment::LEFT)
|
|
->build();
|
|
|
|
// Menambahkan data baris ke dalam file
|
|
$no = 0;
|
|
foreach ($results as $item) {
|
|
$no++;
|
|
$rowData = [
|
|
$no,
|
|
$item->nama_dokter,
|
|
$item->sDate,
|
|
$item->sStatus
|
|
];
|
|
|
|
$row = WriterEntityFactory::createRowFromArray($rowData, $dataStyle);
|
|
$writer->addRow($row);
|
|
}
|
|
|
|
// Menutup writer setelah selesai menulis file
|
|
$writer->close();
|
|
|
|
// Mengirimkan response JSON
|
|
return Helper::responseJson([
|
|
'file_name' => $fileName,
|
|
'file_url' => url('files/' . $fileName),
|
|
]);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 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)
|
|
{
|
|
//
|
|
}
|
|
}
|