Skip to content
Snippets Groups Projects
Forked from it-lab / grade
Source project has a limited visibility.
Bill.php 2.61 KiB
<?php defined('SYSPATH') or die('No direct script access.');

class Controller_DeanOffice_Bill extends Controller_Environment_DeanOffice
{
    public function before() {
        parent::before();

        Cookie::set('fD', 'true');
    }

    public static function makeTable($groupID, &$disciplines) {
        $students = Model_Students::ofGroup($groupID);
        $table = [];

        $iter = 0;

        foreach ($disciplines as &$dis) {
            $disInfo = Model_Discipline::getDisciplineRateInfo($dis['ID']);
            //echo Debug::vars($disInfo);
            $rates = Model_Rating::getRatesForStudentsGroup((int)$dis['ID'], $groupID);
            foreach ($rates as $record) {
                if (!isset($table[$record['ID']])) {
                    $table[$record['ID']] = [
                        'Name'   => $record['LastName'] . ' ' . $record['FirstName'] . ' ' . $record['SecondName'],
                        'grades' => []
                    ];
                }
                $rate = ($record['intermediate'] + $record['bonus'] + $record['exam']);
                $rateSet = isset($record['intermediate'])||isset($record['bonus'])||isset($record['exam']);
                $table[$record['ID']]['grades'][] = [
                    'subject' => $dis['SubjectName'],
                    'rating'  => $rateSet ? $rate : '-',
                    'debt'   => $rateSet && (float)($record['intermediate'] + $record['bonus'] + $record['exam']) < 0.6 * $disInfo['Current']
                ];
            }
            //check: student may not be attach to discipline
            foreach ($students as $stud) {
                if (!isset($table[$stud['ID']])) {
                    $table[$stud['ID']] = [
                        'Name'   => $stud['LastName'] . ' ' . $stud['FirstName'] . ' ' . $stud['SecondName'],
                        'grades' => []
                    ];
                }
                if (!isset($table[$stud['ID']]['grades'][$iter])) {
                    $table[$stud['ID']]['grades'][] = [
                        'subject' => $dis['SubjectName'],
                        'rating'  => '-',
                        'debt'    => false
                    ];
                }
            }
            $iter++;
        }
        array_multisort($table);

        return $table;
    }

    public function action_index() {
        $id = $this->request->param('id');
        $disciplines = Model_Group::with($id)->getDisciplines();
        $this->twig->set_filename(static::DEAN . 'bill')
            ->set([
            'Disciplines' => $disciplines,
            'Table'       => self::makeTable($id, $disciplines)
        ]);
    }
}