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.
149 lines
5.9 KiB
149 lines
5.9 KiB
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
class Event_wait_list_deregistration_model extends CI_Model {
|
|
|
|
public function __construct() {
|
|
parent::__construct();
|
|
$this->load->model("user_activity_log_model");
|
|
}
|
|
|
|
public function deregister_waitlist($cancellation, $update_status = true)
|
|
{
|
|
$deregisteredWLSubcriber = false;
|
|
|
|
// Get number of reserved seats
|
|
$reserved_seats = $this->db->select('wait_list_id, number_of_places')
|
|
->from('event_wait_list')
|
|
->where('event_id', $cancellation['event_id'])
|
|
->where('wait_list_subscriber', $cancellation['user_id'])
|
|
->where('status', 1)
|
|
->get()
|
|
->row();
|
|
|
|
$deregStatus = 1;
|
|
if($reserved_seats->number_of_places == $cancellation['seats_cancelled']){
|
|
$deregStatus = 0;
|
|
}
|
|
|
|
// Change subscriber status
|
|
$this->db->query("
|
|
UPDATE event_wait_list
|
|
SET number_of_places = (CASE
|
|
WHEN (number_of_places - ?) <= 0 THEN 0
|
|
ELSE (number_of_places- ?)
|
|
END),
|
|
status = ?
|
|
WHERE event_schedule_id =?
|
|
AND wait_list_subscriber = ?
|
|
AND status =1",
|
|
array($cancellation['seats_cancelled'], $cancellation['seats_cancelled'], $deregStatus, $cancellation['event_schedule_id'], $cancellation['user_id']));
|
|
|
|
$this->db->insert('event_wait_list_deregistration',
|
|
array(
|
|
'wait_list_id' => $reserved_seats->wait_list_id,
|
|
'event_schedule_id' => $cancellation['event_schedule_id'],
|
|
'wait_list_subscriber' => $cancellation['user_id'],
|
|
// 'seats_reserve' => $cancellation['seats_cancelled'],
|
|
'seats_reserve' => $reserved_seats->number_of_places,
|
|
'number_of_place' => $cancellation['seats_cancelled'],
|
|
'user_agent' => $cancellation['user_agent']
|
|
)
|
|
);
|
|
|
|
//get the deregistration id
|
|
$deregisteredWLSubcriber = $this->db->insert_id();
|
|
|
|
// Cancel Guests
|
|
// $this->db->where('inviter_id', $cancellation['user_id']);
|
|
// $this->db->where('event_schedule_id', $cancellation['event_schedule_id']);
|
|
// $this->db->update('event_subscriber_guest', array('status' => 0));
|
|
|
|
if ($update_status) {
|
|
// Free reserved seats from taken seats
|
|
$freed_seats = 'quota_waiting_list_seat+'.$cancellation['seats_cancelled'];
|
|
|
|
$this->db->set('quota_waiting_list_seat', $freed_seats, FALSE);
|
|
$this->db->where('event_schedule_id', $cancellation['event_schedule_id']);
|
|
$this->db->update('event_schedule');
|
|
|
|
// Update event_status
|
|
$check_seats = $this->db->select('quota_waiting_list_seat')
|
|
->from('event_schedule')
|
|
->where('event_schedule_id', $cancellation['event_schedule_id'])
|
|
->limit(1)
|
|
->get()
|
|
->row();
|
|
|
|
$current_remaining_seats = $this->get_remaining_seats($cancellation['event_id'], $cancellation['event_schedule_id']);
|
|
|
|
if($current_remaining_seats > 0){
|
|
|
|
if(!empty($cancellation['seat_feature']) && $cancellation['seat_feature']==1){
|
|
//single date
|
|
$this->db->where('event_schedule_id', $cancellation['event_schedule_id']);
|
|
$this->db->where('auto_event_status', 1);
|
|
} else if(!empty($cancellation['seat_feature']) && $cancellation['seat_feature']==2){
|
|
|
|
//combined date
|
|
$this->db->where('event_id', $cancellation['event_id']);
|
|
$this->db->where('auto_event_status', 1);
|
|
}
|
|
$this->db->update('event_schedule', array('event_status' => "AVAILABLE", 'back_office_status' => 2));
|
|
|
|
$event_schedule_id = $cancellation['event_schedule_id'];
|
|
$log_desc = "User {$cancellation['user_id']} cancelled subscription. The event schedule is reopened for normal registration. Event status changed from Full to Available.";
|
|
$act_log = $this->user_activity_log_model->add_activity_log(array(
|
|
"description" => $log_desc." - event_schedule_id : ".$this->db->escape($event_schedule_id),
|
|
"user_id" => $_SESSION["logged_in"]["user_id"],
|
|
"action" => "EDIT",
|
|
"table_origin" => "event_schedule",
|
|
"reference_id" => $event_schedule_id
|
|
));
|
|
} else if($check_seats->quota_waiting_list_seat > 0){
|
|
|
|
$this->db->where('event_schedule_id', $cancellation['event_schedule_id']);
|
|
$this->db->update('event_schedule', array('event_status' => "FULL", 'back_office_status' => 2));
|
|
|
|
$event_schedule_id = $cancellation['event_schedule_id'];
|
|
$log_desc = "User {$cancellation['user_id']} cancelled subscription. The event schedule is reopened for waitlist registration. Backoffice status changed from locked to open.";
|
|
$act_log = $this->user_activity_log_model->add_activity_log(array(
|
|
"description" => $log_desc." - event_schedule_id : ".$this->db->escape($event_schedule_id),
|
|
"user_id" => $_SESSION["logged_in"]["user_id"],
|
|
"action" => "EDIT",
|
|
"table_origin" => "event_schedule",
|
|
"reference_id" => $event_schedule_id
|
|
));
|
|
}
|
|
}
|
|
|
|
// Update event concurrent process
|
|
$this->db->set('process_status', 0);
|
|
$this->db->where('login_id', $cancellation['login_id']);
|
|
$this->db->where('process_type', $cancellation['process_type']);
|
|
$this->db->update('event_concurrent_process');
|
|
|
|
return $deregisteredWLSubcriber;
|
|
}
|
|
|
|
private function get_remaining_seats($event_id, $event_schedule_id){
|
|
|
|
$query = $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 e.status = 1
|
|
and es.event_id = ?
|
|
and es.event_schedule_id = ?
|
|
limit 1
|
|
", array($event_id, $event_schedule_id));
|
|
$row = $query->row();
|
|
|
|
if($row){
|
|
return $row->remaining_seat;
|
|
}return 0;
|
|
}
|
|
|
|
}
|
|
|