/** * Close voting * * @return void */ public function handleClose() { $issues = $this->issueRepository->findAll(); $priorities = []; $sumTotalValue = $sumRisk = $sumCost = 0; // Hydrate fields from JIRA + make sums foreach ($issues as $issue) { $priority = $this->jiraService->hydratePriority($issue); $priority->setPositiveValue($this->voteRepository->getTotalVotes($issue)); $priority->setTotalValue((int) $priority->getPositiveValue() + (int) $priority->getNegativeValue()); $sumTotalValue += (int) $priority->getTotalValue(); $sumRisk += (int) $priority->getRisk(); $sumCost += (int) $priority->getCost(); $priorities[] = $priority; } /** @var Priority $priority */ foreach ($priorities as $priority) { $totalValuePercentage = $sumTotalValue > 0 ? (int) $priority->getTotalValue() / $sumTotalValue * 100 : 0; $priority->setTotalValuePercentage($totalValuePercentage); $costPercentage = $sumCost > 0 ? (int) $priority->getCost() / $sumCost * 100 : 0; $priority->setCostPercentage($costPercentage); $riskPercentage = $sumRisk > 0 ? (int) $priority->getRisk() / $sumRisk * 100 : 0; $priority->setRiskPercentage($riskPercentage); $priority->setPriority($priority->getTotalValuePercentage() / ($priority->getCostPercentage() + $priority->getRiskPercentage() * 0.5)); $this->priorityRepository->persist($priority); } $this->priorityRepository->flush(); $this->fileSystem->remove($this->votingOpenFile); return; }
/** * @return array */ public function getGrid() { $issueGrid = []; /** @var Issue $issue */ foreach ($this->issueRepository->findAll() as $issue) { $issueGrid[$issue->getId()]['key'] = $issue->getJiraKey(); $issueGrid[$issue->getId()]['summary'] = $issue->getSummary(); /** @var PersistentCollection $votes */ $votes = $issue->getVotes(); /** @var Stakeholder $stakeholder */ foreach ($this->stakeHolderRepository->findAll() as $stakeholder) { $vote = $votes->matching(Criteria::create()->where(Criteria::expr()->eq('stakeholder', $stakeholder)))->first(); $vote = $vote ? $vote->getVote() : 0; $issueGrid[$issue->getId()]['stakeholders'][$stakeholder->getId()] = $vote; } } $stakeholderGrid = []; foreach ($this->stakeHolderRepository->findAll() as $stakeholder) { $stakeholderGrid[$stakeholder->getId()] = ['name' => $stakeholder->getName(), 'allowedVotes' => $stakeholder->getAllowedVotes()]; } return ['stakeholders' => $stakeholderGrid, 'issues' => $issueGrid]; }