Fix PIREP submission and field slug problems on PIREP edit

This commit is contained in:
Nabeel Shahzad
2018-05-30 14:00:20 -05:00
parent b7a6cb4fbc
commit a083f9c671
13 changed files with 102 additions and 47 deletions

View File

@@ -73,6 +73,7 @@ class CreateFlightTables extends Migration
$table->bigIncrements('id');
$table->string('flight_id', \App\Interfaces\Model::ID_MAX_LENGTH);
$table->string('name', 50);
$table->string('slug', 50)->nullable();
$table->text('value');
$table->timestamps();

View File

@@ -394,18 +394,20 @@ flights:
flight_fields:
- name: Departure Gate
slug: departure_gate
slug: departure-gate
- name: Arrival Gate
slug: arrival_gate
slug: arrival-gate
flight_field_values:
- id: 1
flight_id: flightid_1
name: cost index
slug: cost-index
value: 80
- id: 2
flight_id: flightid_2
name: cost index
slug: cost-index
value: 100
flight_subfleet:
@@ -539,24 +541,24 @@ pirep_fares:
pirep_fields:
- id: 1
name: departure gate
slug: departure_gate
slug: departure-gate
required: 1
- id: 2
name: arrival gate
slug: arrival_gate
slug: arrival-gate
required: 0
pirep_field_values:
- id: 1
pirep_id: pirepid_1
name: arrival gate
slug: arrival_gate
slug: arrival-gate
value: 10
source: manual
- id: 2
pirep_id: pirepid_1
name: departure gate
slug: departure_gate
slug: departure-gate
value: B32
source: manual

View File

@@ -121,6 +121,7 @@ class PirepController extends Controller
$custom_fields[] = [
'name' => $field->name,
'slug' => $field->slug,
'value' => $request->input($field->slug),
'source' => PirepSource::MANUAL
];
@@ -304,7 +305,10 @@ 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->state = PirepState::DRAFT;
if(!$pirep->read_only) {
$pirep->state = PirepState::DRAFT;
}
$pirep->save();
Flash::success('PIREP saved successfully.');
} else if ($attrs['submit'] === 'submit') {
@@ -334,6 +338,10 @@ class PirepController extends Controller
# set the custom fields
foreach ($pirep->fields as $field) {
if($field->slug == null) {
$field->slug = str_slug($field->name);
}
$pirep->{$field->slug} = $field->value;
}

View File

@@ -18,11 +18,21 @@ class FlightFieldValue extends Model
protected $fillable = [
'flight_id',
'name',
'slug',
'value',
];
public static $rules = [];
/**
* @param $name
*/
public function setNameAttribute($name): void
{
$this->attributes['name'] = $name;
$this->attributes['slug'] = str_slug($name);
}
/**
* Relationships
*/

View File

@@ -1,28 +0,0 @@
<?php
namespace App\Models\Observers;
use App\Models\PirepField;
/**
* Class PirepFieldObserver
* @package App\Models\Observers
*/
class PirepFieldObserver
{
/**
* @param PirepField $model
*/
public function creating(PirepField $model): void
{
$model->slug = str_slug($model->name);
}
/**
* @param PirepField $model
*/
public function updating(PirepField $model): void
{
$model->slug = str_slug($model->name);
}
}

View File

@@ -0,0 +1,35 @@
<?php
namespace App\Models\Observers;
/**
* Create a slug from a name
* @package App\Models\Observers
*/
class Sluggable
{
/**
* @param $model
*/
public function creating($model): void
{
$model->slug = str_slug($model->name);
}
/**
* @param $model
*/
public function updating($model): void
{
$model->slug = str_slug($model->name);
}
/**
* @param $name
*/
public function setNameAttribute($name): void
{
$this->attributes['name'] = $name;
$this->attributes['slug'] = str_slug($name);
}
}

View File

@@ -45,6 +45,7 @@ use PhpUnitsOfMeasure\Exception\NonStringUnitName;
* @property Carbon submitted_at
* @property Carbon created_at
* @property Carbon updated_at
* @property bool read_only
* @property Acars position
* @property Acars[] acars
* @package App\Models
@@ -127,9 +128,9 @@ class Pirep extends Model
* If a PIREP is in these states, then it can't be changed.
*/
public static $read_only_states = [
PirepState::PENDING,
PirepState::ACCEPTED,
PirepState::REJECTED,
//PirepState::PENDING,
PirepState::CANCELLED,
];

View File

@@ -15,6 +15,7 @@ class PirepFieldValues extends Model
protected $fillable = [
'pirep_id',
'name',
'slug',
'value',
'source',
];
@@ -23,6 +24,15 @@ class PirepFieldValues extends Model
'name' => 'required',
];
/**
* @param $name
*/
public function setNameAttribute($name): void
{
$this->attributes['name'] = $name;
$this->attributes['slug'] = str_slug($name);
}
/**
* Foreign Keys
*/

View File

