예제 #1
0
 /**
  * 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));
 }
예제 #2
0
 /**
  * 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();
 }
예제 #4
0
 /**
  * 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));
 }