Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 12
CRAP
0.00% covered (danger)
0.00%
0 / 359
HostelNotificationService
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 12
5402.00
0.00% covered (danger)
0.00%
0 / 359
 __construct
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 1
 __clone
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 1
 getInstance
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 5
 getHostelRequestLevelByPriority
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 11
 triggerNotificationOnHostelRequestRejected
0.00% covered (danger)
0.00%
0 / 1
132.00
0.00% covered (danger)
0.00%
0 / 48
 triggerNotificationOnHostelRequestRoomAssigned
0.00% covered (danger)
0.00%
0 / 1
132.00
0.00% covered (danger)
0.00%
0 / 48
 triggerNotificationOnHostelRequest
0.00% covered (danger)
0.00%
0 / 1
156.00
0.00% covered (danger)
0.00%
0 / 51
 getHostelRequestNotifyAdminEmails
0.00% covered (danger)
0.00%
0 / 1
20.00
0.00% covered (danger)
0.00%
0 / 23
 getHostelRequestNotifyStaffEmails
0.00% covered (danger)
0.00%
0 / 1
56.00
0.00% covered (danger)
0.00%
0 / 35
 notifyApprover
0.00% covered (danger)
0.00%
0 / 1
156.00
0.00% covered (danger)
0.00%
0 / 91
 getHostelRequestById
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 11
 triggerNotificationOnHostelRequestConfirmed
0.00% covered (danger)
0.00%
0 / 1
72.00
0.00% covered (danger)
0.00%
0 / 34
<?php
namespace com\linways\core\ams\professional\service\notification;
use com\linways\base\constant\UserType;
use com\linways\base\dto\Email;
use com\linways\base\dto\EmailFrom;
use com\linways\base\dto\EmailTo;
use com\linways\base\util\StringUtil;
use com\linways\core\ams\professional\dto\SettingsConstents;
use com\linways\core\ams\professional\service\BaseService;
use com\linways\core\ams\professional\service\CommonService;
use com\linways\core\ams\professional\service\StaffService;
use com\linways\core\ams\professional\service\StudentService;
use com\linways\core\ams\professional\util\MessageUtil;
use com\linways\core\ams\professional\util\CommonUtil;
use com\linways\core\ams\professional\exception\ProfessionalException;
use com\linways\core\ams\professional\dto\hostel\HostelRequest;
use com\linways\core\ams\professional\constant\hostel\HostelRequestStatus;
use com\linways\nucleus\core\service\CollegeService;
class HostelNotificationService extends BaseService
{
    private static $_instance = null;
    // /Condition 2 - Locked down the constructor
    private function __construct()
    {}
    // Prevent any oustide instantiation of this class
    
    // /Condition 3 - Prevent any object or instance of that class to be cloned
    private function __clone()
    {}
    // Prevent any copy of this object
    
    // /Condition 4 - Have a single globally accessible static method
    public static function getInstance()
    {
        if (! is_object(self::$_instance)) // or if( is_null(self::$_instance) ) or if( self::$_instance == null )
            self::$_instance = new self();
        return self::$_instance;
    }
    /**
     * Get Hostel Level by priority
     * @param int $priority
     * @throws ProfessionalException
     * @return object|NULL|\com\linways\base\util\$objectList[]
     */
    public function getHostelRequestLevelByPriority($priority)
    {
        $priority = $this->realEscapeString($priority);
        $hostelLevel = null;
        try {
            $sql = "SELECT id,levelName as name ,levelPriority as priority from hostel_approval_group where levelPriority = $priority";
            
            $hostelLevel = $this->executeQueryForObject($sql);
        } catch (\Exception $e) {
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        
        return $hostelLevel;
    }
/**
 * trigger notification on hostel request rejected
 * @param HostelRequest $hostelRequest
 */
    public function triggerNotificationOnHostelRequestRejected($hostelRequest)
    {
        // check DB configurations
        $amsconfigFilePath = getenv('AMS_CONFIG');
        require $amsconfigFilePath;
        $isApproverEmailNotificationEnabled = true;
        $isRequesterEmailNotificationEnabled = true;
        $userName = null;
        $user = null;
        $student = null;
        $requesterEmail = null;
        
        $hostelRequest = $this->realEscapeObject($hostelRequest);
        
        $hostelNotificationSettings = CommonService::getInstance()->getSettingsByType(SettingsConstents::HOSTEL_NOTIFICATION_TYPE);
        $isApproverEmailNotificationEnabledStrValue = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_APPROVER_ENABLE, $hostelNotificationSettings);
        
        $isApproverEmailNotificationEnabled = $isApproverEmailNotificationEnabledStrValue == '1' ? true : false;
        
        $isRequesterEmailNotificationEnabledStrValue = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_APPROVER_ENABLE, $hostelNotificationSettings);
        
