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.
249 lines
7.2 KiB
249 lines
7.2 KiB
<?php
|
|
/*
|
|
* @Author: Jino Lacson
|
|
* @Date: 2018-11-06 09:38:35
|
|
* @Last Modified by: jlacson@wylog.com
|
|
* @Last Modified time: 2018-11-06 10:57:45
|
|
*/
|
|
|
|
if (! defined('BASEPATH')) {
|
|
exit('No direct script access allowed');
|
|
}
|
|
|
|
use app\core\utils\Response;
|
|
|
|
class Noshow_attendance_statistics extends MY_Controller
|
|
{
|
|
|
|
/**
|
|
* Holds datasets
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $datasets = [];
|
|
|
|
/**
|
|
* Attendus range F2
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $AttendusF2 = [];
|
|
|
|
/**
|
|
* Attendus range F4
|
|
*
|
|
* @var integer
|
|
*/
|
|
protected $AttendusF4 = 0;
|
|
|
|
/**
|
|
* Waiting list range = G2
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $WaitingListG2 = [];
|
|
|
|
/**
|
|
* Waiting list range = G4
|
|
*
|
|
* @var integer
|
|
*/
|
|
protected $WaitingListG4 = 0;
|
|
|
|
/**
|
|
* Grand total place of waiting,booking and extra peoples
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $countTotalPlace = [];
|
|
|
|
/**
|
|
* Grand total of invitees
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $countInvitees = [];
|
|
|
|
/**
|
|
* Initialize no of places
|
|
*
|
|
* @var integer
|
|
*/
|
|
protected $totalPlace = 0;
|
|
|
|
/**
|
|
* Initialize total present
|
|
*
|
|
* @var integer
|
|
*/
|
|
protected $totalPresent = 0;
|
|
|
|
/**
|
|
* Partial no show
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $noShowPartial = [];
|
|
|
|
/**
|
|
* Holds number of show
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $noshow = [];
|
|
|
|
public function __construct()
|
|
{
|
|
$this->my_parent_controller();
|
|
Response::handleSessionTimeout("bo");
|
|
|
|
//load nshow_model
|
|
$this->load->model('nshow_model');
|
|
}
|
|
|
|
/**
|
|
* Validate and get merged list of Booking,Waiting and Extra people
|
|
* else if no event schedule ID present show 404 page
|
|
*
|
|
* @param integer $eventId
|
|
* @param integer $eventScheduleID
|
|
* @return void
|
|
* access private member
|
|
*/
|
|
private function getAttendanceData(int $eventId, int $eventScheduleId)
|
|
{
|
|
//Display 404 page if eventschedule ID is not present
|
|
if (!is_numeric($eventId) || is_null($eventId) && !is_numeric($eventScheduleId) || is_null($eventScheduleId)) {
|
|
show_404();
|
|
}
|
|
|
|
//return combined records
|
|
return $this->getAttendanceQuery($eventId, $eventScheduleId);
|
|
}
|
|
|
|
/**
|
|
* Get data booking, waiting and Extra peoples
|
|
*
|
|
* @param integer $eventId
|
|
* @param integer $eventScheduleID
|
|
* @return array
|
|
* access private member
|
|
*/
|
|
private function getAttendanceQuery($eventId, $eventScheduleId) : array
|
|
{
|
|
//Booking
|
|
$confirmed = $this->nshow_model->bookList($eventScheduleId);
|
|
|
|
//Waiting
|
|
$waitlist = $this->nshow_model->waitList($eventScheduleId);
|
|
|
|
//Extra
|
|
$extra = $this->nshow_model->extraPeople($eventScheduleId);
|
|
|
|
//Combine lists
|
|
return array_merge($confirmed, $waitlist, $extra);
|
|
}
|
|
|
|
/**
|
|
* Check if Waiting, Booking or Extra people
|
|
*
|
|
* @param string $type = booking,waiting,extra
|
|
* @param string $match = match if booking,waiting,extra
|
|
* @return boolean
|
|
* access private member
|
|
*/
|
|
private function TypeIs(string $type, string $match) : bool
|
|
{
|
|
return $type == trim(strtolower($match));
|
|
}
|
|
|
|
/**
|
|
* Compute partial no show
|
|
*
|
|
* @param integer $totalPresent
|
|
* @param integer $totalPlace
|
|
* @param string $indicator
|
|
* @return array
|
|
* access private member
|
|
*/
|
|
private function computePartialNoshow(int $totalPresent,int $totalPlace, string $indicator) : array
|
|
{
|
|
//holds total partial no show
|
|
$noShowPartial = [];
|
|
|
|
if ($totalPresent > 0) {
|
|
if($totalPresent < $totalPlace){
|
|
array_push($noShowPartial,$indicator);
|
|
}
|
|
}
|
|
|
|
//return noshow computed partial
|
|
return $noShowPartial;
|
|
}
|
|
|
|
/**
|
|
* Display list of statistics by EventId and Event schedule ID
|
|
*
|
|
* @param integer $eventId
|
|
* @param integer $eventScheduleId
|
|
* @return array
|
|
* access public member
|
|
*/
|
|
public function loadStatistics(int $eventId, int $eventScheduleId) : array
|
|
{
|
|
//Iterate data booking list, waiting list and extra peoples
|
|
foreach ($this->getAttendanceData($eventId, $eventScheduleId) as $key => $datasets)
|
|
{
|
|
//Set no of place as totalPlace
|
|
$this->totalPlace = (int)$datasets->no_of_place;
|
|
|
|
//Set no show type as totalPresent
|
|
$this->totalPresent = (int)$datasets->no_show_type;
|
|
|
|
//Booking range cells
|
|
if ($this->TypeIs('booking', $datasets->type)) {
|
|
$this->AttendusF2[] = $this->totalPlace;
|
|
$this->AttendusF4 += $this->totalPlace;
|
|
}
|
|
|
|
//Waiting range cells
|
|
if ($this->TypeIs('waiting', $datasets->type)) {
|
|
$this->WaitingListG2[] = $this->totalPlace;
|
|
$this->WaitingListG4 += $this->totalPlace;
|
|
}
|
|
|
|
//Count total place
|
|
$this->countTotalPlace[] = $this->totalPresent ?? 0;
|
|
|
|
//Compute invitees
|
|
$this->countInvitees[] = ($this->totalPresent - 1) == -1 ? '' : ($this->totalPresent - 1) ;
|
|
|
|
//computes partial no show
|
|
$this->noShowPartial[] = $this->computePartialNoshow($this->totalPresent,$this->totalPlace,1);
|
|
|
|
//computes total no show
|
|
$this->noshow[] = $this->totalPresent == 0 ? 1 : '';
|
|
|
|
}
|
|
|
|
//Display computed ranges
|
|
output_to_json($this,[
|
|
'$TotalAvailablePlace' => $this->nshow_model->getTotalAvailableAndRemainingPlaces($eventId, $eventScheduleId)['total_available_seat'],
|
|
'$TotalRemainingPlace' => ($this->nshow_model->getTotalAvailableAndRemainingPlaces($eventId, $eventScheduleId)['total_available_seat'] - (count(array_filter($this->countTotalPlace)) + array_sum($this->countInvitees))),
|
|
'$AttendusF2' => count($this->AttendusF2),
|
|
'$AttendusF3' => ($this->AttendusF4 - count($this->AttendusF2)),
|
|
'$AttendusF4' => $this->AttendusF4,
|
|
'$WaitingListG2' => count($this->WaitingListG2),
|
|
'$WaitingListG3' => ($this->WaitingListG4 - count($this->WaitingListG2)),
|
|
'$WaitingListG4' => $this->WaitingListG4,
|
|
'$PresentsH2' => count(array_filter($this->countTotalPlace)),
|
|
'$PresentsH3' => array_sum($this->countInvitees),
|
|
'$PresentsH4' => (count(array_filter($this->countTotalPlace)) + array_sum($this->countInvitees)),
|
|
'$AbsentsI2' => (count($this->AttendusF2) - count(array_filter($this->countTotalPlace))),
|
|
'$AbsentsI3' => (($this->AttendusF4 - count($this->AttendusF2)) - array_sum($this->countInvitees)),
|
|
'$AbsentsI4' => ((count($this->AttendusF2) - count(array_filter($this->countTotalPlace))) + (($this->AttendusF4 - count($this->AttendusF2)) - array_sum($this->countInvitees))),
|
|
'$NoshowPartial' => count(array_filter($this->noShowPartial)),
|
|
'$Noshow' => count(array_filter($this->noshow))
|
|
]);
|
|
}
|
|
}
|
|
|