diff --git a/app/Database/migrations/2017_06_28_195426_create_pirep_tables.php b/app/Database/migrations/2017_06_28_195426_create_pirep_tables.php index 66ad7b02..f32cba12 100644 --- a/app/Database/migrations/2017_06_28_195426_create_pirep_tables.php +++ b/app/Database/migrations/2017_06_28_195426_create_pirep_tables.php @@ -84,7 +84,7 @@ class CreatePirepTables extends Migration $table->string('name', 50); $table->string('slug', 50)->nullable(); $table->string('value')->nullable(); - $table->string('source')->nullable(); + $table->unsignedTinyInteger('source'); $table->timestamps(); $table->index('pirep_id'); diff --git a/app/Database/seeds/sample.yml b/app/Database/seeds/sample.yml index f07fe30e..ac4fe439 100644 --- a/app/Database/seeds/sample.yml +++ b/app/Database/seeds/sample.yml @@ -393,10 +393,10 @@ flights: updated_at: NOW flight_fields: - - name: Departure Gate - slug: departure-gate - - name: Arrival Gate - slug: arrival-gate + - name: Departure Terminal + slug: departure-terminal + - name: Arrival Terminal + slug: arrival-terminal flight_field_values: - id: 1 @@ -540,27 +540,33 @@ pirep_fares: pirep_fields: - id: 1 - name: departure gate - slug: departure-gate + name: departure terminal + slug: departure-terminal required: 1 - id: 2 - name: arrival gate - slug: arrival-gate + name: arrival terminal + slug: arrival-terminal required: 0 pirep_field_values: - id: 1 pirep_id: pirepid_1 - name: arrival gate - slug: arrival-gate + name: arrival terminal + slug: arrival-terminal value: 10 - source: manual + source: 0 - id: 2 pirep_id: pirepid_1 - name: departure gate - slug: departure-gate - value: B32 - source: manual + name: departure terminal + slug: departure-terminal + value: 4 + source: 0 + - id: 3 + pirep_id: pirepid_1 + name: Landing Rate + slug: landing-rate + value: -225.3 + source: 1 pirep_comments: - id: 1 diff --git a/app/Http/Controllers/Admin/PirepController.php b/app/Http/Controllers/Admin/PirepController.php index 7601d682..3f5188db 100644 --- a/app/Http/Controllers/Admin/PirepController.php +++ b/app/Http/Controllers/Admin/PirepController.php @@ -298,7 +298,8 @@ class PirepController extends Controller # set the custom fields foreach ($pirep->fields as $field) { - $pirep->{$field->slug} = $field->value; + $field_name = 'field_'.$field->slug; + $pirep->{$field_name} = $field->value; } # set the fares diff --git a/app/Http/Controllers/Api/PirepController.php b/app/Http/Controllers/Api/PirepController.php index 06765e42..8a46dc30 100644 --- a/app/Http/Controllers/Api/PirepController.php +++ b/app/Http/Controllers/Api/PirepController.php @@ -20,6 +20,7 @@ use App\Http\Resources\PirepFieldCollection; use App\Interfaces\Controller; use App\Models\Acars; use App\Models\Enums\AcarsType; +use App\Models\Enums\PirepFieldSource; use App\Models\Enums\PirepSource; use App\Models\Enums\PirepState; use App\Models\Enums\PirepStatus; @@ -122,7 +123,7 @@ class PirepController extends Controller $pirep_fields[] = [ 'name' => $field_name, 'value' => $field_value, - 'source' => $pirep->source, + 'source' => PirepFieldSource::ACARS, ]; } diff --git a/app/Http/Controllers/Frontend/PirepController.php b/app/Http/Controllers/Frontend/PirepController.php index c58b7729..e900ccb1 100644 --- a/app/Http/Controllers/Frontend/PirepController.php +++ b/app/Http/Controllers/Frontend/PirepController.php @@ -332,6 +332,9 @@ class PirepController extends Controller return redirect(route('frontend.pireps.index')); } + # Eager load the subfleet and fares under it + $pirep->aircraft->load('subfleet.fares'); + $time = new Time($pirep->flight_time); $pirep->hours = $time->hours; $pirep->minutes = $time->minutes; @@ -342,7 +345,8 @@ class PirepController extends Controller $field->slug = str_slug($field->name); } - $pirep->{$field->slug} = $field->value; + $field_name = 'field_'.$field->slug; + $pirep->{$field_name} = $field->value; } # set the fares diff --git a/app/Models/Enums/PirepFieldSource.php b/app/Models/Enums/PirepFieldSource.php new file mode 100644 index 00000000..cc7784f8 --- /dev/null +++ b/app/Models/Enums/PirepFieldSource.php @@ -0,0 +1,15 @@ +distance['nmi'] / $upper_bound) * 100, 0); } + /** + * Get the pirep_fields and then the pirep_field_values and + * merge them together. If a field value doesn't exist then add in a fake one + */ + public function getFieldsAttribute() + { + $custom_fields = PirepField::all(); + $field_values = PirepFieldValue::where('pirep_id', $this->id)->get(); + + # Merge the field values into $fields + foreach($custom_fields as $field) { + $has_value = $field_values->firstWhere('slug', $field->slug); + if(!$has_value) { + $field_values->push(new PirepFieldValue([ + 'pirep_id' => $this->id, + 'name' => $field->name, + 'slug' => $field->slug, + 'value' => '', + 'source' => PirepFieldSource::MANUAL + ])); + } + } + + return $field_values->sortBy('source'); + } + /** * Look up the flight, based on the PIREP flight info * @return Flight|null @@ -454,9 +481,9 @@ class Pirep extends Model return $this->hasMany(PirepFare::class, 'pirep_id'); } - public function fields() + public function field_values() { - return $this->hasMany(PirepFieldValues::class, 'pirep_id'); + return $this->hasMany(PirepFieldValue::class, 'pirep_id'); } public function pilot() diff --git a/app/Models/PirepFieldValues.php b/app/Models/PirepFieldValue.php similarity index 63% rename from app/Models/PirepFieldValues.php rename to app/Models/PirepFieldValue.php index 584944d8..02552058 100644 --- a/app/Models/PirepFieldValues.php +++ b/app/Models/PirepFieldValue.php @@ -3,12 +3,13 @@ namespace App\Models; use App\Interfaces\Model; +use App\Models\Enums\PirepFieldSource; /** - * Class PirepFieldValues + * Class PirepFieldValue * @package App\Models */ -class PirepFieldValues extends Model +class PirepFieldValue extends Model { public $table = 'pirep_field_values'; @@ -24,6 +25,19 @@ class PirepFieldValues extends Model 'name' => 'required', ]; + protected $casts = [ + 'source' => 'integer', + ]; + + /** + * If it was filled in from ACARS, then it's read only + * @return bool + */ + public function getReadOnlyAttribute() + { + return $this->source === PirepFieldSource::ACARS; + } + /** * @param $name */ diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index ce371553..7bbe4a22 100755 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -16,7 +16,7 @@ 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\PirepFieldValue; use App\Models\Setting; use App\Models\Subfleet; use App\Repositories\SettingRepository; @@ -49,7 +49,7 @@ class AppServiceProvider extends ServiceProvider FlightFieldValue::observe(Sluggable::class); PirepField::observe(Sluggable::class); - PirepFieldValues::observe(Sluggable::class); + PirepFieldValue::observe(Sluggable::class); Setting::observe(SettingObserver::class); Subfleet::observe(SubfleetObserver::class); diff --git a/app/Services/PirepService.php b/app/Services/PirepService.php index 6b7e68fa..cbe2780e 100644 --- a/app/Services/PirepService.php +++ b/app/Services/PirepService.php @@ -17,7 +17,7 @@ use App\Models\Enums\PirepStatus; use App\Models\Enums\UserState; use App\Models\Navdata; use App\Models\Pirep; -use App\Models\PirepFieldValues; +use App\Models\PirepFieldValue; use App\Models\User; use App\Repositories\AcarsRepository; use App\Repositories\FlightRepository; @@ -152,7 +152,7 @@ class PirepService extends Service * Create a new PIREP with some given fields * * @param Pirep $pirep - * @param array [PirepFieldValues] $field_values + * @param array PirepFieldValue[] $field_values * * @return Pirep */ @@ -244,7 +244,7 @@ class PirepService extends Service public function updateCustomFields($pirep_id, array $field_values) { foreach ($field_values as $fv) { - PirepFieldValues::updateOrCreate( + PirepFieldValue::updateOrCreate( ['pirep_id' => $pirep_id, 'name' => $fv['name'] ], diff --git a/public/assets/admin/css/admin.css b/public/assets/admin/css/admin.css index e7ce00bd..dba05404 100644 --- a/public/assets/admin/css/admin.css +++ b/public/assets/admin/css/admin.css @@ -3,6 +3,10 @@ * */ +.form-container { + font-weight: normal; +} + .select2-container { margin-top: 2px; } diff --git a/resources/views/admin/pireps/field_values.blade.php b/resources/views/admin/pireps/field_values.blade.php index 17cdab55..06144b54 100644 --- a/resources/views/admin/pireps/field_values.blade.php +++ b/resources/views/admin/pireps/field_values.blade.php @@ -15,9 +15,13 @@
{{ $field->value }}
+ @endif{{ $errors->first($field->slug) }}
{{ $errors->first($field->slug) }}
+{{ $errors->first($field->slug) }}
-