queryBookList($eventScheduleId); $result = $this->db->query($query['query']); return $result->result(); } /** * Get Waiting List(s) * * @param integer $eventScheduleId * @return void * access public member */ public function waitList(int $eventScheduleId) { if (is_null($eventScheduleId)) { return false; } $query = $this->queryWaitList($eventScheduleId); $result = $this->db->query($query['query']); return $result->result(); } /** * Get Extrapeoples * * @param integer $eventScheduleId * @return void * access public member */ public function extraPeople(int $eventScheduleId) { if (is_null($eventScheduleId)) { return false; } $result = $this->db->query(" SELECT '' as user_id, eawi.walk_in_id AS registration_id, 'Walk in' AS type, '2' AS no_show_type, eawi.gender AS civility, eawi.last_name AS last_name, eawi.first_name AS first_name, eawi.email_address AS email_address, 'n/a' AS no_of_place, eawi.attendance AS attendance, eawi.note AS comment FROM event_attendance_walk_in as eawi WHERE eawi.event_schedule_id = ".$eventScheduleId." ORDER BY type DESC, last_name ASC "); return $result->result(); } /** * Query string for confirmed/bookings * * @param integer $eventScheduleId * @return void * access private member */ private function queryBookList(int $eventScheduleId) { return array("query" =>" SELECT u.user_id as user_id, er.registration_id as registration_id, (CASE WHEN er.status = 1 THEN 'Booking' WHEN er.status = 0 THEN 'Withdrawn' END) AS type, (SELECT us.civility FROM user_subscriber us WHERE us.subscriber = er.subscriber ) AS civility, (SELECT u.last_name FROM user u WHERE u.user_id = er.subscriber )AS last_name, (SELECT u.first_name FROM user u WHERE u.user_id = er.subscriber ) AS first_name, (SELECT u.email_address FROM user u WHERE u.user_id = er.subscriber ) AS email_address, (SELECT ev.title FROM event ev LEFT JOIN event_schedule evs ON ev.event_id = evs.event_id WHERE evs.event_schedule_id = ".$eventScheduleId." ) as event_name, er.date_time as reservation_date, 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 AND ea.attendance_type = 0 ) as comment, ( SELECT ea.is_attended FROM event_attendance ea WHERE ea.registration_id = er.registration_id AND ea.attendance_type = 0 ) as no_show_type, ( SELECT ea.attendance_id FROM event_attendance ea WHERE ea.registration_id = er.registration_id AND ea.attendance_type = 0 ) as attendance_id, (SELECT etn.attendance FROM event_attendance_noshow etn WHERE etn.user_id = er.subscriber AND event_schedule_id = {$eventScheduleId} ) as attendance FROM event_registration er LEFT JOIN user u ON er.subscriber = u.user_id WHERE er.status = 1 AND er.event_schedule_id = ".$eventScheduleId." ORDER BY type DESC, last_name ASC " ,"groupby" => "" ); } /** * Query strring for Waiting List(s) * * @param integer $eventScheduleId * @return void */ private function queryWaitList(int $eventScheduleId) { return array("query" =>" SELECT u.user_id as user_id, ewl.wait_list_id as registration_id, (CASE WHEN ewl.status = 1 THEN 'Waiting' WHEN ewl.status = 0 THEN 'Cancelled' END) AS type, (SELECT us.civility FROM user_subscriber us WHERE us.subscriber = ewl.wait_list_subscriber ) AS civility, (SELECT u.last_name FROM user u WHERE u.user_id = ewl.wait_list_subscriber ) AS last_name, (SELECT u.first_name FROM user u WHERE u.user_id = ewl.wait_list_subscriber ) AS first_name, (SELECT u.email_address FROM user u WHERE u.user_id = ewl.wait_list_subscriber ) AS email_address, (SELECT ev.title FROM event ev LEFT JOIN event_schedule evs ON ev.event_id = evs.event_id WHERE evs.event_schedule_id = ".$eventScheduleId." ) AS event_name, ewl.date_time as reservation_date, 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 AND ea.attendance_type = 1 ) as comment, ( SELECT ea.is_attended FROM event_attendance ea WHERE ea.registration_id = ewl.wait_list_id AND ea.attendance_type = 1 ) as no_show_type, (SELECT etn.attendance FROM event_attendance_noshow etn WHERE etn.user_id = ewl.wait_list_subscriber AND event_schedule_id = {$eventScheduleId} ) as attendance 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 = ".$eventScheduleId." ORDER BY type DESC, last_name ASC " ,"groupby" => "" ); } /** * Get event schedule details "Event ID, Title, Date months and hour" * * @param integer $eventScheduleId * @return void * access private member */ public function getEventScheduleDetails(int $eventScheduleId) { $query = " SELECT evs.event_id as event_id, ev.title, DATE_FORMAT(evs.start_date_time, '%e/%m/%Y') AS date_month, DATE_FORMAT(evs.end_date_time, '%Hh%i') AS hour , ( CASE WHEN evs.start_date_time IS NULL THEN '' ELSE CONCAT(' - ',DATE_FORMAT(evs.start_date_time, '%e/%m/%Y %Hh%i')) END) as start_date_time_hour, (CASE WHEN DATE_FORMAT(evs.start_date_time, '%Y/%m/%e %H:%i') < DATE_FORMAT(NOW(), '%Y/%m/%e %H:%i') OR evs.back_office_status NOT IN(0,5,6,1,2) THEN 1 ELSE 0 END) is_passed_start_date FROM event ev LEFT JOIN event_schedule evs ON ev.event_id = evs.event_id WHERE evs.event_schedule_id = ".$eventScheduleId." AND evs.back_office_status NOT IN(6) AND ev.status = 1 "; $eventDetailsResultSets = $this->db->query($query); //return false if empty records if ($eventDetailsResultSets->num_rows() == 0) { return false; } //get Rows $eventDetails = $eventDetailsResultSets->row(); //Return event details return [ "event_id" =>($eventDetails->event_id ?? 0), "title" =>($eventDetails->title ?? 0), "date_month" => ($eventDetails->date_month ?? 0), "hour" => ($eventDetails->hour ?? 0), "start_date_time_hour" => ($eventDetails->start_date_time_hour ?? 0), "is_passed_start_date" => ($eventDetails->is_passed_start_date ?? 0) ]; } /** * Add new extra people * * @param int $eventId * @param int $eventScheduleId * @param string $gender * @param string $name * @param string $last * @param string $email * @param string $comment * @param int $attendance * @return void * access public member */ public function AddNewExtraPeople($eventId, $eventScheduleId, $gender, $name, $last, $email, $comment, $attendance) { $this->db->insert("event_attendance_walk_in", array( 'event_id' => $eventId, 'event_schedule_id' => $eventScheduleId, 'gender' => $gender, "first_name" => $name, 'last_name' => $last, 'email_address' => $email, 'note' => $comment, 'attendance' => $attendance, 'date_time' => date('Y-m-d h:m:s') )); } /** * Update event attendance(or NO SHOW) * * @param null $type * @param null $author * @param null $registration_id * @param null $no_show * @param null $note * @param integer $added_via = 1 = export excel * @return void * access public member */ public function saveBookAndWait($type, $author, $registration_id, $no_show, $note, $added_via=1) { //Check first if registration_id exist in table "event_attendance" if ($this->checkAttendanceExist($registration_id)) { //Then update attendance $this->db->where('registration_id', $registration_id); $this->db->update("event_attendance", array( 'is_attended' => $no_show, '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 { //Else insert attendance $this->db->insert("event_attendance", array( 'registration_id' => $registration_id, 'attendance_type' => $type, 'is_attended' => $no_show, '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') )); } } /** * Check "Registration ID" if exist * * @param integer $registration_id * @return boolean * access private member */ private function checkAttendanceExist(int $registration_id) : bool { $this->db->select("registration_id"); $this->db->where('registration_id', $registration_id); $result = $this->db->get("event_attendance"); return $result->num_rows() > 0; } /** * Check if exist noshow data exists * * @param integer $user_id * @param integer $event_schedule_id * @return boolean * access private member */ private function checkNoshowExist(?int $user_id, int $event_schedule_id) : bool { if ($user_id == null) { return false; } $this->db->select("user_id"); $this->db->where('user_id', $user_id); $this->db->where('event_schedule_id', $event_schedule_id); $result = $this->db->get("event_attendance_noshow"); return $result->num_rows() > 0; } /** * Function to check wheter the excel file was already uploaded then insert new record * for table "event_attendance_walk_in" and "event_attendance_noshow" * * @param string $table * @param integer $eventId * @param integer $eventScheduleId * @return void * access public member */ public function deleteRecordIfExist(int $eventId, int $eventScheduleId) { //Delete record for table "event_attendance_walk_in" if already uploaded if ($this->checkHasAlreadyRecord('event_attendance_walk_in', $eventId, $eventScheduleId)) { $this->deleteIfRecordExist('event_attendance_walk_in', $eventId, $eventScheduleId); } //Delete record for table "event_attendance_noshow" if already uploaded if ($this->checkHasAlreadyRecord('event_attendance_noshow', $eventId, $eventScheduleId)) { $this->deleteIfRecordExist('event_attendance_noshow', $eventId, $eventScheduleId); } } /** * Check if event ID and event schedule id exist * * @param string $table * @param integer $eventId * @param integer $eventScheduleId * @return boolean * access public member */ private function checkHasAlreadyRecord(string $table, int $eventId, int $eventScheduleId) : bool { $this->db->select("*"); $this->db->from($table); $this->db->where("event_id", $eventId); $this->db->where("event_schedule_id", $eventScheduleId); $resultCount = $this->db->get(); return $resultCount->num_rows() > 0 ; } /** * Delete record if exist * * @param string $table = event_attendance_walk_in, event_attendance_noshow * @param integer $eventId = Event ID * @param integer $eventScheduleId = Event Schedule ID * @return void * access public member */ private function deleteIfRecordExist(string $table, int $eventId, int $eventScheduleId) { $this->db->where('event_id', $eventId); $this->db->where('event_schedule_id', $eventScheduleId); $this->db->delete($table); } /** * Append to "event_attendance_noshow" booking,waiting,extrapeoples * * @param array $data * @return void * access public member */ public function saveEventAttendanceNoShow(array $data) { if (!$this->checkNoshowExist($data['user_id'], $data['event_schedule_id'])) { $this->db->insert('event_attendance_noshow', $data); } else { $user_id = $data['user_id']; $event_schedule_id = $data['event_schedule_id']; unset($data['user_id']); unset($data['event_schedule_id']); unset($data['event_id']); $this->db->where('user_id', $user_id); $this->db->where('event_schedule_id', $event_schedule_id); $this->db->update('event_attendance_noshow', $data); } } /** * total_available_seat, remaining_seat in Event_schedule table * * @param integer $eventId * @param integer $eventScheduleId * @return void * access public member */ public function getTotalAvailableAndRemainingPlaces(int $eventId, int $eventScheduleId) { $this->db->select("total_available_seat, remaining_seat"); $this->db->where('event_id', $eventId); $this->db->where('event_schedule_id', $eventScheduleId); $scheduleDetails = $this->db->get("event_schedule"); if ($scheduleDetails->num_rows() == 0) { return false; } $eventDetails = $scheduleDetails->row(); return [ 'total_available_seat' => $eventDetails->total_available_seat, 'remaining' => $eventDetails->remaining_seat ]; } /** * save the attendance data on the database * * @param array $attendance_data * @return bool * access public member */ public function save_noshow_data($attendance_data) { $col = 'booking_expected'; $is_attended = 1; switch ($attendance_data['type']) { case 'Réservation': case 'Booking': $col = 'booking_expected'; $attendance_type = 0; break; case 'Attente': case 'Waiting': $col = 'waiting_expected'; $attendance_type = 1; break; default: // code... break; } // identify if attended, partially attended or no show if ($attendance_data['no_of_place'] == $attendance_data['attendance']) { $is_attended = 1; } elseif ($attendance_data['attendance'] == 0) { // noshow $is_attended = 0; } else { // partially attended $is_attended = 2; } $data = array(); if (!isset( $attendance_data['event_id'], $attendance_data['event_schedule_id'], $attendance_data['user_id'] )) { return false; } if ($this->noshowDataExists($attendance_data, $col)) { $data = array( $attendance_data['attendance'], $attendance_data['event_id'], $attendance_data['event_schedule_id'], $attendance_data['user_id'], $attendance_data['no_of_place'], ); $query = "UPDATE event_attendance_noshow SET attendance = ? WHERE event_id = ? AND event_schedule_id = ? AND user_id = ? AND $col = ?"; $data2 = array( 'n/a', $is_attended, $attendance_data['registration_id'] ); $query2 = "UPDATE event_attendance SET note = ?, is_attended = ? WHERE registration_id = ?"; } else { $data = array( $attendance_data['event_id'], $attendance_data['event_schedule_id'], $attendance_data['user_id'], $attendance_data['no_of_place'], $attendance_data['attendance'], ); $query = "INSERT INTO event_attendance_noshow(event_id, event_schedule_id, user_id, $col, attendance) VALUES( ?, ?, ?, ?, ? )"; // insert into event attendance $data2 = array( $attendance_data['registration_id'], $attendance_type, 'n/a', $is_attended, 2, $_SESSION["logged_in"]["user_id"] ); $query2 = "INSERT INTO event_attendance(registration_id, attendance_type, note, is_attended, added_via, author) VALUES( ?, ?, ?, ?, ?, ? )"; } $successful = $this->db->query($query, $data); $successful = $this->db->query($query2, $data2); return true; } /** * check for duplicates in noshow data * * @param array $attendance_data * @return bool * @access public */ public function noshowDataExists($attendance_data, $col) { $this->db->select("event_id"); $this->db->where('event_id', $attendance_data['event_id']); $this->db->where('event_schedule_id', $attendance_data['event_schedule_id']); $this->db->where('user_id', $attendance_data['user_id']); $result = $this->db->get("event_attendance_noshow"); if ($result->num_rows() > 0) { return true; } return false; } /** * save the walkin data on the database * * @param array $walk_in_data * @return bool * @access public */ public function save_walk_in($walk_in_data) { // $gender = ($walk_in_data['civility'] == "Madame"? 'f': 'm'); $gender = $walk_in_data['civility']; $data = array(); if ($this->walkInDataExists($walk_in_data)) { $data = array( $walk_in_data['attendance'], $walk_in_data['event_id'], $walk_in_data['event_schedule_id'], $gender, $walk_in_data['first_name'], $walk_in_data['last_name'], $walk_in_data['email_address'] ); $query = "UPDATE event_attendance_walk_in SET attendance = ? WHERE event_id = ? AND event_schedule_id = ? AND gender = ? AND first_name = ? AND last_name = ? AND email_address = ?"; // save to event_attendance_noshow $data1 = array( $walk_in_data['attendance'], $walk_in_data['event_id'], $walk_in_data['event_schedule_id'], $walk_in_data['note'] ); $query1 = "UPDATE event_attendance_noshow SET attendance = ?, note = ? WHERE event_id = ? AND event_schedule_id = ?"; } else { $data = array( $walk_in_data['event_id'], $walk_in_data['event_schedule_id'], $gender, $walk_in_data['first_name'], $walk_in_data['last_name'], $walk_in_data['email_address'], $walk_in_data['note'], $walk_in_data['attendance'], ); $query = "INSERT INTO event_attendance_walk_in( event_id, event_schedule_id, gender, first_name, last_name, email_address, note, attendance ) VALUES( ?, ?, ?, ?, ?, ?, ?, ? )"; $data1 = array( $walk_in_data['event_id'], $walk_in_data['event_schedule_id'], $walk_in_data['attendance'], ); $query1 = "INSERT INTO event_attendance_noshow( event_id, event_schedule_id, attendance ) VALUES( ?, ?, ? )"; // insert into event attendance // $data2 = array( // $attendance_data['registration_id'], // $attendance_type, // 'n/a', // $is_attended, // 2, // $_SESSION["logged_in"]["user_id"] // ); // $query2 = "INSERT INTO event_attendance(registration_id, attendance_type, note, is_attended, added_via, author) VALUES( // ?, ?, ?, ?, ?, ? // )"; } return $this->db->query($query, $data) && $this->db->query($query1, $data1); } /** * check for duplicates in walkin data * * @param array $walk_in_data * @return bool * @access public */ public function walkInDataExists($walk_in_data) { // $gender = ($walk_in_data['civility'] == "Madame"? 'f': 'm'); $gender = $walk_in_data['civility']; $data = array( $walk_in_data['event_id'], $walk_in_data['event_schedule_id'], $gender, $walk_in_data['first_name'], $walk_in_data['last_name'], $walk_in_data['email_address'], ); $this->db->select("*"); $this->db->where('event_id', $walk_in_data['event_id']); $this->db->where('event_schedule_id', $walk_in_data['event_schedule_id']); // $this->db->where('gender', $walk_in_data['gender']); $this->db->where('first_name', $walk_in_data['first_name']); $this->db->where('last_name', $walk_in_data['last_name']); $this->db->where('email_address', $walk_in_data['email_address']); $result = $this->db->get("event_attendance_walk_in"); if ($result->num_rows() > 0) { return true; } return false; } /** * total_available_seat, remaining_seat in Event_schedule table * * @param integer $eventId * @param integer $eventScheduleId * @return void * access public member */ public function getSeatInfo(int $eventScheduleId, int $event_id = 0) { $query = "SELECT (CASE WHEN e.seat_feature = 2 THEN e.total_combined_seat ELSE es.total_available_seat END) offertes_total, (CASE WHEN e.seat_feature = 2 THEN ( e.total_combined_seat -( (SELECT SUM(attendance) FROM event_attendance_noshow WHERE event_id = $event_id AND user_id IS NOT NULL) + (CASE WHEN (SELECT SUM(attendance) FROM event_attendance_walk_in WHERE event_id = $event_id AND attendance > 0) IS NOT NULL THEN (SELECT SUM(attendance) FROM event_attendance_walk_in WHERE event_id = $event_id AND attendance > 0) ELSE 0 END ) ) ) ELSE ( total_available_seat-( (SELECT SUM(attendance) FROM event_attendance_noshow WHERE event_schedule_id = $eventScheduleId AND user_id IS NOT NULL) + (CASE WHEN (SELECT SUM(attendance) FROM event_attendance_walk_in WHERE event_schedule_id = $eventScheduleId AND attendance > 0) IS NOT NULL THEN (SELECT SUM(attendance) FROM event_attendance_walk_in WHERE event_schedule_id = $eventScheduleId AND attendance > 0) ELSE 0 END ) ) ) END) restantes_total, ( SELECT COUNT(id) FROM event_attendance_noshow WHERE event_schedule_id = $eventScheduleId AND attendance > 0 AND waiting_expected IS NULL AND user_id IS NOT NULL ) abonnes_presents, ( SELECT SUM(attendance-1) FROM event_attendance_noshow WHERE event_schedule_id = $eventScheduleId AND attendance > 1 AND waiting_expected IS NULL AND user_id IS NOT NULL ) invites_presents, ( SELECT COUNT(id) FROM event_attendance_noshow WHERE event_schedule_id = $eventScheduleId AND attendance = 0 AND booking_expected IS NOT NULL AND user_id IS NOT NULL ) complet_nshow_total, ( SELECT COUNT(id) FROM event_attendance_noshow WHERE event_schedule_id = $eventScheduleId AND (attendance < booking_expected AND attendance != 0) AND user_id IS NOT NULL ) partiel_nshow_total FROM event_schedule es INNER JOIN event e USING(event_id) WHERE event_schedule_id = ?"; // $this->db->select("total_available_seat offertes_total, // ( // total_available_seat-( // (SELECT SUM(attendance) // FROM event_attendance_noshow // WHERE event_schedule_id = $eventScheduleId AND // user_id IS NOT NULL) // + // (CASE // WHEN (SELECT SUM(attendance) // FROM event_attendance_walk_in // WHERE event_schedule_id = $eventScheduleId AND attendance > 0) IS NOT NULL THEN (SELECT SUM(attendance) // FROM event_attendance_walk_in // WHERE event_schedule_id = $eventScheduleId AND attendance > 0) // ELSE 0 // END // ) // ) // ) restantes_total, // ( // SELECT COUNT(id) // FROM event_attendance_noshow // WHERE event_schedule_id = $eventScheduleId AND attendance > 0 // AND waiting_expected IS NULL AND // user_id IS NOT NULL // ) abonnes_presents, // ( // SELECT SUM(attendance-1) // FROM event_attendance_noshow // WHERE event_schedule_id = $eventScheduleId AND attendance > 1 // AND waiting_expected IS NULL AND // user_id IS NOT NULL // ) invites_presents, // // ( // SELECT COUNT(id) // FROM event_attendance_noshow // WHERE event_schedule_id = $eventScheduleId AND attendance = 0 AND booking_expected IS NOT NULL AND // user_id IS NOT NULL // ) complet_nshow_total, // ( // SELECT COUNT(id) // FROM event_attendance_noshow // WHERE event_schedule_id = $eventScheduleId AND // (attendance < booking_expected AND attendance != 0) AND // user_id IS NOT NULL // ) partiel_nshow_total, // // "); // $this->db->where('event_schedule_id', $eventScheduleId); // $scheduleDetails = $this->db->get("event_schedule es"); $scheduleDetails = $this->db->query($query, array($eventScheduleId)); if ($scheduleDetails->num_rows() == 0) { return false; } return $scheduleDetails->result_array()[0]; } /** * DB query to check if email exists * * @param string $table = table name * @param string $field = field name * @param string $search = email address * @return string * access public member */ public function checkEmailsExistInDb(string $table, string $field, string $search) :? string { $this->db->select($field); $this->db->from($table); $this->db->where($field, $search); $query = $this->db->get(); if ($query->num_rows() == 0) { return null; } return $query->row()->email_address; } /** * total_available_seat, remaining_seat in Event_schedule table * * @param integer $eventId * @param integer $eventScheduleId * @return void * access public member */ public function getNoshowInfo(int $eventScheduleId) { $query = "SELECT ean.event_id, ean.event_schedule_id, evsched.no_show_stat, SUM(booking_expected) total_waiting, SUM(booking_expected) total_bookings, SUM(attendance) total_attendance, SUM(booking_expected-attendance) total_noshow FROM event_attendance_noshow ean INNER JOIN event_schedule evsched USING (event_schedule_id) WHERE event_schedule_id = ? GROUP BY event_schedule_id"; $scheduleDetails = $this->db->query($query, $eventScheduleId); if ($scheduleDetails->num_rows() == 0) { return false; } return $scheduleDetails->result_array()[0]; } /** * total_available_seat, remaining_seat in Event_schedule table * * @param integer noshow_status * @param integer $eventScheduleId * @return void * access public member */ public function toggleNoshowStatus(int $status, int $event_schedule_id) { $this->db->where('event_schedule_id', $event_schedule_id); $toggle_noshow_stat = $this->db->update("event_schedule", array( 'no_show_stat' => $status )); if ($toggle_noshow_stat) { return true; } return false; } /** * gets the current noshow_status * * @param integer $eventScheduleId * @return void * access public member */ public function getNoshowStatus(int $event_schedule_id) { $this->db->select('no_show_stat'); $this->db->where('event_schedule_id', $event_schedule_id); $result = $this->db->get('event_schedule'); if ($result->num_rows() > 0) { return $result->row_array(); } else { array( "no_show_stat" => 0 ); } } }