Update Fitur Refer ID antar TSO

This commit is contained in:
mikael-zakaria 2026-02-05 10:30:48 +07:00
parent 35c948beb6
commit 7047165533
5 changed files with 363 additions and 25 deletions

View File

@ -165,6 +165,7 @@ $routes->get('/activities/newtextarea', 'Activities::newtextarea');
$routes->get('/activities/activitiesproduct/(:num)', 'Activities::activitiesproduct/$1');
$routes->get('/activities/dummy', 'Activities::dummy');
$routes->match(['get','post'],'/activities/create', 'Activities::edit/0');
$routes->match(['get','post'],'/activities/refer/(:num)', 'Activities::createrefer/$1');
$routes->match(['get','post'],'/activities/savesend', 'Activities::savesend');
$routes->match(['get','post'],'/activities/edit/(:num)', 'Activities::edit/$1');
$routes->match(['get','post'],'/activities/editsend', 'Activities::editsend');

View File

@ -26,7 +26,9 @@ class Activities extends Controller {
'MT' => 'Marketing',
'PS' => 'Product Specialist',
);
$this->data['stats'] = array('O'=>'Open', 'A'=>'Accepted', 'P'=>'Pending', 'C'=> 'Close', 'S' => 'Suspend', 'D' => 'Disable');
$this->data['stats'] = array('O'=>'Open', 'R'=>'Refer', 'A'=>'Accepted', 'P'=>'Pending', 'C'=>'Close',
// 'S'=>'Suspend', 'D'=>'Disable'
);
$this->data['actbys'] = array( 'P'=>'Product ( Equipment / System )' , 'V'=> 'Vendor', 'C'=>'Consumables / Reagent', 'O'=>'Other');
$this->data['exports'] = array('P'=>'PDF', 'E'=> 'Excel');
$this->data['acttypes'] = array(1=>'Incident Report', 2=> 'Change Request', 3=>'Project', 4=>'Support', 5=>'Maintenance', 6=>'Training', 7=>'Refurbish', 9=>'Training Customer/TSO');
@ -159,9 +161,9 @@ class Activities extends Controller {
-- OR ( a.reportdate between '$reportdate 00:00:00' and '$closedate 23:59:59' $filterquery $areaquery )
OR ( a.activitystatus='O' $filterquery $areaquery )
OR ( a.activitystatus='P' $filterquery )
OR ( a.activitystatus='R' )
GROUP BY a.actid
order by field(a.activitystatus,'O','C','R'), a.closedate desc, a.reportdate desc";
order by field(a.activitystatus,'O','R','C'), a.closedate desc, a.reportdate desc";
// $sql = "SELECT s.sitename, pc.productname, v.vendorname, u.firstname AS username, up.userposid, at.fulltext, a.*
// -- ,ad.*
// FROM
@ -191,6 +193,8 @@ class Activities extends Controller {
$data['sql'] = $sql;
$data['tampildata'] = $result;
// dd($sql);
return view('activities_index', $data);
}
@ -264,6 +268,9 @@ class Activities extends Controller {
$siteid = '';
$actby = '';
$data['actid_ref_status'] = 'disabled'; // Khusus untuk refer create
$data['reff'] = []; //Reff
if($actid != 0) {
$sql = "select * from activities where actid=$actid";
$query = $db->query($sql);
@ -272,6 +279,21 @@ class Activities extends Controller {
$siteid = $results[0]['siteid'];
$actby = $results[0]['actby'];
// Khusus Untuk Refer Edit
if ($results[0]['actid_ref'] > 0 ) {
$act_reff = $results[0]['actid_ref'];
$data['actid_ref_status'] = '';
$sql = "SELECT a.actid, a.subject, CONCAT(u.firstname,' ',u.lastname) as fullname, s.sitename
FROM activities a
LEFT JOIN sites s ON a.`siteid`=s.`siteid`
LEFT JOIN users u ON a.`userid_owner`=u.`userid`
WHERE a.actid=$act_reff";
// -- AND a.actid = $actid
$query = $db->query($sql);
$results = $query->getResultArray();
$data['reff'] = $results;
}
$sql = "select actdetailid, acttextid, textvalue from actdetail where actid=$actid order by acttextid, createdate desc";
$query = $db->query($sql);
$results = $query->getResultArray();
@ -325,8 +347,8 @@ class Activities extends Controller {
$data['unitgroup'] = $results;
$sql = "SELECT p.productid, s.sitename, pc.productname, p.productnumber FROM products p
LEFT JOIN productcatalog pc ON p.`catalogid`=pc.`catalogid`
LEFT JOIN sites s ON s.`siteid`=p.`siteid`";
LEFT JOIN productcatalog pc ON p.`catalogid`=pc.`catalogid`
LEFT JOIN sites s ON s.`siteid`=p.`siteid`";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['products'] = $results;
@ -353,14 +375,14 @@ class Activities extends Controller {
'actdetailid' => 'required'
];
$data['new_value'] = [
'actid_ref' => $this->request->getVar('actid_ref'),
'actid_ref' => (int) $this->request->getVar('actid_ref'),
'actby' => $this->request->getVar('actby'),
'siteid' => $this->request->getVar('siteid'),
'acttypeid' => $this->request->getVar('acttypeid'),
'userid_owner' => $this->request->getVar('userid_owner'),
'userid_creator' => $this->request->getVar('userid_creator'),
'activitystatus' => $this->request->getVar('activitystatus'),
'referid' => $this->request->getVar('referid'),
// 'referid' => $this->request->getVar('referid'),
'reportfrom' => $this->request->getVar('reportfrom'),
'reportdate' => $this->request->getVar('reportdate'),
'opendate' => $this->request->getVar('opendate'),
@ -389,7 +411,7 @@ class Activities extends Controller {
$data['new_value']['swversion'] = null;
}
if($this->validate($rules)) {
if ($this->validate($rules)) {
$db = \Config\Database::connect();
if($actid == 0) {
@ -431,6 +453,12 @@ class Activities extends Controller {
$activitiesModel = new ActivitiesModel();
$activitiesModel->update($actid,$data['new_value']);
// REFF UPDATE
if ($data['new_value']['activitystatus'] == 'C' && $data['new_value']['actid_ref'] > 0 ) {
// Update field 'activitystatus' menjadi 'C' untuk actid yang REF
$activitiesModel->update($data['new_value']['actid_ref'], ['activitystatus' => 'C']);
}
// clear other act by
if($actby == 'P') { // product
$sql = "update activities set vendorid=null where actid='$actid'";
@ -561,9 +589,271 @@ class Activities extends Controller {
}
}
$data['actid'] = $actid;
$data['refer_page'] = false; // Khusus untuk controller refer
return view('activities_editor',$data);
}
public function createrefer($actid) {
$db = \Config\Database::connect();
// Digunakan Untuk Get Reff ID saja
$sql = "SELECT a.actid, a.subject, CONCAT(u.firstname,' ',u.lastname) as fullname, s.sitename
FROM activities a
LEFT JOIN sites s ON a.`siteid`=s.`siteid`
LEFT JOIN users u ON a.`userid_owner`=u.`userid`
WHERE a.activitystatus='R' and a.actid=$actid";
// -- AND a.actid = $actid
$query = $db->query($sql);
$results = $query->getResultArray();
if (empty($results)) {// Jika KOSONG ALIAS TIDAK ADA REFF ID
return redirect()->to('/activities');
}
$data['reff'] = $results;
// Hilangkan Reff ID
unset($this->data['stats']['R']);
unset($this->data['stats']['A']);
unset($this->data['stats']['P']);
$data['controller'] = $this;
// $data['actid'] = $actid;
$siteid = '';
$actby = '';
$sql = "select * from activities where actid=$actid";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['activities'] = $results;
$data['activities'][0]['reportdate'] = date("Y-m-d H:i:s");
$data['activities'][0]['opendate'] = date("Y-m-d H:i:s");
$data['activities'][0]['closedate'] = null;
$data['activities'][0]['reportfrom'] = null;
$data['activities'][0]['subject'] = null;
$data['activities'][0]['activitystatus'] = 'O';
$data['activities'][0]['action'] = null;
$data['activities'][0]['userid_owner'] = $_SESSION['userid'];
$data['activities'][0]['userid_creator'] = $_SESSION['userid'];
$data['activities'][0]['attachment'] = null;
$data['actid_ref'] = $actid;
$siteid = $results[0]['siteid'];
$actby = $results[0]['actby'];
$sql = "select userid, firstname, lastname from users where enddate is null order by firstname";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['users'] = $results;
$sql = "select siteid, enddate, sitename from sites where enddate is null order by siteid";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['sites'] = $results;
$sql = "select * from acttype";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['acttype'] = $results;
$sql = "select * from acttext";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['acttext'] = $results;
$data['medias'] = $this->data['medias'];
$data['actions'] = $this->data['actions'];
$data['stats'] = $this->data['stats'];
$data['actbys'] = $this->data['actbys'];
// invtrans
$data['purposes'] = $this->data['itx_purposes'];
$data['conditions'] = $this->data['itx_conditions'];
$sql = " SELECT u.*, c.`productname`, c.catalognumber FROM unitgroup u
LEFT JOIN productcatalog c ON u.`catalogid`=c.`catalogid`
WHERE c.productaliasid<>0 AND u.`enddate` IS NULL";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['unitgroup'] = $results;
$sql = "SELECT p.productid, s.sitename, pc.productname, p.productnumber FROM products p
LEFT JOIN productcatalog pc ON p.`catalogid`=pc.`catalogid`
LEFT JOIN sites s ON s.`siteid`=p.`siteid`";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['products'] = $results;
$sql = "SELECT * FROM invcounters";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['invcounters'] = $results;
$sql = "SELECT * FROM vendors";
$query = $db->query($sql);
$results = $query->getResultArray();
$data['vendors'] = $results;
if( $this->request->getVar('siteid') != '' ) { $siteid = $this->request->getVar('siteid'); }
if ($this->request->getMethod() === 'POST') {
$rules = [
'subject' => 'required',
'siteid' => 'required',
'userid_creator' => 'required',
'reportdate' => 'required',
'activitystatus' => 'required',
'actdetailid' => 'required'
];
$data['new_value'] = [
'actid_ref' => $this->request->getVar('actid_ref'),
'actby' => $this->request->getVar('actby'),
'siteid' => $this->request->getVar('siteid'),
'acttypeid' => $this->request->getVar('acttypeid'),
'userid_owner' => $this->request->getVar('userid_owner'),
'userid_creator' => $this->request->getVar('userid_creator'),
'activitystatus' => $this->request->getVar('activitystatus'),
'reportfrom' => $this->request->getVar('reportfrom'),
'reportdate' => $this->request->getVar('reportdate'),
'opendate' => $this->request->getVar('opendate'),
'closedate' => $this->request->getVar('closedate'),
'media' => $this->request->getVar('media'),
'action' => $this->request->getVar('action'),
'subject' => $this->request->getVar('subject'),
'attachment' => $this->request->getVar('attachment'),
'actdetailid' => $this->request->getVar('actdetailid'),
'acttextid' => $this->request->getVar('acttextid'),
'textvalue' => $this->request->getVar('textvalue')
];
$actby = $this->request->getVar('actby');
if($actby == 'P') {
$data['new_value']['productid'] = $this->request->getVar('productid');
$data['new_value']['swversion'] = $this->request->getVar('swversion');
$data['new_value']['vendorid'] = null;
} elseif($actby == 'V') {
$data['new_value']['vendorid'] = $this->request->getVar('vendorid');
$data['new_value']['productid'] = null;
$data['new_value']['swversion'] = null;
} else {
$data['new_value']['vendorid'] = null;
$data['new_value']['productid'] = null;
$data['new_value']['swversion'] = null;
}
if($this->validate($rules)) {
// Cek apakah ada duplikasi data
$exists = $db->table('activities')
->where('subject', $data['new_value']['subject'])
->where('siteid', $data['new_value']['siteid'])
->where('reportdate', $data['new_value']['reportdate'])
->where('opendate', $data['new_value']['opendate'])
->where('closedate', $data['new_value']['closedate'])
->where('userid_creator', $data['new_value']['userid_creator'])
->get()->getRow();
if ($exists) { // Jika ada maka Redirect
return redirect()->to('/activities');
}
// Create Activities
$activitiesModel = new ActivitiesModel();
$activitiesModel->set('createdate', 'NOW()', FALSE);
$activitiesModel->insert($data['new_value']);
// REFF UPDATE
if ($data['new_value']['activitystatus'] == 'C') {
// Update field 'activitystatus' menjadi 'C' untuk actid yang REF
$activitiesModel->update($actid, ['activitystatus' => 'C']);
}
// Create Activities Status Log
$actid = $activitiesModel->getInsertID();
$actstatus = $data['new_value']['activitystatus'];
$userid = $data['new_value']['userid_creator'];
$sql = "INSERT INTO actstatus_log (activityid, activitystatus, userid, logdate)
VALUES ($actid,'$actstatus', $userid, NOW())";
$query = $db->query($sql);
$acttextid = $data['new_value']['acttextid'];
$textvalue = $data['new_value']['textvalue'];
foreach($data['new_value']['acttextid'] as $qindex => $qacttextid) {
$qtextvalue = $db->escapeString($textvalue[$qindex]);
$sql = "insert into actdetail (actid, acttextid, textvalue, createdate) values ('$actid','$qacttextid', '$qtextvalue', NOW())";
$query = $db->query($sql);
}
// act by consumables
$actconid_delete = $this->request->getVar('actconid_delete');
if($actconid_delete != '') {
$actconid_del = explode(' ',$actconid_delete);
foreach($actconid_del as $actconid) {
$sql = "delete from actconsumables where actconid='$actconid'";
$query = $db->query($sql);
}
}
$catalogid = $this->request->getVar('catalogid');
if(isset($catalogid)) {
$lotnumber = $this->request->getVar('lotnumber');
$sql = "INSERT INTO actconsumables ( actid, catalogid, lotnumber ) VALUES ";
foreach($catalogid as $qid => $qvalue) {
$sql .= "( '$actid' , '". $catalogid[$qid]."', '". $lotnumber[$qid]."' ),";
}
$sql = rtrim($sql, ',');
$query = $db->query($sql);
}
// invtrans
$itxid_delete = $this->request->getVar('itxid_delete');
if($itxid_delete!='') {
$itxid_del =explode(' ',$itxid_delete);
foreach($itxid_del as $itxid) {
$sql = "delete from invtrans where itxid='$itxid'";
$query = $db->query($sql);
}
}
$dests = $this->request->getVar('dests');
$origins = $this->request->getVar('origins');
if(isset($dests)) {
foreach($dests as $qdata) {
$qdata = explode("|",$qdata);
$desttype[] = $qdata[0];
$destid[] = $qdata[1];
}
foreach($origins as $qdata) {
$qdata = explode("|",$qdata);
$origtype[] = $qdata[0];
$origid[] = $qdata[1];
}
$unitgroupid = $this->request->getVar('unitgroupid');
$lotnumber = $this->request->getVar('lotnumber');
$qty = $this->request->getVar('qty');
$conditions = $this->request->getVar('conditions');
$itxdate = $this->request->getVar('itxdate');
$purpose = $this->request->getVar('purpose');
$sql = "INSERT INTO invtrans ( actid, desttype, destid, origtype, origid, unitgroupid, lotnumber, qty, conditions, purpose, itxdate ) VALUES ";
foreach($origid as $qid => $qorigid) {
$sql .= "( '$actid', '".$desttype[$qid]."', '".$destid[$qid]."', '".$origtype[$qid]."', '".$qorigid."', '".
$unitgroupid[$qid]."', '".$lotnumber[$qid]."', '".$qty[$qid]."', '".$conditions[$qid]."', '".$purpose[$qid]."', '".$itxdate[$qid]."' ),";
}
$sql = rtrim($sql, ',');
//echo "$sql";
$query = $db->query($sql);
}
$reportdate = substr($data['new_value']['reportdate'],0,10);
return redirect()->to('activities/?reportdate='.$reportdate);
} else {
$data['validation'] = $this->validator;
return view('activities_editor',$data);
}
}
$data['actid'] = $actid;
$data['actid_ref_status'] = ''; // Khusus untuk refer
$data['refer_page'] = true; // Khusus untuk controller refer
return view('activities_editor',$data);
}
public function newtextarea($textareaid=null) {
$db = \Config\Database::connect();
$sql = "select * from acttext";

View File

@ -6,7 +6,7 @@ class ActivitiesModel extends Model {
protected $table = 'activities';
protected $primaryKey = 'actid';
protected $allowedFields = [
'ref_actid', 'acttypeid', 'subject', 'actby', 'productid', 'siteid', 'vendorid',
'actid_ref', 'acttypeid', 'subject', 'actby', 'productid', 'siteid', 'vendorid',
'contactid', 'media', 'action', 'swversion',
'userid_creator', 'userid_owner', 'reportfrom', 'reportdate',
'opendate', 'closedate', 'activitystatus', 'attachment'

View File

@ -1,8 +1,9 @@
<?= $this->extend('layouts/main.php') ?>
<?= $this->section('content') ?>
<?php
// dd($reff);
$dests = array();
$origins = array();
foreach($invcounters as $qdata) {
@ -31,7 +32,7 @@ $swversion = '';
$acttypeid = '';
$userid_owner = '';
$activitystatus = 'O';
$actid_ref = '';
$actid_ref = $actid_ref ?? 0; // Ini untuk edit dan create biasa
$reportfrom = '';
$reportdate = $now;
$opendate = $now;
@ -48,6 +49,7 @@ $disable = '';
if(isset($activities)) { $data = $activities[0]; }
if(isset($new_value)) { $data = $new_value; }
if(isset($data)) {
// dd($data);
if(isset($data['actid'])) { $productid = $data['productid']; }
$siteid = $data['siteid'];
$productid = $data['productid'];
@ -56,7 +58,14 @@ if(isset($data)) {
$acttypeid = $data['acttypeid'];
$userid_owner = $data['userid_owner'];
$activitystatus = $data['activitystatus'];
$actid_ref = $data['actid_ref'];
// Untuk REFF : Menentukan mana yg dipakai untuk actid_ref
if ($refer_page) {
$actid_ref = $data['actid']; // controller refercreate dijalankan
} else {
$actid_ref = $data['actid_ref']; // controller edit dijalankan
}
$actby = $data['actby'];
$reportfrom = $data['reportfrom'];
$reportdate = $data['reportdate'];
@ -73,6 +82,7 @@ if(isset($data)) {
}
}
?>
<?php //dd($activitystatus);?>
<div class="page-wrapper">
<div class="container-fluid">
<div class="row page-titles">
@ -204,7 +214,7 @@ if(isset($data)) {
<option value="" disabled>-- Choose one --</option>
<?php
foreach ($stats as $statcode => $stat) {
if( $statcode == 'S' OR $statcode == 'D') {continue;}
// if( $statcode == 'S' OR $statcode == 'D') {continue;}
if( $statcode == $activitystatus ) { echo "<option value='$statcode' selected>$stat</option>"; }
else { echo "<option value='$statcode'>$stat</option>"; }
}
@ -214,8 +224,23 @@ if(isset($data)) {
</div>
<div class="col-12 col-md-6">
<div class="form-group">
<label for="refer" class="form-label border-start border-5 border-primary ps-1">Referred incident ID</label>
<input type="text" class="form-control form-control-sm" name="actid_ref" id="refer" value='<?=$actid_ref;?>'>
<!-- <label for="actid_ref" class="form-label border-start border-5 border-primary ps-1">Referred incident ID</label>
<input type="hidden" name="actid_reff" value">
<input type="text" class="form-control form-control-sm" disabled name="actid_reff" id="actid_reff" value="<?php //echo '(ACTID-' . $reff['actid'] . ') (' . $reff['fullname'] . ') (' . $reff['sitename'] . ') ' . $reff['subject']; ?>"> -->
<label for="actid_ref" class="form-label border-start border-5 border-primary ps-1">Referred incident ID</label>
<select name="actid_ref" id="actid_ref" class="form-select form-select-sm select2 actid_ref" <?= $actid_ref_status;?>>
<option value="">-- Choose one --</option>
<?php
foreach ($reff as $data) {
$qreffactid = $data['actid'];
$qsubject = $data['subject'];
$qfullname = $data['fullname'];
$qsitename = $data['sitename'];
if($qreffactid == $actid_ref) { echo "<option value='$qreffactid' selected>($qreffactid - $qfullname) $qsitename - $qsubject</option>"; }
else { echo "<option value='$qreffactid'>($qreffactid - $qfullname) $qsitename - $qsubject</option>"; }
}
?>
</select>
</div>
</div>
</div>
@ -656,11 +681,16 @@ $('#actby').change(function() {
})
if ($('#status').val() == 'R') {
$("#opendate").prop('disabled', false); $("#actid_ref").prop('disabled', true); $(".closedate").prop('disabled', false);
}
// disable closedate if open
// disabble closedate, opendate, useridowner if pending
$('#status').change(function() {
if(this.value=='O'){ $(".closedate").prop('disabled', true); $("#opendate").prop('disabled', false);}
else if(this.value=='P'){ $("#userid_owner").prop('disabled', true); $("#opendate").prop('disabled', true); $(".closedate").prop('disabled', true); }
if(this.value=='R' || this.value=='r'){ $("#opendate").prop('disabled', false); $(".closedate").prop('disabled', false);}
else if(this.value=='O'){$(".closedate").prop('disabled', true); $("#opendate").prop('disabled', false); }
else if(this.value=='P'){$("#userid_owner").prop('disabled', true); $("#opendate").prop('disabled', true); $(".closedate").prop('disabled', true); }
else { $(".closedate").prop('disabled', false); $("#opendate").prop('disabled', false);}
})

View File

@ -352,13 +352,30 @@
}
?>
</td>
<td><a <?php echo $row['activitystatus'] == 'D' ? "style='color:black'" : "" ?> href="activities/detail/<?= $row['actid']?>" onclick="window.open(this.href, 'Activity Detail','width=900,height=800,toolbar=1,resizable=0'); return false;"><?=$row['subject'];?></a></td>
<td>
<a <?php echo $row['activitystatus'] == 'D' ? "style='color:black'" : "" ?> href="activities/detail/<?= $row['actid']?>" onclick="window.open(this.href, 'Activity Detail','width=900,height=800,toolbar=1,resizable=0'); return false;"><?=$row['subject'];?></a>
<?php if ($row['actid_ref'] > 0) { ?>
<br>
<a href="activities/detail/<?= $row['actid_ref']?>" style='color:#30364F' onclick="window.open(this.href, 'Activity Detail','width=900,height=800,toolbar=1,resizable=0'); return false;">Reff AR <i class="fa-solid fa-arrow-up-right-from-square"></i></a>
<?php } ?>
</td>
<td>
<?php
$activitystatus = $row['activitystatus'];
if($activitystatus == "O") { echo "<button type='button' class='btn btn-sm btn-dark'>Open</button>"; }
else if($activitystatus == "C") { echo "<button type='button' class='btn btn-sm btn-danger'>Closed</button>"; }
else if($activitystatus == "R") { echo "<button type='button' class='btn btn-sm btn-info'>Refer</button>"; }
else if ($activitystatus == "R") {
if ($row['userid_owner'] == session()->get('userid')) {
echo "<button type='button' class='btn btn-sm btn-info'>Refer</button>";;
} else {
echo '
<a href="activities/refer/'.$row['actid'].'"
class="btn btn-sm btn-outline-info">
Refer
</a>
';
}
}
else if($activitystatus == "P") { echo "<button type='button' class='btn btn-sm btn-light'>Pending</button>"; }
else if($activitystatus == "S") { echo "<button type='button' class='btn btn-sm btn-warning'>Suspend</button>"; }
else if($activitystatus == "D") { echo "<button type='button' class='btn btn-sm btn-secondary'>Disable</button>"; }