From f2ebbaaec74f05131daae82fa7f344e836f98590 Mon Sep 17 00:00:00 2001 From: mikael-zakaria Date: Thu, 23 Apr 2026 09:26:04 +0700 Subject: [PATCH] Perbaikan alur sertifikat SPV --- app/Controllers/Activities.php | 24 ++++--------- app/Controllers/Certificates.php | 59 ++++++++++++-------------------- 2 files changed, 28 insertions(+), 55 deletions(-) diff --git a/app/Controllers/Activities.php b/app/Controllers/Activities.php index 3737172..40e0d74 100644 --- a/app/Controllers/Activities.php +++ b/app/Controllers/Activities.php @@ -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(); diff --git a/app/Controllers/Certificates.php b/app/Controllers/Certificates.php index 73eefe9..f0ce7db 100644 --- a/app/Controllers/Certificates.php +++ b/app/Controllers/Certificates.php @@ -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,