public function testFromVoixAndExprimes() { $score = Score::fromVoixAndExprimes(500, 1000); $this->assertEquals(500, $score->toVoix()); $this->assertLessThanOrEqual(50.001, $score->toPourcentage()); $this->assertGreaterThanOrEqual(49.999, $score->toPourcentage()); }
private function doScoreQuery(Echeance $echeance, $territoire, $candidat) { $query = $this->em->createQuery('SELECT SUM(score.scoreVO.voix) FROM AppBundle\\Domain\\Election\\Entity\\Election\\ScoreAssignment score JOIN score.election election WHERE score.territoire = :territoire AND score.candidat IN (' . $this->getCandidatSubquery($candidat) . ') AND election.echeance = :echeance')->setParameters(array('echeance' => $echeance, 'territoire' => $territoire)); if ($candidat instanceof CandidatNuanceSpecification) { $query->setParameter('nuances', $candidat->getNuances()); } else { $query->setParameter('candidat', $candidat); } $result = $query->getSingleScalarResult(); return $result ? Score::fromVoix($result) : null; }
private function doScoreQuery(Echeance $echeance, $territoire, $candidat) { $result = $this->fetchScoreResult($echeance, $territoire, $candidat, 'doScoreQuery'); if (is_integer($result)) { return Score::fromVoix($result); } if (false === $result) { return; } $query = $this->em->createQuery('SELECT candidat_ AS candidat, score.scoreVO.voix AS voix FROM AppBundle\\Domain\\Election\\Entity\\Candidat\\Candidat candidat_, AppBundle\\Domain\\Election\\Entity\\Election\\ScoreAssignment score JOIN score.election election WHERE score.territoire = :territoire AND score.candidat = candidat_ AND election.echeance = :echeance GROUP BY candidat_')->setParameters(array('echeance' => $echeance, 'territoire' => $territoire)); $results = $query->getResult(); $this->cacheScoreResult($echeance, $territoire, $results, 'doScoreQuery'); $result = $this->fetchScoreResult($echeance, $territoire, $candidat, 'doScoreQuery'); return is_integer($result) ? Score::fromVoix($result) : null; }
/** * Mettre à jour le nombre de voix d'un candidat sur un territoire donné, * ou par défaut sur la circonscription de l'élection. Si le nombre de * suffrages exprimés est déjà réglé dans l'élection, le pourcentage est * mis à jour automatiquement. Sinon, pourcentage et voix sont effacés et * remplacés par cette donnée. * * @param int $voix Le nombre de voix du candidat. * @param CandidatInterface $candidat Le candidat dont il s'agit. * @param AbstractTerritoire $territoire Le territoire du score. */ public function setVoixCandidat($voix, CandidatInterface $candidat, AbstractTerritoire $territoire = null) { if (!in_array($candidat, $this->getCandidats(), true)) { throw new \Exception('Le candidat doit déjà participer à l\'élection' . 'avant d\'avoir un score'); } if (null === $territoire) { $territoire = $this->circonscription; } $voteInfo = $this->getVoteInfo($territoire); if ($voteInfo) { $exprimes = $voteInfo->getExprimes(); } if (isset($exprimes)) { $score = Score::fromVoixAndExprimes($voix, $exprimes); } else { $score = Score::fromVoix($voix); } $scoreAssignment = $this->getScoreAssignmentCandidat($candidat, $territoire); $scoreAssignment->setScoreVO($score); }