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 / 271
Template5FCMC
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 5
4160.00
0.00% covered (danger)
0.00%
0 / 271
 __construct
n/a
0 / 0
1
n/a
0 / 0
 getTemplateName
0.00% covered (danger)
0.00%
0 / 1
20.00
0.00% covered (danger)
0.00%
0 / 22
 processData
0.00% covered (danger)
0.00%
0 / 1
2450.00
0.00% covered (danger)
0.00%
0 / 173
 renderTemplate
0.00% covered (danger)
0.00%
0 / 1
20.00
0.00% covered (danger)
0.00%
0 / 40
 getsecondLanguageName
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 9
 getopenCourseName
0.00% covered (danger)
0.00%
0 / 1
20.00
0.00% covered (danger)
0.00%
0 / 27
<?php
//  MBCET College
namespace com\linways\ec\core\service\FinalConsolidatdMarksCardGenerator;
use com\linways\base\util\TwigRenderer;
use com\linways\ec\core\service\MarksCardService;
use com\linways\ec\core\service\CommonExamService;
use com\linways\core\ams\professional\util\PdfUtil;
use com\linways\core\ams\professional\util\CommonUtil;
use com\linways\ec\core\exception\ExamControllerException;
use com\linways\ec\core\service\FinalConsolidatedReportService;
use com\linways\ec\core\service\FinalConsolidatdMarksCardGenerator\FCMGenerator;
use com\linways\core\ams\professional\service\StudentService;
use com\linways\core\ams\professional\constant\examcontroller\CourseTypeConstants;
use com\linways\ec\core\service\ExamRegistrationService;
use com\linways\ec\core\request\SearchExamRegistrationRequest;
use com\linways\ec\core\service\ExamRegistrationBatchService;
use com\linways\ec\core\request\SearchExamRegistrationBatchRequest;
use com\linways\core\ams\professional\constant\ExamType;
use com\linways\core\ams\professional\service\AmsCustomFieldsService;
use com\linways\core\ams\professional\constant\AmsCustomFieldsEntities;
use com\linways\ec\core\service\StudentMarkListService;
class Template5FCMC extends FCMGenerator
{
    public function __construct(){}
    
