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 / 156
Template14FCMC
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 5
650.00
0.00% covered (danger)
0.00%
0 / 156
 __construct
n/a
0 / 0
1
n/a
0 / 0
 getTemplateName
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 19
 processData
0.00% covered (danger)
0.00%
0 / 1
210.00
0.00% covered (danger)
0.00%
0 / 71
 renderTemplate
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 30
 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
//  IAGI 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;
class Template14FCMC 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 = 'Template14FCMC';
        if ( $courseType=="PG" ) {
            $templateName = "Template14FCMC_PG";
        }
        return $templateName;
    }
     /**
     * Process Student data college base
     * @param $request
     */
    protected function processData($request){
        $response = new \stdClass;
        $searchRequest = new \stdClass;
        $response->studentData = reset(MarksCardService::getInstance()->getConsoliidatedMarksCardData($request))->students;
        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);
            $student->courseCompleteWithinYear = 1;
            $finalSem = $batchDetails->finalTermId;
            $student->finalSem = $batchDetails->finalTermId;
            $student->periodOfStudy = $batchDetails->startYear."-".$batchDetails->endYear;
            $student->totalSemester = count($student->academicTerms);
            $lastAcademicTerm = reset(array_filter( $student->academicTerms ,function($value)use($finalSem){
                return $value->termId == $finalSem;
            }));
            ksort($student->academicTerms );
            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->subjects, function ($a, $b) {
                    return $a->subjectOrder > $b->subjectOrder;
                });
                $semMark->subjects = array_values($semMark->subjects);
                if( $semMark->termOrder % 2 == 1){
                    $maxSubject = max(count($semMark->subjects), count($student->academicTerms[$key + 1]->subjects));
                    $semMark->totalsubjectCount = $maxSubject;
                    $student->academicTerms[$key + 1]->totalsubjectCount = $maxSubject;
                }
                else{
                    if ( !$semMark->totalsubjectCount ){
                    $semMark->totalsubjectCount = count($semMark->subjects);
                    }
                }
                if($semMark->totalsubjectCount >= 10){
                    $response->requiredExtraSpacing = 1;
                }
            }
        }
        foreach ($response->studentData as $student) {
            $customFields = AmsCustomFieldsService::getInstance()->getAmsCustomFieldValue(AmsCustomFieldsEntities::STUDENT, $student->studentId, []);
            if( $customFields ){
                $student->ktuCode = CommonExamService::getInstance()->getCustomFieldObjectList($customFields)->studentData->KTU_CODE;
            }
            $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->cgpa = round($student->cgpa, $student->roundOff);
            $student->cgpaInWords = CommonUtil::convertNumberToWords($student->cgpa);
            $student->cgpa = sprintf('%0.2f', $student->cgpa);
            $student->creditInWords = CommonUtil::convertNumberToWords($student->markDetails->credit);
            foreach ($student->academicTerms as $term) {
                $term->credit = $term->markDetails->credit;
                foreach ($term->subjects as $subject) {
                    $subject->examMonthYear = date('M Y',strtotime($subject->markDetails->latestExamYear."-".$subject->markDetails->latestExamMonth."-01"));
                    $subject->credit = $subject->markDetails->credit;
                }
            }
        }
        $response->collegeData = CommonExamService::getInstance()->getCollegeDetails();
        $response->dateOfIssue = $request->filterSettings['markListDate']? date("d/m/Y", strtotime($request->filterSettings['markListDate'])): date("d/m/Y");
        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/Template14/$templateName.twig"), [ 'data'=>$data ]);
            $prtContent = NULL;
            $prtContent .= '<html><head>';
            $prtContent .= "<style>
                
                </style>";
            $prtContent .= '</head><title>Consolidated Marks Card</title><body>';
            $prtContent .= $responseHtml;
            $prtContent .= '</body></html>';
            $width = 210;
            $height = 297;
            $options = array(
                'page-width'     => $width."mm",
                'page-height'    => $height."mm",
                'dpi'            => 96,
                'margin-top' => "5mm",
                'margin-left' => "7mm",
                'margin-right' => "7mm",
                'margin-bottom' => "1mm",
                // '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;
    }
}