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 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 194
Template2RegularTabulationRegisterGenerator
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 4
1560.00
0.00% covered (danger)
0.00%
0 / 194
 __construct
n/a
0 / 0
1
n/a
0 / 0
 getTemplateName
0.00% covered (danger)
0.00%
0 / 1
30.00
0.00% covered (danger)
0.00%
0 / 22
 processData
0.00% covered (danger)
0.00%
0 / 1
72.00
0.00% covered (danger)
0.00%
0 / 52
 renderRegularTabulationRegisterResult
0.00% covered (danger)
0.00%
0 / 1
42.00
0.00% covered (danger)
0.00%
0 / 39
 rearrangeDataForPrint
0.00% covered (danger)
0.00%
0 / 1
380.00
0.00% covered (danger)
0.00%
0 / 81
<?php
// Template Regular TR For CHRIST College 
namespace com\linways\ec\core\service\RegularTabulationRegisterGenerator;
use com\linways\ec\core\service\StudentMarkListService;
use com\linways\ec\core\service\TabulationRegisterService;
use com\linways\ec\core\service\ExamRegistrationService;
use com\linways\ec\core\exception\ExamControllerException;
use com\linways\base\util\TwigRenderer;
use com\linways\core\ams\professional\util\PdfUtil;
use com\linways\ec\core\service\CommonExamService;
use com\linways\ec\core\service\GradeSchemeService;
use com\linways\ec\core\service\RegularTabulationRegisterGenerator\RegularTabulationRegisterResultDataGenerator;
class Template2RegularTabulationRegisterGenerator extends RegularTabulationRegisterResultDataGenerator
{
    public function __construct(){}
    
    protected function getTemplateName($request){
        $templateName = "template_2_ug";
        $examRegistrationDetails = new \stdClass;
        $examRegistrationDetailsArray = ExamRegistrationService::getInstance()->searchDetailedExamRegistrationDetails($request);
        if(empty($examRegistrationDetailsArray)){
            throw new ExamControllerException(ExamControllerException::NO_DETAILS_FOUND,"No Details Found");
        }
        $examRegistrationDetails->courseTypeName = $examRegistrationDetailsArray[0]->groups[0]->courseTypeName;
        $examRegistrationDetails->batchStartYear = $examRegistrationDetailsArray[0]->groups[0]->batchStartYear;
        if($examRegistrationDetails->degreeName == "BLISC"){
            $templateName = "template_2_blisc";
        }
        else if($examRegistrationDetails->courseTypeName == "UG"){
            $templateName = "template_2_ug";
        }
        else if($examRegistrationDetails->courseTypeName == "PG"){
            $templateName = "template_2_pg";
        }
        else{
            $templateName = "template_2_ug";
        }
        return $templateName;
    }
     /**
     * Process Student data college base
     *
     * @param $request
     */
    protected function processData($request){
        $response = new \stdClass;
        $studentsMarkDetails = [];
        $examRegistrationData = TabulationRegisterService::getInstance()->getExamRegistrationDetailsForTabulationRegisterReports($request);
        $examRegistrationData->totalCredit = 0;
        $examRegistrationData->programName = $examRegistrationData->degreeName.' '.$examRegistrationData->streamName;
        $examRegistrationData->academicExamYear = ( $examRegistrationData->examYear - 1) . "-" .   $examRegistrationData->examYear;
        if((int)$examRegistrationData->semInSemNumber % 2){
            $examRegistrationData->academicExamYear =  $examRegistrationData->examYear . "-" .  ( $examRegistrationData->examYear + 1);
        }
        $searchRequest = new \stdClass;
        $searchRequest->fetchAllSemesterDetails = $examRegistrationData->isFinalSemester ? true : false;
        $searchRequest->considerSupplementary = true;
        $searchRequest->studentId = $request->studentId;
        $searchRequest->groupId = $request->groupId;
        $searchRequest->examRegistrationId = $request->examRegistrationId;
        $searchRequest->academicTermId = $request->academicTermId;
        $searchRequest->considerGraceMark = true;
        $searchRequest->supplementaryMonthUpperLimit = $examRegistrationData->examMonth;
        $searchRequest->supplementaryYearUpperLimit = $examRegistrationData->examYear;
        if($examRegistrationData->isFinalSemester){
            $allSemesterDetails = CommonExamService::getInstance()->getAllAcademicTermsDetailsByBatch($searchRequest);
            $allSemesterDetails = array_filter($allSemesterDetails,function($academicTerm)use($examRegistrationData) {
                if($examRegistrationData->academicTermId != $academicTerm->id){
                    return $academicTerm;
                } 
            });
            uasort($allSemesterDetails, function($a, $b) {
                return ($a->orderNo > $b->orderNo);
            });
            $response->allSemesterDetails = $allSemesterDetails;
        }
        $studentsMarkDetails = TabulationRegisterService::getInstance()->getAllRegistredStudentMarkDetailsForTabulationRegister($searchRequest);
        if(empty($studentsMarkDetails)){
            throw new ExamControllerException(ExamControllerException::NO_DETAILS_FOUND,"No Details Found");
        }
        $gradeSchemes = GradeSchemeService::getInstance()->getAllExamRegistrationGradeSchemes($request);
        array_walk($gradeSchemes,function($gradeScheme,$key){
            $gradeScheme->properties = json_decode($gradeScheme->properties);
            $gradeScheme->rangeFrom = $gradeScheme->range_from;
            $gradeScheme->rangeTo = $gradeScheme->range_to;
            $gradeScheme->className = $gradeScheme->properties->class;
        });
        $response->gradeSchemes = $gradeSchemes;
        $studentsMarkDetails = TabulationRegisterService::getInstance()->processStudentDataForRegularTabulationRegister($studentsMarkDetails,$searchRequest,$examRegistrationData);
        $response->studentData = $studentsMarkDetails->studentsDetails;
        foreach($studentsMarkDetails->displaySubjects as $subject){
            $examRegistrationData->totalCredit += (int)$subject->credit; 
        }
        $response->examRegistrationData = $examRegistrationData ;
        $response->examRegistrationData->subjects =  $studentsMarkDetails->displaySubjects;
        $response->collegeData = CommonExamService::getInstance()->getCollegeDetails();
        $response->displayContentOptions = $request->displayContentOptions;
        $response->isPrint = $request->isPrint ? true : false;
        return $response;
    }
   
