diff --git a/app/Http/Controllers/Admin/PirepController.php b/app/Http/Controllers/Admin/PirepController.php
new file mode 100644
index 00000000..6536fdca
--- /dev/null
+++ b/app/Http/Controllers/Admin/PirepController.php
@@ -0,0 +1,150 @@
+pirepRepository = $pirepRepo;
+ }
+
+ /**
+ * Display a listing of the Pirep.
+ *
+ * @param Request $request
+ * @return Response
+ */
+ public function index(Request $request)
+ {
+ $this->pirepRepository->pushCriteria(new RequestCriteria($request));
+ $pireps = $this->pirepRepository->all();
+
+ return view('admin.pireps.index', [
+ 'pireps' => $pireps
+ ]);
+ }
+
+ /**
+ * Show the form for creating a new Pirep.
+ *
+ * @return Response
+ */
+ public function create()
+ {
+ return view('admin.pireps.create');
+ }
+
+ /**
+ * Store a newly created Pirep in storage.
+ *
+ * @param CreatePirepRequest $request
+ *
+ * @return Response
+ */
+ public function store(CreatePirepRequest $request)
+ {
+ $input = $request->all();
+ $pirep = $this->pirepRepository->create($input);
+
+ Flash::success('Pirep saved successfully.');
+ return redirect(route('admin.pireps.index'));
+ }
+
+ /**
+ * Display the specified Pirep.
+ *
+ * @param int $id
+ *
+ * @return Response
+ */
+ public function show($id)
+ {
+ $pirep = $this->pirepRepository->findWithoutFail($id);
+
+ if (empty($pirep)) {
+ Flash::error('Pirep not found');
+ return redirect(route('admin.pireps.index'));
+ }
+
+ return view('admin.pireps.show', [
+ 'pirep' => $pirep,
+ ]);
+ }
+
+ /**
+ * Show the form for editing the specified Pirep.
+ *
+ * @param int $id
+ *
+ * @return Response
+ */
+ public function edit($id)
+ {
+ $pirep = $this->pirepRepository->findWithoutFail($id);
+
+ if (empty($pirep)) {
+ Flash::error('Pirep not found');
+ return redirect(route('admin.pireps.index'));
+ }
+
+ return view('admin.pireps.edit', [
+ 'pirep' => $pirep,
+ ]);
+ }
+
+ /**
+ * Update the specified Pirep in storage.
+ *
+ * @param int $id
+ * @param UpdatePirepRequest $request
+ *
+ * @return Response
+ */
+ public function update($id, UpdatePirepRequest $request)
+ {
+ $pirep = $this->pirepRepository->findWithoutFail($id);
+
+ if (empty($pirep)) {
+ Flash::error('Pirep not found');
+ return redirect(route('admin.pireps.index'));
+ }
+
+ $pirep = $this->pirepRepository->update($request->all(), $id);
+
+ Flash::success('Pirep updated successfully.');
+ return redirect(route('admin.pireps.index'));
+ }
+
+ /**
+ * Remove the specified Pirep from storage.
+ *
+ * @param int $id
+ *
+ * @return Response
+ */
+ public function destroy($id)
+ {
+ $pirep = $this->pirepRepository->findWithoutFail($id);
+
+ if (empty($pirep)) {
+ Flash::error('Pirep not found');
+ return redirect(route('admin.pireps.index'));
+ }
+
+ $this->pirepRepository->delete($id);
+
+ Flash::success('Pirep deleted successfully.');
+ return redirect(route('admin.pireps.index'));
+ }
+}
diff --git a/app/Http/Controllers/Admin/PirepFieldController.php b/app/Http/Controllers/Admin/PirepFieldController.php
new file mode 100644
index 00000000..3866e8a3
--- /dev/null
+++ b/app/Http/Controllers/Admin/PirepFieldController.php
@@ -0,0 +1,152 @@
+pirepFieldRepo = $pirepFieldRepo;
+ }
+
+ /**
+ * Display a listing of the PirepField.
+ *
+ * @param Request $request
+ * @return Response
+ */
+ public function index(Request $request)
+ {
+ $this->pirepFieldRepo->pushCriteria(new RequestCriteria($request));
+ $fields = $this->pirepFieldRepo->all();
+
+ return view('admin.pirepFields.index', [
+ 'fields' => $fields,
+ ]);
+ }
+
+ /**
+ * Show the form for creating a new PirepField.
+ *
+ * @return Response
+ */
+ public function create()
+ {
+ return view('admin.pirepFields.create');
+ }
+
+ /**
+ * Store a newly created PirepField in storage.
+ *
+ * @param CreatePirepFieldRequest $request
+ *
+ * @return Response
+ */
+ public function store(CreatePirepFieldRequest $request)
+ {
+ $input = $request->all();
+
+ $field = $this->pirepFieldRepo->create($input);
+
+ Flash::success('PirepField saved successfully.');
+ return redirect(route('admin.pirepFields.index'));
+ }
+
+ /**
+ * Display the specified PirepField.
+ *
+ * @param int $id
+ *
+ * @return Response
+ */
+ public function show($id)
+ {
+ $field = $this->pirepFieldRepo->findWithoutFail($id);
+
+ if (empty($field)) {
+ Flash::error('PirepField not found');
+ return redirect(route('admin.pirepFields.index'));
+ }
+
+ return view('admin.pirepFields.show', [
+ 'field' => $field,
+ ]);
+ }
+
+ /**
+ * Show the form for editing the specified PirepField.
+ *
+ * @param int $id
+ *
+ * @return Response
+ */
+ public function edit($id)
+ {
+ $field = $this->pirepFieldRepo->findWithoutFail($id);
+
+ if (empty($field)) {
+ Flash::error('PirepField not found');
+ return redirect(route('admin.pirepFields.index'));
+ }
+
+ return view('admin.pirepFields.edit', [
+ 'field' => $field,
+ ]);
+ }
+
+ /**
+ * Update the specified PirepField in storage.
+ *
+ * @param int $id
+ * @param UpdatePirepFieldRequest $request
+ *
+ * @return Response
+ */
+ public function update($id, UpdatePirepFieldRequest $request)
+ {
+ $field = $this->pirepFieldRepo->findWithoutFail($id);
+
+ if (empty($field)) {
+ Flash::error('PirepField not found');
+ return redirect(route('admin.pirepFields.index'));
+ }
+
+ $field = $this->pirepFieldRepo->update($request->all(), $id);
+
+ Flash::success('PirepField updated successfully.');
+ return redirect(route('admin.pirepFields.index'));
+ }
+
+ /**
+ * Remove the specified PirepField from storage.
+ *
+ * @param int $id
+ *
+ * @return Response
+ */
+ public function destroy($id)
+ {
+ $field = $this->pirepFieldRepo->findWithoutFail($id);
+
+ if (empty($field)) {
+ Flash::error('PirepField not found');
+ return redirect(route('admin.pirepFields.index'));
+ }
+
+ $this->pirepFieldRepo->delete($id);
+
+ Flash::success('PirepField deleted successfully.');
+ return redirect(route('admin.pirepFields.index'));
+ }
+}
diff --git a/app/Http/Requests/CreatePirepFieldRequest.php b/app/Http/Requests/CreatePirepFieldRequest.php
new file mode 100644
index 00000000..014ed037
--- /dev/null
+++ b/app/Http/Requests/CreatePirepFieldRequest.php
@@ -0,0 +1,30 @@
+ 'integer',
+ 'flight_id' => 'string',
+ 'aircraft_id' => 'integer',
+ 'flight_time' => 'integer',
+ 'level' => 'integer',
+ 'route' => 'string',
+ 'notes' => 'string',
+ 'raw_data' => 'string',
+ ];
+
+ /**
+ * Validation rules
+ *
+ * @var array
+ */
+ public static $rules
+ = [
+ 'dpt_airport_id' => 'required',
+ 'arr_airport_id' => 'required',
+ ];
+
+ /**
+ * Foreign Keys
+ */
+
+ public function user()
+ {
+ return $this->belongsTo('App\Models\User', 'user_id');
+ }
+
+ public function flight()
+ {
+ return $this->belongsTo('App\Models\Flight', 'flight_id');
+ }
+
+ public function dpt_airport()
+ {
+ return $this->belongsTo('App\Models\Airport', 'dpt_airport_id');
+ }
+
+ public function arr_airport()
+ {
+ return $this->belongsTo('App\Models\Airport', 'arr_airport_id');
+ }
+
+}
diff --git a/app/Models/PirepField.php b/app/Models/PirepField.php
new file mode 100644
index 00000000..76a602a7
--- /dev/null
+++ b/app/Models/PirepField.php
@@ -0,0 +1,42 @@
+ 'string',
+ 'required' => 'integer',
+ ];
+
+ /**
+ * Validation rules
+ *
+ * @var array
+ */
+ public static $rules
+ = [
+ 'name' => 'required',
+ ];
+}
diff --git a/app/Models/PirepFieldValues.php b/app/Models/PirepFieldValues.php
new file mode 100644
index 00000000..01826ac3
--- /dev/null
+++ b/app/Models/PirepFieldValues.php
@@ -0,0 +1,45 @@
+ 'string',
+ 'value' => 'string',
+ 'source' => 'integer',
+ ];
+
+ /**
+ * Validation rules
+ *
+ * @var array
+ */
+ public static $rules
+ = [
+ 'name' => 'required',
+ ];
+}
diff --git a/database/migrations/2017_06_28_195426_create_pireps_table.php b/database/migrations/2017_06_28_195426_create_pireps_table.php
new file mode 100644
index 00000000..df687d5e
--- /dev/null
+++ b/database/migrations/2017_06_28_195426_create_pireps_table.php
@@ -0,0 +1,71 @@
+uuid('id');
+ $table->integer('user_id');
+ $table->string('flight_id');
+ $table->integer('aircraft_id');
+ $table->text('route_code')->nullable();
+ $table->text('route_leg')->nullable();
+ $table->integer('dpt_airport_id')->unsigned();
+ $table->integer('arr_airport_id')->unsigned();
+ $table->integer('flight_time')->unsigned();
+ $table->integer('level')->unsigned();
+ $table->string('route')->nullable();
+ $table->string('notes')->nullable();
+ $table->tinyInteger('status');
+ $table->string('raw_data')->nullable();
+ $table->timestamps();
+ $table->softDeletes();
+
+ $table->primary('id');
+ $table->index('user_id');
+ $table->index('flight_id');
+ $table->index('dpt_airport_id');
+ $table->index('arr_airport_id');
+ });
+
+ Schema::create('pirep_fields', function (Blueprint $table) {
+ $table->increments('id');
+ $table->string('name');
+ $table->integer('required');
+ $table->timestamps();
+ });
+
+ Schema::create('pirep_field_values', function (Blueprint $table) {
+ $table->increments('id');
+ $table->uuid('pirep_id');
+ $table->string('name');
+ $table->string('value');
+ $table->tinyInteger('source')->default(0);
+ $table->timestamps();
+
+ $table->index('pirep_id');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::drop('pireps');
+ Schema::drop('pirep_fields');
+ Schema::drop('pirep_field_values');
+ }
+}
diff --git a/resources/views/admin/pirep_fields/create.blade.php b/resources/views/admin/pirep_fields/create.blade.php
new file mode 100644
index 00000000..e1cc06aa
--- /dev/null
+++ b/resources/views/admin/pirep_fields/create.blade.php
@@ -0,0 +1,20 @@
+@extends('admin.app')
+
+@section('content')
+ Add PIREP Field
+
{!! $field->id !!}
+{!! $field->name !!}
+{!! $field->required !!}
+{!! $field->created_at !!}
+{!! $field->updated_at !!}
+| Name | +Required | +Action | + + + @foreach($fields as $field) +
|---|---|---|
| {!! $field->name !!} | +{!! $field->required !!} | ++ {!! Form::open(['route' => ['admin.pirepfields.destroy', $field->id], 'method' => 'delete']) !!} + + {!! Form::close() !!} + | +
{!! $pirep->id !!}
+{!! $pirep->user_id !!}
+{!! $pirep->flight_id !!}
+{!! $pirep->aircraft_id !!}
+{!! $pirep->flight_time !!}
+{!! $pirep->level !!}
+{!! $pirep->route !!}
+{!! $pirep->notes !!}
+{!! $pirep->raw_data !!}
+{!! $pirep->created_at !!}
+{!! $pirep->updated_at !!}
+| User Id | +Flight Id | +Aircraft Id | +Flight Time | +Level | +Route | +Notes | +Raw Data | +Action | + + + @foreach($pireps as $pirep) +
|---|---|---|---|---|---|---|---|---|
| {!! $pirep->user_id !!} | +{!! $pirep->flight_id !!} | +{!! $pirep->aircraft_id !!} | +{!! $pirep->flight_time !!} | +{!! $pirep->level !!} | +{!! $pirep->route !!} | +{!! $pirep->notes !!} | +{!! $pirep->raw_data !!} | ++ {!! Form::open(['route' => ['admin.pireps.destroy', $pirep->id], 'method' => 'delete']) !!} + + {!! Form::close() !!} + | +