You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3473 lines
167 KiB
3473 lines
167 KiB
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
use app\core\auth\User as UserAuth;
|
|
|
|
class Event_model extends CI_Model {
|
|
|
|
var $column_order = array(null, 'e.title','e.event_category','et.event_type', 'ecl.city', 'e.date_created', 'CONCAT(u.first_name, " ", u.last_name)', null); //set column field database for datatable orderable
|
|
var $column_search = array('CONCAT(u.first_name, " ", u.last_name)','e.title','e.date_created', 'es.event_status', 'et.event_type', 'es.event_status', 'ecl.city', 'e.event_category'); //set column field database for datatable searchable just firstname , lastname , address are searchable
|
|
// var $order = array('e.event_id' => 'desc'); // default order
|
|
|
|
public function __construct() {
|
|
parent::__construct();
|
|
$this->db->query("SET @@group_concat_max_len =30000");
|
|
}
|
|
|
|
private function _get_export_query(){
|
|
|
|
return "SELECT
|
|
es.start_date_time as start_date,
|
|
es.end_date_time as end_date,
|
|
e.location as event_venue,
|
|
e.rate as price_rate,
|
|
-- es.remaining_seat as num_remaining_places,
|
|
-- es.total_available_seat as total_places_avl,
|
|
(CASE
|
|
WHEN e.seat_feature = 2
|
|
THEN 'COMBINE'
|
|
ELSE \"\"
|
|
END) as name_header_is_combine,
|
|
(CASE
|
|
WHEN e.seat_feature = 2
|
|
THEN e.remaining_combined_seat
|
|
ELSE es.remaining_seat
|
|
END) as num_remaining_places,
|
|
(CASE
|
|
WHEN e.seat_feature = 2
|
|
THEN e.total_combined_seat
|
|
ELSE es.total_available_seat
|
|
END) as total_places_avl,
|
|
es.reservation_start_date as reservation_date,
|
|
(CASE
|
|
WHEN es.event_status = 'AVAILABLE' THEN 'Disponible'
|
|
WHEN es.event_status = 'FULL' THEN 'Complet'
|
|
ELSE 'Annulé'
|
|
END) AS event_statuses,
|
|
-- ecl.city as place_town,
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 1 THEN
|
|
(CASE
|
|
WHEN es.city_location IS NOT NULL THEN (SELECT Ecl.city FROM event_city_location Ecl WHERE Ecl.city_location_id = es.city_location AND Ecl.status =1)
|
|
WHEN es.address IS NOT NULL THEN es.address
|
|
WHEN es.city_name IS NOT NULL THEN es.city_name
|
|
ELSE \"\"
|
|
END)
|
|
ELSE
|
|
(CASE
|
|
WHEN e.city_location IS NOT NULL THEN (SELECT Ecl.city FROM event_city_location Ecl WHERE Ecl.city_location_id = e.city_location AND Ecl.status =1)
|
|
WHEN e.address IS NOT NULL THEN e.address
|
|
WHEN e.city_name IS NOT NULL THEN e.city_name
|
|
ELSE \"\"
|
|
END)
|
|
END)as place_town,
|
|
CONCAT(IFNULL(DATE_FORMAT(es.start_date_time, '%e/%m/%Y') ,'00/00/0000'),' - ', IFNULL(DATE_FORMAT(es.end_date_time, '%e/%m/%Y') ,'00/00/0000')) AS date_month,
|
|
CONCAT(IFNULL(DATE_FORMAT(es.start_date_time, '%Hh%i') ,'00h00'),' - ', IFNULL(DATE_FORMAT(es.end_date_time, '%Hh%i') ,'00h00')) AS hour ";
|
|
}
|
|
|
|
|
|
private function get_university_id_by_domain($domain) {
|
|
$query = $this->db->select('id')
|
|
->from('user_cpay')
|
|
->where('domain', $domain)
|
|
->get();
|
|
|
|
if ($query->num_rows() > 0) {
|
|
return $query->row()->id;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private function _get_event_list($where){
|
|
|
|
return "SELECT
|
|
".$this->add_to_custom_filter($where)." AS bostatus,
|
|
(SELECT
|
|
GROUP_CONCAT(CONCAT('{\"event_schedule_id\":\"',a.event_schedule_id,
|
|
'\", \"reservation_start_date\":\"',
|
|
( CASE
|
|
WHEN a.reservation_start_date IS NULL THEN \"\"
|
|
ELSE DATE_FORMAT(a.reservation_start_date, '%e/%m/%Y %Hh%i')
|
|
END),
|
|
'\", \"start_date_time\":\"',
|
|
(CASE
|
|
WHEN a.start_date_time IS NULL THEN \"\"
|
|
ELSE DATE_FORMAT(a.start_date_time, '%e/%m/%Y %Hh%i')
|
|
END),
|
|
'\", \"end_date_time\":\"',
|
|
(CASE
|
|
WHEN a.end_date_time IS NULL THEN \"\"
|
|
ELSE DATE_FORMAT(a.end_date_time, '%e/%m/%Y %Hh%i')
|
|
END),
|
|
'\", \"total_available_seat\":\"',
|
|
(CASE
|
|
WHEN a.total_available_seat <= 0 THEN \"\"
|
|
ELSE a.total_available_seat
|
|
END),
|
|
'\", \"remaining_seat\":\"',
|
|
(CASE
|
|
WHEN a.remaining_seat <=0 THEN \"\"
|
|
ELSE a.remaining_seat
|
|
END),
|
|
'\", \"event_status\":\"',a.event_status,
|
|
'\", \"event_url\":\"',(CASE
|
|
WHEN a.event_url IS NULL THEN \"\"
|
|
ELSE a.event_url
|
|
END),
|
|
'\", \"item_code\":\"',(CASE
|
|
WHEN a.item_code IS NULL THEN \"\"
|
|
ELSE a.item_code
|
|
END),
|
|
'\", \"seat_feature\":\"',e.seat_feature,
|
|
'\", \"date_feature\":\"',e.date_feature,
|
|
'\", \"back_office_status\":\"',a.back_office_status,
|
|
'\", \"avl_seats\":\"',(CASE
|
|
WHEN e.seat_feature = 2 THEN e.total_combined_seat
|
|
ELSE a.total_available_seat
|
|
END),
|
|
'\", \"rem_seats\":\"',(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END),
|
|
'\", \"reservation_end_date\":\"',
|
|
(CASE
|
|
WHEN a.reservation_end_date IS NULL THEN \"\"
|
|
ELSE DATE_FORMAT(a.reservation_end_date, '%e/%m/%Y %Hh%i')
|
|
END),
|
|
'\", \"city_location\":\"',
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 1 THEN
|
|
(CASE
|
|
WHEN a.city_location IS NULL THEN \"\"
|
|
ELSE a.city_location
|
|
END)
|
|
ELSE \"\"
|
|
END),
|
|
'\", \"location\":\"',
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 1 THEN
|
|
(CASE
|
|
WHEN a.location IS NULL THEN \"\"
|
|
ELSE a.location
|
|
END)
|
|
ELSE \"\"
|
|
END),
|
|
'\", \"address\":\"',
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 1 THEN
|
|
(CASE
|
|
WHEN a.address IS NULL THEN \"\"
|
|
ELSE a.address
|
|
END)
|
|
ELSE \"\"
|
|
END),
|
|
'\", \"code_postal\":\"',
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 1 THEN
|
|
(CASE
|
|
WHEN a.code_postal IS NULL THEN \"\"
|
|
ELSE a.code_postal
|
|
END)
|
|
ELSE \"\"
|
|
END),
|
|
'\", \"city_name\":\"',
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 1 THEN
|
|
(CASE
|
|
WHEN a.city_name IS NULL THEN \"\"
|
|
ELSE a.city_name
|
|
END)
|
|
ELSE \"\"
|
|
END),
|
|
'\", \"seats_per_subscriber\":\"',
|
|
(CASE
|
|
WHEN a.seats_per_subscriber <=0 THEN \"\"
|
|
ELSE a.seats_per_subscriber
|
|
END),
|
|
'\", \"rem_wl_seats\":\"',
|
|
(CASE
|
|
WHEN a.quota_waiting_list_seat <=0 THEN \"\"
|
|
ELSE a.quota_waiting_list_seat
|
|
END),
|
|
'\", \"avl_wl_seats\":\"',
|
|
(CASE
|
|
WHEN a.total_quota_waiting_list_seat <=0 THEN \"\"
|
|
ELSE a.total_quota_waiting_list_seat
|
|
END),
|
|
'\", \"total_quota_waiting_list_seat\":\"',
|
|
(CASE
|
|
WHEN a.total_quota_waiting_list_seat <=0 THEN \"\"
|
|
ELSE a.total_quota_waiting_list_seat
|
|
END),'\"}'
|
|
) ORDER BY
|
|
(CASE
|
|
WHEN (a.back_office_status = 2 AND a.event_status ='AVAILABLE' AND
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN
|
|
(CASE
|
|
WHEN e.remaining_combined_seat >0 && e.remaining_combined_seat IS NOT NULL THEN e.remaining_combined_seat
|
|
ELSE 0
|
|
END)
|
|
ELSE (CASE
|
|
WHEN a.remaining_seat >0 && a.remaining_seat IS NOT NULL THEN a.remaining_seat
|
|
ELSE 0
|
|
END)
|
|
END) >0)
|
|
THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN ((a.back_office_status = 2 OR a.back_office_status = 3) AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE')
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN
|
|
(CASE
|
|
WHEN e.remaining_combined_seat >0 && e.remaining_combined_seat IS NOT NULL THEN e.remaining_combined_seat
|
|
ELSE 0
|
|
END)
|
|
ELSE (CASE
|
|
WHEN a.remaining_seat >0 && a.remaining_seat IS NOT NULL THEN a.remaining_seat
|
|
ELSE 0
|
|
END)
|
|
END)=0 AND a.quota_waiting_list_seat > 0)
|
|
THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN a.back_office_status = 1 THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN (a.back_office_status = 3
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END)=0 AND a.quota_waiting_list_seat > 0)
|
|
THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
WHEN ((a.back_office_status = 2 OR a.back_office_status = 3) AND a.event_status ='FULL'
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN
|
|
(CASE
|
|
WHEN e.remaining_combined_seat >0 && e.remaining_combined_seat IS NOT NULL THEN e.remaining_combined_seat
|
|
ELSE 0
|
|
END)
|
|
ELSE (CASE
|
|
WHEN a.remaining_seat >0 && a.remaining_seat IS NOT NULL THEN a.remaining_seat
|
|
ELSE 0
|
|
END)
|
|
END)=0 AND a.quota_waiting_list_seat = 0) THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN a.back_office_status = 7 THEN CONCAT('b_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN a.back_office_status = 4 THEN CONCAT('c_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END) ASC,
|
|
a.start_date_time ASC
|
|
SEPARATOR ',') as child_events
|
|
FROM event_schedule a
|
|
WHERE a.event_id = e.event_id
|
|
".$where."
|
|
AND a.back_office_status NOT IN (6)
|
|
) AS event_schedule,
|
|
ecl.city as city";
|
|
}
|
|
|
|
private function _get_datatables_query($data_source, $export=0, $event_schedule_id=0){
|
|
$_query = ""; $where = ""; $_search = ""; $_ordey_by = ""; $data = array(); $select = ""; $_group_by="";
|
|
|
|
if ($export) {
|
|
$_query = $this->_get_export_query();
|
|
} else {
|
|
// $domain = $_SERVER['HTTP_HOST'];
|
|
// $university_id = (int) $this->get_university_id_by_domain($domain);
|
|
$where = $this->filter_by_event_schedule($data_source, "city_location_id");
|
|
$where .= $this->filter_by_event_schedule($data_source, "back_office_status");
|
|
$where .= $this->filter_by_event_schedule($data_source, "event_status");
|
|
$where .= $this->filter_by_event_schedule($data_source, "start_date_time");
|
|
|
|
|
|
$_query = $this->_get_event_list($where);
|
|
}
|
|
|
|
$_query .=",
|
|
es.event_status,
|
|
e.event_category,
|
|
e.event_id,
|
|
e.use_different_address_per_date,
|
|
e.title as event_title,
|
|
et.event_type,
|
|
e.description,
|
|
e.workshop_session,
|
|
DATE_FORMAT(e.date_created, '%e/%m/%Y %Hh%i') AS date_created,
|
|
CONCAT(u.first_name, ' ', u.last_name) as author
|
|
FROM event e
|
|
LEFT JOIN event_schedule es ON es.event_id = e.event_id
|
|
LEFT JOIN event_type et ON et.event_type_id = e.event_type_id
|
|
LEFT JOIN event_city_location ecl ON ecl.city_location_id = e.city_location
|
|
LEFT JOIN user u ON u.user_id = e.author
|
|
WHERE e.status IN (1) ";
|
|
|
|
if($event_schedule_id > 0) {
|
|
$_query .= " AND es.back_office_status NOT IN(6) AND es.event_schedule_id = ".$this->db->escape($event_schedule_id);
|
|
}
|
|
|
|
if(isset($data_source["custom_filter_search"]) && !empty($data_source["custom_filter_search"]) && $data_source["custom_filter_search"] != "all"){
|
|
|
|
if($data_source["custom_filter_search"] == "start_date_time"){
|
|
$splitte = explode("/", $data_source['search']['value']);
|
|
array_push($data, "%".$splitte[1]."-".$splitte[0]."%");
|
|
// echo $splitte[1]."-".$splitte[0];
|
|
$_search .= " AND ".$this->add_to_custom_filter($where)." IS NOT NULL AND ( es.start_date_time LIKE ? ";
|
|
|
|
} else if($data_source["custom_filter_search"] == "back_office_status"){
|
|
array_push($data, "%".$data_source['search']['value']."%");
|
|
$_search .= " AND ( e.title LIKE ? ";
|
|
|
|
if(!empty($data_source["filter_by_back_office_status"]) && isset($data_source["filter_by_back_office_status"])) {
|
|
array_push($data, $data_source[$data_source["keyname"]]);
|
|
$_search .= ") AND ( es." . $data_source["custom_filter_search"]." = ? ";
|
|
}
|
|
|
|
} else if($data_source["custom_filter_search"] == "event_status"){
|
|
array_push($data, "%".$data_source['search']['value']."%");
|
|
$_search .= " AND ( e.title LIKE ? ";
|
|
|
|
if(!empty($data_source["filter_by_event_status"]) && isset($data_source["filter_by_event_status"])) {
|
|
array_push($data, $data_source[$data_source["keyname"]]);
|
|
$_search .= ") AND ( es." . $data_source["custom_filter_search"]." = ? ";
|
|
}
|
|
|
|
}else if($data_source["custom_filter_search"] == "city_location"){
|
|
array_push($data, "%".$data_source['search']['value']."%");
|
|
$_search .= " AND ( e.title LIKE ? ";
|
|
if(!empty($data_source["filter_by_city_location_id"]) && isset($data_source["filter_by_city_location_id"])) {
|
|
array_push($data, $data_source[$data_source["keyname"]]);
|
|
array_push($data, $data_source[$data_source["keyname"]]);
|
|
$_search .= ") AND (CASE WHEN e.use_different_address_per_date =0
|
|
THEN (e.city_location = ? OR e.city_location IS NULL OR e.city_location = 0)
|
|
ELSE (es.city_location = ? OR es.city_location IS NULL OR es.city_location =0)
|
|
END";
|
|
}
|
|
} else {
|
|
if (isset($data_source["keyname"]) && !empty($data_source["keyname"])) {
|
|
if($data_source[$data_source["keyname"]] != "") {
|
|
$_query .= " AND e.".$this->db->escape_str($data_source["custom_filter_search"])." = '".$this->db->escape_str($data_source[$data_source["keyname"]])."'";
|
|
}
|
|
array_push($data, "%".$data_source['search']['value']."%");
|
|
$_search .= " AND ( e.title LIKE ? ";
|
|
} else {
|
|
array_push($data, "%".$data_source['search']['value']."%");
|
|
$_search .= " AND ( e." . $this->db->escape_str($data_source["custom_filter_search"])." LIKE ? ";
|
|
}
|
|
}
|
|
|
|
$_search .= ")";
|
|
} else {
|
|
if($data_source['search']['value']) {
|
|
$i = 0;
|
|
foreach ($this->column_search as $item) {// loop column
|
|
if($i===0){ // first loop
|
|
array_push($data, "%".$data_source['search']['value']."%");
|
|
$_search .= " AND ( ".$item." LIKE ? ";
|
|
} else {
|
|
array_push($data, "%".$data_source['search']['value']."%");
|
|
$_search .= " OR ".$item." LIKE ? ";
|
|
}
|
|
$i++;
|
|
}
|
|
$_search .= ")";
|
|
}
|
|
}
|
|
|
|
if($export<=0) {
|
|
// group by event_id
|
|
$_group_by .=" GROUP BY e.event_id ";
|
|
// $_ordey_by .= " ORDER BY bostatus ASC ";
|
|
}
|
|
|
|
if(isset($data_source['order']) && !empty($data_source['order'])) { // here order processing
|
|
if(isset($data_source['order']['0']['dir']) && !empty($data_source['order']['0']['dir'])) {
|
|
if(isset($this->column_order[$data_source['order']['0']['column']]))
|
|
$_ordey_by .= " ORDER BY ".$this->column_order[$data_source['order']['0']['column']]." ".$data_source['order']['0']['dir'];
|
|
} else {
|
|
$_ordey_by .= " ORDER BY ".key($this->order)." ".$this->order[key($this->order)];
|
|
}
|
|
} else if(isset($this->order) && !empty($this->order)) {
|
|
$_ordey_by .= " ORDER BY ".key($this->order)." ".$this->order[key($this->order)];
|
|
}
|
|
|
|
if($export<=0) {
|
|
$_ordey_by .= ($_ordey_by!="")?", ":" ORDER BY ";
|
|
$_ordey_by .= " bostatus ASC ";
|
|
}
|
|
//echo $_query;
|
|
return array("query"=>$_query.$_search.$_group_by.$_ordey_by, "data" =>$data);
|
|
}
|
|
|
|
public function get_events_list_export($data_source, $export, $event_schedule_id){
|
|
$_query = $this->_get_datatables_query($data_source, $export, $event_schedule_id);
|
|
return $this->db->query($_query["query"], $_query["data"])->result();
|
|
}
|
|
|
|
public function get_datatables($data_source, $export, $event_schedule_id){
|
|
$_query = $this->_get_datatables_query($data_source, $export, $event_schedule_id);
|
|
|
|
//echo $_query["query"];
|
|
if($data_source['length'] != -1){
|
|
$_query["query"] .= " LIMIT ".$this->db->escape_str($data_source['start']).", ".$this->db->escape_str($data_source['length']);
|
|
}
|
|
return $this->db->query($_query["query"], $_query["data"])->result();
|
|
}
|
|
|
|
public function count_filtered($data_source, $export, $event_schedule_id){
|
|
$_query = $this->_get_datatables_query($data_source, $export, $event_schedule_id);
|
|
return $this->db->query($_query["query"], $_query["data"])->num_rows();
|
|
}
|
|
|
|
public function count_all($data_source, $export, $event_schedule_id){
|
|
$_query = $this->_get_datatables_query($data_source, $export, $event_schedule_id);
|
|
return $this->db->query($_query["query"], $_query["data"])->num_rows();
|
|
}
|
|
|
|
private function filter_by_event_schedule($data_source, $filter){
|
|
|
|
if(isset($data_source["custom_filter_search"]) && !empty($data_source["custom_filter_search"]) && $data_source["custom_filter_search"] != "all"){
|
|
|
|
switch($filter){
|
|
case "back_office_status" :
|
|
if(!empty($data_source["filter_by_".$filter]) && isset($data_source["filter_by_".$filter])) {
|
|
return "AND a.back_office_status = ".$this->db->escape($data_source[$data_source["keyname"]])." ";
|
|
}
|
|
break;
|
|
|
|
case "event_status" :
|
|
if(!empty($data_source["filter_by_".$filter]) && isset($data_source["filter_by_".$filter])) {
|
|
return "AND a.event_status = '".$this->db->escape_str($data_source[$data_source["keyname"]])."' ";
|
|
}
|
|
break;
|
|
|
|
case "city_location_id" :
|
|
if(!empty($data_source["filter_by_".$filter]) && isset($data_source["filter_by_".$filter])) {
|
|
return " AND (a.city_location = '".$this->db->escape_str($data_source[$data_source["keyname"]])."'
|
|
OR a.city_location IS NULL OR a.city_location =0) ";
|
|
}
|
|
break;
|
|
|
|
case "start_date_time" :
|
|
if(!empty($data_source["custom_filter_search"]) && isset($data_source["custom_filter_search"]) && $data_source["custom_filter_search"] == "start_date_time"){
|
|
|
|
$splitte = explode("/", $data_source['search']['value']);
|
|
return " AND a.start_date_time LIKE '%".$this->db->escape_like_str($splitte[1]."-".$splitte[0])."%' ESCAPE '!' ";
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return " ";
|
|
break;
|
|
|
|
} //end of switch
|
|
return " ";
|
|
}
|
|
}
|
|
|
|
private function add_to_custom_filter($where){
|
|
return "(SELECT
|
|
GROUP_CONCAT(CONCAT(
|
|
CASE
|
|
-- Coming soon --
|
|
WHEN (a.back_office_status = 0)
|
|
THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Normal Reservation --
|
|
WHEN (
|
|
a.back_office_status = 2
|
|
AND a.event_status ='AVAILABLE'
|
|
AND (
|
|
(
|
|
e.event_category = 'ONLINE_EVENT'
|
|
AND
|
|
a.start_date_time < NOW()
|
|
)
|
|
OR
|
|
(
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) >0
|
|
)
|
|
)
|
|
)
|
|
THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Waiting List --
|
|
WHEN (
|
|
a.back_office_status = 2
|
|
AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE' )
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END)>=0
|
|
AND a.quota_waiting_list_seat > 0
|
|
)
|
|
THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- cancelled but not yet passe single dates
|
|
WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) &&
|
|
a.back_office_status NOT IN (1)
|
|
THEN
|
|
CASE
|
|
WHEN a.end_date_time > NOW()
|
|
THEN CONCAT('ad1_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) &&
|
|
a.back_office_status NOT IN (1)
|
|
THEN
|
|
CASE
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW()
|
|
THEN CONCAT('ad1_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
|
|
-- cancelled but not yet passe multi dates
|
|
WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) &&
|
|
a.back_office_status NOT IN (1)
|
|
THEN
|
|
CASE
|
|
WHEN a.end_date_time > NOW()
|
|
THEN CONCAT('ad2_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) &&
|
|
a.back_office_status NOT IN (1)
|
|
THEN
|
|
CASE
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW()
|
|
THEN CONCAT('ad2_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
|
|
-- Coming soon (Regular Event)--
|
|
WHEN a.back_office_status = 1 AND e.event_category <> 'ONLINE_EVENT'
|
|
THEN CONCAT('ag_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Coming soon (Online Event) --
|
|
WHEN (a.back_office_status = 1 OR a.back_office_status = 2)
|
|
AND a.start_date_time >= NOW()
|
|
AND e.event_category = 'ONLINE_EVENT'
|
|
THEN CONCAT('ag_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Coming soon --
|
|
WHEN a.back_office_status = 1
|
|
THEN CONCAT('ag_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Complete (Regular Event) --
|
|
WHEN (
|
|
(a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND a.event_status ='FULL'
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END)>=0
|
|
AND a.quota_waiting_list_seat = 0
|
|
)
|
|
THEN CONCAT('af_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Complete (Online Event)--
|
|
WHEN (
|
|
(a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND a.event_status ='FULL'
|
|
AND e.event_category = 'ONLINE_EVENT'
|
|
)
|
|
THEN CONCAT('af_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Locked --
|
|
WHEN a.back_office_status = 3 THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
-- Terminee --
|
|
WHEN a.back_office_status = 7 THEN CONCAT('b_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
-- Passe --
|
|
WHEN a.back_office_status = 4 THEN CONCAT('c_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
-- Archived --
|
|
ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
)
|
|
ORDER BY
|
|
(CASE
|
|
-- Normal Reservation --
|
|
WHEN (
|
|
a.back_office_status = 2
|
|
AND a.event_status ='AVAILABLE'
|
|
AND
|
|
(
|
|
(
|
|
e.event_category = 'ONLINE_EVENT'
|
|
AND
|
|
a.start_date_time < NOW()
|
|
)
|
|
OR
|
|
(
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) > 0
|
|
)
|
|
)
|
|
)
|
|
THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Waiting List --
|
|
WHEN (
|
|
a.back_office_status = 2
|
|
AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE' )
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END)>=0
|
|
AND a.quota_waiting_list_seat > 0
|
|
)
|
|
THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- cancelled but not yet passe single dates
|
|
WHEN a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) &&
|
|
a.back_office_status NOT IN (1)
|
|
THEN
|
|
CASE
|
|
WHEN a.end_date_time > NOW()
|
|
THEN CONCAT('aba1_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
WHEN a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1) &&
|
|
a.back_office_status NOT IN (1)
|
|
THEN
|
|
CASE
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW()
|
|
THEN CONCAT('aba1_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
|
|
-- cancelled but not yet passe multi dates
|
|
WHEN a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) &&
|
|
a.back_office_status NOT IN (1)
|
|
THEN
|
|
CASE
|
|
WHEN a.end_date_time > NOW()
|
|
THEN CONCAT('aba2_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
WHEN a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2) &&
|
|
a.back_office_status NOT IN (1)
|
|
THEN
|
|
CASE
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW()
|
|
THEN CONCAT('aba2_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('e_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
|
|
-- Coming soon (Regular Event)--
|
|
WHEN a.back_office_status = 1 AND e.event_category <> 'ONLINE_EVENT'
|
|
THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Coming soon (Online Event) --
|
|
WHEN (a.back_office_status = 1 OR a.back_office_status = 2)
|
|
AND a.start_date_time >= NOW()
|
|
AND e.event_category = 'ONLINE_EVENT'
|
|
THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Complete --
|
|
WHEN (
|
|
(a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND a.event_status ='FULL'
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END)>=0
|
|
AND a.quota_waiting_list_seat = 0
|
|
)
|
|
THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Complete (Online Event) --
|
|
WHEN (
|
|
(a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND a.event_status ='FULL'
|
|
AND e.event_category = 'ONLINE_EVENT'
|
|
)
|
|
THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Locked --
|
|
WHEN a.back_office_status = 3 THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
-- Terminee --
|
|
WHEN a.back_office_status = 7 THEN CONCAT('b_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
-- Passe --
|
|
WHEN a.back_office_status = 4 THEN CONCAT('c_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
-- Archived --
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END) ASC,
|
|
a.start_date_time ASC
|
|
SEPARATOR '')
|
|
as bostatus
|
|
FROM event_schedule a
|
|
WHERE a.event_id = e.event_id
|
|
".$where."
|
|
AND a.back_office_status NOT IN (6)
|
|
)";
|
|
}
|
|
|
|
/*
|
|
* @method get total reservations, available reservations etc.
|
|
*/
|
|
private function _get_my_reservations_info($user_id, $res_type = 0, $btype = 1)
|
|
{
|
|
if ($res_type == 1) { // My Reservation In History
|
|
//0,6,3,1,2
|
|
$and_ = " AND (es.back_office_status NOT IN(0,6,3,1,2,7) AND es.event_status != 'CANCEL')
|
|
AND e.status = 1 ";
|
|
} else {
|
|
$and_ = " AND es.back_office_status NOT IN(0,5,6,4)
|
|
AND e.status = 1";
|
|
}
|
|
|
|
// booking list
|
|
switch ($btype) {
|
|
case 1: // Normal Reservation
|
|
$select = "SUM(err.number_of_guest+1) total_res, COUNT(DISTINCT es.event_schedule_id) nr_total_events";
|
|
$join = "LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id";
|
|
$and_user = "AND err.subscriber = $user_id AND err.status = 1";
|
|
break;
|
|
case 2: // Waitinglist Reservation
|
|
$select = "SUM(erw.number_of_places) total_wres, COUNT(DISTINCT e.event_id) wl_total_events";
|
|
$join = "LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id";
|
|
$and_user = "AND erw.wait_list_subscriber = $user_id AND erw.status = 1";
|
|
break;
|
|
|
|
default: // Historique Reservation
|
|
$select = "COUNT(DISTINCT es.event_schedule_id) mh_total_events, es.event_schedule_id as hevent";
|
|
$join = " LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id";
|
|
$and_user = "AND ((err.subscriber = $user_id AND err.status = 1) )";
|
|
/*
|
|
Removed WL in My Reservation Historique
|
|
$join .= " LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id";
|
|
|| (erw.wait_list_subscriber = $user_id AND erw.status = 1)
|
|
*/
|
|
|
|
break;
|
|
}
|
|
|
|
$this->load->model("event_schedule_model");
|
|
return "SELECT $select
|
|
FROM event e
|
|
LEFT JOIN event_schedule es ON es.event_id = e.event_id
|
|
$join
|
|
LEFT JOIN event_type et ON e.event_type_id = et.event_type_id
|
|
LEFT JOIN event_file_attachment efa ON e.event_id = efa.event_id
|
|
WHERE efa.attachment_type = 1
|
|
AND efa.status = 1
|
|
$and_user
|
|
$and_
|
|
";
|
|
}
|
|
|
|
private function _get_my_reservations_winfo($user_id, $res_type = 0)
|
|
{
|
|
if ($res_type) {
|
|
$and_ = " AND es.back_office_status NOT IN(0,5,6,1,2)
|
|
AND e.status = 1 ";
|
|
} else {
|
|
$and_ = " AND es.back_office_status NOT IN(0,5,6,3,7,4)
|
|
AND e.status = 1 AND es.event_status != 'CANCEL'";
|
|
}
|
|
$this->load->model("event_schedule_model");
|
|
return "SELECT SUM(err.number_of_guest)+1,
|
|
|
|
e.event_id, efa.file_name, e.title, et.event_type, e.description, es.event_status,e.date_feature, e.city_name,
|
|
(SELECT COUNT(event_schedule_id) FROM event_schedule esc WHERE event_id = es.event_id) AS event_count,
|
|
|
|
(CASE WHEN es.event_status = 'CANCEL' THEN (SELECT COUNT(event_status) FROM event_schedule es WHERE es.event_status='CANCEL' AND es.event_id = e.event_id ) ELSE \"\" END) AS cancel_count,
|
|
(CASE
|
|
WHEN e.is_favorite = 1
|
|
THEN (SELECT fl.image FROM frontoffice_logo fl WHERE fl.status =1 )
|
|
ELSE \"\"
|
|
END) as event_favorite,
|
|
(SELECT
|
|
GROUP_CONCAT(CONCAT(
|
|
CASE
|
|
".$this->sort_mres_events_by($user_id, $res_type)."
|
|
END
|
|
)
|
|
ORDER BY
|
|
(CASE
|
|
".$this->sort_mres_events_by($user_id, $res_type)."
|
|
END),
|
|
a.start_date_time ASC
|
|
SEPARATOR '#')
|
|
as bostatus
|
|
FROM event_schedule a
|
|
WHERE a.event_id = e.event_id
|
|
AND a.back_office_status NOT IN (0,5,6)
|
|
LIMIT 1
|
|
) AS bostatus
|
|
".$this->event_schedule_model->query_date()."
|
|
FROM event e
|
|
LEFT JOIN event_schedule es ON es.event_id = e.event_id
|
|
LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id
|
|
LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id
|
|
LEFT JOIN event_type et ON e.event_type_id = et.event_type_id
|
|
LEFT JOIN event_file_attachment efa ON e.event_id = efa.event_id
|
|
WHERE efa.attachment_type = 1
|
|
AND efa.status = 1
|
|
AND ((err.subscriber = $user_id AND err.status = 1) || (erw.wait_list_subscriber = $user_id AND erw.status = 1))
|
|
";
|
|
}
|
|
|
|
public function _get_preferences_query($user_id)
|
|
{
|
|
$subscriber_id = $this->db->select('subscriber_id')
|
|
->from('user_subscriber')
|
|
->where('subscriber', $user_id)
|
|
->get()
|
|
->row()
|
|
->subscriber_id;
|
|
|
|
$preferences = $this->db->select('event_preference')
|
|
->from('user_subscriber_event_preference')
|
|
->where('subscriber_id', $subscriber_id)
|
|
->get()
|
|
->result_array();
|
|
|
|
$prefer = array();
|
|
foreach($preferences as $preference){
|
|
array_push($prefer, $preference['event_preference']);
|
|
}
|
|
|
|
return $prefer;
|
|
}
|
|
|
|
private function sort_mres_events_by($user_id, $res_type = 0){
|
|
|
|
if(isset($user_id) && !empty($user_id)){
|
|
$q_res = "-- Normal Reservation with reservation --
|
|
WHEN (
|
|
(a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL')
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND a.event_schedule_id IN(
|
|
SELECT er.event_schedule_id
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = '$user_id'
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.status =1
|
|
)
|
|
)
|
|
THEN CONCAT('abd_',a.start_date_time,'_',a.event_schedule_id,'_')";
|
|
$q_wl = "-- Waiting list with reservation --
|
|
WHEN ((a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE')
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND a.event_schedule_id IN(
|
|
SELECT ewl.event_schedule_id
|
|
FROM event_wait_list ewl
|
|
WHERE ewl.wait_list_subscriber = '$user_id'
|
|
AND ewl.event_schedule_id = a.event_schedule_id
|
|
AND ewl.status =1
|
|
)
|
|
)
|
|
THEN CONCAT('abe_',a.start_date_time,'_',a.event_schedule_id,'_')";
|
|
switch ($res_type) {
|
|
case 1:
|
|
/*GET HISTORY */
|
|
$q_part = "{$q_res} {$q_wl}";
|
|
break;
|
|
case 2:
|
|
/*GET WAITLIST*/
|
|
$q_part = "{$q_wl}";
|
|
break;
|
|
default:
|
|
/*GET RESERVATIONS*/
|
|
$q_part = "{$q_res}";
|
|
break;
|
|
}
|
|
return "-- Normal Reservation (Reopened)--
|
|
WHEN (
|
|
a.back_office_status = 2
|
|
AND a.event_status ='AVAILABLE'
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) > 0
|
|
AND '$user_id' NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = '$user_id'
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.status =1
|
|
)
|
|
AND '$user_id' NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = '$user_id'
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND ewl.status =1
|
|
)
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = '$user_id'
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND ewl.status = 1
|
|
)
|
|
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.status = 1
|
|
)
|
|
|
|
)
|
|
THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Normal Reservation --
|
|
WHEN (
|
|
a.back_office_status = 2
|
|
AND a.event_status ='AVAILABLE'
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) > 0
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND '$user_id' NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = '$user_id'
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.status =1
|
|
)
|
|
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND ewl.status = 1
|
|
)
|
|
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.status = 1
|
|
)
|
|
/* AND '$user_id' NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = '$user_id'
|
|
AND ets.event_id = a.event_id
|
|
AND ewl.status =1
|
|
)*/
|
|
)
|
|
THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Waiting list --
|
|
-- Events with remaining seats greater than zero and event status 'FULL' fall in this condition --
|
|
WHEN (
|
|
a.back_office_status = 2
|
|
AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL')
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND
|
|
(
|
|
(
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) <= 0
|
|
)
|
|
OR (
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) > 0
|
|
AND a.event_status ='FULL'
|
|
)
|
|
)
|
|
AND
|
|
a.quota_waiting_list_seat > 0
|
|
AND '$user_id' NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
WHERE ewl.wait_list_subscriber = '$user_id'
|
|
AND ewl.event_schedule_id = a.event_schedule_id
|
|
AND ewl.status =1
|
|
)
|
|
AND '$user_id' NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = '$user_id'
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.status =1
|
|
)
|
|
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND ewl.status = 1
|
|
)
|
|
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.status = 1
|
|
)
|
|
)
|
|
THEN CONCAT('abc_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
{$q_part}
|
|
|
|
-- cancelled but not yet passe single dates
|
|
WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1)
|
|
THEN
|
|
CASE
|
|
WHEN a.end_date_time > NOW()
|
|
THEN CONCAT('abf1_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1)
|
|
THEN
|
|
CASE
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW()
|
|
THEN CONCAT('abf1_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
|
|
-- cancelled but not yet passe multi dates
|
|
WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2)
|
|
THEN
|
|
CASE
|
|
WHEN a.end_date_time > NOW()
|
|
THEN CONCAT('abf2_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2)
|
|
THEN
|
|
CASE
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW()
|
|
THEN CONCAT('abf2_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
|
|
-- Coming soon --
|
|
WHEN (
|
|
a.back_office_status = 1
|
|
AND (
|
|
e.event_category = 'ONLINE_EVENT'
|
|
OR
|
|
(
|
|
'$user_id' NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = '$user_id'
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.status =1
|
|
)
|
|
AND '$user_id' NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = '$user_id'
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND ewl.status =1
|
|
)
|
|
)
|
|
)
|
|
)
|
|
THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Event is FULL --
|
|
WHEN (
|
|
(a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND a.event_status ='FULL'
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END)>=0 AND a.quota_waiting_list_seat = 0
|
|
AND '$user_id' NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = '$user_id'
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.status =1
|
|
)
|
|
AND '$user_id' NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = '$user_id'
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND ewl.status =1
|
|
)
|
|
) THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
WHEN a.back_office_status = 3 THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN a.back_office_status = 7 THEN CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN a.back_office_status = 4 THEN CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') ";
|
|
}
|
|
}
|
|
|
|
private function _get_filter_query_mreservations($user_id, $res_type = 0, $search = "")
|
|
{
|
|
$wsearch = "";
|
|
if (!empty($search)) {
|
|
$wsearch =" AND (e.title LIKE \"%{$search}%\" OR et.event_type LIKE \"%{$search}%\" OR (CASE
|
|
WHEN e.use_different_address_per_date = 1 THEN
|
|
(CASE
|
|
WHEN es.city_location IS NULL THEN \"\"
|
|
ELSE es.city_location
|
|
END)
|
|
ELSE (CASE
|
|
WHEN e.city_location IS NULL THEN \"\"
|
|
ELSE e.city_location
|
|
END)
|
|
END) IN (SELECT city_location_id FROM event_city_location WHERE status = 1 AND city LIKE \"%{$search}%\") )";
|
|
}
|
|
|
|
switch ($res_type) {
|
|
case 1:
|
|
/*GET HISTORY */
|
|
$and_ = " AND ((err.subscriber = {$user_id} AND err.status = 1))"
|
|
." AND (es.back_office_status NOT IN(0,6,3,1,2,7) AND es.event_status != 'CANCEL') AND e.status = 1 ";
|
|
$join_ = 'LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id ';
|
|
$order_ = '';
|
|
$subQueryWhere = 'AND a.back_office_status NOT IN (0,6,3,1,2,7)';
|
|
/*
|
|
Removed WL in My Reservation Historique
|
|
$join .= " LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id";
|
|
|| (erw.wait_list_subscriber = $user_id AND erw.status = 1)
|
|
*/
|
|
break;
|
|
case 2:
|
|
/*GET WAITLIST*/
|
|
$and_ = " AND (erw.wait_list_subscriber = $user_id AND erw.status = 1)"
|
|
." AND es.back_office_status NOT IN(0,5,6,4) AND e.status = 1";
|
|
$join_ = 'LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id';
|
|
$subQueryWhere = 'AND a.back_office_status NOT IN (0,5,6,4)';
|
|
break;
|
|
default:
|
|
/*GET RESERVATIONS*/
|
|
$and_ = " AND (err.subscriber = $user_id AND err.status = 1)"
|
|
." AND es.back_office_status NOT IN(0,5,6,4) AND e.status = 1 ";
|
|
$join_ = 'LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id ';
|
|
$subQueryWhere = 'AND a.back_office_status NOT IN (0,5,6,4)';
|
|
break;
|
|
}
|
|
$this->load->model("event_schedule_model");
|
|
return "SELECT es.event_schedule_id, e.event_id, efa.file_name, e.title, et.event_type, e.description, es.event_status,e.date_feature, e.city_name,
|
|
(SELECT COUNT(event_schedule_id) FROM event_schedule esc WHERE event_id = es.event_id) AS event_count,
|
|
|
|
(CASE WHEN es.event_status = 'CANCEL' THEN (SELECT COUNT(event_status) FROM event_schedule es WHERE es.event_status='CANCEL' AND es.event_id = e.event_id ) ELSE \"\" END) AS cancel_count,
|
|
(CASE
|
|
WHEN e.is_favorite = 1
|
|
THEN (SELECT fl.image FROM frontoffice_logo fl WHERE fl.status =1 )
|
|
ELSE \"\"
|
|
END) as event_favorite,
|
|
(SELECT
|
|
GROUP_CONCAT(CONCAT(
|
|
CASE
|
|
".$this->sort_mres_events_by($user_id, $res_type)."
|
|
END
|
|
)
|
|
ORDER BY
|
|
(CASE
|
|
".$this->sort_mres_events_by($user_id, $res_type)."
|
|
END),
|
|
a.start_date_time ASC
|
|
SEPARATOR '#')
|
|
as bostatus
|
|
FROM event_schedule a
|
|
WHERE a.event_id = e.event_id
|
|
".$subQueryWhere."
|
|
LIMIT 1
|
|
) AS bostatus
|
|
FROM event e
|
|
LEFT JOIN event_schedule es ON es.event_id = e.event_id
|
|
$join_
|
|
LEFT JOIN event_type et ON e.event_type_id = et.event_type_id
|
|
LEFT JOIN event_file_attachment efa ON e.event_id = efa.event_id
|
|
WHERE efa.attachment_type = 1
|
|
AND efa.status = 1
|
|
$and_ $wsearch
|
|
";
|
|
}
|
|
|
|
/*
|
|
* get all user reservations, limit by 6
|
|
*/
|
|
public function filter_event_reservations($filter, $page, $month, $type, $city, $user_id, $logged_in, $res_type = 0, $search = "")
|
|
{
|
|
$pages = $page*6-6;
|
|
|
|
if($logged_in) $preferences = $this->_get_preferences_query($user_id);
|
|
// // $user_id = ($logged_in)?$user_id:false;
|
|
// echo $user_id;
|
|
// Filter ------------------------------------------------------------------------
|
|
$query = $this->_get_filter_query_mreservations($user_id, $res_type, $search);
|
|
//$query .= $this->_get_filter_type($filter, $month, $type, $city);
|
|
// $query .= ' GROUP BY es.event_schedule_id ORDER BY bostatus ASC';
|
|
$query .= ' GROUP BY es.event_schedule_id ORDER BY
|
|
SUBSTRING_INDEX(bostatus,"_",1) ASC,
|
|
CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) NOT IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END ASC,
|
|
CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END DESC';
|
|
$query .= ' LIMIT '.(($pages > 0)?$pages:0).', 6';
|
|
$events = $this->db->query($query);
|
|
|
|
|
|
// Pagination ---------------------------------------------------------------------
|
|
$query = $this->_get_filter_query_mreservations($user_id, $res_type, $search);
|
|
//$query .= $this->_get_filter_type($filter, $month, $type, $city);
|
|
$query .= ' GROUP BY es.event_schedule_id ORDER BY
|
|
SUBSTRING_INDEX(bostatus,"_",1) ASC,
|
|
CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) NOT IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END ASC,
|
|
CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END DESC';
|
|
// if($logged_in) $this->db->where_in('e.event_type_id', $preferences);
|
|
$pagination = $this->db->query($query);
|
|
return array(
|
|
'data' => $events->result(),
|
|
'pagination' => ceil($pagination->num_rows()/6),
|
|
'result_count' => $events->num_rows(),
|
|
'logged_in' => $logged_in
|
|
);
|
|
}
|
|
|
|
/*
|
|
* get user reservations for the current even
|
|
*/
|
|
public function get_reservations_info($filter, $page, $month, $type, $city, $user_id, $logged_in, $res_type = 0)
|
|
{
|
|
$this->load->model('event_moderation_model');
|
|
|
|
if($logged_in) $preferences = $this->_get_preferences_query($user_id);
|
|
|
|
//normal reservations
|
|
$bquery = $this->_get_my_reservations_info($user_id, 0, 1);
|
|
$bquery .= $this->_get_filter_type($filter, $month, $type, $city);
|
|
$booking = $this->db->query($bquery);
|
|
|
|
//waitlist reservations
|
|
$wquery = $this->_get_my_reservations_info($user_id, 2, 2);
|
|
$wquery .= $this->_get_filter_type($filter, $month, $type, $city);
|
|
$waitlist = $this->db->query($wquery);
|
|
|
|
//number of events participated
|
|
$hquery = $this->_get_my_reservations_info($user_id, 1, 3);
|
|
$hquery .= $this->_get_filter_type($filter, $month, $type, $city);
|
|
$hev_count = $this->db->query($hquery);
|
|
|
|
$total_waitlist_active_res = $this->event_moderation_model->getNumberOfReservation(3, $user_id, true, 0, 0, [], false, true);
|
|
// Total number of cancelled moderated events that the user is reserved
|
|
$total_waitlist_active_cancel_res = $this->event_moderation_model->getNumberOfCancelledReservation(3, $user_id, true, 0, 0, [], false, true);
|
|
// Total number of moderated events that the user is reserved
|
|
$total_moderated_waitlist_res_events = $this->event_moderation_model->getNumberOfReservation(3, $user_id, false, 0);
|
|
|
|
return array(
|
|
'normal_res' => $booking->result()[0]->total_res ?? 0,
|
|
'waitlist_res' => $waitlist->result()[0]->total_wres ?? 0,
|
|
'total_waitlist_active_res' => $total_waitlist_active_res ?? 0,
|
|
'total_waitlist_cancel_res' => $total_waitlist_active_cancel_res ?? 0,
|
|
'total_moderated_waitlist_res_events' => $total_moderated_waitlist_res_events ?? 0,
|
|
'nr_total_events' => $booking->result()[0]->nr_total_events ?? 0,
|
|
'wl_total_events' => $waitlist->result()[0]->wl_total_events ?? 0,
|
|
'mh_total_events' => $hev_count->result()[0]->mh_total_events ?? 0,
|
|
'logged_in' => $logged_in
|
|
);
|
|
}
|
|
|
|
private function sort_fo_events_by($user_id){
|
|
|
|
if ( isset($user_id) && !empty($user_id) )
|
|
{
|
|
return "-- Normal Reservation (Reopened)--
|
|
WHEN (
|
|
a.back_office_status = 2
|
|
AND a.event_status ='AVAILABLE'
|
|
AND
|
|
(
|
|
(
|
|
e.event_category = 'ONLINE_EVENT'
|
|
AND
|
|
a.start_date_time < NOW()
|
|
)
|
|
OR
|
|
(
|
|
e.event_category <> 'ONLINE_EVENT'
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) > 0
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND er.event_schedule_id = a.event_schedule_id
|
|
AND ess.event_id = a.event_id
|
|
AND ess.back_office_status NOT IN(4, 5, 7)
|
|
AND er.status = 1
|
|
)
|
|
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ess.event_id = a.event_id
|
|
AND ess.back_office_status NOT IN(4, 5, 7)
|
|
AND er.status = 1
|
|
)
|
|
|
|
AND
|
|
(
|
|
(".$this->db->escape($user_id)." NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ess.back_office_status NOT IN(4, 5, 7)
|
|
AND ess.event_id = a.event_id
|
|
AND ewl.status =1)
|
|
)
|
|
|
|
OR
|
|
|
|
(".$this->db->escape($user_id)." IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ess.event_id = a.event_id
|
|
AND ess.back_office_status NOT IN(4, 5, 7)
|
|
AND ess.remaining_seat > 0
|
|
AND ewl.status =1)
|
|
)
|
|
)
|
|
)
|
|
) -- ENDOR --
|
|
)
|
|
THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Normal Reservation --
|
|
WHEN (
|
|
a.back_office_status = 2
|
|
AND a.event_status ='AVAILABLE'
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) > 0
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND er.event_schedule_id = a.event_schedule_id
|
|
AND ess.back_office_status NOT IN(4, 5, 7)
|
|
AND ets.event_id = a.event_id
|
|
AND er.status = 1
|
|
)
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ess.back_office_status IN(3,4)
|
|
AND ess.back_office_status NOT IN(7, 5)
|
|
AND ets.event_id = a.event_id
|
|
AND er.status = 1
|
|
)
|
|
/*AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ets.event_id = a.event_id
|
|
AND ess.back_office_status NOT IN(4, 5, 7)
|
|
AND ewl.status = 1
|
|
)*/
|
|
)
|
|
THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Waiting list --
|
|
WHEN (a.back_office_status = 2
|
|
AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL')
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) >= 0
|
|
AND a.quota_waiting_list_seat > 0
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ewl.event_schedule_id = a.event_schedule_id
|
|
AND ewl.status = 1
|
|
)
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.event_schedule_id = a.event_schedule_id
|
|
AND ess.back_office_status NOT IN(4, 5, 7)
|
|
AND er.status = 1
|
|
)
|
|
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND ess.back_office_status NOT IN(4, 5, 7)
|
|
AND ewl.status = 1
|
|
)
|
|
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND ess.back_office_status NOT IN(4, 5, 7)
|
|
AND er.status = 1
|
|
)
|
|
)
|
|
THEN CONCAT('abc_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
|
|
-- Normal Reservation with reservation --
|
|
WHEN (
|
|
(a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL')
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND a.event_schedule_id IN(
|
|
SELECT er.event_schedule_id
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.event_schedule_id = a.event_schedule_id
|
|
AND er.status = 1
|
|
)
|
|
)
|
|
THEN CONCAT('abd_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Waiting list with reservation --
|
|
-- Events with remaining seats greater than zero and event status 'FULL' fall in this condition --
|
|
WHEN ((a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE')
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND
|
|
(
|
|
(
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) <= 0
|
|
)
|
|
OR (
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) > 0
|
|
AND a.event_status ='FULL'
|
|
)
|
|
)
|
|
AND a.event_schedule_id IN(
|
|
SELECT ewl.event_schedule_id
|
|
FROM event_wait_list ewl
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ewl.event_schedule_id = a.event_schedule_id
|
|
AND ewl.status = 1
|
|
)
|
|
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.event_schedule_id = a.event_schedule_id
|
|
AND er.status = 1
|
|
)
|
|
)
|
|
THEN CONCAT('abe_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Cancelled but not yet passe single dates
|
|
WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1)
|
|
THEN
|
|
CASE
|
|
WHEN a.end_date_time > NOW()
|
|
THEN CONCAT('abf1_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1)
|
|
THEN
|
|
CASE
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW()
|
|
THEN CONCAT('abf1_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
|
|
-- Cancelled but not yet passe multi dates
|
|
WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2)
|
|
THEN
|
|
CASE -- This is when theres is complete event that is earlier that the cancelled event --
|
|
WHEN a.end_date_time > NOW() &&
|
|
(
|
|
SELECT COUNT(event_schedule_id) FROM event_schedule es_2021
|
|
WHERE es_2021.event_id = e.event_id
|
|
AND a.start_date_time > es_2021.start_date_time
|
|
AND
|
|
(
|
|
( es_2021.back_office_status = 2 OR es_2021.back_office_status = 3)
|
|
AND ( es_2021.event_status ='AVAILABLE' OR es_2021.event_status ='FULL')
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE es_2021.remaining_seat
|
|
END) >= 0
|
|
AND es_2021.quota_waiting_list_seat = 0
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND er.event_schedule_id = es_2021.event_schedule_id
|
|
AND ets.event_id = es_2021.event_id
|
|
AND er.status = 1
|
|
)
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = es_2021.event_id
|
|
AND ewl.event_schedule_id = es_2021.event_schedule_id
|
|
AND ewl.status = 1
|
|
)
|
|
)
|
|
OR
|
|
(
|
|
( es_2021.back_office_status = 2 OR es_2021.back_office_status = 3)
|
|
AND es_2021.event_status ='FULL'
|
|
AND e.event_category = 'ONLINE_EVENT'
|
|
)
|
|
|
|
) > 0
|
|
THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN a.end_date_time > NOW()
|
|
THEN CONCAT('abf2_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2)
|
|
THEN
|
|
CASE -- This is when theres is complete event that is earlier that the cancelled event --
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW()
|
|
&&
|
|
(
|
|
SELECT COUNT( es_2021.event_schedule_id) FROM event_schedule es_2021
|
|
WHERE es_2021.event_id = e.event_id
|
|
AND a.start_date_time > es_2021.start_date_time
|
|
AND
|
|
(
|
|
( es_2021.back_office_status = 2 OR es_2021.back_office_status = 3)
|
|
AND ( es_2021.event_status ='AVAILABLE' OR es_2021.event_status ='FULL')
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE es_2021.remaining_seat
|
|
END) >= 0
|
|
AND es_2021.quota_waiting_list_seat = 0
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND er.event_schedule_id = es_2021.event_schedule_id
|
|
AND ets.event_id = es_2021.event_id
|
|
AND er.status = 1
|
|
)
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = es_2021.event_id
|
|
AND ewl.event_schedule_id = es_2021.event_schedule_id
|
|
AND ewl.status = 1
|
|
)
|
|
)
|
|
OR
|
|
(
|
|
( es_2021.back_office_status = 2 OR es_2021.back_office_status = 3)
|
|
AND es_2021.event_status ='FULL'
|
|
AND e.event_category = 'ONLINE_EVENT'
|
|
)
|
|
|
|
) > 0
|
|
THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW()
|
|
THEN CONCAT('abf2_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
|
|
-- Coming soon --
|
|
WHEN (
|
|
a.back_office_status = 1
|
|
AND
|
|
(
|
|
(
|
|
e.event_category = 'ONLINE_EVENT'
|
|
AND
|
|
a.start_date_time >= NOW()
|
|
)
|
|
OR
|
|
(
|
|
".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND er.event_schedule_id = a.event_schedule_id
|
|
AND er.status = 1
|
|
)
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND ewl.event_schedule_id = a.event_schedule_id
|
|
AND ewl.status = 1
|
|
)
|
|
)
|
|
)
|
|
)
|
|
THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Event is FULL OR COMPLETE (Regular Event) --
|
|
WHEN (
|
|
(a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL')
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) >= 0
|
|
AND a.quota_waiting_list_seat = 0
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT er.subscriber
|
|
FROM event_registration er
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = er.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE er.subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND er.event_schedule_id = a.event_schedule_id
|
|
AND ets.event_id = a.event_id
|
|
AND er.status = 1
|
|
)
|
|
AND ".$this->db->escape($user_id)." NOT IN(
|
|
SELECT ewl.wait_list_subscriber
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule ess ON ess.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event ets ON ets.event_id = ess.event_id
|
|
WHERE ewl.wait_list_subscriber = ".$this->db->escape($user_id)."
|
|
AND ess.event_status != 'CANCEL'
|
|
AND ets.event_id = a.event_id
|
|
AND ewl.event_schedule_id = a.event_schedule_id
|
|
AND ewl.status = 1
|
|
)
|
|
) THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Event is FULL OR COMPLETE (Online Event) --
|
|
WHEN (
|
|
(a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND a.event_status ='FULL'
|
|
AND e.event_category = 'ONLINE_EVENT'
|
|
)
|
|
THEN CONCAT('ac_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
WHEN a.back_office_status = 3 THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN a.back_office_status = 7 THEN CONCAT('c_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN a.back_office_status = 4 THEN CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') ";
|
|
|
|
} else {
|
|
return "-- Normal Reservation --
|
|
WHEN (
|
|
a.back_office_status = 2
|
|
AND a.event_status = 'AVAILABLE'
|
|
AND (
|
|
(
|
|
e.event_category = 'ONLINE_EVENT'
|
|
AND
|
|
a.start_date_time < NOW()
|
|
)
|
|
OR
|
|
(
|
|
e.event_category <> 'ONLINE_EVENT'
|
|
AND
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) > 0
|
|
)
|
|
)
|
|
)
|
|
THEN CONCAT('aa_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Waiting List --
|
|
WHEN a.back_office_status = 2
|
|
AND (a.event_status ='FULL' OR a.event_status ='AVAILABLE' )
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) >= 0
|
|
AND a.quota_waiting_list_seat > 0
|
|
THEN CONCAT('ab_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Cancelled but not yet passe single dates --
|
|
WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1)
|
|
THEN
|
|
CASE
|
|
WHEN a.end_date_time > NOW()
|
|
THEN CONCAT('ac1_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 1)
|
|
THEN
|
|
CASE
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW()
|
|
THEN CONCAT('ac1_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
|
|
-- Cancelled but not yet passe multi dates --
|
|
WHEN (a.event_status = 'CANCEL' && a.end_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2)
|
|
THEN
|
|
CASE -- This is when theres is complete event that is earlier that the cancelled event --
|
|
WHEN a.end_date_time > NOW() &&
|
|
(
|
|
SELECT COUNT(es_2021.event_schedule_id) FROM event_schedule es_2021
|
|
WHERE es_2021.event_id = e.event_id
|
|
AND a.start_date_time > es_2021.start_date_time
|
|
AND
|
|
(
|
|
(es_2021.back_office_status = 2 OR es_2021.back_office_status = 3)
|
|
AND (es_2021.event_status ='AVAILABLE' OR es_2021.event_status ='FULL')
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE es_2021.remaining_seat
|
|
END) >= 0
|
|
AND es_2021.quota_waiting_list_seat = 0
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
)
|
|
OR
|
|
(
|
|
(es_2021.back_office_status = 2 OR es_2021.back_office_status = 3)
|
|
AND es_2021.event_status ='FULL'
|
|
AND e.event_category = 'ONLINE_EVENT'
|
|
)
|
|
|
|
) > 0
|
|
THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN a.end_date_time > NOW()
|
|
THEN CONCAT('ac2_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
WHEN (a.event_status = 'CANCEL' && a.start_date_time IS NOT NULL) &&
|
|
((SELECT date_feature FROM event WHERE event_id = a.event_id) = 2)
|
|
THEN
|
|
CASE -- This is when theres is complete event that is earlier that the cancelled event --
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW() &&
|
|
(
|
|
SELECT COUNT(event_schedule_id) FROM event_schedule es_2021
|
|
WHERE es_2021.event_id = e.event_id
|
|
AND a.start_date_time > es_2021.start_date_time
|
|
AND
|
|
(
|
|
(es_2021.back_office_status = 2 OR es_2021.back_office_status = 3)
|
|
AND (es_2021.event_status ='AVAILABLE' OR es_2021.event_status ='FULL')
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE es_2021.remaining_seat
|
|
END) >= 0
|
|
AND es_2021.quota_waiting_list_seat = 0
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
)
|
|
OR
|
|
(
|
|
(es_2021.back_office_status = 2 OR es_2021.back_office_status = 3)
|
|
AND es_2021.event_status ='FULL'
|
|
AND e.event_category = 'ONLINE_EVENT'
|
|
)
|
|
|
|
) > 0
|
|
THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
WHEN DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00') > NOW()
|
|
THEN CONCAT('ac2_',DATE_FORMAT( DATE_ADD(a.start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00'),'_',a.event_schedule_id,'_')
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
END
|
|
|
|
-- Coming soon (Regular Event)--
|
|
WHEN a.back_office_status = 1 AND e.event_category <> 'ONLINE_EVENT'
|
|
THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Coming soon (Online Event) --
|
|
WHEN (a.back_office_status = 1 OR a.back_office_status = 2)
|
|
AND a.start_date_time >= NOW()
|
|
AND e.event_category = 'ONLINE_EVENT'
|
|
THEN CONCAT('ae_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Complete (Regular Event) --
|
|
WHEN (
|
|
(a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND (a.event_status ='AVAILABLE' OR a.event_status ='FULL')
|
|
AND (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE a.remaining_seat
|
|
END) >= 0
|
|
AND a.quota_waiting_list_seat = 0
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
)
|
|
THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Complete (Online Event) --
|
|
WHEN (
|
|
(a.back_office_status = 2 OR a.back_office_status = 3)
|
|
AND a.event_status ='FULL'
|
|
AND e.event_category = 'ONLINE_EVENT'
|
|
)
|
|
THEN CONCAT('ad_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
|
|
-- Locked --
|
|
WHEN a.back_office_status = 3 THEN CONCAT('aeee_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
-- Terminee --
|
|
WHEN a.back_office_status = 7 THEN CONCAT('b_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
-- Passe --
|
|
WHEN a.back_office_status = 4 THEN CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_')
|
|
-- Archived --
|
|
ELSE CONCAT('d_',a.start_date_time,'_',a.event_schedule_id,'_') ";
|
|
}
|
|
|
|
}
|
|
|
|
private function _get_filter_query($user_id)
|
|
{
|
|
$this->load->model("event_schedule_model");
|
|
// SELECT es.event_schedule_id, e.event_id, efa.file_name,
|
|
return "SELECT es.event_schedule_id, e.event_id, e.trailer, e.workshop_session,
|
|
e.title, e.workshop_author, e.author_label, e.workshop_author_description, e.workshop_banner,
|
|
e.number_of_sessions, e.hours_per_session, e.event_status as status_of_event, e.remaining_combined_seat,
|
|
et.event_type, e.description, es.event_status,e.date_feature, e.use_different_address_per_date, e.reservation_end_date, e.night_class_prices,
|
|
COUNT(es.event_id) AS event_count,
|
|
NOW() as _now,
|
|
e.event_category,
|
|
(CASE WHEN e.event_status = 'CANCEL' THEN (SELECT COUNT(event_status) FROM event_schedule es WHERE es.event_status='CANCEL' AND es.event_id = e.event_id ) ELSE \"\" END) AS cancel_count,
|
|
(CASE
|
|
WHEN e.is_favorite = 1
|
|
THEN (SELECT fl.image FROM frontoffice_logo fl WHERE fl.status =1 )
|
|
ELSE \"\"
|
|
END) as event_favorite,
|
|
(SELECT efa.file_name FROM event_file_attachment efa WHERE e.event_id = efa.event_id AND efa.attachment_type = 1 AND efa.status = 1 LIMIT 1) AS 'file_name',
|
|
(SELECT
|
|
GROUP_CONCAT(CONCAT(
|
|
CASE
|
|
".$this->sort_fo_events_by($user_id)."
|
|
END
|
|
)
|
|
ORDER BY
|
|
(CASE
|
|
".$this->sort_fo_events_by($user_id)."
|
|
END),
|
|
a.start_date_time ASC
|
|
SEPARATOR '#')
|
|
as bostatus
|
|
FROM event_schedule a
|
|
WHERE a.event_id = e.event_id
|
|
AND a.back_office_status NOT IN (0,5,6)
|
|
LIMIT 1
|
|
) AS bostatus
|
|
FROM event e
|
|
INNER JOIN event_schedule es ON es.event_id = e.event_id
|
|
LEFT JOIN event_type et ON e.event_type_id = et.event_type_id
|
|
WHERE e.back_office_status NOT IN(0,5)
|
|
AND e.status =1
|
|
";
|
|
// LEFT JOIN event_file_attachment efa ON e.event_id = efa.event_id
|
|
// WHERE efa.attachment_type = 1
|
|
// AND efa.status = 1
|
|
}
|
|
|
|
public function filter_events($filter, $page, $month, $type, $city, $user_id, $logged_in,$workshop_session='')
|
|
{
|
|
$pages = $page*HP_EVENT_DISPLAY['perPage']-HP_EVENT_DISPLAY['perPage'];
|
|
|
|
if($logged_in) $preferences = $this->_get_preferences_query($user_id);
|
|
// // $user_id = ($logged_in)?$user_id:false;
|
|
// echo $user_id;
|
|
// Filter ------------------------------------------------------------------------
|
|
$query = $this->_get_filter_query($user_id);
|
|
$query .= $this->_get_filter_type($filter, $month, $type, $city,$workshop_session);
|
|
|
|
// $query .= ' GROUP BY e.event_id ORDER BY bostatus ASC';
|
|
|
|
// Dev #44476 - FO - Sorting out workshops by the chronological posting date order //
|
|
// $query .= ' GROUP BY e.event_id ORDER BY
|
|
// SUBSTRING_INDEX(bostatus,"_",1) ASC,
|
|
// CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) NOT IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END ASC,
|
|
// CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END DESC';
|
|
|
|
$query .= ' GROUP BY e.event_id ORDER BY e.event_id DESC';
|
|
|
|
$query .= ' LIMIT '.(($pages > 0)?$pages:0).', '.HP_EVENT_DISPLAY['perPage'].' ';
|
|
//print $query;
|
|
$events = $this->db->query($query);
|
|
|
|
|
|
// Pagination ---------------------------------------------------------------------
|
|
$query = $this->_get_filter_query($user_id);
|
|
$query .= $this->_get_filter_type($filter, $month, $type, $city,$workshop_session);
|
|
|
|
// Dev #44476 - FO - Sorting out workshops by the chronological posting date order //
|
|
// $query .= ' GROUP BY e.event_id ORDER BY
|
|
// SUBSTRING_INDEX(bostatus,"_",1) ASC,
|
|
// CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) NOT IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END ASC,
|
|
// CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END DESC';
|
|
// if($logged_in) $this->db->where_in('e.event_type_id', $preferences);
|
|
|
|
$query .= ' GROUP BY e.event_id ORDER BY e.event_id DESC';
|
|
|
|
$pagination = $this->db->query($query);
|
|
return array(
|
|
'data' => $events->result(),
|
|
'pagination' => ceil($pagination->num_rows()/HP_EVENT_DISPLAY['perPage']),
|
|
'result_count' => $events->num_rows(),
|
|
'logged_in' => $logged_in
|
|
);
|
|
}
|
|
|
|
private function _get_filter_type($filter, $month, $type, $city, $workshop_session = '')
|
|
{
|
|
$q_w = ' AND ';
|
|
$q = [];
|
|
if(!empty($workshop_session)){
|
|
$ww = explode(",",$workshop_session);
|
|
if(count($ww) ==1){
|
|
$q_w = " AND e.workshop_session = ".$this->db->escape($ww[0]);
|
|
if($ww[0] == "PRESENTIEL")
|
|
$q_w = " AND (e.workshop_session = ".$this->db->escape($ww[0])." OR e.workshop_session is null)";
|
|
}
|
|
else{
|
|
foreach($ww as $w){
|
|
$q[] = "e.workshop_session = ".$this->db->escape($w);
|
|
if($w == "PRESENTIEL")
|
|
$q[] .= "e.workshop_session is null";
|
|
}
|
|
$q_w .= "(".implode(" OR ",$q).")";
|
|
}
|
|
|
|
}
|
|
|
|
$q_t = ' AND ';
|
|
$t = [];
|
|
if(!empty($type)){
|
|
$tt = explode(",",$type);
|
|
if(count($tt) ==1){
|
|
$q_t = " AND e.event_type_id = ".$this->db->escape($tt[0]);
|
|
}
|
|
else{
|
|
foreach($tt as $ttt => $o){
|
|
$t[] = "e.event_type_id = ".$this->db->escape($o);
|
|
}
|
|
$q_t .= "(".implode(" OR ",$t).")";
|
|
}
|
|
|
|
}
|
|
|
|
switch($filter) {
|
|
case 'month':
|
|
return " AND month(e.start_date_time) = ".$this->db->escape($month);
|
|
case 'type':
|
|
return " AND e.event_type_id = ".$this->db->escape($type);
|
|
case 'type_multiple':
|
|
return $q_t;
|
|
case 'workshop_session':
|
|
return $q_w;
|
|
case 'workshop_session_type':
|
|
return $q_w.$q_t;
|
|
case 'city':
|
|
return " AND (CASE
|
|
WHEN e.use_different_address_per_date = 1 THEN
|
|
(CASE
|
|
WHEN es.city_location IS NULL THEN \"\"
|
|
ELSE es.city_location
|
|
END)
|
|
ELSE (CASE
|
|
WHEN e.city_location IS NULL THEN \"\"
|
|
ELSE e.city_location
|
|
END)
|
|
END) = ".$this->db->escape($city);
|
|
case 'month_city':
|
|
return " AND month(e.start_date_time) = ".$this->db->escape($month).
|
|
" AND (CASE
|
|
WHEN e.use_different_address_per_date = 1 THEN
|
|
(CASE
|
|
WHEN es.city_location IS NULL THEN \"\"
|
|
ELSE es.city_location
|
|
END)
|
|
ELSE (CASE
|
|
WHEN e.city_location IS NULL THEN \"\"
|
|
ELSE e.city_location
|
|
END)
|
|
END) = ".$this->db->escape($city);
|
|
case 'month_type':
|
|
return " AND month(e.start_date_time) = ".$this->db->escape($month).
|
|
" AND e.event_type_id = ".$this->db->escape($type);
|
|
case 'type_city':
|
|
return " AND e.event_type_id = ".$type.
|
|
" AND (CASE
|
|
WHEN e.use_different_address_per_date = 1 THEN
|
|
(CASE
|
|
WHEN es.city_location IS NULL THEN \"\"
|
|
ELSE es.city_location
|
|
END)
|
|
ELSE (CASE
|
|
WHEN e.city_location IS NULL THEN \"\"
|
|
ELSE e.city_location
|
|
END)
|
|
END) = ".$this->db->escape($city);
|
|
case 'all':
|
|
return " AND month(e.start_date_time) = ".$this->db->escape($month).
|
|
" AND e.event_type_id = ".$this->db->escape($type).
|
|
" AND (CASE
|
|
WHEN e.use_different_address_per_date = 1 THEN
|
|
(CASE
|
|
WHEN es.city_location IS NULL THEN \"\"
|
|
ELSE es.city_location
|
|
END)
|
|
ELSE (CASE
|
|
WHEN e.city_location IS NULL THEN \"\"
|
|
ELSE e.city_location
|
|
END)
|
|
END) = ".$this->db->escape($city);
|
|
default : return;
|
|
}
|
|
}
|
|
|
|
public function _get_page_number($event_id, $user_id=0)
|
|
{
|
|
$this->db->query('SET @row_num := 0');
|
|
$query = $this->db->query("
|
|
SELECT @row_num := @row_num + 1 as 'row_number', t.*
|
|
FROM (
|
|
SELECT e.event_id,
|
|
(SELECT
|
|
GROUP_CONCAT(CONCAT(
|
|
CASE
|
|
".$this->sort_fo_events_by($user_id)."
|
|
END
|
|
)
|
|
ORDER BY
|
|
(CASE
|
|
".$this->sort_fo_events_by($user_id)."
|
|
END),
|
|
a.start_date_time ASC
|
|
SEPARATOR '#')
|
|
as bostatus
|
|
FROM event_schedule a
|
|
WHERE a.event_id = e.event_id
|
|
AND a.back_office_status NOT IN (0,5,6)
|
|
LIMIT 1
|
|
) AS bostatus
|
|
FROM event e
|
|
LEFT JOIN event_schedule es ON es.event_id = e.event_id
|
|
LEFT JOIN event_type et ON e.event_type_id = et.event_type_id
|
|
LEFT JOIN event_file_attachment efa ON e.event_id = efa.event_id
|
|
WHERE efa.status = 1
|
|
AND efa.attachment_type = 1
|
|
AND es.back_office_status NOT IN(0,5,6)
|
|
AND e.status =1
|
|
GROUP BY e.event_id
|
|
ORDER BY
|
|
SUBSTRING_INDEX(bostatus,'_',1) ASC,
|
|
CASE WHEN SUBSTRING_INDEX(bostatus,'_',1) NOT IN('d') THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,'_',2),'_',-1) END ASC,
|
|
CASE WHEN SUBSTRING_INDEX(bostatus,'_',1) IN('d') THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,'_',2),'_',-1) END DESC
|
|
) t, (SELECT @rownum := 0) r
|
|
");
|
|
|
|
foreach($query->result() as $row){
|
|
if($row->event_id == $event_id){
|
|
return ceil($row->row_number/HP_EVENT_DISPLAY['perPage']);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function event_details($event_id)
|
|
{
|
|
|
|
$query = "SELECT
|
|
e.event_id, e.title,
|
|
e.event_type_id, et.event_type,
|
|
e.description, (CASE WHEN e.rate > 0 THEN e.rate ELSE \"\" END) as event_rate,
|
|
e.seat_feature,
|
|
e.date_feature,
|
|
e.is_multiple_reservation,
|
|
e.is_multiple_waitlist_reservation,
|
|
e.use_different_address_per_date,
|
|
e.workshop_author,
|
|
e.author_label,
|
|
e.workshop_author_description,
|
|
e.workshop_banner,
|
|
e.workshop_event_type,
|
|
e.number_of_sessions,
|
|
e.hours_per_session,
|
|
e.total_available_seat,
|
|
e.reservation_start_date,
|
|
e.reservation_end_date,
|
|
e.start_date_time,
|
|
(CASE WHEN e.start_date_time THEN DATE_FORMAT(e.start_date_time, '%M') ELSE \"\" END) AS event_start_month_name,
|
|
(CASE WHEN e.start_date_time THEN DATE_FORMAT(e.start_date_time, '%e') ELSE \"\" END) AS event_start_day,
|
|
e.event_category,
|
|
e.remaining_combined_seat,
|
|
e.end_date_time,
|
|
e.back_office_status,
|
|
e.workshop_author_awards,
|
|
e.location,
|
|
e.similar_events,
|
|
e.workshop_session,
|
|
e.learning_outcome,
|
|
e.trailer,
|
|
e.discounted_price,
|
|
e.discount_apply,
|
|
e.city_name,
|
|
e.night_class_prices,
|
|
e.event_status,
|
|
e.tag,
|
|
(SELECT efa.file_name FROM event_file_attachment efa WHERE efa.event_id = e.event_id AND efa.status = 1 AND efa.attachment_type = 1 LIMIT 1) AS 'file_name',
|
|
(SELECT COUNT(esx.event_schedule_id) FROM event_schedule esx WHERE esx.event_id = ? AND esx.back_office_status IN(1,2,3,4,7,5)) as schedDatesCount,
|
|
COUNT(es.event_id) AS event_count,
|
|
(CASE WHEN es.event_status = 'CANCEL' THEN (SELECT COUNT(event_status) FROM event_schedule es WHERE es.event_status='CANCEL' AND es.event_id =? ) ELSE \"\" END) AS cancel_count,
|
|
(CASE
|
|
WHEN e.is_favorite = 1
|
|
THEN (SELECT fl.image FROM frontoffice_logo fl WHERE fl.status =1 )
|
|
ELSE \"\"
|
|
END) as event_favorite,
|
|
(CASE
|
|
WHEN e.city_location IS NULL THEN \"\"
|
|
ELSE (SELECT ecl.city FROM event_city_location ecl WHERE ecl.city_location_id = e.city_location AND ecl.status =1)
|
|
END) as event_venue,
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 0 THEN
|
|
(CASE
|
|
WHEN e.address IS NULL THEN \"\"
|
|
ELSE e.address
|
|
END)
|
|
ELSE \"\"
|
|
END) as event_address,
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 0 THEN
|
|
(CASE
|
|
WHEN e.location IS NULL THEN \"\"
|
|
ELSE e.location
|
|
END)
|
|
ELSE \"\"
|
|
END) as event_place_name,
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 0 THEN
|
|
(CASE
|
|
WHEN e.city_name IS NULL THEN \"\"
|
|
ELSE e.city_name
|
|
END)
|
|
ELSE \"\"
|
|
END) as city,
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 0 THEN
|
|
(CASE
|
|
WHEN e.code_postal IS NULL THEN \"\"
|
|
ELSE e.code_postal
|
|
END)
|
|
ELSE \"\"
|
|
END) as event_postal_code
|
|
FROM event e
|
|
LEFT JOIN event_type et ON et.event_type_id = e.event_type_id
|
|
LEFT JOIN user u ON u.user_id = e.author
|
|
LEFT JOIN event_schedule es ON es.event_id = e.event_id
|
|
WHERE e.status IN (1)
|
|
AND e.event_id IN(
|
|
SELECT event_id
|
|
FROM event_schedule
|
|
WHERE back_office_status IN(1,2,3,4,7,5)
|
|
)
|
|
AND e.event_id = ?";
|
|
return $this->db->query($query, array($event_id, $event_id, $event_id))->row();
|
|
}
|
|
|
|
public function event_details_email($event_id, $ws=false)
|
|
{
|
|
$this->load->model("event_schedule_model");
|
|
|
|
if (UserAuth::isLoggedInAsSubscriber()) {
|
|
$exclusions = [
|
|
BO_STAT['del'],
|
|
];
|
|
} else {
|
|
$exclusions = [
|
|
BO_STAT['en_c'],
|
|
BO_STAT['arc'],
|
|
BO_STAT['del'],
|
|
BO_STAT['ter']
|
|
];
|
|
}
|
|
//".$this->event_schedule_model->use_diffent_address()."
|
|
//es.event_schedule_id,
|
|
$this->db->select("e.event_id,
|
|
e.title as event_title,
|
|
e.event_status,
|
|
et.event_type,
|
|
|
|
(CASE WHEN e.rate > 0 THEN e.rate ELSE \"\" END) as event_rate,
|
|
(CASE WHEN DATE_FORMAT(e.start_date_time, '%Hh%i') = '00h00' THEN \"\" ELSE DATE_FORMAT(e.start_date_time, '%Hh%i') END) as event_start_hour,
|
|
efa.file_name as event_picture,
|
|
e.description as event_description,
|
|
e.start_date_time as event_start_date");
|
|
$this->db->select("DAYNAME(e.start_date_time) AS event_start_day_name", FALSE);
|
|
$this->db->select("DATE_FORMAT(e.start_date_time, '%e') AS event_start_day", FALSE);
|
|
$this->db->select("DATE_FORMAT(e.start_date_time, '%m') AS event_start_month", FALSE);
|
|
$this->db->select("DATE_FORMAT(e.start_date_time, '%M') AS event_start_month_name", FALSE);
|
|
$this->db->select("DATE_FORMAT(e.start_date_time, '%Y') AS event_start_year", FALSE);
|
|
$this->db->from('event e');
|
|
$this->db->join('event_type et', 'e.event_type_id=et.event_type_id');
|
|
$this->db->join('event_file_attachment efa', 'e.event_id=efa.event_id');
|
|
$this->db->where('e.event_id', $event_id);
|
|
$this->db->where('efa.status !=', 0);
|
|
$this->db->where('efa.attachment_type', 1);
|
|
$this->db->where_not_in('e.back_office_status', $exclusions);
|
|
$this->db->where('e.status !=', 0);
|
|
$this->db->limit(1);
|
|
|
|
return $this->db->get()->row();
|
|
}
|
|
|
|
public function get_event_details($event_id){
|
|
return $this->db->select('status, title, date_feature, workshop_author, trailer')
|
|
->from('event')
|
|
->where('status !=', 0)
|
|
->where('event_id', $event_id)
|
|
->limit(1)
|
|
->get()
|
|
->row();
|
|
}
|
|
|
|
public function event_details_attachment_type($event_id){
|
|
$query = $this->db->select('*')
|
|
->from('event_file_attachment')
|
|
->where('event_id', $event_id)
|
|
->where('attachment_type', 2)
|
|
->where('status !=', 0)
|
|
->get()
|
|
->row();
|
|
|
|
if($query) return 2;
|
|
else return 1;
|
|
}
|
|
|
|
public function current_event($event_id){
|
|
$query = $this->db->select('')
|
|
->from('event')
|
|
->where('status !=', 0)
|
|
->where('event_id', $event_id)
|
|
->get()
|
|
->row();
|
|
|
|
return $query;
|
|
}
|
|
|
|
public function save_link_to_cookie($event_id){
|
|
$query = $this->db->select('event_type_id')
|
|
->from('event')
|
|
->where('status !=', 0)
|
|
->where('event_id', $event_id)
|
|
->get()
|
|
->row();
|
|
|
|
return $query->event_type_id;
|
|
}
|
|
|
|
public function preview_event($event_id){
|
|
$query = "SELECT
|
|
e.event_id, e.title,
|
|
e.event_type_id, et.event_type,
|
|
e.description, (CASE WHEN e.rate > 0 THEN e.rate ELSE \"\" END) as event_rate,
|
|
efa.file_name, efa.mime_type,
|
|
e.seat_feature,
|
|
e.date_feature,
|
|
e.is_multiple_reservation,
|
|
e.is_multiple_waitlist_reservation,
|
|
e.use_different_address_per_date,
|
|
e.start_date_time,
|
|
e.end_date_time,
|
|
e.workshop_author_awards,
|
|
e.author_label,
|
|
e.workshop_author_description,
|
|
e.number_of_sessions,
|
|
e.hours_per_session
|
|
COUNT(es.event_schedule_id) as event_sched,
|
|
COUNT(efa.event_id) as attachment_event_id,
|
|
(CASE
|
|
WHEN e.is_favorite = 1
|
|
THEN (SELECT fl.image FROM frontoffice_logo fl WHERE fl.status =1 )
|
|
ELSE \"\"
|
|
END) as event_favorite,
|
|
(CASE
|
|
WHEN e.city_location IS NULL THEN \"\"
|
|
ELSE (SELECT ecl.city FROM event_city_location ecl WHERE ecl.city_location_id = e.city_location AND ecl.status =1)
|
|
END) as event_venue,
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 0 THEN
|
|
(CASE
|
|
WHEN e.address IS NULL THEN \"\"
|
|
ELSE e.address
|
|
END)
|
|
ELSE \"\"
|
|
END) as event_address,
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 0 THEN
|
|
(CASE
|
|
WHEN e.location IS NULL THEN \"\"
|
|
ELSE e.location
|
|
END)
|
|
ELSE \"\"
|
|
END) as event_place_name,
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 0 THEN
|
|
(CASE
|
|
WHEN e.city_name IS NULL THEN \"\"
|
|
ELSE e.city_name
|
|
END)
|
|
ELSE \"\"
|
|
END) as city,
|
|
(CASE
|
|
WHEN e.use_different_address_per_date = 0 THEN
|
|
(CASE
|
|
WHEN e.code_postal IS NULL THEN \"\"
|
|
ELSE e.code_postal
|
|
END)
|
|
ELSE \"\"
|
|
END) as event_postal_code
|
|
FROM event e
|
|
LEFT JOIN event_type et ON et.event_type_id = e.event_type_id
|
|
LEFT JOIN event_file_attachment efa ON efa.event_id = e.event_id
|
|
LEFT JOIN event_schedule es ON es.event_id = e.event_id
|
|
LEFT JOIN user u ON u.user_id = e.author
|
|
WHERE e.status IN (1)
|
|
AND efa.status = 1
|
|
AND efa.attachment_type = 1
|
|
AND e.event_id = ?";
|
|
$result=$this->db->query($query, array($event_id))->row();
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function event_information($event_id){
|
|
$this->db->select("e.*");
|
|
$this->db->from("event e");
|
|
$this->db->where("e.status !=", 0);
|
|
$this->db->where("e.event_id", $event_id);
|
|
$this->db->limit(1);
|
|
$result = $this->db->get()->row();
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function check_event_title($event_title, $event_id=""){
|
|
if($event_id != ""){
|
|
$this->db->where("event_id !=", $event_id);
|
|
}
|
|
$this->db->where("title", $event_title);
|
|
$this->db->where("status !=", 0); //not deleted ones
|
|
return $this->db->get("event")->num_rows();
|
|
}
|
|
|
|
public function add_event($user_id, $event_data){
|
|
//add remaining values
|
|
$event_data["author"] = $user_id;
|
|
if(sizeof($event_data) > 0){
|
|
$this->db->insert("event", $event_data);
|
|
$event_id = $this->db->insert_id();
|
|
if($event_id){
|
|
return $event_id;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
public function update_event($user_id, $event_data, $event_id){
|
|
$event_data["author"] = $user_id;
|
|
if(sizeof($event_data)){
|
|
$this->db->where("event_id", $event_id);
|
|
$update = $this->db->update("event", $event_data);
|
|
if($update){
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
return false;
|
|
} public function delete_event($event_id){
|
|
$this->db->where("event_id", $event_id);
|
|
$update = $this->db->update("event", array("status" => 0, "back_office_status" => 6));
|
|
//update also all event schedule status to deleted
|
|
$this->db->where("event_id", $event_id);
|
|
$this->db->update("event_schedule", array("back_office_status" => 6));
|
|
return $update;
|
|
}
|
|
|
|
public function edit_display_status(){
|
|
$query = $this->db->select('*')
|
|
->from('event_schedule')
|
|
->where('back_office_status !=', 6)
|
|
->where('back_office_status !=', 7)
|
|
->where('back_office_status !=', 0)
|
|
->get();
|
|
|
|
$result = $query->result();
|
|
foreach($result as $row){
|
|
$this->db->where("event_schedule", $row->event_schedule);
|
|
if($row->back_office_status == 4) $this->db->update("event_schedule", array("display_status" => 0));
|
|
else $this->db->update("event_schedule", array("display_status" => 1));
|
|
}
|
|
}
|
|
|
|
public function check_bo_status($query_id, $page)
|
|
{
|
|
$this->load->model("event_schedule_model");
|
|
|
|
$queryData = [];
|
|
|
|
$where = " es.event_schedule_id = ".$this->db->escape($query_id);
|
|
array_push($queryData, $query_id);
|
|
$limit = " LIMIT 1 ";
|
|
|
|
if($page == 2){
|
|
$where = " es.event_id = ".$this->db->escape($query_id)." and e.event_id = ".$this->db->escape($query_id);
|
|
$limit = "";
|
|
} else {
|
|
$this->load->model('event_schedule_model');
|
|
}
|
|
$query = $this->db->query("select
|
|
es.event_id,
|
|
es.event_schedule_id,
|
|
es.seats_per_subscriber,
|
|
es.back_office_status,
|
|
es.event_status,
|
|
e.status,
|
|
es.event_url,
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE es.remaining_seat
|
|
END) as remaining_seat,
|
|
".$this->event_schedule_model->use_diffent_address()."
|
|
e.seat_feature,
|
|
e.date_feature,
|
|
e.event_category,
|
|
e.is_multiple_reservation,
|
|
e.is_multiple_waitlist_reservation,
|
|
e.is_favorite,
|
|
e.rate,
|
|
es.quota_waiting_list_seat,
|
|
e.use_different_address_per_date,
|
|
(
|
|
CASE
|
|
WHEN es.start_date_time >= NOW()
|
|
THEN 'coming_soon'
|
|
ELSE ''
|
|
END
|
|
) as is_coming_soon,
|
|
(
|
|
CASE
|
|
WHEN es.end_date_time IS NOT NULL
|
|
THEN NOW() >= es.end_date_time
|
|
ELSE NOW() >= es.start_date_time
|
|
END
|
|
) as is_passed,
|
|
(CASE
|
|
WHEN (es.back_office_status = 2 AND es.event_status ='AVAILABLE')
|
|
OR (es.back_office_status = 2 AND es.event_status ='FULL')
|
|
OR (es.back_office_status = 3 AND es.event_status ='FULL')
|
|
THEN CONCAT('a - ',es.start_date_time,' ')
|
|
WHEN es.back_office_status = 3 THEN CONCAT('b - ',es.start_date_time,' ')
|
|
WHEN es.back_office_status = 1 THEN CONCAT('c - ',es.start_date_time,' ')
|
|
WHEN es.back_office_status = 7 THEN CONCAT('d - ',es.start_date_time,' ')
|
|
WHEN es.back_office_status = 4 THEN CONCAT('e - ',es.start_date_time,' ')
|
|
ELSE CONCAT('f - ',es.start_date_time,' ')
|
|
END) as bostatus
|
|
".(($page==1 || $page==2)?$this->event_schedule_model->query_date():"")."
|
|
from event_schedule es
|
|
left join event e ON e.event_id = es.event_id
|
|
-- LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id
|
|
-- LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id
|
|
where ".$where."
|
|
ORDER BY
|
|
bostatus ASC,
|
|
es.start_date_time ASC
|
|
".$limit);
|
|
|
|
if(!$query->num_rows()){
|
|
return false;
|
|
} else {
|
|
return $query->result();
|
|
}
|
|
}
|
|
|
|
public function check_bo_status_mres($query_id, $page)
|
|
{
|
|
$this->load->model("event_schedule_model");
|
|
|
|
$where = " es.event_schedule_id = ".$query_id." ";
|
|
$limit = " LIMIT 1 ";
|
|
|
|
$this->load->model('event_schedule_model');
|
|
$query = $this->db->query("select es.event_id,
|
|
es.event_schedule_id,
|
|
e.title,
|
|
es.seats_per_subscriber,
|
|
es.back_office_status,
|
|
es.event_status,
|
|
e.status,
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE es.remaining_seat
|
|
END) as remaining_seat,
|
|
".$this->event_schedule_model->use_diffent_address()."
|
|
e.seat_feature,
|
|
e.date_feature,
|
|
e.event_category,
|
|
e.is_multiple_reservation,
|
|
e.is_multiple_waitlist_reservation,
|
|
e.is_favorite,
|
|
es.quota_waiting_list_seat,
|
|
(
|
|
CASE
|
|
WHEN es.start_date_time >= NOW()
|
|
THEN 'coming_soon'
|
|
ELSE ''
|
|
END
|
|
) as is_coming_soon,
|
|
(CASE
|
|
WHEN (es.back_office_status = 2 AND es.event_status ='AVAILABLE')
|
|
OR (es.back_office_status = 2 AND es.event_status ='FULL')
|
|
OR (es.back_office_status = 3 AND es.event_status ='FULL')
|
|
THEN CONCAT('a - ',es.start_date_time,' ')
|
|
WHEN es.back_office_status = 3 THEN CONCAT('b - ',es.start_date_time,' ')
|
|
WHEN es.back_office_status = 1 THEN CONCAT('c - ',es.start_date_time,' ')
|
|
WHEN es.back_office_status = 7 THEN CONCAT('d - ',es.start_date_time,' ')
|
|
WHEN es.back_office_status = 4 THEN CONCAT('e - ',es.start_date_time,' ')
|
|
ELSE CONCAT('f - ',es.start_date_time,' ')
|
|
END) as bostatus
|
|
".(($page==1 || $page==2)?$this->event_schedule_model->query_date():"").",
|
|
(CASE WHEN gsv.gm_mod_stat = 0 THEN 0 ELSE ges.mod_stat END) AS mod_stat
|
|
from event_schedule es
|
|
left join event e ON e.event_id = es.event_id
|
|
LEFT JOIN event_registration err ON err.event_schedule_id = es.event_schedule_id
|
|
LEFT JOIN event_wait_list erw ON erw.event_schedule_id = es.event_schedule_id
|
|
LEFT JOIN gm_evsched_setting ges ON (es.event_schedule_id = ges.event_schedule_id)
|
|
LEFT JOIN gm_settings_view gsv USING(gm_id)
|
|
where ".$where."
|
|
".$limit);
|
|
|
|
if(!$query->num_rows()){
|
|
return false;
|
|
} else {
|
|
return $query->result();
|
|
}
|
|
}
|
|
|
|
public function check_event_status($event_id)
|
|
{
|
|
$query = $this->db->select('status')
|
|
->from('event')
|
|
->where('event_id', $event_id)
|
|
->get()
|
|
->row();
|
|
|
|
return $query->event_status;
|
|
}
|
|
|
|
public function check_seats($event_id, $reg_type=1, $byPassRegularReservation=false, $session_type=null)
|
|
{
|
|
$query = $this->db->query("select
|
|
remaining_combined_seat as remaining_seat,
|
|
workshop_session,
|
|
night_class_prices,
|
|
event_status
|
|
from event
|
|
where back_office_status NOT IN(0,4,5,7,6)
|
|
and status = 1
|
|
and event_id=?
|
|
limit 1
|
|
", array($event_id))->row();
|
|
|
|
if(countVal($query) <=0 ){ return 0; }// Full
|
|
if($query->workshop_session == 'DISTANCE-PRESENTIEL') {
|
|
$ncp = json_decode($query->night_class_prices);
|
|
$rs = 0;
|
|
if($session_type == 'soir-presentiel')
|
|
$rs = $ncp->presentiel->total_available_seat - $this->count_total_reserved_seats($event_id, $session_type);
|
|
else if($session_type == 'soir-distance')
|
|
$rs = $ncp->distance->total_available_seat;
|
|
return $rs;
|
|
}
|
|
if($query->remaining_seat == 0 && $query->workshop_session != 'ENLIGNE'){ return 0; }// Full
|
|
else if(($query->remaining_seat > 0 && $reg_type == 1 && $query->event_status == 'AVAILABLE') || $query->workshop_session == 'ENLIGNE'){
|
|
return 1; // Book
|
|
} else {
|
|
if($reg_type == 2){
|
|
return 2; // Book in Waitlist
|
|
} else {
|
|
return ($byPassRegularReservation && $query->remaining_seat > 0)?2:0; // Full
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public function is_seats_available($event_schedule_id, $reg_type=1)
|
|
{
|
|
$query = $this->db->query("select
|
|
es.quota_waiting_list_seat,
|
|
es.remaining_seat
|
|
from event_schedule es
|
|
left join event e ON e.event_id = es.event_id
|
|
where es.event_schedule_id = ?
|
|
and e.status = 1
|
|
limit 1
|
|
", array($event_schedule_id))->row();
|
|
// return 1;
|
|
|
|
switch ($reg_type) {
|
|
case 1:
|
|
if ($query->remaining_seat > 0) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
break;
|
|
case 2:
|
|
if ($query->quota_waiting_list_seat > 0) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
public function check_availability($event_id, $event_schedule_id, $seats_reserved, $reg_type, $byPassRegularReservation=false)
|
|
{
|
|
if($reg_type >= 3) {return 0;}
|
|
$row = $this->db->query("select
|
|
e.remaining_combined_seat as remaining_seat,
|
|
e.seat_feature,
|
|
e.is_multiple_reservation,.
|
|
e.is_multiple_waitlist_reservation,
|
|
e.back_office_status,
|
|
e.event_status
|
|
from event e
|
|
where e.back_office_status NOT IN(0,7,6)
|
|
and e.event_id = ?
|
|
limit 1 ", array($event_id))->row();
|
|
|
|
// Event is Closed
|
|
if(countVal($row) <= 0 || $row->back_office_status >= 4){
|
|
return 4;
|
|
}
|
|
// Event Registration disabled
|
|
else if( $row->remaining_seat <=0){
|
|
return 5;
|
|
}
|
|
// Allow Reserver for normal or regular reservation
|
|
else if($reg_type == 1 && $row->remaining_seat >= $seats_reserved && $row->remaining_seat > 0 && $seats_reserved > 0 && !$byPassRegularReservation){
|
|
return 1;
|
|
}
|
|
else if($reg_type == 1 && $row->remaining_seat <= 0 && !$byPassRegularReservation){
|
|
return 6; //register to regular/normal registration disabled : must register to waiting list
|
|
}
|
|
else if($reg_type == 2 && $row->remaining_seat > 0 && $row->event_status == 'AVAILABLE' && !$byPassRegularReservation){
|
|
return 3; //register to waiting list disabled : must register to regular/normal registration
|
|
}
|
|
// Allow Reserver or Book for waiting list
|
|
else if($reg_type == 2 && $seats_reserved > 0 && (!$byPassRegularReservation || $byPassRegularReservation)){
|
|
return 2;
|
|
} else {
|
|
return 0; //Event registration disabled
|
|
}
|
|
}
|
|
|
|
public function check_closed_event($event_schedule_id)
|
|
{
|
|
$query = $this->db->select('back_office_status')
|
|
->from('event_schedule')
|
|
->where('back_office_status !=', 6)
|
|
->where('back_office_status !=', 7)
|
|
->where('back_office_status !=', 0)
|
|
->where('event_status != \'FULL\'')
|
|
->where('event_schedule_id', $event_schedule_id)
|
|
->get()
|
|
->row();
|
|
|
|
if($query->back_office_status == 4) return 0; // Event Closed
|
|
else return 1; // Event Available
|
|
}
|
|
|
|
public function update_remaining_seats($event_schedule_id)
|
|
{
|
|
$query = $this->db->select('remaining_seat')
|
|
->from('event_schedule')
|
|
->where('back_office_status !=', 6)
|
|
->where('back_office_status !=', 7)
|
|
->where('back_office_status !=', 0)
|
|
->where('event_status != \'FULL\'')
|
|
->where('event_schedule_id', $event_schedule_id)
|
|
->get()
|
|
->row();
|
|
return $query->remaining_seat;
|
|
}
|
|
|
|
public function open_events_for_reservations(){
|
|
//select and insert to event_log table all the events which are about to be opened
|
|
$this->db->query(
|
|
"INSERT INTO user_activity_log(reference_id, description, action, table_origin)
|
|
(
|
|
SELECT e.event_id, 'Open event', 'AUTO OPEN EVENT FOR RESERVATION', 'event'
|
|
FROM event e
|
|
WHERE (CASE
|
|
WHEN e.event_category <> 'ONLINE_EVENT'
|
|
THEN e.reservation_start_date
|
|
ELSE e.start_date_time
|
|
END) <= NOW()
|
|
AND e.back_office_status IN(1)
|
|
)
|
|
");
|
|
$this->db->flush_cache();
|
|
$this->db->query("UPDATE event_schedule es
|
|
LEFT JOIN event e ON e.event_id = es.event_id
|
|
SET es.back_office_status = 2, es.event_status='AVAILABLE'
|
|
WHERE (CASE
|
|
WHEN e.event_category <> 'ONLINE_EVENT'
|
|
THEN es.reservation_start_date
|
|
ELSE es.start_date_time
|
|
END) <= NOW()
|
|
AND e.event_id = es.event_id
|
|
AND es.back_office_status IN(1)
|
|
");
|
|
$this->db->flush_cache();
|
|
$this->db->query("UPDATE event e
|
|
SET e.back_office_status = 2, e.event_status='AVAILABLE'
|
|
WHERE (CASE
|
|
WHEN e.event_category <> 'ONLINE_EVENT'
|
|
THEN e.reservation_start_date
|
|
ELSE e.start_date_time
|
|
END) <= NOW()
|
|
AND e.back_office_status IN(1)
|
|
"); // OPEN for Reservations
|
|
return $this->db->affected_rows();
|
|
}
|
|
|
|
public function terminate_events() {
|
|
//defer sending of onqueue emails
|
|
$this->defer_emails_and_sending_schedules();
|
|
//select and insert to event_log table all the events which are about to be terminated
|
|
$this->db->query(
|
|
"INSERT INTO user_activity_log(reference_id, description, action, table_origin)
|
|
(
|
|
SELECT e.event_id, 'Terminate event', 'TERMINATE EVENT', 'event'
|
|
FROM event e
|
|
WHERE (CASE
|
|
WHEN e.reservation_end_date IS NULL
|
|
THEN e.start_date_time
|
|
ELSE e.reservation_end_date
|
|
END) <= NOW()
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND e.back_office_status IN(1,2,3)
|
|
)
|
|
");
|
|
$this->db->flush_cache();
|
|
$this->db->query("UPDATE event_schedule es
|
|
LEFT JOIN event e ON e.event_id = es.event_id
|
|
SET es.back_office_status = 7
|
|
WHERE (CASE
|
|
WHEN e.reservation_end_date IS NULL THEN e.start_date_time
|
|
ELSE e.reservation_end_date
|
|
END) <= NOW()
|
|
AND e.event_id = es.event_id
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND es.back_office_status IN(1,2,3)"
|
|
);
|
|
$this->db->flush_cache();
|
|
//then, update their statuses
|
|
$this->db->query("UPDATE event e
|
|
SET e.back_office_status = 7
|
|
WHERE (CASE
|
|
WHEN e.reservation_end_date IS NULL THEN e.start_date_time
|
|
ELSE e.reservation_end_date
|
|
END) <= NOW()
|
|
AND e.event_category <> 'ONLINE_EVENT'
|
|
AND e.back_office_status IN(1,2,3)"
|
|
); //events terminated
|
|
|
|
return $this->db->affected_rows();
|
|
}
|
|
|
|
public function close_events() {
|
|
//defer sending of onqueue emails
|
|
$this->defer_emails_and_sending_schedules();
|
|
//select and insert to event_log table all the events which are about to be closed
|
|
$this->db->query("INSERT INTO user_activity_log(reference_id, description, action, table_origin)
|
|
SELECT event_id, 'Close event', 'AUTO CLOSE EVENT', 'event'
|
|
FROM event_schedule
|
|
WHERE (CASE
|
|
WHEN end_date_time IS NULL THEN DATE_FORMAT( DATE_ADD(start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00')
|
|
ELSE DATE_ADD(end_date_time, INTERVAL 1 MINUTE)
|
|
END) <= NOW() AND back_office_status IN(1,2,3,7)");
|
|
$this->db->flush_cache();
|
|
$this->db->query(" UPDATE event_schedule
|
|
SET back_office_status = 4
|
|
WHERE (CASE
|
|
WHEN end_date_time IS NULL THEN DATE_FORMAT( DATE_ADD(start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00')
|
|
ELSE DATE_ADD(end_date_time, INTERVAL 1 MINUTE)
|
|
END) <= NOW()
|
|
AND back_office_status IN(1,2,3,7)
|
|
");
|
|
$this->db->flush_cache();
|
|
//then, update their statuses
|
|
$this->db->query(" UPDATE event
|
|
SET back_office_status = 4
|
|
WHERE (CASE
|
|
WHEN end_date_time IS NULL THEN DATE_FORMAT( DATE_ADD(start_date_time, INTERVAL 1 DAY), '%Y-%m-%d 00:00:00')
|
|
ELSE DATE_ADD(end_date_time, INTERVAL 1 MINUTE)
|
|
END) <= NOW()
|
|
AND back_office_status IN(1,2,3,7)
|
|
"); //events CLOSED
|
|
return $this->db->affected_rows();
|
|
}
|
|
|
|
private function defer_emails_and_sending_schedules(){
|
|
//defer sending of onqueue emails
|
|
$this->db->query("UPDATE event_email_recipient eer SET eer.email_status = 5, eer.email_date_time = NOW() WHERE eer.email_status IN(0,2,3)
|
|
AND eer.event_schedule_id IN(SELECT event_id FROM event WHERE start_date_time <= NOW() )");
|
|
$this->db->flush_cache();
|
|
//email sending schedules must be set to pass
|
|
$this->db->query("UPDATE event_email_schedule ees SET ees.email_schedule_status = 2, ees.email_schedule_date_added = NOW() WHERE ees.email_schedule_status IN(1)
|
|
AND ees.event_schedule_id IN(SELECT event_id FROM event
|
|
WHERE start_date_time <= NOW() )");
|
|
$this->db->flush_cache();
|
|
}
|
|
|
|
public function list_events_for_typeahead($search){
|
|
$this->db->select("event_id, title AS name")
|
|
->select("DATE_FORMAT(reservation_start_date, '%e/%m/%Y %Hh%m') AS reservation", FALSE);
|
|
$this->db->where_in("back_office_status",array(1,2,3,4,5));
|
|
$this->db->limit(10);
|
|
$this->db->like("title", $search);
|
|
$this->db->order_by("event_id", "desc");
|
|
return $this->db->get("event")->result();
|
|
}
|
|
|
|
public function reopen_event($event_schedule_id){
|
|
//insert to event log before reopening an event
|
|
$this->db->query("INSERT INTO user_activity_log(reference_id, description, action, table_origin) VALUES(?, ?, ?, ?)", array($event_schedule_id, 'Re-open event', 'RE-OPEN EVENT', 'event_schedule'));
|
|
|
|
//re-open an event
|
|
$this->db->where("event_schedule_id", $event_schedule_id);
|
|
$this->db->where("auto_event_status !=", 1);
|
|
$this->db->update("event_schedule", array("back_office_status" => 2));
|
|
}
|
|
|
|
public function get_events_for_waitinglist_email() { //get_events_with_free_places
|
|
$result = $this->db->query("SELECT
|
|
es.event_id, es.event_schedule_id, es.remaining_seat, es.start_date_time, es.end_date_time,
|
|
ewl.wait_list_id,
|
|
(
|
|
SELECT
|
|
ees.email_schedule_id
|
|
FROM event_email_schedule ees
|
|
LEFT JOIN `event_email_default_setting` eeds
|
|
ON `eeds`.`email_tpl_setting_id` = `ees`.`reference`
|
|
AND eeds.email_type_id = 2
|
|
WHERE ees.event_schedule_id = ewl.event_schedule_id
|
|
AND ees.email_schedule_status=1
|
|
AND eeds.email_tpl_setting_status= 1
|
|
ORDER BY ees.email_schedule_id DESC LIMIT 1
|
|
) AS email_schedule_id
|
|
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN event_schedule es ON es.event_schedule_id = ewl.event_schedule_id
|
|
LEFT JOIN event e ON e.event_id = es.event_id
|
|
WHERE (CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE es.remaining_seat
|
|
END) > 0
|
|
AND es.event_status = 'AVAILABLE'
|
|
AND e.status = 1
|
|
AND ewl.status = 1
|
|
AND ewl.isModeratedButAllowedInWL = 0
|
|
AND es.back_office_status IN (2, 3)
|
|
AND es.start_date_time > NOW()
|
|
AND ewl.event_schedule_id IN(
|
|
select eses.event_schedule_id
|
|
from event_schedule_email_status eses
|
|
where eses.event_schedule_id = ewl.event_schedule_id
|
|
and eses.email_type_id = 2
|
|
and eses.status = 1
|
|
)
|
|
AND ewl.wait_list_id NOT IN(SELECT eer.reference_id
|
|
FROM event_email_recipient eer
|
|
WHERE
|
|
eer.event_schedule_id = ewl.event_schedule_id
|
|
AND eer.email_status != 5
|
|
AND eer.reference_id IS NOT NULL
|
|
AND eer.email_type_id = 2
|
|
GROUP BY eer.reference_id)
|
|
GROUP BY ewl.event_schedule_id
|
|
ORDER BY ewl.wait_list_id DESC
|
|
")->result();
|
|
return $result;
|
|
}
|
|
|
|
public function get_events_for_reminder_email() {
|
|
|
|
return $this->db->query("SELECT
|
|
e.event_id, e.start_date_time
|
|
FROM event_registration er
|
|
LEFT JOIN event e ON e.event_id = er.event_id AND e.status = 1
|
|
WHERE er.status = 1
|
|
AND e.back_office_status IN (2, 3)
|
|
AND e.start_date_time > NOW()
|
|
AND e.status = 1
|
|
AND er.event_id IN(
|
|
SELECT eses.event_id
|
|
FROM event_schedule_email_status eses
|
|
WHERE eses.event_id = er.event_id
|
|
AND eses.email_type_id = 3
|
|
AND eses.status = 1
|
|
)
|
|
AND e.event_status !='CANCEL'
|
|
AND er.registration_id
|
|
NOT IN(SELECT eer.reference_id
|
|
FROM event_email_recipient eer
|
|
WHERE eer.event_id = er.event_id
|
|
AND eer.email_status NOT IN (1, 5)
|
|
AND eer.reference_id IS NOT NULL
|
|
AND eer.email_type_id = 3
|
|
)
|
|
AND (
|
|
CASE
|
|
WHEN (SELECT COUNT(ees.email_schedule_id)
|
|
FROM event_email_schedule ees
|
|
LEFT JOIN event_email_default_setting eeds
|
|
ON ees.reference = eeds.email_tpl_setting_id
|
|
AND eeds.email_type_id = 3
|
|
WHERE eeds.email_type_id = 3
|
|
AND ees.reference = eeds.email_tpl_setting_id
|
|
AND ees.email_schedule_status = 1
|
|
AND ees.event_id = er.event_id ) > 0
|
|
THEN
|
|
(CASE
|
|
WHEN (
|
|
SELECT COUNT(ees.email_schedule_id)
|
|
FROM event_email_schedule ees
|
|
LEFT JOIN event_email_default_setting eeds
|
|
ON ees.reference = eeds.email_tpl_setting_id
|
|
AND eeds.email_type_id = 3
|
|
WHERE eeds.email_type_id = 3
|
|
AND ees.reference = eeds.email_tpl_setting_id
|
|
AND ees.email_schedule_status = 1
|
|
AND ees.event_id = er.event_id
|
|
AND ees.email_schedule_id NOT IN (
|
|
SELECT eerod.email_sched_reference_id
|
|
FROM event_email_recipient eer
|
|
LEFT JOIN event_email_recipient_other_detail eerod
|
|
ON eerod.email_recipient_id = eer.email_recipient_id
|
|
AND eerod.email_sched_reference = 1
|
|
WHERE eer.event_id = er.event_id
|
|
AND eer.email_type_id = 3
|
|
AND eer.email_status != 5
|
|
AND eerod.email_recipient_id = eer.email_recipient_id
|
|
AND eerod.email_sched_reference = 1
|
|
)
|
|
) >0
|
|
THEN 1
|
|
ELSE 0
|
|
END)
|
|
WHEN (
|
|
SELECT COUNT(eeds.email_tpl_setting_id)
|
|
FROM event_email_default_setting eeds
|
|
WHERE eeds.email_type_id = 3
|
|
AND eeds.email_tpl_setting_status = 1
|
|
AND eeds.email_tpl_setting_id NOT IN (
|
|
SELECT eerod.email_sched_reference_id
|
|
FROM event_email_recipient eer
|
|
LEFT JOIN event_email_recipient_other_detail eerod
|
|
ON eerod.email_recipient_id = eer.email_recipient_id
|
|
AND eerod.email_sched_reference = 2
|
|
WHERE eer.event_id = er.event_id
|
|
AND eer.email_type_id = 3
|
|
AND eer.email_status != 5
|
|
AND eerod.email_recipient_id = eer.email_recipient_id
|
|
AND eerod.email_sched_reference = 2
|
|
)
|
|
) > 0
|
|
THEN 1
|
|
ELSE 0
|
|
END
|
|
) > 0
|
|
GROUP BY er.event_id
|
|
ORDER BY er.registration_id DESC
|
|
")->result();
|
|
}
|
|
|
|
public function get_event_detail_for_test_email($event_schedule_id,$email_type_id){
|
|
$this->load->model("event_schedule_model");
|
|
$result = $this->db->select("
|
|
es.event_schedule_id,
|
|
e.event_id,
|
|
e.title as event_title,
|
|
e.workshop_author,
|
|
et.event_type,
|
|
e.event_status,
|
|
".$this->event_schedule_model->use_diffent_address()."
|
|
(CASE WHEN e.rate > 0 THEN e.rate ELSE \"\" END) as event_rate,
|
|
efa.file_name as event_picture,
|
|
e.description as event_description,
|
|
e.start_date_time as event_start_date,
|
|
(CASE WHEN DATE_FORMAT(e.start_date_time, '%Hh%i') = '00h00' THEN \"\" ELSE DATE_FORMAT(e.start_date_time, '%Hh%i') END) as event_start_hour,
|
|
(CASE WHEN eeds.email_tpl_setting_sched = 0 THEN \"\" ELSE eeds.email_tpl_setting_sched END) as email_tpl_setting_sched,
|
|
(CASE WHEN eeds.email_tpl_setting_sched_by = 0 THEN \"\" ELSE eeds.email_tpl_setting_sched_by END) as email_tpl_setting_sched_by ")
|
|
->select("DAYNAME(e.start_date_time) AS event_start_day_name", FALSE)
|
|
->select("DATE_FORMAT(e.start_date_time, '%e') AS event_start_day", FALSE)
|
|
->select("DATE_FORMAT(e.start_date_time, '%m') AS event_start_month", FALSE)
|
|
->select("DATE_FORMAT(e.start_date_time, '%Y') AS event_start_year", FALSE)
|
|
->select("DATE_FORMAT(e.start_date_time, '%M') AS event_start_month_name", FALSE)
|
|
->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS start_date_hour", FALSE)
|
|
->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS commencement_de_lheure", FALSE)
|
|
->select("e.start_date_time AS date_complete", FALSE)
|
|
->from("event_schedule es")
|
|
->join("event e", "e.event_id = es.event_id", "left")
|
|
->join('event_type et', 'et.event_type_id = e.event_type_id',"left")
|
|
->join('event_file_attachment efa', 'efa.event_id = e.event_id AND efa.status=1 AND efa.attachment_type =1', "left")
|
|
->join("event_email_default_setting eeds", "eeds.email_type_id = $email_type_id AND eeds.email_tpl_setting_status=1", "left")
|
|
->where("es.event_schedule_id", $event_schedule_id)
|
|
->get();
|
|
if($result->num_rows() > 0){
|
|
return $result->row();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function check_all_sched($event_id, $isOpen=true) {
|
|
// Tells whether there's an event open or all are closed
|
|
$notIn = $isOpen ? '4,5,6' : '5,6';
|
|
|
|
if ( !$event_id ) {
|
|
return [];
|
|
}
|
|
|
|
return $this->db->query("SELECT es.event_id as eventID,
|
|
(SELECT @min_date := MIN(start_date_time) from event_schedule where event_id = ? AND back_office_status NOT IN (?)) AS mid_date,
|
|
(SELECT
|
|
GROUP_CONCAT(CONCAT
|
|
('{\"event_schedule_id\":\"', a.event_schedule_id,
|
|
'\", \"end_date\":\"', {$this->prepare_query_to_get_end_date("a.end_date_time", "a.start_date_time")},
|
|
'\", \"max_end_date\":\"', {$this->prepare_query_to_get_end_date("a.end_date_time", "a.start_date_time")},
|
|
'\", \"event_enddate\":\"', {$this->prepare_query_to_get_end_date("DATE(a.end_date_time)", "DATE(a.start_date_time)")},
|
|
'\", \"max_end_date_day\":\"', {$this->prepare_query_to_get_end_date("DAYNAME(a.end_date_time)", "DAYNAME(a.start_date_time)")},
|
|
'\", \"max_mdate_date\":\"', {$this->prepare_query_to_get_end_date("DAY(a.end_date_time)", "DAY(a.start_date_time)")},
|
|
'\", \"max_mdate_month\":\"', {$this->prepare_query_to_get_end_date("MONTHNAME(a.end_date_time)", "MONTHNAME(a.start_date_time)")},
|
|
'\", \"max_mdate_year\":\"', {$this->prepare_query_to_get_end_date("YEAR(a.end_date_time)", "YEAR(a.start_date_time)")},
|
|
'\", \"end_mdate_hour\":\"', (CASE
|
|
WHEN a.end_date_time IS NOT NULL
|
|
AND DATE_FORMAT(a.end_date_time, '%Hh%i') != '00h00'
|
|
AND a.end_date_time != @min_date
|
|
THEN DATE_FORMAT(a.end_date_time, 'à %Hh%i')
|
|
WHEN a.start_date_time IS NOT NULL
|
|
AND DATE_FORMAT(a.start_date_time, '%Hh%i') != '00h00'
|
|
AND a.start_date_time != @min_date
|
|
THEN DATE_FORMAT(a.start_date_time, 'à %Hh%i')
|
|
ELSE \"\"
|
|
END),
|
|
'\"}'
|
|
) ORDER BY a.start_date_time DESC, a.event_schedule_id DESC
|
|
SEPARATOR ',') as child_events
|
|
FROM event_schedule a
|
|
WHERE a.event_id = ?
|
|
AND a.back_office_status NOT IN (?)
|
|
) AS event_end_date,
|
|
MIN(es.start_date_time) as start_date,
|
|
DATE(min(es.start_date_time)) as event_startdate,
|
|
DAYNAME(min(es.start_date_time)) as min_start_day,
|
|
DAY(min(es.start_date_time)) as min_start_date,
|
|
MONTHNAME(min(es.start_date_time)) as min_start_date_month,
|
|
YEAR(min(es.start_date_time)) as min_date_year,
|
|
MAX(es.start_date_time) as end_date,
|
|
DAYNAME(max(es.start_date_time)) as end_sdate_day,
|
|
DAY(max(es.start_date_time)) as end_sdate_date,
|
|
MONTHNAME(max(es.start_date_time)) as max_sdate_month,
|
|
YEAR(max(es.start_date_time)) as max_sdate_year,
|
|
(CASE
|
|
WHEN DATE_FORMAT(min(es.start_date_time), '%Hh%i') = '00h00' THEN \"\"
|
|
ELSE DATE_FORMAT(min(es.start_date_time), 'de %Hh%i')
|
|
END) AS start_date_hour,
|
|
(CASE
|
|
WHEN DATE_FORMAT(min(es.start_date_time), '%Hh%i') = '00h00' THEN \"\"
|
|
ELSE DATE_FORMAT(min(es.start_date_time), 'à %Hh%i')
|
|
END) AS min_start_date_hour,
|
|
(CASE
|
|
WHEN DATE_FORMAT(max(es.start_date_time), '%Hh%i') = '00h00' THEN \"\"
|
|
ELSE DATE_FORMAT(max(es.start_date_time), 'à %Hh%i')
|
|
END) AS max_end_sdate_hour
|
|
FROM event_schedule es
|
|
WHERE es.event_id = ?
|
|
AND es.back_office_status NOT IN (?)
|
|
", array($event_id, $notIn, $event_id, $notIn, $event_id, $notIn))->result();
|
|
}
|
|
|
|
private function prepare_query_to_get_end_date($date1, $date2) {
|
|
return "(CASE
|
|
WHEN
|
|
(
|
|
a.end_date_time IS NOT NULL
|
|
AND DATE_FORMAT(a.end_date_time, '%Y-%m-%d') = DATE_FORMAT(@min_date, '%Y-%m-%d')
|
|
)
|
|
OR
|
|
(
|
|
a.end_date_time IS NULL
|
|
AND DATE_FORMAT(a.start_date_time, '%Y-%m-%d') = DATE_FORMAT(@min_date, '%Y-%m-%d')
|
|
)
|
|
THEN \"\"
|
|
WHEN
|
|
a.end_date_time IS NOT NULL
|
|
AND DATE_FORMAT(a.end_date_time, '%Y-%m-%d') != DATE_FORMAT(@min_date, '%Y-%m-%d')
|
|
THEN {$date1}
|
|
WHEN
|
|
a.end_date_time IS NULL
|
|
AND DATE_FORMAT(a.start_date_time, '%Y-%m-%d') != DATE_FORMAT(@min_date, '%Y-%m-%d')
|
|
THEN {$date2}
|
|
ELSE \"\"
|
|
END)";
|
|
}
|
|
|
|
public function count_workshop($filter, $type, $user_id) {
|
|
$query = $this->_get_filter_query($user_id);
|
|
$query .= $this->_get_filter_type($filter, NULL, $type, NULL);
|
|
// $query .= ' GROUP BY e.event_id ORDER BY bostatus ASC';
|
|
$query .= ' GROUP BY e.event_id ORDER BY
|
|
SUBSTRING_INDEX(bostatus,"_",1) ASC,
|
|
CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) NOT IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END ASC,
|
|
CASE WHEN SUBSTRING_INDEX(bostatus,"_",1) IN("d") THEN SUBSTRING_INDEX(SUBSTRING_INDEX(bostatus,"_",2),"_",-1) END DESC';
|
|
//$query .= ' LIMIT '.(($pages > 0)?$pages:0).', '.HP_EVENT_DISPLAY['perPage'].' ';
|
|
$events = $this->db->query($query);
|
|
|
|
return $events->num_rows();
|
|
}
|
|
|
|
public function get_file_attachments($event_id) {
|
|
$this->db->select('file_name, display');
|
|
$this->db->where('status', 1);
|
|
$this->db->where('event_id', $event_id);
|
|
return $this->db->get('event_file_attachment')->result_array();
|
|
}
|
|
|
|
public function event_details_reserved($event_id, $is_video = false)
|
|
{
|
|
$this->db->select("e.event_id, e.title AS event_title,
|
|
e.description,
|
|
e.rate as event_rate,
|
|
e.seat_feature,
|
|
e.date_feature,
|
|
e.workshop_author,
|
|
e.author_label,
|
|
e.workshop_author_description,
|
|
e.hours_per_session,
|
|
e.total_available_seat,
|
|
e.reservation_start_date,
|
|
e.reservation_end_date,
|
|
e.start_date_time,
|
|
e.workshop_session,
|
|
e.event_category,
|
|
e.end_date_time,
|
|
e.event_status");
|
|
$this->db->select("DAYNAME(e.start_date_time) AS event_start_day_name", FALSE);
|
|
$this->db->select("DATE_FORMAT(e.start_date_time, '%e') AS event_start_day", FALSE);
|
|
$this->db->select("DATE_FORMAT(e.start_date_time, '%m') AS event_start_month", FALSE);
|
|
$this->db->select("DATE_FORMAT(e.start_date_time, '%M') AS event_start_month_name", FALSE);
|
|
$this->db->select("DATE_FORMAT(e.start_date_time, '%Y') AS event_start_year", FALSE);
|
|
$this->db->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS start_date_hour", FALSE);
|
|
$this->db->select("DATE_FORMAT(e.start_date_time, '%Hh%i') AS commencement_de_lheure", FALSE);
|
|
$this->db->select("e.start_date_time AS date_complete", FALSE);
|
|
$this->db->from('event e');
|
|
$this->db->where('e.event_id', $event_id);
|
|
|
|
return $this->db->get()->row();
|
|
}
|
|
|
|
public function similar_events($category = 0, $event_id = null) {
|
|
|
|
$this->db->select('event_id, title, workshop_author, status');
|
|
if($category != 0) {
|
|
$this->db->where('event_type_id', $category);
|
|
}
|
|
if($event_id != null) {
|
|
$this->db->where('event_id !=', $event_id);
|
|
}
|
|
$this->db->where_in('back_office_status', [1,2,3,4]);
|
|
$this->db->where('end_date_time >=',date('Y-m-d'));
|
|
$this->db->where('status', 1);
|
|
$this->db->where('remaining_combined_seat >', 0);
|
|
$this->db->or_where('workshop_session','ENLIGNE');
|
|
$events = $this->db->get('event')->result();
|
|
|
|
$similar_events= array();
|
|
if($events) {
|
|
foreach($events as $event) {
|
|
if($event->status == 1) {
|
|
array_push($similar_events, (array) $event);
|
|
}
|
|
}
|
|
}
|
|
return $similar_events;
|
|
}
|
|
|
|
public function get_past_events() {
|
|
|
|
$this->db->select('event_id, title, workshop_author, status');
|
|
|
|
$this->db->where_not_in('back_office_status', [0,6,7]);
|
|
$this->db->where('end_date_time <',date('Y-m-d'));
|
|
$this->db->where('status', 1);
|
|
$this->db->where_not_in('workshop_session', ['ENLIGNE']);
|
|
$events = $this->db->get('event')->result();
|
|
|
|
return $events;
|
|
}
|
|
|
|
public function get_selected_past_events() {
|
|
|
|
$this->db->select('*');
|
|
|
|
$events = $this->db->get('event_past_featured')->row();
|
|
$event_details = array();
|
|
$ids = array();
|
|
if($events && $events->events != 'null') {
|
|
$ids = json_decode($events->events);
|
|
foreach($ids as $id) {
|
|
$details = $this->event_details($id);
|
|
array_push($event_details, $details);
|
|
}
|
|
|
|
}
|
|
return $event_details;
|
|
}
|
|
|
|
public function add_selected_past_events(array $data) {
|
|
|
|
$this->db->select('*');
|
|
$past_events = $this->db->get('event_past_featured')->row();
|
|
if($past_events) {
|
|
/** update featured past events */
|
|
$event_data["events"] = $data['events'];
|
|
$this->db->where("id", $past_events->id);
|
|
return $this->db->update("event_past_featured", $event_data);
|
|
} else {
|
|
/** add featured past events */
|
|
$event = array('events' => $data['events']);
|
|
$this->db->insert("event_past_featured", $event);
|
|
return $this->db->insert_id();
|
|
}
|
|
|
|
return $past_events;
|
|
}
|
|
|
|
public function get_similar_events($events) {
|
|
$similar_events= array();
|
|
if($events) {
|
|
foreach($events as $event) {
|
|
$event_details = $this->event_details($event);
|
|
if($event_details->back_office_status != 6 && $event_details->back_office_status != null) {
|
|
$event_details->hours_per_session=$this->formatHour($event_details->hours_per_session);
|
|
array_push($similar_events, (array) $event_details);
|
|
}
|
|
}
|
|
}
|
|
return $similar_events;
|
|
}
|
|
|
|
private function formatHour($time) {
|
|
$hour = explode('.', $time);
|
|
$minute = '';
|
|
if(count($hour)>1) {
|
|
$minute = $this->formatMinute($hour[1]);
|
|
}
|
|
return $hour[0].'h'.$minute;
|
|
}
|
|
|
|
private function formatMinute($minute=null) {
|
|
$m = '';
|
|
if($minute != null) {
|
|
$minute = '.'.$minute;
|
|
|
|
$m = (float)$minute*60;
|
|
}
|
|
return $m;
|
|
}
|
|
|
|
public function get_online_video() {
|
|
$result = $this->db->select('event_id, workshop_session')
|
|
->from('event')
|
|
->where('workshop_session', 'ENLIGNE')
|
|
->where('status', 1);
|
|
return $result->get()->result();
|
|
}
|
|
|
|
public function format_night_class_prices($event) {
|
|
$ncp = json_decode($event->night_class_prices);
|
|
$presentiel_available_seats = $ncp->presentiel->total_available_seat - $this->count_total_reserved_seats($event->event_id, 'soir-presentiel');
|
|
$prices = [
|
|
"presentiel" => [
|
|
"p_rate" => $ncp->presentiel->rate,
|
|
"p_total_available_seat" => $ncp->presentiel->total_available_seat,
|
|
"p_discounted_price" => $ncp->presentiel->discounted_price,
|
|
"p_discount_apply" => $ncp->presentiel->discount_apply,
|
|
"p_remaining_combined_seat" => $presentiel_available_seats
|
|
],
|
|
"distance" => [
|
|
"d_rate" => $ncp->distance->rate,
|
|
"d_total_available_seat" => $ncp->distance->total_available_seat != '' ? $ncp->distance->total_available_seat : 0,
|
|
"d_discounted_price" => $ncp->distance->discounted_price,
|
|
"d_discount_apply" => $ncp->distance->discount_apply,
|
|
"d_remaining_combined_seat" => ($ncp->distance->total_available_seat != '' ? $ncp->distance->total_available_seat : 0) - $this->count_total_reserved_seats($event->event_id, 'soir-distance')
|
|
]
|
|
];
|
|
$event->remaining_combined_seat = $presentiel_available_seats;
|
|
return array_merge((array)$event, $prices);
|
|
}
|
|
public function count_total_reserved_seats($event_id, $registration_type) {
|
|
$this->db->select_sum('number_of_guest');
|
|
$this->db->from('event_registration');
|
|
$this->db->where('event_id', $event_id);
|
|
$this->db->where('registration_type', $registration_type);
|
|
$this->db->where('status', 1);
|
|
$this->db->count_all();
|
|
$query=$this->db->get();
|
|
if(!empty($query->row()->number_of_guest))
|
|
return $query->row()->number_of_guest;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
|