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.
 
 
 
 
 
 

193 lines
7.9 KiB

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Event_deregistration_model extends CI_Model {
public function __construct() {
parent::__construct();
$this->load->model("user_activity_log_model");
}
public function deregister($cancellation, $update_status = true)
{
$deregisteredSubcriber = false;
// Get number of guest
$subscriber_details = $this->db->select('registration_id, number_of_guest')
->from('event_registration')
->where('event_schedule_id', $cancellation['event_schedule_id'])
->where('subscriber', $cancellation['user_id'])
->where('status', 1)
->get()
->row();
$deregStatus = 1;
if(($subscriber_details->number_of_guest+1) == $cancellation['seats_cancelled']){
$deregStatus = 0;
}
// Change registered subscriber status
$this->db->query("
UPDATE event_registration
SET number_of_guest = (CASE
WHEN (number_of_guest - ?) <= 0 THEN 0
ELSE (number_of_guest- ?)
END),
status = ?
WHERE event_schedule_id =?
AND subscriber = ?
AND status =1",
array($cancellation['seats_cancelled'], $cancellation['seats_cancelled'], $deregStatus, $cancellation['event_schedule_id'], $cancellation['user_id']));
// Insert deregistration record - Client
$this->db->insert('event_deregistration',
array(
'registration_id' => $subscriber_details->registration_id,
'event_schedule_id' => $cancellation['event_schedule_id'],
'subscriber' => $cancellation['user_id'],
'seats_reserve' => $subscriber_details->number_of_guest+1,
'number_of_place' => $cancellation['seats_cancelled'],
'user_agent' => $cancellation['user_agent']
)
);
//get the deregistration id
$deregisteredSubcriber = $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));
//ibalik so seats
if($cancellation['seat_feature'] == SEAT_FEATURE['per_date']){
$this->revert_seats_to_event_table($cancellation, $update_status);
} else if($cancellation['seat_feature'] == SEAT_FEATURE['combined']){
$this->revert_seats_to_event_schedule_table($cancellation, $update_status);
}
// 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 $deregisteredSubcriber;
}
private function revert_seats_to_event_table($cancellation, $update_status = true){
// Free seats taken up by canceled clients
$reserved_seats = 'remaining_seat+'.$cancellation['seats_cancelled'];
$this->db->set('remaining_seat', $reserved_seats, FALSE);
$this->db->where('event_schedule_id', $cancellation['event_schedule_id']);
$this->db->update('event_schedule');
if ($update_status) {
// Update event_status
$check_seats = $this->db->select('remaining_seat, event_status')
->from('event_schedule')
->where('event_schedule_id', $cancellation['event_schedule_id'])
->limit(1)
->get()
->row();
if($check_seats->remaining_seat > 0 /*&& $check_seats->event_status != 'FULL'*/){
if($check_seats->event_status == 'FULL') {
$this->load->model('event_wait_list_model');
/**
* If the seat feature is combined, make sure to update the affected records in the WL
* reset the moderation of the subscribers in the WL so that once the event
* becomes available again the subscriber who are already
* in the WL can now reserve in the event regardless of the moderation
*/
$this->event_wait_list_model->resetModeratedReservationsFronWaitingListByEventSchedule($cancellation['event_schedule_id']);
}
$this->db->where('event_schedule_id', $cancellation['event_schedule_id']);
$this->db->where("auto_event_status !=", 0);
$this->db->update('event_schedule', array('event_status' => "AVAILABLE", 'back_office_status' => BO_STAT['ouv']));
$event_schedule_id = $cancellation['event_schedule_id'];
$log_desc = "User {$cancellation['user_id']} cancelled registration. Event is reopened for 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
));
}
}
}
private function revert_seats_to_event_schedule_table($cancellation, $update_status = true){
//get free remaining seat
$pastRecord = $this->countCombinedRemainingSeat($cancellation['event_id']);
// Free seats taken up by canceled clients
$reserved_seats = 'remaining_combined_seat+'.$cancellation['seats_cancelled'];
$this->db->set('remaining_combined_seat', $reserved_seats, FALSE);
$this->db->where('event_id', $cancellation['event_id']);
$this->db->update('event');
if ($update_status) {
// Update event_status
$check_seats = $this->db->select('remaining_combined_seat')
->from('event')
->where('event_id', $cancellation['event_id'])
->limit(1)
->get()
->row();
if($check_seats->remaining_combined_seat > 0){
if($pastRecord->remaining_combined_seat <=0) {
$this->load->model('event_wait_list_model');
/**
* If the seat feature is combined, make sure to update the affected records in the WL
* reset the moderation of the subscribers in the WL so that once the event
* becomes available again the subscriber who are already
* in the WL can now reserve in the event regardless of the moderation
*/
$this->event_wait_list_model->resetModeratedReservationsFronWaitingListByEvent($cancellation['event_id']);
}
$this->db->where('event_id', $cancellation['event_id']);
$this->db->where("event_status = 'FULL'");
$this->db->where_in('back_office_status', [
BO_STAT['ouv'],
BO_STAT['ver']
]);
$this->db->where("auto_event_status !=", 0);
$this->db->update('event_schedule', array('event_status' => "AVAILABLE", 'back_office_status' => BO_STAT['ouv']));
$event_schedule_id = $cancellation['event_schedule_id'];
$log_desc = "User {$cancellation['user_id']} cancelled registration. Event is reopened for 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
));
}
}
}
/**
* Get the remaining seat for combined date feature
* @method countCombinedRemainingSeat
* @param int $eventId
* @return sdtClass
*/
private function countCombinedRemainingSeat(int $eventId) :stdClass {
// Update event_status
return $this->db->select('remaining_combined_seat')
->from('event')
->where('event_id', $eventId)
->limit(1)
->get()
->row();
}
}