Skip to content

Commit

Permalink
wip: update student competency calculations
Browse files Browse the repository at this point in the history
  • Loading branch information
nbey committed Feb 3, 2021
1 parent ad30ea5 commit 1e5aa2c
Showing 1 changed file with 34 additions and 12 deletions.
46 changes: 34 additions & 12 deletions php-classes/Slate/CBL/StudentCompetency.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

use Slate\CBL\Demonstrations\Demonstration;
use Slate\CBL\Demonstrations\DemonstrationSkill;
use Slate\CBL\Demonstrations\OverrideDemonstration;

class StudentCompetency extends \ActiveRecord
{
Expand Down Expand Up @@ -227,9 +228,10 @@ public function getDemonstrationData()
'SkillID',
'
SELECT DemonstrationSkill.*,
Demonstration.Demonstrated AS DemonstrationDate
Demonstration.Demonstrated AS DemonstrationDate,
Demonstration.Class AS DemonstrationClass
FROM `%s` DemonstrationSkill
JOIN (SELECT ID, Demonstrated FROM `%s` WHERE StudentID = %u) Demonstration
JOIN (SELECT ID, Demonstrated, Class FROM `%s` WHERE StudentID = %u) Demonstration
ON Demonstration.ID = DemonstrationSkill.DemonstrationID
WHERE (%s)
ORDER BY SkillID, DemonstrationDate, DemonstrationID
Expand All @@ -252,7 +254,8 @@ public function getDemonstrationData()
$demonstrationSkill['DemonstrationDate'] = strtotime($demonstrationSkill['DemonstrationDate']);
$demonstrationSkill['TargetLevel'] = intval($demonstrationSkill['TargetLevel']);
$demonstrationSkill['DemonstratedLevel'] = intval($demonstrationSkill['DemonstratedLevel']);
$demonstrationSkill['Override'] = $demonstrationSkill['Override'] == '1';
$demonstrationSkill['DemonstrationClass'] = $demonstrationSkill['DemonstrationClass'];
$demonstrationSkill['EvidenceWeight'] = !empty($demonstrationSkill['EvidenceWeight']) ? intval($demonstrationSkill['EvidenceWeight']) : null;
}
}
} else {
Expand All @@ -271,16 +274,29 @@ public function getDemonstrationOpportunities()
{
if ($this->demonstrationOpportunities === null) {
$this->demonstrationOpportunities = 0;

$hasWildCard = false;
foreach ($this->getDemonstrationData() as $skillId => $demonstrationData) {
foreach ($demonstrationData as $demonstration) {
if (empty($demonstration['Override'])) {
$this->demonstrationOpportunities++;
// skip overrides by class
if ($demonstration['DemonstrationClass'] == OverrideDemonstration::class) {
continue;
}

if ($demonstration['EvidenceWeight'] === null) {
$hasWildcard = true;
break;
} else {
$this->demonstrationOpportunities += $demonstration['EvidenceWeight'];
}
}
}
}

if ($hasWildCard) {
// return total requirements
$this->demonstrationOpportunities = $this->getDemonstrationsRequired();
}

return $this->demonstrationOpportunities;
}

Expand Down Expand Up @@ -329,8 +345,11 @@ public function getDemonstrationsLogged()

foreach ($this->getEffectiveDemonstrationsData() as $skillId => $demonstrationData) {
foreach ($demonstrationData as $demonstration) {
if (empty($demonstration['Override']) && !empty($demonstration['DemonstratedLevel'])) {
$this->demonstrationsLogged++;
if ( // ignore override
$demonstration['DemonstrationClass'] !== OverrideDemonstration::class &&
!empty($demonstration['DemonstratedLevel'])
) {
$this->demonstrationsLogged += $demonstration['EvidenceWeight'];
}
}
}
Expand All @@ -347,7 +366,10 @@ public function getDemonstrationsMissed()

foreach ($this->getEffectiveDemonstrationsData() as $skillId => $demonstrationData) {
foreach ($demonstrationData as $demonstration) {
if (empty($demonstration['Override']) && empty($demonstration['DemonstratedLevel'])) {
if (
$demonstration['DemonstrationClass'] !== OverrideDemonstration::class &&
empty($demonstration['DemonstratedLevel'])
) {
$this->demonstrationsMissed++;
}
}
Expand All @@ -369,10 +391,10 @@ public function getDemonstrationsComplete()
$skillCount = 0;

foreach ($demonstrationData as $demonstration) {
if (!empty($demonstration['Override'])) {
if ($demonstration['DemonstrationClass'] === OverrideDemonstration::class) {
$skillCount += $demonstrationsRequired;
} elseif (!empty($demonstration['DemonstratedLevel'])) {
$skillCount++;
$skillCount+= $demonstration['EvidenceWeight'];
}
}

Expand All @@ -392,7 +414,7 @@ public function getDemonstrationsAverage()
$totalScore = 0;
foreach ($effectiveDemonstrationsData as $skillId => $demonstrationsData) {
foreach ($demonstrationsData as $demonstration) {
if (empty($demonstration['Override'])) {
if ($demonstration['DemonstrationClass'] !== OverrideDemonstration::class) {
$totalScore += $demonstration['DemonstratedLevel'];
}
}
Expand Down

0 comments on commit 1e5aa2c

Please sign in to comment.