HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux Bradford-Sitios 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: www-data (33)
PHP: 7.4.33
Disabled: 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_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/formularioinscripcion.bradford/application/models/Session_model.php
<?php
    class session_model extends CI_Model
    {
    	function __construct()
        {
            parent::__construct();
		}
		
		function get_sales_details_by_session($session_id='', $staff_id = '')
		{
			$this->db->select('sales_transactions_details.item_price, products.name product, sales_transactions_details.total_price');
            $this->db->from('sales_transactions');
			$this->db->join('sales_transactions_details', 'sales_transactions.id = sales_transactions_details.sales_transactions_id');
			$this->db->join('products', 'sales_transactions_details.products_id = products.id');
            $this->db->where('sales_transactions.sessions_id', $session_id);
			if(!empty($staff_id)){
				$this->db->where('sales_transactions.staff_id', $staff_id);
			}
            $query = $this->db->get();
			return $query->result();
		}
		
		function resume_total_session ($session_id) {
			$query = $this->db->query(
				"SELECT sessions.id, concat(staff.first_name, ' ', staff.last_name) as seller,
				sum(payments.amount) as total,
				(case sessions.is_open WHEN true THEN 'Abierta' ELSE 'Cerrada' END) as status
				FROM sessions
				INNER JOIN staff ON sessions.staff_id = staff.id
				INNER JOIN sales_transactions ON sessions.id = sales_transactions.sessions_id
				INNER JOIN payments ON sales_transactions.id = payments.sales_transactions_id
				WHERE sales_transactions.is_done = true
				AND sales_transactions.is_canceled = false
				AND sales_transactions.folio_doc IS NOT NULL
				AND sessions.business_units_id = ".BUSINESS_UNIT_ID."
				AND sessions.id = ".$session_id."
				GROUP BY sessions.id, concat(staff.first_name, ' ', staff.last_name)"
			);

			if ($query->num_rows() === 0) {
				$query = $this->db->query(
					"SELECT sessions.id, concat(staff.first_name, ' ', staff.last_name) as seller,
					0 as total,
					(case sessions.is_open WHEN true THEN 'Abierta' ELSE 'Cerrada' END) as status
					FROM sessions
					INNER JOIN staff ON sessions.staff_id = staff.id
					WHERE sessions.business_units_id = ".BUSINESS_UNIT_ID."
					AND sessions.id = ".$session_id
				);

				$resume = $query->row();
			}
			else {
				$resume = $query->row();
			}


			return $resume;
		}

		function canceled_sales_by_day ($day) {
			$in_value = $this->get_all_session_id_from_day($day);

			$query_total = $this->db->query(
				"SELECT COALESCE(SUM(payments.amount), 0) as total
				FROM sales_transactions
				INNER JOIN payments ON sales_transactions.id = payments.sales_transactions_id
				WHERE sales_transactions.is_canceled = true
				AND sales_transactions.sessions_id IN (".$in_value.")"
			);

			$total = $query_total->row()->total;

			$query_items = $this->db->query(
				"SELECT sales_transactions.folio_doc AS folio,
				payments.amount as total,
				to_char(sales_transactions.create_time, 'DD/MM/YYYY HH24:MI:SS') as date_at
				FROM sales_transactions
				INNER JOIN payments ON sales_transactions.id = payments.sales_transactions_id
				WHERE sales_transactions.is_canceled = true
				AND sales_transactions.sessions_id IN (".$in_value.")"
			);

			$items = $query_items->num_rows() === 0 ? array() : $query_items->result();

			return array(
				'total' => $total,
				'items' => $items
			);
		}

		function get_tickets_info_by_day ($day) {
			$in_value = $this->get_all_session_id_from_day($day);

			$query = $this->db->query(
				"SELECT
				(select folio_doc
				from sales_transactions
				WHERE is_done = true
				AND is_canceled = false
				and folio_doc is not null
				and sessions_id in (".$in_value.")
				order by id ASC limit 1) as folio_start,
				
				(select folio_doc
				from sales_transactions
				WHERE is_done = true
				AND is_canceled = false
				and folio_doc is not null
				and sessions_id in (".$in_value.")
				order by id DESC limit 1) as folio_end,
				
				(select COUNT(*)
				from sales_transactions
				WHERE is_done = true
				AND is_canceled = false
				and folio_doc is not null
				and sessions_id in (".$in_value.")) as quantity,
				
				(select COUNT(*)
				from sales_transactions
				INNER JOIN payments ON sales_transactions.id = payments.sales_transactions_id
				WHERE is_canceled = true
				AND net_total > 0
				and sales_transactions.sessions_id IN (".$in_value.")) as canceled_quantity"
			);

			$info = $query->row();

			return $info;
		}
		
		function get_all_pos()
        {
        	$encryption_key = "POL9XSpsRZwkXcZoDJecD2cIjNyD3Uj9";
			$licence_pos = $this->encrypt->decode(LICENCE_POS, $encryption_key);
			
            $this->db->select('id');
			$this->db->where('business_units_id', BUSINESS_UNIT_ID);
			$this->db->where('is_active', TRUE);
			//$this->db->where('in_use', FALSE);
			$this->db->limit($licence_pos);
            $query = $this->db->get('pos');
            return $query->result();
        }
		
		function get_available_pos($pos_in_use)
        {
            $this->db->select('id');
            $this->db->where_not_in('id', $pos_in_use);
			$this->db->where('business_units_id', BUSINESS_UNIT_ID);
			$this->db->where('in_use', FALSE);
			$this->db->where('is_active', TRUE);
            $query = $this->db->get('pos');
            return $query->result();
        }
		   
		function get_payments($session_id)
        {
            $this->db->select('SUM(amount) total, pm.name, p.payment_methods_id');
            $this->db->from('payments p');
			$this->db->join('sales_transactions st', 'st.id = p.sales_transactions_id');
			$this->db->join('payment_methods pm', 'pm.id = p.payment_methods_id');
            $this->db->where('st.sessions_id', $session_id);
			$this->db->where('st.is_done', TRUE);
			$this->db->group_by('p.payment_methods_id, pm.name');
            $query = $this->db->get();
			 
            return $query->result();
		}
		
		function get_payments_of_day($day)
        {
			$in_value = $this->get_all_session_id_from_day($day);

            $this->db->select('SUM(amount) total, pm.name, p.payment_methods_id');
            $this->db->from('payments p');
			$this->db->join('sales_transactions st', 'st.id = p.sales_transactions_id');
			$this->db->join('payment_methods pm', 'pm.id = p.payment_methods_id');
            $this->db->where("st.sessions_id IN (".$in_value.")");
			$this->db->where('st.is_done', TRUE);
			$this->db->group_by('p.payment_methods_id, pm.name');
            $query = $this->db->get();
			 
            return $query->result();
        }
		
		function get_cash_details($session_id)
        {
            $this->db->select('SUM(quantity) quantity, ct.name, (SUM(quantity) * ct.name) total, ct.id cash_type_id');
            $this->db->from('cash_details cd');
			$this->db->join('cash_types ct', 'ct.id = cd.cash_types_id');
            $this->db->where('cd.sessions_id', $session_id);
			$this->db->where('(sales_session is true or open_session is true)');
			$this->db->group_by('cd.cash_types_id, ct.name, ct.id');
			$this->db->order_by('ct.id');
            $query = $this->db->get();
			 
            return $query->result();
        }

		function get_close_cash_details($session_id)
        {
            $this->db->select('SUM(quantity) quantity, ct.name, (SUM(quantity) * ct.name) total, ct.id cash_type_id');
            $this->db->from('cash_details cd');
			$this->db->join('cash_types ct', 'ct.id = cd.cash_types_id');
            $this->db->where('cd.sessions_id', $session_id);
			$this->db->where('cd.close_session', TRUE);
			$this->db->group_by('cd.cash_types_id, ct.name, ct.id');
			$this->db->order_by('ct.id');
            $query = $this->db->get();
			 
            return $query->result();
        }
		
		//get_result_by_join('cash_details', 'cash_type', array('cash_types_id'=>'id'),array('sessions_id'=> SESSION_ID), array('cash_types_id'=>'DESC'));
		
		protected function _get_table_field($table, $alias)
		{
			$fields='';
			if($table!='')
			{
				$field_data = $this->db->field_data($table);
				foreach ($field_data as $key => $value) 
				{
					if (empty($alias)) {
						$fields .= $value->name.', ';
					} else {
						$fields .= $alias.'.'.$value->name.', ';
					}
				}
			}
			$fields = trim($fields, ',');
			return $fields;
		}
		function get_sessions($where){
			$query = $this->db->query("
			SELECT s.id,b.name as negocio,to_char(s.create_time, 'DD') as day,  to_char(s.create_time, 'DD/MM/YYYY HH24:MI') apertura, 
			to_char(s.logout_time, 'DD/MM/YYYY HH24:MI') cierre, (SUM(s.close_take_out_cash)/count(s.id)) total_ingreso ,
			((SUM(s.close_cash_sales)+SUM(s.close_card_sales))/count(s.id)) ven_cash_card ,
			SUM(st.gross_total) venta_total , p.name as pos
			FROM sessions s
			 JOIN sales_transactions st on s.id = st.sessions_id
			 JOIN business_units b on st.business_units_id = b.id
			 JOIN pos p on s.pos_id = p.id
			WHERE st.is_done = true AND st.is_canceled = false $where
			GROUP BY to_char(s.create_time, 'DD/MM/YYYY HH24:MI'),to_char(s.logout_time, 'DD/MM/YYYY HH24:MI'), s.id,b.name, p.name, to_char(s.create_time, 'DD')
			");
			return $query->result();
		}
		function get_sessions_group_by_day($start, $end, $business) {
			$in_value = $this->get_all_session_id_from_range($start, $end);

			if (empty($in_value)) {
				return NULL;
			}

			$query = $this->db->query(
				"SELECT \"Day\", SUM(\"Efectivo\") AS \"Efectivo\", SUM(\"Debito\") AS \"Debito\", SUM(\"Credito\") AS \"Credito\", SUM(\"Total\") AS \"Total\" FROM (

					SELECT to_char(sessions.create_time, 'DD/MM/YYYY') AS \"Day\", 0 AS \"Efectivo\", 0 AS \"Debito\", 0 AS \"Credito\", SUM(payments.amount) AS \"Total\" 
					FROM sessions INNER JOIN sales_transactions ON sales_transactions.sessions_id = sessions.id 
					INNER JOIN payments ON payments.sales_transactions_id = sales_transactions.id
					WHERE sales_transactions.is_done = true AND sales_transactions.is_canceled = false
					AND sessions.create_time BETWEEN '".$start."' AND '".$end."'
					AND sessions.business_units_id = ".$business."
					GROUP BY to_char(sessions.create_time, 'DD/MM/YYYY')
					
					UNION ALL
					
					SELECT TO_CHAR(sessions.create_time, 'DD/MM/YYYY') AS \"Day\", SUM(payments.amount) AS \"Efectivo\", 0 AS \"Debito\", 0 AS \"Credito\", 0 AS \"Total\"
					FROM sessions
					INNER JOIN sales_transactions ON sales_transactions.sessions_id = sessions.id
					INNER JOIN payments ON payments.sales_transactions_id = sales_transactions.id
					WHERE sales_transactions.is_done = true AND sales_transactions.is_canceled = false
					AND payments.payment_methods_id = 1
					AND sales_transactions.sessions_id IN (".$in_value.")
					AND sales_transactions.business_units_id = ".$business."
					GROUP BY to_char(sessions.create_time, 'DD/MM/YYYY')
					
					UNION ALL
					
					SELECT to_char(sessions.create_time, 'DD/MM/YYYY') AS \"Day\", 0 AS \"Efectivo\", SUM(payments.amount) AS \"Debito\", 0 AS \"Credito\", 0 AS \"Total\"
					FROM sessions
					INNER JOIN sales_transactions ON sales_transactions.sessions_id = sessions.id
					INNER JOIN payments ON payments.sales_transactions_id = sales_transactions.id
					WHERE sales_transactions.is_done = true AND sales_transactions.is_canceled = false
					AND payments.payment_methods_id = 3
					AND sales_transactions.sessions_id IN (".$in_value.")
					AND sales_transactions.business_units_id = ".$business."
					GROUP BY to_char(sessions.create_time, 'DD/MM/YYYY')
					
					UNION ALL
					
					SELECT to_char(sessions.create_time, 'DD/MM/YYYY') AS \"Day\", 0 AS \"Efectivo\", 0 AS \"Debito\", SUM(payments.amount) AS \"Credito\", 0 AS \"Total\"
					FROM sessions
					INNER JOIN sales_transactions ON sales_transactions.sessions_id = sessions.id
					INNER JOIN payments ON payments.sales_transactions_id = sales_transactions.id
					WHERE sales_transactions.is_done = true AND sales_transactions.is_canceled = false
					AND payments.payment_methods_id = 4
					AND sales_transactions.sessions_id IN (".$in_value.")
					AND sales_transactions.business_units_id = ".$business."
					GROUP BY to_char(sessions.create_time, 'DD/MM/YYYY')
					
					) AS \"Data\"
					GROUP BY \"Day\"
					ORDER BY \"Day\" DESC"
			);

			return $query->result();
		}

		function get_sessions_id_by_day($day) {
			$query = $this->db->query(
				"SELECT id AS \"Id\"
				FROM sessions WHERE create_time BETWEEN
				'".$day."T00:00:00' AND '".$day."T23:59:59'
				ORDER BY id ASC"
			);

			return $query->result();
		}
		function get_sessions_by_id($id) {
				$query = $this->db->query("
				SELECT s.id, to_char(s.create_time, 'DD/MM/YYYY HH24:MI') apertura, 
				to_char(s.logout_time, 'DD/MM/YYYY HH24:MI') cierre, p.name as pos, s.image_sales as imagen,
				(SUM(s.close_cash_sales)/count(s.id)) as cash, 
				(SUM(s.close_card_sales)/count(s.id)) as card,
				(SUM(s.close_take_out_cash)/count(s.id)) total_ingreso ,
				((SUM(s.close_cash_sales)+SUM(s.close_card_sales))/count(s.id)) ven_cash_card ,
				SUM(st.gross_total) venta_total, u.first_name as responsable,
				CASE s.is_open WHEN true THEN 'Abierta' ELSE 'Cerrada' END AS estado, st.in_day, st.in_month, st.in_year,
				(sum(s.staff_payment)/count(s.id)) as sueldos, (sum(s.sales_commission)/count(s.id)) as comisiones, s.description
				FROM sessions s
				 JOIN sales_transactions st on s.id = st.sessions_id
				 JOIN business_units b on st.business_units_id = b.id
				 JOIN pos p on s.pos_id = p.id
				 JOIN staff u on s.staff_id = u.id
				WHERE s.id = $id
				GROUP BY to_char(s.create_time, 'DD/MM/YYYY HH24:MI'),to_char(s.logout_time, 'DD/MM/YYYY HH24:MI'), s.id,b.name, p.name, u.first_name, st.in_day, st.in_month, st.in_year, s.image_sales, s.description
				
				");
				return $query->row();
		}

		function get_sessions_by_day($day) {
			$query = $this->db->query(
				"SELECT
				sessions.id AS \"Id\",
				to_char(sessions.create_time, 'HH24:MI:SS') as \"Apertura\",
				to_char(sessions.logout_time, 'HH24:MI:SS') as \"Cierre\",
				(CASE sessions.is_open WHEN true THEN 'Abierta' ELSE 'Cerrada' END) AS \"Estado\",
				CONCAT(staff.first_name, ' ', staff.last_name) AS \"Responsable\",
				pos.name AS \"Pos\",
				COALESCE((SELECT sum(payments.amount)
				 FROM sales_transactions
				 INNER JOIN payments
				 ON payments.sales_transactions_id = sales_transactions.id
				 WHERE payments.payment_methods_id = 1
				 
				 AND sales_transactions.is_done = true AND sales_transactions.is_canceled = false
				 AND sales_transactions.sessions_id = sessions.id), 0) AS \"Efectivo\",
				COALESCE((SELECT sum(payments.amount)
				 FROM sales_transactions
				 INNER JOIN payments
				 ON payments.sales_transactions_id = sales_transactions.id
				 WHERE payments.payment_methods_id = 3
				 
				 AND sales_transactions.is_done = true AND sales_transactions.is_canceled = false
				 AND sales_transactions.sessions_id = sessions.id), 0) AS \"Debito\",
				COALESCE((SELECT sum(payments.amount)
				 FROM sales_transactions
				 INNER JOIN payments
				 ON payments.sales_transactions_id = sales_transactions.id
				 WHERE payments.payment_methods_id = 4
				 
				 AND sales_transactions.is_done = true AND sales_transactions.is_canceled = false
				 AND sales_transactions.sessions_id = sessions.id), 0) AS \"Credito\",
				COALESCE((SELECT sum(payments.amount)
				 FROM sales_transactions
				 INNER JOIN payments ON payments.sales_transactions_id = sales_transactions.id
				 WHERE sales_transactions.is_done = true AND sales_transactions.is_canceled = false
				 AND sales_transactions.sessions_id = sessions.id), 0) AS \"Total\"
				FROM sessions
				INNER JOIN staff ON staff.id = sessions.staff_id
				INNER JOIN pos ON pos.id = sessions.pos_id
				WHERE sessions.create_time BETWEEN '".$day."T00:00:00' AND '".$day."T23:59:59'
				GROUP BY sessions.id, to_char(sessions.create_time, 'HH24:MI:SS'), to_char(sessions.logout_time, 'HH24:MI:SS'),
				(CASE sessions.is_open WHEN true THEN 'Abierta' ELSE 'Cerrada' END),
				CONCAT(staff.first_name, ' ', staff.last_name), pos.name
				ORDER BY sessions.create_time"
			);

			return $query->result();
		}

		function get_last_sessions_by_staff($staff_id) {
			$query = $this->db->query(
				"SELECT
				sessions.id AS \"Id\",
				to_char(sessions.create_time, 'DD/MM/YYYY') as \"Fecha\",
				to_char(sessions.create_time, 'HH24:MI:SS') as \"Apertura\",
				to_char(sessions.logout_time, 'HH24:MI:SS') as \"Cierre\",
				(CASE sessions.is_open WHEN true THEN 'Abierta' ELSE 'Cerrada' END) AS \"Estado\",
				pos.name AS \"Pos\",
				COALESCE((SELECT sum(payments.amount)
				 FROM sales_transactions
				 INNER JOIN payments
				 ON payments.sales_transactions_id = sales_transactions.id
				 WHERE payments.payment_methods_id = 1
				 
				 AND sales_transactions.is_done = true AND sales_transactions.is_canceled = false
				 AND sales_transactions.sessions_id = sessions.id), 0) AS \"Efectivo\",
				COALESCE((SELECT sum(payments.amount)
				 FROM sales_transactions
				 INNER JOIN payments
				 ON payments.sales_transactions_id = sales_transactions.id
				 WHERE payments.payment_methods_id = 3
				 
				 AND sales_transactions.is_done = true AND sales_transactions.is_canceled = false
				 AND sales_transactions.sessions_id = sessions.id), 0) AS \"Debito\",
				COALESCE((SELECT sum(payments.amount)
				 FROM sales_transactions
				 INNER JOIN payments
				 ON payments.sales_transactions_id = sales_transactions.id
				 WHERE payments.payment_methods_id = 4
				 
				 AND sales_transactions.is_done = true AND sales_transactions.is_canceled = false
				 AND sales_transactions.sessions_id = sessions.id), 0) AS \"Credito\",
				COALESCE((SELECT sum(payments.amount)
				 FROM sales_transactions
				 INNER JOIN payments ON payments.sales_transactions_id = sales_transactions.id
				 WHERE sales_transactions.is_done = true AND sales_transactions.is_canceled = false
				 AND sales_transactions.sessions_id = sessions.id), 0) AS \"Total\"
				FROM sessions
				INNER JOIN staff ON staff.id = sessions.staff_id
				INNER JOIN pos ON pos.id = sessions.pos_id
				WHERE sessions.staff_id = ".$staff_id."
				GROUP BY sessions.id, to_char(sessions.create_time, 'DD/MM/YYYY'), to_char(sessions.create_time, 'HH24:MI:SS'), to_char(sessions.logout_time, 'HH24:MI:SS'),
				(CASE sessions.is_open WHEN true THEN 'Abierta' ELSE 'Cerrada' END),
				CONCAT(staff.first_name, ' ', staff.last_name), pos.name
				ORDER BY sessions.create_time DESC
				LIMIT 5"
			);

			return $query->result();
		}
		
		protected function _get_tables_field_alias($table)
	    {
	        $fields='';
	        if(strlen($table) > 0)
	        {
	            $CI =& get_instance();
	           
	            $field_data = $CI->db->field_data($table);
	            foreach ($field_data as $key => $value) 
	            {
	            	$fields .= $table.'.'.$value->name.' AS '.$table.'_'.$value->name.' , ';
	            }
	        }
	        $fields = trim($fields, ',');
	        return $fields;
		}
		
		function get_periods_available () {
			$sql = "SELECT DISTINCT date_part('year', create_time) AS \"year\", date_part('month', create_time) AS \"month\" FROM sessions WHERE date_part('year', create_time) > 2015 ORDER BY \"year\", \"month\" ASC";
			
			$query = $this->db->query($sql);
			$data = $query->result();
			
			$monthNames = array(
				'1' => 'Enero', '2' => 'Febrero', '3' => 'Marzo', '4' => 'Abril',
				'5' => 'Mayo', '6' => 'Junio', '7' => 'Julio', '8' => 'Agosto',
				'9' => 'Septiembre', '10' => 'Octubre', '11' => 'Noviembre',
				'12' => 'Diciembre'
			);
			
			$periodos = array();
			
			foreach ($data as $key => $periodo) {
				$monthLocale = $monthNames[$periodo->month];
			
				array_push($periodos, array(
					'periodo' => $periodo->year.'/'.(intval($periodo->month) < 10 ? '0'.$periodo->month : $periodo->month),
					'name' => $monthLocale.' '.$periodo->year
				));
			}
			
			return $periodos;
		}

		function get_all_session_id_from_day($day) {
			$query = $this->db->query(
				"SELECT id FROM sessions WHERE to_char(create_time, 'YYYY-MM-DD') = '".$day."'"
			);
			$sessions_id = $query->result();
			$in_value = "";

			foreach ($sessions_id as $key => $session) {
				$in_value .= $session->id.($key + 1 !== count($sessions_id) ? ',' : '');
			}

			return $in_value;
		}

		function get_all_session_id_from_range($start, $end) {
			$query = $this->db->query(
				"SELECT id FROM sessions WHERE create_time BETWEEN '".$start."' AND '".$end."'"
			);
			$sessions_id = $query->result();
			$in_value = "";

			foreach ($sessions_id as $key => $session) {
				$in_value .= $session->id.($key + 1 !== count($sessions_id) ? ',' : '');
			}

			return $in_value;
		}

		function total_vta_personal_by_sessions($ids) {
			$in = array();

			foreach ($ids as $key => $value) {
				array_push($in, $value->Id);
			}

			$query = $this->db->query(
				"select sum(payments.amount) as total from sales_transactions
				inner join payments on payments.sales_transactions_id = sales_transactions.id
				where sales_transactions.vta_trabajador = 1 and sales_transactions.sessions_id in (
					".implode(',', $in)."
				)"
			);

			if ($query->num_rows() === 0) {
				return 0;
			}

			return $query->row()->total;
		}

		function total_devolution_by_sessions($ids) {
			$in = array();

			foreach ($ids as $key => $value) {
				array_push($in, $value->Id);
			}

			$query = $this->db->query(
				"SELECT SUM(sales_transactions_details.item_price * sales_transactions_details.refund_quantity) AS total
				FROM sales_transactions
				INNER JOIN sales_transactions_details ON sales_transactions.id = sales_transactions_details.sales_transactions_id
				INNER JOIN credit_notes ON sales_transactions.id = credit_notes.sales_transactions_id
				WHERE sales_transactions_details.refund = 1
				AND credit_notes.create_time
				BETWEEN (select MIN(sessions.create_time) FROM sessions where sessions.id IN (".implode(',',$in)."))
				AND (select MAX(sessions.logout_time) FROM sessions where sessions.id IN (".implode(',',$in)."))"
			);

			if ($query->num_rows() === 0) {
				return 0;
			}

			return $query->row()->total;
		}
    }