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.
436 lines
17 KiB
436 lines
17 KiB
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
class Noshow_model extends CI_Model {
|
|
|
|
var $column_order = array(null, 'CONCAT(u.first_name," ", u.last_name)', 'type', 'no_of_place', null, null); //set column field database for datatable orderable
|
|
var $column_search = array('CONCAT(u.first_name," ", u.last_name)'); //set column field database for datatable searchable just firstname , lastname , address are searchable
|
|
var $order = array('u.first_name' => 'ASC'); // default order
|
|
|
|
public function __construct() {
|
|
parent::__construct();
|
|
$this->array = [];
|
|
}
|
|
/*
|
|
* Return main query for datatable
|
|
*/
|
|
private function _get_datatables_query($data_source,$event_schedule_id,$type){
|
|
|
|
$_search = ""; $_ordey_by = ""; $data = array();
|
|
$_query = "";
|
|
|
|
switch ($type) {
|
|
case 1:
|
|
$_query = $this->query_table($event_schedule_id);
|
|
break;
|
|
case 0 :
|
|
$_query = $this->query_table_waitlist($event_schedule_id);
|
|
break;
|
|
}
|
|
|
|
// if datatable send POST for search
|
|
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 ( ".$this->db->escape_str($item)." LIKE ? ";
|
|
} else {
|
|
array_push($data, "%".$data_source['search']['value']."%");
|
|
$_search .= " OR ".$this->db->escape_str($item)." LIKE ? ";
|
|
}
|
|
$i++;
|
|
}
|
|
$_search .= ")";
|
|
}
|
|
|
|
if(isset($data_source['order'])) { // here order processing
|
|
if(isset($data_source['order']['0']['dir'])) {
|
|
$_ordey_by .= " ORDER BY ".$this->db->escape_str($this->column_order[$data_source['order']['0']['column']])." ".$this->db->escape_str($data_source['order']['0']['dir']);
|
|
}
|
|
} else if(isset($this->order)) {
|
|
$_ordey_by .= " ORDER BY ".$this->db->escape_str(key($this->order))." ".$this->db->escape_str($this->order[key($this->order)]);
|
|
}else{
|
|
$_ordey_by="";
|
|
}
|
|
|
|
return array("query"=>$_query["query"].$_search.$_query["groupby"].$_ordey_by, "data" =>$data);
|
|
}
|
|
|
|
public function get_datatables($data_source, $event_schedule_id,$type){
|
|
|
|
$_query = $this->_get_datatables_query($data_source, $event_schedule_id,$type);
|
|
|
|
if($data_source['length'] != -1){
|
|
$_query["query"] .= " LIMIT ".$this->db->escape_str($data_source['start']).", ".$this->db->escape_str($data_source['length']);
|
|
}
|
|
$data = $this->db->query($_query["query"], $_query["data"]);
|
|
return $data->result();
|
|
}
|
|
|
|
public function count_filtered($data_source, $event_schedule_id, $type){
|
|
|
|
$_query = $this->_get_datatables_query($data_source, $event_schedule_id, $type);
|
|
return $this->db->query($_query["query"], $_query["data"])->num_rows();
|
|
}
|
|
|
|
public function count_all($data_source, $event_schedule_id, $type){
|
|
$_query = $this->_get_datatables_query($data_source, $event_schedule_id, $type);
|
|
return $this->db->query($_query["query"], $_query["data"])->num_rows();
|
|
}
|
|
public function extra_people($event_schedule_id)
|
|
{
|
|
$query = $this->query_table($event_schedule_id);
|
|
$result = $this->db->query("
|
|
SELECT walk_in_id, first_name, last_name, email_address, note
|
|
FROM event_attendance_walk_in
|
|
WHERE event_schedule_id = ?
|
|
", array($event_schedule_id));
|
|
return $result->result();
|
|
}
|
|
public function confirmed($event_schedule_id)
|
|
{
|
|
$query = $this->query_table($event_schedule_id);
|
|
$result = $this->db->query( $query['query']);
|
|
return $result->result();
|
|
}
|
|
public function waitlist($event_schedule_id)
|
|
{
|
|
$query = $this->query_table_waitlist($event_schedule_id);
|
|
$result = $this->db->query( $query['query']);
|
|
return $result->result();
|
|
}
|
|
public function check_has_registration_id($registration_id)
|
|
{
|
|
$this->db->select("registration_id");
|
|
$this->db->where('registration_id', $registration_id);
|
|
$result = $this->db->get("event_registration");
|
|
if($result->num_rows() > 0)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
public function check_has_wait_list_id($waitlist_id)
|
|
{
|
|
$this->db->select("wait_list_id");
|
|
$this->db->where('wait_list_id', $waitlist_id);
|
|
$result = $this->db->get("event_wait_list");
|
|
if($result->num_rows() > 0)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
public function check_has_remaining_seats($event_schedule_id)
|
|
{
|
|
$result = $this->db->query("SELECT
|
|
(CASE
|
|
WHEN e.seat_feature = 2 THEN e.remaining_combined_seat
|
|
ELSE es.remaining_seat
|
|
END) as remaining_seat
|
|
from event_schedule es
|
|
left join event e ON e.event_id = es.event_id
|
|
where es.back_office_status NOT IN(0,7,6)
|
|
and es.event_schedule_id = ?
|
|
limit 1 ", array($event_schedule_id));
|
|
|
|
if($result->num_rows() > 0) {
|
|
$ret = $result->row();
|
|
return $ret->remaining_seat;
|
|
}
|
|
return false;
|
|
}
|
|
private function query_table($event_schedule_id)
|
|
{
|
|
return array("query" =>"
|
|
SELECT
|
|
(
|
|
SELECT ev.title
|
|
FROM event ev
|
|
LEFT JOIN event_schedule evs
|
|
ON ev.event_id = evs.event_id
|
|
WHERE evs.event_schedule_id = ".$this->db->escape($event_schedule_id)."
|
|
) as event_name,
|
|
er.registration_id as registration_id,
|
|
er.date_time as reservation_date,
|
|
(CASE
|
|
WHEN er.status = 1 THEN 'Confirmed'
|
|
WHEN er.status = 0 THEN 'Withdrawn'
|
|
END) AS type,
|
|
CONCAT(u.first_name,' ',u.last_name) as users_name,
|
|
(er.number_of_guest + 1) as no_of_place,
|
|
(
|
|
SELECT ea.note
|
|
FROM event_attendance ea
|
|
WHERE ea.registration_id = er.registration_id
|
|
) as comment,
|
|
(
|
|
SELECT
|
|
ea.is_attended
|
|
FROM event_attendance ea
|
|
WHERE ea.registration_id = er.registration_id
|
|
) as no_show_type,
|
|
(
|
|
SELECT
|
|
ea.attendance_id
|
|
FROM event_attendance ea
|
|
WHERE ea.registration_id = er.registration_id
|
|
) as attendance_id
|
|
FROM event_registration er
|
|
LEFT JOIN user u
|
|
ON er.subscriber = u.user_id
|
|
WHERE er.status = 1
|
|
AND er.event_schedule_id = ".$this->db->escape($event_schedule_id)."
|
|
"
|
|
,"groupby" => ""
|
|
);
|
|
}
|
|
private function query_table_waitlist($event_schedule_id)
|
|
{
|
|
return array("query" =>"
|
|
SELECT
|
|
(
|
|
SELECT ev.title
|
|
FROM event ev
|
|
LEFT JOIN event_schedule evs
|
|
ON ev.event_id = evs.event_id
|
|
WHERE evs.event_schedule_id = ".$this->db->escape($event_schedule_id)."
|
|
) as event_name,
|
|
ewl.wait_list_id as registration_id,
|
|
ewl.date_time as reservation_date,
|
|
(CASE
|
|
WHEN ewl.status = 1 THEN 'Waitlist'
|
|
WHEN ewl.status = 0 THEN 'Cancelled'
|
|
END) AS type,
|
|
CONCAT(u.first_name,' ',u.last_name) as users_name,
|
|
ewl.number_of_places as no_of_place,
|
|
(
|
|
SELECT ea.note
|
|
FROM event_attendance ea
|
|
WHERE ea.registration_id = ewl.wait_list_id
|
|
) as comment,
|
|
(
|
|
SELECT ea.is_attended
|
|
FROM event_attendance ea
|
|
WHERE ea.registration_id = ewl.wait_list_id
|
|
) as no_show_type
|
|
FROM event_wait_list ewl
|
|
LEFT JOIN user u
|
|
ON ewl.wait_list_subscriber = u.user_id
|
|
WHERE ewl.status = 1
|
|
AND ewl.event_schedule_id = ".$this->db->escape($event_schedule_id)."
|
|
"
|
|
,"groupby" => ""
|
|
);
|
|
}
|
|
public function get_event_name_by_schedule_id($event_schedule_id)
|
|
{
|
|
$query = "SELECT ev.title, DATE_FORMAT(evs.start_date_time, '%e/%m/%Y') AS date_month,
|
|
DATE_FORMAT(evs.end_date_time, '%Hh%i') AS hour
|
|
FROM event ev
|
|
LEFT JOIN event_schedule evs
|
|
ON ev.event_id = evs.event_id
|
|
WHERE evs.event_schedule_id = ".$this->db->escape($event_schedule_id)."
|
|
AND evs.back_office_status NOT IN(6)
|
|
AND ev.status = 1
|
|
";
|
|
|
|
$result = $this->db->query($query);
|
|
if($result->num_rows() > 0){
|
|
$ret = $result->row();
|
|
return [
|
|
"title" =>$ret->title,
|
|
"date_month" => $ret->date_month,
|
|
"hour" => $ret->hour
|
|
];
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
}
|
|
public function check_exist_walkin($walkinid){
|
|
$this->db->select("walk_in_id");
|
|
$this->db->where('walk_in_id', $walkinid);
|
|
$result = $this->db->get("event_attendance_walk_in");
|
|
if($result->num_rows() > 0){
|
|
return "true";
|
|
}
|
|
}
|
|
public function insert_walkin($event_schedule_id, $walkinid,$name,$last,$email,$comment)
|
|
{
|
|
$this->db->insert("event_attendance_walk_in", array(
|
|
'event_schedule_id' => $event_schedule_id,
|
|
"first_name" => $name,
|
|
'last_name' => $last,
|
|
'email_address' => $email,
|
|
'note' => $comment,
|
|
'date_time' => date('Y-m-d h:m:s')
|
|
));
|
|
}
|
|
public function update_walkin($event_schedule_id, $walkinid,$name,$last,$email,$comment)
|
|
{
|
|
$this->db->where('walk_in_id', $walkinid);
|
|
$this->db->update("event_attendance_walk_in", array(
|
|
"first_name" => $name,
|
|
'last_name' => $last,
|
|
'email_address' => $email,
|
|
'note' => $comment,
|
|
'date_time' => date('Y-m-d h:m:s')
|
|
));
|
|
}
|
|
public function save_import_confirmed_waitlist($type, $author,$registration_id,$no_show,$note, $added_via=1)
|
|
{
|
|
|
|
if( strtolower( $type ) == "confirmed")
|
|
$type = 1;
|
|
else if( strtolower($type) == "waitlist")
|
|
$type = 0;
|
|
|
|
if( !is_numeric($no_show) ){
|
|
$is_attended = 0;
|
|
}else{
|
|
$is_attended = $no_show;
|
|
}
|
|
|
|
if( $this->check_exist_attendance($registration_id) == "true"){
|
|
$this->db->where('registration_id', $registration_id);
|
|
$this->db->update("event_attendance", array(
|
|
'is_attended' => $is_attended,
|
|
'note' => $note,
|
|
'date_attended' => date('Y-m-d h:m:s'),
|
|
'added_via' => $added_via,
|
|
'author' => $author,
|
|
'date_created' => date('Y-m-d h:m:s')
|
|
));
|
|
}else{
|
|
$this->db->insert("event_attendance", array(
|
|
'registration_id' => $registration_id,
|
|
"attendance_type" => $type,
|
|
'is_attended' => $is_attended,
|
|
'note' => $note,
|
|
'date_attended' => date('Y-m-d h:m:s'),
|
|
'added_via' => $added_via,
|
|
'author' => $author,
|
|
'date_created' => date('Y-m-d h:m:s')
|
|
));
|
|
}
|
|
}
|
|
public function update_noshows($author)
|
|
{
|
|
$arr = [];
|
|
$note = ""; $is_attended = null; $registration_id = null; $validated = false; $type = null;
|
|
|
|
foreach ($_POST as $key => $params)
|
|
{
|
|
if( $key != 'no_show_list_length'){
|
|
|
|
$post = explode('_', $key);
|
|
$registration_id = is_numeric( $post[1] ) ? $post[1] : '';
|
|
|
|
if( $post[0] == "isattended" ) {
|
|
if( !is_numeric($params) ){
|
|
$is_attended = 0;
|
|
}else{
|
|
$is_attended = $params;
|
|
}
|
|
}
|
|
|
|
if( !empty( strtolower($post[2])))
|
|
$type = strtolower($post[2]) == "confirmed" ? 1 : 0;
|
|
|
|
$note = $post[0] == "notes" ? $params : '';
|
|
|
|
if( $this->greater_no_place_single("event_registration","registration_id",$is_attended, $type, $registration_id)
|
|
|| $this->greater_no_place_single("event_wait_list","wait_list_id",$is_attended, $type, $registration_id)
|
|
){
|
|
output_to_json($this,array(
|
|
"_input" => "#".$registration_id,
|
|
"mtype" => "error",
|
|
"message" => $this->lang->line("invalid_place")
|
|
)) ;
|
|
break;
|
|
}else{
|
|
if( $this->check_exist_attendance($registration_id) == "true"){
|
|
$this->db->where('registration_id', $registration_id);
|
|
$this->db->update("event_attendance", array(
|
|
'attendance_type' => $type,
|
|
'is_attended' => $is_attended,
|
|
'note' => $note,
|
|
'date_attended' => date('Y-m-d h:m:s'),
|
|
'added_via' => 2,
|
|
'author' => $author,
|
|
'date_created' => date('Y-m-d h:m:s')
|
|
));
|
|
}else{
|
|
$this->db->insert("event_attendance", array(
|
|
'registration_id' => $registration_id,
|
|
'attendance_type' => $type,
|
|
'is_attended' => $is_attended,
|
|
'note' => $note,
|
|
'date_attended' => date('Y-m-d h:m:s'),
|
|
'added_via' => 2,
|
|
'author' => $author,
|
|
'date_created' => date('Y-m-d h:m:s')
|
|
));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
private function check_exist_attendance($registration_id){
|
|
$this->db->select("registration_id");
|
|
$this->db->where('registration_id', $registration_id);
|
|
$result = $this->db->get("event_attendance");
|
|
if($result->num_rows() > 0){
|
|
return "true";
|
|
}
|
|
}
|
|
public function greater_no_place_single($table,$id,$no_show, $type, $registration_id)
|
|
{
|
|
$this->db->select(( $id=="registration_id") ? "number_of_guest" : "number_of_places");
|
|
$this->db->where($id, $registration_id);
|
|
$result = $this->db->get($table);
|
|
if($result->num_rows() > 0){
|
|
$ret = $result->row();
|
|
$greater = ( $id=="registration_id") ? ( $ret->number_of_guest + 1) : ( $ret->number_of_places);
|
|
if( $no_show > $greater ){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
public function greater_no_place($no_show, $type, $registration_id)
|
|
{
|
|
if($type=="confirmed")
|
|
{
|
|
$this->db->select("number_of_guest");
|
|
$this->db->where('registration_id', $registration_id);
|
|
$result = $this->db->get("event_registration");
|
|
if($result->num_rows() > 0){
|
|
$ret = $result->row();
|
|
if( $no_show > ( $ret->number_of_guest + 1) ){
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
else if( $type=="waitlist")
|
|
{
|
|
$this->db->select("number_of_places");
|
|
$this->db->where('wait_list_id', $registration_id);
|
|
$result = $this->db->get("event_wait_list");
|
|
if($result->num_rows() > 0){
|
|
$ret = $result->row();
|
|
if( $no_show > ( $ret->number_of_places) ){
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
public function count_walkin($event_schedule_id)
|
|
{
|
|
$this->db->select("*");
|
|
$this->db->where('event_schedule_id', $event_schedule_id);
|
|
$result = $this->db->get("event_attendance_walk_in");
|
|
return $result->num_rows();
|
|
}
|
|
}
|
|
|