Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 22 |
CRAP | |
0.00% |
0 / 566 |
| EodService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 22 |
12656.00 | |
0.00% |
0 / 566 |
| __construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
| __clone | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| getInstance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 5 |
|||
| getEodNotificationSettings | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 18 |
|||
| createEodNotificationSettings | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 30 |
|||
| updateEodNotificationSettings | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 16 |
|||
| getEodNotificationStatusByCreatedDate | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
| getEodNotificationStatusByType | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
| createEodNotificationStatus | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 14 |
|||
| updateEodNotificationStatus | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 15 |
|||
| triggerEodNotification | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 12 |
|||
| triggerTutorEODNotification | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 24 |
|||
| triggerHODEODNotification | |
0.00% |
0 / 1 |
462.00 | |
0.00% |
0 / 50 |
|||
| sendTutorNotification | |
0.00% |
0 / 1 |
132.00 | |
0.00% |
0 / 79 |
|||
| sendHodNotification | |
0.00% |
0 / 1 |
306.00 | |
0.00% |
0 / 133 |
|||
| getEodNotMarkedTutorsListByDate | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 16 |
|||
| checkEodMarked | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 13 |
|||
| triggerMarkEOD | |
0.00% |
0 / 1 |
72.00 | |
0.00% |
0 / 34 |
|||
| checkReadyToMarkEOD | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 49 |
|||
| markEod | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 15 |
|||
| addTutorEodSendSmsStatus | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
| getCountOfEodSmsByStaffId | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 8 |
|||
| <?php | |
| namespace com\linways\core\ams\professional\service; | |
| use com\linways\core\ams\professional\exception\ProfessionalException; | |
| use com\linways\core\ams\professional\dto\EodNotificationStatus; | |
| use com\linways\core\ams\professional\mapper\EodServiceMapper; | |
| use com\linways\core\ams\professional\request\CheckReadyToMarkEODRequest; | |
| use com\linways\core\ams\professional\request\MarkEODRequest; | |
| use com\linways\core\ams\professional\request\SearchStaffRequest; | |
| use com\linways\core\ams\professional\dto\EodNotificationSettings; | |
| use com\linways\base\util\StringUtil; | |
| use com\linways\base\dto\Email; | |
| use com\linways\base\dto\EmailFrom; | |
| use com\linways\base\dto\EmailTo; | |
| use com\linways\base\service\EmailService; | |
| use com\linways\core\ams\professional\request\TriggerMarkEODRequest; | |
| use Prophecy\Exception\Prophecy\MethodProphecyException; | |
| use com\linways\core\ams\professional\dto\TutorEodSendSmsStatus; | |
| class EodService extends BaseService | |
| { | |
| // /Condition 1 - Presence of a static member variable | |
| private static $_instance = null; | |
| // /Condition 2 - Locked down the constructor | |
| private function __construct() | |
| { | |
| $this->mapper = EodServiceMapper::getInstance()->getMapper(); | |
| } | |
| // 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 eod notification Settings | |
| * @throws ProfessionalException | |
| * @return object|NULL|\com\linways\base\util\$objectList[] | |
| */ | |
| public function getEodNotificationSettings() | |
| { | |
| $eodSettings = NULL; | |
| $sql = "SELECT | |
| enableNotification, | |
| facultyNotificationTime, | |
| hodNotificationTime, | |
| notifyUsers, | |
| facultyMsg, | |
| hodMsg | |
| FROM | |
| eodNotificationSettings;"; | |
| try { | |
| $eodSettings = $this->executeQueryForObject($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| return $eodSettings; | |
| } | |
| /** | |
| * create EOD notification settings | |
| * @param EodNotificationSettings $eodSettings | |
| * @throws ProfessionalException | |
| * @return object|NULL|\com\linways\base\util\$objectList[] | |
| */ | |
| public function createEodNotificationSettings($eodSettings) | |
| { | |
| $sql = "INSERT INTO eodNotificationSettings( | |
| enableNotification, | |
| facultyNotificationTime, | |
| hodNotificationTime, | |
| notifyUsers, | |
| facultyMsg, | |
| hodMsg, | |
| createdBy, | |
| createdDate, | |
| updatedBy, | |
| updatedDate) | |
| VALUES ( | |
| $eodSettings->enableNotification, | |
| '$eodSettings->facultyNotificationTime', | |
| '$eodSettings->hodNotificationTime', | |
| '$eodSettings->notifyUsers', | |
| '$eodSettings->facultyMsg', | |
| '$eodSettings->hodMsg', | |
| $eodSettings->createdBy, | |
| utc_timestamp(), | |
| $eodSettings->updatedBy, | |
| utc_timestamp | |
| )"; | |
| try { | |
| return $this->executeQueryForObject($sql, true); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * update EOD notification settings | |
| * | |
| * @param EodNotificationSettings $eodSettings | |
| */ | |
| public function updateEodNotificationSettings($eodSettings) | |
| { | |
| $sql = "UPDATE eodNotificationSettings SET | |
| enableNotification=$eodSettings->enableNotification, | |
| facultyNotificationTime='$eodSettings->facultyNotificationTime', | |
| hodNotificationTime='$eodSettings->hodNotificationTime', | |
| notifyUsers='$eodSettings->notifyUsers', | |
| facultyMsg='$eodSettings->facultyMsg', | |
| hodMsg='$eodSettings->hodMsg', | |
| updatedBy=$eodSettings->updatedBy, | |
| updatedDate=utc_timestamp()"; | |
| try { | |
| return $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * get eod notification status | |
| * | |
| * @param string $createdDate | |
| * @return array | |
| * | |
| */ | |
| public function getEodNotificationStatusByCreatedDate($createdDate) | |
| { | |
| $eodStatusList = []; | |
| $sql = "SELECT * FROM eodNotificationStatus WHERE createdDate='$createdDate' AND (isEmailSend=0 || isSmsSend=0)"; | |
| try { | |
| $eodStatusList = $this->executeQueryForList($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| return $eodStatusList; | |
| } | |
| /** | |
| * get eod notification status by type and date | |
| * | |
| * @param string $createdDate | |
| */ | |
| public function getEodNotificationStatusByType($createdDate, $type) | |
| { | |
| $eodStatusList = []; | |
| $sql = "SELECT * FROM eodNotificationStatus WHERE createdDate='$createdDate' AND (isEmailSent=0 || isSmsSent=0) AND type='$type'"; | |
| try { | |
| $eodStatusList = $this->executeQueryForList($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| return $eodStatusList; | |
| } | |
| /** | |
| * insert into eodNotificationStatus | |
| * | |
| * @param EodNotificationStatus $eodStatusList | |
| */ | |
| public function createEodNotificationStatus($eodStatusList) | |
| { | |
| $values = []; | |
| foreach ($eodStatusList as $eodStatus) { | |
| $values[] = "('$eodStatus->type', | |
| $eodStatus->staffID, | |
| '$eodStatus->createdDate')"; | |
| } | |
| $sql = "INSERT INTO eodNotificationStatus(type, staffID, createdDate) VALUES " . implode(',', $values); | |
| try { | |
| return $this->executeQueryForObject($sql, true); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * update eodNotificationStatus | |
| * | |
| * @param EodNotificationStatus $eodStatusList | |
| */ | |
| public function updateEodNotificationStatus($eodStatusList) | |
| { | |
| $sql = "UPDATE eodNotificationStatus SET | |
| sendDate='$eodStatusList->sendDate', | |
| isEmailSent=$eodStatusList->isEmailSent, | |
| isSmsSent=$eodStatusList->isSmsSent, | |
| emailError='$eodStatusList->emailError', | |
| smsError='$eodStatusList->smsError' | |
| WHERE id=$eodStatusList->id | |
| "; | |
| try { | |
| $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * trigger cronjob for send eod notification | |
| */ | |
| public function triggerEodNotification() | |
| { | |
| $eodNotificationSettings = $this->getEodNotificationSettings(); | |
| if ($eodNotificationSettings->enableNotification) { | |
| $currentTime = strtotime(date('H:i')); | |
| if (strtotime($eodNotificationSettings->facultyNotificationTime) == $currentTime) { | |
| $this->triggerTutorEODNotification($eodNotificationSettings); | |
| } | |
| if (strtotime($eodNotificationSettings->hodNotificationTime) == $currentTime) { | |
| $this->triggerHODEODNotification($eodNotificationSettings); | |
| } | |
| } | |
| } | |
| /** | |
| * trigger cronjob and send sms and email to tutors | |
| * | |
| * @param EodNotificationStatus $eodNotificationSettings | |
| */ | |
| private function triggerTutorEODNotification($eodNotificationSettings) | |
| { | |
| $date = date('Y-m-d'); | |
| $eodDate = date('Y-m-d', strtotime(' -1 day')); | |
| // $notifiyUsers = explode(',', $eodNotificationSettings->notifyUsers); | |
| $notificationStatus = $this->getEodNotificationStatusByType($date, 'TUTOR'); | |
| if ($notificationStatus == NULL || count($notificationStatus) <= 0) { | |
| $tutorList = $this->getEodNotMarkedTutorsListByDate($eodDate); | |
| if ($tutorList != NULL && count($tutorList) > 0) { | |
| $eodStatusList = []; | |
| foreach ($tutorList as $tutors) { | |
| foreach ($tutors as $tutor) { | |
| $eodStatus = new EodNotificationStatus(); | |
| $eodStatus->type = 'TUTOR'; | |
| $eodStatus->staffID = $tutor->staffID; | |
| $eodStatus->createdDate = $date; | |
| $eodStatusList[] = $eodStatus; | |
| } | |
| } | |
| if ($eodStatusList != NULL && count($eodStatusList) > 0) { | |
| $this->createEodNotificationStatus($eodStatusList); | |
| } | |
| } | |
| } | |
| $this->sendTutorNotification($eodNotificationSettings); | |
| } | |
| /** | |
| * trigger cronjob and send sms and email to hod and principal | |
| * | |
| * @param EodNotificationStatus $eodNotificationSettings | |
| */ | |
| private function triggerHODEODNotification($eodNotificationSettings) | |
| { | |
| $date = date('Y-m-d'); | |
| $eodDate = date('Y-m-d', strtotime(' -1 day')); | |
| $notMarkedTutors = []; | |
| $notifiyUsers = explode(',', $eodNotificationSettings->notifyUsers); | |
| $notificationStatusHod = $this->getEodNotificationStatusByType($date, 'HOD'); | |
| $notificationStatusPrincipal = $this->getEodNotificationStatusByType($date, 'PRINCIPAL'); | |
| if (($notificationStatusHod == NULL || count($notificationStatusHod) <= 0) || ($notificationStatusPrincipal == NULL || count($notificationStatusPrincipal) <= 0)) { | |
| $tutorList = $this->getEodNotMarkedTutorsListByDate($eodDate); | |
| if ($tutorList != NULL && count($tutorList) > 0) { | |
| $eodStatusList = []; | |
| $deptID = []; | |
| $hodList = []; | |
| foreach ($tutorList as $tutors) { | |
| foreach ($tutors as $tutor) { | |
| $deptID[] = $tutor->deptID; | |
| $notMarkedTutors[$tutor->deptID] = $notMarkedTutors[$tutor->deptID] == NULL ? $tutor->staffName : $notMarkedTutors[$tutor->deptID] . "," . $tutor->staffName; | |
| } | |
| } | |
| if ($notificationStatusHod == NULL && count($notificationStatusHod) <= 0) { | |
| if (count($deptID) > 0 && in_array("HOD", $notifiyUsers)) { | |
| $hodList = StaffService::getInstance()->getHodByDeptId(array_unique($deptID)); | |
| } | |
| if ($hodList != NULL) { | |
| foreach ($hodList as $hod) { | |
| $eodStatus = new EodNotificationStatus(); | |
| $eodStatus->type = 'HOD'; | |
| $eodStatus->staffID = $hod->staffID; | |
| $eodStatus->createdDate = $date; | |
| $eodStatusList[] = $eodStatus; | |
| } | |
| } | |
| } | |
| if ($notificationStatusPrincipal == NULL && count($notificationStatusPrincipal) <= 0) { | |
| if (in_array("PRINCIPAL", $notifiyUsers)) { | |
| $principal = StaffService::getInstance()->getPrincipal(); | |
| $eodStatus = new EodNotificationStatus(); | |
| $eodStatus->type = 'PRINCIPAL'; | |
| $eodStatus->staffID = $principal->staffID; | |
| $eodStatus->createdDate = $date; | |
| $eodStatusList[] = $eodStatus; | |
| } | |
| } | |
| if ($eodStatusList != NULL && count($eodStatusList) > 0) { | |
| $this->createEodNotificationStatus($eodStatusList); | |
| } | |
| } | |
| } | |
| $this->sendHodNotification($eodNotificationSettings, $notMarkedTutors); | |
| } | |
| /** | |
| * send notification to tutors | |
| * | |
| * @param EodNotificationSettings $eodNotificationSettings | |
| */ | |
| private function sendTutorNotification($eodNotificationSettings) | |
| { | |
| global $college_MailFromID; | |
| global $MailFromName; | |
| $date = date('Y-m-d'); | |
| $eodDate = date('Y-m-d', strtotime(' -1 day')); | |
| $notificationStatus = $this->getEodNotificationStatusByType($date, 'TUTOR'); | |
| $request = new SearchStaffRequest(); | |
| if ($notificationStatus != NULL && count($notificationStatus) > 0) { | |
| foreach ($notificationStatus as $notification) { | |
| $request->staffID = $notification->staffID; | |
| $content = StringUtil::replace_tags($eodNotificationSettings->facultyMsg, array( | |
| 'date' => $eodDate | |
| )); | |
| $staffDetails = StaffService::getInstance()->searchStaff($request); | |
| if ($notification->isEmailSent == 0) { | |
| if (CommonService::getInstance()->checkEmail($staffDetails->staffEmail)) { | |
| $emailBody = $content; | |
| $emailSubject = 'EOD Notification'; | |
| $emailObj = new Email(); | |
| $emailFrom = new EmailFrom(); | |
| $emailFrom->email = $college_MailFromID; | |
| $emailFrom->name = $MailFromName; | |
| $emailTo = new EmailTo(); | |
| $emailTo->email = $staffDetails->staffEmail; | |
| $emailTo->name = ''; | |
| $emailObj->subject = $emailSubject; | |
| $emailObj->body = $emailBody; | |
| $emailObj->from = $emailFrom; | |
| $emailObj->to = $emailTo; | |
| try { | |
| EmailService::getInstance()->sendEmail($emailObj); | |
| $isEmailSend = 1; | |
| $emailStatus = ''; | |
| } catch (\Exception $e) { | |
| $status = 0; | |
| $isEmailSend = 0; | |
| $emailStatus = 'FAILED'; | |
| $success = FALSE; | |
| } | |
| } else { | |
| $isEmailSend = 0; | |
| $emailStatus = 'INVALID_EMAIL'; | |
| $success = FALSE; | |
| } | |
| } else { | |
| $isEmailSend = $notification->isEmailSent; | |
| $emailStatus = $notification->emailError; | |
| } | |
| if ($notification->isSmsSent == 0) { | |
| $smsSendStatus = ''; | |
| if (CommonService::getInstance()->checkPhoneNo($staffDetails->staffPhone)) { | |
| $smscontent = $content; | |
| $isSmsSend = sendSms($staffDetails->staffPhone, $smscontent, $SMS_TRANS); | |
| if ($isSmsSend == 0) { | |
| $smsSendStatus = 'FAILED'; | |
| $success = FALSE; | |
| } | |
| } else { | |
| $isSmsSend = 0; | |
| $smsSendStatus = 'INVALID_PHONE'; | |
| $success = FALSE; | |
| } | |
| } else { | |
| $isSmsSend = $notification->isSmsSent; | |
| $smsSendStatus = $notification->smsError; | |
| } | |
| $eodStatus = new EodNotificationStatus(); | |
| $eodStatus->emailError = $emailStatus; | |
| $eodStatus->id = $notification->id; | |
| $eodStatus->isEmailSent = $isEmailSend; | |
| $eodStatus->isSmsSent = $isSmsSend; | |
| $eodStatus->smsError = $smsSendStatus; | |
| $eodStatus->sendDate = date('Y-m-d H:i:s'); | |
| if ($eodStatus) { | |
| $this->updateEodNotificationStatus($eodStatus); | |
| } | |
| } | |
| } | |
| } | |
| /** | |
| * send notification to hod and principal | |
| * | |
| * @param EodNotificationSettings $eodNotificationSettings | |
| */ | |
| private function sendHodNotification($eodNotificationSettings, $notMarkedTutors) | |
| { | |
| global $college_MailFromID; | |
| global $MailFromName; | |
| $date = date('Y-m-d'); | |
| $eodDate = date('Y-m-d', strtotime(' -1 day')); | |
| $staffNames = []; | |
| $notificationStatus = $this->getEodNotificationStatusByType($date, 'HOD'); | |
| $request = new SearchStaffRequest(); | |
| if ($notificationStatus != NULL && count($notificationStatus) > 0) { | |
| foreach ($notificationStatus as $notification) { | |
| $request->staffID = $notification->staffID; | |
| $staffDetails = StaffService::getInstance()->searchStaff($request); | |
| $content = StringUtil::replace_tags($eodNotificationSettings->hodMsg, array( | |
| 'date' => $eodDate, | |
| 'staffNames' => $notMarkedTutors[$staffDetails->deptID] | |
| )); | |
| if ($notification->isEmailSent == 0) { | |
| if (CommonService::getInstance()->checkEmail($staffDetails->staffEmail)) { | |
| $emailBody = $content; | |
| $emailSubject = 'EOD Notification'; | |
| $emailObj = new Email(); | |
| $emailFrom = new EmailFrom(); | |
| $emailFrom->email = $college_MailFromID; | |
| $emailFrom->name = $MailFromName; | |
| $emailTo = new EmailTo(); | |
| $emailTo->email = $staffDetails->staffEmail; | |
| $emailTo->name = ''; | |
| $emailObj->subject = $emailSubject; | |
| $emailObj->body = $emailBody; | |
| $emailObj->from = $emailFrom; | |
| $emailObj->to = $emailTo; | |
| try { | |
| EmailService::getInstance()->sendEmail($emailObj); | |
| $isEmailSend = 1; | |
| $emailStatus = ''; | |
| } catch (\Exception $e) { | |
| $isEmailSend = 0; | |
| $emailStatus = 'FAILED'; | |
| } | |
| } else { | |
| $isEmailSend = 0; | |
| $emailStatus = 'INVALID_EMAIL'; | |
| } | |
| } else { | |
| $isEmailSend = $notification->isEmailSent; | |
| $emailStatus = $notification->emailError; | |
| } | |
| $smsSendStatus = ''; | |
| if ($notification->isSmsSent == 0) { | |
| if (CommonService::getInstance()->checkPhoneNo($staffDetails->staffPhone)) { | |
| $smscontent = $content; | |
| $isSmsSend = sendSms($staffDetails->staffPhone, $smscontent, $SMS_TRANS); | |
| if ($isSmsSend == 0) { | |
| $smsSendStatus = 'FAILED'; | |
| $success = FALSE; | |
| } | |
| } else { | |
| $isSmsSend = 0; | |
| $smsSendStatus = 'INVALID_PHONE'; | |
| $success = FALSE; | |
| } | |
| } else { | |
| $isSmsSend = $notification->isSmsSent; | |
| $smsSendStatus = $notification->smsError; | |
| } | |
| $eodStatus = new EodNotificationStatus(); | |
| $eodStatus->emailError = $emailStatus; | |
| $eodStatus->id = $notification->id; | |
| $eodStatus->isEmailSent = $isEmailSend; | |
| $eodStatus->isSmsSent = $isSmsSend; | |
| $eodStatus->smsError = $smsSendStatus; | |
| $eodStatus->sendDate = date('Y-m-d H:i:s'); | |
| $this->updateEodNotificationStatus($eodStatus); | |
| } | |
| } | |
| $notificationStatus = $this->getEodNotificationStatusByType($date, 'PRINCIPAL'); | |
| $request = new SearchStaffRequest(); | |
| if ($notificationStatus != NULL && count($notificationStatus) > 0) { | |
| foreach ($notificationStatus as $notification) { | |
| $request->staffID = $notification->staffID; | |
| $staffDetails = StaffService::getInstance()->searchStaff($request); | |
| if ($notification->isEmailSent == 0) { | |
| foreach ($notMarkedTutors as $deptID => $staffName) { | |
| $deptDetails = DepartmentService::getInstance()->getDepartmentById($deptID); | |
| $staffNames[] = $deptDetails->name . "[" . $staffName . "]"; | |
| } | |
| if (CommonService::getInstance()->checkEmail($staffDetails->staffEmail)) { | |
| $content = StringUtil::replace_tags($eodNotificationSettings->hodMsg, array( | |
| 'date' => $eodDate, | |
| 'staffNames' => implode(',', $staffNames) | |
| )); | |
| $emailBody = $content; | |
| $emailSubject = 'EOD Notification'; | |
| $emailObj = new Email(); | |
| $emailFrom = new EmailFrom(); | |
| $emailFrom->email = $college_MailFromID; | |
| $emailFrom->name = $MailFromName; | |
| $emailTo = new EmailTo(); | |
| $emailTo->email = $staffDetails->staffEmail; | |
| $emailTo->name = ''; | |
| $emailObj->subject = $emailSubject; | |
| $emailObj->body = $emailBody; | |
| $emailObj->from = $emailFrom; | |
| $emailObj->to = $emailTo; | |
| try { | |
| EmailService::getInstance()->sendEmail($emailObj); | |
| $isEmailSend = 1; | |
| $emailStatus = ''; | |
| } catch (\Exception $e) { | |
| $status = 0; | |
| $emailStatus = 'FAILED'; | |
| $success = FALSE; | |
| } | |
| } else { | |
| $isEmailSend = 0; | |
| $emailStatus = 'INVALID_EMAIL'; | |
| $success = FALSE; | |
| } | |
| } else { | |
| $isEmailSend = $notification->isEmailSent; | |
| $emailStatus = $notification->emailError; | |
| } | |
| $eodStatus = new EodNotificationStatus(); | |
| $eodStatus->emailError = $emailStatus; | |
| $eodStatus->id = $notification->id; | |
| $eodStatus->isEmailSent = $isEmailSend; | |
| $eodStatus->isSmsSent = $isSmsSend; | |
| $eodStatus->smsError = $smsSendStatus; | |
| $eodStatus->sendDate = date('Y-m-d H:i:s'); | |
| $this->updateEodNotificationStatus($eodStatus); | |
| } | |
| } | |
| } | |
| /** | |
| * get eod not marked turors by date | |
| * @param string $date | |
| * @return object[]|array[]|\com\linways\base\util\$objectList[][] | |
| */ | |
| public function getEodNotMarkedTutorsListByDate($date) | |
| { | |
| $tutorList = []; | |
| $sql = "SELECT DISTINCT(bt.batchID),b.semID FROM batch_timetable bt | |
| INNER JOIN batches b on b.batchId = bt.batchId | |
| WHERE bt.batchId NOT IN(SELECT av.batchId FROM attendance_verifyeod av WHERE av.eodDate = '$date') | |
| AND bt.batchId NOT IN(SELECT batchIDs FROM eod_settings) | |
| AND bt.timetableDate = '$date';"; | |
| $batchDetailsList = $this->executeQueryForList($sql); | |
| if ($batchDetailsList != NULL && count($batchDetailsList) > 0) { | |
| foreach ($batchDetailsList as $batchDetails) { | |
| $sql_tutor = "SELECT t2.staffID, t2.staffName, t2.deptID FROM batch_tutor t1, staffaccounts t2 WHERE t1.staffID = t2.staffID AND t1.batchID =$batchDetails->batchID AND t1.semID =$batchDetails->semID"; | |
| $tutorList[] = $this->executeQueryForList($sql_tutor); | |
| } | |
| } | |
| return $tutorList; | |
| } | |
| /** | |
| * check batch eod marked or not | |
| * @param string $eodDate | |
| * @param int $batchID | |
| * @throws ProfessionalException | |
| * @return boolean | |
| */ | |
| public function checkEodMarked($eodDate, $batchID) | |
| { | |
| $flag = FALSE; | |
| $sql = "SELECT count(batchID) as flag FROM attendance_verifyeod WHERE eodDate='$eodDate' AND batchID='$batchID'"; | |
| try { | |
| $eodFlag = $this->executeQueryForObject($sql)->flag; | |
| if ($eodFlag) { | |
| $flag = TRUE; | |
| } | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| return $flag; | |
| } | |
| /** | |
| * This function will mark EOD if all staffs marked attendance | |
| * @param TriggerMarkEODRequest $request | |
| * @return bool | |
| * @throws ProfessionalException | |
| */ | |
| public function triggerMarkEOD(TriggerMarkEODRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| if (empty($request->batchId)) | |
| throw new ProfessionalException(ProfessionalException::INVALID_BATCH_ID, "Invalid batch given"); | |
| if (empty($request->semId)) | |
| throw new ProfessionalException(ProfessionalException::INVALID_SEMESTER_ID, "Invalid semester given"); | |
| if (empty($request->date)) | |
| throw new ProfessionalException(ProfessionalException::INVALID_DATE, "Invalid date given"); | |
| if (empty($request->deptId)) | |
| throw new ProfessionalException(ProfessionalException::INVALID_DEPARTMENT_ID, "Invalid department given"); | |
| $checkReadyToMarkEODRequest = new CheckReadyToMarkEODRequest(); | |
| $checkReadyToMarkEODRequest->batchId = $request->batchId; | |
| $checkReadyToMarkEODRequest->semId = $request->semId; | |
| $checkReadyToMarkEODRequest->date = $request->date; | |
| $checkReadyToMarkEODRequest->deptId = $request->deptId; | |
| $checkReadyToMarkEODRequest->isExcludeLastHour = $request->isExcludeLastHour; | |
| $isEODMarked = $this->checkEodMarked($request->date, $request->batchId); | |
| if ($isEODMarked) | |
| return false; | |
| try { | |
| $isReadyToMark = $this->checkReadyToMarkEOD($checkReadyToMarkEODRequest); | |
| if ($isReadyToMark) { | |
| $markEODRequest = new MarkEODRequest(); | |
| $markEODRequest->batchId = $request->batchId; | |
| $markEODRequest->date = $request->date; | |
| $markEODRequest->isAutoMarked = 1; | |
| /** | |
| * Marking EOD | |
| */ | |
| $this->markEod($markEODRequest); | |
| return true; | |
| } | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| return false; | |
| } | |
| /** | |
| * Return true if all staff marked attendance else return false | |
| * if marked attendance count is greater than or equal to sum of count of students in time table assigned hours | |
| * by batchId, semId, hourId and date | |
| * @param CheckReadyToMarkEODRequest $request | |
| * @return bool | |
| * @throws ProfessionalException | |
| */ | |
| public function checkReadyToMarkEOD(CheckReadyToMarkEODRequest $request) | |
| { | |
| global $ATTENDANCE_HOURS; | |
| $request = $this->realEscapeObject($request); | |
| $batchId = $request->batchId; | |
| $semId = $request->semId; | |
| $deptId = $request->deptId; | |
| $date = date('Y-m-d', strtotime($request->date)); | |
| $excludeLastHour = 0; | |
| if ($request->isExcludeLastHour) { | |
| $excludeLastHour = 1; | |
| } | |
| /** | |
| * Checking given date is holiday | |
| */ | |
| $isHoliday = CalendarService::getInstance()->isHoliday($deptId, $batchId, $date); | |
| if ($isHoliday) | |
| return false; | |
| if (empty($ATTENDANCE_HOURS)) | |
| throw new ProfessionalException(ProfessionalException::ATTENDANCE_HOURS_NOT_CONFIGURED, "Configure attendance hours"); | |
| $totalStudentsCount = -1; | |
| $attendanceCount = -1; | |
| try { | |
| /** | |
| * Fetching students count from attendance table by batch, sem, hour and date. | |
| */ | |
| $sql = "SELECT count(studentID) AS attendanceCount FROM attendance | |
| WHERE batchID= $batchId AND semID = $semId AND attendanceDate = '" . $date . "'"; | |
| $attendanceCount = $this->executeQueryForObject($sql)->attendanceCount; | |
| $attendanceCount = (int)$attendanceCount; | |
| $totalStudentsCount = 0; | |
| for ($i = 1; $i <= $ATTENDANCE_HOURS - $excludeLastHour; $i++) { | |
| /** | |
| * This query returns how much students in time table assigned hour. | |
| * If time table assigned for a subbatch, then this will be return count of students in subbatch | |
| * else return strength of all batch | |
| */ | |
| $sql = "SELECT CASE | |
| WHEN count(sbss.subbatchID) >0 AND sh.hour IS NULL THEN count(DISTINCT sbst.studentID) | |
| WHEN count(sbss.subbatchID) =0 AND sh.hour IS NULL THEN count(DISTINCT sa.studentID) | |
| ELSE 0 | |
| END AS studentCount | |
| FROM batch_timetable btt | |
| INNER JOIN batches b ON b.batchID=btt.batchID AND b.semID = btt.semID | |
| INNER JOIN studentaccount sa ON sa.batchID = b.batchID | |
| LEFT JOIN suspended_hours sh ON sh.batchID = btt.batchID and sh.semID = btt.semID | |
| AND sh.suspendedDate = btt.timetableDate AND sh.hour =btt.hourID | |
| LEFT JOIN sbs_relation sbsr ON sbsr.sbsID = btt.sbsID | |
| LEFT JOIN subbatch_sbs sbss ON IF (btt.subbatchID, sbss.sbsID = sbsr.sbsID AND sbss.subbatchID = btt.subbatchID,sbss.sbsID = sbsr.sbsID) | |
| LEFT JOIN subbatch_student sbst ON sbst.subbatchID = sbss.subbatchID AND sbst.studentID=sa.studentID | |
| WHERE btt.batchID= $batchId AND btt.semID = $semId AND btt.timetableDate = '" . $date . "' | |
| AND btt.hourID =$i"; | |
| $studentCount = $this->executeQueryForObject($sql)->studentCount; | |
| $totalStudentsCount += $studentCount; | |
| } | |
| $totalStudentsCount = (int)$totalStudentsCount; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| return $attendanceCount >= $totalStudentsCount && $totalStudentsCount > 0; | |
| } | |
| /** | |
| * This will mark the EOD by batch id, date and tutor id | |
| * @param MarkEODRequest $request | |
| * @throws ProfessionalException | |
| */ | |
| public function markEod(MarkEODRequest $request) | |
| { | |
| if (empty($request->batchId)) | |
| throw new ProfessionalException(ProfessionalException::INVALID_BATCH_ID, "Couldn't mark EOD without batch"); | |
| if (empty($request->date)) | |
| throw new ProfessionalException(ProfessionalException::INVALID_DATE, "Invalid date given"); | |
| if (empty($request->isAutoMarked)) | |
| $request->isAutoMarked = 'NULL'; | |
| $sql = "INSERT INTO attendance_verifyeod (eodDate, batchID, tutorID,is_auto_marked) | |
| VALUES ('" . $request->date . "', '" . $request->batchId . "', '" . $request->tutotId . "',$request->isAutoMarked)"; | |
| try { | |
| $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * add tutor eod sms send status | |
| * @param TutorEodSendSmsStatus $tutorEodSendSmsStatus | |
| * @throws ProfessionalException | |
| * @return \com\linways\base\dto\MySqlResult | |
| */ | |
| public function addTutorEodSendSmsStatus($tutorEodSendSmsStatus) | |
| { | |
| $tutorEodSendSmsStatus = $this->realEscapeObject($tutorEodSendSmsStatus); | |
| $sql="INSERT INTO tutor_eod_send_sms_status (staffId, attendanceDate, hour, batchId, semId, createdBy, createdDate, updatedBy, updatedDate) VALUES ($tutorEodSendSmsStatus->staffId, '$tutorEodSendSmsStatus->attendanceDate', $tutorEodSendSmsStatus->hour, $tutorEodSendSmsStatus->batchId, $tutorEodSendSmsStatus->semId, $tutorEodSendSmsStatus->createdBy, utc_timestamp(), $tutorEodSendSmsStatus->updatedBy, utc_timestamp()) | |
| "; | |
| try { | |
| return $this->executeQuery($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * sms sent count of a staff | |
| * @param TutorEodSendSmsStatus $tutorEodSendSmsStatus | |
| * @throws ProfessionalException | |
| * @return \com\linways\base\dto\MySqlResult | |
| */ | |
| public function getCountOfEodSmsByStaffId($tutorEodSendSmsStatus) | |
| { | |
| $sql="SELECT count(id) as totalSmsSend FROM tutor_eod_send_sms_status WHERE staffId=$tutorEodSendSmsStatus->staffId AND attendanceDate='$tutorEodSendSmsStatus->attendanceDate' AND batchId=$tutorEodSendSmsStatus->batchId AND semId=$tutorEodSendSmsStatus->semId AND hour=$tutorEodSendSmsStatus->hour"; | |
| try { | |
| return $this->executeQueryForObject($sql)->totalSmsSend; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| } |