/** * Scope a query to only contain battles that are closed for voting */ public function scopeCompleted($query) { $votingperiod = config('rap-battle.votingperiod', 24); // battles before this date are closed: $timeoldest = new Carbon(); $timeoldest->subHours($votingperiod); return $query->where('created_at', '<', $timeoldest->toDateTimeString()); }
/** * Is this notification "read"? (we assume that it is after 6 hours, or if the user clicked open the notification menu) * * @param $query * @param $user_id * @return mixed */ public function scopeUnread($query, $user_id) { $date = new Carbon(); $date->subHours(6); return $query->where('user_id', '=', $user_id)->where('is_read', '=', 0)->orWhere('created_at', '>', $date->toDateTimeString())->get(); }
public function store(ReservationRequest $request) { //booking $booking = array('car_type_id' => $request->car_type_id, 'number_of_passengers' => $request->number_of_passengers, 'pickup_time' => $request->pickup_date_part . ' ' . $request->pickup_time_part); $newBooking = Booking::create($booking); // main passenger //user (main passenger) $mainpassenger = new User(); $mainpassenger->name = $request->name; $mainpassenger->phone = $request->phone; $mainpassenger->save(); //role (main passenger) $role = array('booking_id' => $newBooking->id, 'role_type_id' => '2', 'user_id' => $mainpassenger->id); Role::create($role); //email receiver //user (email receiver) $emailreceiver = User::firstOrCreate(['email' => $request->email]); //role (email receiver) $role = array('booking_id' => $newBooking->id, 'role_type_id' => '5', 'user_id' => $emailreceiver->id); Role::create($role); //route points //start $route_point = array('booking_id' => $newBooking->id, 'location_id' => $request->start_location_id, 'sub_location_id' => $request->start_sub_location_id, 'description' => $request->start_description, 'order' => 1); Route_point::create($route_point); //via points $descriptionArray = $request->description; //if via array is not empty if (!empty($request->location_id)) { foreach ($request->location_id as $order => $location_id) { $route_point = null; $route_point = array('booking_id' => $newBooking->id, 'location_id' => $location_id, 'description' => $descriptionArray[$order], 'order' => $order); Route_point::create($route_point); } } //end $route_point = null; $route_point = array('booking_id' => $newBooking->id, 'location_id' => $request->end_location_id, 'description' => $request->end_description, 'order' => 99); Route_point::create($route_point); //general comment if (!empty($request->comment)) { $comment = array('booking_id' => $newBooking->id, 'comment_type_id' => '2', 'role_id' => '1', 'comment' => $request->comment); Comment::create($comment); } //price $price = Income_list::where('car_type_id', $request->car_type_id)->where('direction_id', $request->direction_id)->where('income_type_id', 1)->whereNull('user_id')->first(); $income = array('booking_id' => $newBooking->id, 'income_type_id' => '1', 'amount_eur' => $price->amount_eur); Income::create($income); //cashflow if ($request->payment_type_id == 3) { $receiver_id = 1; //receiver is driver $due_date = $newBooking->pickup_time; //on the day of travel } else { $receiver_id = 4; //receiver is us (admin) $pickup_time = new Carbon($newBooking->pickup_time); $due_date = $pickup_time->subHours(48); //48 hours before trip } $cashflow = array('booking_id' => $newBooking->id, 'payer_id' => 2, 'receiver_id' => $receiver_id, 'payment_type_id' => $request->payment_type_id, 'payment_status_id' => 1, 'amount_eur' => $price->amount_eur, 'due_date' => $due_date); Cashflow::create($cashflow); //log reservation creation $change = array('booking_id' => $newBooking->id, 'change_type_id' => '4', 'user_id' => 1, 'from' => null, 'to' => null); Change::create($change); //send email Mail::queue('emails.reservation', ['passenger' => $mainpassenger], function ($message) use($emailreceiver) { $message->from('*****@*****.**', 'Transfer Praha')->to($emailreceiver->email, null)->subject('Booking confirmation'); }); flash()->success('Your booking has been created!')->important(); return redirect('reservation/confirmation'); }
/** * Test for scopeOpenVoting and scopeCompleted */ public function testScopesOpenCompleted() { // create rappers $user1 = factory(App\Models\User::class)->create(); $user2 = factory(App\Models\User::class)->create(); $votingperiod = config('rap-battle.votingperiod', 24); // battles older than this date are closed: $timeoldest = new Carbon(); $timeoldest->subHours($votingperiod + 1); // create two battles $battle1 = new Battle(); $battle1->rapper1_id = $user1->id; $battle1->rapper2_id = $user2->id; $battle1->save(); $battle2 = new Battle(); $battle2->rapper1_id = $user1->id; $battle2->rapper2_id = $user2->id; $battle2->created_at = $timeoldest->toDateTimeString(); $battle2->save(); // test scopeOpenVoting // get battles from database $openBattles = Battle::openVoting()->get()->values()->keyBy('id'); $this->assertTrue($openBattles->has($battle1->id)); $this->assertFalse($openBattles->has($battle2->id)); // test scopeCompleted // get battles from database $completedBattles = Battle::completed()->get()->values()->keyBy('id'); $this->assertFalse($completedBattles->has($battle1->id)); $this->assertTrue($completedBattles->has($battle2->id)); }
/** * Test for getCompleted */ public function testGetCompleted() { $user1 = factory(App\Models\User::class)->create(); $user2 = factory(App\Models\User::class)->create(); $user3 = factory(App\Models\User::class)->create(); $user4 = factory(App\Models\User::class)->create(); $votingperiod = Config::get('rap-battle.votingperiod', 24); // battles older than this date are closed: $timeoldest = new Carbon(); $timeoldest->subHours($votingperiod + 1); // create two battles $battle1 = new Battle(); $battle1->rapper1_id = $user1->id; $battle1->rapper2_id = $user2->id; $battle1->video = "/path/to/file"; $battle1->save(); $battle2 = new Battle(); $battle2->rapper1_id = $user3->id; $battle2->rapper2_id = $user4->id; $battle2->video = "/path/to/file"; $battle2->created_at = $timeoldest->toDateTimeString(); $battle2->save(); $this->get('/battles/completed')->seeJson(['current_page' => 1, 'data' => [['battle_id' => (string) $battle2->id, 'rapper1' => ['user_id' => (string) $user3->id, 'username' => $user3->username, 'profile_picture' => $user3->picture], 'rapper2' => ['user_id' => (string) $user4->id, 'username' => $user4->username, 'profile_picture' => $user4->picture]]]]); }
public function GetPopularProfiles($limit) { $date = new Carbon(); $date->subHours(1); return Profile::where('is_active', true)->orderBy('created_at', 'DESC')->take($limit)->get(); }