/** * 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.'); }