diff --git a/app/Http/Controllers/Frontend/PirepController.php b/app/Http/Controllers/Frontend/PirepController.php index 827f9255..a575f5ce 100644 --- a/app/Http/Controllers/Frontend/PirepController.php +++ b/app/Http/Controllers/Frontend/PirepController.php @@ -139,6 +139,10 @@ class PirepController extends Controller protected function saveFares(Pirep $pirep, Request $request) { $fares = []; + if (!$pirep->aircraft) { + return; + } + foreach ($pirep->aircraft->subfleet->fares as $fare) { $field_name = 'fare_'.$fare->id; if (!$request->filled($field_name)) { @@ -186,7 +190,6 @@ class PirepController extends Controller $pirep = $this->pirepRepo->find($id); if (empty($pirep)) { Flash::error('Pirep not found'); - return redirect(route('frontend.pirep.index')); } @@ -244,40 +247,45 @@ class PirepController extends Controller $pirep = new Pirep($request->post()); $pirep->user_id = Auth::user()->id; - # Are they allowed at this airport? - if (setting('pilots.only_flights_from_current') - && Auth::user()->curr_airport_id !== $pirep->dpt_airport_id) { - return $this->flashError( - 'You are currently not at the departure airport!', - 'frontend.pireps.create' - ); - } + $attrs = $request->all(); + $attrs['submit'] = strtolower($attrs['submit']); - # Can they fly this aircraft? - if (setting('pireps.restrict_aircraft_to_rank', false) - && !$this->userSvc->aircraftAllowed(Auth::user(), $pirep->aircraft_id)) { - return $this->flashError( - 'You are not allowed to fly this aircraft!', - 'frontend.pireps.create' - ); - } + if($attrs['submit'] === 'submit') { + # Are they allowed at this airport? + if (setting('pilots.only_flights_from_current') + && Auth::user()->curr_airport_id !== $pirep->dpt_airport_id) { + return $this->flashError( + 'You are currently not at the departure airport!', + 'frontend.pireps.create' + ); + } - # is the aircraft in the right place? - if (setting('pireps.only_aircraft_at_dpt_airport') - && $pirep->aircraft_id !== $pirep->dpt_airport_id) { - return $this->flashError( - 'This aircraft is not positioned at the departure airport!', - 'frontend.pireps.create' - ); - } + # Can they fly this aircraft? + if (setting('pireps.restrict_aircraft_to_rank', false) + && !$this->userSvc->aircraftAllowed(Auth::user(), $pirep->aircraft_id)) { + return $this->flashError( + 'You are not allowed to fly this aircraft!', + 'frontend.pireps.create' + ); + } - # Make sure this isn't a duplicate - $dupe_pirep = $this->pirepSvc->findDuplicate($pirep); - if ($dupe_pirep !== false) { - return $this->flashError( - 'This PIREP has already been filed.', - 'frontend.pireps.create' - ); + # is the aircraft in the right place? + if (setting('pireps.only_aircraft_at_dpt_airport') + && $pirep->aircraft_id !== $pirep->dpt_airport_id) { + return $this->flashError( + 'This aircraft is not positioned at the departure airport!', + 'frontend.pireps.create' + ); + } + + # Make sure this isn't a duplicate + $dupe_pirep = $this->pirepSvc->findDuplicate($pirep); + if ($dupe_pirep !== false) { + return $this->flashError( + 'This PIREP has already been filed.', + 'frontend.pireps.create' + ); + } } // Any special fields @@ -296,7 +304,7 @@ class PirepController extends Controller // Depending on the button they selected, set an initial state // Can be saved as a draft or just submitted if ($attrs['submit'] === 'save') { - $pirep->status = PirepState::DRAFT; + $pirep->state = PirepState::DRAFT; $pirep->save(); Flash::success('PIREP saved successfully.'); } else if ($attrs['submit'] === 'submit') { @@ -317,7 +325,6 @@ class PirepController extends Controller $pirep = $this->pirepRepo->findWithoutFail($id); if (empty($pirep)) { Flash::error('Pirep not found'); - return redirect(route('frontend.pireps.index')); } @@ -363,6 +370,7 @@ class PirepController extends Controller $orig_route = $pirep->route; $attrs = $request->all(); + $attrs['submit'] = strtolower($attrs['submit']); # Fix the time $attrs['flight_time'] = Time::init( @@ -384,7 +392,7 @@ class PirepController extends Controller } else if($attrs['submit'] === 'submit') { $this->pirepSvc->submit($pirep); Flash::success('PIREP submitted!'); - } else if($attrs['submit'] === 'cancel') { + } else if($attrs['submit'] === 'delete' || $attrs['submit'] === 'cancel') { $this->pirepRepo->update([ 'state' => PirepState::CANCELLED, 'status' => PirepStatus::CANCELLED, diff --git a/app/Http/Requests/CreatePirepRequest.php b/app/Http/Requests/CreatePirepRequest.php index eb3b3424..415ccd3e 100644 --- a/app/Http/Requests/CreatePirepRequest.php +++ b/app/Http/Requests/CreatePirepRequest.php @@ -26,6 +26,17 @@ class CreatePirepRequest extends FormRequest */ public function rules() { + // Don't run validations if it's just being saved + $action = strtolower(request('submit', 'submit')); + if($action === 'save') { + return [ + 'airline_id' => 'required|exists:airlines,id', + 'flight_number' => 'required', + 'dpt_airport_id' => 'required', + 'arr_airport_id' => 'required', + ]; + } + $field_rules = Pirep::$rules; $field_rules['hours'] = 'nullable|integer'; diff --git a/app/Http/Requests/UpdatePirepRequest.php b/app/Http/Requests/UpdatePirepRequest.php index 35f8cf17..0b6b4b89 100644 --- a/app/Http/Requests/UpdatePirepRequest.php +++ b/app/Http/Requests/UpdatePirepRequest.php @@ -3,7 +3,9 @@ namespace App\Http\Requests; use App\Models\Pirep; +use App\Repositories\PirepFieldRepository; use Illuminate\Foundation\Http\FormRequest; +use Log; class UpdatePirepRequest extends FormRequest { @@ -24,6 +26,31 @@ class UpdatePirepRequest extends FormRequest */ public function rules() { - return Pirep::$rules; + // Don't run validations if it's just being saved + $action = strtolower(request('submit', 'submit')); + if ($action === 'save' || $action === 'cancel' || $action === 'delete') { + return [ + 'airline_id' => 'required|exists:airlines,id', + 'flight_number' => 'required', + 'dpt_airport_id' => 'required', + 'arr_airport_id' => 'required', + ]; + } + + $field_rules = Pirep::$rules; + + $field_rules['hours'] = 'nullable|integer'; + $field_rules['minutes'] = 'nullable|integer'; + + # Add the validation rules for the custom fields + $pirepFieldRepo = app(PirepFieldRepository::class); + + $custom_fields = $pirepFieldRepo->all(); + foreach ($custom_fields as $field) { + Log::info('field:', $field->toArray()); + $field_rules[$field->slug] = $field->required ? 'required' : 'nullable'; + } + + return $field_rules; } } diff --git a/app/Models/Pirep.php b/app/Models/Pirep.php index 0b5d469f..57245aa5 100644 --- a/app/Models/Pirep.php +++ b/app/Models/Pirep.php @@ -40,10 +40,11 @@ use PhpUnitsOfMeasure\Exception\NonStringUnitName; * @property User user * @property Flight|null flight * @property Collection fields + * @property int status + * @property bool state * @property Carbon submitted_at * @property Carbon created_at * @property Carbon updated_at - * @property bool state * @property Acars position * @property Acars[] acars * @package App\Models diff --git a/app/Widgets/LatestPireps.php b/app/Widgets/LatestPireps.php index 4a40ce23..2d322db0 100644 --- a/app/Widgets/LatestPireps.php +++ b/app/Widgets/LatestPireps.php @@ -3,6 +3,7 @@ namespace App\Widgets; use App\Interfaces\Widget; +use App\Models\Enums\PirepState; use App\Repositories\PirepRepository; /** @@ -22,9 +23,17 @@ class LatestPireps extends Widget { $pirepRepo = app(PirepRepository::class); + $pireps = $pirepRepo + ->whereNotInOrder('state', [ + PirepState::CANCELLED, + PirepState::DRAFT, + PirepState::IN_PROGRESS + ], 'created_at', 'desc') + ->recent($this->config['count']); + return view('widgets.latest_pireps', [ 'config' => $this->config, - 'pireps' => $pirepRepo->recent($this->config['count']), + 'pireps' => $pireps, ]); } } diff --git a/resources/lang/en/common.php b/resources/lang/en/common.php index b6ec12b4..009c2b4c 100644 --- a/resources/lang/en/common.php +++ b/resources/lang/en/common.php @@ -21,6 +21,7 @@ return [ 'download' => 'Download|Downloads', 'from' => 'from', 'to' => 'to', + 'state' => 'State', 'status' => 'Status', 'departure' => 'Departure', 'arrival' => 'Arrival', diff --git a/resources/lang/it/common.php b/resources/lang/it/common.php index a8f384aa..7b3d67ec 100644 --- a/resources/lang/it/common.php +++ b/resources/lang/it/common.php @@ -21,6 +21,7 @@ return [ 'download' => 'Download|Downloads', 'from' => 'da', 'to' => 'a', + 'state' => 'Stato', 'status' => 'Stato', 'departure' => 'Partenza', 'arrival' => 'Arrivo', diff --git a/resources/views/admin/pireps/pirep_card.blade.php b/resources/views/admin/pireps/pirep_card.blade.php index 90d7ad09..e0c9707c 100644 --- a/resources/views/admin/pireps/pirep_card.blade.php +++ b/resources/views/admin/pireps/pirep_card.blade.php @@ -38,11 +38,13 @@ {{ Utils::minutesToTimeString($pirep->flight_time) }} -
Aircraft  - {{ $pirep->aircraft->registration }} - ({{ $pirep->aircraft->name }}) - -
+ @if($pirep->aircraft) +
Aircraft  + {{ $pirep->aircraft->registration }} + ({{ $pirep->aircraft->name }}) + +
+ @endif @if(filled($pirep->level))
Flight Level  diff --git a/resources/views/layouts/default/nav.blade.php b/resources/views/layouts/default/nav.blade.php index 91680238..114c4ecc 100644 --- a/resources/views/layouts/default/nav.blade.php +++ b/resources/views/layouts/default/nav.blade.php @@ -95,7 +95,7 @@ @endif diff --git a/resources/views/layouts/default/pireps/show.blade.php b/resources/views/layouts/default/pireps/show.blade.php index 12575a61..2c076e55 100644 --- a/resources/views/layouts/default/pireps/show.blade.php +++ b/resources/views/layouts/default/pireps/show.blade.php @@ -6,16 +6,7 @@
-

-

{{$pirep->airline->code}}{{ $pirep->ident }}

-

- @if($pirep->state === PirepState::IN_PROGRESS) - - @else - @lang('pireps.arrived') {{$pirep->created_at->diffForHumans()}} - @endif -

-

+

{{$pirep->airline->code}}{{ $pirep->ident }}

@@ -101,6 +92,16 @@
@endif + + + + + + - + diff --git a/resources/views/layouts/default/widgets/latest_pireps.blade.php b/resources/views/layouts/default/widgets/latest_pireps.blade.php index 3d6fe132..4f51c371 100644 --- a/resources/views/layouts/default/widgets/latest_pireps.blade.php +++ b/resources/views/layouts/default/widgets/latest_pireps.blade.php @@ -7,7 +7,9 @@ @endforeach
@lang('common.state') +
+ {{ PirepState::label($pirep->state) }} +
+
@lang('common.status') diff --git a/resources/views/layouts/default/pireps/table.blade.php b/resources/views/layouts/default/pireps/table.blade.php index 7e0b1734..2762c3ca 100644 --- a/resources/views/layouts/default/pireps/table.blade.php +++ b/resources/views/layouts/default/pireps/table.blade.php @@ -33,7 +33,13 @@ 'id' => $pirep->arr_airport->icao ])}}">{{$pirep->arr_airport->icao}}) {{ $pirep->aircraft->name }} + @if($pirep->aircraft) + {{ $pirep->aircraft->name }} + @else + - + @endif + {{ (new \App\Support\Units\Time($pirep->flight_time)) }} {{ $p->dpt_airport_id }}- {{ $p->arr_airport_id }}  - {{ $p->aircraft->name }} + @if($p->aircraft) + {{ $p->aircraft->name }} + @endif