Perbaikan alur sertifikat SPV #7

Merged
mahdahar merged 1 commits from mikael-zakaria/crm-summit:fix/spv-certificates into main 2026-04-23 09:33:03 +07:00
2 changed files with 28 additions and 55 deletions

View File

@ -671,22 +671,6 @@ class Activities extends Controller {
}
// // UNTUK CERTIFICATES
// $certificateTypes = [
// 'maintenance' => 'MC',
// 'installation' => 'IC'
// ];
// $hasAnyAction = false;
// $issuedDate = $data['new_value']['closedate'] ?? null;
// $userid_owner = $data['new_value']['userid_owner'];
// foreach ($certificateTypes as $requestName => $certCode) { //perulangan untuk mengecek semua checkbox
// if ($this->request->getVar($requestName)) {
// $hasAnyAction = true; // Jika checkbox dicentang, tandai bahwa ada aksi
// $this->updateCertificate($actid, $issuedDate, $userid_owner, $certCode);
// }
// }
// if (!$hasAnyAction) { // Jika setelah dicek semua ternyata tidak ada satupun yang dicentang, baru jalankan delete
// $this->deleteCertificate($actid);
// }
$reqMaintenance = $this->request->getPost('maintenance') !== null;
$reqInstallation = $this->request->getPost('installation') !== null;
$reqTraining = $this->request->getPost('training') !== null;
@ -2134,8 +2118,14 @@ class Activities extends Controller {
$insertCert['cert_name'] = "UTC_" . ($result['productname'] ?? 'UNKNOWN') . "_" . $name . "_" . $actid;
$insertCert['issued_date'] = $issued_date;
$insertCert['user_validation_at'] = $currentTime;
if (session()->get('userposid') == 2) { //SPV
$insertCert['spv_id'] = $userid_owner;
$insertCert['spv_validation_at'] = $currentTime;
} else { // TSO
$insertCert['user_validation_at'] = $currentTime;
}
$certificateModel->insert($insertCert);
$certid = $certificateModel->getInsertID();

View File

@ -48,8 +48,10 @@ class Certificates extends BaseController {
// 2. Filter berdasarkan Role
if (in_array($userPosId, [1, 3, 5])) { // Manager & IT: Tidak perlu filter tambahan (lihat semua)
} else if ($userPosId == 2) { // SPV: Melihat data user yang "reportto"-nya adalah ID supervisor ini
$builder->groupStart();
$builder->where('users.reportto', $userId);
$builder->Orwhere('certificates.user_id', $userId);
$builder->groupEnd();
} else if ($userPosId == 4) { // TSOIVD: Hanya melihat data milik sendiri
$builder->where('certificates.user_id', $userId);
} else {// Role lain: Tidak diberi akses
@ -214,8 +216,10 @@ class Certificates extends BaseController {
// 2. Filter berdasarkan Role
if (in_array($userPosId, [1, 3, 5])) { // Manager & IT: Tidak perlu filter tambahan (lihat semua)
} else if ($userPosId == 2) { // SPV: Melihat data user yang "reportto"-nya adalah ID supervisor ini
$builder->groupStart();
$builder->where('users.reportto', $userId);
$builder->Orwhere('certificates.user_id', $userId);
$builder->groupEnd();
} else if ($userPosId == 4) { // TSOIVD: Hanya melihat data milik sendiri
$builder->where('certificates.user_id', $userId);
} else {// Role lain: Tidak diberi akses
@ -384,8 +388,10 @@ class Certificates extends BaseController {
// 2. Filter berdasarkan Role
if (in_array($userPosId, [1, 3, 5])) { // Manager & IT: Tidak perlu filter tambahan (lihat semua)
} else if ($userPosId == 2) { // SPV: Melihat data user yang "reportto"-nya adalah ID supervisor ini
$builder->groupStart();
$builder->where('users.reportto', $userId);
$builder->Orwhere('certificates.user_id', $userId);
$builder->groupEnd();
} else if ($userPosId == 4) { // TSOIVD: Hanya melihat data milik sendiri
$builder->where('certificates.user_id', $userId);
} else {// Role lain: Tidak diberi akses
@ -724,13 +730,22 @@ class Certificates extends BaseController {
// 4. Cek apakah ini validasi terakhir?
// Ambil ulang data terbaru (cukup kolom validation saja untuk efisiensi)
$checkFinal = $certificateModel->select('user_validation_at, spv_validation_at, manager_validation_at')
->find($certid);
// $checkFinal = $certificateModel->select('user_validation_at, spv_validation_at, manager_validation_at')
// ->find($certid);
$checkFinal = $certificateModel->select('us.userposid, certificates.user_validation_at, certificates.spv_validation_at, certificates.manager_validation_at')
->join('users us', 'us.userid = certificates.user_id', 'left')
->find($certid);
if (!empty($checkFinal['user_validation_at']) &&
(!empty($checkFinal['spv_validation_at']) ||
!empty($checkFinal['manager_validation_at']))) {
// if (!empty($checkFinal['user_validation_at']) &&
// (!empty($checkFinal['spv_validation_at']) ||
// !empty($checkFinal['manager_validation_at']))) {
$statusValidate = false;
if ($checkFinal['userposid'] == 1 || $checkFinal['userposid'] == 2) {
$statusValidate = !empty($checkFinal['spv_validation_at']) && !empty($checkFinal['manager_validation_at']) ;
} else if ($checkFinal['userposid'] == 4) {
$statusValidate = !empty($checkFinal['user_validation_at']) && (!empty($checkFinal['spv_validation_at']) || !empty($checkFinal['manager_validation_at']));
}
if ($statusValidate) {
// Check
$checkStatus = $certificateModel->select('status')->find($certid);
if ($checkStatus['status'] == 'validated') {
@ -743,38 +758,6 @@ class Certificates extends BaseController {
// Update Status Utama
$certificateModel->update($certid, ['status' => 'validated']);
// Baru jalankan query berat JOIN di sini untuk keperluan PDF/Notifikasi
// $latestData = $certificateModel->select('
// certificates.cert_name,
// certificates.issued_date,
// certificates.expired_date,
// certificates.file_url,
// productalias.productaliastext as productname,
// sites.sitename as sitename,
// products.productnumber,
// CASE
// WHEN certificates.cert_type = "MC" THEN "Maintenance"
// WHEN certificates.cert_type = "IC" THEN "Installation"
// WHEN certificates.cert_type = "UTC" THEN "Training"
// WHEN certificates.cert_type = "BAI" THEN "Berita Acara Instalasi"
// WHEN certificates.cert_type = "BAP" THEN "Berita Acara Penarikan"
// ELSE certificates.cert_type
// END AS cert_type,
// CONCAT(users.firstname, " ", users.lastname) AS fullname,
// userposition.texts AS user_position,
// certificates.issued_date,
// certificates.expired_date,
// certificates.cert_number -- Penting agar callback UUID tetap jalan
// ', false)
// ->join('users', 'users.userid = certificates.user_id', 'left')
// ->join('userposition', 'userposition.userposid = users.userposid', 'left')
// ->join('activities', 'activities.actid = certificates.actid', 'left')
// ->join('sites', 'sites.siteid = activities.siteid', 'left')
// ->join('products', 'products.productid = activities.productid', 'left')
// ->join('productcatalog', 'productcatalog.catalogid = products.catalogid', 'left')
// ->join('productalias', 'productalias.productaliasid = productcatalog.productaliasid', 'left')
// ->where('certificates.cert_id', $certid)
// ->first();
$latestData = $certificateModel->select('
certificates.cert_name,
certificates.issued_date,