Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 176
Template15RevaluationMemoResultGenerator
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 5
812.00
0.00% covered (danger)
0.00%
0 / 176
 __construct
n/a
0 / 0
1
n/a
0 / 0
 getTemplateName
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 processData
0.00% covered (danger)
0.00%
0 / 1
72.00
0.00% covered (danger)
0.00%
0 / 44
 renderRevaluationMemoResult
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 30
 processStudentData
0.00% covered (danger)
0.00%
0 / 1
210.00
0.00% covered (danger)
0.00%
0 / 92
 getExamRegistrationDetailsData
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 7
<?php
// Template Revaluation Memo
namespace com\linways\ec\core\service\RevaluationMemoGenerator;
use com\linways\ec\core\service\StudentMarkListService;
use com\linways\ec\core\service\ExamRegistrationService;
use com\linways\ec\core\request\SearchExamRegistrationRequest;
use com\linways\ec\core\exception\ExamControllerException;
use com\linways\base\util\TwigRenderer;
use com\linways\core\ams\professional\util\PdfUtil;
use com\linways\core\ams\professional\util\CommonUtil;
use com\linways\ec\core\service\CommonExamService;
use com\linways\ec\core\service\GradeSchemeService;
use com\linways\ec\core\service\RevaluationMemoGenerator\RevaluationMemoResultDataGenerator;
use com\linways\ec\core\service\RuleService;
use com\linways\ec\core\request\SearchRuleRequest;
use com\linways\ec\core\request\SearchExamRegistrationBatchRequest;
use com\linways\ec\core\service\ExamRegistrationBatchService;
class Template15RevaluationMemoResultGenerator extends RevaluationMemoResultDataGenerator
{
    public function __construct(){}
     /**
     * get Template Name
     * @param $request
     * @param $templateName
     */
    protected function getTemplateName($request){
        $templateName = "template_15";  
        // $examRegistrationDetails = new \stdClass;
        // $requestForRevaluationDetails = new \stdClass;
        // $requestForRevaluationDetails->id = $request->examRegistrationId;
        // $revaluationDetails = ExamRegistrationService::getInstance()->getCurrentExamRevaluationDetails($requestForRevaluationDetails);
        // if($revaluationDetails){
        //     $requestForRegistrationDetails = new \stdClass;
        //     $requestForRegistrationDetails->examRegistrationId = $revaluationDetails->parentExamRegstrationId;
        //     $examRegistrationDetailsArray = ExamRegistrationService::getInstance()->searchDetailedExamRegistrationDetails($requestForRegistrationDetails);
        //     $examRegistrationDetails->courseTypeName = $examRegistrationDetailsArray[0]->groups[0]->courseTypeName;
        //     if($examRegistrationDetails->courseTypeName == "PG"){
        //         $templateName = "template_15_PG";   
        //     }
        // }
        return $templateName;
    }
    /**
     * Process Student data college base
     * @param $request
     */
    protected function processData($request){
        $response = new \stdClass;
        $studentsMarkDetails = [];
        $studentsMarkDetails = StudentMarkListService::getInstance()->getAllRegistredStudentRevaluationMarkDetails($request);
        if(empty($studentsMarkDetails)){
            throw new ExamControllerException(ExamControllerException::NO_DETAILS_FOUND,"No Details Found");
        }
        $responseOfStudentData = $this->processStudentData($studentsMarkDetails, $request);
        $response->studentData = $responseOfStudentData->studentsDetails;
        $response->examRegistrationData = $this->getExamRegistrationDetailsData($request);
        $response->collegeAndOtherData = CommonExamService::getInstance()->getCollegeDetails($request);
        $searchRuleRequest = new SearchRuleRequest;
        $searchRuleRequest->name = "PRINCIPAL_SIGNATURE_CONDITION";
        $ruleSettings = reset(RuleService::getInstance()->searchRule($searchRuleRequest))->rule;
        $batchSearchRequest = new SearchExamRegistrationBatchRequest();
        $batchSearchRequest->examRegistrationId = $request->examRegistrationId;
        $batchSearchRequest->groupId = reset($studentsMarkDetails)->studentDetails->batchId;
        $batchDetails = reset(ExamRegistrationBatchService::getInstance()->searchExamRegistrationBatch($batchSearchRequest));
        $baseUrl = "http://".$_SERVER['HTTP_HOST'];
        $collegeCode = $GLOBALS['COLLEGE_CODE'];
        $response->collegeAndOtherData->principalVar = "Principal-in-Charge";
        $response->collegeAndOtherData->hideSealAndSign = false;
        if( $batchDetails->properties->publishingStartDate){
            foreach($ruleSettings->principalNames as $principalName){
                if($principalName->fromDate <= $batchDetails->properties->publishingStartDate && $principalName->toDate >= $batchDetails->properties->publishingStartDate){
                    $response->collegeAndOtherData->principalName = $principalName->principalName;
                    $response->collegeAndOtherData->principalSign = "$baseUrl/libcommon/images/college/$collegeCode/$principalName->principalSign.png";
                    $response->collegeAndOtherData->principalVar = $principalName->principalVarName ?? 'Principal';
                }
            }
            if( $ruleSettings->hideSealSignDate < $batchDetails->properties->publishingStartDate){
                $response->collegeAndOtherData->hideSealAndSign = true;
            }
        }
        if(!$request->displayContentOptions->markListDate ){
            $request->displayContentOptions->markListDate = date("d-m-Y");
        }
        else{
            $request->displayContentOptions->markListDate = date("d-m-Y", strtotime($request->displayContentOptions->markListDate));
        }
        $response->displayContentOptions = $request->displayContentOptions;
        // $response->isShowMarkAndGradeInRevaluation = $request->isShowMarkAndGradeInRevaluation ? true : false;
        // check only grade change in revaluation 
        $response->isShowMarkAndGradeInRevaluation = false;
        $response->collegeAndOtherData->isHeaderEnabled = CommonExamService::getInstance()->isValidURL($response->collegeAndOtherData->collegeHeader);
        return $response;
    }
    /**
     * Render Program Result
     *
     * @param $templateName
     * @param Object $data
     * @return Object
     */
    protected function renderRevaluationMemoResult($templateName, $data){
        if(empty($data)){
            throw new ExamControllerException(ExamControllerException::NO_DETAILS_FOUND,"No Details Found");
        }
        else{
            $responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/RevaluationMemo/Template15/$templateName.twig"), [ 'data'=>$data ]);
            $prtContent = NULL;
            $responseHtml .= '';
            $prtContent .= '<html><head>';
            $prtContent .= "<link href='https://fonts.googleapis.com/css2?family=Times New Roman:ital,wght@0,400;0,700;1,400;1,700&display=swap' rel='stylesheet'>";
            $prtContent .= '</head><title>Revaluation Memo</title><body>';
            $prtContent .= $responseHtml;
            $prtContent .= '</body></html>';
            $totalWidth = 210;
            $totalHeight = 297;
            $options = array(
                'page-width'     => $totalWidth."mm",
                'page-height'    => $totalHeight."mm",
                'dpi'            => 96,
                'margin-top' => "9mm",
                'margin-left' => "1mm",
                'margin-right' => "1mm",
                'margin-bottom' => "9mm",
                // 'binary' => "/usr/local/bin/wkhtmltopdf", // For Mac
                'user-style-sheet' => realpath(DOCUMENT_ROOT . "/libcommon/bootstrap/css/bootstrap.min.css")
            );
            $programResult = new \stdClass;
            $programResult->dispalyHtmlData = $prtContent;
            $programResult->printData = PdfUtil::renderPdf($prtContent, $options);
        return  $programResult;
        }
    }
    /**
     * processStudentData
     * @param $studentsMarkDetails
     * @param $studentsDetails
     */
    protected function processStudentData($studentsMarkDetails, $request = null){
        $response = new \stdClass;
        $studentsDetails = [];
        // $isShowMarkAndGradeInRevaluation = $request->isShowMarkAndGradeInRevaluation ? true : false;
        // check only grade change in revaluation 
        $isShowMarkAndGradeInRevaluation  = false;
        foreach($studentsMarkDetails as $student){
            // $isShowMarkAndGradeInRevaluation = $student->studentDetails->courseTypeName == 'PG' ? false : $isShowMarkAndGradeInRevaluation;
            $studentsDetails[$student->id]->id = $student->id;
            $studentsDetails[$student->id]->registerNo = $student->studentDetails->registerNo;
            $studentsDetails[$student->id]->rollNo = $student->studentDetails->rollNo;
            $studentsDetails[$student->id]->degreeName = $student->studentDetails->degree;
            $studentsDetails[$student->id]->name = $student->studentDetails->name;
            $student->academicTerm = reset($student->academicTerms);
            foreach($student->academicTerm->subjects as $subject){
                $studentsDetails[$student->id]->subjects[$subject->id]->id = $subject->id;
                $studentsDetails[$student->id]->subjects[$subject->id]->name = $subject->name;
                $studentsDetails[$student->id]->subjects[$subject->id]->code = $subject->code;
                $studentsDetails[$student->id]->subjects[$subject->id]->externalMaxMark = $subject->externalMaxMark;
                $studentsDetails[$student->id]->subjects[$subject->id]->internalMaxMark = $subject->internalMaxMark;
                $studentsDetails[$student->id]->subjects[$subject->id]->internalMark = $subject->internalMark;
                $currentExamRegistrationDetails = "";
                $currentExamRegistrationDetails = reset(array_filter($subject->subjectMarkHistory,function($value)use($student){
                    return $value->examRegistrationId == $student->studentDetails->parentExamRegistrationId;
                }));
                $searchRequestForGradeScheme = new \stdClass();
                $searchRequestForGradeScheme->groupId = $student->studentDetails->batchId;
                $searchRequestForGradeScheme->academicTermId = $student->academicTerm->id;
                $searchRequestForGradeScheme->academicPaperSubjectId = $subject->id;
                $subjectGradeSchemeArray = GradeSchemeService::getInstance()->getAllSubjectGradeSchemesByRequest($searchRequestForGradeScheme);
                $subjectGradeKey = array_search($subject->id, array_column( $subjectGradeSchemeArray, "id"));
                $gradeDetails = [];
                if($subjectGradeKey || $subjectGradeKey === 0){
                    $gradeDetails = $subjectGradeSchemeArray[$subjectGradeKey]->grades;
                }
                $maxGradePercent =  max(array_column($gradeDetails,"rangeTo"));
                $schemeType = "PERCENTAGE";
                $passCriteriaArray[$subject->id] = GradeSchemeService::getInstance()->getSubjectPassCriteriaByAcademicPaperSubject($subject->id, $schemeType);
                $studentsDetails[$student->id]->subjects[$subject->id]->isChangeMarkByRevaluation = false;
                $studentsDetails[$student->id]->subjects[$subject->id]->isChangeMarkByRevaluation = false;
                $studentsDetails[$student->id]->subjects[$subject->id]->revaluationGrade = $currentExamRegistrationDetails->revaluationGrade;
                $studentsDetails[$student->id]->subjects[$subject->id]->revaluationMark = $currentExamRegistrationDetails->revaluationMark;
                $studentsDetails[$student->id]->subjects[$subject->id]->externalMarkObtainedInExam = $currentExamRegistrationDetails->externalMarkObtainedInExam;
                $studentsDetails[$student->id]->subjects[$subject->id]->externalMarkObtainedInExamGrade = $currentExamRegistrationDetails->externalMarkObtainedInExamGrade;
                if((int)$currentExamRegistrationDetails->externalMarkObtainedInExam < (int)$currentExamRegistrationDetails->revaluationMark){
                   
                    $checkPassPercentCriteria = new \stdClass();
                    $checkPassPercentCriteria->courseTypeMethod = $student->studentDetails->courseType;
                    $checkPassPercentCriteria->schemeType = $subjectGradeSchemeArray[$subjectGradeKey]->schemeType ? $subjectGradeSchemeArray[$subjectGradeKey]->schemeType : "PERCENTAGE";
                    $checkPassPercentCriteria->isInternal = $subject->isInternal;
                    $checkPassPercentCriteria->internalMaxMark = $subject->internalMaxMark;
                    $checkPassPercentCriteria->isExternal = $subject->isExternal;
                    $checkPassPercentCriteria->externalMaxMark = $subject->externalMaxMark;
                    $checkPassPercentCriteria->internalMark = round($subject->internalMark, 2 );
                    $checkPassPercentCriteria->passPercentConfig = $passCriteriaArray[$subject->id];
                    $checkPassPercentCriteria->externalMark = round ( $studentsDetails[$student->id]->subjects[$subject->id]->externalMarkObtainedInExam, 2 );
                    $checkPassPercentCriteria->maxGradePercent = $maxGradePercent;
                    $checkPassPercentCriteria->gradeDetails = $gradeDetails;
                    $externalMarkObtainedInExamPassCriteria = CommonExamService::getInstance()->checkIsFailedByPassPercentCreditCriteria ( $checkPassPercentCriteria );
                    $studentsDetails[$student->id]->subjects[$subject->id]->externalMarkObtainedInExamUpdated = $externalMarkObtainedInExamPassCriteria->grade->totalExternalMark;
                    $studentsDetails[$student->id]->subjects[$subject->id]->externalMarkObtainedInExamGradeUpdated = $externalMarkObtainedInExamPassCriteria->grade->letterGrade;
                    $checkPassPercentCriteria = new \stdClass();
                    $checkPassPercentCriteria->courseTypeMethod = $student->studentDetails->courseType;
                    $checkPassPercentCriteria->schemeType = $subjectGradeSchemeArray[$subjectGradeKey]->schemeType ? $subjectGradeSchemeArray[$subjectGradeKey]->schemeType : "PERCENTAGE";
                    $checkPassPercentCriteria->isInternal = $subject->isInternal;
                    $checkPassPercentCriteria->internalMaxMark = $subject->internalMaxMark;
                    $checkPassPercentCriteria->isExternal = $subject->isExternal;
                    $checkPassPercentCriteria->externalMaxMark = $subject->externalMaxMark;
                    $checkPassPercentCriteria->internalMark = round($subject->internalMark, 2 );
                    $checkPassPercentCriteria->passPercentConfig = $passCriteriaArray[$subject->id];
                    $checkPassPercentCriteria->externalMark = round ( $studentsDetails[$student->id]->subjects[$subject->id]->revaluationMark, 2 );
                    $checkPassPercentCriteria->maxGradePercent = $maxGradePercent;
                    $checkPassPercentCriteria->gradeDetails = $gradeDetails;
                    $revaluationMarkPassCriteria = CommonExamService::getInstance()->checkIsFailedByPassPercentCreditCriteria ( $checkPassPercentCriteria );
                    
                    $studentsDetails[$student->id]->subjects[$subject->id]->revaluationMarkUpdated = $revaluationMarkPassCriteria->grade->totalExternalMark;
                    $studentsDetails[$student->id]->subjects[$subject->id]->revaluationGradeUpdated = $revaluationMarkPassCriteria->grade->letterGrade;
                    if(($studentsDetails[$student->id]->subjects[$subject->id]->externalMarkObtainedInExamUpdated  < $studentsDetails[$student->id]->subjects[$subject->id]->revaluationMarkUpdated )){
                        if(!$isShowMarkAndGradeInRevaluation){
                            if($studentsDetails[$student->id]->subjects[$subject->id]->revaluationGradeUpdated && $studentsDetails[$student->id]->subjects[$subject->id]->externalMarkObtainedInExamGradeUpdated ){
                                if($studentsDetails[$student->id]->subjects[$subject->id]->revaluationGradeUpdated != $studentsDetails[$student->id]->subjects[$subject->id]->externalMarkObtainedInExamGradeUpdated ){
                                    $studentsDetails[$student->id]->subjects[$subject->id]->isChangeMarkByRevaluation = true;
                                }
                            }
                        }
                        else{
                            $studentsDetails[$student->id]->subjects[$subject->id]->isChangeMarkByRevaluation = true;
                        }
                    }
                }
            }
        }
        $studentsDetails = array_values($studentsDetails); 
        foreach($studentsDetails as $student){
            $student->subjects = array_values($student->subjects); 
        }
        $response->studentsDetails = $studentsDetails;
        return $response;
    }
    protected function getExamRegistrationDetailsData($request){
        $examRegistrationDetails = new \stdClass;
        $requestForExamRegistration = new SearchExamRegistrationRequest;
        $requestForExamRegistration->id = $request->examRegistrationId;
        $examRegistrationDetails = reset(ExamRegistrationService::getInstance()->searchExamRegistration($requestForExamRegistration));      
        $examRegistrationDetails->properties->memoDate = $examRegistrationDetails->properties->memoDate ? date("d-m-Y", strtotime($examRegistrationDetails->properties->memoDate)) : "";
        return $examRegistrationDetails;
    }
    
   
}