Update notifikasi sertifikat - view cells

This commit is contained in:
mikael-zakaria 2026-04-07 11:27:18 +07:00
parent ba1cfce243
commit 4496d75a4e
3 changed files with 137 additions and 9 deletions

View File

@ -0,0 +1,85 @@
<?php
namespace App\Cells;
use CodeIgniter\View\Cells\Cell;
class SidebarCertificateCell extends Cell {
public $countAll = 0;
public $countUtc;
public $countMc;
public $countIc;
public function mount() {
$userPosId = session()->get('userposid');
$userId = session()->get('userid');
$db = \Config\Database::connect();
// Hanya Untuk Manager TSO
if ($userPosId == 1 && $userId == 1) {
// Eksekusi HANYA 1 QUERY untuk mengambil semua perhitungan
$result = $db->table('certificates')
->select("
SUM(CASE WHEN cert_type = 'UTC' THEN 1 ELSE 0 END) as totalUtc,
SUM(CASE WHEN cert_type = 'MC' THEN 1 ELSE 0 END) as totalMc,
SUM(CASE WHEN cert_type = 'IC' THEN 1 ELSE 0 END) as totalIc
")
->where('certificates.status', 'unvalidated')
->Where('certificates.manager_validation_at', null)
->get()
->getRow();
// Assign hasil ke property class, pastikan menjadi integer (fallback ke 0 jika tabel kosong)
$this->countUtc = (int) ($result->totalUtc ?? 0);
$this->countMc = (int) ($result->totalMc ?? 0);
$this->countIc = (int) ($result->totalIc ?? 0);
// Untuk SPV IVD
} else if ($userPosId == 2) {
// Eksekusi HANYA 1 QUERY untuk mengambil semua perhitungan
$result = $db->table('certificates')
->select("
SUM(CASE WHEN certificates.cert_type = 'UTC' THEN 1 ELSE 0 END) as totalUtc,
SUM(CASE WHEN certificates.cert_type = 'MC' THEN 1 ELSE 0 END) as totalMc,
SUM(CASE WHEN certificates.cert_type = 'IC' THEN 1 ELSE 0 END) as totalIc
")
->join('users', 'users.userid = certificates.user_id', 'left')
->where('users.reportto', $userId)
->where('certificates.status', 'unvalidated')
->Where('certificates.spv_validation_at', null)
->get()
->getRow();
// Assign hasil ke property class, pastikan menjadi integer (fallback ke 0 jika tabel kosong)
$this->countUtc = (int) ($result->totalUtc ?? 0);
$this->countMc = (int) ($result->totalMc ?? 0);
$this->countIc = (int) ($result->totalIc ?? 0);
// Untuk TSO IVD
} else if ($userPosId == 4) {
// Eksekusi HANYA 1 QUERY untuk mengambil semua perhitungan
$result = $db->table('certificates')
->select("
SUM(CASE WHEN cert_type = 'UTC' THEN 1 ELSE 0 END) as totalUtc,
SUM(CASE WHEN cert_type = 'MC' THEN 1 ELSE 0 END) as totalMc,
SUM(CASE WHEN cert_type = 'IC' THEN 1 ELSE 0 END) as totalIc
")
->where('user_id', $userId)
->where('user_validation_at', null)
->get()
->getRow();
// Assign hasil ke property class, pastikan menjadi integer (fallback ke 0 jika tabel kosong)
$this->countUtc = (int) ($result->totalUtc ?? 0);
$this->countMc = (int) ($result->totalMc ?? 0);
$this->countIc = (int) ($result->totalIc ?? 0);
}
// Hitung total keseluruhan di level PHP, bukan di Database
$this->countAll = $this->countUtc + $this->countMc + $this->countIc;
}
}

View File

@ -0,0 +1,50 @@
<?php
$certificateNotification = '';
$certificateNotificationUtc = '';
$certificateNotificationMc = '';
$certificateNotificationIc = '';
if ($countAll > 0) {
$certificateNotification = "<span><i class='fa-solid fa-circle-exclamation'></i></span>";
}
if ($countUtc > 0) {
$certificateNotificationUtc = "<span class='badge bg-warning text-dark px-2'>$countUtc</span>";
}
if ($countMc > 0) {
$certificateNotificationMc = "<span class='badge bg-warning text-dark px-2'>$countMc</span>";
}
if ($countIc > 0) {
$certificateNotificationIc = "<span class='badge bg-warning text-dark px-2'>$countIc</span>";
}
?>
<li>
<a class="has-arrow waves-effect waves-dark d-flex justify-content-between align-items-center" href='javascript:void(0)' aria-expanded="false">
<span>
<i class="fa-solid fa-certificate"></i><span class='hide-menu'>Certificates</span>
</span>
<?= $certificateNotification ?>
</a>
<ul aria-expanded="false" class="collapse">
<li>
<a href="<?=base_url();?>certificates/training" class="d-flex justify-content-between align-items-center">
Training
<?= $certificateNotificationUtc ?>
</a>
</li>
<li>
<a href="<?=base_url();?>certificates/maintenance" class="d-flex justify-content-between align-items-center">
Maintenance
<?= $certificateNotificationMc ?>
</a>
</li>
<li>
<a href="<?=base_url();?>certificates/installation" class="d-flex justify-content-between align-items-center">
Installation
<?= $certificateNotificationIc ?>
</a>
</li>
<!-- <li><a href="<?=base_url();?>certificates/calibration">Callibration</a></li> -->
<!-- <li><a href="<?=base_url();?>certificates/official-report">Official Report</a></li> -->
</ul>
</li>

View File

@ -38,15 +38,8 @@
</ul>
</li>
<li> <a class="has-arrow waves-effect waves-dark" href='javascript:void(0)' aria-expanded="false"> <i class="fa-solid fa-certificate"></i><span class='hide-menu'>Certificates</span> </a>
<ul aria-expanded="false" class="collapse">
<li><a href="<?=base_url();?>certificates/training">Training</a></li>
<li><a href="<?=base_url();?>certificates/maintenance">Maintenance</a></li>
<li><a href="<?=base_url();?>certificates/installation">Installation</a></li>
<!-- <li><a href="<?=base_url();?>certificates/calibration">Callibration</a></li> -->
<!-- <li><a href="<?=base_url();?>certificates/official-report">Official Report</a></li> -->
</ul>
</li>
<!-- Menu Menggunakan Teknik View Cell Yang Ada Pada app/Cells -->
<?= view_cell('SidebarCertificateCell') ?>
<?php if ( !($isTSM || $isPS) ): ?>
<li> <a class="waves-effect waves-dark" href='<?=base_url();?>contacts' aria-expanded="false"> <i class="fa-solid fa-address-book"></i><span class="hide-menu">Contact</span></a> </li>