diff --git a/app/Http/Controllers/Admin/PirepController.php b/app/Http/Controllers/Admin/PirepController.php index c8aa493b..f66ff979 100644 --- a/app/Http/Controllers/Admin/PirepController.php +++ b/app/Http/Controllers/Admin/PirepController.php @@ -6,19 +6,25 @@ use App\Http\Requests\CreatePirepRequest; use App\Http\Requests\UpdatePirepRequest; use App\Repositories\AircraftRepository; use App\Repositories\PirepRepository; +use App\Services\PIREPService; use Illuminate\Http\Request; use Flash; +use Log; use Prettus\Repository\Criteria\RequestCriteria; use Response; class PirepController extends BaseController { - private $pirepRepo, $aircraftRepo; + private $pirepRepo, $aircraftRepo, $pirepSvc; - public function __construct(PirepRepository $pirepRepo, AircraftRepository $aircraftRepo) - { + public function __construct( + AircraftRepository $aircraftRepo, + PirepRepository $pirepRepo, + PIREPService $pirepSvc + ) { $this->aircraftRepo = $aircraftRepo; $this->pirepRepo = $pirepRepo; + $this->pirepSvc = $pirepSvc; } public function aircraftList() @@ -43,7 +49,8 @@ class PirepController extends BaseController $criterea = new RequestCriteria($request); $this->pirepRepo->pushCriteria($criterea); - $pireps = $this->pirepRepo->orderBy('created_at', 'desc') + $pireps = $this->pirepRepo + ->orderBy('created_at', 'desc') ->paginate(); return view('admin.pireps.index', [ @@ -53,7 +60,6 @@ class PirepController extends BaseController /** * Show the form for creating a new Pirep. - * * @return Response */ public function create() @@ -77,7 +83,6 @@ class PirepController extends BaseController /** * Display the specified Pirep. - * * @param int $id * @return Response */ @@ -97,7 +102,6 @@ class PirepController extends BaseController /** * Show the form for editing the specified Pirep. - * * @param int $id * @return Response */ @@ -139,9 +143,7 @@ class PirepController extends BaseController /** * Remove the specified Pirep from storage. - * * @param int $id - * * @return Response */ public function destroy($id) @@ -158,4 +160,23 @@ class PirepController extends BaseController Flash::success('Pirep deleted successfully.'); return redirect(route('admin.pireps.index')); } + + /** + * Change or update the PIREP status + * @param Request $request + * @return \Illuminate\View\View + */ + public function status(Request $request) + { + Log::info('PIREP status update call', [$request->toArray()]); + + $pirep = $this->pirepRepo->findWithoutFail($request->id); + if($request->isMethod('post')) { + $new_status = (int) $request->new_status; + $pirep = $this->pirepSvc->changeStatus($pirep, $new_status); + } + + $pirep->refresh(); + return view('admin.pireps.pirep_card', ['pirep' => $pirep]); + } } diff --git a/app/Models/Rank.php b/app/Models/Rank.php index 689f5d2a..37e175a4 100644 --- a/app/Models/Rank.php +++ b/app/Models/Rank.php @@ -29,9 +29,9 @@ class Rank extends Model protected $casts = [ 'name' => 'string', 'hours' => 'integer', - 'auto_approve_acars' => 'boolean', - 'auto_approve_manual' => 'boolean', - 'auto_promote' => 'boolean', + 'auto_approve_acars' => 'integer', + 'auto_approve_manual' => 'integer', + 'auto_promote' => 'integer', ]; /** diff --git a/app/Models/User.php b/app/Models/User.php index c81b5bad..97dea264 100755 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -81,7 +81,7 @@ class User extends Authenticatable protected $casts = [ 'flights' => 'integer', - 'flight_hours' => 'integer', + 'flight_time' => 'integer', 'balance' => 'double', 'timezone' => 'integer', ]; diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 4a2905b4..1283cc60 100755 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -9,8 +9,6 @@ class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. - * - * @return void */ public function boot() { @@ -27,27 +25,9 @@ class AppServiceProvider extends ServiceProvider /** * Register any application services. - * - * @return void */ public function register() { - // bind all the app services... - $this->app->bind('App\Services\AircraftService', function($app) { - return new \App\Services\AircraftService(); - }); - - $this->app->bind('App\Services\AircraftFareService', function($app) { - return new \App\Services\AircraftFareService(); - }); - - $this->app->bind('App\Services\PilotService', function($app) { - return new \App\Services\PilotService(); - }); - - $this->app->bind('App\Services\PIREPService', function($app) { - return new \App\Services\PIREPService(); - }); } } diff --git a/app/Repositories/PirepRepository.php b/app/Repositories/PirepRepository.php index 88e4ee5a..0fa0f396 100644 --- a/app/Repositories/PirepRepository.php +++ b/app/Repositories/PirepRepository.php @@ -12,7 +12,9 @@ class PirepRepository extends BaseRepository implements CacheableInterface use CacheableRepository; protected $fieldSearchable = [ - 'user_id' + 'user_id', + 'flight_id', + 'status', ]; public function model() diff --git a/app/Services/PIREPService.php b/app/Services/PIREPService.php index 44d17109..d854e022 100644 --- a/app/Services/PIREPService.php +++ b/app/Services/PIREPService.php @@ -10,16 +10,24 @@ use App\Events\PirepFiled; use App\Events\PirepRejected; use App\Events\UserStateChanged; +use App\Repositories\PirepRepository; +use Log; + class PIREPService extends BaseService { - protected $pilotSvc; + protected $pilotSvc, $pirepRepo; /** - * return a PIREP model + * PIREPService constructor. + * @param PilotService $pilotSvc + * @param PirepRepository $pirepRepo */ - public function __construct() - { - $this->pilotSvc = app('App\Services\PilotService'); + public function __construct( + PilotService $pilotSvc, + PirepRepository $pirepRepo + ) { + $this->pilotSvc = $pilotSvc; + $this->pirepRepo = $pirepRepo; } /** @@ -30,15 +38,15 @@ class PIREPService extends BaseService * * @return Pirep */ - public function create(Pirep $pirep, array $field_values): Pirep { - - if($field_values == null) { + public function create(Pirep &$pirep, array $field_values): Pirep + { + if($field_values === null) { $field_values = []; } # Figure out what default state should be. Look at the default # behavior from the rank that the pilot is assigned to - if($pirep->source == config('enums.sources.ACARS')) { + if($pirep->source === config('enums.sources.ACARS')) { $default_status = $pirep->pilot->rank->auto_approve_acars; } else { $default_status = $pirep->pilot->rank->auto_approve_manual; @@ -56,24 +64,31 @@ class PIREPService extends BaseService $v->save(); } + Log::info('New PIREP filed', [$pirep]); + event(new PirepFiled($pirep)); - if ($default_status == config('enums.pirep_status.ACCEPTED')) { + if ($default_status === config('enums.pirep_status.ACCEPTED')) { $pirep = $this->accept($pirep); } # only update the pilot last state if they are accepted - if ($default_status == config('enums.pirep_status.ACCEPTED')) { + if ($default_status === config('enums.pirep_status.ACCEPTED')) { $this->setPilotState($pirep); } - # TODO: Emit filed event. Do financials through that - return $pirep; } + /** + * @param Pirep $pirep + * @param int $new_status + * @return Pirep + */ public function changeStatus(Pirep &$pirep, int $new_status): Pirep { + Log::info('PIREP ' . $pirep->id . ' status change from '.$pirep->status.' to ' . $new_status); + if ($pirep->status === $new_status) { return $pirep; } @@ -81,10 +96,10 @@ class PIREPService extends BaseService /** * Move from a PENDING status into either ACCEPTED or REJECTED */ - if ($pirep->status == config('enums.pirep_status.PENDING')) { - if ($new_status == config('enums.pirep_status.ACCEPTED')) { + if ($pirep->status === config('enums.pirep_status.PENDING')) { + if ($new_status === config('enums.pirep_status.ACCEPTED')) { return $this->accept($pirep); - } elseif ($new_status == config('enums.pirep_status.REJECTED')) { + } elseif ($new_status === config('enums.pirep_status.REJECTED')) { return $this->reject($pirep); } else { return $pirep; @@ -94,7 +109,7 @@ class PIREPService extends BaseService /* * Move from a ACCEPTED to REJECTED status */ - elseif ($pirep->status == config('enums.pirep_status.ACCEPTED')) { + elseif ($pirep->status === config('enums.pirep_status.ACCEPTED')) { $pirep = $this->reject($pirep); return $pirep; } @@ -102,7 +117,7 @@ class PIREPService extends BaseService /** * Move from REJECTED to ACCEPTED */ - elseif ($pirep->status == config('enums.pirep_status.REJECTED')) { + elseif ($pirep->status === config('enums.pirep_status.REJECTED')) { $pirep = $this->accept($pirep); return $pirep; } @@ -115,7 +130,7 @@ class PIREPService extends BaseService public function accept(Pirep &$pirep): Pirep { # moving from a REJECTED state to ACCEPTED, reconcile statuses - if ($pirep->status == config('enums.pirep_status.ACCEPTED')) { + if ($pirep->status === config('enums.pirep_status.ACCEPTED')) { return $pirep; } @@ -134,6 +149,8 @@ class PIREPService extends BaseService $this->setPilotState($pirep); + Log::info('PIREP '.$pirep->id.' status change to ACCEPTED'); + event(new PirepAccepted($pirep)); return $pirep; @@ -147,7 +164,7 @@ class PIREPService extends BaseService { # If this was previously ACCEPTED, then reconcile the flight hours # that have already been counted, etc - if ($pirep->status == config('enums.pirep_status.ACCEPTED')) { + if ($pirep->status === config('enums.pirep_status.ACCEPTED')) { $pilot = $pirep->pilot; $ft = $pirep->flight_time * -1; @@ -162,14 +179,21 @@ class PIREPService extends BaseService $pirep->save(); $pirep->refresh(); + Log::info('PIREP ' . $pirep->id . ' status change to REJECTED'); + event(new PirepRejected($pirep)); return $pirep; } - public function setPilotState($pirep) { + /** + * @param Pirep $pirep + */ + public function setPilotState(Pirep &$pirep) + { $pilot = $pirep->pilot; $pilot->refresh(); + $pilot->curr_airport_id = $pirep->arr_airport_id; $pilot->last_pirep_id = $pirep->id; $pilot->save(); diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index b63352b9..2ffa99d2 100755 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -13,7 +13,8 @@ class DatabaseSeeder extends Seeder { $env = App::environment(); $path = database_path('seeds/'.$env.'.yml'); - print "Seeding seeds/$env.yml"; + print("Seeding seeds/$env.yml\n"); + if(!file_exists($path)) { $path = database_path('seeds/prod.yml'); } diff --git a/database/seeds/dev.yml b/database/seeds/dev.yml index 739e9cc6..6bd48642 100644 --- a/database/seeds/dev.yml +++ b/database/seeds/dev.yml @@ -331,7 +331,7 @@ pireps: dpt_airport_id: KAUS arr_airport_id: KJFK flight_time: 21600 # 6 hours - status: -1 + status: 0 notes: just a pilot report - id: pirepid_2 user_id: 1 @@ -341,7 +341,17 @@ pireps: dpt_airport_id: KJFK arr_airport_id: KAUS flight_time: 21600 # 6 hours - status: -1 + status: 0 + notes: just a pilot report + - id: pirepid_3 + user_id: 1 + airline_id: 1 + flight_id: flightid_2 + aircraft_id: 1 + dpt_airport_id: KJFK + arr_airport_id: KAUS + flight_time: 21600 # 6 hours + status: 0 notes: just a pilot report pirep_fields: diff --git a/public/js/admin/admin.js b/public/js/admin/admin.js index edb3d576..568179fc 100644 --- a/public/js/admin/admin.js +++ b/public/js/admin/admin.js @@ -77,4 +77,4 @@ function __draw_base_map(opts) { attrib.addTo(map); return map; -} \ No newline at end of file +} diff --git a/resources/views/admin/app.blade.php b/resources/views/admin/app.blade.php index 5289b508..994d958f 100644 --- a/resources/views/admin/app.blade.php +++ b/resources/views/admin/app.blade.php @@ -123,12 +123,29 @@ + +@endsection diff --git a/resources/views/admin/pireps/table.blade.php b/resources/views/admin/pireps/table.blade.php index 4cec6e0f..68504f12 100644 --- a/resources/views/admin/pireps/table.blade.php +++ b/resources/views/admin/pireps/table.blade.php @@ -1,116 +1 @@ -@foreach($pireps as $pirep) -
| Pilot | -Flight | -Aircraft | -Flight Time | -Level | -- - - @foreach($pireps as $pirep) - | |||
|---|---|---|---|---|---|---|---|---|
| {!! $pirep->user->name !!} | -- @if($pirep->flight) - - {!! $pirep->flight->airline->code !!}{!! $pirep->flight->flight_number !!} - - @else - - - @endif - | -{!! $pirep->aircraft->registration !!} ({!! $pirep->aircraft->name !!}) | -{!! Utils::secondsToTime($pirep->flight_time) !!} | -{!! $pirep->level !!} | -- {!! Form::open(['route' => ['admin.pireps.destroy', $pirep->id], 'method' => 'delete']) !!} - - {!! Form::close() !!} - | -|||
| - | Notes: {!! $pirep->notes !!} | -|||||||