Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 92 |
| RuleEvaluationService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
552.00 | |
0.00% |
0 / 92 |
| __construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| evaluateRule | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 26 |
|||
| processOperand | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 16 |
|||
| getRuleConstantValue | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 20 |
|||
| solveEquation | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 20 |
|||
| getAttendance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 8 |
|||
| <?php | |
| namespace com\linways\ec\core\service; | |
| use com\linways\base\util\MakeSingletonTrait; | |
| use com\linways\ec\core\constant\StatusConstants; | |
| use com\linways\ec\core\exception\ExamControllerException; | |
| use com\linways\ec\core\request\SearchRuleRequest; | |
| use com\linways\core\ams\professional\service\AttendanceService; | |
| use com\linways\core\ams\professional\service\CommonService; | |
| use com\linways\core\ams\professional\service\examcontroller\ExamRegistrationService; | |
| class RuleEvaluationService extends BaseService | |
| { | |
| use MakeSingletonTrait; | |
| private $operandValue = []; | |
| private function __construct() { | |
| $operandValue = []; | |
| } | |
| /** | |
| * Evaluate rule | |
| * @param Object $rule | |
| * @param RuleData $data | |
| * @return Boolean | |
| */ | |
| public function evaluateRule ($rule, RuleData $data) | |
| { | |
| return true; // Only for testing and demo purpose | |
| $rule = $this->realEscapeObject($rule); | |
| $data = $this->realEscapeObject($data); | |
| // foreach ($rule as $ruleProp => $ruleValue) { | |
| // switch ($ruleProp) { | |
| // case 'OPARAND': | |
| // foreach ($rule->OPARAND as $oparand => $value) { | |
| // $this->evaluateRule($value); | |
| // } | |
| // break; | |
| // case 'EQUATION': | |
| // $this->solveEquation($value); | |
| // break; | |
| // case 'FUNCTION': | |
| // $this->callFunction($value); | |
| // break; | |
| // case 'PARAM': | |
| // $this->getValue($value); | |
| // break; | |
| // case 'ROUND_OFF': | |
| // $this->roundOffValue($value); | |
| // break; | |
| // default: | |
| // $this->getValue($value); | |
| // break; | |
| // } | |
| // } | |
| try{ | |
| $result = null; | |
| if (!empty($rule->EQUATION)) { | |
| $equationOparandNames = []; | |
| foreach ($rule->OPARAND as $oparandName => $oparandValue) { | |
| $equationOparandNames[$oparandName] = $oparandName; | |
| $operandValue[$oparandName] = $this->processOperand($oparandValue, $data); | |
| } | |
| $result = $this->solveEquation($rule->EQUATION, $equationOparandNames); | |
| } | |
| if (!empty($rule->FUNCTION)) { | |
| $operandValue[$rule->PARAM] = $this->processOperand($oparandValue); | |
| $result = $this->callFunction($rule->FUNCTION, $rule->PARAM); | |
| } | |
| if (!empty($rule->ROUND_OFF)) { | |
| $result = $this->roundOffValue($result, $rule->ROUND_OFF); | |
| } | |
| }catch(\Exception $e) { | |
| throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
| } | |
| return $result; | |
| } | |
| /** | |
| * Process Operand | |
| * @param Object $rule | |
| * @return Boolean | |
| */ | |
| private function processOperand ($oparand, $data) | |
| { | |
| try{ | |
| $result = null; | |
| if (is_string($oparand)) { | |
| return $this->getRuleConstantValue($oparand, $data); | |
| } | |
| else if (!empty($oparand)){ | |
| $result = $this->evaluateRule($oparand, $data); | |
| } | |
| else { | |
| // throw Exception "invalid rule" | |
| } | |
| }catch(\Exception $e) { | |
| throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
| } | |
| return $result; | |
| } | |
| /** | |
| * get Rule constant value | |
| * @param String $ruleConstant | |
| * @return $value | |
| */ | |
| private function getRuleConstantValue ($ruleConstant, $data) | |
| { | |
| try{ | |
| $result = null; | |
| switch ($ruleConstant) { | |
| case 'ATTENDANCE': | |
| return $this->getAttendance($data); | |
| break; | |
| case 'OPEN_COURSE_APPLIED': | |
| return $this->getOpenCourseAppliedStatus($data); | |
| break; | |
| case 'MAX_SUBJECT_BLOCK_COUNT': | |
| return $this->getSubjectBlockCount($data); | |
| break; | |
| default: | |
| // Throw exception invalid constant! | |
| break; | |
| } | |
| }catch(\Exception $e) { | |
| throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
| } | |
| } | |
| /** | |
| * get Rule constant value | |
| * @param String $ruleConstant | |
| * @return $value | |
| */ | |
| private function solveEquation ($equation, $data) | |
| { | |
| try{ | |
| $result = null; | |
| switch ($ruleConstant) { | |
| case 'ATTENDANCE': | |
| return $this->getAttendance($data); | |
| break; | |
| case 'OPEN_COURSE_APPLIED': | |
| return $this->getOpenCourseAppliedStatus($data); | |
| break; | |
| case 'MAX_SUBJECT_BLOCK_COUNT': | |
| return $this->getSubjectBlockCount($data); | |
| break; | |
| default: | |
| // Throw exception invalid constant! | |
| break; | |
| } | |
| }catch(\Exception $e) { | |
| throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
| } | |
| } | |
| /** | |
| * get student attendance percentage | |
| * @param String $ruleConstant | |
| * @return $value | |
| */ | |
| private function getAttendance ($data) | |
| { | |
| try{ | |
| $attendanceDetails = null; | |
| // $attendanceDetails = AttendanceService::getInstance()->getStudentAttendancePercentageDetails($data->studentId, $examregID); | |
| }catch(\Exception $e) { | |
| throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
| } | |
| return $attendanceDetails; | |
| } | |
| } |