/** * Execute the command. * * @param Submission $submission * @param VoteRepositoryInterface $repository * @param Dispatcher $event */ public function handle(Submission $submission, VoteRepositoryInterface $repository, Dispatcher $event) { if ($this->vote->votable instanceof Fund) { dd('wait it`s a fund function on CloseVotingCommand'); } /** * Get which Submission had more Votes * @todo Improve this messy function */ /** @var Collection $submissions */ $submissions = $this->vote->votable->submissions->load('votes'); $votes = $submissions->pluck('votes', 'id')->map(function ($item) { return $item->sum('pivot.amount'); }); /** * if don't have any votes there will be no winner, so declare this failed */ if ($votes->sum() <= 0) { /** * Fail The project stage */ $this->dispatch(new FailIdeaSynapseScriptStageCommand($this->vote->votable)); /** * Announce Vote has Failed */ $event->fire(new VotingHasFailed($this->vote)); return; } /** * Retrieve Winner Submission */ $submission_winner = $submission->findOrFail($votes->sort()->keys()->pop()); /** * Refund Losers */ $losers = $submissions->filter(function ($submission) use($submission_winner) { return $submission->id != $submission_winner->id; }); /** * Announce VoteHasFinished */ $event->fire(new VotingHasFinished($this->vote, $submission_winner, $losers)); }
/** * Vote on a Submission * * @param int $submission_id * @param int $user_id */ public function vote($submission_id, $user_id) { $this->submission->find($submission_id)->attach($user_id); }
/** * Get All Private Submissions * * @return Collection */ public function allPrivate() { return $this->model->submissions()->private()->get(); }
/** * Open submit Close Command * * @param Project $project * @param User $user * @param Vote $vote */ public function openNextStage(Project $project, User $user, Vote $vote) { /** * Submit To Project */ $fields = array('content' => 'Dummy Submission', 'visibility' => '1'); collect(range(1, 10))->each(function () use($project, $user, $fields) { $this->dispatch(new SubmitCommand($project, $user, $fields)); }); /** * Open project Voting */ $this->dispatch(new OpenVotingCommand($vote)); /** * Vote on Some Submissions */ $submissions = Submission::all(); collect(range(1, 10))->each(function () use($submissions, $user) { $this->dispatch(new VoteOnSubmissionCommand(rand(1, 50), $submissions->random(), $user)); }); /** * Close the Voting */ $this->dispatch(new CloseVotingCommand($vote)); }