2017-08-15 12:36:49 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
|
2018-02-23 05:15:00 +08:00
|
|
|
use App\Exceptions\AircraftPermissionDenied;
|
|
|
|
use App\Exceptions\PirepCancelled;
|
2018-01-29 01:12:13 +08:00
|
|
|
use App\Http\Requests\Acars\CommentRequest;
|
2018-02-21 12:33:09 +08:00
|
|
|
use App\Http\Requests\Acars\EventRequest;
|
2018-01-29 01:12:13 +08:00
|
|
|
use App\Http\Requests\Acars\FileRequest;
|
|
|
|
use App\Http\Requests\Acars\LogRequest;
|
|
|
|
use App\Http\Requests\Acars\PositionRequest;
|
|
|
|
use App\Http\Requests\Acars\PrefileRequest;
|
|
|
|
use App\Http\Requests\Acars\RouteRequest;
|
2018-02-21 12:33:09 +08:00
|
|
|
use App\Http\Requests\Acars\UpdateRequest;
|
|
|
|
use App\Http\Resources\AcarsRoute as AcarsRouteResource;
|
2018-03-06 03:07:10 +08:00
|
|
|
use App\Http\Resources\JournalTransaction as JournalTransactionResource;
|
2018-02-21 12:33:09 +08:00
|
|
|
use App\Http\Resources\Pirep as PirepResource;
|
|
|
|
use App\Http\Resources\PirepComment as PirepCommentResource;
|
2017-12-26 05:19:34 +08:00
|
|
|
use App\Models\Acars;
|
2018-01-02 00:30:31 +08:00
|
|
|
use App\Models\Enums\AcarsType;
|
2018-02-21 12:33:09 +08:00
|
|
|
use App\Models\Enums\PirepSource;
|
2017-12-26 05:19:34 +08:00
|
|
|
use App\Models\Enums\PirepState;
|
|
|
|
use App\Models\Enums\PirepStatus;
|
2018-02-21 12:33:09 +08:00
|
|
|
use App\Models\Pirep;
|
|
|
|
use App\Models\PirepComment;
|
2017-12-26 05:19:34 +08:00
|
|
|
use App\Repositories\AcarsRepository;
|
2018-03-06 03:07:10 +08:00
|
|
|
use App\Repositories\JournalRepository;
|
2017-12-13 01:49:35 +08:00
|
|
|
use App\Repositories\PirepRepository;
|
2018-03-06 12:49:42 +08:00
|
|
|
use App\Services\Finance\PirepFinanceService;
|
2018-02-21 12:33:09 +08:00
|
|
|
use App\Services\GeoService;
|
2018-03-07 07:36:06 +08:00
|
|
|
use App\Services\PirepService;
|
2018-02-21 12:33:09 +08:00
|
|
|
use App\Services\UserService;
|
|
|
|
use Auth;
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
use Log;
|
2017-08-15 12:36:49 +08:00
|
|
|
|
2018-01-05 09:33:23 +08:00
|
|
|
class PirepController extends RestController
|
2017-08-15 12:36:49 +08:00
|
|
|
{
|
2018-03-06 03:07:10 +08:00
|
|
|
private $acarsRepo,
|
|
|
|
$financeSvc,
|
|
|
|
$geoSvc,
|
|
|
|
$journalRepo,
|
|
|
|
$pirepRepo,
|
|
|
|
$pirepSvc,
|
|
|
|
$userSvc;
|
2018-01-05 09:33:23 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* PirepController constructor.
|
|
|
|
* @param AcarsRepository $acarsRepo
|
2018-03-06 12:49:42 +08:00
|
|
|
* @param PirepFinanceService $financeSvc
|
2018-01-05 09:33:23 +08:00
|
|
|
* @param GeoService $geoSvc
|
2018-03-06 03:07:10 +08:00
|
|
|
* @param JournalRepository $journalRepo
|
2018-01-05 09:33:23 +08:00
|
|
|
* @param PirepRepository $pirepRepo
|
2018-03-07 07:36:06 +08:00
|
|
|
* @param PirepService $pirepSvc
|
2018-02-21 12:33:09 +08:00
|
|
|
* @param UserService $userSvc
|
2018-01-05 09:33:23 +08:00
|
|
|
*/
|
2017-12-26 05:19:34 +08:00
|
|
|
public function __construct(
|
|
|
|
AcarsRepository $acarsRepo,
|
2018-03-06 12:49:42 +08:00
|
|
|
PirepFinanceService $financeSvc,
|
2017-12-28 10:52:37 +08:00
|
|
|
GeoService $geoSvc,
|
2018-03-06 03:07:10 +08:00
|
|
|
JournalRepository $journalRepo,
|
2017-12-27 04:54:28 +08:00
|
|
|
PirepRepository $pirepRepo,
|
2018-03-07 07:36:06 +08:00
|
|
|
PirepService $pirepSvc,
|
2018-02-21 02:59:49 +08:00
|
|
|
UserService $userSvc
|
2017-12-26 05:19:34 +08:00
|
|
|
) {
|
|
|
|
$this->acarsRepo = $acarsRepo;
|
2018-03-06 03:07:10 +08:00
|
|
|
$this->financeSvc = $financeSvc;
|
2017-12-28 10:52:37 +08:00
|
|
|
$this->geoSvc = $geoSvc;
|
2018-03-06 03:07:10 +08:00
|
|
|
$this->journalRepo = $journalRepo;
|
2017-12-13 01:49:35 +08:00
|
|
|
$this->pirepRepo = $pirepRepo;
|
2017-12-27 04:54:28 +08:00
|
|
|
$this->pirepSvc = $pirepSvc;
|
2018-02-21 02:59:49 +08:00
|
|
|
$this->userSvc = $userSvc;
|
2017-12-13 01:49:35 +08:00
|
|
|
}
|
|
|
|
|
2018-01-29 01:12:13 +08:00
|
|
|
/**
|
|
|
|
* Check if a PIREP is cancelled
|
|
|
|
* @param $pirep
|
2018-02-23 05:15:00 +08:00
|
|
|
* @throws \App\Exceptions\PirepCancelled
|
2018-01-29 01:12:13 +08:00
|
|
|
*/
|
|
|
|
protected function checkCancelled(Pirep $pirep)
|
|
|
|
{
|
|
|
|
if (!$pirep->allowedUpdates()) {
|
2018-02-23 05:15:00 +08:00
|
|
|
throw new PirepCancelled();
|
2018-01-29 01:12:13 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $id
|
|
|
|
* @return PirepResource
|
|
|
|
*/
|
2017-08-15 12:36:49 +08:00
|
|
|
public function get($id)
|
|
|
|
{
|
2017-12-13 01:49:35 +08:00
|
|
|
return new PirepResource($this->pirepRepo->find($id));
|
2017-08-15 12:36:49 +08:00
|
|
|
}
|
2017-12-26 05:19:34 +08:00
|
|
|
|
2018-02-07 03:46:23 +08:00
|
|
|
/**
|
|
|
|
* @param $pirep
|
|
|
|
* @param Request $request
|
|
|
|
*/
|
|
|
|
protected function updateFields($pirep, Request $request)
|
|
|
|
{
|
|
|
|
if (!$request->filled('fields')) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$pirep_fields = [];
|
|
|
|
foreach ($request->input('fields') as $field_name => $field_value) {
|
|
|
|
$pirep_fields[] = [
|
|
|
|
'name' => $field_name,
|
|
|
|
'value' => $field_value,
|
|
|
|
'source' => $pirep->source,
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->pirepSvc->updateCustomFields($pirep->id, $pirep_fields);
|
|
|
|
}
|
|
|
|
|
2017-12-26 05:19:34 +08:00
|
|
|
/**
|
|
|
|
* Create a new PIREP and place it in a "inprogress" and "prefile" state
|
|
|
|
* Once ACARS updates are being processed, then it can go into an 'ENROUTE'
|
|
|
|
* status, and whatever other statuses may be defined
|
|
|
|
*
|
2018-01-29 01:12:13 +08:00
|
|
|
* @param PrefileRequest $request
|
|
|
|
* @return PirepResource
|
2018-02-23 05:15:00 +08:00
|
|
|
* @throws \App\Exceptions\PirepCancelled
|
|
|
|
* @throws \App\Exceptions\AircraftPermissionDenied
|
2017-12-26 05:19:34 +08:00
|
|
|
*/
|
2018-01-29 01:12:13 +08:00
|
|
|
public function prefile(PrefileRequest $request)
|
2017-12-26 05:19:34 +08:00
|
|
|
{
|
2018-01-29 01:12:13 +08:00
|
|
|
Log::info('PIREP Prefile, user '.Auth::id(), $request->post());
|
|
|
|
|
2018-02-21 02:59:49 +08:00
|
|
|
$user = Auth::user();
|
|
|
|
|
2018-01-29 01:12:13 +08:00
|
|
|
$attrs = $request->post();
|
2018-02-21 02:59:49 +08:00
|
|
|
$attrs['user_id'] = $user->id;
|
2018-02-11 03:41:24 +08:00
|
|
|
$attrs['source'] = PirepSource::ACARS;
|
2018-01-29 01:12:13 +08:00
|
|
|
$attrs['state'] = PirepState::IN_PROGRESS;
|
|
|
|
$attrs['status'] = PirepStatus::PREFILE;
|
2017-12-27 04:54:28 +08:00
|
|
|
|
2018-01-03 03:17:22 +08:00
|
|
|
$pirep = new Pirep($attrs);
|
|
|
|
|
2018-02-21 02:59:49 +08:00
|
|
|
# See if this user is allowed to fly this aircraft
|
|
|
|
if(setting('pireps.restrict_aircraft_to_rank', false)) {
|
|
|
|
$can_use_ac = $this->userSvc->aircraftAllowed($user, $pirep->aircraft_id);
|
|
|
|
if (!$can_use_ac) {
|
2018-02-23 05:15:00 +08:00
|
|
|
throw new AircraftPermissionDenied();
|
2018-02-21 02:59:49 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-03 03:17:22 +08:00
|
|
|
# Find if there's a duplicate, if so, let's work on that
|
|
|
|
$dupe_pirep = $this->pirepSvc->findDuplicate($pirep);
|
|
|
|
if($dupe_pirep !== false) {
|
|
|
|
$pirep = $dupe_pirep;
|
2018-02-23 05:15:00 +08:00
|
|
|
$this->checkCancelled($pirep);
|
2017-12-26 05:19:34 +08:00
|
|
|
}
|
|
|
|
|
2018-01-03 03:17:22 +08:00
|
|
|
$pirep->save();
|
|
|
|
|
2017-12-26 05:19:34 +08:00
|
|
|
Log::info('PIREP PREFILED');
|
|
|
|
Log::info($pirep->id);
|
|
|
|
|
2018-02-07 03:46:23 +08:00
|
|
|
$this->updateFields($pirep, $request);
|
|
|
|
|
2017-12-27 04:54:28 +08:00
|
|
|
return new PirepResource($pirep);
|
|
|
|
}
|
|
|
|
|
2018-01-31 01:36:22 +08:00
|
|
|
/**
|
|
|
|
* Create a new PIREP and place it in a "inprogress" and "prefile" state
|
|
|
|
* Once ACARS updates are being processed, then it can go into an 'ENROUTE'
|
|
|
|
* status, and whatever other statuses may be defined
|
|
|
|
*
|
|
|
|
* @param $id
|
|
|
|
* @param UpdateRequest $request
|
|
|
|
* @return PirepResource
|
2018-02-23 05:15:00 +08:00
|
|
|
* @throws \App\Exceptions\PirepCancelled
|
|
|
|
* @throws \App\Exceptions\AircraftPermissionDenied
|
2018-01-31 01:36:22 +08:00
|
|
|
* @throws \Prettus\Validator\Exceptions\ValidatorException
|
|
|
|
*/
|
|
|
|
public function update($id, UpdateRequest $request)
|
|
|
|
{
|
|
|
|
Log::info('PIREP Update, user ' . Auth::id(), $request->post());
|
|
|
|
|
2018-02-21 04:14:20 +08:00
|
|
|
$user = Auth::user();
|
2018-01-31 01:36:22 +08:00
|
|
|
$pirep = $this->pirepRepo->find($id);
|
|
|
|
$this->checkCancelled($pirep);
|
|
|
|
|
|
|
|
$attrs = $request->post();
|
|
|
|
$attrs['user_id'] = Auth::id();
|
|
|
|
|
2018-02-21 04:14:20 +08:00
|
|
|
# If aircraft is being changed, see if this user is allowed to fly this aircraft
|
|
|
|
if (array_key_exists('aircraft_id', $attrs)
|
|
|
|
&& setting('pireps.restrict_aircraft_to_rank', false)
|
|
|
|
) {
|
|
|
|
$can_use_ac = $this->userSvc->aircraftAllowed($user, $pirep->aircraft_id);
|
|
|
|
if (!$can_use_ac) {
|
2018-02-23 05:15:00 +08:00
|
|
|
throw new AircraftPermissionDenied();
|
2018-02-21 04:14:20 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-31 01:36:22 +08:00
|
|
|
$pirep = $this->pirepRepo->update($attrs, $id);
|
2018-02-07 03:46:23 +08:00
|
|
|
$this->updateFields($pirep, $request);
|
2018-01-31 01:36:22 +08:00
|
|
|
|
|
|
|
return new PirepResource($pirep);
|
|
|
|
}
|
|
|
|
|
2017-12-27 04:54:28 +08:00
|
|
|
/**
|
|
|
|
* File the PIREP
|
|
|
|
* @param $id
|
2018-01-29 01:12:13 +08:00
|
|
|
* @param FileRequest $request
|
2017-12-27 04:54:28 +08:00
|
|
|
* @return PirepResource
|
2018-02-23 05:15:00 +08:00
|
|
|
* @throws \App\Exceptions\PirepCancelled
|
|
|
|
* @throws \App\Exceptions\AircraftPermissionDenied
|
2018-01-04 00:25:55 +08:00
|
|
|
* @throws \Illuminate\Database\Eloquent\ModelNotFoundException
|
2018-02-11 06:10:19 +08:00
|
|
|
* @throws \Exception
|
2017-12-27 04:54:28 +08:00
|
|
|
*/
|
2018-01-29 01:12:13 +08:00
|
|
|
public function file($id, FileRequest $request)
|
2017-12-27 04:54:28 +08:00
|
|
|
{
|
2018-01-29 01:12:13 +08:00
|
|
|
Log::info('PIREP file, user ' . Auth::id(), $request->post());
|
2018-01-02 06:01:01 +08:00
|
|
|
|
2018-02-21 04:14:20 +08:00
|
|
|
$user = Auth::user();
|
|
|
|
|
2018-01-29 01:12:13 +08:00
|
|
|
# Check if the status is cancelled...
|
2018-01-04 00:25:55 +08:00
|
|
|
$pirep = $this->pirepRepo->find($id);
|
2018-01-29 01:12:13 +08:00
|
|
|
$this->checkCancelled($pirep);
|
2018-01-04 00:25:55 +08:00
|
|
|
|
2018-01-29 01:12:13 +08:00
|
|
|
$attrs = $request->post();
|
2018-02-21 04:14:20 +08:00
|
|
|
|
|
|
|
# If aircraft is being changed, see if this user is allowed to fly this aircraft
|
|
|
|
if (array_key_exists('aircraft_id', $attrs)
|
|
|
|
&& setting('pireps.restrict_aircraft_to_rank', false)
|
|
|
|
) {
|
|
|
|
$can_use_ac = $this->userSvc->aircraftAllowed($user, $pirep->aircraft_id);
|
|
|
|
if (!$can_use_ac) {
|
2018-02-23 05:15:00 +08:00
|
|
|
throw new AircraftPermissionDenied();
|
2018-02-21 04:14:20 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-29 01:12:13 +08:00
|
|
|
$attrs['state'] = PirepState::PENDING;
|
|
|
|
$attrs['status'] = PirepStatus::ARRIVED;
|
2017-12-27 04:54:28 +08:00
|
|
|
|
|
|
|
try {
|
|
|
|
$pirep = $this->pirepRepo->update($attrs, $id);
|
2018-02-07 03:46:23 +08:00
|
|
|
$pirep = $this->pirepSvc->create($pirep);
|
|
|
|
$this->updateFields($pirep, $request);
|
2017-12-27 04:54:28 +08:00
|
|
|
} catch (\Exception $e) {
|
|
|
|
Log::error($e);
|
|
|
|
}
|
|
|
|
|
2018-02-11 06:10:19 +08:00
|
|
|
# See if there there is any route data posted
|
|
|
|
# If there isn't, then just write the route data from the
|
|
|
|
# route that's been posted from the PIREP
|
|
|
|
$w = ['pirep_id' => $pirep->id, 'type' => AcarsType::ROUTE];
|
|
|
|
$count = Acars::where($w)->count(['id']);
|
|
|
|
if($count === 0) {
|
|
|
|
$this->pirepSvc->saveRoute($pirep);
|
|
|
|
}
|
|
|
|
|
2017-12-26 05:19:34 +08:00
|
|
|
return new PirepResource($pirep);
|
|
|
|
}
|
|
|
|
|
2018-01-04 00:25:55 +08:00
|
|
|
/**
|
|
|
|
* Cancel the PIREP
|
|
|
|
* @param $id
|
|
|
|
* @param Request $request
|
|
|
|
* @return PirepResource
|
2018-01-29 01:12:13 +08:00
|
|
|
* @throws \Prettus\Validator\Exceptions\ValidatorException
|
2018-01-04 00:25:55 +08:00
|
|
|
*/
|
|
|
|
public function cancel($id, Request $request)
|
|
|
|
{
|
2018-01-29 01:12:13 +08:00
|
|
|
Log::info('PIREP Cancel, user ' . Auth::id(), $request->post());
|
2018-01-04 00:25:55 +08:00
|
|
|
|
2018-01-29 01:12:13 +08:00
|
|
|
$pirep = $this->pirepRepo->update([
|
2018-01-04 00:25:55 +08:00
|
|
|
'state' => PirepState::CANCELLED,
|
2018-01-29 01:12:13 +08:00
|
|
|
], $id);
|
2018-01-04 00:25:55 +08:00
|
|
|
|
|
|
|
return new PirepResource($pirep);
|
|
|
|
}
|
|
|
|
|
2017-12-26 05:19:34 +08:00
|
|
|
/**
|
2017-12-29 04:35:28 +08:00
|
|
|
* Return the GeoJSON for the ACARS line
|
2017-12-26 05:19:34 +08:00
|
|
|
* @param $id
|
2017-12-29 04:35:28 +08:00
|
|
|
* @param Request $request
|
|
|
|
* @return \Illuminate\Contracts\Routing\ResponseFactory
|
2017-12-26 05:19:34 +08:00
|
|
|
*/
|
2018-01-05 09:33:23 +08:00
|
|
|
public function acars_geojson($id, Request $request)
|
2017-12-26 05:19:34 +08:00
|
|
|
{
|
2017-12-26 08:22:46 +08:00
|
|
|
$pirep = $this->pirepRepo->find($id);
|
2017-12-29 04:35:28 +08:00
|
|
|
$geodata = $this->geoSvc->getFeatureFromAcars($pirep);
|
2017-12-26 08:22:46 +08:00
|
|
|
|
2017-12-29 04:35:28 +08:00
|
|
|
return response(\json_encode($geodata), 200, [
|
|
|
|
'Content-Type' => 'application/json',
|
|
|
|
]);
|
2017-12-26 05:19:34 +08:00
|
|
|
}
|
|
|
|
|
2018-01-05 09:33:23 +08:00
|
|
|
/**
|
2018-02-11 07:34:46 +08:00
|
|
|
* Return the routes for the ACARS line
|
2018-01-05 09:33:23 +08:00
|
|
|
* @param $id
|
|
|
|
* @param Request $request
|
|
|
|
* @return AcarsRouteResource
|
|
|
|
*/
|
|
|
|
public function acars_get($id, Request $request)
|
|
|
|
{
|
2018-02-11 07:34:46 +08:00
|
|
|
$this->pirepRepo->find($id);
|
2018-01-05 09:33:23 +08:00
|
|
|
|
|
|
|
return new AcarsRouteResource(Acars::where([
|
|
|
|
'pirep_id' => $id,
|
|
|
|
'type' => AcarsType::FLIGHT_PATH
|
|
|
|
])->orderBy('created_at', 'asc')->get());
|
|
|
|
}
|
|
|
|
|
2017-12-26 05:19:34 +08:00
|
|
|
/**
|
|
|
|
* Post ACARS updates for a PIREP
|
|
|
|
* @param $id
|
2018-01-29 01:12:13 +08:00
|
|
|
* @param PositionRequest $request
|
2018-01-24 01:46:26 +08:00
|
|
|
* @return \Illuminate\Http\JsonResponse
|
2018-02-23 05:15:00 +08:00
|
|
|
* @throws \App\Exceptions\PirepCancelled
|
2018-01-04 00:25:55 +08:00
|
|
|
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
2017-12-26 05:19:34 +08:00
|
|
|
*/
|
2018-01-29 01:12:13 +08:00
|
|
|
public function acars_store($id, PositionRequest $request)
|
2017-12-26 05:19:34 +08:00
|
|
|
{
|
2018-01-04 00:25:55 +08:00
|
|
|
# Check if the status is cancelled...
|
2018-01-29 01:12:13 +08:00
|
|
|
$pirep = $this->pirepRepo->find($id);
|
|
|
|
$this->checkCancelled($pirep);
|
2018-01-04 00:25:55 +08:00
|
|
|
|
2018-01-25 03:38:06 +08:00
|
|
|
Log::info(
|
|
|
|
'Posting ACARS update (user: '.Auth::user()->pilot_id.', pirep id :'.$id.'): ',
|
|
|
|
$request->post()
|
|
|
|
);
|
2017-12-26 05:19:34 +08:00
|
|
|
|
2018-01-05 10:08:22 +08:00
|
|
|
$count = 0;
|
2018-01-29 01:12:13 +08:00
|
|
|
$positions = $request->post('positions');
|
2018-01-05 09:33:23 +08:00
|
|
|
foreach($positions as $position)
|
|
|
|
{
|
2018-01-29 01:12:13 +08:00
|
|
|
$position['pirep_id'] = $id;
|
|
|
|
$position['type'] = AcarsType::FLIGHT_PATH;
|
|
|
|
|
|
|
|
$update = Acars::create($position);
|
|
|
|
$update->save();
|
|
|
|
|
|
|
|
++$count;
|
2018-01-05 09:33:23 +08:00
|
|
|
}
|
2017-12-26 05:19:34 +08:00
|
|
|
|
|
|
|
# Change the PIREP status
|
|
|
|
$pirep->status = PirepStatus::ENROUTE;
|
|
|
|
$pirep->save();
|
|
|
|
|
2018-01-05 10:08:22 +08:00
|
|
|
return $this->message($count . ' positions added', $count);
|
2017-12-26 05:19:34 +08:00
|
|
|
}
|
2018-01-04 12:16:18 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Post ACARS LOG update for a PIREP. These updates won't show up on the map
|
|
|
|
* But rather in a log file.
|
|
|
|
* @param $id
|
2018-01-29 01:12:13 +08:00
|
|
|
* @param LogRequest $request
|
2018-01-05 10:08:22 +08:00
|
|
|
* @return \Illuminate\Http\JsonResponse
|
2018-02-23 05:15:00 +08:00
|
|
|
* @throws \App\Exceptions\PirepCancelled
|
2018-01-04 12:16:18 +08:00
|
|
|
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
|
|
|
*/
|
2018-01-31 02:06:46 +08:00
|
|
|
public function acars_logs($id, LogRequest $request)
|
2018-01-04 12:16:18 +08:00
|
|
|
{
|
|
|
|
# Check if the status is cancelled...
|
2018-01-29 01:12:13 +08:00
|
|
|
$pirep = $this->pirepRepo->find($id);
|
|
|
|
$this->checkCancelled($pirep);
|
2018-01-05 10:08:22 +08:00
|
|
|
|
2018-01-29 01:12:13 +08:00
|
|
|
Log::info('Posting ACARS log, PIREP: '.$id, $request->post());
|
2018-01-24 01:46:26 +08:00
|
|
|
|
2018-01-05 10:08:22 +08:00
|
|
|
$count = 0;
|
2018-01-29 01:12:13 +08:00
|
|
|
$logs = $request->post('logs');
|
2018-01-05 10:08:22 +08:00
|
|
|
foreach($logs as $log) {
|
|
|
|
|
2018-01-29 01:12:13 +08:00
|
|
|
$log['pirep_id'] = $id;
|
|
|
|
$log['type'] = AcarsType::LOG;
|
|
|
|
|
2018-01-31 02:06:46 +08:00
|
|
|
$acars = Acars::create($log);
|
|
|
|
$acars->save();
|
|
|
|
++$count;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->message($count . ' logs added', $count);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Post ACARS LOG update for a PIREP. These updates won't show up on the map
|
|
|
|
* But rather in a log file.
|
|
|
|
* @param $id
|
|
|
|
* @param EventRequest $request
|
|
|
|
* @return \Illuminate\Http\JsonResponse
|
2018-02-23 05:15:00 +08:00
|
|
|
* @throws \App\Exceptions\PirepCancelled
|
2018-01-31 02:06:46 +08:00
|
|
|
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
|
|
|
*/
|
|
|
|
public function acars_events($id, EventRequest $request)
|
|
|
|
{
|
|
|
|
# Check if the status is cancelled...
|
|
|
|
$pirep = $this->pirepRepo->find($id);
|
|
|
|
$this->checkCancelled($pirep);
|
|
|
|
|
|
|
|
Log::info('Posting ACARS event, PIREP: ' . $id, $request->post());
|
|
|
|
|
|
|
|
$count = 0;
|
|
|
|
$logs = $request->post('events');
|
|
|
|
foreach ($logs as $log) {
|
|
|
|
|
|
|
|
$log['pirep_id'] = $id;
|
|
|
|
$log['type'] = AcarsType::LOG;
|
|
|
|
$log['log'] = $log['event'];
|
2018-01-29 02:02:41 +08:00
|
|
|
|
2018-01-29 01:12:13 +08:00
|
|
|
$acars = Acars::create($log);
|
2018-01-05 10:08:22 +08:00
|
|
|
$acars->save();
|
|
|
|
++$count;
|
|
|
|
}
|
2018-01-04 12:16:18 +08:00
|
|
|
|
2018-01-05 10:08:22 +08:00
|
|
|
return $this->message($count . ' logs added', $count);
|
2018-01-05 09:33:23 +08:00
|
|
|
}
|
|
|
|
|
2018-01-24 11:40:34 +08:00
|
|
|
/**
|
|
|
|
* Add a new comment
|
|
|
|
* @param $id
|
|
|
|
* @param Request $request
|
|
|
|
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
|
|
|
*/
|
|
|
|
public function comments_get($id, Request $request)
|
|
|
|
{
|
|
|
|
$pirep = $this->pirepRepo->find($id);
|
|
|
|
return PirepCommentResource::collection($pirep->comments);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add a new comment
|
|
|
|
* @param $id
|
2018-01-29 01:12:13 +08:00
|
|
|
* @param CommentRequest $request
|
2018-01-24 11:40:34 +08:00
|
|
|
* @return PirepCommentResource
|
2018-02-23 05:15:00 +08:00
|
|
|
* @throws \App\Exceptions\PirepCancelled
|
2018-01-24 11:40:34 +08:00
|
|
|
*/
|
2018-01-29 01:12:13 +08:00
|
|
|
public function comments_post($id, CommentRequest $request)
|
2018-01-24 11:40:34 +08:00
|
|
|
{
|
|
|
|
$pirep = $this->pirepRepo->find($id);
|
2018-01-29 01:12:13 +08:00
|
|
|
$this->checkCancelled($pirep);
|
2018-01-24 11:40:34 +08:00
|
|
|
|
2018-01-29 01:12:13 +08:00
|
|
|
Log::info('Posting comment, PIREP: '.$id, $request->post());
|
2018-01-24 11:40:34 +08:00
|
|
|
|
|
|
|
# Add it
|
|
|
|
$comment = new PirepComment($request->post());
|
|
|
|
$comment->pirep_id = $id;
|
2018-01-29 01:12:13 +08:00
|
|
|
$comment->user_id = Auth::id();
|
2018-01-24 11:40:34 +08:00
|
|
|
$comment->save();
|
|
|
|
|
|
|
|
return new PirepCommentResource($comment);
|
|
|
|
}
|
|
|
|
|
2018-03-06 03:07:10 +08:00
|
|
|
/**
|
|
|
|
* @param $id
|
|
|
|
* @param Request $request
|
|
|
|
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
|
|
|
*/
|
|
|
|
public function finances_get($id, Request $request)
|
|
|
|
{
|
|
|
|
$pirep = $this->pirepRepo->find($id);
|
|
|
|
$transactions = $this->journalRepo->getAllForObject($pirep);
|
|
|
|
return JournalTransactionResource::collection($transactions);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $id
|
|
|
|
* @param Request $request
|
|
|
|
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
|
|
|
* @throws \UnexpectedValueException
|
|
|
|
* @throws \InvalidArgumentException
|
|
|
|
* @throws \Exception
|
|
|
|
* @throws \Prettus\Validator\Exceptions\ValidatorException
|
|
|
|
*/
|
|
|
|
public function finances_recalculate($id, Request $request)
|
|
|
|
{
|
|
|
|
$pirep = $this->pirepRepo->find($id);
|
|
|
|
$this->financeSvc->processFinancesForPirep($pirep);
|
|
|
|
|
|
|
|
$pirep->refresh();
|
|
|
|
$transactions = $this->journalRepo->getAllForObject($pirep);
|
|
|
|
return JournalTransactionResource::collection($transactions['transactions']);
|
|
|
|
}
|
|
|
|
|
2018-01-05 09:33:23 +08:00
|
|
|
/**
|
|
|
|
* @param $id
|
|
|
|
* @param Request $request
|
2018-02-21 12:33:09 +08:00
|
|
|
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
2018-01-05 09:33:23 +08:00
|
|
|
*/
|
|
|
|
public function route_get($id, Request $request)
|
|
|
|
{
|
|
|
|
$this->pirepRepo->find($id);
|
|
|
|
|
2018-02-11 07:48:51 +08:00
|
|
|
return AcarsRouteResource::collection(Acars::where([
|
2018-01-05 09:33:23 +08:00
|
|
|
'pirep_id' => $id,
|
|
|
|
'type' => AcarsType::ROUTE
|
|
|
|
])->orderBy('order', 'asc')->get());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Post the ROUTE for a PIREP, can be done from the ACARS log
|
|
|
|
* @param $id
|
2018-01-29 01:12:13 +08:00
|
|
|
* @param RouteRequest $request
|
2018-02-11 08:17:38 +08:00
|
|
|
* @return \Illuminate\Http\JsonResponse
|
2018-02-23 05:15:00 +08:00
|
|
|
* @throws \App\Exceptions\PirepCancelled
|
2018-01-05 09:33:23 +08:00
|
|
|
* @throws \Symfony\Component\HttpKernel\Exception\BadRequestHttpException
|
|
|
|
*/
|
2018-01-29 01:12:13 +08:00
|
|
|
public function route_post($id, RouteRequest $request)
|
2018-01-05 09:33:23 +08:00
|
|
|
{
|
|
|
|
# Check if the status is cancelled...
|
2018-01-29 01:12:13 +08:00
|
|
|
$pirep = $this->pirepRepo->find($id);
|
|
|
|
$this->checkCancelled($pirep);
|
2018-01-06 04:46:00 +08:00
|
|
|
|
2018-01-29 01:12:13 +08:00
|
|
|
Log::info('Posting ROUTE, PIREP: '.$id, $request->post());
|
2018-01-05 09:33:23 +08:00
|
|
|
|
2018-02-11 08:17:38 +08:00
|
|
|
$count = 0;
|
2018-01-06 04:46:00 +08:00
|
|
|
$route = $request->post('route', []);
|
2018-01-05 09:33:23 +08:00
|
|
|
foreach($route as $position) {
|
2018-01-29 01:12:13 +08:00
|
|
|
$position['pirep_id'] = $id;
|
|
|
|
$position['type'] = AcarsType::ROUTE;
|
|
|
|
|
|
|
|
$acars = Acars::create($position);
|
|
|
|
$acars->save();
|
2018-02-11 08:17:38 +08:00
|
|
|
|
|
|
|
++$count;
|
2018-01-05 09:33:23 +08:00
|
|
|
}
|
|
|
|
|
2018-02-11 08:17:38 +08:00
|
|
|
return $this->message($count . ' points added', $count);
|
2018-01-05 09:33:23 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $id
|
|
|
|
* @param Request $request
|
|
|
|
* @return \Illuminate\Http\JsonResponse
|
2018-02-11 07:48:51 +08:00
|
|
|
* @throws \Exception
|
2018-01-05 09:33:23 +08:00
|
|
|
*/
|
|
|
|
public function route_delete($id, Request $request)
|
|
|
|
{
|
|
|
|
$this->pirepRepo->find($id);
|
|
|
|
|
|
|
|
Acars::where([
|
|
|
|
'pirep_id' => $id,
|
|
|
|
'type' => AcarsType::ROUTE
|
|
|
|
])->delete();
|
2018-01-04 12:16:18 +08:00
|
|
|
|
2018-01-05 09:33:23 +08:00
|
|
|
return $this->message('Route deleted');
|
2018-01-04 12:16:18 +08:00
|
|
|
}
|
2017-08-15 12:36:49 +08:00
|
|
|
}
|