airlineRepo = $airlineRepo; $this->airportRepo = $airportRepo; $this->flightRepo = $flightRepo; $this->geoSvc = $geoSvc; $this->moduleSvc = $moduleSvc; $this->subfleetRepo = $subfleetRepo; $this->userRepo = $userRepo; } /** * @param Request $request * * @throws \Prettus\Repository\Exceptions\RepositoryException * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function index(Request $request) { return $this->search($request); } /** * Make a search request using the Repository search * * @param Request $request * * @throws \Prettus\Repository\Exceptions\RepositoryException * * @return mixed */ public function search(Request $request) { $where = [ 'active' => true, 'visible' => true, ]; /** @var \App\Models\User $user */ $user = Auth::user(); $user->loadMissing('current_airport'); if (setting('pilots.restrict_to_company')) { $where['airline_id'] = $user->airline_id; } // default restrictions on the flights shown. Handle search differently if (setting('pilots.only_flights_from_current')) { $where['dpt_airport_id'] = $user->curr_airport_id; } $this->flightRepo->resetCriteria(); try { $this->flightRepo->searchCriteria($request); $this->flightRepo->pushCriteria(new WhereCriteria($request, $where, [ 'airline' => ['active' => true], ])); $this->flightRepo->pushCriteria(new RequestCriteria($request)); } catch (RepositoryException $e) { Log::emergency($e); } // Get only used Flight Types for the search form // And filter according to settings $usedtypes = Flight::select('flight_type') ->where($where) ->groupby('flight_type') ->orderby('flight_type') ->get(); // Build collection with type codes and labels $flight_types = collect('', ''); foreach ($usedtypes as $ftype) { $flight_types->put($ftype->flight_type, FlightType::label($ftype->flight_type)); } $flights = $this->flightRepo->searchCriteria($request) ->with([ 'airline', 'alt_airport', 'arr_airport', 'dpt_airport', 'subfleets.airline', 'simbrief' => function ($query) use ($user) { $query->where('user_id', $user->id); }, ]) ->orderBy('flight_number') ->orderBy('route_leg') ->paginate(); $saved_flights = []; $bids = Bid::where('user_id', Auth::id())->get(); foreach ($bids as $bid) { if (!$bid->flight) { $bid->delete(); continue; } $saved_flights[$bid->flight_id] = $bid->id; } return view('flights.index', [ 'user' => $user, 'airlines' => $this->airlineRepo->selectBoxList(true), 'airports' => $this->airportRepo->selectBoxList(true), 'flights' => $flights, 'saved' => $saved_flights, 'subfleets' => $this->subfleetRepo->selectBoxList(true), 'flight_number' => $request->input('flight_number'), 'flight_types' => $flight_types, 'flight_type' => $request->input('flight_type'), 'arr_icao' => $request->input('arr_icao'), 'dep_icao' => $request->input('dep_icao'), 'subfleet_id' => $request->input('subfleet_id'), 'simbrief' => !empty(setting('simbrief.api_key')), 'simbrief_bids' => setting('simbrief.only_bids'), 'acars_plugin' => $this->moduleSvc->isModuleActive('VMSAcars'), ]); } /** * Find the user's bids and display them * * @param Request $request * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function bids(Request $request) { $user = $this->userRepo ->with(['bids', 'bids.flight']) ->find(Auth::user()->id); $flights = collect(); $saved_flights = []; foreach ($user->bids as $bid) { // Remove any invalid bids (flight doesn't exist or something) if (!$bid->flight) { $bid->delete(); continue; } $flights->add($bid->flight); $saved_flights[$bid->flight_id] = $bid->id; } return view('flights.bids', [ 'user' => $user, 'airlines' => $this->airlineRepo->selectBoxList(true), 'airports' => $this->airportRepo->selectBoxList(true), 'flights' => $flights, 'saved' => $saved_flights, 'subfleets' => $this->subfleetRepo->selectBoxList(true), 'simbrief' => !empty(setting('simbrief.api_key')), 'simbrief_bids' => setting('simbrief.only_bids'), 'acars_plugin' => $this->moduleSvc->isModuleActive('VMSAcars'), ]); } /** * Show the flight information page * * @param $id * * @return mixed */ public function show($id) { $user_id = Auth::id(); $with_flight = [ 'airline', 'alt_airport', 'arr_airport', 'dpt_airport', 'subfleets.airline', 'simbrief' => function ($query) use ($user_id) { $query->where('user_id', $user_id); }, ]; $flight = $this->flightRepo->with($with_flight)->find($id); if (empty($flight)) { Flash::error('Flight not found!'); return redirect(route('frontend.dashboard.index')); } $map_features = $this->geoSvc->flightGeoJson($flight); // See if the user has a bid for this flight $bid = Bid::where(['user_id' => $user_id, 'flight_id' => $flight->id])->first(); return view('flights.show', [ 'flight' => $flight, 'map_features' => $map_features, 'bid' => $bid, 'acars_plugin' => $this->moduleSvc->isModuleActive('VMSAcars'), ]); } }