public function prihlasNaTermin(Trace $trace, $terminIndex) { $terminy = $this->executor->readTable(array(), 'terminy'); // Jemna napodobenina logiky pre prihlasovanie, // checkuje ci uz nie som zapisany na iny termin s vyslednou znamkou. foreach ($terminy as $index => $unused) { $info = $this->executor->readTable(array('termin' => $index), 'prihlas'); if (isset($info['jePrihlaseny']) && $info['jePrihlaseny']) { $znamka = $info['prihlasenyData'][self::MOJE_TERMINY_ZNAMKA]; if (!Znamka::isSame($znamka, 'Fx')) { throw new Exception("Už si prihlásený na iný termín z tohoto predmetu!"); } } } $info = $this->executor->readTable(array('termin' => $terminIndex), 'prihlas'); if (!isset($info['mozePrihlasit']) || !$info['mozePrihlasit']) { $dovod = isset($info['nemozePrihlasitDovod']) ? $info['nemozePrihlasitDovod'] : 'neznámy'; throw new Exception("Nemôžem prihlásiť na termín - dôvod: " . $dovod); } if (isset($info['jePrihlaseny']) && $info['jePrihlaseny']) { throw new Exception("Na daný termín si už prihlásený."); } $info['jePrihlaseny'] = true; $this->executor->writeTable(array('termin' => $terminIndex), 'prihlas', $info); $this->closeIfNeeded($trace); return true; }
public function mozeSaPrihlasit($prihlasTerminyRow, $time) { $predmet = $prihlasTerminyRow[PrihlasTerminyFields::PREDMET_SKRATKA]; if (isset($this->hodnoteniaData[$predmet][HodnoteniaFields::ZNAMKA])) { $znamka = $this->hodnoteniaData[$predmet][HodnoteniaFields::ZNAMKA]; } else { $znamka = ""; } // Note(PPershing): never use $this->hodnoteniaData[$predmet][HodnoteniaFields::MOZE_PRIHLASIT] // AiS will incorrectly report that you can't sign up if you have FX! $mozePredmet = $prihlasTerminyRow[ZoznamTerminovFields::MOZE_PRIHLASIT] == 'A'; if ($znamka != "" && !Znamka::isSame($znamka, 'Fx') && !$mozePredmet) { return self::PRIHLASIT_NEMOZE_ZNAMKA; } $prihlasRange = AIS2Utils::parseAISDateTimeRange($prihlasTerminyRow[PrihlasTerminyFields::PRIHLASOVANIE_DATUM]); if (!($prihlasRange['od'] < $time && $prihlasRange['do'] > $time)) { return self::PRIHLASIT_NEMOZE_CAS; } if ($prihlasTerminyRow[PrihlasTerminyFields::MAX_POCET] !== '' && $prihlasTerminyRow[PrihlasTerminyFields::MAX_POCET] <= $prihlasTerminyRow[PrihlasTerminyFields::POCET_PRIHLASENYCH]) { return self::PRIHLASIT_NEMOZE_POCET; } if (!$mozePredmet) { return self::PRIHLASIT_NEMOZE_INE; } if ($znamka != "" && !Znamka::isSame($znamka, 'Fx') && $mozePredmet) { return self::PRIHLASIT_MOZE_ZNAMKA; } return self::PRIHLASIT_MOZE; }
public function mozeSaPrihlasit($prihlasTerminyRow, $time) { $predmet = $prihlasTerminyRow[PrihlasTerminyFields::PREDMET_SKRATKA]; if (isset($this->hodnoteniaData[$predmet][HodnoteniaFields::ZNAMKA])) { $znamka = $this->hodnoteniaData[$predmet][HodnoteniaFields::ZNAMKA]; } else { $znamka = ""; } if (isset($this->hodnoteniaData[$predmet][HodnoteniaFields::MOZE_PRIHLASIT]) && $this->hodnoteniaData[$predmet][HodnoteniaFields::MOZE_PRIHLASIT] == 'N') { $mozePredmet = false; } else { $mozePredmet = true; } if ($znamka != "" && !Znamka::isSame($znamka, 'Fx') && !$mozePredmet) { return self::PRIHLASIT_NEMOZE_ZNAMKA; } $prihlasRange = AIS2Utils::parseAISDateTimeRange($prihlasTerminyRow[PrihlasTerminyFields::PRIHLASOVANIE_DATUM]); if (!($prihlasRange['od'] < $time && $prihlasRange['do'] > $time)) { return self::PRIHLASIT_NEMOZE_CAS; } if ($prihlasTerminyRow[PrihlasTerminyFields::MAX_POCET] !== '' && $prihlasTerminyRow[PrihlasTerminyFields::MAX_POCET] <= $prihlasTerminyRow[PrihlasTerminyFields::POCET_PRIHLASENYCH]) { return self::PRIHLASIT_NEMOZE_POCET; } if (!$mozePredmet) { return self::PRIHLASIT_NEMOZE_INE; } if ($znamka != "" && !Znamka::isSame($znamka, 'Fx') && $mozePredmet) { return self::PRIHLASIT_MOZE_ZNAMKA; } return self::PRIHLASIT_MOZE; }
public function testPorovnavaniaZnamok() { $this->assertTrue(Znamka::isSame('a', 'a')); $this->assertTrue(Znamka::isSame('a', 'A')); $this->assertTrue(Znamka::isSame('A', 'a')); $this->assertTrue(Znamka::isSame('Fx', 'Fx')); $this->assertTrue(Znamka::isSame('FX', 'Fx')); $this->assertTrue(Znamka::isSame('Fx', 'FX')); $this->assertTrue(Znamka::isSame('fX', 'fx')); $this->assertTrue(Znamka::isSame('fX', 'FX')); $this->assertFalse(Znamka::isSame('a', 'B')); $this->assertFalse(Znamka::isSame('Fx', 'Fxx')); $this->assertFalse(Znamka::isSame('C', 'EC')); }
/** * Prida predmet s danou znamkou, zarata do neohodnotenych ak * sa znamku nepodarilo rozpoznat alebo nie je vyplnena * @param string $castRoka do ktorej casti roka sa ma znamka zaratat * @param string $znamkaText nazov znamky (A, B, ...) * @param int $kredity pocet kreditov pre danu znamku */ public function add($castRoka, $znamkaText, $kredity) { Preconditions::check(in_array($castRoka, array(self::SEMESTER_LETNY, self::SEMESTER_ZIMNY, self::AKADEMICKY_ROK)), "Neplatná časť študijného roka."); $znamka = null; if ($znamkaText !== '') { $znamka = Znamka::fromString($znamkaText); } $this->obdobia[$castRoka]->add($kredity, $znamka); // Ak pridavame do akademickeho roka, tak hodnotu nechceme zaratat dvakrat if ($castRoka !== self::AKADEMICKY_ROK) { $this->obdobia[self::AKADEMICKY_ROK]->add($kredity, $znamka); } }
/** * Vypocita vazeny priemer, vaha sa berie z kreditov * @param boolean $neohodnotene true ak sa maju zapocitat aj neohodnotene * predmety so znamkou Fx * @returns float hodnota vazeneho priemeru */ public function vazenyPriemer($neohodnotene = true) { $suma = $this->sucetVah; $pocet = $this->pocetKreditovOhodnotenych; if ($neohodnotene) { $hodnotaFx = Znamka::fromString('Fx')->getNumerickaHodnota(); $suma += $this->pocetKreditovNeohodnotenych * $hodnotaFx; $pocet += $this->pocetKreditovNeohodnotenych; } if ($pocet == 0) { return null; } return $suma / $pocet; }