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/Dashboard.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Dashboard extends Admin_Controller
{

	function __construct()
	{
		parent::__construct();
		$this->load->model('user_m');
		$this->load->model('order_m');
		$this->load->model('log_m');
		$this->load->model('statistic_m');
	}

	// function index()
	// {
	// 	$this->data['subview'] = 'admin/index';
	// 	$this->load->view('admin/templates/header', $this->data_header);
	// 	$this->load->view('admin/_layout_main', $this->data);
	// 	$this->load->view('admin/templates/footer');
	// }

	function index()
	{
		$data['userdata'] = $this->session->userdata();
		$data['role'] = $this->session->userdata('role');
		$data['incoming_orders'] = $this->order_m->get_pending_order_count();
		$data['need_to_confirm_orders'] = $this->order_m->get_need_to_confirm_order_count();
		$data['incoming_retailer_orders'] = $this->order_m->get_pending_order_count(true);

		$data['processing_orders'] = $this->order_m->get_processing_order_count();
		$data['processing_retailer_orders'] = $this->order_m->get_processing_order_count(true);

		$data['shipped_orders'] = $this->order_m->get_shipped_order_count();
		$data['shipped_retailer_orders'] = $this->order_m->get_shipped_order_count(true);

		$data['delivered_orders'] = $this->order_m->get_delivered_order_count();
		$data['finished_orders'] = $this->order_m->get_finished_order_count();

		// Marketing
		$data['today_traffic'] = $this->statistic_m->get_today_traffic();
		$data['today_unique_traffic'] = $this->statistic_m->get_today_unique_traffic();
		$data['marketing_expenses'] = $this->statistic_m->get_marketing_expenses_by_product_sent();

		// Statistik
		$data['today_revenue'] = $this->statistic_m->get_today_revenue();
		$data['today_new_customer'] = $this->statistic_m->get_today_new_customer();
		$data['today_buyers'] = $this->statistic_m->get_today_buyers_count();
		// Hitung konversi pembeli
		$data['conversion_rate'] = ($data['today_traffic'] > 0)
			? round(($data['today_buyers'] / $data['today_traffic']) * 100, 2)
			: 0;

		$data['best_selling'] = $this->statistic_m->get_best_selling_product();

		// Data untuk statistik mingguan (7 hari terakhir)
		$weekly_labels = [];
		$weekly_current_data = [];
		$weekly_previous_data = [];
		// Memanggil model untuk mendapatkan data
		$current_week_revenue = $this->statistic_m->get_current_week_revenue();
		$last_year_week_revenue = $this->statistic_m->get_last_year_week_revenue();

		// Mengisi data untuk 7 hari terakhir
		for ($i = 6; $i >= 0; $i--) {
			$date = date('Y-m-d', strtotime("-$i days"));
			$weekly_labels[] = date('D', strtotime($date)); // Format: Sen, Sel, Rab, dsb

			// Data pendapatan hari ini
			$daily_revenue = $this->statistic_m->get_daily_revenue($date);
			$weekly_current_data[] = $daily_revenue;

			// Data pendapatan tahun lalu di tanggal yang sama
			$last_year_date = date('Y-m-d', strtotime("$date -1 year"));
			$last_year_daily_revenue = $this->statistic_m->get_daily_revenue($last_year_date);
			$weekly_previous_data[] = $last_year_daily_revenue;
		}
		$data['weekly_labels'] = $weekly_labels;
		$data['weekly_current_data'] = $weekly_current_data;
		$data['weekly_previous_data'] = $weekly_previous_data;
		$data['current_week_revenue'] = $current_week_revenue;
		$data['last_year_week_revenue'] = $last_year_week_revenue;

		$data['title'] = 'Dashboard Admin | Laciasmara';

		$this->load->view('admin_new/layouts/header', $data);
		$this->load->view('admin_new/dashboard/index');
		$this->load->view('admin_new/layouts/footer');
	}

	public function get_product_analysis()
	{
		// Get tab parameter if any
		$tab = $this->input->get('tab', true) ?: 'terlaris';

		switch ($tab) {
			case 'terlaris':
				$products = $this->get_top_selling_products(5);
				break;
			case 'underselling':
				$products = $this->get_underselling_products(5);
				break;
			case 'stock':
				$products = $this->get_low_stock_products(5);
				break;
			default:
				$products = $this->get_top_selling_products(5);
		}

		echo json_encode($products);
	}

	private function get_top_selling_products($limit = 5)
	{
		$this->db->select('
			p.id_products, 
			p.title, 
			p.alias,
			pi.image,
			COUNT(od.product_id) as total_sold,
			COALESCE(SUM(s.stock), 0) as total_stock,
			b.brand as brand_title
		');
		$this->db->from('orders_detail od');
		$this->db->join('products p', 'od.product_id = p.id_products', 'left');
		$this->db->join('orders o', 'od.orders_id = o.id_orders', 'left');
		$this->db->join('customers c', 'o.customer_id = c.id_customers', 'left');
		$this->db->join('product_details pd', 'p.id_products = pd.product_id', 'left');
		$this->db->join('stock s', 'pd.id = s.id_product_detail', 'left');
		$this->db->join('brands b', 'p.brand_id = b.id_brands', 'left');
		$this->db->join('product_images pi', 'pi.product_details_id = pd.id AND pi.priority = 1 AND pi.status = 1', 'left');

		$this->db->where('o.payment_status', 5);
		$this->db->where('c.reseller_id IS NULL');
		$this->db->where('o.customer_id !=', 2615);
		$this->db->where('p.product_status', '1');
		$this->db->where('p.deleted_at', null);

		$this->db->group_by('p.id_products');
		$this->db->order_by('total_sold', 'DESC');
		$this->db->limit($limit);

		$query = $this->db->get();
		return $query->result();
	}

	private function get_underselling_products($limit = 5)
	{
		$this->db->select('
			p.id_products, 
			p.title, 
			p.alias,
			pi.image,
			COALESCE(COUNT(od.product_id), 0) as total_sold,
			COALESCE(SUM(s.stock), 0) as total_stock,
			b.brand as brand_title
		');
		$this->db->from('products p');
		$this->db->join('product_details pd', 'p.id_products = pd.product_id', 'left');
		$this->db->join('stock s', 'pd.id = s.id_product_detail', 'left');
		$this->db->join('orders_detail od', 'p.id_products = od.product_id', 'left');
		$this->db->join('orders o', 'od.orders_id = o.id_orders AND o.payment_status = 5', 'left');
		$this->db->join('brands b', 'p.brand_id = b.id_brands', 'left');
		$this->db->join('product_images pi', 'pi.product_details_id = pd.id AND pi.priority = 1 AND pi.status = 1', 'left');

		$this->db->where('p.product_status', '1');
		$this->db->where('p.deleted_at', null);
		$this->db->where('s.stock >', 0); // Only products with stock available

		$this->db->group_by('p.id_products');
		$this->db->order_by('total_sold', 'ASC'); // Order by least sold
		$this->db->limit($limit);

		$query = $this->db->get();
		return $query->result();
	}

	private function get_low_stock_products($limit = 5)
	{
		$this->db->select('
			p.id_products, 
			p.title, 
			p.alias,
			pi.image,
			COALESCE(COUNT(od.product_id), 0) as total_sold,
			COALESCE(SUM(s.stock), 0) as total_stock,
			b.brand as brand_title
		');
		$this->db->from('products p');
		$this->db->join('product_details pd', 'p.id_products = pd.product_id', 'left');
		$this->db->join('stock s', 'pd.id = s.id_product_detail', 'left');
		$this->db->join('orders_detail od', 'p.id_products = od.product_id', 'left');
		$this->db->join('orders o', 'od.orders_id = o.id_orders AND o.payment_status = 5', 'left');
		$this->db->join('brands b', 'p.brand_id = b.id_brands', 'left');
		$this->db->join('product_images pi', 'pi.product_details_id = pd.id AND pi.priority = 1 AND pi.status = 1', 'left');

		$this->db->where('p.product_status', '1'); // Only active products
		$this->db->where('p.deleted_at', null);
		$this->db->group_by('p.id_products');
		$this->db->having('total_stock < 5'); // Products with stock less than 5
		$this->db->having('total_sold > 0'); // Only include products that have been sold
		$this->db->order_by('total_sold', 'DESC'); // Order by most sold first (to prioritize popular ones)
		$this->db->limit($limit);

		$query = $this->db->get();
		return $query->result();
	}

	public function count_notification()
	{
		$user_id = $this->session->userdata('user_id');
		$count = $this->log_m->get_unread_count($user_id);

		header('Content-Type: application/json');
		echo json_encode(['count' => $count]);
	}

	public function list_notification()
	{
		$user_id = $this->session->userdata('user_id');
		$notifications = $this->log_m->get_notifications($user_id, 10); // Ambil 10 notifikasi terbaru

		header('Content-Type: application/json');
		echo json_encode(['notifications' => $notifications]);
	}

	// Endpoint untuk menandai notifikasi sudah dibaca
	public function mark_read()
	{
		$notification_id = $this->input->post('notification_id');
		$user_id = $this->session->userdata('user_id');

		$success = $this->log_m->mark_as_read($notification_id, $user_id);

		header('Content-Type: application/json');
		echo json_encode(['success' => $success, 'csrf_token' => $this->security->get_csrf_hash()]);
	}

	// Endpoint untuk menandai semua notifikasi sudah dibaca
	public function mark_all_read()
	{
		$user_id = $this->session->userdata('user_id');
		$success = $this->log_m->mark_all_as_read($user_id);

		header('Content-Type: application/json');
		echo json_encode(['success' => $success, 'csrf_token' => $this->security->get_csrf_hash()]);
	}

	function ajax_statistik()
	{

		//current date and time
		$now = date('Y-m-d H:i:s');
		//1 week before
		$week_before = date("Y-m-d 00:00:00", strtotime('-1 week'));
		//1 month before
		$month_before = date("Y-m-d 00:00:00", strtotime('-1 month'));

		$current_year = date("Y-01-01 00:00:00");


		//get visits
		$count_visit_day = $this->db->select('id')->from('visits')->where('date >=', date('Y-m-d 00:00:00'))->where('date <=', $now)->get()->num_rows();

		$count_visit_week = $this->db->select('id')->from('visits')->where('date >=', $week_before)->where('date <=', $now)->get()->num_rows();

		$count_visit_month = $this->db->select('id')->from('visits')->where('date >=', $month_before)->where('date <=', $now)->get()->num_rows();

		$count_visit_thisyear = $this->db->select('id')->from('visits')->where('date >=', $current_year)->get()->num_rows();


		//get visits by ip
		$count_visit_by_ip_day = $this->db->select('id')->from('visits')->where('date >=', date('Y-m-d 00:00:00'))->where('date <=', $now)->group_by('ip_address')->get()->num_rows();

		$count_visit_by_ip_week = $this->db->select('id')->from('visits')->where('date >=', $week_before)->where('date <=', $now)->group_by('ip_address')->get()->num_rows();

		$count_visit_by_ip_month = $this->db->select('id')->from('visits')->where('date >=', $month_before)->where('date <=', $now)->group_by('ip_address')->get()->num_rows();

		$count_visit_by_ip_thisyear = $this->db->select('id')->from('visits')->where('date >=', $current_year)->where('date <=', $now)->group_by('ip_address')->get()->num_rows();

		//get customers
		$count_customer_day = $this->db->select('id_customers')->from('customers')->where('join_date >=', date('Y-m-d 00:00:00'))->where('join_date <=', $now)->get()->num_rows();

		$count_customer_week = $this->db->select('id_customers')->from('customers')->where('join_date >=', $week_before)->where('join_date <=', $now)->get()->num_rows();

		$count_customer_month = $this->db->select('id_customers')->from('customers')->where('join_date >=', $month_before)->where('join_date <=', $now)->get()->num_rows();

		$count_customer_thisyear = $this->db->select('id_customers')->from('customers')->where('join_date >=', $current_year)->where('join_date <=', $now)->get()->num_rows();

		//get orders
		$order_day = $this->db->select('total_amount')->from('orders')->where('payment_status !=', 0)->where('order_date >=', date('Y-m-d 00:00:00'))->where('order_date <=', $now)->get()->result();
		$count_order_day = 0;
		foreach ($order_day as $order) {
			$count_order_day = $count_order_day + $order->total_amount;
		}

		$order_week = $this->db->select('total_amount')->from('orders')->where('payment_status !=', 0)->where('order_date >=', $week_before)->where('order_date <=', $now)->get()->result();
		$count_order_week = 0;
		foreach ($order_week as $order) {
			$count_order_week = $count_order_week + $order->total_amount;
		}

		$order_month = $this->db->select('total_amount')->from('orders')->where('payment_status !=', 0)->where('order_date >=', $month_before)->where('order_date <=', $now)->get()->result();
		$count_order_month = 0;
		foreach ($order_month as $order) {
			$count_order_month = $count_order_month + $order->total_amount;
		}

		$order_thisyear = $this->db->select('total_amount')->from('orders')->where('payment_status !=', 0)->where('order_date >=', $current_year)->where('order_date <=', $now)->get()->result();
		$count_order_thisyear = 0;
		foreach ($order_thisyear as $order) {
			$count_order_thisyear = $count_order_thisyear + $order->total_amount;
		}
		//get orders paid
		$included_status = array(5);

		$order_paid_day = $this->db->select('total_amount')->from('orders')->where_in('payment_status', $included_status)->where('order_date >=', date('Y-m-d 00:00:00'))->where('order_date <=', $now)->get()->result();
		$count_order_paid_day = 0;
		foreach ($order_paid_day as $order) {
			$count_order_paid_day = $count_order_paid_day + $order->total_amount;
		}

		$order_paid_week = $this->db->select('total_amount')->from('orders')->where_in('payment_status', $included_status)->where('order_date >=', $week_before)->where('order_date <=', $now)->get()->result();
		$count_order_paid_week = 0;
		foreach ($order_paid_week as $order) {
			$count_order_paid_week = $count_order_paid_week + $order->total_amount;
		}

		$order_paid_month = $this->db->select('total_amount')->from('orders')->where_in('payment_status', $included_status)->where('order_date >=', $month_before)->where('order_date <=', $now)->get()->result();
		$count_order_paid_month = 0;
		foreach ($order_paid_month as $order) {
			$count_order_paid_month = $count_order_paid_month + $order->total_amount;
		}

		$order_paid_thisyear = $this->db->select('total_amount')->from('orders')->where_in('payment_status', $included_status)->where('order_date >=', $current_year)->where('order_date <=', $now)->get()->result();
		$count_order_paid_thisyear = 0;
		foreach ($order_paid_thisyear as $order) {
			$count_order_paid_thisyear = $count_order_paid_thisyear + $order->total_amount;
		}

		//get value
		$val = $this->input->post('val');

		//validate
		if ($val == 'week') {

			$count_visit = $count_visit_week;
			$count_customer = $count_customer_week;
			$count_visit_by_ip = $count_visit_by_ip_week;
			$count_order = $count_order_week;
			$count_order_paid = $count_order_paid_week;
		} else if ($val == 'month') {

			$count_visit = $count_visit_month;
			$count_customer = $count_customer_month;
			$count_visit_by_ip = $count_visit_by_ip_month;
			$count_order = $count_order_month;
			$count_order_paid = $count_order_paid_month;
		} else if ($val == 'thisyear') {

			$count_visit = $count_visit_thisyear;
			$count_customer = $count_customer_thisyear;
			$count_visit_by_ip = $count_visit_by_ip_thisyear;
			$count_order = $count_order_thisyear;
			$count_order_paid = $count_order_paid_thisyear;
		} else {

			$count_visit = $count_visit_day;
			$count_customer = $count_customer_day;
			$count_visit_by_ip = $count_visit_by_ip_day;
			$count_order = $count_order_day;
			$count_order_paid = $count_order_paid_day;
		}

		$data = array(
			'count_visit' => $count_visit,
			'count_customer' => $count_customer,
			'count_visit_by_ip' => $count_visit_by_ip,
			'count_order' => $count_order,
			'count_order_paid' => $count_order_paid
		);

		$this->load->view('ajax/ajax_get_statistik', $data);
	}
}

https://t.me/RX1948 - 2025