Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 154 |
| V3ToV4DataMigrationService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
992.00 | |
0.00% |
0 / 154 |
| __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 |
|||
| migrateFromV3ToV4 | |
0.00% |
0 / 1 |
380.00 | |
0.00% |
0 / 114 |
|||
| custom_array_diff | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 5 |
|||
| updateBatchMember | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 25 |
|||
| <?php | |
| namespace com\linways\core\ams\professional\service\v3Tov4Migration; | |
| use com\linways\core\ams\professional\exception\ProfessionalException; | |
| use stdClass; | |
| use com\linways\base\util\SecurityUtils; | |
| use com\linways\core\ams\professional\service\SemesterService; | |
| use com\linways\core\ams\professional\service\BaseService; | |
| use com\linways\core\ams\professional\service\v3Tov4Migration\SemesterServiceTest; | |
| use com\linways\core\ams\professional\service\v3Tov4Migration\V3MigrationService; | |
| class V3ToV4DataMigrationService extends BaseService | |
| { | |
| // /Condition 1 - Presence of a static member variable | |
| private static $_instance = null; | |
| private $mapper = []; | |
| // /Condition 2 - Locked down the constructor | |
| private function __construct() | |
| { | |
| $this->mapper = null; | |
| } | |
| // 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; | |
| } | |
| public function migrateFromV3ToV4($request) | |
| { | |
| try { | |
| ini_set('memory_limit', '-1'); | |
| ini_set('max_execution_time', 0); // Set max_execution_time to unlimited (or a very high value) | |
| // $currentTimestamp = date('Y-m-d H:i:s'); | |
| $currentTimestamp = $request->dateTime; | |
| // if(empty($dateTime)){ | |
| // $dateTime = date('Y-m-d H:i:s'); | |
| // } | |
| // $currentTimestamp = "2024-08-01 12:12:05"; | |
| /***********************************BEGINING OF BATCH RELATION**************************************************/ | |
| echo("\n*********************Creating Batch Relation*********************************"); | |
| $batchCondition = ""; | |
| $batches = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','batches', $batchCondition); | |
| if($batches){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($batches, 'batches'); | |
| } | |
| echo("\n*********************End Batch Relation*********************************"); | |
| /***********************************END OF BATCH RELATION**************************************************/ | |
| /***********************************BEGINING OF STAFF RELATION**************************************************/ | |
| echo("\n*********************Creating Staff Relation*********************************"); | |
| $subjectCondition = ""; | |
| $hr_designations = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','hr_designations', $subjectCondition); | |
| if($hr_designations){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($hr_designations, 'hr_designations'); | |
| } | |
| $studentWhereCondition = ""; | |
| // $studentWhereCondition = " WHERE (staffCreateDate >= '$currentTimestamp' OR updated_date >= '$currentTimestamp')"; | |
| $V3Students = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','staffaccounts', $studentWhereCondition); | |
| if($V3Students){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($V3Students, 'staffaccounts'); | |
| } | |
| echo("\n*********************End Staff Relation*********************************"); | |
| /***********************************END OF STAFF RELATION*********************************************************/ | |
| /***********************************BEGINING OF STUDENT RELATION**************************************************/ | |
| echo("\n*********************Creating Student Relation*********************************"); | |
| //v3 batch change check | |
| $studentWhereCondition = " WHERE studentLastupdate >= '$currentTimestamp'"; | |
| $V3UpdatedStudents = V3MigrationService::getInstance()->getAllDetailsFromRequestTable("studentID, CONCAT('B-',batchID,'-S-',studentID) as batchStudentId",'studentaccount', $studentWhereCondition); | |
| if( $V3UpdatedStudents ){ | |
| $updatedStudentIds = array_column($V3UpdatedStudents, 'studentID'); | |
| $studentWhereCondition = " WHERE studentID IN (".implode(',', $updatedStudentIds).")"; | |
| $V4UpdatedStudents = V4MigrationService::getInstance()->getAllDetailsFromRequestTable("studentID, CONCAT('B-',batchID,'-S-',studentID) as batchStudentId",'studentaccount', $studentWhereCondition); | |
| $v3UpdatedBatchStudentList = $this->custom_array_diff($V3UpdatedStudents, $V4UpdatedStudents,'batchStudentId'); | |
| if($v3UpdatedBatchStudentList){ | |
| $this->updateBatchMember($v3UpdatedBatchStudentList, 0) ; | |
| } | |
| } | |
| //add v3 student details to v4 | |
| $studentWhereCondition = " WHERE (studentCreateTime >= '$currentTimestamp' OR studentLastupdate >= '$currentTimestamp')"; | |
| $V3Students = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','studentaccount', $studentWhereCondition); | |
| if($V3Students){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($V3Students, 'studentaccount'); | |
| } | |
| //identifying deleted students from v4 | |
| $condtion = ''; | |
| $V3StudentIds = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('studentID', 'studentaccount',$condtion); | |
| $V4StudentIds = V4MigrationService::getInstance()->getAllDetailsFromRequestTable('studentID', 'studentaccount',$condtion); | |
| $v3DeletedStudentList = $this->custom_array_diff($V3StudentIds, $V4StudentIds,'studentID'); | |
| if($v3DeletedStudentList){ | |
| $this->updateBatchMember($v3DeletedStudentList, 1) ; | |
| } | |
| //adding student program account | |
| V4MigrationService::getInstance()->insertStudentProgramAccount($currentTimestamp); | |
| //adding student batch members | |
| V4MigrationService::getInstance()->insertBatchGroupMembers($currentTimestamp); | |
| echo("\n*********************End Student Relation*********************************"); | |
| /***********************************END OF STUDENT RELATION**************************************************/ | |
| /***********************************BEGINING OF SUBJECT RELATION**************************************************/ | |
| echo("\n*********************Create Subject Relation*********************************"); | |
| $subjectCondition = " WHERE (created_date >= '$currentTimestamp' OR updated_date >= '$currentTimestamp')"; | |
| $v3Subjects = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','subjects', $subjectCondition); | |
| if($v3Subjects){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($v3Subjects, 'subjects'); | |
| } | |
| $subjectCondition = " WHERE (subjectCreateDate >= '$currentTimestamp' OR updated_date >= '$currentTimestamp')"; | |
| $v3pseudosubjects = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','pseudosubjects', $subjectCondition); | |
| if($v3pseudosubjects){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($v3pseudosubjects, 'pseudosubjects'); | |
| } | |
| $subjectCondition = " WHERE (createdDate >= '$currentTimestamp' OR updatedDate >= '$currentTimestamp')"; | |
| $v3sbs_relation = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','sbs_relation', $subjectCondition); | |
| if($v3sbs_relation){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($v3sbs_relation, 'sbs_relation'); | |
| } | |
| $subjectCondition = " WHERE (created_date >= '$currentTimestamp' OR updated_date >= '$currentTimestamp')"; | |
| $v3pseudosubjectsSbs = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','pseudosubjects_sbs', $subjectCondition); | |
| if($v3pseudosubjectsSbs){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($v3pseudosubjectsSbs, 'pseudosubjects_sbs'); | |
| } | |
| $subjectCondition = " WHERE (created_date >= '$currentTimestamp' OR updated_date >= '$currentTimestamp')"; | |
| $v3pseudosubjectsStudent = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','pseudosubjects_students', $subjectCondition); | |
| if($v3pseudosubjectsStudent){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($v3pseudosubjectsStudent, 'pseudosubjects_students'); | |
| } | |
| $subjectCondition = " WHERE (failedDate >= '$currentTimestamp' OR updated_date >= '$currentTimestamp')"; | |
| $v3FailedStudents = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','failed_students', $subjectCondition); | |
| if($v3FailedStudents){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($v3FailedStudents, 'failed_students'); | |
| } | |
| $v3SubBatches = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('subbatchID','subbatches', $batchCondition); | |
| $v4SubBatches = V4MigrationService::getInstance()->getAllDetailsFromRequestTable('subbatchID','subbatches', $batchCondition); | |
| $v3SubBatchList = $this->custom_array_diff($v4SubBatches, $v3SubBatches,'subbatchID'); | |
| $batchIds = array_column($v3SubBatchList, 'subbatchID'); | |
| if( $batchIds ){ | |
| $batchCondition = " WHERE subbatchID IN (".implode(',', $batchIds).")"; | |
| $v3SubBatches = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','subbatches', $batchCondition); | |
| if($v3SubBatches){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($v3SubBatches, 'subbatches'); | |
| } | |
| } | |
| $subjectCondition = " WHERE (created_date >= '$currentTimestamp' OR updated_date >= '$currentTimestamp')"; | |
| $v3SubBatchSbs = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','subbatch_sbs', $subjectCondition); | |
| if($v3SubBatchSbs){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($v3SubBatchSbs, 'subbatch_sbs'); | |
| } | |
| $subjectCondition = " WHERE (created_date >= '$currentTimestamp' OR updated_date >= '$currentTimestamp')"; | |
| $v3SubBatchStudent = V3MigrationService::getInstance()->getAllDetailsFromRequestTable('','subbatch_student', $subjectCondition); | |
| if($v3SubBatchStudent){ | |
| V4MigrationService::getInstance()->saveV4InsertScript($v3SubBatchStudent, 'subbatch_student'); | |
| } | |
| V4MigrationService::getInstance()->insertCurriculumDetails($currentTimestamp); | |
| V4MigrationService::getInstance()->insertStaffRelation($currentTimestamp); | |
| V4MigrationService::getInstance()->insertV4Subjects($currentTimestamp); | |
| V4MigrationService::getInstance()->insertClusterRelation($currentTimestamp); | |
| V4MigrationService::getInstance()->insertStudentProgramRelation($currentTimestamp); | |
| echo("\n*********************End Subject Relation*********************************"); | |
| echo"\n\ncompleted all migrations"; | |
| /***********************************END OF SUBJECT RELATION**************************************************/ | |
| } catch (ProfessionalException $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| public function custom_array_diff($arrayV3, $arrayV4, $column) { | |
| $studentIDs = array_column($arrayV3, $column); | |
| $diff = array_filter($arrayV4, function ($value) use ($studentIDs, $column) { | |
| return !in_array($value->$column, $studentIDs); | |
| }); | |
| return $diff; | |
| } | |
| public function updateBatchMember($studentList, $isdelete) { | |
| $deletedStudentIds = array_column($studentList, 'studentID'); | |
| if($deletedStudentIds){ | |
| $studentWhereCondition = " WHERE studentID IN (".implode(',', $deletedStudentIds).")"; | |
| $V4DeletedStudentDetails = V4MigrationService::getInstance()->getAllDetailsFromRequestTable('studentID, batchID', 'studentaccount',$studentWhereCondition); | |
| $gmUpdateId = []; | |
| foreach($V4DeletedStudentDetails as $deletedStudentDetails){ | |
| $gmInnerJoin = " group_members gm INNER JOIN studentaccount s ON s.studentID = gm.student_id INNER JOIN batches b ON b.batchID = s.batchID "; | |
| $gmWhereCond = " WHERE b.batchID = $deletedStudentDetails->batchID AND s.studentID = $deletedStudentDetails->studentID"; | |
| $gmExists = V4MigrationService::getInstance()->getAllDetailsFromRequestTable('gm.id', $gmInnerJoin, $gmWhereCond); | |
| if ($gmExists){ | |
| $gmUpdateId[] = reset($gmExists)->id; | |
| } | |
| } | |
| if($gmUpdateId){ | |
| $gmSetvalue = " SET properties = JSON_SET(properties,'$.academicStatus','REMOVED') "; | |
| $gmCondStr = is_array($gmUpdateId) ? "'" . implode("','",$gmUpdateId) . "'" : "'".$gmUpdateId."'"; | |
| $gmWhereCond = " WHERE id IN ($gmCondStr) "; | |
| $gmExists = V4MigrationService::getInstance()->updateDetailsByRequestTable($gmSetvalue, 'group_members', $gmWhereCond); | |
| } | |
| if( $isdelete ){ | |
| V4MigrationService::getInstance()->deleteRowByRequestTable('studentaccount', $studentWhereCondition); | |
| } | |
| } | |
| return true; | |
| } | |
| } |