pemindahan submenu peralatan teknisi ke menu Oprasional Peralatan
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Memisahkan akses Operasional Perangkat dari Persediaan tanpa mengubah
|
||||
* transaksi, stok, jurnal, maupun tabel subledger perangkat.
|
||||
*/
|
||||
class Migration_Separate_device_operations_permissions extends CI_Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
if (!$this->db->table_exists('roles')) return;
|
||||
|
||||
$deviceFeatures = array(
|
||||
'technician_equipment', 'technician_equipment_all',
|
||||
'technician_attachment', 'technician_handover',
|
||||
'technician_installation', 'technician_transfer',
|
||||
'technician_return', 'technician_inspection',
|
||||
'technician_customer_item', 'technician_condition',
|
||||
'technician_correction'
|
||||
);
|
||||
|
||||
foreach ($this->db->select('id,permissions,is_super_admin')->get('roles')->result() as $role) {
|
||||
if ((int)$role->is_super_admin === 1) continue;
|
||||
$permissions = json_decode((string)$role->permissions, true);
|
||||
if (!is_array($permissions)) $permissions = array();
|
||||
$changed = false;
|
||||
|
||||
// Migrasi lama sudah membuat permission operasional dari Persediaan.
|
||||
// Bagian ini tetap idempotent untuk database yang melewati migrasi lama.
|
||||
if (!isset($permissions['technician_equipment']) && isset($permissions['items']) && in_array('can_view', (array)$permissions['items'], true)) {
|
||||
$permissions['technician_equipment'] = array_values(array_unique(array_intersect(
|
||||
(array)$permissions['items'],
|
||||
array('can_view','can_create','can_update','can_delete','can_submit','can_approve','can_post','can_export','can_import')
|
||||
)));
|
||||
$changed = true;
|
||||
}
|
||||
|
||||
if (!isset($permissions['technician_customer_item'])) {
|
||||
$source = isset($permissions['technician_equipment']) ? (array)$permissions['technician_equipment'] : array();
|
||||
$customerRights = array_values(array_intersect($source, array('can_view','can_create','can_update')));
|
||||
if ($customerRights) {
|
||||
$permissions['technician_customer_item'] = $customerRights;
|
||||
$changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
$hasDevicePermission = false;
|
||||
foreach ($deviceFeatures as $feature) {
|
||||
if (!empty($permissions[$feature])) { $hasDevicePermission = true; break; }
|
||||
}
|
||||
if ($hasDevicePermission && (empty($permissions['technician_equipment']) || !in_array('can_view', (array)$permissions['technician_equipment'], true))) {
|
||||
$permissions['technician_equipment'] = array_values(array_unique(array_merge(
|
||||
array('can_view'),
|
||||
isset($permissions['technician_equipment']) ? (array)$permissions['technician_equipment'] : array()
|
||||
)));
|
||||
$changed = true;
|
||||
}
|
||||
|
||||
if ($changed) {
|
||||
$this->db->where('id', (int)$role->id)->update('roles', array(
|
||||
'permissions' => json_encode($permissions),
|
||||
'updated_at' => date('Y-m-d H:i:s')
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
if (!$this->db->table_exists('roles')) return;
|
||||
foreach ($this->db->select('id,permissions,is_super_admin')->get('roles')->result() as $role) {
|
||||
if ((int)$role->is_super_admin === 1) continue;
|
||||
$permissions = json_decode((string)$role->permissions, true);
|
||||
if (!is_array($permissions) || !isset($permissions['technician_customer_item'])) continue;
|
||||
unset($permissions['technician_customer_item']);
|
||||
$this->db->where('id', (int)$role->id)->update('roles', array(
|
||||
'permissions' => json_encode($permissions),
|
||||
'updated_at' => date('Y-m-d H:i:s')
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user