Ejemplo n.º 1
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function fire()
 {
     foreach (Exchange::whereProcessed(false)->get() as $exchange) {
         if ($exchange->draw_at->isPast()) {
             $this->info('Drawing for exchange "' . $exchange->name . '"');
             // For each user in exchange
             $users = $exchange->participants()->orderByRaw('RAND()')->get();
             $length = count($users);
             foreach ($users as $key => $giver) {
                 if ($key == $length - 1) {
                     $gifty = $users[0];
                 } else {
                     $gifty = $users[$key + 1];
                 }
                 //Store
                 $this->info($giver->id . ' will be giving a gift to ' . $gifty->id);
                 $surprise = new Surprise();
                 $surprise->gifty()->associate($gifty);
                 $surprise->giver()->associate($giver);
                 $exchange->surprises()->save($surprise);
                 //Email
                 Mail::send('emails.exchanges.drawing', array('giver' => $giver, 'gifty' => $gifty, 'exchange' => $exchange), function ($message) use($exchange, $giver) {
                     //Test Emails
                     //$message->to('*****@*****.**', $giver->username)->subject($exchange->name . ' drawing!');
                     $message->to($giver->email, $giver->username)->subject($exchange->name . ' drawing!');
                 });
             }
             // Mark as processed
             $exchange->processed = true;
             $exchange->save();
         } else {
             // Skip
             $this->info($exchange->draw_at->diffInDays() . ' days left on ' . $exchange->name);
         }
     }
     $this->info('Done.');
 }