Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 308 |
NotificationHelperService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
3660.00 | |
0.00% |
0 / 308 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
__clone | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
getInstance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 5 |
|||
processStaffList | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 16 |
|||
sendSmsForTodaysUnmarkedFaculty | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 56 |
|||
sendNotificationWhenMessageSentOnMailBox | |
0.00% |
0 / 1 |
1806.00 | |
0.00% |
0 / 229 |
<?php | |
namespace com\linways\core\ams\professional\service\notification; | |
use com\linways\core\ams\professional\constant\UserType; | |
use com\linways\core\ams\professional\constant\notification\NotificationContextConstant; | |
use com\linways\core\ams\professional\constant\notification\NotificationFeatureConstant; | |
use com\linways\core\ams\professional\dto\RecipeintType; | |
use com\linways\core\ams\professional\dto\notification\Notification; | |
use com\linways\core\ams\professional\dto\notification\NotificationRecipient; | |
use com\linways\core\ams\professional\exception\ProfessionalException; | |
use com\linways\core\ams\professional\request\SearchUnMarkedStaffRequest; | |
use com\linways\core\ams\professional\request\notification\GetGlobalSettingsRequest; | |
use com\linways\core\ams\professional\service\BaseService; | |
use com\linways\core\ams\professional\service\StaffService; | |
use com\linways\core\ams\professional\service\StudentService; | |
/** | |
* | |
* @author gadheyan | |
*/ | |
class NotificationHelperService extends BaseService | |
{ | |
// /Condition 1 - Presence of a static member variable | |
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; | |
} | |
private function processStaffList($staffList){ | |
foreach ($staffList as $staff) { | |
$staff->hours = []; | |
foreach ($staff->subjectDetails as $subjectDetails) { | |
$staff->subjectId = $subjectDetails->subjectId; | |
$staff->batchId = $subjectDetails->batchId; | |
$staff->semId = $subjectDetails->semId; | |
foreach ($subjectDetails->hours as $subjectHours) { | |
foreach ($subjectHours as $hour) { | |
$staff->hours[] = $hour; | |
} | |
} | |
} | |
$staff->hours = array_unique($staff->hours); | |
} | |
return $staffList; | |
} | |
/** | |
* | |
* @return NULL | |
* @author gadheyan | |
*/ | |
public function sendSmsForTodaysUnmarkedFaculty(){ | |
$globalSettingsRequest = new GetGlobalSettingsRequest(); | |
$globalSettingsRequest->context = NotificationContextConstant::ATTENDANCE; | |
$globalSettingsRequest->feature = NotificationFeatureConstant::SMS_FACULTIES_WHEN_ATTENDANCE_NOT_MARKED; | |
$settings = NotificationSettingsService::getInstance()->getSingleGlobalSettings($globalSettingsRequest); | |
$searchRequest = new SearchUnMarkedStaffRequest(); | |
$searchRequest->fromDate = date('Y-m-d'); | |
$searchRequest->toDate = date('Y-m-d'); | |
$searchRequest->startIndex = 0; | |
$searchRequest->export = 1; | |
$staffList = StaffService::getInstance()->searchUnMarkedFaculties($searchRequest); | |
if(empty($staffList)){ | |
error_log("unmarked faculty sms not sent. staff list is empty : ".getenv("AMS_CONFIG")); | |
return null; | |
} | |
if(empty($settings->customSettingsValue)){ | |
error_log("unmarked faculty sms not sent. parameters like time and hours is required : ".getenv("AMS_CONFIG")); | |
return null; | |
} | |
$hours = $settings->customSettingsValue->hours; | |
if(!$hours){ | |
error_log("unmarked faculty sms not sent. hours is not defined : ".getenv("AMS_CONFIG")); | |
return null; | |
} | |
$staffList = $this->processStaffList($staffList); | |
$notification = new Notification(); | |
$notification->context = NotificationContextConstant::ATTENDANCE; | |
$notification->feature = NotificationFeatureConstant::SMS_FACULTIES_WHEN_ATTENDANCE_NOT_MARKED; | |
$notification->recipientType = UserType::STAFF; | |
$notification->smsDeferred = 0; | |
$notification->createdBy = 0; | |
$notification->creatorType = UserType::STAFF; | |
foreach ($staffList as $staff) { | |
$unmarkedHours = []; | |
foreach ($hours as $hour) { | |
if(in_array($hour, $staff->hours)){ | |
$unmarkedHours[] = $hour; | |
} | |
} | |
if(empty($unmarkedHours)){ | |
continue; | |
} | |
$unmarkedHours = implode(",", $unmarkedHours); | |
$recipient = null; | |
$recipient = new NotificationRecipient(); | |
$recipient->recipientId = $staff->staffId; | |
$recipient->recipientType = UserType::STAFF; | |
$recipient->templateParameters = ["batchId" => $staff->batchId, "subjectId" => $staff->subjectId, "semId" => $staff->semId, "hours" => $unmarkedHours]; | |
$notification->recipient[] = $recipient; | |
} | |
try { | |
NotificationService::getInstance()->sendNotification($notification); | |
} catch (\Exception $e) { | |
//log exception | |
$errorMsg = "Error Code : '".$e->getCode()."' . Error Message : ".$e->getMessage(); | |
error_log($errorMsg); | |
} | |
} | |
/** | |
* | |
* @param unknown $messages | |
* @throws ProfessionalException | |
* @author gadheyan | |
*/ | |
public function sendNotificationWhenMessageSentOnMailBox($messages){ | |
$studentList = []; | |
$staffList = []; | |
switch ($messages->recType) | |
{ | |
case RecipeintType::ALL: | |
$sqlStudents = "SELECT studentID as userId FROM studentaccount WHERE student_lock=0 "; | |
$sqlStaff = "SELECT staffID as userId FROM staffaccounts WHERE isResigned=0 AND staffID !=$messages->senderId "; | |
if($messages->deptId) | |
{ | |
$sqlStudents .=" AND deptID=$messages->deptId"; | |
$sqlStaff .=" AND deptID=$messages->deptId"; | |
} | |
try | |
{ | |
$studentList = $this->executeQueryForList($sqlStudents); | |
$staffList = $this->executeQueryForList($sqlStaff); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::ALL_BATCH: | |
$sqlStudents="SELECT studentID as userId FROM studentaccount WHERE student_lock=0 AND batchID=$messages->batchId AND deptID=$messages->deptId"; | |
$sqlStaff ="SELECT st.staffID as userId FROM staffaccounts st INNER JOIN sbs_relation sr ON st.staffID = sr.staffID INNER JOIN batches b ON b.batchID = sr.batchID AND b.semID = sr.semID WHERE st.isResigned=0 AND st.deptID=$messages->deptId AND sr.batchID = $messages->batchId AND st.staffID !=$messages->senderId"; | |
try | |
{ | |
$studentList = $this->executeQueryForList($sqlStudents); | |
$staffList = $this->executeQueryForList($sqlStaff); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::ALL_SUBBATCH: | |
$sqlStudents="SELECT sa.studentID as userId FROM studentaccount sa INNER JOIN subbatches sub ON sub.batchID =sa.batchID INNER JOIN subbatch_student ss ON sub.subbatchID=ss.subbatchID AND sa.studentID =ss.studentID WHERE sub.subbatchID=$messages->batchId"; | |
$sqlStaff ="SELECT st.staffID as userId FROM staffaccounts st INNER JOIN sbs_relation sr ON st.staffID = sr.staffID INNER JOIN subbatch_sbs ss ON ss.sbsID=sr.sbsID WHERE st.isResigned=0 AND st.deptID=$messages->deptId AND ss.subbatchID=$messages->batchId AND st.staffID !=$messages->senderId"; | |
try | |
{ | |
$studentList = $this->executeQueryForList($sqlStudents); | |
$staffList = $this->executeQueryForList($sqlStaff); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::ALL_FACULTY: | |
$sqlStaff ="SELECT staffID as userId FROM staffaccounts WHERE isResigned=0 AND staffID !=$messages->senderId"; | |
try | |
{ | |
$staffList = $this->executeQueryForList($sqlStaff); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::ALL_DEPT_FACULTY: | |
$sqlStaff ="SELECT staffID as userId FROM staffaccounts WHERE isResigned=0 AND deptID=$messages->deptId AND staffID !=$messages->senderId"; | |
try | |
{ | |
$staffList = $this->executeQueryForList($sqlStaff); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::ALL_BATCH_FACULTY: | |
$sqlStaff ="SELECT st.staffID as userId FROM staffaccounts st INNER JOIN sbs_relation sr ON st.staffID = sr.staffID INNER JOIN batches b ON b.batchID = sr.batchID AND b.semID = sr.semID WHERE st.isResigned=0 AND st.deptID=$messages->deptId AND sr.batchID = $messages->batchId AND st.staffID !=$messages->senderId"; | |
try | |
{ | |
$staffList = $this->executeQueryForList($sqlStaff); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::ALL_SUBBATCH_FACULTY: | |
$sqlStaff ="SELECT st.staffID as userId FROM staffaccounts st INNER JOIN sbs_relation sr ON st.staffID = sr.staffID INNER JOIN subbatch_sbs ss ON ss.sbsID=sr.sbsID WHERE st.isResigned=0 AND st.deptID=$messages->deptId AND ss.subbatchID=$messages->batchId AND st.staffID !=$messages->senderId"; | |
try | |
{ | |
$staffList = $this->executeQueryForList($sqlStaff); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::ALL_STUDENTS: | |
$sqlStudents = "SELECT studentID as userId FROM studentaccount WHERE student_lock=0"; | |
try | |
{ | |
$studentList = $this->executeQueryForList($sqlStudents); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::ALL_BATCH_STUDENT: | |
$sqlStudents = "SELECT studentID as userId FROM studentaccount WHERE student_lock=0 AND batchID=$messages->batchId AND deptID=$messages->deptId"; | |
try | |
{ | |
$studentList = $this->executeQueryForList($sqlStudents); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::ALL_DEPT_STUDENT: | |
$sqlStudents = "SELECT studentID as userId FROM studentaccount WHERE student_lock=0 AND deptID=$messages->deptId"; | |
try | |
{ | |
$studentList = $this->executeQueryForList($sqlStudents); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::ALL_SUBBATCH_STUDENT: | |
$sqlStudents = "SELECT sa.studentID as userId FROM studentaccount sa INNER JOIN subbatches sub ON sub.batchID =sa.batchID INNER JOIN subbatch_student ss ON sub.subbatchID=ss.subbatchID AND sa.studentID =ss.studentID WHERE sub.subbatchID=$messages->batchId"; | |
try | |
{ | |
$studentList = $this->executeQueryForList($sqlStudents); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::INDIVIDUAL: | |
if($messages->recipeint !=NULL && count($messages->recipeint) > 0) | |
{ | |
foreach ($messages->recipeint as $user) | |
{ | |
if($user->userType == "FACULTY"){ | |
$staffObject = new \stdClass(); | |
$staffObject->userId = $user->userId; | |
$staffList[] = $staffObject; | |
}elseif ($user->userType == "STUDENT"){ | |
$studentObject = new \stdClass(); | |
$studentObject->userId = $user->userId; | |
$studentList[] = $studentObject; | |
} | |
} | |
} | |
break; | |
case RecipeintType::HOD: | |
$sqlStaff ="SELECT staffID as userId FROM staffaccounts WHERE isResigned=0 AND deptID = $messages->deptId AND isHOD >0"; | |
try | |
{ | |
$staffList = $this->executeQueryForList($sqlStaff); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
break; | |
case RecipeintType::PRINCIPAL: | |
$sqlStaff ="SELECT staffID as userId FROM staffaccounts WHERE isResigned=0 AND isPrincipal >0"; | |
try | |
{ | |
$staffList = $this->executeQueryForList($sqlStaff); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
$urlUserType = ""; | |
if($messages->senderType == "STUDENT"){ | |
$senderDetails = StudentService::getInstance()->getStudentDetailsByIdForApi($messages->senderId); | |
}else { | |
$senderDetails = StaffService::getInstance()->getStaffDetailsByIdForApi($messages->senderId); | |
} | |
$senderDetails->departmentName = $senderDetails->department->description?$senderDetails->department->description:$senderDetails->department->name; | |
if(!empty($staffList)){ | |
$notification = null; | |
$notification = new Notification(); | |
$notification->context = NotificationContextConstant::MAILBOX; | |
$notification->feature = NotificationFeatureConstant::MESSAGE_SENT_THROUGH_MAILBOX; | |
$notification->recipientType = UserType::STAFF; | |
// $notification->smsDeferred = 0; | |
$notification->createdBy = 0; | |
$notification->creatorType = UserType::STAFF; | |
foreach ($staffList as $staff){ | |
$recipient = null; | |
$recipient = new NotificationRecipient(); | |
$recipient->recipientId = $staff->userId; | |
$recipient->recipientType = UserType::STAFF; | |
$recipient->templateParameters = ["userType" => "staff", "userName" => $senderDetails->name, "departmentName" => $senderDetails->departmentName]; | |
$notification->recipient[] = $recipient; | |
} | |
try { | |
NotificationService::getInstance()->sendNotification($notification); | |
} catch (\Exception $e) { | |
//log exception | |
$errorMsg = "Error Code : '".$e->getCode()."' . Error Message : ".$e->getMessage(); | |
error_log($errorMsg); | |
} | |
} | |
if(!empty($studentList)){ | |
$notification = null; | |
$notification = new Notification(); | |
$notification->context = NotificationContextConstant::MAILBOX; | |
$notification->feature = NotificationFeatureConstant::MESSAGE_SENT_THROUGH_MAILBOX; | |
$notification->recipientType = UserType::STUDENT; | |
// $notification->smsDeferred = 0; | |
$notification->createdBy = 0; | |
$notification->creatorType = UserType::STAFF; | |
foreach ($studentList as $student){ | |
$recipient = null; | |
$recipient = new NotificationRecipient(); | |
$recipient->recipientId = $student->userId; | |
$recipient->recipientType = UserType::STUDENT; | |
$recipient->templateParameters = ["userType" => "student", "userName" => $senderDetails->name, "departmentName" => $senderDetails->departmentName]; | |
$notification->recipient[] = $recipient; | |
} | |
try { | |
NotificationService::getInstance()->sendNotification($notification); | |
} catch (\Exception $e) { | |
//log exception | |
$errorMsg = "Error Code : '".$e->getCode()."' . Error Message : ".$e->getMessage(); | |
error_log($errorMsg); | |
} | |
} | |
} | |
} |