        $isRequesterEmailNotificationEnabled = $isRequesterEmailNotificationEnabledStrValue == '1' ? true : false;
        
        if (! empty($hostelRequest) && ($isApproverEmailNotificationEnabled || $isRequesterEmailNotificationEnabled)) {
            
            switch ($hostelRequest->userType) {
                case UserType::STUDENT:
                    $student = StudentService::getInstance()->getStudentDetailsById($hostelRequest->userId);
                    $hostelRequest->user = $student;
                    // $userName = $user->name;
                    // $requesterEmail = $user->studentEmail;
                    break;
                case UserType::STAFF:
                    // TODO Staff hostel request currenlty not available
                    // $user = StaffService::getInstance()->getStaffDetailsById($hostelRequest);
                    // $userName = $user->staffName;
                    // $requesterEmail = $user->staffEmail;
                    break;
                
                default:
                    break;
            }
            
            if ($isRequesterEmailNotificationEnabled && ! empty($student->studentEmail)) {
                
                $requesterMessage = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_REQUESTER_REQUEST_REJECTED_BODY, $hostelNotificationSettings);
                
                $requesterMessage = StringUtil::replace_tags($requesterMessage, array(
                    "studentName" => $student->name,
                    "userType" => $hostelRequest->userType
                ));
                
                $requesterMessageSubj = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_REQUESTER_REQUEST_REJECTED_SUBJECT, $hostelNotificationSettings);
                
                $emailObj = new Email();
                $emailFrom = new EmailFrom();
                $emailFrom->email = $college_MailFromID;
                $emailFrom->name = $MailFromName;
                
                $emailTo = new EmailTo();
                $emailTo->email = $student->studentEmail;
                $emailTo->name = '';
                
                $emailObj->subject = empty($requesterMessageSubj) ? "Hostel Admission Request Rejected" : $requesterMessageSubj;
                $emailObj->body = $requesterMessage;
                
                $emailObj->from = $emailFrom;
                $emailObj->to = $emailTo;
                
