Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 29 |
CRAP | |
0.00% |
0 / 924 |
CoPoAttainmentService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 29 |
35910.00 | |
0.00% |
0 / 924 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
__clone | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
getInstance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 5 |
|||
getMaxDescriptorDetails | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 12 |
|||
calculateCoAttainment | |
0.00% |
0 / 1 |
1640.00 | |
0.00% |
0 / 175 |
|||
upsertCoAttainment | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 26 |
|||
getCoWiseStudentListForAttainmentCalculation | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 21 |
|||
getAllCoAttainmentOfANode | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 34 |
|||
processAllCoAttainmentDataOfANodeToArray | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 6 |
|||
getTreeDetailsByDepartmentId | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
calculatePoAttainment | |
0.00% |
0 / 1 |
1892.00 | |
0.00% |
0 / 205 |
|||
calculatePoAttainmentForStudentMarkEntryMethod | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 24 |
|||
getPoWiseStudentListForAttainmentCalculation | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 25 |
|||
upsertPoAttainment | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 26 |
|||
getAllPoAttainmentOfANode | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 34 |
|||
getRuleForCoAndPoAttainmentInTreeNode | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 13 |
|||
getRulesForCoAndPoAttainment | |
0.00% |
0 / 1 |
110.00 | |
0.00% |
0 / 61 |
|||
getRulesForCoAndPoAttainmentForSubject | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 18 |
|||
getRulesForCoAndPoAttainmentForDepartment | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 15 |
|||
upsertCoPoAttainmentRules | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
upsertCoPoAttainmentRulesForDepartment | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
deleteCoPoAttainmentRule | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 9 |
|||
deleteCoPoAttainmentRuleForDepartment | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 9 |
|||
populateDescriptorValuesFromIds | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 9 |
|||
getDataForPoAttainmentMatrix | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 46 |
|||
getAttainmentOfADepartment | |
0.00% |
0 / 1 |
110.00 | |
0.00% |
0 / 38 |
|||
getAttainmentOfPoGroup | |
0.00% |
0 / 1 |
182.00 | |
0.00% |
0 / 52 |
|||
processSubjectListForDepartmentAttainmentReport | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 14 |
|||
getSubjectAcademicYearForCOAattainmentReport | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 12 |
<?php | |
namespace com\linways\core\ams\professional\service\nba; | |
use com\linways\core\ams\professional\util\CommonUtil; | |
use com\linways\core\ams\professional\util\nba\NbaUtil; | |
use com\linways\core\ams\professional\service\BaseService; | |
use com\linways\core\ams\professional\dto\nba\CoAttainment; | |
use com\linways\core\ams\professional\dto\nba\PoAttainment; | |
use com\linways\core\ams\professional\service\BatchService; | |
use com\linways\core\ams\professional\dto\SettingsConstents; | |
use com\linways\core\ams\professional\constant\nba\NbaMethod; | |
use com\linways\core\ams\professional\service\DepartmentService; | |
use com\linways\core\ams\professional\service\nba\NbaCoPoService; | |
use com\linways\core\ams\professional\service\nba\NBAPOAttainmentTreeService; | |
use com\linways\core\ams\professional\request\nba\SearchFeedbacks; | |
use com\linways\core\ams\professional\util\nba\NbaCoPoServiceUtil; | |
use com\linways\core\ams\professional\exception\ProfessionalException; | |
use com\linways\core\ams\professional\request\nba\GetAllCoAttainments; | |
use com\linways\core\ams\professional\request\nba\SearchPoGroupRequest; | |
use com\linways\core\ams\professional\constant\nba\AttainmentCalculationType; | |
use com\linways\core\ams\professional\mapper\nba\CoPoAttainmentServiceMapper; | |
use com\linways\core\ams\professional\mapper\nba\ExtraActivitiesServiceMapper; | |
use com\linways\core\ams\professional\request\nba\GetAllActivitiesAssignedToStudentsInABatchRequest; | |
use com\linways\core\ams\professional\request\nba\GetCoWiseStudentListForAttainmentCalculationRequest; | |
use com\linways\core\ams\professional\constant\SettingsConstants; | |
use com\linways\core\ams\professional\service\CommonService; | |
class CoPoAttainmentService extends BaseService | |
{ | |
// /Condition 1 - Presence of a static member variable | |
private static $_instance = null; | |
private $mapper = []; | |
// /Condition 2 - Locked down the constructor | |
private function __construct() | |
{ | |
$this->mapper = CoPoAttainmentServiceMapper::getInstance()->getMapper(); | |
} | |
// Prevent any oustide instantiation of this class | |
// /Condition 3 - Prevent any object or instance of that class to be cloned | |
private function __clone() | |
{ | |
} | |
// Prevent any copy of this object | |
// /Condition 4 - Have a single globally accessible static method | |
public static function getInstance() | |
{ | |
if (!is_object(self::$_instance)) // or if( is_null(self::$_instance) ) or if( self::$_instance == null ) | |
self::$_instance = new self(); | |
return self::$_instance; | |
} | |
public function getMaxDescriptorDetails() | |
{ | |
$sql = ""; | |
$sql = "SELECT MAX(weightage) as descriptorValue | |
FROM | |
nba_descriptor"; | |
try { | |
$maxDescriptor = $this->executeQueryForObject($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $maxDescriptor; | |
} | |
/** | |
* | |
* | |
* @param GetCoWiseStudentListForAttainmentCalculationRequest $request | |
* @return void | |
*/ | |
public function calculateCoAttainment($request) | |
{ | |
$coPoCourseWiseCalculationDisplayStyle = CommonService::getInstance()->getSettings(SettingsConstants::NBA, NbaMethod::OBE_CO_PO_CALCULATION_DISPlAY_STYLE_IN_TREE_NODE); | |
$request = $this->realEscapeObject($request); | |
$coWiseStudentList = $this->getCoWiseStudentListForAttainmentCalculation($request); | |
if (empty($coWiseStudentList)) { | |
return null; | |
} | |
$coAttainmentRuleDetails = $this->getRulesForCoAndPoAttainment($request->batchId, $request->semId, $request->subjectId); | |
if (empty($coAttainmentRuleDetails)&& $coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_STUDENT_WISE_DISPlAY_IN_TREE_NODE) { | |
throw new ProfessionalException(ProfessionalException::ATTAINMENT_RULES_NOT_DEFINED, 'Please Define Co And Po Attainment rules...'); | |
}else{ | |
$coAttainmentRule = $coAttainmentRuleDetails->rule; | |
} | |
$maxDescriptorValue = $this->getMaxDescriptorDetails(); | |
if (empty($maxDescriptorValue)) { | |
throw new ProfessionalException(ProfessionalException::DESCRIPTOR_VALUES_NOT_DEFINED, 'Please Make Sure Descriptor Values Are Defined'); | |
} | |
$maxDescriptorValue = $maxDescriptorValue->descriptorValue; | |
switch ($coAttainmentRule->type) { | |
case AttainmentCalculationType::SIMPLE_AVERAGE: | |
$coAttainmentList = []; | |
foreach ($coWiseStudentList as $co) { | |
$coValue = 0; | |
$coValue = CommonUtil::getSumOfAnAttributeInAnObjectList($co->studentList, "coValueInPercent"); | |
$coValue = $coValue / sizeof($co->studentList); | |
$coValue = ($coValue / 100) * $maxDescriptorValue; | |
$coAttainment = new CoAttainment(); | |
$coAttainment->coId = $co->coId; | |
$coAttainment->value = $coValue; | |
$coAttainment->nodeId = $request->nodeId; | |
$coAttainment->batchId = $request->batchId; | |
$coAttainment->semId = $request->semId; | |
$coAttainment->subjectId = $request->subjectId; | |
$coAttainment->createdBy = $_SESSION["staffID"]; | |
$coAttainment->updatedBy = $_SESSION["staffID"]; | |
$coAttainmentList[] = $coAttainment; | |
} | |
$this->upsertCoAttainment($coAttainmentList); | |
break; | |
case AttainmentCalculationType::SLABBED_AVERAGE: | |
$coAttainmentList = []; | |
foreach ($coWiseStudentList as $co) { | |
$didNotMatchToAnySlab = true; | |
$coValue = 0; | |
$coValue = CommonUtil::getSumOfAnAttributeInAnObjectList($co->studentList, "coValueInPercent"); | |
$coValue = $coValue / sizeof($co->studentList); | |
foreach ($coAttainmentRule->slabs as $slab) { | |
if (($coValue >= $slab->min->percent && $coValue < $slab->max->percent) || ($slab->min->percent == $slab->max->percent && $coValue == $slab->max->percent) || ($coValue == $slab->max->percent && $coValue == 100)) { | |
$didNotMatchToAnySlab = false; | |
if(($slab->max->percent - $slab->min->percent) == 0) | |
$coValue = $slab->min->descriptor; | |
else | |
$coValue = $slab->min->descriptor + (($coValue - $slab->min->percent) / ($slab->max->percent - $slab->min->percent)); //coValue = min_range + (coValueInPercent - lower_range_slab)/ (higher_range_slab - lower_range_slab) This formula converts out co to descriptor range | |
} | |
} | |
if ($didNotMatchToAnySlab) { | |
continue; | |
} | |
$coAttainment = new CoAttainment(); | |
$coAttainment->coId = $co->coId; | |
$coAttainment->value = $coValue; | |
$coAttainment->nodeId = $request->nodeId; | |
$coAttainment->batchId = $request->batchId; | |
$coAttainment->semId = $request->semId; | |
$coAttainment->subjectId = $request->subjectId; | |
try { | |
$coAttainment->createdBy = $_SESSION["staffID"]; | |
} catch (\Exception $e) { | |
error_log("staffID not defined in session variable in co attainment service"); | |
} | |
try { | |
$coAttainment->updatedBy = $_SESSION["staffID"]; | |
} catch (\Exception $e) { | |
error_log("staffID not defined in session variable in co attainment service"); | |
} | |
$coAttainmentList[] = $coAttainment; | |
} | |
$this->upsertCoAttainment($coAttainmentList); | |
break; | |
case AttainmentCalculationType::NSTUDENT_NPERCENT: | |
$coAttainmentList = []; | |
$coAttainmentRule->goals = $this->populateDescriptorValuesFromIds($coAttainmentRule->goals); | |
foreach ($coWiseStudentList as $co) { | |
$ruleMatched = false; | |
foreach($coAttainmentRule->goals as $goal){ | |
$numberOfStudentsWithSpecifiedAttainment = CommonUtil::getNumberOfElementsInAnObjectListByComparingAnAttributeWithGivenValue($co->studentList, "coValueInPercent", ">=", $goal->attain_percent); | |
$totalNumberOfStudents = sizeof($co->studentList); | |
$percentageOfStudentsWithSpecifiedAttainment = 0; | |
if($totalNumberOfStudents){ | |
$percentageOfStudentsWithSpecifiedAttainment = ($numberOfStudentsWithSpecifiedAttainment/$totalNumberOfStudents)*100; | |
} | |
if($percentageOfStudentsWithSpecifiedAttainment >= $goal->student_percent){ | |
$coAttainment = new CoAttainment(); | |
$coAttainment->coId = $co->coId; | |
$coAttainment->value = $goal->descriptor->weightage?$goal->descriptor->weightage:0; | |
$coAttainment->nodeId = $request->nodeId; | |
$coAttainment->batchId = $request->batchId; | |
$coAttainment->semId = $request->semId; | |
$coAttainment->subjectId = $request->subjectId; | |
$coAttainment->createdBy = $_SESSION["staffID"]; | |
$coAttainment->updatedBy = $_SESSION["staffID"]; | |
$coAttainmentList[] = $coAttainment; | |
$ruleMatched = true; | |
break; | |
} | |
} | |
if(!$ruleMatched){ | |
$coAttainment = new CoAttainment(); | |
$coAttainment->coId = $co->coId; | |
$coAttainment->value = 0; | |
$coAttainment->nodeId = $request->nodeId; | |
$coAttainment->batchId = $request->batchId; | |
$coAttainment->semId = $request->semId; | |
$coAttainment->subjectId = $request->subjectId; | |
$coAttainment->createdBy = $_SESSION["staffID"]; | |
$coAttainment->updatedBy = $_SESSION["staffID"]; | |
$coAttainmentList[] = $coAttainment; | |
} | |
} | |
$this->upsertCoAttainment($coAttainmentList); | |
break; | |
case AttainmentCalculationType::N_STUDENT_N_PERCENT_SLABBED_AVERAGE: | |
$coAttainmentList = []; | |
foreach ( $coWiseStudentList as $co ) { | |
$goalCount= count($coAttainmentRule->goalsWithSlab); | |
foreach($coAttainmentRule->goalsWithSlab as $gIndex => $goal){ | |
$numberOfStudentsWithSpecifiedAttainment=0; | |
$percentageOfStudentsWithSpecifiedAttainment=0; | |
$numberOfStudentsWithSpecifiedAttainment = CommonUtil::getNumberOfElementsInAnObjectListByComparingAnAttributeWithGivenValue($co->studentList, "coValueInPercent", ">=", $goal->thresholdMark); | |
$totalNumberOfStudents = sizeof($co->studentList); | |
$didNotMatchToAnyGoalsSlab = true; | |
if($totalNumberOfStudents){ | |
$percentageOfStudentsWithSpecifiedAttainment = ($numberOfStudentsWithSpecifiedAttainment/$totalNumberOfStudents)*100; | |
if (($percentageOfStudentsWithSpecifiedAttainment >= $goal->min->percent && $percentageOfStudentsWithSpecifiedAttainment < $goal->max->percent) || ($goal->min->percent == $goal->max->percent && $percentageOfStudentsWithSpecifiedAttainment == $goal->max->percent) || ($percentageOfStudentsWithSpecifiedAttainment == $goal->max->percent && $percentageOfStudentsWithSpecifiedAttainment == 100)) { | |
$didNotMatchToAnyGoalsSlab = false; | |
if(($goal->max->percent - $goal->min->percent) == 0) | |
$coValue = $goal->min->descriptor; | |
else if($goal->max->descriptor == $goal->min->descriptor) | |
$coValue = $goal->min->descriptor; | |
else | |
$coValue = $goal->min->descriptor + (($percentageOfStudentsWithSpecifiedAttainment - $goal->min->percent) / ($goal->max->percent - $goal->min->percent)); //coValue = min_range + (coValueInPercent - lower_range_slab)/ (higher_range_slab - lower_range_slab) This formula converts out co to descriptor range | |
break; | |
} | |
} | |
} | |
if($didNotMatchToAnyGoalsSlab){ | |
$coValue = 0; | |
$coAttainment = new CoAttainment(); | |
$coAttainment->coId = $co->coId; | |
$coAttainment->value = $coValue; | |
$coAttainment->nodeId = $request->nodeId; | |
$coAttainment->batchId = $request->batchId; | |
$coAttainment->semId = $request->semId; | |
$coAttainment->subjectId = $request->subjectId; | |
$coAttainment->createdBy = $_SESSION["staffID"]; | |
$coAttainment->updatedBy = $_SESSION["staffID"]; | |
$coAttainmentList[] = $coAttainment; | |
$ruleMatched = true; | |
}else{ | |
// $coValue = round($coValue,0); | |
$coAttainment = new CoAttainment(); | |
$coAttainment->coId = $co->coId; | |
$coAttainment->value = $coValue; | |
$coAttainment->nodeId = $request->nodeId; | |
$coAttainment->batchId = $request->batchId; | |
$coAttainment->semId = $request->semId; | |
$coAttainment->subjectId = $request->subjectId; | |
$coAttainment->createdBy = $_SESSION["staffID"]; | |
$coAttainment->updatedBy = $_SESSION["staffID"]; | |
$coAttainmentList[] = $coAttainment; | |
} | |
} | |
$this->upsertCoAttainment($coAttainmentList); | |
break; | |
} | |
} | |
/** | |
* | |
* | |
* @param [CoAttainment[]] $coAttainmentList | |
* @return void | |
*/ | |
public function upsertCoAttainment($coAttainmentList) | |
{ | |
if (empty($coAttainmentList)) { | |
return null; | |
} | |
$coAttainment = $coAttainmentList[0]; | |
$sql = ""; | |
$coIdString = CommonUtil::implodeAnAttributeInAnObjectList($coAttainmentList, 'coId', ','); | |
if ($coIdString != "") { | |
$sql = "DELETE FROM nba_co_attainment WHERE co_id NOT IN ($coIdString) AND batch_id = $coAttainment->batchId AND sem_id = $coAttainment->semId AND subject_id = $coAttainment->subjectId AND node_id = $coAttainment->nodeId"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
foreach ($coAttainmentList as $coAttainment) { | |
$sql = ""; | |
$sql = "INSERT INTO nba_co_attainment (co_id,value, node_id,batch_id, sem_id, subject_id, created_by, created_date, updated_by, updated_date) VALUES ($coAttainment->coId, $coAttainment->value,$coAttainment->nodeId, $coAttainment->batchId, $coAttainment->semId, $coAttainment->subjectId, $coAttainment->createdBy, UTC_TIMESTAMP(), $coAttainment->updatedBy, UTC_TIMESTAMP()) | |
ON DUPLICATE KEY UPDATE value= $coAttainment->value, updated_by= $coAttainment->updatedBy, updated_date=UTC_TIMESTAMP()"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
} | |
/** | |
* | |
* @param GetCoWiseStudentListForAttainmentCalculationRequest | |
* $request | |
* @return void | |
*/ | |
public function getCoWiseStudentListForAttainmentCalculation($request) | |
{ | |
$request = $this->realEscapeObject($request); | |
$coWiseStudentList = []; | |
$sql = ""; | |
$sql = "SELECT | |
co_id AS coId, | |
student_id AS studentId, | |
value AS coValueInPercent | |
FROM | |
nba_subject_node_co_value | |
WHERE | |
node_id = $request->nodeId AND batch_id = $request->batchId | |
AND sem_id = $request->semId | |
AND subject_id = $request->subjectId"; | |
try { | |
$coWiseStudentList = $this->executeQueryForList($sql, $this->mapper[CoPoAttainmentServiceMapper::GET_CO_WISE_STUDENT_LIST]); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $coWiseStudentList; | |
} | |
/** | |
* | |
* | |
* @param GetAllCoAttainments $request | |
* @return void | |
*/ | |
public function getAllCoAttainmentOfANode($request) | |
{ | |
$request = $this->realEscapeObject($request); | |
$sql = ""; | |
$responseList = []; | |
$nbaMethod = NbaUtil::getNbaMethod(); | |
$coPoCourseWiseCalculationDisplayStyle = CommonService::getInstance()->getSettings(SettingsConstants::NBA, NbaMethod::OBE_CO_PO_CALCULATION_DISPlAY_STYLE_IN_TREE_NODE); | |
if($nbaMethod == NbaMethod::STUDENT_MARK_ENTRY_IN_EXAT_METHOD){ | |
$tableForAttainment = "nba_subject_node_co_value"; | |
}else{ | |
$tableForAttainment = "nba_co_attainment"; | |
} | |
if($nbaMethod != NbaMethod::STUDENT_MARK_ENTRY_IN_EXAT_METHOD && ($coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_IN_TREE_NODE || $coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_AND_CALCULATION_TWO)){ | |
$tableForAttainment = "nba_course_wise_node_co_value"; | |
} | |
$sql = "SELECT | |
ca.co_id AS coId, | |
co.code AS coCode, | |
co.objective AS coDescription, | |
ca.value AS coValue | |
FROM | |
$tableForAttainment ca | |
INNER JOIN | |
nba_course_outcome co ON ca.co_id = co.id AND ca.batch_id=co.batchID AND ca.sem_id=co.semID AND ca.subject_id=co.subjectID | |
WHERE | |
ca.node_id = '$request->nodeId' AND ca.batch_id = '$request->batchId' | |
AND ca.sem_id = '$request->semId' | |
AND ca.subject_id = '$request->subjectId' order by co.order_no"; | |
try { | |
$responseList = $this->executeQueryForList($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $responseList; | |
} | |
public function processAllCoAttainmentDataOfANodeToArray($attainmentCoList){ | |
$responseList = []; | |
foreach($attainmentCoList as $coAttainment){ | |
$responseList[$coAttainment->coId] = $coAttainment->coValue; | |
} | |
return $responseList; | |
} | |
public function getTreeDetailsByDepartmentId($departmentId){ | |
$sql = ""; | |
$departmentId = $this->realEscapeString($departmentId); | |
$sql = "SELECT id, name,co_root_node_id as selectedCoNodeId, po_root_node_id as selectedPoNodeId FROM nba_po_attainment_tree WHERE deptID = '$departmentId'"; | |
try { | |
$response = $this->executeQueryForObject($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $response; | |
} | |
/** | |
* method for calculating po attainment | |
* | |
* @param [RequestForAttainment] $request | |
* @return void | |
*/ | |
public function calculatePoAttainment($request) | |
{ | |
$coPoCourseWiseCalculationDisplayStyle = CommonService::getInstance()->getSettings(SettingsConstants::NBA, NbaMethod::OBE_CO_PO_CALCULATION_DISPlAY_STYLE_IN_TREE_NODE); | |
$request = $this->realEscapeObject($request); | |
$poWiseStudentList = $this->getPoWiseStudentListForAttainmentCalculation($request); | |
$poCalculationDisplayStyle = CommonService::getInstance()->getSettings(SettingsConstants::NBA, 'OBE_PO_CALCULATION_DISPlAY_STYLE_IN_TREE_NODE'); | |
if (empty($poWiseStudentList)) { | |
return null; | |
} | |
$attainmentRuleDetails = $this->getRulesForCoAndPoAttainment($request->batchId, $request->semId, $request->subjectId); | |
if (empty($attainmentRuleDetails) &&$coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_STUDENT_WISE_DISPlAY_IN_TREE_NODE) { | |
throw new ProfessionalException(ProfessionalException::ATTAINMENT_RULES_NOT_DEFINED, 'Please Define Co And Po Attainment rules...'); | |
}else{ | |
$attainmentRule = $attainmentRuleDetails->rule; | |
} | |
$maxDescriptorValue = $this->getMaxDescriptorDetails(); | |
if (empty($maxDescriptorValue)) { | |
throw new ProfessionalException(ProfessionalException::DESCRIPTOR_VALUES_NOT_DEFINED, 'Please Make Sure Descriptor Values Are Defined'); | |
} | |
$maxDescriptorValue = $maxDescriptorValue->descriptorValue; | |
$sql = "DELETE FROM nba_po_attainment_subject WHERE batch_id = '$request->batchId' AND sem_id = '$request->semId' AND subject_id = '$request->subjectId' AND node_id != '$request->nodeId'"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
if ($poCalculationDisplayStyle == 'PO_CALCULATION_FROM_CO_VALUES'){ | |
$bId = $request->batchId; | |
$nodeId = $request->nodeId; | |
$semId = $request->semId; | |
$subId = $request->subjectId; | |
$subjectNodePo = NBAPOAttainmentTreeService::getInstance()->getSubjectNodePoValue($bId, $nodeId, $semId, $subId); | |
$poAttainmentList = []; | |
foreach ($subjectNodePo as $po) { | |
$poValue = round($po->value,2); | |
$poAttainment = new PoAttainment(); | |
$poAttainment->poId = $po->poId; | |
$poAttainment->value = $poValue; | |
$poAttainment->nodeId = $request->nodeId; | |
$poAttainment->batchId = $request->batchId; | |
$poAttainment->semId = $request->semId; | |
$poAttainment->subjectId = $request->subjectId; | |
$poAttainment->createdBy = $_SESSION["staffID"]; | |
$poAttainment->updatedBy = $_SESSION["staffID"]; | |
$poAttainmentList[] = $poAttainment; | |
} | |
$this->upsertPoAttainment($poAttainmentList); | |
} else { | |
switch ($attainmentRule->type) { | |
case AttainmentCalculationType::SIMPLE_AVERAGE: | |
$poAttainmentList = []; | |
foreach ($poWiseStudentList as $po) { | |
$poValue = 0; | |
$poValue = CommonUtil::getSumOfAnAttributeInAnObjectList($po->studentList, "poValueInPercent"); | |
$poValue = $poValue / sizeof($po->studentList);//this should be number of students which have that co1 | |
$poValue = ($poValue / 100) * $maxDescriptorValue; | |
$poAttainment = new PoAttainment(); | |
$poAttainment->poId = $po->poId; | |
$poAttainment->value = $poValue; | |
$poAttainment->nodeId = $request->nodeId; | |
$poAttainment->batchId = $request->batchId; | |
$poAttainment->semId = $request->semId; | |
$poAttainment->subjectId = $request->subjectId; | |
$poAttainment->createdBy = $_SESSION["staffID"]; | |
$poAttainment->updatedBy = $_SESSION["staffID"]; | |
$poAttainmentList[] = $poAttainment; | |
} | |
$this->upsertPoAttainment($poAttainmentList); | |
break; | |
case AttainmentCalculationType::SLABBED_AVERAGE: | |
$poAttainmentList = []; | |
foreach ($poWiseStudentList as $po) { | |
$didNotMatchToAnySlab = true; | |
$poValue = 0; | |
$poValue = CommonUtil::getSumOfAnAttributeInAnObjectList($po->studentList, "poValueInPercent"); | |
$poValue = $poValue / sizeof($po->studentList); | |
foreach ($attainmentRule->slabs as $slab) { | |
if (($poValue >= $slab->min->percent && $poValue < $slab->max->percent) || ($slab->min->percent == $slab->max->percent && $poValue == $slab->max->percent) || ($poValue == $slab->max->percent && $poValue == 100)){ | |
$didNotMatchToAnySlab = false; | |
if(($slab->max->percent - $slab->min->percent) == 0) | |
$poValue = $slab->min->descriptor; | |
else | |
$poValue = $slab->min->descriptor + (($poValue - $slab->min->percent) / ($slab->max->percent - $slab->min->percent)); //poValue = min_range + (poValueInPercent - lower_range_slab)/ (higher_range_slab - lower_range_slab) This formula converts out co to descriptor range | |
} | |
} | |
if ($didNotMatchToAnySlab) { | |
continue; | |
} | |
$poAttainment = new CoAttainment(); | |
$poAttainment->poId = $po->poId; | |
$poAttainment->value = $poValue; | |
$poAttainment->nodeId = $request->nodeId; | |
$poAttainment->batchId = $request->batchId; | |
$poAttainment->semId = $request->semId; | |
$poAttainment->subjectId = $request->subjectId; | |
try { | |
$poAttainment->createdBy = $_SESSION["staffID"]; | |
} catch (\Exception $e) { | |
error_log("staffID not defined in session variable in co attainment service"); | |
} | |
try { | |
$poAttainment->updatedBy = $_SESSION["staffID"]; | |
} catch (\Exception $e) { | |
error_log("staffID not defined in session variable in co attainment service"); | |
} | |
$poAttainmentList[] = $poAttainment; | |
} | |
$this->upsertPoAttainment($poAttainmentList); | |
break; | |
case AttainmentCalculationType::NSTUDENT_NPERCENT: | |
$poAttainmentList = []; | |
$attainmentRule->goals = $this->populateDescriptorValuesFromIds($attainmentRule->goals); | |
foreach ($poWiseStudentList as $po) { | |
$ruleMatched = false; | |
foreach($attainmentRule->goals as $goal){ | |
$numberOfStudentsWithSpecifiedAttainment = CommonUtil::getNumberOfElementsInAnObjectListByComparingAnAttributeWithGivenValue($po->studentList, "poValueInPercent", ">=", $goal->attain_percent); | |
$totalNumberOfStudents = sizeof($po->studentList); | |
$percentageOfStudentsWithSpecifiedAttainment = 0; | |
if($totalNumberOfStudents){ | |
$percentageOfStudentsWithSpecifiedAttainment = ($numberOfStudentsWithSpecifiedAttainment/$totalNumberOfStudents)*100; | |
} | |
if($percentageOfStudentsWithSpecifiedAttainment >= $goal->student_percent){ | |
$poAttainment = new PoAttainment(); | |
$poAttainment->poId = $po->poId; | |
$poAttainment->value = $goal->descriptor->weightage?$goal->descriptor->weightage:0; | |
$poAttainment->nodeId = $request->nodeId; | |
$poAttainment->batchId = $request->batchId; | |
$poAttainment->semId = $request->semId; | |
$poAttainment->subjectId = $request->subjectId; | |
$poAttainment->createdBy = $_SESSION["staffID"]; | |
$poAttainment->updatedBy = $_SESSION["staffID"]; | |
$poAttainmentList[] = $poAttainment; | |
$ruleMatched = true; | |
break; | |
} | |
} | |
if(!$ruleMatched){ | |
$poAttainment = new PoAttainment(); | |
$poAttainment->poId = $po->poId; | |
$poAttainment->value = 0; | |
$poAttainment->nodeId = $request->nodeId; | |
$poAttainment->batchId = $request->batchId; | |
$poAttainment->semId = $request->semId; | |
$poAttainment->subjectId = $request->subjectId; | |
$poAttainment->createdBy = $_SESSION["staffID"]; | |
$poAttainment->updatedBy = $_SESSION["staffID"]; | |
$poAttainmentList[] = $poAttainment; | |
} | |
} | |
$this->upsertPoAttainment($poAttainmentList); | |
break; | |
case AttainmentCalculationType::N_STUDENT_N_PERCENT_SLABBED_AVERAGE: | |
$poAttainmentList = []; | |
foreach ( $poWiseStudentList as $po ) { | |
$goalCount= count($attainmentRule->goalsWithSlab); | |
foreach($attainmentRule->goalsWithSlab as $gIndex => $goal){ | |
$numberOfStudentsWithSpecifiedAttainment=0; | |
$percentageOfStudentsWithSpecifiedAttainment=0; | |
$numberOfStudentsWithSpecifiedAttainment = CommonUtil::getNumberOfElementsInAnObjectListByComparingAnAttributeWithGivenValue($po->studentList, "poValueInPercent", ">=", $goal->thresholdMark); | |
$totalNumberOfStudents = sizeof($po->studentList); | |
$didNotMatchToAnyGoalsSlab = true; | |
if($totalNumberOfStudents){ | |
$percentageOfStudentsWithSpecifiedAttainment = ($numberOfStudentsWithSpecifiedAttainment/$totalNumberOfStudents)*100; | |
if (($percentageOfStudentsWithSpecifiedAttainment >= $goal->min->percent && $percentageOfStudentsWithSpecifiedAttainment < $goal->max->percent) || ($goal->min->percent == $goal->max->percent && $percentageOfStudentsWithSpecifiedAttainment == $goal->max->percent) || ($percentageOfStudentsWithSpecifiedAttainment == $goal->max->percent && $percentageOfStudentsWithSpecifiedAttainment == 100)) { | |
$didNotMatchToAnyGoalsSlab = false; | |
if(($goal->max->percent - $goal->min->percent) == 0) | |
$poValue = $goal->min->descriptor; | |
else if($goal->max->descriptor == $goal->min->descriptor) | |
$poValue = $goal->min->descriptor; | |
else | |
$poValue = $goal->min->descriptor + (($percentageOfStudentsWithSpecifiedAttainment - $goal->min->percent) / ($goal->max->percent - $goal->min->percent)); //poValue = min_range + (poValueInPercent - lower_range_slab)/ (higher_range_slab - lower_range_slab) This formula converts out co to descriptor range | |
break; | |
} | |
} | |
} | |
if($didNotMatchToAnyGoalsSlab){ | |
$poValue = 0; | |
$poAttainment = new PoAttainment(); | |
$poAttainment->poId = $po->poId; | |
$poAttainment->value = $poValue; | |
$poAttainment->nodeId = $request->nodeId; | |
$poAttainment->batchId = $request->batchId; | |
$poAttainment->semId = $request->semId; | |
$poAttainment->subjectId = $request->subjectId; | |
$poAttainment->createdBy = $_SESSION["staffID"]; | |
$poAttainment->updatedBy = $_SESSION["staffID"]; | |
$poAttainmentList[] = $poAttainment; | |
$ruleMatched = true; | |
}else{ | |
// $poValue = round($poValue,0); | |
$poAttainment = new PoAttainment(); | |
$poAttainment->poId = $po->poId; | |
$poAttainment->value = $poValue; | |
$poAttainment->nodeId = $request->nodeId; | |
$poAttainment->batchId = $request->batchId; | |
$poAttainment->semId = $request->semId; | |
$poAttainment->subjectId = $request->subjectId; | |
$poAttainment->createdBy = $_SESSION["staffID"]; | |
$poAttainment->updatedBy = $_SESSION["staffID"]; | |
$poAttainmentList[] = $poAttainment; | |
} | |
} | |
$this->upsertPoAttainment($poAttainmentList); | |
break; | |
} | |
} | |
} | |
/** | |
* Undocumented function | |
* | |
* @param [type] $request | |
* @return void | |
*/ | |
public function calculatePoAttainmentForStudentMarkEntryMethod($request){ | |
$request = $this->realEscapeObject($request); | |
$poListForAttainment = []; | |
$poListForAttainment = $this->getDataForPoAttainmentMatrix($request); | |
foreach($poListForAttainment as $po){ | |
$sumOfDescriptors = NbaCoPoServiceUtil::findSumOfCoDescriptorsInsideDescriptorObject($po->coList); | |
$poAttainmentValue = 0; | |
foreach($po->coList as $co){ | |
if($co->attainment->value){ | |
$poAttainmentValue += $co->attainment->value*($co->descriptor->weightage/$sumOfDescriptors); | |
} | |
} | |
$poAttainment = new PoAttainment(); | |
$poAttainment->poId = $po->id; | |
$poAttainment->value = $poAttainmentValue; | |
$poAttainment->nodeId = $request->nodeId; | |
$poAttainment->batchId = $request->batchId; | |
$poAttainment->semId = $request->semId; | |
$poAttainment->subjectId = $request->subjectId; | |
$poAttainment->createdBy = $_SESSION["staffID"]; | |
$poAttainment->updatedBy = $_SESSION["staffID"]; | |
$poAttainmentList[] = $poAttainment; | |
} | |
$this->upsertPoAttainment($poAttainmentList); | |
} | |
/** | |
* | |
* | |
* @param [type] $request | |
* @return void | |
*/ | |
public function getPoWiseStudentListForAttainmentCalculation($request) | |
{ | |
$request = $this->realEscapeObject($request); | |
$poWiseStudentList = []; | |
$sql = ""; | |
$sql = "SELECT | |
po_id AS poId, | |
student_id AS studentId, | |
value AS poValueInPercent, | |
staff_id AS staffId, | |
batch_id AS batchId, | |
sem_id AS semId, | |
subject_id AS subjectId | |
FROM | |
nba_subject_node_po_value | |
WHERE | |
node_id = $request->nodeId AND batch_id = $request->batchId | |
AND sem_id = $request->semId | |
AND subject_id = $request->subjectId"; | |
try { | |
$poWiseStudentList = $this->executeQueryForList($sql, $this->mapper[CoPoAttainmentServiceMapper::GET_PO_WISE_STUDENT_LIST]); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $poWiseStudentList; | |
} | |
/** | |
* | |
* | |
* @param [PoAttainment[]] $poAttainmentList | |
* @return void | |
*/ | |
public function upsertPoAttainment($poAttainmentList) | |
{ | |
if (empty($poAttainmentList)) { | |
return null; | |
} | |
$poAttainment = $poAttainmentList[0]; | |
$sql = ""; | |
$poIdString = CommonUtil::implodeAnAttributeInAnObjectList($poAttainmentList, 'poId', ','); | |
if ($poIdString != "") { | |
$sql = "DELETE FROM nba_po_attainment_subject WHERE po_id NOT IN ($poIdString) AND batch_id = $poAttainment->batchId AND sem_id = $poAttainment->semId AND subject_id = $poAttainment->subjectId AND node_id = $poAttainment->nodeId"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
foreach ($poAttainmentList as $poAttainment) { | |
$sql = ""; | |
$sql = "INSERT INTO nba_po_attainment_subject (po_id,value, node_id,batch_id, sem_id, subject_id, created_by, created_date, updated_by, updated_date) VALUES ($poAttainment->poId, $poAttainment->value,$poAttainment->nodeId, $poAttainment->batchId, $poAttainment->semId, $poAttainment->subjectId, $poAttainment->createdBy, UTC_TIMESTAMP(), $poAttainment->updatedBy, UTC_TIMESTAMP()) | |
ON DUPLICATE KEY UPDATE value= $poAttainment->value, updated_by= $poAttainment->updatedBy, updated_date=UTC_TIMESTAMP()"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
} | |
public function getAllPoAttainmentOfANode( $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
$sql = ""; | |
$responseList = []; | |
$coPoCourseWiseCalculationDisplayStyle = CommonService::getInstance()->getSettings(SettingsConstants::NBA, NbaMethod::OBE_CO_PO_CALCULATION_DISPlAY_STYLE_IN_TREE_NODE); | |
if($coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_IN_TREE_NODE || $coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_AND_CALCULATION_TWO){ | |
$tableForAttainment = "nba_course_wise_node_po_value"; | |
} | |
else{ | |
$tableForAttainment = "nba_po_attainment_subject"; | |
} | |
$sql = "SELECT | |
pas.po_id AS poId, | |
po.poName, | |
po.poCode, | |
po.poDesc , | |
po.isPSO, | |
pas.value AS poValue | |
FROM | |
$tableForAttainment pas | |
INNER JOIN | |
nba_program_outcome po ON pas.po_id = po.id | |
WHERE | |
pas.node_id = '$request->nodeId' AND pas.batch_id = '$request->batchId' | |
AND pas.sem_id = '$request->semId' | |
AND pas.subject_id = '$request->subjectId' | |
ORDER BY po.order_no"; | |
try { | |
$responseList = $this->executeQueryForList($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $responseList; | |
} | |
public function getRuleForCoAndPoAttainmentInTreeNode($batchId, $semId, $subjectId,$nodeId){ | |
$ruleDetails = $this->getRulesForCoAndPoAttainmentForSubject($batchId, $semId, $subjectId,$nodeId); | |
if(!empty($ruleDetails)){ | |
return $ruleDetails; | |
}else{ | |
$parentNodeDetailsSql= "select t2.id,t2.is_leaf_node,t2.parent_nba_po_attainment_node_id from nba_po_attainment_node t1 inner join nba_po_attainment_node t2 ON (t1.parent_nba_po_attainment_node_id =t2.id) where t1.id =$nodeId and t2.is_deleted=0"; | |
$parentNodeDetails = $this->executeQueryForObject($parentNodeDetailsSql); | |
if(!empty($parentNodeDetails)){ | |
return $this->getRuleForCoAndPoAttainmentInTreeNode($batchId, $semId, $subjectId,$parentNodeDetails->id); | |
}else{ | |
return $ruleDetails; | |
} | |
} | |
} | |
public function getRulesForCoAndPoAttainment($batchId, $semId, $subjectId, $nodeId=0, $ruleForCalculation = false) | |
{ | |
$coPoCourseWiseCalculationDisplayStyle = CommonService::getInstance()->getSettings(SettingsConstants::NBA, NbaMethod::OBE_CO_PO_CALCULATION_DISPlAY_STYLE_IN_TREE_NODE); | |
try{ | |
$deptId = DepartmentService::getInstance()->getDepartmentByBatchId($batchId)->deptID; | |
}catch(\Exception $e){ | |
$deptId = null; | |
} | |
try{ | |
$ruleDetails = $this->getRulesForCoAndPoAttainmentForDepartment($deptId); | |
}catch(\Exception $e){ | |
$ruleDetails = null; | |
} | |
if(empty($ruleDetails)){ | |
try{ | |
if($coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_IN_TREE_NODE || $coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_AND_CALCULATION_TWO){ | |
if($ruleForCalculation){ | |
$ruleDetails = $this->getRuleForCoAndPoAttainmentInTreeNode($batchId, $semId, $subjectId,$nodeId); | |
}else{ | |
$ruleDetails = $this->getRulesForCoAndPoAttainmentForSubject($batchId, $semId, $subjectId,$nodeId); | |
} | |
if(!empty($ruleDetails)){ | |
$ruleDetails->departmentRule = false; | |
$ruleDetails->batchId = $batchId; | |
$ruleDetails->semId = $semId; | |
$ruleDetails->subjectId = $subjectId; | |
$ruleDetails->treeNodeWiseRule = true; | |
}else{ | |
$rule = new \stdClass(); | |
$rule->type = ""; | |
$rule->slabs = []; | |
$rule->goals = []; | |
$rule->goalsWithSlab = []; | |
$ruleDetails->rule=$rule; | |
$ruleDetails->departmentRule = false; | |
$ruleDetails->batchId = $batchId; | |
$ruleDetails->semId = $semId; | |
$ruleDetails->subjectId = $subjectId; | |
$ruleDetails->treeNodeWiseRule = false; | |
} | |
}else{ | |
$ruleDetails = $this->getRulesForCoAndPoAttainmentForSubject($batchId, $semId, $subjectId); | |
if(!empty($ruleDetails)){ | |
$ruleDetails->departmentRule = false; | |
$ruleDetails->batchId = $batchId; | |
$ruleDetails->semId = $semId; | |
$ruleDetails->subjectId = $subjectId; | |
$ruleDetails->treeNodeWiseRule = false; | |
} | |
} | |
}catch(\Exception $e){ | |
$ruleDetails = null; | |
} | |
}else{ | |
$ruleDetails->batchId = $batchId; | |
$ruleDetails->semId = $semId; | |
$ruleDetails->subjectId = $subjectId; | |
$ruleDetails->departmentRule = true; | |
$ruleDetails->treeNodeWiseRule = false; | |
} | |
return $ruleDetails; | |
} | |
public function getRulesForCoAndPoAttainmentForSubject($batchId, $semId, $subjectId, $nodeId =0) | |
{ | |
$batchId = $this->realEscapeString($batchId); | |
$semId = $this->realEscapeString($semId); | |
$subjectId = $this->realEscapeString($subjectId); | |
$nodeId = $this->realEscapeString($nodeId); | |
$ruleDetails = []; | |
$sql = ""; | |
$sql = "SELECT rule, batch_id as batchId, sem_id as semId, subject_id as subjectId FROM nba_co_attainment_rules WHERE batch_id = '$batchId' AND sem_id = '$semId' AND subject_id = '$subjectId' AND node_id = '$nodeId'"; | |
try { | |
$ruleDetails = $this->executeQueryForObject($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
if (!empty($ruleDetails)) { | |
$ruleDetails->rule = json_decode($ruleDetails->rule); | |
} | |
return $ruleDetails; | |
} | |
public function getRulesForCoAndPoAttainmentForDepartment($deptId) | |
{ | |
$deptId = $this->realEscapeString($deptId); | |
$ruleDetails = []; | |
$sql = ""; | |
$sql = "SELECT rule, department_id as deptId, enforce_rule as enforceRule FROM nba_co_attainment_rules_for_department WHERE department_id = '$deptId'"; | |
try { | |
$ruleDetails = $this->executeQueryForObject($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
if (!empty($ruleDetails)) { | |
$ruleDetails->rule = json_decode($ruleDetails->rule); | |
} | |
return $ruleDetails; | |
} | |
/** | |
* Undocumented function | |
* | |
* @param [type] $coPoAttainmentRule | |
* @return void | |
*/ | |
public function upsertCoPoAttainmentRules($coPoAttainmentRule){ | |
$coPoAttainmentRule = $this->realEscapeObject($coPoAttainmentRule); | |
$coPoAttainmentRule->rule = json_encode($coPoAttainmentRule->rule); | |
$sql = "INSERT INTO `nba_co_attainment_rules` (`batch_id`, `sem_id`, `subject_id`, `node_id`, `rule`, `created_by`, `created_date`, `updated_by`, `updated_date`) VALUES ('$coPoAttainmentRule->batchId', '$coPoAttainmentRule->semId', '$coPoAttainmentRule->subjectId', '$coPoAttainmentRule->nodeId', '$coPoAttainmentRule->rule', '$coPoAttainmentRule->createdBy', UTC_TIMESTAMP(), '$coPoAttainmentRule->updatedBy', UTC_TIMESTAMP()) ON DUPLICATE KEY UPDATE rule='$coPoAttainmentRule->rule'"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return true; | |
} | |
public function upsertCoPoAttainmentRulesForDepartment($coPoAttainmentRule){ | |
$coPoAttainmentRule = $this->realEscapeObject($coPoAttainmentRule); | |
$coPoAttainmentRule->rule = json_encode($coPoAttainmentRule->rule); | |
$sql = "INSERT INTO `nba_co_attainment_rules_for_department` (`department_id`,`enforce_rule`, `rule`, `created_by`, `created_date`, `updated_by`, `updated_date`) VALUES ('$coPoAttainmentRule->deptId', '$coPoAttainmentRule->enforceRule', '$coPoAttainmentRule->rule', '$coPoAttainmentRule->createdBy', UTC_TIMESTAMP(), '$coPoAttainmentRule->updatedBy', UTC_TIMESTAMP()) ON DUPLICATE KEY UPDATE rule='$coPoAttainmentRule->rule', enforce_rule='$coPoAttainmentRule->enforceRule'"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return true; | |
} | |
/** | |
* Undocumented function | |
* | |
* @param [type] $request | |
* @return void | |
*/ | |
public function deleteCoPoAttainmentRule($request){ | |
$request = $this->realEscapeObject($request); | |
$sql = "DELETE FROM nba_co_attainment_rules WHERE batch_id = $request->batchId AND sem_id = $request->semId AND subject_id = $request->subjectId AND node_id = $request->nodeId"; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return true; | |
} | |
public function deleteCoPoAttainmentRuleForDepartment($request){ | |
$request = $this->realEscapeObject($request); | |
$sql = "DELETE FROM nba_co_attainment_rules_for_department WHERE department_id = $request->deptId "; | |
try { | |
$this->executeQuery($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return true; | |
} | |
public function populateDescriptorValuesFromIds($goals){ | |
foreach($goals as $goal){ | |
try{ | |
$goal->descriptor = NbaCoPoService::getInstance()->getDescriptorById ($goal->descriptor); | |
}catch(\Exception $e){ | |
$goal->descriptor = null; | |
} | |
} | |
return $goals; | |
} | |
/** | |
* Returns CO PO relation and attainment if any | |
* | |
* @param RequestForAttainment $request | |
* @return void | |
*/ | |
public function getDataForPoAttainmentMatrix($request){ | |
$request = $this->realEscapeObject($request); | |
$poList = []; | |
$sql = ""; | |
$nbaMethod = NbaUtil::getNbaMethod(); | |
$coPoCourseWiseCalculationDisplayStyle = CommonService::getInstance()->getSettings(SettingsConstants::NBA, NbaMethod::OBE_CO_PO_CALCULATION_DISPlAY_STYLE_IN_TREE_NODE); | |
if($nbaMethod == NbaMethod::STUDENT_MARK_ENTRY_IN_EXAT_METHOD){ | |
$tableForAttainment = "nba_subject_node_co_value"; | |
}else{ | |
$tableForAttainment = "nba_co_attainment"; | |
} | |
if($nbaMethod != NbaMethod::STUDENT_MARK_ENTRY_IN_EXAT_METHOD &&($coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_IN_TREE_NODE || $coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_AND_CALCULATION_TWO)){ | |
$tableForAttainment = "nba_course_wise_node_co_value"; | |
} | |
$sql = "SELECT | |
co.id AS coId, | |
co.code AS coCode, | |
po.id AS poId, | |
po.poCode, | |
po.poName, | |
po.department_id AS poDepartmentId, | |
ndesc.id AS descriptorId, | |
ndesc.descriptorName, | |
ndesc.weightage AS descriptorWeightage, | |
coatt.id as coAttainmentId, | |
coatt.value as coAttainmentValue | |
FROM | |
nba_course_outcome co | |
INNER JOIN | |
nba_co_po_relation cpr ON co.id = cpr.nba_course_outcome_id | |
INNER JOIN | |
nba_program_outcome po ON po.id = cpr.nba_program_outcome_id | |
INNER JOIN | |
nba_descriptor ndesc ON cpr.nba_descriptor_id = ndesc.id | |
INNER JOIN | |
$tableForAttainment coatt ON coatt.batch_id = co.batchID AND coatt.sem_id = co.semID AND coatt.subject_id = co.subjectID AND coatt.co_id = co.id | |
WHERE | |
co.batchID = '$request->batchId' AND co.subjectID = '$request->subjectId' | |
AND co.semID = '$request->semId' AND coatt.node_id = $request->nodeId | |
ORDER BY po.order_no"; | |
try{ | |
$poList = $this->executeQueryForList($sql, $this->mapper[CoPoAttainmentServiceMapper::GET_DATA_FOR_PO_ATTAINMENT_REPORT]); | |
}catch(\Exception $e){ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $poList; | |
} | |
public function getAttainmentOfADepartment($deptId, $batchId = null){ | |
$deptId = $this->realEscapeString($deptId); | |
$searchPoGroup = new SearchPoGroupRequest(); | |
$searchPoGroup->deptId = $deptId; | |
try{ | |
$poGroupList = PoGroupService::getInstance()->searchPoGroup($searchPoGroup); | |
}catch(\Exception $e){ | |
$poGroupList = []; | |
} | |
if(empty($poGroupList)){ | |
return null; | |
} | |
$coPoCourseWiseCalculationDisplayStyle = CommonService::getInstance()->getSettings(SettingsConstants::NBA, NbaMethod::OBE_CO_PO_CALCULATION_DISPlAY_STYLE_IN_TREE_NODE); | |
if($coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_IN_TREE_NODE || $coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_AND_CALCULATION_TWO){ | |
$tableForAttainment = "nba_course_wise_node_po_value"; | |
} | |
else{ | |
$tableForAttainment = "nba_po_attainment_subject"; | |
} | |
foreach ($poGroupList as $poGroup) { | |
foreach ($poGroup->batchList as $batchIndex => $batch) { | |
if($batchId){ | |
if($batch->id != $batchId){ | |
unset($poGroup->batchList[$batchIndex]); | |
continue; | |
} | |
} | |
$batch->subjectList = []; | |
$sql = ""; | |
$sql = "SELECT po_att.po_id as poId, po_att.value, po_att.subject_id as subjectId, sub.subjectName, sub.subjectDesc FROM $tableForAttainment po_att INNER JOIN subjects sub ON sub.subjectID = po_att.subject_id WHERE po_att.batch_id = '$batch->id' AND po_att.sem_id='$batch->semId' AND po_att.subject_id IN (SELECT DISTINCT subjectID FROM sbs_relation WHERE batchID = '$batch->id' AND semID = '$batch->semId')"; | |
try{ | |
$batch->subjectList = $this->executeQueryForList($sql, $this->mapper[CoPoAttainmentServiceMapper::GET_DATA_FOR_PO_ATTAINMENT_OF_DEPARTMENT_REPORT]); | |
}catch(\Exception $e){ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
} | |
return $poGroupList; | |
} | |
public function getAttainmentOfPoGroup($groupIds, $batchId = null){ | |
$groupIds = $this->realEscapeArray($groupIds); | |
$searchPoGroup = new SearchPoGroupRequest(); | |
$searchPoGroup->groupIds = $groupIds; | |
try{ | |
$searchPoGroup->isSeparatePso = 1; | |
$poGroupListPoOnly = PoGroupService::getInstance()->searchPoGroup($searchPoGroup); | |
$searchPoGroup->isSeparatePso = 2; | |
$poGroupListPsoOnly = PoGroupService::getInstance()->searchPoGroup($searchPoGroup); | |
foreach ($poGroupListPoOnly as $poGroup) { | |
$poGroup->isPso = 0; | |
} | |
foreach ($poGroupListPsoOnly as $poGroup) { | |
$poGroup->isPso = 1; | |
} | |
$poGroupList=array_merge($poGroupListPoOnly, $poGroupListPsoOnly); | |
// array_push($poGroupList, $poGroupListPsoOnly); | |
}catch(\Exception $e){ | |
$poGroupList = []; | |
} | |
if(empty($poGroupList)){ | |
return null; | |
} | |
$coPoCourseWiseCalculationDisplayStyle = CommonService::getInstance()->getSettings(SettingsConstants::NBA, NbaMethod::OBE_CO_PO_CALCULATION_DISPlAY_STYLE_IN_TREE_NODE); | |
if($coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_IN_TREE_NODE || $coPoCourseWiseCalculationDisplayStyle==NbaMethod::OBE_CO_PO_CALCULATION_COURSE_WISE_DISPlAY_AND_CALCULATION_TWO){ | |
$tableForAttainment = "nba_course_wise_node_po_value"; | |
} | |
else{ | |
$tableForAttainment = "nba_po_attainment_subject"; | |
} | |
foreach ($poGroupList as $poGroup) { | |
foreach ($poGroup->batchList as $batchIndex => $batch) { | |
if($batchId){ | |
if($batch->id != $batchId){ | |
unset($poGroup->batchList[$batchIndex]); | |
continue; | |
} | |
} | |
$batch->subjectList = []; | |
$sql = ""; | |
if($batchId){ | |
$sql = "SELECT po_att.po_id as poId, po_att.value, po_att.subject_id as subjectId, sub.subjectName, sub.subjectDesc FROM $tableForAttainment po_att INNER JOIN subjects sub ON sub.subjectID = po_att.subject_id WHERE po_att.batch_id = '$batch->id' AND po_att.subject_id IN (SELECT DISTINCT subjectID FROM sbs_relation WHERE batchID = '$batch->id' )"; | |
}else{ | |
$sql = "SELECT po_att.po_id as poId, po_att.value, po_att.subject_id as subjectId, sub.subjectName, sub.subjectDesc FROM $tableForAttainment po_att INNER JOIN subjects sub ON sub.subjectID = po_att.subject_id WHERE po_att.batch_id = '$batch->id' AND po_att.sem_id = '$batch->semId' AND po_att.subject_id IN (SELECT DISTINCT subjectID FROM sbs_relation WHERE batchID = '$batch->id' and semID ='$batch->semId')"; | |
} | |
try{ | |
$batch->subjectList = $this->executeQueryForList($sql, $this->mapper[CoPoAttainmentServiceMapper::GET_DATA_FOR_PO_ATTAINMENT_OF_DEPARTMENT_REPORT]); | |
}catch(\Exception $e){ | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
} | |
return $poGroupList; | |
} | |
public function processSubjectListForDepartmentAttainmentReport($poGroupList){ | |
foreach ($poGroupList as $poGroup) { | |
foreach ($poGroup->batchList as $batch) { | |
$batch->subjectIdList = []; | |
foreach ($batch->subjectList as $subject) { | |
$batch->subjectIdList[$subject->id] = new \StdClass(); | |
$batch->subjectIdList[$subject->id]->poIdList = []; | |
foreach ($subject->poAttainmentList as $poAttainment) { | |
$batch->subjectIdList[$subject->id]->poIdList[$poAttainment->id] = $poAttainment->value; | |
} | |
} | |
} | |
} | |
return $poGroupList; | |
} | |
public function getSubjectAcademicYearForCOAattainmentReport($subjectId, $batchId, $semId){ | |
$semId = $this->realEscapeString($semId); | |
$subjectId = $this->realEscapeString($subjectId); | |
$batchId = $this->realEscapeString($batchId); | |
// $staffId = $this->realEscapeString($staffId); | |
$result=""; | |
$sql = "SELECT sbsID,staffID,createdDate from sbs_relation where subjectID='$subjectId' and batchID='$batchId' and semID='$semId'"; | |
try { | |
$result =$this->executeQueryForList($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $result; | |
} | |
} |