add custom report functionality

This commit is contained in:
mahdahar 2026-03-03 15:49:56 +07:00
parent 1440f01024
commit 7dbc288553
6 changed files with 1051 additions and 5 deletions

View File

@ -24,6 +24,7 @@ $routes->get('/entry/daily', 'PageController::entryDaily', ['filter' => AuthFilt
$routes->get('/entry/monthly', 'PageController::entryMonthly', ['filter' => AuthFilter::class]); $routes->get('/entry/monthly', 'PageController::entryMonthly', ['filter' => AuthFilter::class]);
$routes->get('/report', 'PageController::report', ['filter' => AuthFilter::class]); $routes->get('/report', 'PageController::report', ['filter' => AuthFilter::class]);
$routes->get('/report/merged', 'PageController::reportMerged', ['filter' => AuthFilter::class]); $routes->get('/report/merged', 'PageController::reportMerged', ['filter' => AuthFilter::class]);
$routes->get('/report/custom1', 'PageController::reportCustom1', ['filter' => AuthFilter::class]);
$routes->group('api', ['filter' => AuthFilter::class], function ($routes) { $routes->group('api', ['filter' => AuthFilter::class], function ($routes) {
$routes->get('dashboard/recent', 'Api\DashboardApiController::getRecent'); $routes->get('dashboard/recent', 'Api\DashboardApiController::getRecent');

View File

@ -259,8 +259,8 @@ class EntryApiController extends BaseController
return $this->failValidationErrors(['test_id' => 'Required', 'month' => 'Required']); return $this->failValidationErrors(['test_id' => 'Required', 'month' => 'Required']);
} }
// Get test details // Get test details with department name
$test = $this->testModel->find($testId); $test = $this->testModel->findWithDept($testId);
if (!$test) { if (!$test) {
return $this->failNotFound('Test not found'); return $this->failNotFound('Test not found');
} }
@ -318,6 +318,7 @@ class EntryApiController extends BaseController
'controlName' => $c['controlName'], 'controlName' => $c['controlName'],
'lot' => $c['lot'], 'lot' => $c['lot'],
'producer' => $c['producer'], 'producer' => $c['producer'],
'expDate' => $c['expDate'],
'mean' => $c['mean'], 'mean' => $c['mean'],
'sd' => $c['sd'], 'sd' => $c['sd'],
'results' => $resultsArray 'results' => $resultsArray
@ -327,8 +328,11 @@ class EntryApiController extends BaseController
$data = [ $data = [
'test' => [ 'test' => [
'testId' => $test['testId'], 'testId' => $test['testId'],
'testCode' => $test['testCode'] ?? null,
'testName' => $test['testName'], 'testName' => $test['testName'],
'testUnit' => $test['testUnit'] 'testUnit' => $test['testUnit'],
'testMethod' => $test['testMethod'] ?? null,
'deptName' => $test['deptName'] ?? null
], ],
'month' => $month, 'month' => $month,
'controls' => $controlsWithData 'controls' => $controlsWithData

View File

@ -47,7 +47,11 @@ class PageController extends BaseController {
return view('report/view'); return view('report/view');
} }
public function reportMerged() { public function reportMerged() {
return view('report/merged'); return view('report/merged');
} }
public function reportCustom1() {
return view('report/custom1');
}
} }

View File

@ -53,4 +53,26 @@ class MasterTestsModel extends BaseModel {
return $builder->get()->getResultArray(); return $builder->get()->getResultArray();
} }
public function findWithDept($testId) {
$builder = $this->builder();
$builder->select('
master_tests.test_id as testId,
master_tests.test_code as testCode,
master_tests.test_name as testName,
master_tests.test_unit as testUnit,
master_tests.test_method as testMethod,
master_tests.cva,
master_tests.ba,
master_tests.tea,
master_depts.dept_name as deptName
');
$builder->join('master_depts', 'master_depts.dept_id = master_tests.dept_id', 'left');
$builder->where('master_tests.test_id', $testId);
$builder->where('master_tests.deleted_at', null);
$builder->groupBy('master_tests.test_id, master_depts.dept_name');
return $builder->get()->getRowArray();
}
} }

View File

@ -159,13 +159,20 @@
Standard Report Standard Report
</a> </a>
</li> </li>
<li class="mb-1 min-h-0"> <li class="mb-1 min-h-0">
<a class="flex items-center gap-3 px-4 py-3 rounded-lg <?= uri_string() === 'report/merged' ? 'bg-primary/10 text-primary font-medium' : 'opacity-70 hover:bg-base-200 hover:opacity-100' ?> transition-colors h-full" <a class="flex items-center gap-3 px-4 py-3 rounded-lg <?= uri_string() === 'report/merged' ? 'bg-primary/10 text-primary font-medium' : 'opacity-70 hover:bg-base-200 hover:opacity-100' ?> transition-colors h-full"
href="<?= base_url('/report/merged') ?>"> href="<?= base_url('/report/merged') ?>">
<i class="fa-solid fa-chart-simple w-5"></i> <i class="fa-solid fa-chart-simple w-5"></i>
Merged Report Merged Report
</a> </a>
</li> </li>
<li class="mb-1 min-h-0">
<a class="flex items-center gap-3 px-4 py-3 rounded-lg <?= uri_string() === 'report/custom1' ? 'bg-primary/10 text-primary font-medium' : 'opacity-70 hover:bg-base-200 hover:opacity-100' ?> transition-colors h-full"
href="<?= base_url('/report/custom1') ?>">
<i class="fa-solid fa-file-lines w-5"></i>
Custom 1
</a>
</li>
</ul> </ul>
</aside> </aside>

1008
app/Views/report/custom1.php Normal file

File diff suppressed because it is too large Load Diff