pemindahan submenu peralatan teknisi ke menu Oprasional Peralatan

This commit is contained in:
Wian Drs
2026-09-15 11:47:49 +07:00
parent 8fedd39d8f
commit e4d6245a3d
17 changed files with 151 additions and 42 deletions
+8 -9
View File
@@ -200,7 +200,7 @@ class Teknisi extends MY_Controller {
elseif($installed>0)$badge='<span class="badge bg-primary">Dipasang</span><small class="d-block text-muted mt-1">'.htmlspecialchars(($row->customer_name?:'-').' · '.($row->usage_date?:'-'),ENT_QUOTES,'UTF-8').'</small>';
else$badge='<span class="badge bg-success">Dibawa</span>';
$action='-';
if(is_master_admin_user()||check_permission('items','can_update')){
if(is_master_admin_user()||check_permission('technician_installation','can_create')||check_permission('technician_installation','can_update')||check_permission('technician_return','can_update')){
$action='<button type="button" class="btn btn-sm btn-outline-primary btn-change-item-status" data-user="'.(int)$row->user_id.'" data-barcode="'.htmlspecialchars($row->barcode,ENT_QUOTES,'UTF-8').'" data-item="'.htmlspecialchars($row->nama_barang,ENT_QUOTES,'UTF-8').'" data-tracking="'.$tracking.'" data-carried="'.$carried.'" data-installed="'.$installed.'" data-customer="'.(int)$row->customer_id.'"><i class="bi bi-arrow-left-right me-1"></i>Ubah Status</button>';
if(!empty($row->proof_id))$action.=' <a class="btn btn-sm btn-outline-info" target="_blank" href="'.base_url('accountingattachments/preview/'.(int)$row->proof_id).'" title="Bukti terakhir"><i class="bi bi-image"></i></a>';
}elseif(!empty($row->proof_id))$action='<a class="btn btn-sm btn-outline-info" target="_blank" href="'.base_url('accountingattachments/preview/'.(int)$row->proof_id).'"><i class="bi bi-image me-1"></i>Bukti</a>';
@@ -478,7 +478,7 @@ class Teknisi extends MY_Controller {
"active_menu" => "peralatan_teknisi",
"teknisi_list" => $this->ptm->get_teknisi_list(),
"customers" => $this->db->select('id,nama')->where('company_id',(int)$this->companycontext->id())->order_by('nama')->get('customers')->result(),
"can_export" => is_master_admin_user() || check_permission('technician_equipment','can_export') || check_permission('items','can_export'),
"can_export" => is_master_admin_user() || check_permission('technician_equipment','can_export'),
"equipment_permissions" => $this->equipmentPermissionFlags(),
"equipment_dashboard" => $this->scopedEquipmentDashboard(),
"initial_filters" => $this->logFilters(),
@@ -499,7 +499,7 @@ class Teknisi extends MY_Controller {
public function get_status_history_data($userId=0)
{
$this->requirePermission('items','can_view');$userId=(int)$userId;if(!$this->ptm->get_teknisi_info($userId))return json_response(false,'Teknisi tidak ditemukan.',array('data'=>array()),404);
$this->equipmentPermission('technician_equipment','can_view');$userId=(int)$userId;if(!$this->ptm->get_teknisi_info($userId))return json_response(false,'Teknisi tidak ditemukan.',array('data'=>array()),404);
$labels=array('initial'=>'Saldo Awal','carried'=>'Dibawa Teknisi','installed'=>'Dipasang','returned'=>'Kembali ke Gudang','warehouse'=>'Gudang');$rows=array();
foreach($this->ptm->get_status_history($userId)as$index=>$row){$proof=$row->attachment_id?'<a class="btn btn-sm btn-outline-info" target="_blank" href="'.base_url('accountingattachments/preview/'.(int)$row->attachment_id).'" title="Lihat bukti"><i class="bi bi-image"></i></a>':'-';$rows[]=array($index+1,date('d/m/Y',strtotime($row->event_date)),htmlspecialchars(($row->kode_detail?:'-').' - '.($row->nama_barang?:'-'),ENT_QUOTES,'UTF-8'),htmlspecialchars($row->barcode,ENT_QUOTES,'UTF-8'),htmlspecialchars($labels[$row->from_status]??ucfirst($row->from_status),ENT_QUOTES,'UTF-8').' &rarr; '.htmlspecialchars($labels[$row->to_status]??ucfirst($row->to_status),ENT_QUOTES,'UTF-8'),number_format((float)$row->qty,0,',','.'),htmlspecialchars($row->customer_name?:'-',ENT_QUOTES,'UTF-8'),htmlspecialchars($row->notes?:'-',ENT_QUOTES,'UTF-8'),htmlspecialchars($row->actor_name?:'-',ENT_QUOTES,'UTF-8'),$proof);}
return json_response(true,'Riwayat status peralatan.',array('data'=>$rows));
@@ -509,7 +509,7 @@ class Teknisi extends MY_Controller {
{
if(strtoupper($this->input->method())==='POST')return json_response(false,'Alur status lama dinonaktifkan. Gunakan workbench Peralatan Teknisi agar histori dan saldo tetap sinkron.',array(),409);
if(strtoupper($this->input->method())!=='POST')show_404();
$this->requirePermission('items','can_update');
$this->equipmentPermission('technician_correction','can_update');
$barcode=trim((string)$this->input->post('barcode',true));$userId=(int)$this->input->post('user_id');$status=trim((string)$this->input->post('status',true));$date=trim((string)$this->input->post('date',true));$customer=(int)$this->input->post('customer_id');$notes=trim((string)$this->input->post('notes',true));$qty=(float)$this->input->post('qty');$source=trim((string)$this->input->post('source_status',true));$key=trim((string)$this->input->post('idempotency_key',true));
if($barcode===''||$userId<1)return json_response(false,'Barang teknisi tidak valid.',array(),422);
if(!in_array($status,array('installed','carried','warehouse'),true))return json_response(false,'Status tujuan tidak valid.',array(),422);
@@ -657,7 +657,7 @@ class Teknisi extends MY_Controller {
public function register_customer_equipment()
{
if(strtoupper($this->input->method())!=='POST')show_404();
$this->equipmentPermission('technician_equipment','can_create');
$this->equipmentPermission('technician_customer_item','can_create');
$saved=array();try{$files=$this->validatedEquipmentFiles();$post=$this->input->post(NULL,true);if((($post['ownership_type']??'')==='transferred_non_inventory'||!empty($post['deployment_allowed']))&&!$files)throw new BusinessException('Bukti penyerahan/otorisasi wajib dilampirkan untuk status yang dipilih.');$this->db->trans_begin();$result=$this->technicianequipmentservice->registerExternal($post,(int)$this->session->userdata('user_id'));foreach($files as$file)$saved[]=$this->storeEquipmentFile((int)$result['id'],$file,'customer_equipment_registry');if($this->db->trans_status()===false)throw new RuntimeException('Register barang customer gagal disimpan.');$this->db->trans_commit();log_activity('items','equipment_register','Mendaftarkan barang customer non-accounting '.$result['external_barcode'],'success');return json_response(true,'Barang customer berhasil dicatat tanpa masuk persediaan accounting.',array('result'=>$result));}
catch(Throwable $e){if($this->db->trans_active())$this->db->trans_rollback();foreach($saved as$path)if(is_file($path))@unlink($path);return business_exception_response($e);}
}
@@ -741,15 +741,14 @@ class Teknisi extends MY_Controller {
private function equipmentPermission($feature,$action)
{
if(is_master_admin_user())return true;if(check_permission($feature,$action))return true;$permissions=$this->session->userdata('permissions');if(is_array($permissions)&&array_key_exists($feature,$permissions))return$this->requirePermission($feature,$action);
// Hanya session lama yang belum mengenal feature baru yang memakai fallback.
if(check_permission('items',$action))return true;
if(is_master_admin_user())return true;
if(check_permission($feature,$action))return true;
return$this->requirePermission($feature,$action);
}
private function equipmentPermissionFlags()
{
$pairs=array('view'=>array('technician_equipment','can_view'),'attachment'=>array('technician_attachment','can_view'),'register'=>array('technician_equipment','can_create'),'handover'=>array('technician_handover','can_create'),'install'=>array('technician_installation','can_create'),'remove'=>array('technician_installation','can_update'),'transfer'=>array('technician_transfer','can_update'),'return'=>array('technician_return','can_update'),'inspect_view'=>array('technician_inspection','can_view'),'inspect'=>array('technician_inspection','can_post'),'condition'=>array('technician_condition','can_update'),'correct'=>array('technician_correction','can_update'),'export'=>array('technician_equipment','can_export'));$flags=array();$permissions=$this->session->userdata('permissions');foreach($pairs as$key=>$pair){$known=is_array($permissions)&&array_key_exists($pair[0],$permissions);$flags[$key]=is_master_admin_user()||check_permission($pair[0],$pair[1])||(!$known&&check_permission('items',$pair[1]));}return$flags;
$pairs=array('view'=>array('technician_equipment','can_view'),'attachment'=>array('technician_attachment','can_view'),'register'=>array('technician_customer_item','can_create'),'handover'=>array('technician_handover','can_create'),'install'=>array('technician_installation','can_create'),'remove'=>array('technician_installation','can_update'),'transfer'=>array('technician_transfer','can_update'),'return'=>array('technician_return','can_update'),'inspect_view'=>array('technician_inspection','can_view'),'inspect'=>array('technician_inspection','can_post'),'condition'=>array('technician_condition','can_update'),'correct'=>array('technician_correction','can_update'),'export'=>array('technician_equipment','can_export'));$flags=array();foreach($pairs as$key=>$pair)$flags[$key]=is_master_admin_user()||check_permission($pair[0],$pair[1]);return$flags;
}
private function restrictedTechnicianEmployee()