Skip to content
Snippets Groups Projects
Bill.php 3.46 KiB
Newer Older
dmitry.s's avatar
dmitry.s committed
<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Office_Bill extends Controller_Environment_Office
dmitry.s's avatar
dmitry.s committed
{
    public function before() {
        parent::before();
        Cookie::set('fD', 'true');
    }

dmitry.s's avatar
dmitry.s committed
    public static function makeTable($groupID, &$disciplines) {
        $students = Model_Students::ofGroup($groupID);
        $table = [];

        foreach ($students as $stud) {
            $table[$stud['ID']] = [
                'Name'   => $stud['LastName'] . ' ' . $stud['FirstName'] . ' ' . $stud['SecondName'],
                'grades' => []
            ];
        }

Turchin's avatar
Turchin committed

        foreach ($disciplines as &$dis) {
            $rates = Model_Rating::getRatesForStudentsGroupByStage2($dis['ID'], $groupID, 3);
dmitry.s's avatar
dmitry.s committed
            foreach ($rates as $record) {

                if (!isset($table[$record['StudentID']])) continue; // skip fake

                $exam = max($record['PreviousExam'], $record['Exam'], $record['PrePreviousExam']);
                $rate = $record['Semester'] + $record['Bonus'] + $record['Extra'] + $exam;
                if ($rate > 100) {
                $rateSet = isset($record['Semester']) || isset($record['Bonus'])
                    || isset($record['Extra']);
                if ($dis['CompoundDiscID']) {
                    //Выдать "звездочку", если кто-то умудрился приписать студента к двум+ дисциплинам из одного compound
                    if (isset($table[$record['StudentID']]['grades'][-$dis['CompoundDiscID']])) {
                        $table[$record['StudentID']]['grades'][-$dis['CompoundDiscID']]['rating'] =
                            (string) $table[$record['StudentID']]['grades'][-$dis['CompoundDiscID']]['rating'] . '*';
                        continue;
                    }
                }
                $table[$record['StudentID']]['grades'][($dis['CompoundDiscID'] ? -$dis['CompoundDiscID'] : $dis['ID'])] = [
                        'rating' => $rateSet ? $rate : '–'
                    ] + Model_Student::RecognizeDebtAndRepassing($dis, $record);
dmitry.s's avatar
dmitry.s committed
            }
            //check: student may not be attach to discipline but exist in group
dmitry.s's avatar
dmitry.s committed
            foreach ($students as $stud) {
                if (!isset($table[$stud['ID']]['grades'][($dis['CompoundDiscID'] ? -$dis['CompoundDiscID'] : $dis['ID'])])) {
                    $table[$stud['ID']]['grades'][$dis['CompoundDiscID'] ? -$dis['CompoundDiscID'] : $dis['ID']] = [
                        'rating' => '–',
                        'debt'   => false,
                        'repass' => false
dmitry.s's avatar
dmitry.s committed
                    ];
                }
            }
        }
        return $table;
    }
dmitry.s's avatar
dmitry.s committed

    public static function formHead(&$disciplines) {
        foreach ($disciplines as $dis) {
            if ($dis['CompoundDiscID']) {
                if (!isset($res[-$dis['CompoundDiscID']]))
                    $res[-$dis['CompoundDiscID']] = $dis;
                $res[$dis['ID']] = $dis;
            }
        }
        return $res;
    }

    public function action_group() {
dmitry.s's avatar
dmitry.s committed
        $id = $this->request->param('id');
        $disciplines = Model_Group::with($id)->getDisciplines();
        $this->twig->set_filename(static::OFFICE . 'bill')
dmitry.s's avatar
dmitry.s committed
            ->set([
                'Disciplines' => self::formHead($disciplines),
                'Table'       => self::makeTable($id, $disciplines)
            ]);
dmitry.s's avatar
dmitry.s committed
    }
}