                MessageUtil::sendEmailAsync($emailObj);
            }
            // TO DO Notification to Approvers ..not required now
        }
    }
    /**
     * trigger notification on hostel request Room assigned
     * @param HostelRequest $hostelRequest
     */
    public function triggerNotificationOnHostelRequestRoomAssigned($hostelRequest)
    {
        // check DB configurations
        $amsconfigFilePath = getenv('AMS_CONFIG');
        require $amsconfigFilePath;
        $isApproverEmailNotificationEnabled = true;
        $isRequesterEmailNotificationEnabled = true;
        $userName = null;
        $user = null;
        $student = null;
        $requesterEmail = null;
        
        $hostelRequest = $this->realEscapeObject($hostelRequest);
        
        $hostelNotificationSettings = CommonService::getInstance()->getSettingsByType(SettingsConstents::HOSTEL_NOTIFICATION_TYPE);
        $isApproverEmailNotificationEnabledStrValue = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_APPROVER_ENABLE, $hostelNotificationSettings);
        
        $isApproverEmailNotificationEnabled = $isApproverEmailNotificationEnabledStrValue == '1' ? true : false;
        
        $isRequesterEmailNotificationEnabledStrValue = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_APPROVER_ENABLE, $hostelNotificationSettings);
        
        $isRequesterEmailNotificationEnabled = $isRequesterEmailNotificationEnabledStrValue == '1' ? true : false;
        
        if (! empty($hostelRequest) && ($isApproverEmailNotificationEnabled || $isRequesterEmailNotificationEnabled)) {
            
            switch ($hostelRequest->userType) {
                case UserType::STUDENT:
                    $student = StudentService::getInstance()->getStudentDetailsById($hostelRequest->userId);
                    $hostelRequest->user = $student;
                    // $userName = $user->name;
                    // $requesterEmail = $user->studentEmail;
                    break;
                case UserType::STAFF:
                    // TODO Staff hostel request currenlty not available
                    // $user = StaffService::getInstance()->getStaffDetailsById($hostelRequest);
                    // $userName = $user->staffName;
                    // $requesterEmail = $user->staffEmail;
                    break;
                
                default:
                    break;
            }
            
            if ($isRequesterEmailNotificationEnabled && ! empty($student->studentEmail)) {
                
                $requesterMessage = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_REQUESTER_REQUEST_ADMITTED_BODY, $hostelNotificationSettings);
                
                $requesterMessage = StringUtil::replace_tags($requesterMessage, array(
                    "studentName" => $student->name,
                    "userType" => $hostelRequest->userType
                ));
                
                $requesterMessageSubj = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_REQUESTER_REQUEST_ADMITTED_SUBJECT, $hostelNotificationSettings);
                
                $emailObj = new Email();
                $emailFrom = new EmailFrom();
                $emailFrom->email = $college_MailFromID;
                $emailFrom->name = $MailFromName;
                
                $emailTo = new EmailTo();
                $emailTo->email = $student->studentEmail;
                $emailTo->name = '';
                
                $emailObj->subject = empty($requesterMessageSubj) ? "Hostel Admission Request Approved" : $requesterMessageSubj;
                $emailObj->body = $requesterMessage;
                
                $emailObj->from = $emailFrom;
                $emailObj->to = $emailTo;
                
                MessageUtil::sendEmailAsync($emailObj);
            }
            // TO DO Notification to Approvers ..not required now
        }
    }
    /**
     * trigger notification on hostel request 
     * @param HostelRequest $hostelRequest
     */
    public function triggerNotificationOnHostelRequest($hostelRequest)
    {
        // check DB configurations
        $amsconfigFilePath = getenv('AMS_CONFIG');
        require $amsconfigFilePath;
        $isApproverEmailNotificationEnabled = true;
        $isRequesterEmailNotificationEnabled = true;
        $userName = null;
        $user = null;
        $student = null;
        $requesterEmail = null;
        
        $hostelRequest = $this->realEscapeObject($hostelRequest);
        
        $hostelNotificationSettings = CommonService::getInstance()->getSettingsByType(SettingsConstents::HOSTEL_NOTIFICATION_TYPE);
        $isApproverEmailNotificationEnabledStrValue = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_APPROVER_ENABLE, $hostelNotificationSettings);
        
        $isApproverEmailNotificationEnabled = $isApproverEmailNotificationEnabledStrValue == '1' ? true : false;
        
        $isRequesterEmailNotificationEnabledStrValue = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_APPROVER_ENABLE, $hostelNotificationSettings);
        
        $isRequesterEmailNotificationEnabled = $isRequesterEmailNotificationEnabledStrValue == '1' ? true : false;
        
        if (! empty($hostelRequest) && ($isApproverEmailNotificationEnabled || $isRequesterEmailNotificationEnabled)) {
            
            switch ($hostelRequest->userType) {
                case UserType::STUDENT:
                    $student = StudentService::getInstance()->getStudentDetailsById($hostelRequest->userId);
                    $hostelRequest->user = $student;
                    // $userName = $user->name;
                    // $requesterEmail = $user->studentEmail;
                    break;
                case UserType::STAFF:
                    // TODO Staff hostel request currenlty not available
                    // $user = StaffService::getInstance()->getStaffDetailsById($hostelRequest);
                    // $userName = $user->staffName;
                    // $requesterEmail = $user->staffEmail;
                    break;
                
                default:
                    break;
            }
            
            if ($isRequesterEmailNotificationEnabled && ! empty($student->studentEmail)) {
                
                $requesterMessage = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_REQUESTER_REQUEST_ACK_BODY, $hostelNotificationSettings);
                
                $requesterMessage = StringUtil::replace_tags($requesterMessage, array(
                    "userName" => $student->name,
                    "userType" => $hostelRequest->userType
                ));
                
                $requesterMessageSubj = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_REQUESTER_REQUEST_ACK_SUBJECT, $hostelNotificationSettings);
                
                $emailObj = new Email();
                $emailFrom = new EmailFrom();
                $emailFrom->email = $college_MailFromID;
                $emailFrom->name = $MailFromName;
                
                $emailTo = new EmailTo();
                $emailTo->email = $student->studentEmail;
                $emailTo->name = '';
                
                $emailObj->subject = empty($requesterMessageSubj) ? "Hostel Admission Request" : $requesterMessageSubj;
                $emailObj->body = $requesterMessage;
                
                $emailObj->from = $emailFrom;
                $emailObj->to = $emailTo;
                
                MessageUtil::sendEmailAsync($emailObj);
            }
            
            if ($isApproverEmailNotificationEnabled) {
                $this->notifyApprover($hostelRequest, $hostelNotificationSettings);
            }
        }
    }
