Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
CRAP | |
0.00% |
0 / 131 |
| IntimationService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
812.00 | |
0.00% |
0 / 131 |
| __construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
| sendSmsIntimationBulk | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 9 |
|||
| sendIntimationRecursive | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 25 |
|||
| getStudentBasicDetails | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 7 |
|||
| sendIntimation | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 12 |
|||
| sendBulkIntimationRecursive | |
0.00% |
0 / 1 |
72.00 | |
0.00% |
0 / 41 |
|||
| sendIntimationForStaffInDigitalValuation | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 8 |
|||
| sendBulkIntimationForStaffRecursive | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 26 |
|||
| <?php | |
| namespace com\linways\ec\core\service; | |
| use com\linways\base\util\StringUtil; | |
| use com\linways\base\util\MakeSingletonTrait; | |
| use com\linways\ec\core\dto\IntimationData; | |
| use com\linways\core\ams\professional\logging\AMSLogger; | |
| use com\linways\ec\core\logging\Events; | |
| use com\linways\ec\core\logging\entities\Staff; | |
| use com\linways\ec\core\constant\StatusConstants; | |
| use com\linways\ec\core\util\ExamControllerIntimationUtil; | |
| use com\linways\ec\core\dto\IntimationDataProperties; | |
| use com\linways\core\ams\professional\service\CommonService; | |
| use com\linways\core\ams\professional\constant\Modules; | |
| use com\linways\core\ams\professional\util\CommonUtil; | |
| use PDO; | |
| class IntimationService extends BaseService | |
| { | |
| use MakeSingletonTrait; | |
| /** | |
| * @var \Monolog\Logger | |
| */ | |
| private $logger = null; | |
| public function __construct() | |
| { | |
| $this->logger = AMSLogger::getLogger('exam-controller-log'); | |
| } | |
| /** | |
| * Send SMS intimation for bulk students | |
| * | |
| * @param IntimationData $intimationData | |
| * @return void | |
| */ | |
| private function sendSmsIntimationBulk(IntimationData $intimationData) | |
| { | |
| /** | |
| * Send SMS to array of recipients | |
| */ | |
| $recipientMobileNo = array_filter(array_column($intimationData->recipientList, 'mobileNo')); | |
| try { | |
| if (count($recipientMobileNo) > 0 && in_array("SMS", $intimationData->intimationProperties->intimationTypes)) { | |
| $this->sendIntimationRecursive($recipientMobileNo, $intimationData); | |
| } | |
| } catch (\Exception $e) { | |
| } | |
| } | |
| /** | |
| * Recursive function to send SMS intimation | |
| * | |
| * @param Array $recipientMobileNo | |
| * @param IntimationData $intimationData | |
| * @return void | |
| */ | |
| private function sendIntimationRecursive(array $recipientMobileNo, IntimationData $intimationData) | |
| { | |
| try { | |
| $phoneNumberList = array_slice($recipientMobileNo, 0, 10); | |
| AMSLogger::log_info($this->logger,Events::EC_SEND_SMS_INTIMATION_BULK, [ | |
| "phoneNumberList" => $phoneNumberList, | |
| "IntimationData" => $intimationData, | |
| "markedStaff" => new Staff(["id" => $GLOBALS['userId']]), | |
| "status" => StatusConstants::SUCCESS | |
| ]); | |
| ExamControllerIntimationUtil::sendSmsAsync($phoneNumberList, $intimationData->intimationProperties->smsContent, $intimationData->intimationProperties->dltId); | |
| $recipientMobileNo = array_slice($recipientMobileNo, 10); | |
| if (!empty($recipientMobileNo)) { | |
| $this->sendIntimationRecursive($recipientMobileNo, $intimationData); | |
| } | |
| } catch (\Exception $e) { | |
| AMSLogger::log_error($this->logger,Events::EC_SEND_SMS_INTIMATION_BULK, [ | |
| "phoneNumberList" => $phoneNumberList, | |
| "IntimationData" => $intimationData, | |
| "markedStaff" => new Staff(["id" => $GLOBALS['userId']]), | |
| "errorCode" => $e->getCode(), | |
| "errorMessage" => $e->getMessage(), | |
| "status" => StatusConstants::FAILURE | |
| ]); | |
| } | |
| } | |
| /** | |
| * Fetch student basic details for SEND intimation | |
| * | |
| * @param [type] $studentIdList | |
| * @return Array | |
| */ | |
| private function getStudentBasicDetails($studentIdList) | |
| { | |
| $sql = "SELECT studentId, studentName as name, studentEmail as emailId, studentPhone as mobileNo from studentaccount sa inner join student_program_account spa on sa.studentID = spa.student_id where spa.id in (" . implode(" , ", $studentIdList) . ")"; | |
| try { | |
| return $this->executeQueryForList($sql); | |
| } catch (\Exception $e) { | |
| // throw new AcademicException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| public function sendIntimation($intimationData) | |
| { | |
| try { | |
| // TODO : we may need to fetch student details recursively | |
| if( !$intimationData->intimationData->hasStudentDetails){ | |
| $studentDataList = $this->getStudentBasicDetails($intimationData->studentIdList); | |
| } | |
| else{ | |
| $studentDataList = $intimationData->studentList; | |
| } | |
| $this->sendBulkIntimationRecursive($intimationData, $studentDataList); | |
| } catch (\Exception $e) { | |
| // throw new AcademicException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| private function sendBulkIntimationRecursive($intimationData, $allStudentList) | |
| { | |
| try { | |
| $studentDataList = array_slice($allStudentList, 0, 10); | |
| $req = new IntimationData(); | |
| $req->recipientList = $studentDataList; | |
| $req->intimationProperties = new IntimationDataProperties(); | |
| $req->intimationProperties->intimationTypes = $intimationData->intimationData->intimationTypes; | |
| $req->intimationProperties->smsContent = $intimationData->intimationData->smsContent; | |
| $req->intimationProperties->dltId = $intimationData->intimationData->dltId; | |
| $smsContent = $intimationData->intimationData->smsContent; | |
| if (!str_contains($smsContent, "{{")) { | |
| // string contains does not contain any tag replaceable data | |
| $this->sendSmsIntimationBulk($req); | |
| } | |
| if (str_contains($smsContent, "{{")) { | |
| foreach ($studentDataList as $studentDetails) { | |
| $req->recipientList = [$studentDetails]; | |
| if (str_contains($smsContent, "{{")) { | |
| $smsMessage = StringUtil::replace_tags($smsContent, array( | |
| 'studentName' => $studentDetails->name, | |
| 'academicOrderNo' => strtolower(CommonUtil::ordinalNumberInWords( $studentDetails->termOrderNo )), | |
| 'examDate' => date("d-m-Y", strtotime($studentDetails->examDate)), | |
| 'registrationStartDate' => date("d-m-Y", strtotime($studentDetails->registrationStartDate)), | |
| 'collegeName' => $intimationData->intimationData->collegeName, | |
| 'autonomous' => $intimationData->intimationData->autonomous, | |
| 'place' => $intimationData->intimationData->place | |
| )); | |
| $req->intimationProperties->smsContent = $smsMessage; | |
| $this->sendSmsIntimationBulk($req); | |
| } | |
| } | |
| } | |
| } catch (\Exception $e) { | |
| } | |
| try { | |
| $allStudentList = array_slice($allStudentList, 10); | |
| if (!empty($allStudentList)) { | |
| $this->sendBulkIntimationRecursive($intimationData, $allStudentList); | |
| } | |
| } catch (\Exception $e) { | |
| } | |
| } | |
| public function sendIntimationForStaffInDigitalValuation($intimationData){ | |
| try { | |
| $staffDataList = $intimationData->staffList; | |
| if(!empty($staffDataList)){ | |
| $this->sendBulkIntimationForStaffRecursive($intimationData, $staffDataList); | |
| } | |
| } catch (\Exception $e) { | |
| // throw new AcademicException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| private function sendBulkIntimationForStaffRecursive($intimationData, $staffDataList){ | |
| try { | |
| $req = new IntimationData(); | |
| $req->recipientList = $staffDataList; | |
| $req->intimationProperties = new IntimationDataProperties(); | |
| $req->intimationProperties->intimationTypes = $intimationData->intimationData->intimationTypes; | |
| $req->intimationProperties->smsContent = $intimationData->intimationData->smsContent; | |
| $req->intimationProperties->dltId = $intimationData->intimationData->dltId; | |
| $smsContent = $intimationData->intimationData->smsContent; | |
| foreach ($staffDataList as $staffDetails) { | |
| $smsTags = [ | |
| 'scriptCount' => $staffDetails->scriptCount, | |
| 'subjectDesc' => $staffDetails->subjectDesc, | |
| 'subjectCode' => $staffDetails->subjectCode, | |
| 'valuationStartDate' => $staffDetails->valuationStartDate | |
| ]; | |
| $finalTags = []; | |
| foreach ($intimationData->intimationData->tags as $tag) { | |
| $tag = str_replace(['{{', '}}'], '', $tag->tag); | |
| $finalTags[$tag] = $smsTags[$tag]; | |
| } | |
| $req->intimationProperties->smsContent = StringUtil::replace_tags($smsContent, $finalTags); | |
| $this->sendSmsIntimationBulk($req); | |
| } | |
| } catch (\Exception $e) { | |
| } | |
| } | |
| } |