Merge pull request 'Perbaikan alur sertifikat SPV' (#7) from mikael-zakaria/crm-summit:fix/spv-certificates into main

Reviewed-on: #7
Reviewed-by: mahdahar <89adham@gmail.com>
This commit is contained in:
mahdahar 2026-04-23 09:33:02 +07:00
commit e0df9c6b1d
2 changed files with 28 additions and 55 deletions

View File

@ -671,22 +671,6 @@ class Activities extends Controller {
} }
// // UNTUK CERTIFICATES // // 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; $reqMaintenance = $this->request->getPost('maintenance') !== null;
$reqInstallation = $this->request->getPost('installation') !== null; $reqInstallation = $this->request->getPost('installation') !== null;
$reqTraining = $this->request->getPost('training') !== 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['cert_name'] = "UTC_" . ($result['productname'] ?? 'UNKNOWN') . "_" . $name . "_" . $actid;
$insertCert['issued_date'] = $issued_date; $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); $certificateModel->insert($insertCert);
$certid = $certificateModel->getInsertID(); $certid = $certificateModel->getInsertID();

View File

@ -48,8 +48,10 @@ class Certificates extends BaseController {
// 2. Filter berdasarkan Role // 2. Filter berdasarkan Role
if (in_array($userPosId, [1, 3, 5])) { // Manager & IT: Tidak perlu filter tambahan (lihat semua) 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 } else if ($userPosId == 2) { // SPV: Melihat data user yang "reportto"-nya adalah ID supervisor ini
$builder->groupStart();
$builder->where('users.reportto', $userId); $builder->where('users.reportto', $userId);
$builder->Orwhere('certificates.user_id', $userId); $builder->Orwhere('certificates.user_id', $userId);
$builder->groupEnd();
} else if ($userPosId == 4) { // TSOIVD: Hanya melihat data milik sendiri } else if ($userPosId == 4) { // TSOIVD: Hanya melihat data milik sendiri
$builder->where('certificates.user_id', $userId); $builder->where('certificates.user_id', $userId);
} else {// Role lain: Tidak diberi akses } else {// Role lain: Tidak diberi akses
@ -214,8 +216,10 @@ class Certificates extends BaseController {
// 2. Filter berdasarkan Role // 2. Filter berdasarkan Role
if (in_array($userPosId, [1, 3, 5])) { // Manager & IT: Tidak perlu filter tambahan (lihat semua) 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 } else if ($userPosId == 2) { // SPV: Melihat data user yang "reportto"-nya adalah ID supervisor ini
$builder->groupStart();
$builder->where('users.reportto', $userId); $builder->where('users.reportto', $userId);
$builder->Orwhere('certificates.user_id', $userId); $builder->Orwhere('certificates.user_id', $userId);
$builder->groupEnd();
} else if ($userPosId == 4) { // TSOIVD: Hanya melihat data milik sendiri } else if ($userPosId == 4) { // TSOIVD: Hanya melihat data milik sendiri
$builder->where('certificates.user_id', $userId); $builder->where('certificates.user_id', $userId);
} else {// Role lain: Tidak diberi akses } else {// Role lain: Tidak diberi akses
@ -384,8 +388,10 @@ class Certificates extends BaseController {
// 2. Filter berdasarkan Role // 2. Filter berdasarkan Role
if (in_array($userPosId, [1, 3, 5])) { // Manager & IT: Tidak perlu filter tambahan (lihat semua) 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 } else if ($userPosId == 2) { // SPV: Melihat data user yang "reportto"-nya adalah ID supervisor ini
$builder->groupStart();
$builder->where('users.reportto', $userId); $builder->where('users.reportto', $userId);
$builder->Orwhere('certificates.user_id', $userId); $builder->Orwhere('certificates.user_id', $userId);
$builder->groupEnd();
} else if ($userPosId == 4) { // TSOIVD: Hanya melihat data milik sendiri } else if ($userPosId == 4) { // TSOIVD: Hanya melihat data milik sendiri
$builder->where('certificates.user_id', $userId); $builder->where('certificates.user_id', $userId);
} else {// Role lain: Tidak diberi akses } else {// Role lain: Tidak diberi akses
@ -724,13 +730,22 @@ class Certificates extends BaseController {
// 4. Cek apakah ini validasi terakhir? // 4. Cek apakah ini validasi terakhir?
// Ambil ulang data terbaru (cukup kolom validation saja untuk efisiensi) // Ambil ulang data terbaru (cukup kolom validation saja untuk efisiensi)
$checkFinal = $certificateModel->select('user_validation_at, spv_validation_at, manager_validation_at') // $checkFinal = $certificateModel->select('user_validation_at, spv_validation_at, manager_validation_at')
->find($certid); // ->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']) && // if (!empty($checkFinal['user_validation_at']) &&
(!empty($checkFinal['spv_validation_at']) || // (!empty($checkFinal['spv_validation_at']) ||
!empty($checkFinal['manager_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 // Check
$checkStatus = $certificateModel->select('status')->find($certid); $checkStatus = $certificateModel->select('status')->find($certid);
if ($checkStatus['status'] == 'validated') { if ($checkStatus['status'] == 'validated') {
@ -743,38 +758,6 @@ class Certificates extends BaseController {
// Update Status Utama // Update Status Utama
$certificateModel->update($certid, ['status' => 'validated']); $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(' $latestData = $certificateModel->select('
certificates.cert_name, certificates.cert_name,
certificates.issued_date, certificates.issued_date,