Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 38 |
CRAP | |
0.00% |
0 / 2413 |
ExaminationReportService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 38 |
163620.00 | |
0.00% |
0 / 2413 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
getDigitalValuationReports | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 54 |
|||
getBookletCountDigitalValuationReport | |
0.00% |
0 / 1 |
132.00 | |
0.00% |
0 / 27 |
|||
getBookletCountWithStaffDigitalValuationReport | |
0.00% |
0 / 1 |
342.00 | |
0.00% |
0 / 59 |
|||
getMarkNotSubmittedStaffListDigitalValuationReport | |
0.00% |
0 / 1 |
380.00 | |
0.00% |
0 / 64 |
|||
getRegisteredStudentsDigitalValuationDetails | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 78 |
|||
getStudentQuestionWiseMarkReport | |
0.00% |
0 / 1 |
132.00 | |
0.00% |
0 / 61 |
|||
getStudentQuestionWiseMarkDetails | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 63 |
|||
getStudentIdByRegisterNo | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 18 |
|||
getStudentSubjectDetails | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 59 |
|||
getGoverningCouncilReport | |
0.00% |
0 / 1 |
306.00 | |
0.00% |
0 / 102 |
|||
getAssignedStudentsCount | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 44 |
|||
getAllRegistredStudentSemesterDetails | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 78 |
|||
getMarkCardIssueRegisterReport | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 73 |
|||
getAssignedSubjectStudentsDetails | |
0.00% |
0 / 1 |
72.00 | |
0.00% |
0 / 49 |
|||
getAllExamRegisteredStudentDetails | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 59 |
|||
getRegisteredStudentCountReport | |
0.00% |
0 / 1 |
506.00 | |
0.00% |
0 / 91 |
|||
getEvaluationReport | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 64 |
|||
getEndSemesterReport | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 79 |
|||
getAllRegistredStudentOverAllDetails | |
0.00% |
0 / 1 |
110.00 | |
0.00% |
0 / 112 |
|||
getExamCourseWiseResultAnalysis | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 60 |
|||
getCourseWiseResultAnalysis | |
0.00% |
0 / 1 |
506.00 | |
0.00% |
0 / 64 |
|||
getExamRegisteredStudentReport | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 40 |
|||
getExamTallyReport | |
0.00% |
0 / 1 |
110.00 | |
0.00% |
0 / 84 |
|||
getStudentExamFeeDetails | |
0.00% |
0 / 1 |
182.00 | |
0.00% |
0 / 69 |
|||
getRegularExamSubjectWiseResultAnalysis | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 50 |
|||
getSubjectWiseResultAnalysisConsolidated | |
0.00% |
0 / 1 |
182.00 | |
0.00% |
0 / 45 |
|||
getRegularExamCourseWiseResultAnalysis | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 52 |
|||
getSemWiseConsolidatedCourseDetails | |
0.00% |
0 / 1 |
210.00 | |
0.00% |
0 / 48 |
|||
getConsolidatedSubjectMarkDetails | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 65 |
|||
getExamValuationProgressReport | |
0.00% |
0 / 1 |
3192.00 | |
0.00% |
0 / 169 |
|||
getExamDateWiseReport | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 75 |
|||
getExamDetailedValuationReport | |
0.00% |
0 / 1 |
506.00 | |
0.00% |
0 / 101 |
|||
getStaffRemunerationReport | |
0.00% |
0 / 1 |
240.00 | |
0.00% |
0 / 79 |
|||
getBatchStudentsForInvigilatorsDiary | |
0.00% |
0 / 1 |
110.00 | |
0.00% |
0 / 66 |
|||
filterStudentsByRegisterRange | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 18 |
|||
submitStudentRoomDetails | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 38 |
|||
getAllHallAssignedRegisteredStudentDetails | |
0.00% |
0 / 1 |
156.00 | |
0.00% |
0 / 53 |
<?php | |
namespace com\linways\ec\core\service; | |
use com\linways\ec\core\request\SearchRuleRequest; | |
use com\linways\ec\core\service\RuleService; | |
use com\linways\base\util\MakeSingletonTrait; | |
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\mapper\RegularExamReportServiceMapper; | |
use com\linways\ec\core\service\CommonExamService; | |
use com\linways\ec\core\request\SearchExamRegistrationRequest; | |
use com\linways\ec\core\service\ExamRegistrationService; | |
use com\linways\ec\core\service\RegularExamReportService; | |
use com\linways\core\ams\professional\service\StaffService; | |
use com\linways\core\ams\professional\service\CourseTypeService; | |
use com\linways\core\ams\professional\service\StudentService; | |
use com\linways\ec\core\service\ExamRegistrationSubjectService; | |
use com\linways\ec\core\service\StudentExamRegistrationService; | |
use com\linways\ec\core\service\ExamValuationService; | |
use com\linways\ec\core\service\FinalConsolidatedReportService; | |
use com\linways\core\ams\professional\service\AmsCustomFieldsService; | |
use com\linways\core\ams\professional\constant\AmsCustomFieldsEntities; | |
use com\linways\core\ams\professional\request\examcontroller\ConsolidatedMarkReportRequest; | |
use com\linways\core\ams\professional\request\api\GetAllFacultiesRequest; | |
use com\linways\core\ams\professional\request\api\GetAllDepartmentsRequest; | |
use com\linways\core\ams\professional\service\DepartmentService; | |
use com\linways\core\ams\professional\request\academic\SearchAcademicTermRequest; | |
use com\linways\core\ams\professional\service\academic\AcademicTermService; | |
use com\linways\core\ams\professional\util\CommonUtil; | |
use com\linways\ec\core\service\StudentMarkListService; | |
use com\linways\ec\core\constant\StatusConstants; | |
use com\linways\ec\core\logging\Events; | |
use com\linways\ec\core\logging\entities\Staff; | |
use com\linways\core\ams\professional\logging\AMSLogger; | |
class ExaminationReportService extends BaseService | |
{ | |
use MakeSingletonTrait; | |
private function __construct() { | |
$this->mapper = RegularExamReportServiceMapper::getInstance()->getMapper(); | |
$this->logger = AMSLogger::getLogger('exam-controller-log'); | |
} | |
/** | |
* Get Digital Valuation Reports | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getDigitalValuationReports($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request->examRegistrationId = $searchRequest->examRegistrationId; | |
$request->courseTypeId = $searchRequest->courseTypeId; | |
$request->reportType = $searchRequest->reportType; | |
$resultData = new \stdClass; | |
// Different Digital Valuation Reports | |
switch ($request->reportType) { | |
case 'BOOKLET_COUNT': | |
$resultData = $this->getBookletCountDigitalValuationReport($request); | |
$templateName = "digital_valuation_report_booklet_count"; | |
break; | |
case 'BOOKLET_COUNT_WITH_STAFF': | |
$resultData = $this->getBookletCountWithStaffDigitalValuationReport($request); | |
$templateName = "digital_valuation_report_booklet_count_with_staff"; | |
break; | |
case 'MARK_NOT_SUBMITTED_STAFF_LIST': | |
$resultData = $this->getMarkNotSubmittedStaffListDigitalValuationReport($request); | |
$templateName = "digital_valuation_report_mark_not_submitted_staff_list"; | |
break; | |
default: | |
break; | |
} | |
$requestForExamRegistration = new SearchExamRegistrationRequest; | |
$requestForExamRegistration->id = $request->examRegistrationId; | |
$examRegistration = reset(ExamRegistrationService::getInstance()->searchExamRegistration($requestForExamRegistration)); | |
$collegeData = CommonExamService::getInstance()->getCollegeDetails(); | |
if(empty($resultData)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"No details found."); | |
} | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/digitalValuationReports/$templateName.twig"), [ 'subjects'=>$resultData,'collegeData'=>$collegeData,'examRegistration'=>$examRegistration]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
</style>"; | |
$prtContent .= '</head><title>Digital Valuation Report</title><body>'; | |
$prtContent .= $responseHtml; | |
$prtContent .= '</body></html>'; | |
$totalWidth = 210; | |
$totalHeight = 297; | |
$options = array( | |
'page-width' => $totalHeight."mm", | |
'page-height' => $totalWidth."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; | |
} | |
/** | |
* get Booklet Count Digital Valuation Report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getBookletCountDigitalValuationReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request->examRegistrationId = $searchRequest->examRegistrationId; | |
$request->courseTypeId = $searchRequest->courseTypeId; | |
$bookletCountDetails = []; | |
$studentDetails = $this->getRegisteredStudentsDigitalValuationDetails($request); | |
foreach($studentDetails as $student){ | |
$student->valuationDetails = json_decode($student->valuationDetails); | |
$bookletCountDetails[$student->subjectCode]->subjectCode = $student->subjectCode; | |
$bookletCountDetails[$student->subjectCode]->subjectName = $student->subjectName; | |
$bookletCountDetails[$student->subjectCode]->bookletCount++; | |
if(!empty($student->valuationDetails->assignedValuationStaffs)){ | |
$student->assignedValuationStaffs = (array)$student->valuationDetails->assignedValuationStaffs; | |
foreach($student->assignedValuationStaffs as $valuation){ | |
if(!empty($valuation->addiitonalExamniners)){ | |
$bookletCountDetails[$student->subjectCode]->firstValuationAssignedPaper = $valuation->count == '1' ? (int)$bookletCountDetails[$student->subjectCode]->firstValuationAssignedPaper + 1 : (int)$bookletCountDetails[$student->subjectCode]->firstValuationAssignedPaper ; | |
$bookletCountDetails[$student->subjectCode]->secondValuationAssignedPaper = $valuation->count == '2' ? (int)$bookletCountDetails[$student->subjectCode]->secondValuationAssignedPaper + 1 : (int)$bookletCountDetails[$student->subjectCode]->secondValuationAssignedPaper ; | |
$bookletCountDetails[$student->subjectCode]->thirdValuationAssignedPaper = $valuation->count == '3' ? (int)$bookletCountDetails[$student->subjectCode]->thirdValuationAssignedPaper + 1 : (int)$bookletCountDetails[$student->subjectCode]->thirdValuationAssignedPaper ; | |
} | |
} | |
$bookletCountDetails[$student->subjectCode]->firstValuationReturnedPaper = $student->mark1Confirm ? (int)$bookletCountDetails[$student->subjectCode]->firstValuationReturnedPaper + 1 : (int)$bookletCountDetails[$student->subjectCode]->firstValuationReturnedPaper ; | |
$bookletCountDetails[$student->subjectCode]->secondValuationReturnedPaper = $student->mark2Confirm ? (int)$bookletCountDetails[$student->subjectCode]->secondValuationReturnedPaper + 1 : (int)$bookletCountDetails[$student->subjectCode]->secondValuationReturnedPaper ; | |
$bookletCountDetails[$student->subjectCode]->thirdValuationReturnedPaper = $student->mark3Confirm ? (int)$bookletCountDetails[$student->subjectCode]->thirdValuationReturnedPaper + 1 : (int)$bookletCountDetails[$student->subjectCode]->thirdValuationReturnedPaper ; | |
} | |
} | |
return $bookletCountDetails; | |
} | |
/** | |
* get Booklet Count with staff Digital Valuation Report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getBookletCountWithStaffDigitalValuationReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request->examRegistrationId = $searchRequest->examRegistrationId; | |
$request->courseTypeId = $searchRequest->courseTypeId; | |
$bookletCountStaffDetails = []; | |
$studentDetails = $this->getRegisteredStudentsDigitalValuationDetails($request); | |
$getAllFacultiesRequest = new GetAllFacultiesRequest; | |
$staffs = StaffService::getInstance()->getAllFacultiesForApi($getAllFacultiesRequest); | |
$allStaffs = []; | |
foreach($staffs as $staff){ | |
$allStaffs[$staff->id] = $staff; | |
} | |
foreach($studentDetails as $student){ | |
$student->valuationDetails = json_decode($student->valuationDetails); | |
if(!empty($student->valuationDetails->assignedValuationStaffs)){ | |
$bookletCountStaffDetails[$student->subjectCode]->subjectCode = $student->subjectCode; | |
$bookletCountStaffDetails[$student->subjectCode]->subjectName = $student->subjectName; | |
$student->assignedValuationStaffs = (array)$student->valuationDetails->assignedValuationStaffs; | |
foreach($student->assignedValuationStaffs as $valuation){ | |
if(!empty($valuation->addiitonalExamniners)){ | |
$staffId = ''; | |
$staffId = reset($valuation->addiitonalExamniners); | |
if($valuation->count == '1'){ | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$staffId.'1']->staffName = $allStaffs[$staffId]->name; | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$staffId.'1']->valuationCount = $valuation->count; | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$staffId.'1']->bookletCount++; | |
} | |
elseif($valuation->count == '2'){ | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$staffId.'2']->staffName = $allStaffs[$staffId]->name; | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$staffId.'2']->valuationCount = $valuation->count; | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$staffId.'2']->bookletCount++; | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$staffId.'2']->registerNo[] = $student->registerNo; | |
} | |
elseif($valuation->count == '3'){ | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$staffId.'3']->staffName = $allStaffs[$staffId]->name; | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$staffId.'3']->valuationCount = $valuation->count; | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$staffId.'3']->bookletCount++; | |
} | |
} | |
} | |
if($student->mark1Confirm && $student->mark1SubmittedStaff){ | |
if($bookletCountStaffDetails[$student->subjectCode]->staffs[$student->mark1SubmittedStaff.'1']){ | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$student->mark1SubmittedStaff.'1']->bookletReturnedCount++; | |
} | |
} | |
if($student->mark2Confirm && $student->mark2SubmittedStaff){ | |
if($bookletCountStaffDetails[$student->subjectCode]->staffs[$student->mark2SubmittedStaff.'2']){ | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$student->mark2SubmittedStaff.'2']->bookletReturnedCount++; | |
} | |
} | |
if($student->mark3Confirm && $student->mark3SubmittedStaff){ | |
if($bookletCountStaffDetails[$student->subjectCode]->staffs[$student->mark3SubmittedStaff.'3']){ | |
$bookletCountStaffDetails[$student->subjectCode]->staffs[$student->mark3SubmittedStaff.'3']->bookletReturnedCount++; | |
} | |
} | |
} | |
} | |
return $bookletCountStaffDetails; | |
} | |
/** | |
* get mark not submitted staff list for digital valuation | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getMarkNotSubmittedStaffListDigitalValuationReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request->examRegistrationId = $searchRequest->examRegistrationId; | |
$request->courseTypeId = $searchRequest->courseTypeId; | |
$notSubmittedStaffDetails = []; | |
$studentDetails = $this->getRegisteredStudentsDigitalValuationDetails($request); | |
foreach($studentDetails as $student){ | |
$student->valuationDetails = json_decode($student->valuationDetails); | |
if(!empty($student->valuationDetails->assignedValuationStaffs)){ | |
$notSubmittedStaffDetails[$student->subjectCode]->subjectCode = $student->subjectCode; | |
$notSubmittedStaffDetails[$student->subjectCode]->subjectName = $student->subjectName; | |
$notSubmittedStaffDetails[$student->subjectCode]->bookletCount++; | |
$student->assignedValuationStaffs = (array)$student->valuationDetails->assignedValuationStaffs; | |
foreach($student->assignedValuationStaffs as $valuation){ | |
if(!empty($valuation->addiitonalExamniners)){ | |
$staffId = reset($valuation->addiitonalExamniners); | |
if($valuation->count == '1'){ | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['1']->valuationCount = $valuation->count; | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['1']->assignedStudentCount++; | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['1']->assignedStaffs[$staffId]->studentcount++; | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['1']->assignedStaffs[$staffId]->id = $staffId; | |
} | |
elseif($valuation->count == '2'){ | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['2']->valuationCount = $valuation->count; | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['2']->assignedStudentCount++; | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['2']->assignedStaffs[$staffId]->studentcount++; | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['2']->assignedStaffs[$staffId]->id = $staffId; | |
} | |
elseif($valuation->count == '3'){ | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['3']->valuationCount = $valuation->count; | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['3']->assignedStudentCount++; | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['3']->assignedStaffs[$staffId]->studentcount++; | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['3']->assignedStaffs[$staffId]->id = $staffId; | |
} | |
} | |
} | |
if($student->mark1Confirm && $student->mark1SubmittedStaff){ | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['1']->assignedStaffs[$student->mark1SubmittedStaff]->submittedStudentcount++; | |
} | |
if($student->mark2Confirm && $student->mark2SubmittedStaff){ | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['2']->assignedStaffs[$student->mark2SubmittedStaff]->submittedStudentcount++; | |
} | |
if($student->mark3Confirm && $student->mark3SubmittedStaff){ | |
$notSubmittedStaffDetails[$student->subjectCode]->valuations['3']->assignedStaffs[$student->mark3SubmittedStaff]->submittedStudentcount++; | |
} | |
} | |
} | |
foreach($notSubmittedStaffDetails as $subject){ | |
foreach($subject->valuations as $valuation){ | |
foreach($valuation->assignedStaffs as $staff){ | |
if((int)$staff->submittedStudentcount < (int)$staff->studentcount){ | |
$valuation->notSubmittedStaffIds[] = $staff->id; | |
} | |
} | |
if(!empty($valuation->notSubmittedStaffIds)){ | |
$staffDetails = []; | |
$staffDetails = StaffService::getInstance()->getStaffByIds($valuation->notSubmittedStaffIds); | |
$valuation->notSubmittedStaffNameArray = array_column($staffDetails,'name'); | |
$valuation->notSubmittedStaffNames = implode(',',$valuation->notSubmittedStaffNameArray); | |
} | |
} | |
} | |
return $notSubmittedStaffDetails; | |
} | |
/** | |
* Get Registered Student Digital Valuation Details | |
* @param $request | |
* @return $students | |
*/ | |
public function getRegisteredStudentsDigitalValuationDetails($request){ | |
try{ | |
$request = $this->realEscapeObject($request); | |
$joinQuery = ""; | |
$whereQuery = ""; | |
$orderBy = ""; | |
$groupBy = " GROUP BY sa.studentID, aa.id"; | |
if(!empty($request->examRegistrationId)) { | |
$whereQuery .= " AND eerb.ec_exam_registration_id = '$request->examRegistrationId'"; | |
} | |
$query = "SELECT DISTINCT | |
esar.id, | |
sa.studentID as studentId, | |
aa.id AS assessmentId, | |
esar.falseNo AS falseNumber, | |
IF (esar.valuation_details IS NULL, JSON_OBJECT(), esar.valuation_details) AS valuationDetails, | |
eers.valuation_details as subjectValuationDetails, | |
sa.studentName, | |
spa.properties->>'$.registerNumber' AS registerNo, | |
spa.properties->>'$.rollNumber' AS rollNo, | |
sub.code AS subjectCode, | |
sub.name AS subjectName, | |
caps.id AS academicPaperSubjectId, | |
IF (oec1Started.id IS NULL, 0, 1) AS mark1Started, | |
IF (oec2Started.id IS NULL, 0, 1) AS mark2Started, | |
oec1.is_confirmed as mark1Confirm, | |
oec1.updated_by as mark1SubmittedStaff, | |
oecRev.is_confirmed as mark1ReviewConfirm, | |
oecRev.updated_by as mark1ReviewSubmittedStaff, | |
oec2.is_confirmed as mark2Confirm, | |
oec2.updated_by as mark2SubmittedStaff, | |
oec3.is_confirmed as mark3Confirm, | |
oec3.updated_by as mark3SubmittedStaff | |
FROM | |
ec_student_assessment_registration esar | |
INNER JOIN studentaccount sa ON | |
sa.studentID = esar.student_id | |
INNER JOIN am_assessment aa ON | |
aa.id = esar.am_assessment_id | |
INNER JOIN oe_exams oe ON | |
oe.assessment_id = aa.id AND oe.is_deleted = 0 | |
INNER JOIN ec_exam_registration_subject eers ON | |
eers.am_assessment_id = aa.id | |
INNER JOIN ec_exam_registration_batch eerb ON | |
eerb.id = eers.ec_exam_registration_batch_id | |
INNER JOIN ec_exam_registration eer ON | |
eer.id = eerb.ec_exam_registration_id AND | |
eer.trashed IS NULL | |
INNER JOIN `groups` g ON | |
g.id = eerb.groups_id | |
INNER JOIN program p ON | |
p.id = g.properties->>'$.programId' | |
INNER JOIN student_program_account spa ON | |
spa.student_id = esar.student_id AND | |
spa.current_program_id = p.id | |
INNER JOIN cm_academic_paper_subjects caps ON | |
caps.id = eers.cm_academic_paper_subjects_id | |
INNER JOIN v4_ams_subject sub ON | |
sub.id = caps.ams_subject_id | |
LEFT JOIN oe_exam_marks_confirm oec1 ON oec1.oe_exams_id = oe.id AND oec1.oe_users_id = sa.studentID AND oec1.valuation_count = 1 AND (oec1.revaluation_id IS NULL OR oec1.revaluation_id = '') AND oec1.is_confirmed = '1' AND oec1.review_id IS NULL | |
LEFT JOIN oe_exam_marks_confirm oecRev ON oecRev.oe_exams_id = oe.id AND oecRev.oe_users_id = sa.studentID AND oecRev.valuation_count = 1 AND (oecRev.revaluation_id IS NULL OR oecRev.revaluation_id = '') AND oecRev.is_confirmed = '1' AND oecRev.review_id IS NOT NULL | |
LEFT JOIN oe_exam_marks_confirm oec2 ON oec2.oe_exams_id = oe.id AND oec2.oe_users_id = sa.studentID AND oec2.valuation_count = 2 AND (oec2.revaluation_id IS NULL OR oec2.revaluation_id = '') AND oec2.is_confirmed = '1' | |
LEFT JOIN oe_exam_marks_confirm oec1Started ON oec1Started.oe_exams_id = oe.id AND oec1Started.oe_users_id = sa.studentID AND oec1Started.valuation_count = 1 AND (oec1Started.revaluation_id IS NULL OR oec1Started.revaluation_id = '') | |
LEFT JOIN oe_exam_marks_confirm oec2Started ON oec2Started.oe_exams_id = oe.id AND oec2Started.oe_users_id = sa.studentID AND oec2Started.valuation_count = 2 AND (oec2Started.revaluation_id IS NULL OR oec2.revaluation_id = '') | |
LEFT JOIN oe_exam_marks_confirm oec3 ON oec3.oe_exams_id = oe.id AND oec3.oe_users_id = sa.studentID AND oec3.valuation_count = 3 AND (oec3.revaluation_id IS NULL OR oec3.revaluation_id = '') AND oec3.is_confirmed = '1' | |
WHERE | |
esar.trashed IS NULL AND esar.properties ->> '$.registrationStatus' IN ('REGISTERED') AND eer.type = esar.ec_exam_registration_type AND esar.valuation_details IS NOT NULL | |
AND (CAST(esar.properties ->> '$.syllabusSubType' AS CHAR) != 'MOOC' OR esar.properties ->> '$.syllabusSubType' IS NULL) "; | |
try { | |
$registeredStudent = $this->executeQueryForList($query.$whereQuery.$groupBy.$orderBy); | |
} catch (\Exception $e) { | |
throw new ExamControllerException(ExamControllerException::ERROR_FETCHING_STUDENT_REGISTRATION,"Cannot fetch exams! Please try again"); | |
} | |
return $registeredStudent; | |
} | |
catch(\Exception $e) { | |
throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
} | |
} | |
/** | |
* Get Student Question wise mark report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getStudentQuestionWiseMarkReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request->registerNo = $searchRequest->registerNo; | |
$request->assessmentId = $searchRequest->assessmentId; | |
$request->studentId = $searchRequest->studentId; | |
$additionalInfo = new \stdClass; | |
$resultData = new \stdClass; | |
$templateName = "student-question-wise-mark-report-template-1"; | |
$questions = []; | |
if(empty($request->registerNo) && !$request->studentId){ | |
throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS,"Invalid Request"); | |
} | |
$request->studentId = $request->studentId ? $request->studentId : $this->getStudentIdByRegisterNo($request->registerNo); | |
if(empty($request->studentId) || empty($request->assessmentId)){ | |
throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS,"Invalid Request"); | |
} | |
$resultData = $this->getStudentQuestionWiseMarkDetails($request); | |
foreach($resultData as $question){ | |
if(!$question->mainQuestionId){ | |
$questions[$question->questionId] = $question; | |
$questions[$question->questionId]->subQuestions =[]; | |
} | |
} | |
foreach($resultData as $question){ | |
if($question->mainQuestionId){ | |
$questions[$question->mainQuestionId]->subQuestions[$question->questionId] = $question; | |
} | |
} | |
$questions = array_values($questions); | |
array_walk($questions,function($question){ | |
$question->subQuestions = array_values($question->subQuestions); | |
}); | |
$additionalInfo = $this->getStudentSubjectDetails($request); | |
$additionalInfo->valCounts = [1,2,3]; | |
if(empty($resultData)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"No details found."); | |
} | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/studentQuestionWiseMarkReport/$templateName.twig"), [ 'questionAnswers'=>$questions,'additionalInfo'=>$additionalInfo]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
</style>"; | |
$prtContent .= '</head><title>Student Question Wise Mark Report</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 = $responseHtml; | |
$programResult->printData = PdfUtil::renderPdf($prtContent, $options); | |
return $programResult; | |
} | |
/** | |
* Get Registered Student Question Wise mark details | |
* @param $request | |
* @return $students | |
*/ | |
public function getStudentQuestionWiseMarkDetails($request){ | |
try{ | |
$request = $this->realEscapeObject($request); | |
$query = "SELECT DISTINCT | |
oeq.id AS questionId, | |
oeq.mark AS maxQuestionMark, | |
oeq.properties ->> '$.mainQuestionId' AS mainQuestionId, | |
oeua.oe_exam_answers_id AS answerId, | |
oeua.answer, | |
oeua.answers, | |
IF ( | |
oeq.properties ->> '$.type' = 'MCQ', | |
oea.point, | |
oeum.mark | |
) AS mark, | |
oeum.valuation_marks AS multipleValuationMarks, | |
oeq.properties ->> '$.type' AS questionType, | |
oeq.properties ->> '$.section' AS questionSection, | |
oeq.properties ->> '$.orderNo' AS questionOrderNo, | |
oes.properties ->> '$.orderNo' AS orderNo, | |
oes.name AS section_name | |
FROM | |
oe_exams oe | |
INNER JOIN | |
oe_exam_questions oeq ON | |
oeq.oe_exams_id = oe.id | |
LEFT JOIN | |
oe_exam_user_answers oeua ON | |
oeq.oe_exams_id = oeua.oe_exams_id | |
AND oeq.id = oeua.oe_exam_questions_id | |
AND oeua.user_type = 'STUDENT' | |
AND oeua.user_id = '$request->studentId' | |
LEFT JOIN | |
oe_exam_answers oea ON | |
oea.oe_exams_id = oeua.oe_exams_id | |
AND oea.oe_exam_questions_id = oeua.oe_exam_questions_id | |
AND oea.id = oeua.oe_exam_answers_id | |
LEFT JOIN | |
oe_exam_user_mark oeum ON | |
oeum.oe_exams_id = oeq.oe_exams_id | |
AND oeum.oe_exam_questions_id = oeq.id | |
AND oeum.user_type = 'STUDENT' | |
AND oeum.user_id = '$request->studentId' | |
LEFT JOIN | |
oe_exam_sections oes ON | |
oes.oe_exams_id = oe.id | |
AND JSON_EXTRACT(oeq.properties, | |
'$.section') = oes.id | |
WHERE | |
oe.identifying_context->>'$.assessmentId' = '$request->assessmentId' | |
ORDER BY | |
CAST(oes.properties ->> '$.orderNo' AS UNSIGNED) ASC, | |
CAST(oeq.properties ->> '$.orderNo' AS UNSIGNED) ASC, | |
oeq.question ASC"; | |
$studentQuestionWiseMark = $this->executeQueryForList($query); | |
} | |
catch (\Exception $e) { | |
throw new ExamControllerException(ExamControllerException::ERROR_FETCHING_STUDENT_REGISTRATION,"Cannot fetch exams! Please try again"); | |
} | |
foreach($studentQuestionWiseMark as $question){ | |
$question->multipleValuationMarks = (array)json_decode($question->multipleValuationMarks); | |
} | |
return $studentQuestionWiseMark; | |
} | |
/** | |
* Get StudentId by student register No | |
* @param $regNo | |
* @return $studentId | |
*/ | |
public function getStudentIdByRegisterNo($regNo){ | |
try{ | |
$query = "SELECT | |
spa.student_id as studentId | |
FROM | |
student_program_account spa | |
WHERE | |
spa.properties->>'$.registerNumber' = '$regNo'"; | |
try { | |
$studentId = $this->executeQueryForObject($query)->studentId; | |
} catch (\Exception $e) { | |
throw new ExamControllerException(ExamControllerException::ERROR_FETCHING_STUDENT_REGISTRATION,"Cannot fetch exams! Please try again"); | |
} | |
return $studentId; | |
} | |
catch(\Exception $e) { | |
throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
} | |
} | |
/** | |
* Get student subject Valuation Mark Details | |
* @param $request | |
* @return $students | |
*/ | |
public function getStudentSubjectDetails($request){ | |
try{ | |
$request = $this->realEscapeObject($request); | |
$query = "SELECT DISTINCT | |
sa.studentID as studentId, | |
aa.id AS assessmentId, | |
sa.studentName, | |
spa.properties->>'$.registerNumber' AS registerNo, | |
spa.properties->>'$.rollNumber' AS rollNo, | |
caps.properties->>'$.externalMaxMark' AS externalMaxMark, | |
sub.code AS subjectCode, | |
sub.name AS subjectName, | |
caps.id AS academicPaperSubjectId, | |
oec1.is_confirmed as mark1Confirm, | |
oec1.exam_mark as mark1, | |
oec2.is_confirmed as mark2Confirm, | |
oec2.exam_mark as mark2, | |
oec3.is_confirmed as mark3Confirm, | |
oec3.exam_mark as mark3, | |
oecRew.is_confirmed as markReviewConfirm, | |
oecRew.exam_mark as markReview | |
FROM | |
ec_student_assessment_registration esar | |
INNER JOIN studentaccount sa ON | |
sa.studentID = esar.student_id | |
INNER JOIN am_assessment aa ON | |
aa.id = esar.am_assessment_id | |
INNER JOIN oe_exams oe ON | |
oe.assessment_id = aa.id AND oe.is_deleted = 0 | |
INNER JOIN ec_exam_registration_subject eers ON | |
eers.am_assessment_id = aa.id | |
INNER JOIN ec_exam_registration_batch eerb ON | |
eerb.id = eers.ec_exam_registration_batch_id | |
INNER JOIN ec_exam_registration eer ON | |
eer.id = eerb.ec_exam_registration_id AND | |
eer.trashed IS NULL | |
INNER JOIN `groups` g ON | |
g.id = eerb.groups_id | |
INNER JOIN program p ON | |
p.id = g.properties->>'$.programId' | |
INNER JOIN student_program_account spa ON | |
spa.student_id = esar.student_id AND | |
spa.current_program_id = p.id | |
INNER JOIN cm_academic_paper_subjects caps ON | |
caps.id = eers.cm_academic_paper_subjects_id | |
INNER JOIN v4_ams_subject sub ON | |
sub.id = caps.ams_subject_id | |
LEFT JOIN oe_exam_marks_confirm oec1 ON oec1.oe_exams_id = oe.id AND oec1.oe_users_id = sa.studentID AND oec1.valuation_count = 1 AND (oec1.revaluation_id IS NULL OR oec1.revaluation_id = '') AND oec1.is_confirmed = '1' AND oec1.review_id IS NULL | |
LEFT JOIN oe_exam_marks_confirm oecRew ON oecRew.oe_exams_id = oe.id AND oecRew.oe_users_id = sa.studentID AND oecRew.valuation_count = 1 AND (oecRew.revaluation_id IS NULL OR oecRew.revaluation_id = '') AND oecRew.is_confirmed = '1' AND oecRew.review_id IS NOT NULL | |
LEFT JOIN oe_exam_marks_confirm oec2 ON oec2.oe_exams_id = oe.id AND oec2.oe_users_id = sa.studentID AND oec2.valuation_count = 2 AND (oec2.revaluation_id IS NULL OR oec2.revaluation_id = '') AND oec2.is_confirmed = '1' | |
LEFT JOIN oe_exam_marks_confirm oec3 ON oec3.oe_exams_id = oe.id AND oec3.oe_users_id = sa.studentID AND oec3.valuation_count = 3 AND (oec3.revaluation_id IS NULL OR oec3.revaluation_id = '') AND oec3.is_confirmed = '1' | |
WHERE | |
esar.trashed IS NULL AND esar.properties ->> '$.registrationStatus' IN ('REGISTERED') AND esar.student_id = '$request->studentId' AND esar.am_assessment_id = '$request->assessmentId'"; | |
$studentSubjectDetails = $this->executeQueryForObject($query); | |
return $studentSubjectDetails; | |
} | |
catch(\Exception $e) { | |
throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
} | |
} | |
/** | |
* Get Governing Council Report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getGoverningCouncilReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request->courseTypeId = $searchRequest->courseTypeId; | |
$request->admissionYear = $searchRequest->admissionYear; | |
$request->academicTermId = $searchRequest->academicTermId; | |
$additionalInfo = new \stdClass; | |
$resultData = new \stdClass; | |
$genders = [ | |
"MALE"=>"MALE", | |
"FEMALE"=>"FEMALE" | |
]; | |
$templateName = "governing-council-report-template-1"; | |
$batchGroups = FinalConsolidatedReportService::getInstance()->getBatchesByAcademicTerm($request); | |
if(empty($batchGroups)){ | |
throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS,"No batches found"); | |
} | |
foreach($batchGroups as $batchKey => $batch){ | |
$academicStartYear = ""; | |
$academicEndYear = ""; | |
// $academicTermRequest = new \stdClass; | |
// $academicTermRequest->groupId = $batch->id; | |
// $academicTermRequest->academicTermId = $request->academicTermId; | |
// $allSemesterDetails = CommonExamService::getInstance()->getAllAcademicTermsDetailsByBatch($academicTermRequest); | |
$studentMarkDetailsRequest = new \stdClass; | |
$studentMarkDetailsRequest->groupId = $batch->id; | |
$studentMarkDetailsRequest->academicTermId = $searchRequest->academicTermId; | |
$studentMarkDetailsRequest->considerSupplementary = false; | |
$students = $this->getAllRegistredStudentSemesterDetails($studentMarkDetailsRequest); | |
$allSemesterDetails = max(array_map(function($o){return $o->semesters;},$students)); | |
if($allSemesterDetails ){ | |
$firstSemExamDetails = reset(array_filter(reset($allSemesterDetails)->semesterMarkHistory,function($value){ | |
return $value->historyType == 'REGULAR'; | |
})); | |
$lastSemExamDetails = reset(array_filter(end($allSemesterDetails)->semesterMarkHistory,function($value){ | |
return $value->historyType == 'REGULAR'; | |
})); | |
if(!$firstSemExamYear){ | |
$firstSemExamYear = $firstSemExamDetails->examYear; | |
} | |
else{ | |
$firstSemExamYear = (int)$firstSemExamYear > (int)$firstSemExamDetails->examYear ? $firstSemExamDetails->examYear : $firstSemExamYear; | |
} | |
if(!$lastSemExamYear){ | |
$lastSemExamYear = $lastSemExamDetails->examYear; | |
} | |
else{ | |
$lastSemExamYear = (int)$lastSemExamYear < (int)$lastSemExamDetails->examYear ? $lastSemExamDetails->examYear : $lastSemExamYear; | |
} | |
} | |
$batch->noOfSeats = 0; | |
if($students){ | |
foreach ( $allSemesterDetails as $academicTerm ) { | |
foreach ($genders as $gender) { | |
$studentCountRequest = new \stdClass; | |
$studentCountRequest->groupId = $batch->id; | |
$studentCountRequest->academicTermId = $academicTerm->id; | |
$studentCountRequest->gender = $gender; | |
$batch->semesters[$academicTerm->id]->name = $academicTerm->name; | |
$batch->semesters[$academicTerm->id]->gender[$gender]->studentCount = $this->getAssignedStudentsCount($studentCountRequest); | |
// $studentCountRequest->isRegisteredStudent = true; | |
// $batch->semesters[$academicTerm->id]->gender[$gender]->noOfRegisteredStudents = $this->getAssignedStudentsCount($studentCountRequest); | |
} | |
} | |
foreach($students as $student){ | |
foreach($student->semesters as $academicTerm){ | |
$batch->semesters[$academicTerm->id]->gender[$student->gender]->totalRegStudents++; | |
$batch->semesters[$academicTerm->id]->totalRegStudents++; | |
if($academicTerm->semesterFailedStatus == 'PASSED'){ | |
$batch->semesters[$academicTerm->id]->gender[$student->gender]->totalPassStudents++; | |
$batch->semesters[$academicTerm->id]->totalPassStudents++; | |
} | |
$batch->semesters[$academicTerm->id]->totalPercentage = round(($batch->semesters[$academicTerm->id]->totalPassStudents / $batch->semesters[$academicTerm->id]->totalRegStudents) * 100, 2); | |
} | |
} | |
} | |
ksort($batch->semesters); | |
$batch->semesterCount = count($batch->semesters); | |
if(!$batch->semesterCount){ | |
unset($batchGroups[$batchKey]); | |
} | |
} | |
$additionalInfo->collegeData = CommonExamService::getInstance()->getCollegeDetails(); | |
$additionalInfo->batchStartYear = $searchRequest->admissionYear; | |
$additionalInfo->academicYears = $firstSemExamYear ? $firstSemExamYear : ''; | |
$additionalInfo->academicYears .= $lastSemExamYear? ' - '.$lastSemExamYear : '' ; | |
$additionalInfo->courseType = CourseTypeService::getInstance()->getCourseTypesById ($searchRequest->courseTypeId)->typeName; | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/governingCouncilReport/$templateName.twig"), [ 'batches'=>$batchGroups,'additionalInfo'=>$additionalInfo]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
</style>"; | |
$prtContent .= '</head><title>Governing Council Report</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 = $responseHtml; | |
$programResult->printData = PdfUtil::renderPdf($prtContent, $options); | |
return $programResult; | |
} | |
/** | |
* get count of assigned students by batch | |
* @param $searchRequest | |
* @return $assignedStudentsCount | |
* @author Krishnajith | |
*/ | |
public function getAssignedStudentsCount($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try{ | |
$whereQuery = ""; | |
if(!empty($searchRequest->groupId)) { | |
$groupIdString = is_array($searchRequest->groupId) ? "'" . implode("','",$searchRequest->groupId) . "'" : "'".$searchRequest->groupId."'"; | |
$whereQuery .= " AND g.id IN ( $groupIdString )"; | |
} | |
if(!empty($searchRequest->gender)) { | |
$whereQuery .= " AND s.studentGender = '$searchRequest->gender'"; | |
} | |
if(!empty($searchRequest->academicTermId)) { | |
$whereQuery .= " AND act.id = '$searchRequest->academicTermId'"; | |
} | |
$query = "SELECT COUNT(DISTINCT spa.student_id) as studentCount | |
FROM studentaccount s | |
INNER JOIN student_program_account spa | |
ON spa.student_id = s.studentID | |
INNER JOIN student_program_batch_log spbl | |
ON spbl.program_student_id = spa.id AND | |
spbl.properties->>'$.academicStatus' IN ('ACTIVE','COMPLETED') | |
INNER JOIN `program` p | |
ON p.id = spbl.program_id | |
INNER JOIN `groups` g | |
ON g.id = spbl.batch_group_id | |
INNER JOIN groups_relations gr ON | |
gr.parent_groups_id = g.id | |
INNER JOIN `groups` sg ON | |
sg.id = gr.child_groups_id AND sg.type = 'SUBJECT' | |
INNER JOIN group_members sgm ON | |
sgm.groups_id = sg.id AND | |
sgm.members->>'$.studentId' = spa.id AND | |
sgm.academic_status IN ('ACTIVE') | |
INNER JOIN cm_academic_paper_subjects aps ON | |
aps.id = sg.paperSubjectId | |
INNER JOIN academic_term act ON | |
act.id = sg.academic_term_id AND act.id = spbl.term_id | |
WHERE 1=1 "; | |
$assignedStudentsCount = $this->executeQueryForObject($query.$whereQuery); | |
} | |
catch (\Exception $e){ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $assignedStudentsCount->studentCount; | |
} | |
/** | |
* get All Registered Students Semester Details | |
* @param $searchRequest | |
*/ | |
public function getAllRegistredStudentSemesterDetails($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try{ | |
$orderBy = "ORDER BY act.properties ->> '$.orderNo' ASC"; | |
$whereQuery = ""; | |
if(!empty($searchRequest->groupId)) { | |
$groupIdString = is_array($searchRequest->groupId) ? "'" . implode("','",$searchRequest->groupId) . "'" : "'".$searchRequest->groupId."'"; | |
$whereQuery .= " AND g.id IN ( $groupIdString )"; | |
} | |
if(!empty($searchRequest->academicTermId)) { | |
$semesterIdString = is_array($searchRequest->academicTermId) ? "'" . implode("','",$searchRequest->academicTermId) . "'" : "'".$searchRequest->academicTermId."'"; | |
$whereQuery .= " AND act.id IN ( $semesterIdString )"; | |
} | |
$query = "SELECT DISTINCT | |
sa.studentID AS id, | |
sa.studentID AS studentId, | |
sa.studentName AS name, | |
sa.studentGender AS gender, | |
g.id AS groupId, | |
g.name AS groupName, | |
act.id AS academicTermId, | |
act.name AS academicTermName, | |
g.properties ->> '$.startYear' AS academicYear, | |
esmdsem.mark_history AS semesterMarkHistory, | |
esmdsem.failed_status AS semesterFailedStatus | |
FROM | |
`groups` g | |
INNER JOIN ec_exam_registration_batch eerb ON | |
eerb.groups_id = g.id | |
INNER JOIN ec_exam_registration_subject eers ON | |
eers.ec_exam_registration_batch_id = eerb.id | |
INNER JOIN cm_academic_paper_subjects aps ON | |
eers.cm_academic_paper_subjects_id = aps.id | |
INNER JOIN v4_ams_subject s ON | |
aps.ams_subject_id = s.id | |
INNER JOIN ec_exam_registration eer ON | |
eer.id = eerb.ec_exam_registration_id | |
INNER JOIN ec_student_assessment_registration esar ON | |
esar.am_assessment_id = eers.am_assessment_id | |
AND esar.properties ->>'$.feeStatus' = 'PAID' | |
AND esar.properties ->>'$.registrationStatus' = 'REGISTERED' | |
AND esar.ec_exam_registration_type = eer.type | |
INNER JOIN studentaccount sa ON | |
sa.studentID = esar.student_id | |
INNER JOIN academic_term act ON | |
act.id = CAST(eerb.properties ->> '$.academicTermId'AS CHAR) | |
INNER JOIN program p ON | |
p.id = CAST(g.properties ->> '$.programId' AS CHAR) | |
INNER JOIN ec_semester_mark_details esmdsem ON | |
esmdsem.groups_id = eerb.groups_id AND esmdsem.academic_term_id = act.id AND esmdsem.student_id = sa.studentID | |
WHERE 1=1"; | |
$studentMarkDetails = $this->executeQueryForList($query.$whereQuery.$orderBy); | |
} | |
catch (\Exception $e){ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
$studentSemesterDetails = []; | |
foreach($studentMarkDetails as $student){ | |
$studentSemesterDetails[$student->id]->id = $student->id; | |
$studentSemesterDetails[$student->id]->id = $student->id; | |
$studentSemesterDetails[$student->id]->name = $student->name; | |
$studentSemesterDetails[$student->id]->gender = $student->gender; | |
$studentSemesterDetails[$student->id]->groupId = $student->groupId; | |
$studentSemesterDetails[$student->id]->groupName = $student->groupName; | |
$studentSemesterDetails[$student->id]->semesters[$student->academicTermId]->id = $student->academicTermId; | |
$studentSemesterDetails[$student->id]->semesters[$student->academicTermId]->name = $student->academicTermName; | |
$studentSemesterDetails[$student->id]->semesters[$student->academicTermId]->semesterMarkHistory = json_decode($student->semesterMarkHistory); | |
if(!$searchRequest->considerSupplementary){ | |
$currentAcademicTerm = new \stdClass; | |
$currentAcademicTerm = reset(array_filter($studentSemesterDetails[$student->id]->semesters[$student->academicTermId]->semesterMarkHistory ,function($value){ | |
return $value->historyType == "REGULAR"; | |
})); | |
$studentSemesterDetails[$student->id]->semesters[$student->academicTermId]->semesterFailedStatus = $currentAcademicTerm ? $currentAcademicTerm->failedStatus : ''; | |
} | |
else{ | |
$studentSemesterDetails[$student->id]->semesters[$student->academicTermId]->semesterFailedStatus = $student->failedStatus; | |
} | |
}; | |
return $studentSemesterDetails; | |
} | |
/** | |
* Get Mark Card issue register report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getMarkCardIssueRegisterReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request->examType = $searchRequest->examType; | |
$request->departmentId = $searchRequest->departmentId; | |
$request->groupId = $searchRequest->groupId; | |
$request->examRegistrationId = $searchRequest->examRegistrationId; | |
$additionalInfo = new \stdClass; | |
$resultData = new \stdClass; | |
$templateName = "consolidated-marks-card-issue-register-template"; | |
$batches = []; | |
if($request->examType == 'REGULAR' ){ | |
$studentDetailsRequest = new \stdClass; | |
$studentDetailsRequest->departmentId = $searchRequest->departmentId; | |
$studentDetailsRequest->groupId = $searchRequest->groupId; | |
$studentDetailsRequest->examRegistrationBatchId = $searchRequest->examRegistrationBatchId; | |
$students = $this->getAssignedSubjectStudentsDetails($studentDetailsRequest); | |
$additionalInfo->isSupplementary = false; | |
} | |
else if($request->examType == 'SUPPLEMENTARY' ){ | |
$studentDetailsRequest = new \stdClass; | |
$studentDetailsRequest->examRegistrationId = $searchRequest->examRegistrationId; | |
$studentDetailsRequest->examRegistrationBatchId = $searchRequest->examRegistrationBatchId; | |
$students = $this->getAllExamRegisteredStudentDetails($studentDetailsRequest); | |
$additionalInfo->isSupplementary = true; | |
} | |
if(empty($students)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"No details found."); | |
} | |
foreach($students as $student){ | |
$student->studentImage = StudentService::getInstance()->getStudentProfilePic($student->studentId)->docpath; | |
$student->studentSignature = StudentService::getInstance()->getStudentSignPic($student->studentId)->docpath; | |
$batches[$student->groupId]->id = $student->groupId; | |
$batches[$student->groupId]->name = $student->groupName; | |
if($student->examRegistrationName){ | |
$batches[$student->groupId]->examRegistrationName = $student->examRegistrationName; | |
} | |
$batches[$student->groupId]->students[] = $student; | |
} | |
$additionalInfo->collegeData = CommonExamService::getInstance()->getCollegeDetails(); | |
$semesters = CommonExamService::getInstance()->getAcademicTermDetailsUptoFinalTerm($request); | |
foreach($semesters as $semester){ | |
$semesterNames = CommonExamService::getInstance()->getDifferentSemesterName($semester->name); | |
$semester->semInRomanLetter = $semesterNames->romanLetter; | |
$semester->semInFullName = $semesterNames->fullName; | |
$semester->semInSemNumber = $semesterNames->semNumber; | |
$semester->semPrefix = $semesterNames->prefix; | |
} | |
$additionalInfo->semesters = $semesters; | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/markCardIssueRegister/$templateName.twig"), [ 'batches'=>$batches,'additionalInfo'=>$additionalInfo]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
</style>"; | |
$prtContent .= '</head><title>Mark Card Issue Register</title><body>'; | |
$prtContent .= $responseHtml; | |
$prtContent .= '</body></html>'; | |
$totalWidth = 297; | |
$totalHeight = 210; | |
$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; | |
} | |
/** | |
* get Assigned Subject Students Details | |
* @param $searchRequest | |
* @return $studentDetails | |
* @author Krishnajith | |
*/ | |
public function getAssignedSubjectStudentsDetails($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try{ | |
$orderBy = " ORDER BY spa.properties->>'$.registerNumber' ASC"; | |
$whereQuery = ""; | |
if(!empty($searchRequest->groupId)) { | |
$groupIdString = is_array($searchRequest->groupId) ? "'" . implode("','",$searchRequest->groupId) . "'" : "'".$searchRequest->groupId."'"; | |
$whereQuery .= " AND g.id IN ( $groupIdString )"; | |
} | |
if(!empty($searchRequest->programId)) { | |
$programIdString = is_array($searchRequest->programId) ? "'" . implode("','",$searchRequest->programId) . "'" : "'".$searchRequest->programId."'"; | |
$whereQuery .= " AND p.id IN ( $programIdString )"; | |
} | |
if(!empty($searchRequest->departmentId)) { | |
$departmentIdString = is_array($searchRequest->departmentId) ? "'" . implode("','",$searchRequest->departmentId) . "'" : "'".$searchRequest->departmentId."'"; | |
$whereQuery .= " AND dpt.deptID IN ( $departmentIdString )"; | |
} | |
$query = "SELECT DISTINCT | |
g.id AS groupId, | |
g.name AS groupName, | |
g.properties ->>'$.programId' AS programId, | |
dpt.deptName AS departmentName, | |
dpt.deptID AS departmentId, | |
spa.student_id AS studentId, | |
spa.properties->>'$.rollNumber' AS studentRollNo, | |
IF (spa.properties->>'$.registerNumber',spa.properties->>'$.registerNumber',' ')AS studentRegisterNo, | |
s.studentName AS studentName | |
FROM | |
studentaccount s | |
INNER JOIN student_program_account spa | |
ON spa.student_id = s.studentID | |
INNER JOIN student_program_batch_log spbl | |
ON spbl.program_student_id = spa.id AND spbl.properties->>'$.academicStatus' IN ('ACTIVE','COMPLETED') | |
INNER JOIN `program` p | |
ON p.id = spbl.program_id | |
INNER JOIN `groups` g | |
ON g.id = spbl.batch_group_id | |
INNER JOIN department dpt ON | |
dpt.deptID = g.properties->>'$.departmentId' | |
INNER JOIN group_members gm ON | |
gm.groups_id = g.id AND | |
gm.members->>'$.studentId' = spa.id | |
WHERE 1=1 "; | |
$studentDetails = $this->executeQueryForList($query.$whereQuery.$orderBy); | |
} | |
catch (\Exception $e){ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $studentDetails; | |
} | |
/** | |
* get All Exam Registered Student Details | |
* @param $searchRequest | |
* @return $registeredStudentsDetails | |
* @author Krishnajith | |
*/ | |
public function getAllExamRegisteredStudentDetails($searchRequest){ | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try{ | |
$whereQuery = null; | |
$orderBy = " ORDER BY spa.properties->>'$.registerNumber' ASC "; | |
$whereQuery = ""; | |
if(!empty($searchRequest->examRegistrationId)) { | |
$examRegistrationIdString = is_array($searchRequest->examRegistrationId) ? "'" . implode("','",$searchRequest->examRegistrationId) . "'" : "'".$searchRequest->examRegistrationId."'"; | |
$whereQuery .= " AND eer.id IN ( $examRegistrationIdString )"; | |
} | |
if(!empty($searchRequest->examRegistrationBatchId)) { | |
$examRegistrationBatchIdString = is_array($searchRequest->examRegistrationBatchId) ? "'" . implode("','",$searchRequest->examRegistrationBatchId) . "'" : "'".$searchRequest->examRegistrationBatchId."'"; | |
$whereQuery .= " AND eerb.id IN ( $examRegistrationBatchIdString )"; | |
} | |
$query = "SELECT | |
DISTINCT | |
sa.studentID AS id, | |
sa.studentID AS studentId, | |
sa.studentName AS studentName, | |
spa.properties->>'$.rollNumber' AS rollNo, | |
spa.properties->>'$.registerNumber' AS studentRegisterNo, | |
g.id AS groupId, | |
g.name AS groupName, | |
eer.id AS examRegistrationId, | |
eer.name AS examRegistrationName, | |
dept.deptID, | |
dept.deptName, | |
dept.departmentDesc | |
FROM | |
`groups` g | |
INNER JOIN ec_exam_registration_batch eerb ON | |
eerb.groups_id = g.id | |
INNER JOIN ec_exam_registration eer ON | |
eer.id = eerb.ec_exam_registration_id | |
INNER JOIN ec_exam_registration_subject eers ON | |
eers.ec_exam_registration_batch_id = eerb.id | |
INNER JOIN cm_academic_paper_subjects aps ON | |
eers.cm_academic_paper_subjects_id = aps.id | |
INNER JOIN am_assessment aa ON | |
aa.id = eers.am_assessment_id | |
INNER JOIN program p ON | |
p.id = g.properties ->> '$.programId' | |
INNER JOIN ec_student_assessment_registration esar ON | |
esar.am_assessment_id = eers.am_assessment_id AND CAST(esar.properties ->> '$.registrationStatus' AS CHAR) = 'REGISTERED' AND CAST(esar.properties ->> '$.feeStatus' AS CHAR) = 'PAID' AND esar.ec_exam_registration_type = eer.type | |
INNER JOIN student_program_account spa ON | |
spa.current_program_id = p.id AND | |
spa.student_id = esar.student_id | |
INNER JOIN studentaccount sa ON | |
sa.studentID = spa.student_id | |
INNER JOIN department dept ON | |
dept.deptID = g.properties ->> '$.departmentId' | |
WHERE 1=1 "; | |
$registeredStudentsDetails = $this->executeQueryForList($query.$whereQuery.$orderBy); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $registeredStudentsDetails; | |
} | |
/** | |
* get Registered Student Count Report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getRegisteredStudentCountReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request->examType = $searchRequest->examType; | |
$request->examRegistrationId = $searchRequest->examRegistrationId; | |
$request->examDate = $searchRequest->examDate; | |
$request->session = $searchRequest->session; | |
$request->reportType = $searchRequest->reportType; | |
$additionalInfo = new \stdClass; | |
$resultData = new \stdClass; | |
$templateName = "registered-student-count-report"; | |
$examSessions = [ | |
"FN" => "AM", | |
"AN" => "PM" | |
]; | |
if($request->examRegistrationId){ | |
$subjects = ExamRegistrationSubjectService::getInstance()->getAllSubjectDetailsByRegistration($request->examRegistrationId); | |
} | |
if(empty($subjects)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"No details found."); | |
} | |
foreach($subjects as $subjectKey => $subject){ | |
if($request->examDate){ | |
if ( date('Y-m-d', strtotime($request->examDate)) != date('Y-m-d', strtotime($subject->assessmentDate)) || empty($subject->assessmentDate) || $subject->assessmentDate == "0000-00-00"){ | |
unset($subjects[$subjectKey]); | |
continue; | |
} | |
} | |
if($request->session){ | |
$examTime = date('A', strtotime($subject->assessmentStartTime)); | |
if(($examSessions[$request->session] != $examTime) || empty($subject->assessmentStartTime) || $subject->assessmentStartTime == "00:00:00"){ | |
unset($subjects[$subjectKey]); | |
continue; | |
} | |
} | |
$studentCountRequest = new \stdClass; | |
$studentCountRequest->examRegistrationId = $request->examRegistrationId; | |
$studentCountRequest->assessmentId = explode(',',$subject->assessmentIds); | |
$studentCountRequest->academicPaperSubjectId = $subject->academicPaperSubjectId; | |
$subject->studentCount = StudentExamRegistrationService::getInstance()->getCountOfRegisteredStudents($studentCountRequest); | |
$subject->assessmentDate = $subject->assessmentDate && $subject->assessmentDate != "0000-00-00" ? date("d-m-Y", strtotime($subject->assessmentDate)) : ''; | |
$subject->assessmentStartTime = $subject->assessmentDate && $subject->assessmentStartTime != "00:00:00" ? ($subject->assessmentStartTime ? date("h:i A", strtotime($subject->assessmentStartTime)) : '') : ''; | |
} | |
if($request->reportType == 'COURSE_WISE'){ | |
$distinctSubjects = []; | |
foreach($subjects as $subject){ | |
if(isset($distinctSubjects[$subject->amsSubjectId])){ | |
$distinctSubjects[$subject->amsSubjectId]->studentCount += $subject->studentCount; | |
$distinctSubjects[$subject->amsSubjectId]->groupNames[$subject->groupId] = $subject->groupName; | |
} else { | |
$distinctSubjects[$subject->amsSubjectId] = $subject; | |
$distinctSubjects[$subject->amsSubjectId]->groupNames = [$subject->groupId => $subject->groupName]; | |
} | |
} | |
foreach($distinctSubjects as $subject){ | |
$subject->groupName = implode(", ", $subject->groupNames); | |
} | |
$subjects = array_values($distinctSubjects); | |
} | |
else{ | |
$subjects = array_values($subjects); | |
} | |
if(empty($subjects)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"No details found."); | |
} | |
// $requestForExamRegistration = new SearchExamRegistrationRequest; | |
// $requestForExamRegistration->id = $request->examRegistrationId; | |
// $additionalInfo->examRegistration = reset(ExamRegistrationService::getInstance()->searchExamRegistration($requestForExamRegistration)); | |
$additionalInfo->collegeData = CommonExamService::getInstance()->getCollegeDetails(); | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/registeredStudentCountReport/$templateName.twig"), [ 'subjects'=>$subjects,'additionalInfo'=>$additionalInfo]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
</style>"; | |
$prtContent .= '</head><title>Registered Student Count Report</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 = $responseHtml; | |
$programResult->subjects = $subjects; | |
$programResult->printData = PdfUtil::renderPdf($prtContent, $options); | |
return $programResult; | |
} | |
/** | |
* get Evaluation Report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getEvaluationReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$templateName = "evaluation-report-template"; | |
$request = new \stdClass; | |
$additionalInfo = new \stdClass; | |
$additionalInfo->extValRequired = false; | |
$request->courseTypeId = $searchRequest->courseTypeId; | |
$request->examType = $searchRequest->examType; | |
$request->examRegistrationId = $searchRequest->examRegistrationId; | |
$request->groupId = $searchRequest->groupId; | |
$request->assessmentId = $searchRequest->assessmentId; | |
$request->valuationCount = $searchRequest->valuationCount; | |
$courseType = CourseTypeService::getInstance()->getCourseTypesById ($request->courseTypeId); | |
$additionalInfo->courseTypeName = $courseType->typeName; | |
if($courseType->extValRequired == '1'){ | |
$additionalInfo->extValRequired = true; | |
$additionalInfo->valuationCounts = $request->valuationCount; | |
} | |
$subjectStudentsDetails = []; | |
$students = ExamValuationService::getInstance()->getAllStudentExternalMarksByExamRegistrationSubject($request); | |
if(empty($students)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"No students found."); | |
} | |
foreach($students as $student){ | |
$subjectStudentsDetails[$student->subjectId]->id = $student->subjectId; | |
$subjectStudentsDetails[$student->subjectId]->subjectCode = $student->subjectCode; | |
$subjectStudentsDetails[$student->subjectId]->subjectName = $student->subjectName; | |
$subjectStudentsDetails[$student->subjectId]->students[] = $student; | |
} | |
$batchRequest = new \stdClass; | |
$batchRequest->groupsIds = $searchRequest->groupId; | |
$batchDetails = FinalConsolidatedReportService::getInstance()->getAllGroupDetailsByGroupIds($batchRequest); | |
foreach($batchDetails as $batch){ | |
$batchNames[] = $batch->groupName; | |
} | |
$additionalInfo->batchName = implode(" , ",$batchNames); | |
$requestForExamRegistration = new SearchExamRegistrationRequest; | |
$requestForExamRegistration->id = $request->examRegistrationId; | |
$additionalInfo->examRegistration = reset(ExamRegistrationService::getInstance()->searchExamRegistration($requestForExamRegistration)); | |
$additionalInfo->collegeData = CommonExamService::getInstance()->getCollegeDetails(); | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/evaluationReport/$templateName.twig"), [ 'subjects'=>$subjectStudentsDetails,'additionalInfo'=>$additionalInfo]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
</style>"; | |
$prtContent .= '</head><title>Evaluation Report</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 = $responseHtml; | |
$programResult->printData = PdfUtil::renderPdf($prtContent, $options); | |
return $programResult; | |
} | |
/** | |
* get End semester Report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getEndSemesterReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$templateName = "end-semester-report-template"; | |
$request = new \stdClass; | |
$additionalInfo = new \stdClass; | |
$request->courseTypeId = $searchRequest->courseTypeId; | |
$request->examType = $searchRequest->examType; | |
$request->examRegistrationId = $searchRequest->examRegistrationId; | |
$request->groupId = $searchRequest->groupId; | |
$students = $this->getAllRegistredStudentOverAllDetails($request); | |
$batchStudents = []; | |
if(empty($students)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"No students found."); | |
} | |
foreach( $students as $student){ | |
$student->semesterMarkHistory = json_decode($student->semesterMarkHistory); | |
$currentAcademicTerm = reset(array_filter($student->semesterMarkHistory ,function($value)use($request){ | |
return $value->examRegistrationId == $request->examRegistrationId; | |
})); | |
$batchStudents[$student->groupId]->id = $student->groupId; | |
$batchStudents[$student->groupId]->deptName = $student->deptName; | |
$batchStudents[$student->groupId]->academicTermName = $student->academicTermName; | |
$semesterNames = CommonExamService::getInstance()->getDifferentSemesterName($batchStudents[$student->groupId]->academicTermName); | |
$batchStudents[$student->groupId]->semInRomanLetter = $semesterNames->romanLetter; | |
$batchStudents[$student->groupId]->name = $student->studentDetails->groupName; | |
$batchStudents[$student->groupId]->subjects[$student->academicPaperSubjectId]->id = $student->academicPaperSubjectId; | |
$batchStudents[$student->groupId]->subjects[$student->academicPaperSubjectId]->code = $student->subjectCode; | |
$batchStudents[$student->groupId]->subjects[$student->academicPaperSubjectId]->name = $student->subjectName; | |
$batchStudents[$student->groupId]->students[$student->id]->id = $student->id; | |
$batchStudents[$student->groupId]->students[$student->id]->registerNo = $student->regNo; | |
$batchStudents[$student->groupId]->students[$student->id]->name = $student->studentName; | |
$batchStudents[$student->groupId]->students[$student->id]->sgpa = $currentAcademicTerm->sgpa; | |
$batchStudents[$student->groupId]->students[$student->id]->failedStatus = $currentAcademicTerm->failedStatus ; | |
$batchStudents[$student->groupId]->students[$student->id]->remarks = ""; | |
$batchStudents[$student->groupId]->students[$student->id]->subjects[$student->academicPaperSubjectId]->id = $student->academicPaperSubjectId; | |
$batchStudents[$student->groupId]->students[$student->id]->subjects[$student->academicPaperSubjectId]->code = $student->subjectCode; | |
$batchStudents[$student->groupId]->students[$student->id]->subjects[$student->academicPaperSubjectId]->name = $student->subjectName; | |
$batchStudents[$student->groupId]->students[$student->id]->subjects[$student->academicPaperSubjectId]->attendanceStatus = $student->subAttendanceStatus; | |
$batchStudents[$student->groupId]->students[$student->id]->subjects[$student->academicPaperSubjectId]->failedStatus = $student->subjectFailedStatus; | |
$batchStudents[$student->groupId]->students[$student->id]->subjects[$student->academicPaperSubjectId]->grade = $student->subjectGrade; | |
} | |
foreach( $batchStudents as $batch){ | |
foreach( $batch->students as $student){ | |
$customFields = AmsCustomFieldsService::getInstance()->getAmsCustomFieldValue(AmsCustomFieldsEntities::STUDENT, $student->id, []); | |
if( $customFields ){ | |
$student->ktuCode = CommonExamService::getInstance()->getCustomFieldObjectList($customFields)->studentData->KTU_CODE; | |
} | |
} | |
} | |
$requestForExamRegistration = new SearchExamRegistrationRequest; | |
$requestForExamRegistration->id = $request->examRegistrationId; | |
$additionalInfo->examRegistration = reset(ExamRegistrationService::getInstance()->searchExamRegistration($requestForExamRegistration)); | |
$additionalInfo->examRegistration->examYear = $additionalInfo->examRegistration->properties->examYear; | |
$additionalInfo->examRegistration->examMonth = $additionalInfo->examRegistration->properties->examMonth; | |
$additionalInfo->examRegistration->examMonthYear = date("F Y", strtotime($additionalInfo->examRegistration->examYear."-".$additionalInfo->examRegistration->examMonth)); | |
$additionalInfo->collegeData = CommonExamService::getInstance()->getCollegeDetails(); | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/endSemesterReport/$templateName.twig"), [ 'batchs'=>$batchStudents,'additionalInfo'=>$additionalInfo]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
</style>"; | |
$prtContent .= '</head><title>Evaluation Report</title><body>'; | |
$prtContent .= $responseHtml; | |
$prtContent .= '</body></html>'; | |
$width = 7 * 38; | |
$height = $width * 1.414; | |
$options = array( | |
'page-width' => $width . "mm", | |
'page-height' => $height . "mm", | |
'dpi' => 96, | |
'margin-top' => "10mm", | |
'margin-left' => "10mm", | |
'margin-right' => "10mm", | |
'margin-bottom' => "10mm", | |
// '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; | |
} | |
/** | |
* get All Registered Students Details | |
* @param $searchRequest | |
*/ | |
public function getAllRegistredStudentOverAllDetails($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try{ | |
$orderBy = " ORDER BY spa.properties->>'$.registerNumber' ASC"; | |
$whereQuery = ""; | |
if(!empty($searchRequest->groupId)) { | |
$groupIdString = is_array($searchRequest->groupId) ? "'" . implode("','",$searchRequest->groupId) . "'" : "'".$searchRequest->groupId."'"; | |
$whereQuery .= " AND g.id IN ( $groupIdString )"; | |
} | |
if(!empty($searchRequest->examRegistrationId)) { | |
$examRegistrationIdString = is_array($searchRequest->examRegistrationId) ? "'" . implode("','",$searchRequest->examRegistrationId) . "'" : "'".$searchRequest->examRegistrationId."'"; | |
$whereQuery .= " AND eer.id IN ( $examRegistrationIdString )"; | |
} | |
if(!empty($searchRequest->studentId)) { | |
$studentIdString = is_array($searchRequest->studentId) ? "'" . implode("','",$searchRequest->studentId) . "'" : "'".$searchRequest->studentId."'"; | |
$whereQuery .= " AND sa.studentID IN ( $studentIdString )"; | |
} | |
if(!empty($searchRequest->academicPaperSubjectId)) { | |
$academicPaperSubjectIdString = is_array($searchRequest->academicPaperSubjectId) ? "'" . implode("','",$searchRequest->academicPaperSubjectId) . "'" : "'".$searchRequest->academicPaperSubjectId."'"; | |
$whereQuery .= " AND aps.id IN ( $academicPaperSubjectIdString )"; | |
} | |
$query = "SELECT DISTINCT | |
sa.studentID AS id, | |
sa.studentID AS studentId, | |
sa.studentName, | |
spa.properties->>'$.registerNumber' as regNo, | |
sa.rollNo, | |
sa.admissionNo, | |
sa.myImage, | |
sa.studentGender, | |
g.id AS groupId, | |
g.name AS groupName, | |
act.id AS academicTermId, | |
act.name AS academicTermName, | |
dept.deptID, | |
deg.name AS degreeName, | |
deg.id AS degreeId, | |
dept.deptName, | |
ct.courseTypeID, | |
ct.typeName AS courseTypeName, | |
ct.course_Type AS courseTypeMethod, | |
g.properties ->> '$.startYear' AS academicYear, | |
eer.type AS latestExamType, | |
eer.properties ->> '$.examYear' AS latestExamYear, | |
eer.properties ->> '$.examMonth' AS latestExamMonth, | |
esmdsem.mark_details ->>'$.sgpa' AS semesterSgpa, | |
esmdsem.mark_details ->>'$.grade' AS semesterGrade, | |
esmdsem.mark_history AS semesterMarkHistory, | |
esmdsem.failed_status AS semesterFailedStatus, | |
esmdsem.mark_details AS semesterMarkDetails, | |
s.code AS subjectCode, | |
aps.properties ->> '$.syllabusName' AS syllabusName, | |
s.name AS subjectName, | |
eers.cm_academic_paper_subjects_id AS academicPaperSubjectId, | |
esmdsub.mark_details ->>'$.externalGrade' AS subjectExtrenalGrade, | |
esmdsub.grade AS subjectGrade, | |
esmdsub.mark_details ->>'$.attendanceStatus' AS subAttendanceStatus, | |
esmdsub.failed_status AS subjectFailedStatus, | |
esmdsubcon.failed_status AS subjectConsolidatedFailedStatus | |
FROM | |
`groups` g | |
INNER JOIN ec_exam_registration_batch eerb ON | |
eerb.groups_id = g.id | |
INNER JOIN ec_exam_registration_subject eers ON | |
eers.ec_exam_registration_batch_id = eerb.id | |
INNER JOIN cm_academic_paper_subjects aps ON | |
eers.cm_academic_paper_subjects_id = aps.id | |
INNER JOIN v4_ams_subject s ON | |
aps.ams_subject_id = s.id | |
INNER JOIN ec_exam_registration eer ON | |
eer.id = eerb.ec_exam_registration_id | |
INNER JOIN ec_student_assessment_registration esar ON | |
esar.am_assessment_id = eers.am_assessment_id | |
AND esar.properties ->>'$.feeStatus' = 'PAID' | |
AND esar.properties ->>'$.registrationStatus' = 'REGISTERED' | |
AND esar.ec_exam_registration_type = eer.type | |
INNER JOIN studentaccount sa ON | |
sa.studentID = esar.student_id | |
INNER JOIN student_program_account spa | |
ON spa.student_id = sa.studentID | |
INNER JOIN groups_relations gr ON | |
gr.parent_groups_id = g.id | |
INNER JOIN `groups` sg ON | |
sg.id = gr.child_groups_id AND sg.type = 'SUBJECT' | |
INNER JOIN group_members sgm ON | |
sgm.groups_id = sg.id AND | |
sgm.academic_status IN ('ACTIVE') AND | |
sgm.members->>'$.studentId' = spa.id | |
INNER JOIN department dept ON | |
dept.deptID = g.properties ->> '$.departmentId' | |
INNER JOIN academic_term act ON | |
act.id = CAST(eerb.properties ->> '$.academicTermId'AS CHAR) | |
INNER JOIN program p ON | |
p.id = CAST(g.properties ->> '$.programId' AS CHAR) | |
INNER JOIN degree deg ON | |
deg.id = p.degree_id | |
INNER JOIN `course_type` ct ON | |
ct.courseTypeID = p.course_type_id | |
INNER JOIN ec_semester_mark_details esmdsem ON | |
esmdsem.groups_id = eerb.groups_id AND esmdsem.academic_term_id = act.id AND esmdsem.student_id = sa.studentID | |
INNER JOIN ec_subject_mark_details esmdsub ON | |
esmdsub.ec_exam_registration_id = eerb.ec_exam_registration_id AND esmdsub.groups_id = eerb.groups_id AND esmdsub.cm_academic_paper_subjects_id = eers.cm_academic_paper_subjects_id AND esmdsub.student_id = sa.studentID | |
INNER JOIN ec_consolidated_subject_mark_details esmdsubcon ON | |
esmdsubcon.groups_id = eerb.groups_id AND esmdsubcon.cm_academic_paper_subjects_id = eers.cm_academic_paper_subjects_id AND esmdsubcon.student_id = sa.studentID | |
WHERE 1=1"; | |
$studentMarkDetails = $this->executeQueryForList($query.$whereQuery.$orderBy); | |
} | |
catch (\Exception $e) | |
{ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $studentMarkDetails; | |
} | |
/** | |
* get Regular Exam Couse Wise Result Analysis | |
* @param $searchRequest | |
* @return $response | |
*/ | |
public function getExamCourseWiseResultAnalysis($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try | |
{ | |
$additionalDetails = new \stdClass; | |
$additionalDetails->collegeName = $GLOBALS['COLLEGE_NAME']; | |
$additionalDetails->collegeCode = $GLOBALS['COLLEGE_CODE']; | |
$additionalDetails->collegeUrl = $GLOBALS['_SERVER']['REQUEST_SCHEME']."://".$GLOBALS['_SERVER']['HTTP_HOST']; | |
$courseWiseResultAnalysisRequest = new \stdClass; | |
$courseWiseResultAnalysisRequest->academicTermId = $searchRequest->academicTermId; | |
$courseWiseResultAnalysisRequest->examRegistrationId = $searchRequest->examRegistrationId; | |
// current exam Registration Details | |
$requestForExamRegistration = new SearchExamRegistrationRequest; | |
$requestForExamRegistration->id = $searchRequest->examRegistrationId; | |
$examRegistration = ExamRegistrationService::getInstance()->searchExamRegistration($requestForExamRegistration); | |
if(!empty($examRegistration)){ | |
$additionalDetails->examRegistrationName = reset($examRegistration)->name; | |
$additionalDetails->examRegistrationType = reset($examRegistration)->type; | |
} | |
$heads = []; | |
$heads['male'] = 'male'; | |
$heads['female'] = 'female'; | |
$heads['consolidated'] = 'consolidated'; | |
$resultAnalysis = $this->getCourseWiseResultAnalysis($courseWiseResultAnalysisRequest); | |
if(empty($resultAnalysis)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"No Entry In This Exam Registration"); | |
} | |
else{ | |
$templateName = "ResultStatisticalAnalysis"; | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/regularExamReportTwigs/$templateName.twig"), [ 'resultAnalysis'=>$resultAnalysis ,'heads'=>$heads, 'additionalDetails'=>$additionalDetails]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
h5 {font-size: 26px;} .text-center { text-align: center;} .align-middle {vertical-align: middle;}; tr.noBorder td {border: 0; border-collapse:collapse;} | |
table, th, td {border: 1px solid black;border-collapse: collapse;} | |
</style>"; | |
$prtContent .= '</head><title>Result Statistical Anaysis</title><body>'; | |
$prtContent .= $responseHtml; | |
$prtContent .= '</body></html>'; | |
$totalWidth = 210; | |
$totalHeight = 297; | |
$options = array( | |
'page-width' => $totalHeight."mm", | |
'page-height' => $totalWidth."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); | |
} | |
} | |
catch (\Exception $e) | |
{ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $programResult; | |
} | |
public function getCourseWiseResultAnalysis($request) | |
{ | |
$request = $this->realEscapeObject($request); | |
try{ | |
$resultAnalysis = []; | |
$searchRequest = new ConsolidatedMarkReportRequest; | |
$searchRequest->examRegistrationId = $request->examRegistrationId; | |
$searchRequest->academicTermId = $request->academicTermId; | |
$studentMarkDetails = RegularExamReportService::getInstance()->getAllRegistredStudentOverAllDetails($request); | |
// $studentMarkDetails = $this->getMarkReportDummyData(); | |
if($studentMarkDetails){ | |
foreach($studentMarkDetails as $student){ | |
$student->academicTerm = reset($student->academicTerms); | |
$currentAcademicTerm = reset(array_filter(reset($student->academicTerms)->markHistory,function($value)use($request){ | |
return $value->examRegistrationId == $request->examRegistrationId; | |
})); | |
$batchId = $student->studentDetails->batchId; | |
$resultAnalysis[$batchId]->batchId = $student->studentDetails->batchId; | |
$resultAnalysis[$batchId]->batchName = $student->studentDetails->batchName; | |
$resultAnalysis[$batchId]->data['consolidated']->enrolled++; | |
$resultAnalysis[$batchId]->data['consolidated']->passed += $currentAcademicTerm->failedStatus == "FAILED" ? 0 : 1; | |
$resultAnalysis[$batchId]->data['consolidated']->failed += $currentAcademicTerm->failedStatus == "FAILED" ? 1 : 0; | |
$student->isAbsentInSubject = 1; | |
foreach ( $student->academicTerm->subjects as $subject ) { | |
if ($subject->examAttendanceStatus == 'PRESENT') { | |
$student->isAbsentInSubject = 0; | |
break; | |
} | |
} | |
if (!$student->isAbsentInSubject) { | |
$resultAnalysis[$batchId]->data['consolidated']->appeared++; | |
} | |
else{ | |
$resultAnalysis[$batchId]->data['consolidated']->absent++; | |
} | |
$gender = $student->studentDetails->gender; | |
$studentGender = ""; | |
if( $gender == "MALE"){ | |
$studentGender = "male"; | |
} | |
else if( $gender == "FEMALE"){ | |
$studentGender = "female"; | |
} | |
if( $studentGender ){ | |
$resultAnalysis[$batchId]->data[$studentGender]->enrolled++; | |
$resultAnalysis[$batchId]->data[$studentGender]->passed += $currentAcademicTerm->failedStatus == "FAILED" ? 0 : 1; | |
$resultAnalysis[$batchId]->data[$studentGender]->failed += $currentAcademicTerm->failedStatus == "FAILED" ? 1 : 0; | |
if (!$student->isAbsentInSubject) { | |
$resultAnalysis[$batchId]->data[$studentGender]->appeared++; | |
} | |
else{ | |
$resultAnalysis[$batchId]->data[$studentGender]->absent++; | |
} | |
} | |
} | |
foreach($resultAnalysis as $singleResultAnalysis){ | |
$singleResultAnalysis->data['consolidated']->passPercentage = $singleResultAnalysis->data['consolidated']->passed && $singleResultAnalysis->data['consolidated']->appeared ? round ( ( 100 * $singleResultAnalysis->data['consolidated']->passed / $singleResultAnalysis->data['consolidated']->appeared ), 2) : 0; | |
$singleResultAnalysis->data['male']->passPercentage = $singleResultAnalysis->data['male']->passed && $singleResultAnalysis->data['male']->appeared ? round ( ( 100 * $singleResultAnalysis->data['male']->passed / $singleResultAnalysis->data['male']->appeared ), 2) : 0; | |
$singleResultAnalysis->data['female']->passPercentage = $singleResultAnalysis->data['female']->passed && $singleResultAnalysis->data['female']->appeared ? round ( ( 100 * $singleResultAnalysis->data['female']->passed / $singleResultAnalysis->data['female']->appeared ), 2) : 0; | |
} | |
} | |
} | |
catch (\Exception $e){ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $resultAnalysis; | |
} | |
/** | |
* get Registered Student Report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getExamRegisteredStudentReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request->examType = $searchRequest->examType; | |
$request->examRegistrationId = $searchRequest->examRegistrationId; | |
$request->subjectId = $searchRequest->subjectId; | |
$students = NominalRollService::getInstance()->getAllExamRegisteredStudentDetailsForNominalRoll($request); | |
if(empty($students)){ | |
throw new ExamControllerException(ExamControllerException::NO_STUDENT_IN_THE_BATCH_SUBJECT,"No details found."); | |
} | |
$templateName = "registered-student-report-template-1"; | |
$additionalInfo->examRegistrationName = reset($students)->examRegistrationName; | |
$additionalInfo->subjectName = reset(reset($students)->subjects)->name; | |
$additionalInfo->subjectCode = reset(reset($students)->subjects)->code; | |
$additionalInfo->collegeData = CommonExamService::getInstance()->getCollegeDetails(); | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/registeredStudentReport/$templateName.twig"), [ 'students'=>$students,'additionalInfo'=>$additionalInfo]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
</style>"; | |
$prtContent .= '</head><title>Registered Student Report</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 = $responseHtml; | |
$programResult->subjects = $subjects; | |
$programResult->printData = PdfUtil::renderPdf($prtContent, $options); | |
return $programResult; | |
} | |
/** | |
* get Registered Student Report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getExamTallyReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request = $searchRequest; | |
$feeReceiptConstantValue = ""; | |
$searchExamRuleRequest = new SearchRuleRequest; | |
$searchExamRuleRequest->name = 'EXAM_REGISTRATION_CREATION_RULE'; | |
$ruleObj = reset(RuleService::getInstance()->searchRule($searchExamRuleRequest)); | |
if($ruleObj){ | |
$feeReceiptConstantValue = $ruleObj->rule->feeReceiptConstantValue ?? ""; | |
} | |
$examType = 'EC_EXAM_TALLY_REPORT'; | |
$tallyReportTemplate = StudentMarkListService::getInstance()->getUniversityMarkListTemplate($examType); | |
$students = $this->getStudentExamFeeDetails($request); | |
if(empty($students)){ | |
throw new ExamControllerException(ExamControllerException::NO_STUDENT_IN_THE_BATCH_SUBJECT,"No details found."); | |
} | |
foreach($students as $student){ | |
if($feeReceiptConstantValue){ | |
$student->feeReceiptNo = $feeReceiptConstantValue."" .date("Y"). "EX " .str_pad($student->id, 5, '0', STR_PAD_LEFT); | |
} | |
$student->examAcademicYear = ($student->batchStartYear + (floor(($student->semInSemNumber - 1) / 2))) ." - ".($student->batchStartYear + (floor(($student->semInSemNumber - 1) / 2)) + 1); | |
$student->timestamp = strtotime($student->transactionDate); | |
$student->transactionDate = date("d-m-Y", $student->timestamp); | |
} | |
$templateName = "exam-tally-report-template-default"; | |
if($tallyReportTemplate == 'Template_1'){ | |
$templateName = "exam-tally-report-template-1"; | |
} | |
$additionalInfo->fromDate = strtotime($request->fromDate); | |
$additionalInfo->fromDate = date("d-m-Y", $additionalInfo->fromDate); | |
$additionalInfo->toDate = strtotime($request->toDate); | |
$additionalInfo->toDate = date("d-m-Y", $additionalInfo->toDate); | |
$additionalInfo->currentDateTime = date('d-m-Y h:i:sa'); | |
if($searchRequest->departmentId){ | |
$getAllDepartmentRequest = new GetAllDepartmentsRequest(); | |
$getAllDepartmentRequest->ids = $searchRequest->departmentId; | |
$departments = DepartmentService::getInstance()->getAllDepartmentForApi($getAllDepartmentRequest); | |
$departmentNames = array_column($departments, 'name'); | |
$additionalInfo->departmentName = implode(',',$departmentNames); | |
} | |
else{ | |
$additionalInfo->departmentName = "ALL"; | |
} | |
if($searchRequest->academicTermId){ | |
$getAcademicTermRequest = new SearchAcademicTermRequest(); | |
$academicTerms = AcademicTermService::getInstance()->searchAcademicTerm($getAcademicTermRequest); | |
foreach($academicTerms as $academicTerm){ | |
if(in_array($academicTerm->id,$searchRequest->academicTermId)){ | |
$academicTermNames[] = $academicTerm->name; | |
} | |
} | |
$additionalInfo->semesterName = implode(',',$academicTermNames); | |
} | |
else{ | |
$additionalInfo->semesterName = "ALL"; | |
} | |
$additionalInfo->subjectName = reset(reset($students)->subjects)->name; | |
$additionalInfo->subjectCode = reset(reset($students)->subjects)->code; | |
$additionalInfo->collegeData = CommonExamService::getInstance()->getCollegeDetails(); | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/tallyReport/$templateName.twig"), [ 'students'=>$students,'additionalInfo'=>$additionalInfo]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
</style>"; | |
$prtContent .= '</head><title>Exam Tally Report</title><body>'; | |
$prtContent .= $responseHtml; | |
$prtContent .= '</body></html>'; | |
$totalWidth = 297 ; | |
$totalHeight = 210; | |
$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; | |
} | |
/** | |
* Get Registered Student Digital Valuation Details | |
* @param $request | |
* @return $students | |
*/ | |
public function getStudentExamFeeDetails($request){ | |
try{ | |
$searchRequest = $this->realEscapeObject($request); | |
$joinQuery = ""; | |
$whereQuery = ""; | |
$orderBy = ""; | |
$groupBy = ""; | |
if(!empty($searchRequest->fromDate) && !empty($searchRequest->toDate)) { | |
$whereQuery .= " AND DATE(eop.transactionDate) >= '$searchRequest->fromDate' AND DATE(eop.transactionDate) <= '$searchRequest->toDate'"; | |
} | |
if(!empty($searchRequest->groupId)) { | |
$groupIdString = is_array($searchRequest->groupId) ? "'" . implode("','",$searchRequest->groupId) . "'" : "'".$searchRequest->groupId."'"; | |
$whereQuery .= " AND g.id IN ( $groupIdString )"; | |
} | |
if(!empty($searchRequest->examRegistrationId)) { | |
$examRegistrationIdString = is_array($searchRequest->examRegistrationId) ? "'" . implode("','",$searchRequest->examRegistrationId) . "'" : "'".$searchRequest->examRegistrationId."'"; | |
$whereQuery .= " AND eer.id IN ( $examRegistrationIdString )"; | |
} | |
if(!empty($searchRequest->departmentId)) { | |
$departmentIdString = is_array($searchRequest->departmentId) ? "'" . implode("','",$searchRequest->departmentId) . "'" : "'".$searchRequest->departmentId."'"; | |
$whereQuery .= " AND d.deptID IN ( $departmentIdString )"; | |
} | |
if(!empty($searchRequest->academicTermId)) { | |
$academicTermIdString = is_array($searchRequest->academicTermId) ? "'" . implode("','",$searchRequest->academicTermId) . "'" : "'".$searchRequest->academicTermId."'"; | |
$whereQuery .= " AND act.id IN ( $academicTermIdString )"; | |
} | |
$query = "SELECT DISTINCT | |
eserd.id as examRegStudentId, | |
sa.studentID as studentId, | |
sa.studentName, | |
sa.admissionNo as admissionNo, | |
spa.properties->>'$.registerNumber' AS registerNo, | |
spa.properties->>'$.rollNumber' AS rollNo, | |
eer.name as examRegistrationName, | |
act.name as semesterName, | |
eop.txnID as txnID, | |
eop.payment_gateway_txn_id as paymentGatewayID, | |
g.name as groupName, | |
g.properties->>'$.startYear' AS batchStartYear, | |
CAST(act.properties->>'$.orderNo' AS UNSIGNED) as semInSemNumber, | |
eop.amount as totalFee, | |
eop.transactionDate as transactionDate, | |
esar.id as studentSubjectid, | |
esar.properties as studentSubjectProperties | |
FROM ec_student_assessment_registration esar | |
INNER JOIN studentaccount sa ON sa.studentID = esar.student_id | |
INNER JOIN ec_exam_registration_subject eers ON eers.am_assessment_id = esar.am_assessment_id | |
INNER JOIN ec_exam_registration_batch eerb ON eerb.id = eers.ec_exam_registration_batch_id | |
INNER JOIN ec_exam_registration eer ON eer.id = eerb.ec_exam_registration_id AND eer.trashed IS NULL | |
INNER JOIN ec_student_exam_registration_details eserd ON eserd.student_id = sa.studentID AND eserd.ec_exam_registration_id = eer.id | |
INNER JOIN `groups` g ON g.id = eerb.groups_id | |
INNER JOIN program p ON p.id = g.properties->>'$.programId' | |
INNER JOIN academic_term act ON act.id = CAST(eerb.properties ->> '$.academicTermId'AS CHAR) | |
INNER JOIN student_program_account spa ON spa.student_id = esar.student_id AND spa.current_program_id = p.id | |
INNER JOIN program_department_relation pdr ON pdr.program_id = spa.current_program_id | |
INNER JOIN department d ON d.deptID = pdr.department_id | |
INNER JOIN ec_online_payment eop ON eop.studentID = esar.student_id AND eop.properties->>'$.examRegistrationId' = eer.id AND eop.status = 'SUCCESS' | |
WHERE | |
esar.trashed IS NULL AND esar.properties ->> '$.registrationStatus' IN ('REGISTERED') AND eer.type = esar.ec_exam_registration_type"; | |
try { | |
$registeredStudent = $this->executeQueryForList($query.$whereQuery.$groupBy.$orderBy,$this->mapper[RegularExamReportServiceMapper::GET_STUDENT_EXAM_FEE_DETAILS]); | |
} catch (\Exception $e) { | |
throw new ExamControllerException(ExamControllerException::ERROR_FETCHING_STUDENT_REGISTRATION,"Cannot fetch exams! Please try again"); | |
} | |
return $registeredStudent; | |
} | |
catch(\Exception $e) { | |
throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
} | |
} | |
/** | |
* get Regular Exam Subject Wise Result Analysis | |
* @param $searchRequest | |
* @return $response | |
*/ | |
public function getRegularExamSubjectWiseResultAnalysis($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try{ | |
$additionalDetails = new \stdClass; | |
$additionalDetails->collegeName = $GLOBALS['COLLEGE_NAME']; | |
$additionalDetails->collegeCode = $GLOBALS['COLLEGE_CODE']; | |
$additionalDetails->collegeUrl = $GLOBALS['_SERVER']['REQUEST_SCHEME']."://".$GLOBALS['_SERVER']['HTTP_HOST']; | |
$absenteesAsFailedStatus = $searchRequest->absenteesAsFailedStatus == 'true' ? true : false; | |
$subjectWiseResultAnalysisRequest = new \stdClass; | |
$subjectWiseResultAnalysisRequest->academicTermId = $searchRequest->academicTermId; | |
$subjectWiseResultAnalysisRequest->groupId = $searchRequest->examRegBatchIds; | |
$subjectWiseResultAnalysisRequest->absenteesAsFailedStatus = $absenteesAsFailedStatus; | |
$resultAnalysis = $this->getSubjectWiseResultAnalysisConsolidated($subjectWiseResultAnalysisRequest); | |
if(empty($resultAnalysis)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"Result analysis not available"); | |
} | |
else{ | |
$templateName = "SubjectWiseResultAnalysisConsolidatedTemplate"; | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/resultAnalysisSemWiseConsolidated/$templateName.twig"), [ 'resultAnalysis'=>$resultAnalysis,'absenteesAsFailedStatus'=>$absenteesAsFailedStatus ,'additionalDetails'=>$additionalDetails]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
h5 {font-size: 26px;} h6 {font-size: 22px;} .text-center { text-align: center;} .align-middle {vertical-align: middle;}; tr.noBorder td {border: 0; border-collapse:collapse;} | |
table, th, td {border: 1px solid black;border-collapse: collapse;} | |
</style>"; | |
$prtContent .= '</head><title>Subject Wise Result Anaysis</title><body>'; | |
$prtContent .= $responseHtml; | |
$prtContent .= '</body></html>'; | |
$totalWidth = 210; | |
$totalHeight = 297; | |
$options = array( | |
'page-width' => $totalHeight."mm", | |
'page-height' => $totalWidth."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); | |
} | |
} | |
catch (\Exception $e) | |
{ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $programResult; | |
} | |
public function getSubjectWiseResultAnalysisConsolidated($request){ | |
$request = $this->realEscapeObject($request); | |
try{ | |
$resultAnalysis = []; | |
$studentMarkDetails = $this->getConsolidatedSubjectMarkDetails($request); | |
if($studentMarkDetails){ | |
foreach($studentMarkDetails as $key => $subject){ | |
$syllabusCode = $subject->syllabusCode ?? $subject->code; | |
$resultAnalysis[$syllabusCode]->subjectCode = $subject->code; | |
$resultAnalysis[$syllabusCode]->syllabusCode = $syllabusCode; | |
$resultAnalysis[$syllabusCode]->subjectDesc = $subject->name; | |
$resultAnalysis[$syllabusCode]->enrolled++; | |
$resultAnalysis[$syllabusCode]->passed += $subject->failedStatus == "FAILED" ? 0 : 1; | |
if ($subject->attendanceStatus == 'ABSENT') { | |
$resultAnalysis[$syllabusCode]->absent ++; | |
} | |
if($request->absenteesAsFailedStatus){ | |
$resultAnalysis[$syllabusCode]->failed += $subject->failedStatus == "FAILED" ? 1 : 0; | |
if ($subject->attendanceStatus != 'ABSENT') { | |
$resultAnalysis[$syllabusCode]->appeared++; | |
} | |
} | |
else{ | |
if ($subject->attendanceStatus != 'ABSENT') { | |
$resultAnalysis[$syllabusCode]->failed += $subject->failedStatus == "FAILED" ? 1 : 0; | |
$resultAnalysis[$syllabusCode]->appeared++; | |
} | |
} | |
} | |
foreach($resultAnalysis as $singleResultAnalysis){ | |
$singleResultAnalysis->passPercentage = round ( ( 100 * $singleResultAnalysis->passed / $singleResultAnalysis->enrolled ), 2); | |
$attendedStudentCount = $singleResultAnalysis->enrolled - $singleResultAnalysis->absent; | |
if ( $attendedStudentCount > 0 ) { | |
$singleResultAnalysis->passPercentageExcludingAbsent = round ( ( 100 * $singleResultAnalysis->passed / $attendedStudentCount ), 2); | |
} | |
else { | |
$singleResultAnalysis->passPercentageExcludingAbsent = 0; | |
} | |
} | |
} | |
} | |
catch (\Exception $e){ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $resultAnalysis; | |
} | |
/** | |
* get Regular Exam Couse Wise Result Analysis | |
* @param $searchRequest | |
* @return $response | |
*/ | |
public function getRegularExamCourseWiseResultAnalysis($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try | |
{ | |
$additionalDetails = new \stdClass; | |
$additionalDetails->collegeName = $GLOBALS['COLLEGE_NAME']; | |
$additionalDetails->collegeCode = $GLOBALS['COLLEGE_CODE']; | |
$additionalDetails->collegeUrl = $GLOBALS['_SERVER']['REQUEST_SCHEME']."://".$GLOBALS['_SERVER']['HTTP_HOST']; | |
$absenteesAsFailedStatus = $searchRequest->absenteesAsFailedStatus == 'true' ? true : false; | |
$courseWiseResultAnalysisRequest = new \stdClass; | |
$courseWiseResultAnalysisRequest->academicTermId = $searchRequest->academicTermId; | |
$courseWiseResultAnalysisRequest->courseTypeId = $searchRequest->courseTypeId; | |
$courseWiseResultAnalysisRequest->startYear = $searchRequest->startYear; | |
$courseWiseResultAnalysisRequest->absenteesAsFailedStatus = $absenteesAsFailedStatus; | |
$resultAnalysis = $this->getSemWiseConsolidatedCourseDetails($courseWiseResultAnalysisRequest); | |
if(empty($resultAnalysis)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"Result analysis not available"); | |
} | |
else{ | |
$templateName = "CourseWiseResultAnalysisConsolidatedTemplate"; | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/resultAnalysisSemWiseConsolidated/$templateName.twig"), [ 'resultAnalysis'=>$resultAnalysis ,'absenteesAsFailedStatus'=>$absenteesAsFailedStatus,'additionalDetails'=>$additionalDetails]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
h5 {font-size: 26px;} h6 {font-size: 20px;} .text-center { text-align: center;} .align-middle {vertical-align: middle;}; tr.noBorder td {border: 0; border-collapse:collapse;} | |
table, th, td {border: 1px solid black;border-collapse: collapse;} | |
</style>"; | |
$prtContent .= '</head><title>Subject Wise Result Anaysis</title><body>'; | |
$prtContent .= $responseHtml; | |
$prtContent .= '</body></html>'; | |
$totalWidth = 210; | |
$totalHeight = 297; | |
$options = array( | |
'page-width' => $totalHeight."mm", | |
'page-height' => $totalWidth."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); | |
} | |
} | |
catch (\Exception $e) | |
{ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $programResult; | |
} | |
public function getSemWiseConsolidatedCourseDetails($request) | |
{ | |
$request = $this->realEscapeObject($request); | |
try{ | |
$resultAnalysis = []; | |
$studentMarkList = $this->getConsolidatedSubjectMarkDetails($request); | |
$studentMarkDetails = []; | |
foreach($studentMarkList as $key => $student){ | |
if(empty($studentMarkDetails[$student->studentId])){ | |
$studentMarkDetails[$student->studentId] = $student; | |
$studentMarkDetails[$student->studentId]->isAbsentInSubject = 1; | |
} | |
if ($student->attendanceStatus == 'PRESENT'){ | |
$studentMarkDetails[$student->studentId]->isAbsentInSubject = 0; | |
} | |
} | |
if($studentMarkDetails){ | |
foreach($studentMarkDetails as $key => $student){ | |
if($student){ | |
$batchId = $student->groupsId; | |
$resultAnalysis[$batchId]->batchId = $student->groupsId; | |
$resultAnalysis[$batchId]->batchName = $student->groupName; | |
$resultAnalysis[$batchId]->enrolled++; | |
$resultAnalysis[$batchId]->passed += $student->semesterFailedStatus == "FAILED" ? 0 : 1; | |
$resultAnalysis[$batchId]->failed += $student->semesterFailedStatus == "FAILED" ? 1 : 0; | |
if($request->absenteesAsFailedStatus){ | |
$resultAnalysis[$batchId]->appeared++; | |
} | |
else{ | |
if (!$student->isAbsentInSubject) { | |
$resultAnalysis[$batchId]->appeared++; | |
} | |
else{ | |
$resultAnalysis[$batchId]->absent++; | |
$resultAnalysis[$batchId]->failed -= 1; | |
} | |
} | |
} | |
} | |
foreach($resultAnalysis as $singleResultAnalysis){ | |
$singleResultAnalysis->passPercentage = round ( ( 100 * $singleResultAnalysis->passed / ($singleResultAnalysis->appeared ? $singleResultAnalysis->appeared : 0 )), 2); | |
} | |
} | |
} | |
catch (\Exception $e){ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $resultAnalysis; | |
} | |
/* | |
* get consolidated subject mark details | |
* @param $request | |
* @return $subjectsMarkDetails | |
*/ | |
public function getConsolidatedSubjectMarkDetails($request){ | |
try{ | |
$request = $this->realEscapeObject($request); | |
$whereQuery = ""; | |
if(!empty($request->groupId)) { | |
$groupIdString = is_array($request->groupId) ? implode("','",$request->groupId) : $request->groupId; | |
$whereQuery .= " AND g.id IN ('$groupIdString') "; | |
} | |
if(!empty($request->academicTermId)) { | |
$whereQuery .= " AND atm.id = '$request->academicTermId' "; | |
} | |
if(!empty($request->startYear)) { | |
$whereQuery .= " AND g.properties ->> '$.startYear' = '$request->startYear' "; | |
} | |
if(!empty($request->courseTypeId)) { | |
$whereQuery .= " AND p.course_type_id = '$request->courseTypeId' "; | |
} | |
$query = "SELECT | |
ecsmd.student_id AS studentId, | |
ecsmd.groups_id AS groupsId, | |
atm.id AS termId, | |
ecsmd.cm_academic_paper_subjects_id AS paperSubjetId, | |
ecsmd.mark_details AS markDetails, | |
ecsmd.no_of_chances_taken AS noOfChancesTaken, | |
ecsmd.total_mark AS totalMarkObtained, | |
ecsmd.class, | |
ecsmd.grade, | |
ecsmd.failed_status AS failedStatus, | |
ecsmd.attendance_status AS attendanceStatus, | |
esmd.failed_status AS semesterFailedStatus, | |
g.name AS groupName, | |
s.code AS code, | |
s.name AS name, | |
caps.properties ->> '$.syllabusName' AS syllabusName, | |
cap.properties ->> '$.order' AS priority, | |
IF(caps.properties ->> '$.classType' = 'THEORY',1,0) AS isTheory | |
FROM | |
ec_consolidated_subject_mark_details ecsmd | |
INNER JOIN student_program_account spa | |
ON spa.student_id = ecsmd.student_id | |
INNER JOIN `groups` g ON | |
g.id = ecsmd.groups_id | |
INNER JOIN program p ON | |
p.id = CAST(g.properties ->> '$.programId' AS CHAR) | |
INNER JOIN cm_academic_paper_subjects caps ON | |
caps.id = ecsmd.cm_academic_paper_subjects_id | |
INNER JOIN cm_academic_paper cap ON | |
cap.id = caps.cm_academic_paper_id | |
INNER JOIN cm_syllabus_academic_term_settings csats ON | |
csats.id = cap.cm_syllabus_academic_term_settings_id | |
INNER JOIN academic_term atm ON | |
atm.id = csats.academic_term_id | |
INNER JOIN v4_ams_subject s ON | |
s.id = caps.ams_subject_id | |
INNER JOIN ec_semester_mark_details esmd ON | |
esmd.groups_id = ecsmd.groups_id AND esmd.student_id = spa.student_id AND esmd.academic_term_id = atm.id | |
WHERE | |
1 = 1 AND ecsmd.is_active = 1 | |
$whereQuery ORDER BY esmd.student_id, s.id ASC "; | |
$subjectsMarkDetails = $this->executeQueryForList($query); | |
return $subjectsMarkDetails; | |
} | |
catch(\Exception $e) { | |
throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
} | |
} | |
/** | |
* Get Exam Valuation Progress Report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getExamValuationProgressReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request->subjectCode = $searchRequest->subjectCodes; | |
$request->examRegistrationId = $searchRequest->examRegistrationId; | |
$request->staffIds = $searchRequest->staffIds; | |
$request->startDates = $searchRequest->startDates; | |
$request->reportType = $searchRequest->reportType; | |
$additionalInfo = new \stdClass; | |
$searchRequestExam = new SearchExamRegistrationRequest(); | |
$searchRequestExam->id = $searchRequest->examRegistrationId; | |
$currentExamRegistration = reset(ExamRegistrationService::getInstance()->searchExamRegistration($searchRequestExam)); | |
$additionalInfo->examRegistrationName = $currentExamRegistration->name; | |
$additionalInfo->reportType = $request->reportType; | |
$studentDetails = $this->getRegisteredStudentsDigitalValuationDetails($request); | |
$reportData = []; | |
$assignedStaffIds = []; | |
if($request->reportType == 'STAFF_WISE' && !empty($request->staffIds)){ | |
foreach( $studentDetails as $student){ | |
$student->subjectValuationDetails = json_decode($student->subjectValuationDetails); | |
$student->valuationDetails = json_decode($student->valuationDetails); | |
foreach($student->subjectValuationDetails->valuationStaffs as $valuationStaff){ | |
if(!empty($valuationStaff->addiitonalExamniners)){ | |
foreach($valuationStaff->addiitonalExamniners as $staff){ | |
if(in_array($staff,$request->staffIds)){ | |
foreach($student->valuationDetails->assignedValuationStaffs as $assignedValuationStaff){ | |
if($assignedValuationStaff->count == $valuationStaff->count && in_array($staff,$assignedValuationStaff->addiitonalExamniners)){ | |
$assignedStaffIds[$staff] = $staff; | |
$reportData[$staff]->id = $staff; | |
$reportData[$staff]->name = "Staff Name Temp"; | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->name = $student->subjectCode .'-'. $student->subjectName; | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->valuationCount = $valuationStaff->count; | |
if(empty($reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->assignedStudentCount)){ | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->assignedStudentCount = 0; | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->startedStudentCount = 0; | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->confirmedStudentCount = 0; | |
} | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->assignedStudentCount = $reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->assignedStudentCount + 1 ; | |
if( $valuationStaff->count == '1'){ | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->startedStudentCount = $student->mark1Started ? $reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->startedStudentCount + 1 : $reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->startedStudentCount; | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->confirmedStudentCount = $student->mark1Confirm ? $reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->confirmedStudentCount + 1 : $reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->confirmedStudentCount; | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->type = 'Valuer'; | |
} | |
else if( $valuationStaff->count == '2'){ | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->startedStudentCount = $student->mark2Started ? $reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->startedStudentCount + 1 : $reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->startedStudentCount; | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->confirmedStudentCount = $student->mark2Confirm ? $reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->confirmedStudentCount + 1 : $reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->confirmedStudentCount; | |
$reportData[$staff]->subjectStaff[$student->subjectCode.$valuationStaff->count]->type = 'Reviewer'; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else if($request->reportType == 'SUBJECT_WISE' && !empty($request->subjectCode)){ | |
foreach( $studentDetails as $student){ | |
if(in_array($student->subjectCode,$request->subjectCode)){ | |
$student->subjectValuationDetails = json_decode($student->subjectValuationDetails); | |
$student->valuationDetails = json_decode($student->valuationDetails); | |
foreach($student->subjectValuationDetails->valuationStaffs as $valuationStaff){ | |
if(!empty($valuationStaff->addiitonalExamniners)){ | |
foreach($valuationStaff->addiitonalExamniners as $staff){ | |
foreach($student->valuationDetails->assignedValuationStaffs as $assignedValuationStaff){ | |
if($assignedValuationStaff->count == $valuationStaff->count && in_array($staff,$assignedValuationStaff->addiitonalExamniners)){ | |
$assignedStaffIds[$staff] = $staff; | |
$reportData[$student->subjectCode]->id = $student->subjectCode; | |
$reportData[$student->subjectCode]->name = $student->subjectCode .'-'. $student->subjectName; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->id = $staff; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->name = "Staff Name temp"; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->valuationCount = $valuationStaff->count; | |
if(empty($reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount)){ | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount = 0; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount = 0; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount = 0; | |
} | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount = $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount + 1 ; | |
if( $valuationStaff->count == '1'){ | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount = $student->mark1Started ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount = $student->mark1Confirm ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->type = 'Valuer'; | |
} | |
else if( $valuationStaff->count == '2'){ | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount = $student->mark2Started ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount = $student->mark2Confirm ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->type = 'Reviewer'; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
else if($request->reportType == 'START_DATE_WISE' && !empty($request->startDates)){ | |
foreach( $studentDetails as $student){ | |
$student->subjectValuationDetails = json_decode($student->subjectValuationDetails); | |
$student->valuationDetails = json_decode($student->valuationDetails); | |
$startDateArray = array_unique(array_column($student->subjectValuationDetails->valuationDates, 'startDate')); | |
// foreach($student->subjectValuationDetails->valuationDates as $valuationDate){ | |
if(!empty($startDateArray)){ | |
foreach($startDateArray as $startDate){ | |
if(in_array($startDate,$request->startDates)){ | |
foreach($student->subjectValuationDetails->valuationStaffs as $valuationStaff){ | |
if(!empty($valuationStaff->addiitonalExamniners)){ | |
foreach($valuationStaff->addiitonalExamniners as $staff){ | |
foreach($student->valuationDetails->assignedValuationStaffs as $assignedValuationStaff){ | |
if($assignedValuationStaff->count == $valuationStaff->count && in_array($staff,$assignedValuationStaff->addiitonalExamniners)){ | |
$assignedStaffIds[$staff] = $staff; | |
$reportData[$student->subjectCode]->id = $student->subjectCode; | |
$reportData[$student->subjectCode]->name = $student->subjectCode .'-'. $student->subjectName; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->id = $staff; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->name = "Staff Name temp"; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->valuationCount = $valuationStaff->count; | |
if(empty($reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount)){ | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount = 0; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount = 0; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount = 0; | |
} | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount = $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount + 1 ; | |
if( $valuationStaff->count == '1'){ | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount = $student->mark1Started ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount = $student->mark1Confirm ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->type = 'Valuer'; | |
} | |
else if( $valuationStaff->count == '2'){ | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount = $student->mark2Started ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount = $student->mark2Confirm ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->type = 'Reviewer'; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
// } | |
} | |
} | |
$assignedStaffIds = array_values($assignedStaffIds); | |
$staffNames = !empty($assignedStaffIds) ? StaffService::getInstance()->getStaffByIds($assignedStaffIds) : []; | |
foreach($staffNames as $staff){ | |
$staffNamesWithKey[$staff->id] = $staff; | |
} | |
$templateName = "valuation-progress-report_template_1"; | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/valuationProgressReport/$templateName.twig"), [ 'staffs'=>$staffNamesWithKey,'reportData'=>$reportData,'additionalInfo'=>$additionalInfo]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
</style>"; | |
$prtContent .= '</head><title>Mark Card Issue Register</title><body>'; | |
$prtContent .= $responseHtml; | |
$prtContent .= '</body></html>'; | |
$options = array( | |
'page-width' => "210mm", | |
'page-height' => "297mm", | |
'dpi' => 96, | |
'margin-top' => "10mm", | |
'margin-left' => "10mm", | |
'margin-right' => "10mm", | |
'margin-bottom' => "10mm", | |
// '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; | |
} | |
/** | |
* get Exam Date wise report | |
* @param $searchRequest | |
* @return $response | |
*/ | |
public function getExamDateWiseReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try{ | |
$additionalDetails = new \stdClass; | |
$additionalDetails->collegeData = CommonExamService::getInstance()->getCollegeDetails(); | |
$batchRequest = new \stdClass; | |
$batchRequest->groupsIds = $searchRequest->groupId; | |
$batchDetails = FinalConsolidatedReportService::getInstance()->getAllGroupDetailsByGroupIds($batchRequest); | |
foreach($batchDetails as $batch){ | |
$batchNames[] = $batch->groupName; | |
} | |
$additionalDetails->batchName = implode(" , ",$batchNames); | |
$getAcademicTermRequest = new SearchAcademicTermRequest(); | |
$getAcademicTermRequest->id = $searchRequest->academicTermId; | |
$academicTerms = AcademicTermService::getInstance()->searchAcademicTerm($getAcademicTermRequest); | |
$additionalDetails->semesterName = reset($academicTerms)->name; | |
$requestForExamRegistration = new SearchExamRegistrationRequest; | |
$requestForExamRegistration->id = $searchRequest->examRegistrationId; | |
$examRegistration = ExamRegistrationService::getInstance()->searchExamRegistration($requestForExamRegistration); | |
if(!empty($examRegistration)){ | |
$additionalDetails->examRegistrationName = reset($examRegistration)->name; | |
} | |
$getSubjectDetailsReq = new \stdClass; | |
$getSubjectDetailsReq->examRegistrationId = $searchRequest->examRegistrationId; | |
$getSubjectDetailsReq->academicTermId = $searchRequest->academicTermId; | |
$getSubjectDetailsReq->groupId = $searchRequest->groupId; | |
$getSubjectDetailsReq->examToDate = $searchRequest->examToDate; | |
$getSubjectDetailsReq->examFromDate = $searchRequest->examFromDate; | |
$assignedSubjects = ExamRegistrationSubjectService::getInstance()->getAllSubjectAssessmentDetailsByExamRegistrationId($getSubjectDetailsReq); | |
foreach($assignedSubjects as $subject){ | |
$subject->assessmentProperties = json_decode($subject->assessmentProperties); | |
if($subject->assessmentProperties->assessmentDate){ | |
$uniqueSubjects[$subject->subjectCode]->id = $subject->subjectId; | |
$uniqueSubjects[$subject->subjectCode]->subjectCode = $subject->subjectCode; | |
$uniqueSubjects[$subject->subjectCode]->subjectName = $subject->subjectName; | |
$uniqueSubjects[$subject->subjectCode]->syllabusName = $subject->syllabusName; | |
$uniqueSubjects[$subject->subjectCode]->isTheory = $subject->isTheory; | |
$uniqueSubjects[$subject->subjectCode]->assessmentDate = date("d-m-Y" ,strtotime($subject->assessmentProperties->assessmentDate)); | |
$uniqueSubjects[$subject->subjectCode]->startTime = $subject->assessmentProperties->startTime ? date("h:i A" ,strtotime($subject->assessmentProperties->startTime)) : ''; | |
$uniqueSubjects[$subject->subjectCode]->endTime = $subject->assessmentProperties->endTime ? date("h:i A" ,strtotime($subject->assessmentProperties->endTime)) : ''; | |
} | |
} | |
if(empty($uniqueSubjects)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"No Subject Assigned"); | |
} | |
else{ | |
$templateName = "examDateWiseReportTemplate"; | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/examDateWiseReport/$templateName.twig"), [ 'subjects'=>$uniqueSubjects ,'additionalDetails'=>$additionalDetails]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= ""; | |
$prtContent .= '</head><title>Exam Date Wise Report</title><body>'; | |
$prtContent .= $responseHtml; | |
$prtContent .= '</body></html>'; | |
$totalWidth = 210; | |
$totalHeight = 297; | |
$options = array( | |
'page-width' => "210mm", | |
'page-height' => "297mm", | |
'dpi' => 96, | |
'margin-top' => "10mm", | |
'margin-left' => "10mm", | |
'margin-right' => "10mm", | |
'margin-bottom' => "10mm", | |
// '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); | |
} | |
} | |
catch (\Exception $e){ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $programResult; | |
} | |
/** | |
* Get Exam Detailed Valuation Report | |
* @param $searchRequest | |
* @return $programResult | |
*/ | |
public function getExamDetailedValuationReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
$request = new \stdClass; | |
$request->examRegistrationId = $searchRequest->examRegistrationId; | |
$additionalInfo = new \stdClass; | |
$searchRequestExam = new SearchExamRegistrationRequest(); | |
$searchRequestExam->id = $searchRequest->examRegistrationId; | |
$currentExamRegistration = reset(ExamRegistrationService::getInstance()->searchExamRegistration($searchRequestExam)); | |
$additionalInfo->examRegistrationName = $currentExamRegistration->name; | |
$studentDetails = $this->getRegisteredStudentsDigitalValuationDetails($request); | |
$reportData = []; | |
$assignedStaffIds = []; | |
foreach( $studentDetails as $student){ | |
$student->subjectValuationDetails = json_decode($student->subjectValuationDetails); | |
$student->valuationDetails = json_decode($student->valuationDetails); | |
foreach($student->subjectValuationDetails->valuationStaffs as $valuationStaff){ | |
if(!empty($valuationStaff->addiitonalExamniners)){ | |
foreach($valuationStaff->addiitonalExamniners as $staff){ | |
foreach($student->valuationDetails->assignedValuationStaffs as $assignedValuationStaff){ | |
if($assignedValuationStaff->count == $valuationStaff->count && in_array($staff,$assignedValuationStaff->addiitonalExamniners)){ | |
$assignedStaffIds[$staff] = $staff; | |
$reportData[$student->subjectCode]->id = $student->subjectCode; | |
$reportData[$student->subjectCode]->name = $student->subjectName; | |
$reportData[$student->subjectCode]->code = $student->subjectCode; | |
if(empty($reportData[$student->subjectCode]->assignedStudentCount)){ | |
$reportData[$student->subjectCode]->assignedStudentCount = 0; | |
} | |
foreach($student->subjectValuationDetails->valuationDates as $valuationDate){ | |
if($valuationDate->count == $valuationStaff->count){ | |
$startDate = strtotime($valuationDate->startDate); | |
$endDate = strtotime($valuationDate->endDate); | |
$noOfDays = abs((int) floor(($endDate - $startDate) / (60 * 60 * 24))); | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->valuationStartDate = $valuationDate->startDate; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->valuationEndDate = $valuationDate->endDate; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->noOfDays = $noOfDays; | |
} | |
} | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->id = $staff; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->name = "Staff Name temp"; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->valuationCount = $valuationStaff->count; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->falseNumbers[$student->falseNumber] = $student->falseNumber; | |
if(empty($reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount)){ | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount = 0; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount = 0; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount = 0; | |
} | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount = $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->assignedStudentCount + 1 ; | |
if( $valuationStaff->count == '1'){ | |
$reportData[$student->subjectCode]->assignedStudentCount = $reportData[$student->subjectCode]->assignedStudentCount + 1 ; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount = $student->mark1Started ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount = $student->mark1Confirm ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->type = 'Valuer'; | |
} | |
else if( $valuationStaff->count == '2'){ | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount = $student->mark2Started ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->startedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount = $student->mark2Confirm ? $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount + 1 : $reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->confirmedStudentCount; | |
$reportData[$student->subjectCode]->subjectStaff[$staff.$valuationStaff->count]->type = 'Reviewer'; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
foreach($reportData as $subject){ | |
uasort($subject->subjectStaff, function($a, $b) { | |
return ($a->valuationCount > $b->valuationCount); | |
}); | |
foreach($subject->subjectStaff as $subjectStaff){ | |
$subjectStaff->falseNumbers = array_filter( $subjectStaff->falseNumbers, function($item) { | |
return $item !== null; | |
}); | |
$subjectStaff->falseNumberRange = min($subjectStaff->falseNumbers) .'-'. max($subjectStaff->falseNumbers); | |
} | |
} | |
$assignedStaffIds = array_values($assignedStaffIds); | |
$staffNames = !empty($assignedStaffIds) ? StaffService::getInstance()->getStaffByIds($assignedStaffIds) : []; | |
foreach($staffNames as $staff){ | |
$staffNamesWithKey[$staff->id] = $staff; | |
} | |
$templateName = "detailed-valuation-report_template_1"; | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/detailedValuationReport/$templateName.twig"), [ 'staffs'=>$staffNamesWithKey,'reportData'=>$reportData,'additionalInfo'=>$additionalInfo]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= "<style> | |
</style>"; | |
$prtContent .= '</head><title>Mark Card Issue Register</title><body>'; | |
$prtContent .= $responseHtml; | |
$prtContent .= '</body></html>'; | |
$options = array( | |
'page-width' => "297mm", | |
'page-height' => "210mm", | |
'dpi' => 96, | |
'margin-top' => "10mm", | |
'margin-left' => "10mm", | |
'margin-right' => "10mm", | |
'margin-bottom' => "10mm", | |
// '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; | |
} | |
/** | |
* get Staff Remuneration Report | |
* @param $searchRequest | |
* @return $response | |
*/ | |
public function getStaffRemunerationReport($searchRequest) { | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try{ | |
$additionalDetails = new \stdClass; | |
$additionalDetails->collegeData = CommonExamService::getInstance()->getCollegeDetails(); | |
$bookletCountStaffDetails = []; | |
$studentDetails = $this->getRegisteredStudentsDigitalValuationDetails($searchRequest); | |
$staffDeatils = []; | |
foreach($studentDetails as $student){ | |
$student->valuationDetails = json_decode($student->valuationDetails); | |
if(!empty($student->valuationDetails->assignedValuationStaffs)){ | |
if($student->mark1Confirm && $student->mark1SubmittedStaff){ | |
$staffDeatils[$student->mark1SubmittedStaff]->staffId = $staffDeatils[$student->mark1SubmittedStaff]->staffId ?? $student->mark1SubmittedStaff; | |
$staffDeatils[$student->mark1SubmittedStaff]->valuatedCount++; | |
} | |
if($student->mark2Confirm && $student->mark2SubmittedStaff){ | |
$staffDeatils[$student->mark2SubmittedStaff]->staffId = $staffDeatils[$student->mark2SubmittedStaff]->staffId ?? $student->mark2SubmittedStaff; | |
$staffDeatils[$student->mark2SubmittedStaff]->valuatedCount++; | |
} | |
if($student->mark3Confirm && $student->mark3SubmittedStaff){ | |
$staffDeatils[$student->mark3SubmittedStaff]->staffId = $staffDeatils[$student->mark3SubmittedStaff]->staffId ?? $student->mark3SubmittedStaff; | |
$staffDeatils[$student->mark3SubmittedStaff]->valuatedCount++; | |
} | |
if($student->mark1ReviewConfirm && $student->mark1ReviewSubmittedStaff){ | |
$staffDeatils[$student->mark1ReviewSubmittedStaff]->staffId = $staffDeatils[$student->mark1ReviewSubmittedStaff]->staffId ?? $student->mark1ReviewSubmittedStaff; | |
$staffDeatils[$student->mark1ReviewSubmittedStaff]->valuatedCount++; | |
} | |
} | |
} | |
$staffIds = array_column($staffDeatils,'staffId'); | |
$staffBankDetailsReq = new \stdClass; | |
$staffBankDetailsReq->staffIds = $staffIds; | |
$staffBankDetails = CommonExamService::getInstance()->getStaffBankAccountDetails($staffBankDetailsReq); | |
$allStaffs = []; | |
foreach($staffBankDetails as $staff){ | |
$allStaffs[$staff->id] = $staff; | |
} | |
foreach($staffDeatils as $staff){ | |
$staffDeatils[$staff->staffId]->ifscCode = $allStaffs[$staff->staffId]->ifscCode; | |
$staffDeatils[$staff->staffId]->bankAccountNumber = $allStaffs[$staff->staffId]->bankAccountNumber; | |
$staffDeatils[$staff->staffId]->bankName = $allStaffs[$staff->staffId]->bankName; | |
$staffDeatils[$staff->staffId]->name = $allStaffs[$staff->staffId]->name; | |
$staffDeatils[$staff->staffId]->deptName = $allStaffs[$staff->staffId]->deptName; | |
} | |
uasort($staffDeatils, function ($a, $b) { | |
return $a->name > $b->name; | |
}); | |
if(empty($staffDeatils)){ | |
throw new ExamControllerException(ExamControllerException::NO_REPORTS_DETAILS_FOUND,"No Staff Found"); | |
} | |
else{ | |
$templateName = "staffRemunerationReportTemplate"; | |
$responseHtml = TwigRenderer::renderTemplateFileToHtml(realpath(DOCUMENT_ROOT."../examcontroller-api/src/com/linways/web/templates/examinationReports/staffRemunerationReport/$templateName.twig"), [ 'staffDetails'=>$staffDeatils ,'additionalDetails'=>$additionalDetails]); | |
$prtContent = NULL; | |
$prtContent .= '<html><head>'; | |
$prtContent .= ""; | |
$prtContent .= '</head><title>Exam Date Wise Report</title><body>'; | |
$prtContent .= $responseHtml; | |
$prtContent .= '</body></html>'; | |
$totalWidth = 210; | |
$totalHeight = 297; | |
$options = array( | |
'page-width' => "210mm", | |
'page-height' => "297mm", | |
'dpi' => 96, | |
'margin-top' => "10mm", | |
'margin-left' => "10mm", | |
'margin-right' => "10mm", | |
'margin-bottom' => "10mm", | |
// '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); | |
} | |
} | |
catch (\Exception $e){ | |
throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
} | |
return $programResult; | |
} | |
/** | |
* get student details by batch | |
* @param $request | |
* auther sibin c | |
*/ | |
public function getBatchStudentsForInvigilatorsDiary($request) | |
{ | |
$request = $this->realEscapeObject($request); | |
$whereQuery = ""; | |
$orderByQuery = ""; | |
if(!empty($request->groupId)) { | |
$groupIdString = is_array($request->groupId) ? "'" . implode("','",$request->groupId) . "'" : "'".$request->groupId."'"; | |
$whereQuery .= " AND g.id IN ( $groupIdString )"; | |
} | |
if(!empty($request->programId)) { | |
$programIdString = is_array($request->programId) ? "'" . implode("','",$request->programId) . "'" : "'".$request->programId."'"; | |
$whereQuery .= " AND p.id IN ( $programIdString )"; | |
} | |
if(!empty($request->academicTermId)) { | |
$academicTermIdString = is_array($request->academicTermId) ? "'" . implode("','",$request->academicTermId) . "'" : "'".$request->academicTermId."'"; | |
$whereQuery .= " AND act.id IN ( $academicTermIdString )"; | |
} | |
$orderByQuery = " ORDER BY spa.properties->>'$.registerNumber' ASC"; | |
$query = "SELECT DISTINCT | |
spa.student_id AS studentId, | |
spa.properties->>'$.rollNumber' AS studentRollNo, | |
spa.properties->>'$.registerNumber' AS registerNo, | |
std.studentName AS studentName, | |
sl.secondlangaugeID as secondLanguageId, | |
sl.secondLangaugeName as secondLanguageName | |
FROM | |
studentaccount s | |
INNER JOIN student_program_account spa | |
ON spa.student_id = s.studentID | |
INNER JOIN student_program_batch_log spbl | |
ON spbl.program_student_id = spa.id AND spbl.properties->>'$.academicStatus' IN ('ACTIVE','COMPLETED') | |
INNER JOIN `program` p | |
ON p.id = spbl.program_id | |
INNER JOIN `groups` g | |
ON g.id = spbl.batch_group_id | |
INNER JOIN groups_relations gr ON | |
gr.parent_groups_id = g.id | |
INNER JOIN `groups` sg ON | |
sg.id = gr.child_groups_id AND sg.type = 'SUBJECT' | |
INNER JOIN group_members sgm ON | |
sgm.groups_id = sg.id AND | |
sgm.members->>'$.studentId' = spa.id AND sgm.academic_status IN ('ACTIVE') | |
INNER JOIN cm_academic_paper_subjects aps ON | |
aps.id = sg.paperSubjectId | |
INNER JOIN cm_academic_paper ap ON | |
aps.cm_academic_paper_id = ap.id | |
INNER JOIN cm_syllabus_academic_term_settings csats ON | |
csats.id = ap.cm_syllabus_academic_term_settings_id | |
INNER JOIN academic_term act ON | |
act.id = sg.academic_term_id AND act.id = spbl.term_id | |
INNER JOIN v4_ams_subject sub ON | |
sub.id = aps.ams_subject_id | |
INNER JOIN studentaccount std ON | |
std.studentID = spa.student_id | |
LEFT JOIN secondLangauge sl ON | |
sl.secondlangaugeID = std.secondlangaugeID | |
WHERE 1=1 AND sg.academic_term_id = csats.academic_term_id"; | |
try { | |
$students = $this->executeQueryForList($query.$whereQuery.$orderByQuery); | |
// $students = array_values(CommonUtil::smartSort($students, 'registerNo', $order = 'asc')); | |
} catch (\Exception $e) { | |
throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
} | |
if ($request->regNoFrom && $request->regNoTo){ | |
$students = $this->filterStudentsByRegisterRange($students, $request->regNoFrom, $request->regNoTo); | |
} | |
return $students; | |
} | |
function filterStudentsByRegisterRange($studentList, $startRegNo, $endRegNo) { | |
$startIndex = -1; | |
$endIndex = -1; | |
// Find the start and end indices | |
foreach ($studentList as $index => $student) { | |
if ($student->registerNo === $startRegNo) { | |
$startIndex = $index; | |
} | |
if ($student->registerNo === $endRegNo) { | |
$endIndex = $index; | |
} | |
// Stop the loop once both indices are found | |
if ($startIndex !== -1 && $endIndex !== -1) { | |
break; | |
} | |
} | |
// If valid indices are found, slice the array | |
if ($startIndex !== -1 && $endIndex !== -1 && $startIndex <= $endIndex) { | |
return array_slice($studentList, $startIndex, $endIndex - $startIndex + 1); | |
} | |
// Return an empty array if the indices are not found or invalid | |
return []; | |
} | |
/** | |
* @author Sibin | |
* submit student room details | |
*/ | |
public function submitStudentRoomDetails($request) | |
{ | |
$properties = $request->properties ? addslashes(json_encode($request->properties, JSON_INVALID_UTF8_IGNORE | JSON_PARTIAL_OUTPUT_ON_ERROR | JSON_ERROR_INVALID_PROPERTY_NAME)) : ""; | |
$request = $this->realEscapeObject($request); | |
$identifier = $request->identifier; | |
$userId = $request->userId; // Assuming userId is available in $request object | |
$entryType = $request->entryType; | |
$userType = $request->userType; | |
$identifierType = $request->identifierType; | |
$studentList = $request->studentList; | |
$createdBy = $request->createdBy; | |
$insertStr = []; | |
foreach($studentList as $student){ | |
$userId = $student->studentId; | |
$insertStr[] = "('$identifier', $userId, '$properties', '$entryType', '$userType', '$identifierType', '$createdBy', NOW())"; | |
} | |
if(!empty($insertStr)){ | |
$insertStr = implode($insertStr,","); | |
$sql = "INSERT INTO subjectWiseSubmissions (identifier, userId, properties, entryType, userType, identifierType, created_by, created_date) VALUES $insertStr"; | |
try { | |
return $this->executeQuery($sql); | |
AMSLogger::log_info($this->logger,Events::EC_SAVE_EXAM_REG_STUDENT_ROOM_NO, [ | |
"staff" => new Staff(["id" => $request->userId]), | |
"request" => $insertStr, | |
"status" => StatusConstants::SUCCESS | |
]); | |
} catch (\Exception $e) { | |
AMSLogger::log_error($this->logger,Events::EC_SAVE_EXAM_REG_STUDENT_ROOM_NO, [ | |
"staff" => new Staff(["id" => $request->userId]), | |
"request" => $insertStr, | |
"errorCode" => $e->getCode(), | |
"errorMessage" => $e->getMessage(), | |
"status" => StatusConstants::FAILED | |
]); | |
throw new ExamControllerException($e->getMessage(), $e->getCode()); | |
} | |
} | |
return false; | |
} | |
/** | |
* get All Hall Assigned Registered Student Details | |
* @param $request | |
* auther Krishnajith | |
*/ | |
public function getAllHallAssignedRegisteredStudentDetails($request){ | |
$request = $this->realEscapeObject($request); | |
if(is_array($request->assessmentId)){ | |
foreach($request->assessmentId as $key => $value){ | |
$request->assessmentId[$key] = stripslashes($value); | |
} | |
} | |
$whereQuery = ""; | |
$orderByQuery = ""; | |
if(!empty($request->examRegistrationId)) { | |
$examRegistrationIdString = is_array($request->examRegistrationId) ? "'" . implode("','",$request->examRegistrationId) . "'" : "'".$request->examRegistrationId."'"; | |
$whereQuery .= " AND eerb.ec_exam_registration_id IN ( $examRegistrationIdString )"; | |
} | |
if(!empty($request->assessmentId)) { | |
$assessmentIdString = is_array($request->assessmentId) ? "'" . implode("','",$request->assessmentId) . "'" : "'".$request->assessmentId."'"; | |
$whereQuery .= " AND esar.am_assessment_id IN ( $assessmentIdString )"; | |
} | |
if(!empty($request->academicTermId)) { | |
$academicTermIdString = is_array($request->academicTermId) ? "'" . implode("','",$request->academicTermId) . "'" : "'".$request->academicTermId."'"; | |
$whereQuery .= " AND eerb.properties ->> '$.academicTermId' IN ( $academicTermIdString )"; | |
} | |
if(!empty($request->hallId)) { | |
$hallIdString = is_array($request->hallId) ? "'" . implode("','",$request->hallId) . "'" : "'".$request->hallId."'"; | |
$whereQuery .= " AND eh.id IN ( $hallIdString )"; | |
} | |
$orderByQuery = " ORDER BY esar.falseNo ASC"; | |
$query = "SELECT DISTINCT | |
esar.falseNo AS falseNumber, | |
eer.name as examRegistrationName | |
FROM | |
ec_student_assessment_registration esar | |
INNER JOIN ec_exam_registration_subject eers ON | |
eers.am_assessment_id = esar.am_assessment_id | |
INNER JOIN ec_exam_registration_batch eerb ON | |
eerb.id = eers.ec_exam_registration_batch_id | |
INNER JOIN ec_exam_registration eer ON | |
eer.id = eerb.ec_exam_registration_id AND | |
eer.trashed IS NULL | |
LEFT JOIN ec_hall_arrangement_group_assigned_student ehagas ON | |
ehagas.am_assessment_id = esar.am_assessment_id AND | |
ehagas.student_id = esar.student_id | |
LEFT JOIN ec_hall_arrangement_group_assigned_hall ehagh ON | |
ehagh.id = ehagas.ec_hall_arrangement_group_assigned_hall_id AND ehagh.is_locked = 1 | |
LEFT JOIN ec_exam_hall eh ON | |
eh.id = ehagh.ec_exam_hall_id | |
WHERE 1=1 AND esar.properties ->> '$.registrationStatus' IN ('REGISTERED') AND | |
eer.type = esar.ec_exam_registration_type AND esar.falseNo IS NOT NULL "; | |
try { | |
$students = $this->executeQueryForList($query.$whereQuery.$orderByQuery); | |
} catch (\Exception $e) { | |
throw new ExamControllerException ($e->getCode(),$e->getMessage()); | |
} | |
return $students; | |
} | |
} |