    protected function getTemplateName($request){
        $query = "SELECT
            ct.course_Type AS courseType,
            g.properties->>'$.startYear' AS batchStartYear
        FROM
            `groups` g
        INNER JOIN program p ON
            p.id = CAST(g.properties->>'$.programId' AS CHAR)
        INNER JOIN course_type ct ON
            ct.courseTypeID = p.course_type_id
        WHERE g.id IN ('$request->groupId')";
        $courseDetails = $this->executeQueryForObject($query);
        $courseType = $courseDetails->courseType;
        $batchStartYear = $courseDetails->batchStartYear;
        
        $templateName = 'Template5FCMC';
        if ($courseType=="PG" && $batchStartYear >= 2022) {
            $templateName = "Template5FCMC_PG_2022";
        }
        elseif ($courseType=="PG") {
            $templateName = "Template5FCMC_PG_2020";
        }
        return $templateName;
    }
     /**
     * Process Student data college base
     * @param $request
     */
    protected function processData($request){
        $response = new \stdClass;
        $searchRequest = new \stdClass;
        $request->considerRegularSubjectsExcludingMinorHonours = 1;
        $response->studentData = reset(MarksCardService::getInstance()->getConsoliidatedMarksCardData($request))->students;
        $response->studentMoocData = MarksCardService::getInstance()->getStudentRegisteredMoocSubject($request);
        uasort($response->studentData, function ($a, $b) {
            return $a->regNo > $b->regNo;
        });
        $courseType = reset($response->studentData)->courseType;
        $batchStartYear = reset($response->studentData)->admissionYear;
        foreach ($response->studentData as $studentId => $student){
            $student->studentImage  = StudentService::getInstance()->getStudentProfilePic($student->studentId)->docpath;
            $student->dob  = $student->dob ?  date("d/m/Y", strtotime($student->dob)) : '';
            $batchDetails = json_decode($student->properties);
            $uniqueNoReq =  new \stdClass;
            $uniqueNoReq->studentId = $student->studentId;
            $uniqueNoReq->groupId = $student->groupsId;
            if ( $student->courseType == 'PG'){
                $uniqueNoReq->type = 'FINAL_CONSOLIDATED_CERTIFICATE';
            }
            else{
                $uniqueNoReq->type = 'FINAL_CONSOLIDATED_CERTIFICATE_UG';
            } 
            $student->slNo = CommonExamService::getInstance()->getStudentBatchUniqueNumber($uniqueNoReq)->uniqueNo;
            if ($student->slNo) {
                $student->slNo = str_pad($student->slNo, 4, "0", STR_PAD_LEFT);
            }
            if ($student->courseType != 'PG' ) {
                $student->slNo = substr($batchDetails->endYear, -2)."/".$student->slNo;
            }
            $student->courseCompleteWithinYear = 1;
            $finalSem = $batchDetails->finalTermId;
            $student->finalSem = $batchDetails->finalTermId;
            $lastAcademicTerm = reset(array_filter( $student->academicTerms ,function($value)use($finalSem){
                return $value->termId == $finalSem;
            }));
            foreach ($student->academicTerms as $key => $semMark){
                $totalMarkMinimum = 0;
                $semesterNames = CommonExamService::getInstance()->getDifferentSemesterName($semMark->termName);
                $semMark->semInRomanLetter = $semesterNames->romanLetter;
                $semMark->semInFullName = $semesterNames->fullName;
                if ($semMark->failedStatus != 'FAILED') {
                    $sgpa = round($semMark->sgpa, 2);
                    $sgpa = sprintf('%0.2f', $sgpa);
                }
            
                $semMark->sgpa = $sgpa;
                uasort($semMark->subject, function ($a, $b) {
                    return $a->subjectOrder > $b->subjectOrder;
                });
            }
            ksort($semMark);
        }
        foreach ($response->studentData as $student) {
            $customFields = AmsCustomFieldsService::getInstance()->getAmsCustomFieldValue(AmsCustomFieldsEntities::STUDENT, $student->studentId, []);
            if( $customFields ){
                $student->ktuCode = CommonExamService::getInstance()->getCustomFieldObjectList($customFields)->studentData->KTU_CODE;
            }
            $studentSubjectRequest = new \stdClass(); 
            $studentSubjectRequest->studentId = $student->studentId;
            $studentSubjectRequest->examRegistrationType = "REGULAR";
            $studentSubjectRequest->isMinorCourse = 1;
            $minorStudentSubjectHistory = StudentMarkListService::getInstance()->getAllStudentSubjectMarkDetailsByRequest($studentSubjectRequest);
            $minorSubjectHistory = [];
            $minorEarnedCredit = 0;
            foreach($minorStudentSubjectHistory as $studentHistory){
                if($minorSubjectHistory[$studentHistory->paperSubjectId]){
                    if($minorSubjectHistory[$studentHistory->paperSubjectId]->subjectCreditGradePoint < $studentHistory->subjectCreditGradePoint){
                        if($studentHistory->excludeSubjectFromTotal != 1){
                            $minorSubjectHistory[$studentHistory->paperSubjectId] = $studentHistory;
                            if($studentHistory->subjectFailedStatus == "PASSED"){
                                $minorEarnedCredit += $studentHistory->credit;
                            }
                        }
                        else{
                            // if($studentHistory->subjectFailedStatus == "PASSED"){
                                $minorSubjectHistory[$studentHistory->paperSubjectId] = $studentHistory;
                            // }
                        }
                    }
                }
                else{ 
                    if($studentHistory->excludeSubjectFromTotal != 1){
                        $minorSubjectHistory[$studentHistory->paperSubjectId] = $studentHistory;
                        if($studentHistory->subjectFailedStatus == "PASSED"){
                            $minorEarnedCredit += $studentHistory->credit;
                        }
                    }
                    else{
                        // if($studentHistory->subjectFailedStatus == "PASSED"){
                            $minorSubjectHistory[$studentHistory->paperSubjectId] = $studentHistory;
                            // $earnedCreditForDisplay += $studentHistory->credit;
                        // }
                    }
                }
            }
            $studentSubjectRequest = new \stdClass(); 
            $studentSubjectRequest->studentId = $student->studentId;
            $studentSubjectRequest->examRegistrationType = "REGULAR";
            $studentSubjectRequest->isHonorCourse = 1;
            $honorStudentSubjectHistory = StudentMarkListService::getInstance()->getAllStudentSubjectMarkDetailsByRequest($studentSubjectRequest);
            $honorSubjectHistory = [];
            $honorEarnedCredit = 0;
            foreach($honorStudentSubjectHistory as $studentHistory){
                if($honorSubjectHistory[$studentHistory->paperSubjectId]){
                    if($honorSubjectHistory[$studentHistory->paperSubjectId]->subjectCreditGradePoint < $studentHistory->subjectCreditGradePoint){
                        if($studentHistory->excludeSubjectFromTotal != 1){
                            $honorSubjectHistory[$studentHistory->paperSubjectId] = $studentHistory;
                            if($studentHistory->subjectFailedStatus == "PASSED"){
                                $honorEarnedCredit += $studentHistory->credit;
                            }
                        }
                        else{
                            // if($studentHistory->subjectFailedStatus == "PASSED"){
                                $honorSubjectHistory[$studentHistory->paperSubjectId] = $studentHistory;
                            // }
                        }
                    }
                }
                else{ 
                    if($studentHistory->excludeSubjectFromTotal != 1){
                        $honorSubjectHistory[$studentHistory->paperSubjectId] = $studentHistory;
                        if($studentHistory->subjectFailedStatus == "PASSED"){
                            $honorEarnedCredit += $studentHistory->credit;
                        }
                    }
                    else{
                        // if($studentHistory->subjectFailedStatus == "PASSED"){
                            $honorSubjectHistory[$studentHistory->paperSubjectId] = $studentHistory;
                            // $earnedCreditForDisplay += $studentHistory->credit;
                        // }
                    }
                }
            }
            if( $minorEarnedCredit && $student->failedStatus == "PASSED" && $minorEarnedCredit >= 20 && $student->cgpa ){
                $student->minorHonours->minor->details->totalCredit = 20;//$studentM->credit;
                $student->minorHonours->minor->details->creditEarned = $minorEarnedCredit;
            }
            if( $honorEarnedCredit && $student->failedStatus == "PASSED" && $honorEarnedCredit >= 20 && $student->cgpa >= 8.5 ){
                $student->minorHonours->honours->details->totalCredit = 20;//$studentM->credit;
                $student->minorHonours->honours->details->creditEarned = $honorEarnedCredit;
            }
            $additionalCreditRequest = new \stdClass;
            $additionalCreditRequest->studentId  = $student->studentId;
            $additionalCreditRequest->academicTermId  = $student->finalSem;
            $additionalCreditRequest->creditType = "ACTIVITY_CREDIT";
            $additionalCredit = CommonExamService::getInstance()->getStudentAdditionalCredits($additionalCreditRequest);
            $student->activityCredit = (int)$additionalCredit->credit ? (int)$additionalCredit->credit : 0;
            $student->lastExamMonthYear = $student->markDetails->latestExamMonth ?  date("F Y", strtotime("01-". $student->markDetails->latestExamMonth."-".$student->markDetails->latestExamYear)) : "";
            $student->credit = $student->markDetails->credit;
            $student->roundOff = 2;
            $student->periodOfStudy = $batchDetails->startYear." - ".$batchDetails->endYear;
            // $student->cgpa = round($student->cgpa, $student->roundOff);
            $student->cgpa = sprintf('%0.2f', round(($student->markDetails->rawCgpa), 2));
            $student->cgpaInWords = ucwords(CommonUtil::convertNumberToWords($student->cgpa));
            $student->class = $student->markDetails->class;
            $student->creditInWords = CommonUtil::convertNumberToWords($student->markDetails->credit);
            foreach ($student->academicTerms as $term) {
                $term->credit = $term->markDetails->credit;
                foreach ($term->subjects as $subject) {
                    if ( $response->studentMoocData[$student->studentId]->subjects[$subject->paperSubjetId] && $response->studentMoocData[$student->studentId]->subjects[$subject->paperSubjetId]->moocCertificateStatus == "APPROVED" ){
                        $subject->name = $response->studentMoocData[$student->studentId]->subjects[$subject->paperSubjetId]->moocSubjectName ? $response->studentMoocData[$student->studentId]->subjects[$subject->paperSubjetId]->moocSubjectName : $subject->name;
                        $subject->code = $response->studentMoocData[$student->studentId]->subjects[$subject->paperSubjetId]->moocSubjectCode ? $response->studentMoocData[$student->studentId]->subjects[$subject->paperSubjetId]->moocSubjectCode : $subject->code;
                        if( $response->studentMoocData[$student->studentId]->subjects[$subject->paperSubjetId]->moocSubjectMonthYear ){
                            list($subject->markDetails->latestExamMonth, $subject->markDetails->latestExamYear) = explode('/', $response->studentMoocData[$student->studentId]->subjects[$subject->paperSubjetId]->moocSubjectMonthYear);
                        }
                    }
                    $subject->examMonthYear = date('M Y',strtotime($subject->markDetails->latestExamYear."-".$subject->markDetails->latestExamMonth."-01"));
                    $subject->credit = $subject->markDetails->credit;
                    $subject->attendanceStatus = $subject->markDetails->attendanceStatus;
                    if($subject->excludeSubjectFromTotal == '1'){
                        $subject->grade = $subject->failedStatus == "PASSED" ? 'P' : 'F' ;
                    }
                    $subject->isElective =  $subject->subjectCategoryCode == 'ELECTIVE' ? 1 : 0;
                    if ($subject->isTheory && $student->admissionYear >= 2022) {
                        $subject->showAb = 1;
                    }                    
                    if ( $response->studentMoocData[$student->studentId]->subjects[$subject->paperSubjetId] && $response->studentMoocData[$student->studentId]->subjects[$subject->paperSubjetId]->moocCertificateStatus != "APPROVED" ){
                        $subject->credit = '';
                    }
                }
            }
        }
        $response->collegeData = CommonExamService::getInstance()->getCollegeDetails();
        $response->dateOfIssue = $request->filterSettings['markListDate']?: date("d-m-Y");
        $response->dateOfIssue = date("d.m.Y", strtotime($response->dateOfIssue));
        return $response;
    }
     /**
     * Render Program Result
     * @param $templateName
     * @param Object $data
     * @return Object
     */
    protected function renderTemplate($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/FinalConsolidatedMarksCard/Template5/$templateName.twig"), [ 'data'=>$data ]);
            $prtContent = NULL;
            $prtContent .= '<html><head>';
            $prtContent .= "<style>
                    .footer-class div {
                        margin-left: -20mm!important;
                        margin-right: -20mm!important;
                    }
                </style>";
            $prtContent .= '</head><title>Consolidated Marks Card</title><body>';
            $prtContent .= $responseHtml;
            $prtContent .= '</body></html>';
            $width = 210;
            $height = 297;
            $footerHtml = "";
            if (reset($data->studentData)->courseType != 'PG') {
                $footerHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/FinalConsolidatedMarksCard/Template5/Template5FCMC_footer.twig"), []);
                $marginBottom = "7mm";
            }   
            $options = array(
                'page-width'     => $width."mm",
                'page-height'    => $height."mm",
                'dpi'            => 96,
                'margin-top' => "5mm",
                'margin-left' => "10mm",
                'margin-right' => "10mm",
                'margin-bottom' => $marginBottom ? $marginBottom :"10mm",
                'footer-html' => $footerHtml,
                // 'binary' => "/usr/local/bin/wkhtmltopdf", // For Mac
                'user-style-sheet' => realpath(DOCUMENT_ROOT . "/libcommon/bootstrap/css/bootstrap.min.css")
            );
            $finalCMC = new \stdClass;
            $finalCMC->htmlData = $responseHtml;
            $finalCMC->printData = PdfUtil::renderPdf($prtContent, $options);
        return  $finalCMC;
        }
       
    }
    private function getsecondLanguageName($studentId)
    {
        try {
            $query = "SELECT t1.secondLangaugeName FROM secondLangauge t1,studentaccount t2 WHERE t1.secondlangaugeID = t2.secondlangaugeID AND t2.studentID = ".$studentId."";
    
            $displayName = $this->executeQueryForObject($query)->secondLangaugeName;;
        } catch (\Exception $e) {
            throw $e;
        }
        return $displayName;
    }
    private function getopenCourseName($studentID)
    {
        try {
            $sql_check33 = "SELECT t1.pseudosubjectID FROM pseudosubjects t1,pseudosubjects_students t2 WHERE t1.pseudosubjectID = t2.pseudosubjectID AND t2.studentID = ".$studentID." AND t1.isOpencourse = 1";
    
            $pseudosubjectID = $this->executeQueryForObject($sql_check33)->pseudosubjectID;
    
            if($pseudosubjectID)
            {
                $query1 = "SELECT t1.subjectID FROM sbs_relation t1,pseudosubjects_sbs t2 WHERE t1.sbsID = t2.sbsID AND t2.pseudosubjectID = ".$pseudosubjectID."";
    
                $subjectID = $this->executeQueryForObject($query1)->subjectID;
    
                if($subjectID)
                {
                    $sql ="SELECT code as subjectName, name as subjectDesc from v4_ams_subject where id=\"".$subjectID."\"";
                
                    $subjectDesc = $this->executeQueryForObject($sql)->subjectDesc;    
                }
                else
                {
                    $subjectDesc = '-'; 
                }
    
            }
            else
            {
                $subjectDesc = '-'; 
            }
        } catch (\Exception $e) {
            throw $e;
        }
        return $subjectDesc;
    }
}