@@ -22,20 +22,22 @@ $factory->define(App\Models\Flight::class, function (Faker $faker) {
|
||||
'alt_airport_id' => function () {
|
||||
return factory(App\Models\Airport::class)->create()->id;
|
||||
},
|
||||
'distance' => $faker->numberBetween(1, 1000),
|
||||
'route' => null,
|
||||
'level' => 0,
|
||||
'dpt_time' => $faker->time(),
|
||||
'arr_time' => $faker->time(),
|
||||
'flight_time' => $faker->numberBetween(60, 360),
|
||||
'has_bid' => false,
|
||||
'active' => true,
|
||||
'visible' => true,
|
||||
'days' => 0,
|
||||
'start_date' => null,
|
||||
'end_date' => null,
|
||||
'created_at' => $faker->dateTimeBetween('-1 week', 'now'),
|
||||
'updated_at' => static function (array $flight) {
|
||||
'distance' => $faker->numberBetween(1, 1000),
|
||||
'route' => null,
|
||||
'level' => 0,
|
||||
'dpt_time' => $faker->time(),
|
||||
'arr_time' => $faker->time(),
|
||||
'flight_time' => $faker->numberBetween(60, 360),
|
||||
'load_factor' => $faker->randomElement([15, 20, 50, 90, 100]),
|
||||
'load_factor_variance' => $faker->randomElement([15, 20, 50, 90, 100]),
|
||||
'has_bid' => false,
|
||||
'active' => true,
|
||||
'visible' => true,
|
||||
'days' => 0,
|
||||
'start_date' => null,
|
||||
'end_date' => null,
|
||||
'created_at' => $faker->dateTimeBetween('-1 week', 'now'),
|
||||
'updated_at' => static function (array $flight) {
|
||||
return $flight['created_at'];
|
||||
},
|
||||
];
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class FlightsAddLoadFactor extends Migration
|
||||
{
|
||||
/**
|
||||
* Add a `load_factor` and `load_factor_variance` columns to the expenses table
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('flights', function (Blueprint $table) {
|
||||
$table->decimal('load_factor', 5, 2)
|
||||
->nullable()
|
||||
->after('flight_type');
|
||||
|
||||
$table->decimal('load_factor_variance', 5, 2)
|
||||
->nullable()
|
||||
->after('load_factor');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('flights', function (Blueprint $table) {
|
||||
$table->dropColumn('load_factor');
|
||||
$table->dropColumn('load_factor_variance');
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -124,7 +124,16 @@ airports:
|
||||
lat: 25.2528
|
||||
lon: 55.3644
|
||||
ground_handling_cost: 50
|
||||
|
||||
- id: OMAA
|
||||
iata: AUH
|
||||
icao: OMAA
|
||||
name: Abu Dhabi International Airport
|
||||
location: Abu Dhabi
|
||||
country:
|
||||
timezone: Asia/Dubai
|
||||
lat: 24.433
|
||||
lon: 54.6511
|
||||
ground_handling_cost: 50
|
||||
#
|
||||
aircraft:
|
||||
- id: 1
|
||||
@@ -283,6 +292,7 @@ flights:
|
||||
arr_time: 11PM EST
|
||||
flight_time: 240
|
||||
flight_type: J
|
||||
load_factor: 100
|
||||
created_at: NOW
|
||||
updated_at: NOW
|
||||
- id: flightid_3
|
||||
@@ -294,6 +304,7 @@ flights:
|
||||
arr_airport_id: KJFK
|
||||
flight_time: 480
|
||||
flight_type: J
|
||||
load_factor: 63
|
||||
dpt_time: 9AM CST
|
||||
arr_time: 1030AM CST
|
||||
route: PITZZ4 MNURE WLEEE4
|
||||
@@ -308,6 +319,37 @@ flights:
|
||||
arr_airport_id: MWCR
|
||||
flight_time: 70
|
||||
flight_type: 'J'
|
||||
load_factor: 80
|
||||
dpt_time: '0800'
|
||||
arr_time: '0900'
|
||||
route: 'MLY5 KEMBO UG442 SIA UG633 OTEKO UR640 NALRO GUBEL3'
|
||||
created_at: NOW
|
||||
updated_at: NOW
|
||||
- id: flightid_5
|
||||
airline_id: 1
|
||||
flight_number: 112
|
||||
route_code:
|
||||
route_leg:
|
||||
dpt_airport_id: OMAA
|
||||
arr_airport_id: OMDB
|
||||
flight_time: 30
|
||||
flight_type: 'J'
|
||||
load_factor:
|
||||
dpt_time: '0800'
|
||||
arr_time: '0900'
|
||||
route: 'MLY5 KEMBO UG442 SIA UG633 OTEKO UR640 NALRO GUBEL3'
|
||||
created_at: NOW
|
||||
updated_at: NOW
|
||||
- id: flightid_6
|
||||
airline_id: 1
|
||||
flight_number: 113
|
||||
route_code:
|
||||
route_leg:
|
||||
dpt_airport_id: OMDB
|
||||
arr_airport_id: OMAA
|
||||
flight_time: 30
|
||||
flight_type: 'J'
|
||||
load_factor: 100
|
||||
dpt_time: '0800'
|
||||
arr_time: '0900'
|
||||
route: 'MLY5 KEMBO UG442 SIA UG633 OTEKO UR640 NALRO GUBEL3'
|
||||
@@ -467,12 +509,8 @@ pirep_fares:
|
||||
|
||||
pirep_fields:
|
||||
- id: 1
|
||||
name: departure terminal
|
||||
slug: departure-terminal
|
||||
required: 1
|
||||
- id: 2
|
||||
name: arrival terminal
|
||||
slug: arrival-terminal
|
||||
name: Cost Index
|
||||
slug: cost-index
|
||||
required: 0
|
||||
|
||||
pirep_field_values:
|
||||
|
||||
@@ -138,6 +138,20 @@
|
||||
options: ''
|
||||
type: int
|
||||
description: 'Number of hours to expire bids after'
|
||||
- key: flights.default_load_factor
|
||||
name: 'Load Factor'
|
||||
group: flights
|
||||
value: 82
|
||||
options: ''
|
||||
type: number
|
||||
description: 'The default load factor for a flight, as a percent'
|
||||
- key: flights.load_factor_variance
|
||||
name: 'Load Factor Variance'
|
||||
group: flights
|
||||
value: 5
|
||||
options: ''
|
||||
type: number
|
||||
description: 'How much the load factor can vary per-flight'
|
||||
- key: pireps.duplicate_check_time
|
||||
name: 'PIREP duplicate time check'
|
||||
group: pireps
|
||||
|
||||
@@ -5,12 +5,13 @@ namespace App\Http\Resources;
|
||||
use App\Support\Units\Distance;
|
||||
use stdClass;
|
||||
|
||||
/**
|
||||
* @mixin \App\Models\Flight
|
||||
*/
|
||||
class Flight extends Response
|
||||
{
|
||||
/**
|
||||
* Set the fields on the flight object
|
||||
*
|
||||
* @mixin \App\Models\Flight
|
||||
*/
|
||||
private function setFields()
|
||||
{
|
||||
@@ -42,6 +43,14 @@ class Flight extends Response
|
||||
|
||||
$res['ident'] = $this->ident;
|
||||
|
||||
if (empty($res['load_factor'])) {
|
||||
$res['load_factor'] = setting('flights.default_load_factor');
|
||||
}
|
||||
|
||||
if (empty($res['load_factor_variance'])) {
|
||||
$res['load_factor_variance'] = setting('flights.load_factor_variance');
|
||||
}
|
||||
|
||||
$distance = new Distance($res['distance'], config('phpvms.internal_units.distance'));
|
||||
$res['distance'] = $distance->getResponseUnits();
|
||||
|
||||
|
||||
@@ -26,6 +26,8 @@ use Illuminate\Support\Collection;
|
||||
* @property int flight_time
|
||||
* @property string route
|
||||
* @property int level
|
||||
* @property float load_factor
|
||||
* @property float load_factor_variance
|
||||
* @property Airport dpt_airport
|
||||
* @property Airport arr_airport
|
||||
* @property Airport alt_airport
|
||||
@@ -65,6 +67,8 @@ class Flight extends Model
|
||||
'distance',
|
||||
'flight_time',
|
||||
'flight_type',
|
||||
'load_factor',
|
||||
'load_factor_variance',
|
||||
'route',
|
||||
'notes',
|
||||
'start_date',
|
||||
@@ -75,27 +79,31 @@ class Flight extends Model
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'flight_number' => 'integer',
|
||||
'days' => 'integer',
|
||||
'level' => 'integer',
|
||||
'distance' => 'float',
|
||||
'flight_time' => 'integer',
|
||||
'start_date' => 'date',
|
||||
'end_date' => 'date',
|
||||
'has_bid' => 'boolean',
|
||||
'route_leg' => 'integer',
|
||||
'active' => 'boolean',
|
||||
'visible' => 'boolean',
|
||||
'flight_number' => 'integer',
|
||||
'days' => 'integer',
|
||||
'level' => 'integer',
|
||||
'distance' => 'float',
|
||||
'flight_time' => 'integer',
|
||||
'start_date' => 'date',
|
||||
'end_date' => 'date',
|
||||
'load_factor' => 'double',
|
||||
'load_factor_variance' => 'double',
|
||||
'has_bid' => 'boolean',
|
||||
'route_leg' => 'integer',
|
||||
'active' => 'boolean',
|
||||
'visible' => 'boolean',
|
||||
];
|
||||
|
||||
public static $rules = [
|
||||
'airline_id' => 'required|exists:airlines,id',
|
||||
'flight_number' => 'required',
|
||||
'route_code' => 'nullable',
|
||||
'route_leg' => 'nullable',
|
||||
'dpt_airport_id' => 'required|exists:airports,id',
|
||||
'arr_airport_id' => 'required|exists:airports,id',
|
||||
'level' => 'nullable',
|
||||
'airline_id' => 'required|exists:airlines,id',
|
||||
'flight_number' => 'required',
|
||||
'route_code' => 'nullable',
|
||||
'route_leg' => 'nullable',
|
||||
'dpt_airport_id' => 'required|exists:airports,id',
|
||||
'arr_airport_id' => 'required|exists:airports,id',
|
||||
'load_factor' => 'nullable|numeric',
|
||||
'load_factor_variance' => 'nullable|numeric',
|
||||
'level' => 'nullable',
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -25,6 +25,7 @@ class ExpenseImporter extends ImportExport
|
||||
'name' => 'required',
|
||||
'amount' => 'required|numeric',
|
||||
'type' => 'required',
|
||||
'flight_type' => 'nullable',
|
||||
'charge_to_user' => 'nullable|boolean',
|
||||
'multiplier' => 'nullable|numeric',
|
||||
'active' => 'nullable|boolean',
|
||||
|
||||
@@ -25,26 +25,28 @@ class FlightImporter extends ImportExport
|
||||
* Should match the database fields, for the most part
|
||||
*/
|
||||
public static $columns = [
|
||||
'airline' => 'required',
|
||||
'flight_number' => 'required',
|
||||
'route_code' => 'nullable',
|
||||
'route_leg' => 'nullable',
|
||||
'dpt_airport' => 'required',
|
||||
'arr_airport' => 'required',
|
||||
'alt_airport' => 'nullable',
|
||||
'days' => 'nullable',
|
||||
'dpt_time' => 'nullable',
|
||||
'arr_time' => 'nullable',
|
||||
'level' => 'nullable|integer',
|
||||
'distance' => 'nullable|numeric',
|
||||
'flight_time' => 'required|integer',
|
||||
'flight_type' => 'required|alpha',
|
||||
'route' => 'nullable',
|
||||
'notes' => 'nullable',
|
||||
'active' => 'nullable|boolean',
|
||||
'subfleets' => 'nullable',
|
||||
'fares' => 'nullable',
|
||||
'fields' => 'nullable',
|
||||
'airline' => 'required',
|
||||
'flight_number' => 'required',
|
||||
'route_code' => 'nullable',
|
||||
'route_leg' => 'nullable',
|
||||
'dpt_airport' => 'required',
|
||||
'arr_airport' => 'required',
|
||||
'alt_airport' => 'nullable',
|
||||
'days' => 'nullable',
|
||||
'dpt_time' => 'nullable',
|
||||
'arr_time' => 'nullable',
|
||||
'level' => 'nullable|integer',
|
||||
'distance' => 'nullable|numeric',
|
||||
'flight_time' => 'required|integer',
|
||||
'flight_type' => 'required|alpha',
|
||||
'load_factor' => 'nullable',
|
||||
'load_factor_variance' => 'nullable',
|
||||
'route' => 'nullable',
|
||||
'notes' => 'nullable',
|
||||
'active' => 'nullable|boolean',
|
||||
'subfleets' => 'nullable',
|
||||
'fares' => 'nullable',
|
||||
'fields' => 'nullable',
|
||||
];
|
||||
|
||||
private $airportSvc;
|
||||
|
||||
@@ -307,3 +307,17 @@ if (!function_exists('_fmt')) {
|
||||
return $line;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('docs_link')) {
|
||||
/**
|
||||
* Return a link to the docs
|
||||
*
|
||||
* @param string $key Key from phpvms.config.docs
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function docs_link($key)
|
||||
{
|
||||
return config('phpvms.docs.root').config('phpvms.docs.'.$key);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user