/**
 * Get Hostel request notifying admin emails
 * @throws ProfessionalException
 * @return array[]|\stdClass[] - return hostel privillege assigned admin emails
 */
    private function getHostelRequestNotifyAdminEmails()
    {
        $emailObj = null;
        $emailObjList = [];
        $sql = null;
        try {
            $sql = "SELECT aa.adminId,aa.adminName,aa.adminEmail  from adminaccount aa
                    inner join admin_privileges ap on aa.admintypeID = ap.admintypeID
                    where ap.menuItems = 'hostel' and aa.isSupportAdmin=0
                    and aa.adminEmail is not null";
            
            $adminDetails = $this->executeQueryForList($sql);
            
            foreach ($adminDetails as $admin) {
                if (! empty($admin->adminEmail)) {
                    $emailObj = new \stdClass();
                    $emailObj->email = $admin->adminEmail;
                    $emailObj->name = $admin->adminName;
                    $emailObjList[] = $emailObj;
                }
            }
        } catch (\Exception $e) {
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $emailObjList;
    }
/**
 * Get Hostel request notifiying staff emails which is configured in the levels
 * @param unknown $hostelRequest
 * @param unknown $levelPriority
 * @throws ProfessionalException
 * @return NULL[]|\stdClass[]
 */
    private function getHostelRequestNotifyStaffEmails($hostelRequest, $levelPriority)
    {
        $emailObj = null;
        $emailObjList = [];
        $sql = null;
        switch ($hostelRequest->userType) {
            case UserType::STUDENT:
                
                $sql = "SELECT sa.staffID,sa.staffName,sa.staffEmail from hostel_user_group hug 
inner join staffaccounts sa on sa.staffId = hug.staffaccount_id
inner join hostel_approval_group hag on hug.hostel_approval_group_id = hag.id
where (hug.department_id = 0 || hug.department_id = (select deptID from studentaccount where studentId = $hostelRequest->userId))
and (hug.batches_id = 0 || hug.batches_id = (select batchId from studentaccount where studentId = $hostelRequest->userId)) 
and hag.levelPriority = $levelPriority  and sa.staffEmail is not null";
                
                break;
            case UserType::STAFF:
                // TO DO currenlty system not supporting hostel request for staff
                break;
            
            default:
                break;
        }
        // As first taking all level settings used staff email ids
        if (! empty($sql)) {
            try {
                $staffDetails = $this->executeQueryForList($sql);
                
                foreach ($staffDetails as $staff) {
                    if (! empty($staff->staffEmail)) {
                        $emailObj = new \stdClass();
                        $emailObj->email = $staff->staffEmail;
                        $emailObj->name = $staff->staffName;
                        $emailObjList[] = $emailObj;
                    }
                }
            } catch (\Exception $e) {
                throw new ProfessionalException($e->getCode(), $e->getMessage());
            }
        }
        
        return $emailObjList;
    }
    /**
     * Notifying approving staffs/admins
     * @param HostelRequest $hostelRequest
     * @param array $hostelNotificationSettings
     */
    private function notifyApprover($hostelRequest, $hostelNotificationSettings)
    {
        $approverStaffEmails = null;
        $adminEmails = null;
        $isApproverEmailNotificationEnabledStrValue = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_APPROVER_ENABLE, $hostelNotificationSettings);
        
        $isApproverEmailNotificationEnabled = $isApproverEmailNotificationEnabledStrValue == '1' ? true : false;
        
        if ($isApproverEmailNotificationEnabled) {
            
            // check DB configurations
            $amsconfigFilePath = getenv('AMS_CONFIG');
            require $amsconfigFilePath;
            
            $currentLevel = ! empty($hostelRequest->currentLevel) ? $this->getHostelRequestLevelByPriority($hostelRequest->currentLevel->priority) : null;
            
            $nextLevel = ! empty($hostelRequest->nextLevel) ? $this->getHostelRequestLevelByPriority($hostelRequest->nextLevel->priority) : null;
            
            if(!empty($nextLevel) && !empty($nextLevel->priority))
            {
                // Take next level approver staff list in TO List
                $approverStaffEmails = $this->getHostelRequestNotifyStaffEmails($hostelRequest, $nextLevel->priority);
            }
           
            
            // Take Hostel admin privillege admins to notify in cc
            $adminEmails = $this->getHostelRequestNotifyAdminEmails();
            
            if (! empty($approverStaffEmails) || ! empty($adminEmails)) {
                
                $student = $hostelRequest->user;
                $hostName = CollegeService::getInstance()->getHostNameByCollegeCode($COLLEGE_CODE);
                
                if (! empty($nextLevel)) {
                    $approverMessage = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_APPROVER_ACK_BODY, $hostelNotificationSettings);
                    $priority = ! empty($nextLevel) ? $nextLevel->priority : null;
                    $currentLevel = ! empty($nextLevel) ? $nextLevel->name : null;
                    $viewLink = "https://" . $hostName . "/staff/staff.php?menu=hosteltransport&action=hostel&levelPriority=$priority";
                    $approverMessage = StringUtil::replace_tags($approverMessage, array(
                        "studentName" => $student->name,
                        "admissionNo" => $student->admissionNo,
                        "departmentName" => $student->deptName,
                        "batchName" => $student->batchName,
                        "hostelStartDate" => $hostelRequest->startDate,
                        "hostelEndDate" => $hostelRequest->endDate,
                        "currentLevel" => $currentLevel,
                        "currentLevelStatus" => HostelRequestStatus::OPEN, // Current levele status setting as OPEN since we are not sending any notificatin .
                                                                           // If we need to implement then we need to set this status accordingly
                        "viewLink" => $viewLink
                    ));
                    
                    $approverMessageSubj = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_APPROVER_ACK_SUBJECT, $hostelNotificationSettings);
                    
                    $approverMessageSubj = StringUtil::replace_tags($approverMessageSubj, array(
                        "studentName" => $student->name,
                        "admissionNo" => $student->admissionNo,
                        "departmentName" => $student->deptName,
                        "batchName" => $student->batchName,
                        "hostelStartDate" => $hostelRequest->startDate,
                        "hostelEndDate" => $hostelRequest->endDate,
                        "currentLevel" => $currentLevel,
                        "currentLevelStatus" => HostelRequestStatus::OPEN, // Current levele status setting as OPEN since we are not sending any notificatin .
                                                                           // If we need to implement then we need to set this status accordingly
                        "viewLink" => $viewLink
                    ));
                    
                    $emailObj = new Email();
                    $emailFrom = new EmailFrom();
                    $emailFrom->email = $college_MailFromID;
                    $emailFrom->name = $MailFromName;
                    
                    $emailObj->subject = $approverMessageSubj;
                    $emailObj->body = $approverMessage;
                    
                    $emailObj->from = $emailFrom;
                    $emailObj->toList = $approverStaffEmails;
                    $emailObj->ccList = $adminEmails;
                    
                    MessageUtil::sendEmailAsync($emailObj);
                } else {
                    
                    $adminApproverMessage = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_ADMIN_APPROVER_ACK_BODY, $hostelNotificationSettings);
                    
                    $viewLink = "https://" . $hostName . "/admin/admin.php?menu=hostelstudents_level&action=inmatelist";
                    $adminApproverMessage = StringUtil::replace_tags($adminApproverMessage, array(
                        "studentName" => $student->name,
                        "admissionNo" => $student->admissionNo,
                        "departmentName" => $student->deptName,
                        "batchName" => $student->batchName,
                        "hostelStartDate" => $hostelRequest->startDate,
                        "hostelEndDate" => $hostelRequest->endDate,
                        // If we need to implement then we need to set this status accordingly
                        "viewLink" => $viewLink
                    ));
                    
                    $adminApproverMessageSubj = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_ADMIN_APPROVER_ACK_SUBJECT, $hostelNotificationSettings);
                    
                    $adminApproverMessageSubj = StringUtil::replace_tags($adminApproverMessageSubj, array(
                        "studentName" => $student->name,
                        "admissionNo" => $student->admissionNo,
                        "departmentName" => $student->deptName,
                        "batchName" => $student->batchName,
                        "hostelStartDate" => $hostelRequest->startDate,
                        "hostelEndDate" => $hostelRequest->endDate,
                        // If we need to implement then we need to set this status accordingly
                        "viewLink" => $viewLink
                    ));
                    
                    $emailObj = new Email();
                    $emailFrom = new EmailFrom();
                    $emailFrom->email = $college_MailFromID;
                    $emailFrom->name = $MailFromName;
                    
                    $emailObj->subject = $adminApproverMessageSubj;
                    $emailObj->body = $adminApproverMessage;
                    
                    $emailObj->from = $emailFrom;
                    $emailObj->toList = $adminEmails;
                    // $emailObj->ccList = ;
                    
                    MessageUtil::sendEmailAsync($emailObj);
                }
            }
        }
    }
    /**
     * Get Hostel Request deatils by id
     *
     * @param int $hostelRequestId
     * @return HostelRequest
     */
    public function getHostelRequestById($hostelRequestId)
    {
        $hostelRequestId = $this->realEscapeString($hostelRequestId);
        $hostelRequest = null;
        try {
            $sql = "select id,semesters_id as semId,studentaccount_id as userId,'STUDENT' as userType,hostelStartDate as startDate, hostelEndDate as endDate,(case when earlierID = 1 then true else false end) as isExHosteller,earlierHostelStartDate as exStartDate,earlierHostelEndDate as exEndDate from hostel_student_request where id = $hostelRequestId";
            
            $hostelRequest = $this->executeQueryForObject($sql);
        } catch (\Exception $e) {
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        
        return $hostelRequest;
    }
    /**
     * Trigger notification on hostel request confirmed
     * @param HostelRequest $hostelRequest
     */
    public function triggerNotificationOnHostelRequestConfirmed($hostelRequest)
    {
        $isApproverEmailNotificationEnabled = true;
        $isRequesterEmailNotificationEnabled = true;
        $userName = null;
        $user = null;
        $student = null;
        $requesterEmail = null;
        $nextLevel = null;
        $currentLevel = null;
        $hostelRequest = $this->realEscapeObject($hostelRequest);
        $nextLevel = $hostelRequest->nextLevel;
        $currentLevel = $hostelRequest->currentLevel;
        $hostelRequest = $this->getHostelRequestById($hostelRequest->id);
        $hostelRequest->nextLevel = $nextLevel;
        $hostelRequest->currentLevel = $currentLevel;
        
        $hostelNotificationSettings = CommonService::getInstance()->getSettingsByType(SettingsConstents::HOSTEL_NOTIFICATION_TYPE);
        $isApproverEmailNotificationEnabledStrValue = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_APPROVER_ENABLE, $hostelNotificationSettings);
        
        $isApproverEmailNotificationEnabled = $isApproverEmailNotificationEnabledStrValue == '1' ? true : false;
        
        $isRequesterEmailNotificationEnabledStrValue = CommonUtil::getSettingsValueByName(SettingsConstents::HOSTEL_NOTIFICATION_EMAIL_REQUESTER_ENABLE, $hostelNotificationSettings);
        
        $isRequesterEmailNotificationEnabled = $isRequesterEmailNotificationEnabledStrValue == '1' ? true : false;
        
        if (! empty($hostelRequest) && ($isApproverEmailNotificationEnabled || $isRequesterEmailNotificationEnabled)) {
            
            switch ($hostelRequest->userType) {
                case UserType::STUDENT:
                    $student = StudentService::getInstance()->getStudentDetailsById($hostelRequest->userId);
                    $hostelRequest->user = $student;
                    // $userName = $user->name;
                    // $requesterEmail = $user->studentEmail;
                    break;
                case UserType::STAFF:
                    // TODO Staff hostel request currenlty not available
                    // $user = StaffService::getInstance()->getStaffDetailsById($hostelRequest);
                    // $userName = $user->staffName;
                    // $requesterEmail = $user->staffEmail;
                    break;
                
                default:
                    break;
            }
            
            $this->notifyApprover($hostelRequest, $hostelNotificationSettings);
        }
    }
}