|
Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /var/www/laciasmara.com/public_html/shop/application/controllers/admin/ |
Upload File : |
<?php if (! defined('BASEPATH')) exit('No direct script access allowed');
class Warehouses extends Admin_Controller
{
//this property is used for validating existing page title on call back edit page
private $warehouse_current_id = NULL;
private $warehouse_current_priority = NULL;
function __construct()
{
parent::__construct();
$this->load->model('warehouse_m');
}
//this is to list all warehouse
public function index()
{
//Add pagination
$this->load->helper('pagination_helper');
add_pagination(base_url() . 'admin/warehouse/index', $this->warehouse_m->record_count(), 20, 4);
$this->data['warehouses'] = $this->warehouse_m->get_all_warehouse(
20,
$this->uri->segment(4)
);
//load view
$this->data['subview'] = 'admin/warehouse/index';
$this->load->view('admin/templates/header', $this->data_header);
$this->load->view('admin/_layout_main', $this->data);
$this->load->view('admin/templates/footer');
}
public function manage()
{
$data['userdata'] = $this->session->userdata();
$data['title'] = 'Daftar Gudang | Laciasmara';
$data['warehouses'] = $this->warehouse_m->fetch_all_warehouses();
$this->load->view('admin_new/layouts/header', $data);
$this->load->view('admin_new/warehouses/manage');
$this->load->view('admin_new/layouts/footer');
}
public function add_warehouse()
{
$data['userdata'] = $this->session->userdata();
$data['title'] = 'Tambah Gudang | Laciasmara';
$this->load->view('admin_new/layouts/header', $data);
$this->load->view('admin_new/warehouses/add');
$this->load->view('admin_new/layouts/footer');
}
public function edit_warehouse($warehouse_id)
{
$data['userdata'] = $this->session->userdata();
$data['title'] = 'Ubah Gudang | Laciasmara';
$data['warehouse'] = $this->warehouse_m->fetch_warehouse_by_id($warehouse_id);
$this->load->view('admin_new/layouts/header', $data);
$this->load->view('admin_new/warehouses/edit');
$this->load->view('admin_new/layouts/footer');
}
public function create_warehouse()
{
// Validation
$this->form_validation->set_rules('name', 'Warehouse Name', 'required|trim');
$this->form_validation->set_rules(
'warehouse_type',
'Warehouse Type',
'required|in_list[distribution_center,fulfillment_center,regional,transit,return_center,cold_storage,3pl,vendor,virtual]'
);
$this->form_validation->set_rules('warehouse_addresses', 'Warehouse Address', 'required');
if ($this->form_validation->run() == FALSE) {
$this->session->set_flashdata('error', validation_errors());
redirect('admin/stocks/warehouses');
return;
}
// Parse addresses JSON
$addresses_json = $this->input->post('warehouse_addresses');
$addresses = json_decode($addresses_json, true);
// Validate JSON and addresses
if (json_last_error() !== JSON_ERROR_NONE || !$addresses || !is_array($addresses) || count($addresses) === 0) {
$this->session->set_flashdata('error', 'Format alamat tidak valid atau alamat kosong.');
redirect('admin/stocks/warehouses');
return;
}
// Get first address (karena warehouse hanya 1 alamat)
$first_address = $addresses[0];
$name = $this->input->post('name', true);
$alias = strtoupper(substr(preg_replace('/[^A-Za-z]/', '', $name), 0, 5));
if (empty($alias)) {
// fallback kalau semua karakter di name bukan huruf
$alias = 'WRH' . rand(10, 99);
}
// Get last priority and increment by 1
$this->db->select_max('priority');
$query = $this->db->get('warehouses');
$last_priority = $query->row()->priority ?? 0;
$new_priority = $last_priority + 1;
// Prepare warehouse data
$warehouse_data = [
'name' => $name,
'alias' => $alias,
'warehouse_type' => $this->input->post('warehouse_type', true),
'priority' => $new_priority,
'is_active' => 1,
'recipient_name' => $first_address['receiverName'] ?? null,
'phone' => $first_address['receiverPhone'] ?? null,
'address' => $first_address['fullAddress'] ?? null,
'notes' => $first_address['notes'] ?? null,
'latitude' => $first_address['latitude'] ?? null,
'longitude' => $first_address['longitude'] ?? null,
'province' => $first_address['province'] ?? null,
'city' => $first_address['city'] ?? null,
'district' => $first_address['district'] ?? null,
'subdistrict' => $first_address['subdistrict'] ?? null,
'postal_code' => $first_address['postalCode'] ?? null,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
];
// Start transaction
$this->db->trans_begin();
try {
// Insert warehouse
$this->db->insert('warehouses', $warehouse_data);
$warehouse_id = $this->db->insert_id();
// Check if insert successful
if (!$warehouse_id) {
throw new Exception('Gagal menyimpan data warehouse');
}
// Commit transaction
if ($this->db->trans_status() === FALSE) {
throw new Exception('Transaction failed');
}
$this->db->trans_commit();
$this->session->set_flashdata('success', 'Warehouse berhasil ditambahkan dengan prioritas ' . $new_priority);
} catch (Exception $e) {
$this->db->trans_rollback();
log_message('error', 'Create warehouse error: ' . $e->getMessage());
$this->session->set_flashdata('error', 'Gagal menyimpan data warehouse. Silakan coba lagi.');
}
redirect('admin/stocks/warehouses');
}
public function update_warehouse($id)
{
// Validation
$this->form_validation->set_rules('name', 'Warehouse Name', 'required|trim');
$this->form_validation->set_rules('warehouse_type', 'Warehouse Type', 'required');
if ($this->form_validation->run() == FALSE) {
$this->session->set_flashdata('error', validation_errors());
redirect('admin/stocks/warehouses');
return;
}
// Parse addresses JSON
$addresses_json = $this->input->post('warehouse_addresses', true);
$addresses = json_decode($addresses_json, true);
if ($addresses && is_array($addresses) && count($addresses) > 0) {
$first_address = $addresses[0];
} else {
$first_address = [];
}
$name = $this->input->post('name', true);
$alias = strtoupper(substr(preg_replace('/[^A-Za-z]/', '', $name), 0, 5));
if (empty($alias)) {
$alias = 'WRH' . rand(10, 99);
}
// Prepare update data
$update_data = [
'name' => $name,
'alias' => $alias,
'warehouse_type' => $this->input->post('warehouse_type', true),
'updated_at' => date('Y-m-d H:i:s')
];
// Add address fields if provided
if (!empty($first_address)) {
$update_data = array_merge($update_data, [
'recipient_name' => $first_address['receiverName'] ?? null,
'phone' => $first_address['receiverPhone'] ?? null,
'address' => $first_address['fullAddress'] ?? null,
'notes' => $first_address['notes'] ?? null,
'latitude' => $first_address['latitude'] ?? null,
'longitude' => $first_address['longitude'] ?? null,
'province' => $first_address['province'] ?? null,
'city' => $first_address['city'] ?? null,
'district' => $first_address['district'] ?? null,
'subdistrict' => $first_address['subdistrict'] ?? null,
'postal_code' => $first_address['postalCode'] ?? null,
]);
}
$this->db->trans_begin();
try {
$this->db->where('id', $id);
$this->db->update('warehouses', $update_data);
if ($this->db->affected_rows() === 0) {
throw new Exception('Tidak ada perubahan data atau warehouse tidak ditemukan');
}
$this->db->trans_commit();
$this->session->set_flashdata('success', 'Warehouse berhasil diupdate');
} catch (Exception $e) {
$this->db->trans_rollback();
log_message('error', 'Update warehouse error: ' . $e->getMessage());
$this->session->set_flashdata('error', 'Gagal mengupdate warehouse');
}
redirect('admin/stocks/warehouses');
}
public function delete_warehouse($warehouse_id)
{
try {
// Mulai transaksi
$this->db->trans_start();
$this->db->where('warehouse_id', $warehouse_id);
$this->db->delete('stock');
// Hapus data dari tabel warehouse
$this->db->where('id', $warehouse_id);
$this->db->delete('warehouses');
if ($this->db->trans_status() === false) {
throw new Exception('Gagal menghapus data gudang.');
}
$this->db->trans_commit();
// Set flashdata sukses
$this->session->set_flashdata('message_type', 'success');
$this->session->set_flashdata('message', 'Gudang berhasil dihapus.');
} catch (Exception $e) {
$this->db->trans_rollback();
// Set flashdata error
$this->session->set_flashdata('message_type', 'error');
$this->session->set_flashdata('message', $e->getMessage());
}
// Redirect kembali ke halaman warehouse
redirect(base_url('admin/stocks/warehouses'));
}
public function get_warehouse_address($warehouse_id)
{
// Set JSON response header
$this->output->set_content_type('application/json');
try {
// Validate address ID
if (!$warehouse_id || !is_numeric($warehouse_id)) {
$this->output->set_output(json_encode([
'success' => false,
'message' => 'ID warehouse tidak valid'
]));
return;
}
// Get address data from database
$address = $this->warehouse_m->get_address_by_id($warehouse_id);
if (!$address) {
$this->output->set_output(json_encode([
'success' => false,
'message' => 'Gudang tidak ditemukan'
]));
return;
}
// Clean phone number
if ($address->phone && strpos($address->phone, '+62') === 0) {
$address->phone = substr($address->phone, 3);
} elseif ($address->phone && strpos($address->phone, '62') === 0) {
$address->phone = substr($address->phone, 2);
}
// Validate and sanitize coordinates
$latitude = isset($address->latitude) ? floatval($address->latitude) : null;
$longitude = isset($address->longitude) ? floatval($address->longitude) : null;
if (
empty($latitude) || empty($longitude) ||
!is_finite($latitude) || !is_finite($longitude) ||
$latitude < -90 || $latitude > 90 ||
$longitude < -180 || $longitude > 180
) {
log_message('warning', "Invalid coordinates for address ID {$warehouse_id}: lat={$latitude}, lng={$longitude}");
$address->latitude = -6.229434;
$address->longitude = 106.853123;
} else {
$address->latitude = $latitude;
$address->longitude = $longitude;
}
$this->output->set_output(json_encode([
'success' => true,
'address' => $address
]));
} catch (Exception $e) {
log_message('error', 'Error getting address: ' . $e->getMessage());
$this->output->set_output(json_encode([
'success' => false,
'message' => 'Terjadi kesalahan server'
]));
}
}
}