@@ -4,21 +4,23 @@ namespace App\Providers;
use App\Models\Aircraft;
use App\Models\Airport;
use App\Models\FlightField;
use App\Models\FlightFieldValue;
use App\Models\Journal;
use App\Models\JournalTransaction;
use App\Models\Observers\AircraftObserver;
use App\Models\Observers\AirportObserver;
use App\Models\Observers\JournalObserver;
use App\Models\Observers\JournalTransactionObserver;
use App\Models\Observers\PirepFieldObserver;
use App\Models\Observers\Sluggable;
use App\Models\Observers\SettingObserver;
use App\Models\Observers\SubfleetObserver;
use App\Models\PirepField;
use App\Models\PirepFieldValues;
use App\Models\Setting;
use App\Models\Subfleet;
use App\Repositories\SettingRepository;
use App\Services\ModuleService;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
use View;
@@ -42,10 +44,15 @@ class AppServiceProvider extends ServiceProvider
Airport::observe(AirportObserver::class);
Journal::observe(JournalObserver::class);
JournalTransaction::observe(JournalTransactionObserver::class);
PirepField::observe(PirepFieldObserver::class);
FlightField::observe(Sluggable::class);
FlightFieldValue::observe(Sluggable::class);
PirepField::observe(Sluggable::class);
PirepFieldValues::observe(Sluggable::class);
Setting::observe(SettingObserver::class);
Subfleet::observe(SubfleetObserver::class);
}
/**
@@ -55,7 +62,6 @@ class AppServiceProvider extends ServiceProvider
{
# Only dev environment stuff
if ($this->app->environment() === 'dev') {
# Only load the IDE helper if it's included. This lets use distribute the
# package without any dev dependencies
if (class_exists(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class)) {

View File

@@ -13,6 +13,7 @@ use App\Models\Bid;
use App\Models\Enums\AcarsType;
use App\Models\Enums\PirepSource;
use App\Models\Enums\PirepState;
use App\Models\Enums\PirepStatus;
use App\Models\Enums\UserState;
use App\Models\Navdata;
use App\Models\Pirep;
@@ -211,6 +212,10 @@ class PirepService extends Service
}
}
$pirep->state = $default_state;
$pirep->status = PirepStatus::ARRIVED;
$pirep->save();
Log::info('New PIREP filed', [$pirep]);
event(new PirepFiled($pirep));

View File

@@ -20,7 +20,7 @@ return [
'count' => 'Count',
'flighttime' => 'Flight Time',
'flightlevel' => 'Flight Level',
'fieldsreadonly' => 'Once a PIREP has been accepted/rejected, certain fields go into read-only mode.',
'fieldsreadonly' => 'Once a PIREP has been submitted, certain fields go into read-only mode.',
'flightinformations' => 'Flight Information',
'flightident' => 'Flight Number/Code/Leg',
'codeoptional' => 'Code (optional)',

View File

@@ -15,7 +15,7 @@ return [
'count' => 'Numero',
'flighttime' => 'Tempo di volo',
'flightlevel' => 'Livello di Volo',
'fieldsreadonly' => 'Quando un PIREP viene accettato/rifiutato, alcuni cami entrano in modalità di sola lettura.',
'fieldsreadonly' => 'Quando un PIREP viene sottoporre, alcuni cami entrano in modalità di sola lettura.',
'flightinformations' => 'Informazioni di Volo',
'flightident' => 'Numero di Volo/Codice/Leg',
'codeoptional' => 'Codice (facoltativo)',

View File

@@ -240,7 +240,11 @@ flight reports that have been filed. You've been warned!
<div class="row">
<div class="col">
<div class="input-group input-group-sm form-group">
{{ Form::textarea('route', null, ['class' => 'form-control', 'placeholder' => __('flights.route')]) }}
{{ Form::textarea('route', null, [
'class' => 'form-control',
'placeholder' => __('flights.route'),
'readonly' => (!empty($pirep) && $pirep->read_only),
]) }}
<p class="text-danger">{{ $errors->first('route') }}</p>
</div>
</div>
@@ -287,7 +291,8 @@ flight reports that have been filed. You've been warned!
<td>
<div class="input-group input-group-sm form-group">
{{ Form::text($field->slug, null, [
'class' => 'form-control'
'class' => 'form-control',
'readonly' => (!empty($pirep) && $pirep->read_only),
]) }}
</div>
<p class="text-danger">{{ $errors->first($field->slug) }}</p>
@@ -318,14 +323,14 @@ flight reports that have been filed. You've been warned!
}}
@endif
@if(!isset($pirep) || (filled($pirep) && !$pirep->read_only))
{{ Form::button(__('pireps.savepirep'), [
{{ Form::button(__('pireps.savepirep'), [
'name' => 'submit',
'value' => 'Save',
'class' => 'btn btn-info',
'type' => 'submit'])
}}
@if(!isset($pirep) || (filled($pirep) && !$pirep->read_only))
{{ Form::button(__('pireps.submitpirep'), [
'name' => 'submit',
'value' => 'Submit',