This commit expands report generation capabilities to Customer Service (CS) role
and refactors the report system for better maintainability and PDF support.
Changes Summary:
Access Control:
- Extended report access from Lab, Admin, Superuser to include CS role (filter: 0,1,2,4)
- Removed separate CS-only print routes, consolidated into unified report routes
- Routes now support /report/:num, /report/:num/eng, /report/:num/print, /report/:num/print/eng
Controller Refactoring (ReportController):
- Refactored generate() and print() methods to share common renderReport() logic
- Removed separate preview() method - preview now handled via preview parameter
- Added ispdf parameter support for PDF generation mode
- Print functionality now logs audit events to AUDIT_REQUESTS table
Database Queries (ReportHelper):
- Improved SQL queries with explicit aliases for better readability and maintainability
- Fixed date formatting issue: changed date_format() to date() with strtotime()
- Added getValData() method to retrieve validation user information (VAL1USER, VAL2USER)
- Added null coalescing operators (?? '') for safer array access
View Updates (report/template.php):
- Conditional CSS loading: uses pdf.css when ispdf=1, otherwise style.css
- Removed "PREVIEW ONLY - DO NOT PRINT" watermark
- Conditional header/footer images - only display when generating PDF
- Added validation user display: "Val1 By : {user} | Val2 By : {user}"
- Replaced signature placeholder with "This result is valid without signature" statement
- Improved footer layout spacing
Styling Adjustments (public/assets/report/style.css):
- Adjusted margins for better print layout: dinfo (2cm), dresult (17.5cm), footer (2cm)
- Increased footer width from 17cm to 18cm
- Added responsive image classes: .img and .img-footer with max-width: 100%
- Set footer image max-height to 2.5cm
Security:
- Maintained role-based access control with proper authentication checks
- All database queries use parameterized statements (no interpolation)
- Print actions still logged to AUDIT_REQUESTS for audit trail
105 lines
4.0 KiB
PHP
105 lines
4.0 KiB
PHP
<?php
|
|
|
|
use CodeIgniter\Router\RouteCollection;
|
|
|
|
$routes->set404Override(function () {
|
|
$response = service('response');
|
|
$response->setStatusCode(404);
|
|
echo view('errors/notfound');
|
|
});
|
|
$routes->get('/unauthorized', 'ErrorPage::unauthorized');
|
|
|
|
|
|
$routes->get('/', 'Home::index');
|
|
$routes->get('/login', 'AuthController::loginPage', ['filter' => 'guest']);
|
|
$routes->post('/login', 'AuthController::login', ['filter' => 'guest']);
|
|
$routes->get('/logout', 'AuthController::logout');
|
|
$routes->patch('/setPassword', 'AuthController::setPassword');
|
|
|
|
$routes->get('label/coll/(:any)', 'LabelController::coll/$1');
|
|
$routes->get('label/dispatch/(:any)/(:any)', 'LabelController::dispatch/$1/$2');
|
|
$routes->get('label/all/(:any)', 'LabelController::print_all/$1');
|
|
$routes->get('print/(:num)', 'Home::printReport/$1', ['filter' => 'role:0,1,2,3,4']);
|
|
|
|
|
|
// --- API Group ---
|
|
$routes->group('api', function ($routes) {
|
|
|
|
// Users Management - Only Superuser (0) and Admin (1)
|
|
$routes->group('users', ['filter' => 'role:0,1'], function ($routes) {
|
|
$routes->get('', 'UsersController::index');
|
|
$routes->post('', 'UsersController::create');
|
|
$routes->patch('(:any)', 'UsersController::update/$1');
|
|
$routes->delete('(:any)', 'UsersController::delete/$1');
|
|
});
|
|
|
|
// Requests - All Roles (0,1,2,3,4)
|
|
$routes->group('requests', ['filter' => 'role:0,1,2,3,4'], function ($routes) {
|
|
$routes->get('', 'RequestsController::index');
|
|
$routes->get('(:any)/audit', 'ApiRequestsAuditController::show/$1');
|
|
$routes->post('validate/(:any)', 'RequestsController::val/$1');
|
|
$routes->delete('validate/(:any)', 'RequestsController::unval/$1');
|
|
});
|
|
|
|
// Validate API - Lab (2), Admin (1), Superuser (0)
|
|
$routes->group('validate', ['filter' => 'role:0,1,2'], function ($routes) {
|
|
$routes->get('unvalidated', 'ApiValidateController::unvalidated');
|
|
});
|
|
|
|
// Samples
|
|
$routes->group('samples', function ($routes) {
|
|
// Collect & Show - All Roles
|
|
$routes->group('', ['filter' => 'role:0,1,2,3,4'], function ($routes) {
|
|
$routes->post('collect/(:any)', 'SamplesController::collect/$1');
|
|
$routes->get('(:any)', 'SamplesController::show/$1');
|
|
});
|
|
|
|
// Unreceive - Only Superuser (0) and Admin (1)
|
|
$routes->group('', ['filter' => 'role:0,1'], function ($routes) {
|
|
$routes->delete('receive/(:any)', 'SamplesController::unreceive/$1');
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
|
|
// --- Page Routes ---
|
|
|
|
$routes->group('superuser', ['filter' => 'role:0'], function ($routes) {
|
|
$routes->get('', 'Pages\SuperuserController::index');
|
|
$routes->get('users', 'Pages\SuperuserController::users');
|
|
$routes->get('validate', 'Pages\SuperuserController::validatePage');
|
|
});
|
|
|
|
$routes->group('admin', ['filter' => 'role:1'], function ($routes) {
|
|
$routes->get('', 'Pages\AdminController::index');
|
|
$routes->get('users', 'Pages\AdminController::users');
|
|
$routes->get('validate', 'Pages\AdminController::validationPage');
|
|
});
|
|
|
|
$routes->group('lab', ['filter' => 'role:2'], function ($routes) {
|
|
$routes->get('', 'Pages\LabController::index');
|
|
$routes->get('validate', 'Pages\LabController::validationPage');
|
|
});
|
|
|
|
$routes->group('phlebo', ['filter' => 'role:3'], function ($routes) {
|
|
$routes->get('', 'Pages\PhlebotomistController::index');
|
|
});
|
|
|
|
$routes->group('cs', ['filter' => 'role:4'], function ($routes) {
|
|
$routes->get('', 'Pages\CsController::index');
|
|
});
|
|
|
|
$routes->get('/dummypage', 'Home::dummyPage');
|
|
|
|
// Report generation - Lab, Admin, Superuser, CS
|
|
$routes->group('report', ['filter' => 'role:0,1,2,4'], function ($routes) {
|
|
$routes->get('(:num)', 'ReportController::generate/$1');
|
|
$routes->get('(:num)/eng', 'ReportController::generate/$1/1');
|
|
$routes->get('(:num)/print', 'ReportController::print/$1');
|
|
$routes->get('(:num)/print/eng', 'ReportController::print/$1/1');
|
|
});
|
|
|
|
// Keep backward compatibility - updated filter
|
|
$routes->get('print/(:num)', 'ReportController::generate/$1', ['filter' => 'role:0,1,2,3,4']);
|