diff --git a/app/Controllers/Activities.php b/app/Controllers/Activities.php
index 9ffc600..809b552 100644
--- a/app/Controllers/Activities.php
+++ b/app/Controllers/Activities.php
@@ -294,6 +294,19 @@ class Activities extends Controller {
$results = $query->getResultArray();
$data['reff'] = $results;
}
+
+ // Untuk Sertifikat
+ $certificatesArray = [];
+ $certificateModel = new CertificateModel();
+ $results = $certificateModel->select('cert_type')
+ ->where('actid', $actid)
+ ->findAll();
+ if (!empty($results)) {
+ foreach ($results as $row) {
+ $certificatesArray[] = $row['cert_type'];
+ }
+ $data['activities'][0]['cert_types'] = $certificatesArray;
+ }
$sql = "select actdetailid, acttextid, textvalue from actdetail where actid=$actid order by acttextid, createdate desc";
$query = $db->query($sql);
@@ -450,31 +463,13 @@ class Activities extends Controller {
$query = $db->query($sql);
}
- // UNTUK CERTIFICATES
- $sql = "SELECT prl.productaliastext as productname, pr.productnumber as snnumber, st.sitename
- FROM `activities` act
- LEFT JOIN sites st ON st.siteid = act.siteid
- LEFT JOIN products pr ON pr.productid = act.productid
- LEFT JOIN productcatalog prc ON prc.catalogid = pr.catalogid
- LEFT JOIN productalias prl ON prl.productaliasid = prc.productaliasid
- WHERE act.actid = $actid";
- $query = $db->query($sql);
- $result = $query->getRowArray();
- if ($this->request->getVar('maintenance')) { // Maintenance
- $issuedDate = $data['new_value']['closedate'] ?? null;
- $expiredDate = date('Y-m-d', strtotime($issuedDate . ' + 6 months'));
- $insertCert = [
- 'cert_name' => "MC_" . ($result['productname'] ?? 'UNKNOWN') . "_" . ($result['snnumber'] ?? '0') . "_" . $actid,
- 'cert_type' => "MC",
- 'actid' => $actid,
- 'issued_date' => $issuedDate,
- 'expired_date' => $expiredDate,
- 'user_id' => $data['new_value']['userid_owner']
- ];
- $certificateModel = new CertificateModel();
- $certificateModel->insert($insertCert);
- }
+ // UNTUK CERTIFICATES
+ if ($this->request->getVar('maintenance')) { // Jika Maintenance Dicentang
+ $issuedDate = $data['new_value']['closedate'] ?? null;
+ $userid_owner = $data['new_value']['userid_owner'];
+ $this->createCertificateMaintenance($actid, $issuedDate, $userid_owner);
+ }
} else {
// update edit
@@ -549,6 +544,19 @@ class Activities extends Controller {
$query = $db->query($sql);
}
}
+
+
+ // UNTUK CERTIFICATES
+ if ($this->request->getVar('maintenance')) { // Maintenance
+ // Maintenance sertifikat create or update
+ $issuedDate = $data['new_value']['closedate'] ?? null;
+ $userid_owner = $data['new_value']['userid_owner'];
+ $this->updateCertificateMaintenance($actid, $issuedDate, $userid_owner);
+ } else {
+ // Hapus softdelete sertifikat
+ $this->deleteCertificateMaintenance($actid);
+ }
+
}
// act by consumables
@@ -1054,7 +1062,17 @@ class Activities extends Controller {
$data['content'] = $this->act_content($actid);
$db = \Config\Database::connect();
- $sql = "select attachment from activities where actid='$actid'";
+
+ $sql = "SELECT cert_name,file_url from certificates where actid=$actid AND deleted_at IS NULL";
+ $query = $db->query($sql);
+ $result = $query->getResultArray();
+ if (!empty($result)){
+ $data['certificates'] = $result;
+ } else {
+ $data['certificates'] = [];
+ }
+
+ $sql = "SELECT attachment from activities where actid='$actid'";
$query = $db->query($sql);
$result = $query->getResultArray();
$data['attachment'] = $result[0];
@@ -1647,4 +1665,119 @@ class Activities extends Controller {
return view('invtrans_index', $data);
}
+
+ public function createCertificateMaintenance ($actid, $issuedDate, $userid_owner) {
+
+ $db = \Config\Database::connect();
+ $sql = "SELECT prl.productaliastext as productname, pr.productnumber as snnumber, st.sitename
+ FROM `activities` act
+ LEFT JOIN sites st ON st.siteid = act.siteid
+ LEFT JOIN products pr ON pr.productid = act.productid
+ LEFT JOIN productcatalog prc ON prc.catalogid = pr.catalogid
+ LEFT JOIN productalias prl ON prl.productaliasid = prc.productaliasid
+ WHERE act.actid = $actid";
+ $query = $db->query($sql);
+ $result = $query->getRowArray();
+
+ $expiredDate = $issuedDate ? date('Y-m-d', strtotime($issuedDate . ' + 6 months')) : null;
+ $insertCert = [
+ 'cert_name' => "MC_" . ($result['productname'] ?? 'UNKNOWN') . "_" . ($result['snnumber'] ?? '0') . "_" . $actid,
+ 'cert_type' => "MC",
+ 'actid' => $actid,
+ 'issued_date' => $issuedDate,
+ 'expired_date' => $expiredDate,
+ 'user_id' => $userid_owner
+ ];
+ $certificateModel = new CertificateModel();
+ $certificateModel->insert($insertCert);
+ }
+ public function updateCertificateMaintenance($actid, $issuedDate, $userid_owner) {
+ $certificateModel = new CertificateModel();
+
+ // 1. Cek apakah data sudah ada menggunakan findAll()
+ $existingCerts = $certificateModel->withDeleted()
+ ->select('status')
+ ->where('actid', $actid)
+ ->findAll();
+
+ // Variabel penanda apakah data sudah pernah ada di database
+ $isDataExist = !empty($existingCerts);
+
+ if ($isDataExist) {
+ // Ambil semua nilai 'status' dari array hasil findAll()
+ $statuses = array_column($existingCerts, 'status');
+
+ // Jika di antara status tersebut ada yang 'validated', hentikan proses
+ if (in_array('validated', $statuses)) {
+ return;
+ }
+ }
+
+ // 2. Definisi $db (Pastikan instance database sudah dipanggil)
+ $db = \Config\Database::connect();
+
+ // Query binding (?) untuk keamanan
+ $sql = "SELECT prl.productaliastext as productname, pr.productnumber as snnumber, st.sitename
+ FROM `activities` act
+ LEFT JOIN sites st ON st.siteid = act.siteid
+ LEFT JOIN products pr ON pr.productid = act.productid
+ LEFT JOIN productcatalog prc ON prc.catalogid = pr.catalogid
+ LEFT JOIN productalias prl ON prl.productaliasid = prc.productaliasid
+ WHERE act.actid = ?";
+ $query = $db->query($sql, [$actid]);
+ $result = $query->getRowArray();
+
+ // 3. Setelan Tanggal
+ $validIssuedDate = $issuedDate;
+ $expiredDate = $validIssuedDate ? date('Y-m-d', strtotime($validIssuedDate . ' + 6 months')) : null;
+
+ // Siapkan Payload
+ $certPayload = [
+ 'cert_name' => "MC_" . ($result['productname'] ?? 'UNKNOWN') . "_" . ($result['snnumber'] ?? '0') . "_" . $actid,
+ 'cert_type' => "MC",
+ 'actid' => $actid,
+ 'issued_date' => $validIssuedDate,
+ 'expired_date' => $expiredDate,
+ 'user_id' => $userid_owner,
+ 'deleted_at' => null
+ ];
+
+ // 4. Logika Insert atau Update menggunakan penanda $isDataExist
+ if (!$isDataExist) {
+ // Jika data belum ada sama sekali (array kosong), eksekusi INSERT
+ $certificateModel->insert($certPayload);
+ } else {
+ // Jika data sudah ada, eksekusi UPDATE
+ // Catatan: Karena bisa ada lebih dari 1 data dengan actid yang sama (karena findAll),
+ // Update ini akan menimpa semua baris yang punya actid tersebut.
+ $certificateModel->withDeleted()
+ ->where('actid', $actid)
+ ->set($certPayload)
+ ->update();
+ }
+ }
+ public function deleteCertificateMaintenance($actid) {
+ $certificateModel = new CertificateModel();
+
+ // 1. Cek apakah data sudah ada menggunakan findAll()
+ $existingCerts = $certificateModel->withDeleted()
+ ->select('status')
+ ->where('actid', $actid)
+ ->findAll();
+
+ // Variabel penanda apakah data sudah pernah ada di database
+ $isDataExist = !empty($existingCerts);
+
+ if ($isDataExist) {
+ // Ambil semua nilai 'status' dari array hasil findAll()
+ $statuses = array_column($existingCerts, 'status');
+
+ // Jika di antara status tersebut ada yang 'validated', hentikan proses
+ if (in_array('validated', $statuses)) {
+ return;
+ }
+ }
+
+ $certificateModel->where('actid', $actid)->delete();
+ }
}
\ No newline at end of file
diff --git a/app/Controllers/Certificates.php b/app/Controllers/Certificates.php
index 6945779..1dc4d26 100644
--- a/app/Controllers/Certificates.php
+++ b/app/Controllers/Certificates.php
@@ -503,9 +503,18 @@ class Certificates extends BaseController {
->find($certid);
if (!empty($checkFinal['user_validation_at']) &&
- !empty($checkFinal['spv_validation_at']) &&
- !empty($checkFinal['manager_validation_at'])) {
+ (!empty($checkFinal['spv_validation_at']) ||
+ !empty($checkFinal['manager_validation_at']))) {
+ // Check
+ $checkStatus = $certificateModel->select('status')->find($certid);
+ if ($checkStatus['status'] == 'validated') {
+ return $this->response->setJSON([
+ 'success' => true,
+ 'message' => 'Semua validasi telah dilakukan'
+ ]);
+ }
+
// Update Status Utama
$certificateModel->update($certid, ['status' => 'validated']);
@@ -514,6 +523,7 @@ class Certificates extends BaseController {
certificates.cert_name,
certificates.issued_date,
certificates.expired_date,
+ certificates.status,
productcatalog.productname as productname,
sites.sitename as sitename,
products.productnumber,
@@ -539,7 +549,9 @@ class Certificates extends BaseController {
->join('productcatalog', 'productcatalog.catalogid = products.catalogid', 'left')
->where('certificates.cert_id', $certid)
->first();
+
$certificate = [
+ 'status' => $latestData['status'],
'certname' => $latestData['cert_name'],
'sitename' => $latestData['sitename'],
'certtype' => $latestData['cert_type'],
@@ -547,17 +559,19 @@ class Certificates extends BaseController {
'userposition' => $latestData['user_position'],
'productname' => $latestData['productname'],
'productnumber' => $latestData['productnumber'],
- 'issueddate' => $latestData['issued_date'],
- 'expireddate' => $latestData['expired_date']
+ 'issueddate' => date('d-M-Y', strtotime($latestData['issued_date'])),
+ 'expireddate' => date('d-M-Y', strtotime($latestData['expired_date'])),
+ 'exportToPDF' => true
];
try {
- $pdfAfterValidation = $this->savePdf($certificate, $latestData['cert_type']); // Simpan ke PDF
+
+ $pdfAfterValidation = $this->savePdf($certificate, $latestData['cert_type'], $latestData['cert_number']); // Simpan ke PDF
$certificateModel->update($certid, [ // Update ke tabel certificates
'file_location' => $pdfAfterValidation['file_relative'],
'metadata_title' => $pdfAfterValidation['metadata_title'],
- 'metadata_keywords' => $pdfAfterValidation['metadata_keywords'],
+ 'metadata_keywords' => $pdfAfterValidation['metadata_keywords'].";".base_url('certificates/number/'.$latestData['cert_number']),
'file_url' => base_url('certificates/number/'.$latestData['cert_number'])
]);
@@ -583,7 +597,7 @@ class Certificates extends BaseController {
return $this->response->setJSON(['success' => false, 'message' => 'Gagal memperbarui data.']);
}
- public function savePdf($certificate, $certificateType, $productType = null) {
+ public function savePdf($certificate, $certificateType, $cert_number, $productType = null) {
$certificateType = strtolower($certificateType);
switch ($certificateType) {
@@ -661,7 +675,7 @@ class Certificates extends BaseController {
// Metadata
$dompdf->addInfo('Title', $certificate['certname']);
- $dompdf->addInfo('Keywords', $certificate['certtype'] . ' Certificate');
+ $dompdf->addInfo('Keywords', $certificate['certtype'] . ' Certificate;'.base_url('certificates/number/'.$cert_number));
// Folder
$uploadDir = FCPATH . 'upload/documents/' . $subDir;
diff --git a/app/Models/CertificateModel.php b/app/Models/CertificateModel.php
index ed3b77d..8015d32 100644
--- a/app/Models/CertificateModel.php
+++ b/app/Models/CertificateModel.php
@@ -16,7 +16,7 @@ class CertificateModel extends Model
'cert_number', 'cert_name', 'cert_type', 'actid', 'issued_date',
'expired_date', 'user_id', 'user_validation_at', 'spv_id',
'spv_validation_at', 'manager_id', 'manager_validation_at',
- 'status', 'file_location', 'file_url', 'metadata_title', 'metadata_keywords'
+ 'status', 'file_location', 'file_url', 'metadata_title', 'metadata_keywords', 'deleted_at'
];
// Timestamps
diff --git a/app/Views/activities_detail.php b/app/Views/activities_detail.php
index 8dca804..3dcc4f3 100644
--- a/app/Views/activities_detail.php
+++ b/app/Views/activities_detail.php
@@ -11,6 +11,12 @@ foreach ($file_array as $value){
echo "$value
";
$i++;
}
+$i = 1;
+// foreach ($certificates as $value){
+// if($i == 1) {echo "Certificates :
";}
+// echo "".$value['cert_name']."
";
+// $i++;
+// }
echo "
| No | -Certificate | + +Certificate | Act Report | Issue Date | Expiry Date | -Status | -Validation | -Action | +Status | +Validation | +Action |
|---|