     /**
     * Render Program Result
     *
     * @param $templateName
     * @param Object $data
     * @return Object
     */
    protected function renderRegularTabulationRegisterResult($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/TablationRegister/RegularTR/Template2/$templateName.twig"), [ 'data'=>$data ]);
            if ($data->examRegistrationData->isFinalSemester && $data->examRegistrationDetails->courseTypeName != "PG" && $data->isPrint) {
                // $responseHtml = $this->rearrangeDataForPrint($responseHtml);
                $totalWidth = 420;
                $totalHeight = 297;
            }
            elseif($data->examRegistrationDetails->courseTypeName == "PG"){
                $totalWidth = 500;
                $totalHeight = 354;
            }
            else{
                $totalWidth = 500;
                $totalHeight = 354;
            }
            $prtContent = NULL;
            $prtContent .= '<html><head>';
            $prtContent .= "";
            $prtContent .= '</head><title>Consolidated MarkList</title><body>';
            $prtContent .= $responseHtml;
            $prtContent .= '</body></html>';
            $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 = $responseHtml;
            $programResult->printData = PdfUtil::renderPdf($prtContent, $options);
        return  $programResult;
        }
       
    }
    /**
     * rearrange Data For Print
     * @param $html
     * @return $responseHtml
     */
    function rearrangeDataForPrint($html){
    // split all html content into 6 parts
    $contentHtml = "";
    $splitTag1 = explode("<!--tag1-->", $html);
    if (!strpos($html, "<!--tag1-->")) {
        return $html;
    }
    $pageHead = $splitTag1[0];
    $tableHead = $splitTag1[1];
    $contentHead = $splitTag1[2];
    $tableHeadClose = $splitTag1[3];
    $content = $splitTag1[4];
    $tableFoot = $splitTag1[5];
    $pageFoot = $splitTag1[6];
    // split rows of head and student data
    $contentHeadRaws = explode("<!--tag2-->", $contentHead);
    $contentRaws = explode("<!--tag2-->", $content);
    // split table headings into parts like "studentName, Regno" and group of subject column
    $contentMainHeads = explode("<!--tag3-->", $contentHeadRaws[1]);
    $contentSubHeads = explode("<!--tag3-->", $contentHeadRaws[3]);
    $sliceCount = count($contentMainHeads);
    $studentHead = $contentMainHeads[0];
    $students = [];
    $tableSlices = [];
    foreach ($contentRaws as $key => $contentRaw) {
        if (strpos($contentRaw, "<tr>") || strpos($contentRaw, "</tr>")) continue;
        // split table student details into parts like "student-1, REGNO-1" and group of subject mark details
        $contentSlices = explode("<!--tag3-->", $contentRaw);
        $students[$key] = $contentSlices[0];
        for ($tableNum = 1; $tableNum < $sliceCount; $tableNum++) {
            $tableSlices[$tableNum][$key] = $contentSlices[$tableNum];
        }
    }
    $studentCount = 0;
    $pageNum = 0;
    $contentPages = [];
    foreach ($students as $key => $student) {
        $studentCount++;
        if (!($studentCount % 36)) {
            $pageNum++;
        }
        foreach ($tableSlices as $tableNum => $tableSlice) {
            if (substr_count($tableSlices[$tableNum][$key], "<!--subject_tag-->") <= 0 && $tableNum > 1) continue;
            $subjectTagCount = substr_count($tableSlices[$tableNum][$key], "<!--subject_tag-->");
            $tableWidth = ($subjectTagCount * 20) + 55;
            if (substr_count($tableSlices[$tableNum][$key], "<!--overallmark_tag-->") > 0) {
                $tableWidth += 20;
            }
            $tableWidth = $tableWidth > 100 ? 100 : $tableWidth;
            $extraColumn = 100 - $tableWidth;
            $extraColumnTd = "";
            $extraColumnTdColspan = 106;
            if ($extraColumn) {
                $extraColumnTd = "<th width='$extraColumn%' style='border: 1px solid #ffff; border-left:1px #000; border-top:1px solid #fff; border-bottom: 1px solid #fff; border-right: 1px solid #fff;' rowspan='2' colspan='{{extraColumnTdColspan}}'>&nbsp;</th>";
            }
            if (substr_count($tableSlices[$tableNum + 1][$key], "<!--subject_tag-->") <= 0) {
                if (!$contentPages[$pageNum]->contentTables[$tableNum]) {
                    $tr = "<tr></tr><tr>$studentHead$contentMainHeads[$tableNum]" . $contentMainHeads[$tableNum + 1] . "$extraColumnTd</tr>";
                    $extraColumnTdColspan -= substr_count($tr, "<th") - 1;
                    str_replace('{{extraColumnTdColspan}}', $extraColumnTdColspan, $tr);
                    str_replace('{{extraColumnTdColspan}}', $extraColumnTdColspan, $extraColumnTd);
                    $contentPages[$pageNum]->contentTables[$tableNum] .= $tr;
                    $contentPages[$pageNum]->contentTables[$tableNum] .= "<tr>" . $contentSubHeads[$tableNum - 1] . $contentSubHeads[$tableNum] . "</tr>$tableHeadClose";
                }
                $contentPages[$pageNum]->contentTables[$tableNum] .= "<tr>" . $student . $tableSlice[$key] . $tableSlices[$tableNum + 1][$key] . "$extraColumnTd</tr>";
            } else {
                if (!$contentPages[$pageNum]->contentTables[$tableNum]) {
                    $tr = "<tr>$studentHead$contentMainHeads[$tableNum]$extraColumnTd</tr>";
                    $extraColumnTdColspan -= substr_count($tr, "<th") - 1;
                    str_replace('{{extraColumnTdColspan}}', $extraColumnTdColspan, $tr);
                    str_replace('{{extraColumnTdColspan}}', $extraColumnTdColspan, $extraColumnTd);
                    $contentPages[$pageNum]->contentTables[$tableNum] .= $tr;
                    $contentPages[$pageNum]->contentTables[$tableNum] .= "<tr>" . $contentSubHeads[$tableNum - 1] . "</tr>$tableHeadClose";
                }
                $contentPages[$pageNum]->contentTables[$tableNum] .= "<tr>$student$tableSlice[$key]$extraColumnTd</tr>";
            }
        }
    }
    foreach ($contentPages as $pageNum => $page) {
        foreach ($page->contentTables as $tableNum => $table) {
            // $subjectTagCount = substr_count($table, "<!--subjectHead_tag-->");
            // $tableWidth = ($subjectTagCount * 15) + 40;
            // if(substr_count($table, "<!--overallmark_tag-->") > 0) {
            //     $tableWidth += 20;
            // }
            // $tableWidth = $tableWidth > 100 ? 100 : $tableWidth;
            // $replaceCount = 1;
            // $tableHeadWithNewWidth = str_replace("width:100%!important;", "width:$tableWidth%!important;", $tableHead, $replaceCount);
            $contentHtml .= "$tableHead $table $tableFoot";
        }
    }
    $responseHtml = $pageHead . $contentHtml . $pageFoot;
    return $responseHtml;
}
   
   
}