Compare commits

...

18 Commits

Author SHA1 Message Date
B.Fatih KOZ
ced2012578
Update simbrief_briefing.blade.php (#1497)
Change in blade forms to SimBrief provided direct links.
2022-11-30 07:47:10 -06:00
fagidutt
00918f54aa
Fix division by Zero in pireps/show.blade.php (#1493)
* Fix division by Zero in pireps/show.blade.php

Division by Zero caused by possible null distance fixed by adding check.

* Update show.blade.php

* Update show.blade.php

* Update show.blade.php

Final form :)
2022-11-03 12:11:57 -04:00
Nabeel S
41bd325f9a
Revert "Bug fix #1414 (#1487)" (#1492)
This reverts commit b4311b861f.
2022-10-30 22:58:26 -04:00
Yash Govekar
b4311b861f
Bug fix #1414 (#1487)
* Update module migrate command to avoid errors.

* Fixed issue #1414
2022-10-24 11:11:00 -04:00
B.Fatih KOZ
2f9e8583f2
Flight Visibility Visuals (#1485)
Added "visible" field display and form checkbox to control it easily from admin side (instead of going through database)
2022-10-14 13:27:46 -04:00
John Cheng
2155979eb9
Patch currency subunit conversion (#1484)
* added parentheses around the conversion

* updated finance test

updated the following test:
- journal operations

fixed the following tests:
- pirep finances
- pirep finances specific expense
- pirep finances expenses multi airline
2022-10-09 08:13:11 -05:00
Toni Vicente
f30a3bc1ef
fix typo lang es-es (#1480) 2022-08-30 09:42:50 -04:00
B.Fatih KOZ
3461672f10
Fixes (#1481)
Fare Service : Return the note, do not force it to an empty string

Airport Importer : Make IATA nullable (as in the model)
2022-08-29 15:39:58 -04:00
B.Fatih KOZ
b4d5114ea2
Apply color customization (#1479) 2022-08-29 12:43:50 -04:00
Nabeel S
231e54ea5e
Map color options (#1478)
* Add colors to the maps options

* Update assets build
2022-08-22 14:05:19 -04:00
B.Fatih KOZ
b1ae0240be
Roles Update (#1474)
Adds member count to roles\index and member list to roles\edit pages.

Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
2022-08-21 10:59:19 -04:00
B.Fatih KOZ
64e470abec
Add Radio Callsign To Airlines (#1475)
Adds a new db field for radio telephony callsign for airlines.

Also adds necessary field to admin template.
2022-08-21 10:48:18 -04:00
Nabeel S
695ab3a90d
Dependency updates (#1473)
* Update PHP dependencies

* Update NPM modules

* Fix dependency versions
2022-08-15 12:55:36 -04:00
B.Fatih KOZ
0e1b55c6d7
Add baggage weight to acdata (#1464)
Follow up for improved SimBrief API, sending separate pax and bag weights is possible now.

Core v7 already had them separated ;)

Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
2022-08-15 11:32:52 -04:00
B.Fatih KOZ
ba5b4e23c7
Fix dead links (#1455)
* Fix dead links

Fixed one dead link, removed another one and changed load factor and variance fields to accept only numbers between 0-100.

* Update fields.blade.php

Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
2022-08-15 11:26:34 -04:00
B.Fatih KOZ
ef38d39ec4
Add "Notes" to Airports (#1467)
* Notes for Airports

Adds capability of having notes/remarks for airports, includes

* New database field
* Airport Model change
* CSV Import/Export capability for notes
* Admin Airports list page change
* Admin Airports edit page change
* Default Template Airport show page change

* Update Airport Tests

* Add the new field to source csv
* Check if the import works

* Update AirportFactory.php

Co-authored-by: Nabeel S <nabeelio@users.noreply.github.com>
2022-08-15 11:23:39 -04:00
B.Fatih KOZ
ccebc69be2
Add ability to export members of a subfleet only (#1471)
* Export Subfleet Members

* Style Fix

* Fix php-cs style complaints

* Disable php-cs-fixer and fix styles
2022-08-15 10:45:10 -04:00
Jordan Havard
6becc6de63
Fix docker dev links (#1470)
Updated `docker-compose.local.yml` to `docker-compose.dev.yml` to reflect the correct docker files
2022-08-15 09:43:50 -04:00
68 changed files with 24108 additions and 11501 deletions

View File

@ -80,7 +80,7 @@ jobs:
- name: Run Tests
run: |
export PHP_CS_FIXER_IGNORE_ENV=1
vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php -v --dry-run --diff --using-cache=no
#vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php -v --dry-run --diff --using-cache=no
vendor/bin/phpunit --debug --verbose
# This runs after all of the tests, run have run. Creates a cleaned up version of the

View File

@ -102,7 +102,7 @@ reset-installer:
.PHONY: docker-test
docker-test:
@docker compose -f docker-compose.local.yml up
@docker compose -f docker-compose.dev.yml up
.PHONY: docker-clean
docker-clean:

View File

@ -39,7 +39,7 @@ make docker-test
# **OR** with docker-compose directly
docker-compose -f docker-compose.yml -f docker-compose.local.yml up
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
```
Then go to `http://localhost`. If you're using dnsmasq, the `app` container is listening on `phpvms.test`, or you can add to your `/etc/hosts` file:

View File

@ -63,6 +63,7 @@ class AirportFactory extends Factory
'lat' => $this->faker->latitude,
'lon' => $this->faker->longitude,
'hub' => false,
'notes' => null,
'ground_handling_cost' => $this->faker->randomFloat(2, 0, 500),
'fuel_100ll_cost' => $this->faker->randomFloat(2, 1, 10),
'fuel_jeta_cost' => $this->faker->randomFloat(2, 1, 10),

View File

@ -0,0 +1,14 @@
<?php
use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class() extends Migration {
public function up()
{
Schema::table('airports', function (Blueprint $table) {
$table->mediumText('notes')->nullable()->after('hub');
});
}
};

View File

@ -0,0 +1,14 @@
<?php
use App\Contracts\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class() extends Migration {
public function up()
{
Schema::table('airlines', function (Blueprint $table) {
$table->string('callsign')->nullable()->after('name');
});
}
};

View File

@ -212,14 +212,19 @@ class AircraftController extends Controller
public function export(Request $request)
{
$exporter = app(ExportService::class);
$aircraft = $this->aircraftRepo->all();
$where = [];
$file_name = 'aircraft.csv';
if ($request->input('subfleet')) {
$subfleet_id = $request->input('subfleet');
$where['subfleet_id'] = $subfleet_id;
$file_name = 'aircraft-'.$subfleet_id.'.csv';
}
$aircraft = $this->aircraftRepo->where($where)->orderBy('registration')->get();
$path = $exporter->exportAircraft($aircraft);
return response()
->download($path, 'aircraft.csv', [
'content-type' => 'text/csv',
])
->deleteFileAfterSend(true);
return response()->download($path, $file_name, ['content-type' => 'text/csv'])->deleteFileAfterSend(true);
}
/**

View File

@ -48,7 +48,7 @@ class RolesController extends Controller
public function index(Request $request)
{
$this->rolesRepo->pushCriteria(new RequestCriteria($request));
$roles = $this->rolesRepo->findWhere(['read_only' => false]);
$roles = $this->rolesRepo->withCount('users')->findWhere(['read_only' => false]);
return view('admin.roles.index', [
'roles' => $roles,
@ -117,7 +117,7 @@ class RolesController extends Controller
*/
public function edit($id)
{
$role = $this->rolesRepo->findWithoutFail($id);
$role = $this->rolesRepo->withCount('users')->with('users')->findWithoutFail($id);
if (empty($role)) {
Flash::error('Role not found');
@ -126,6 +126,8 @@ class RolesController extends Controller
return view('admin.roles.edit', [
'role' => $role,
'users' => $role->users,
'users_count' => $role->users_count,
'permissions' => $this->permsRepo->all(),
]);
}

View File

@ -16,6 +16,7 @@ use Illuminate\Support\Str;
* @property string icao
* @property string iata
* @property string name
* @property string callsign
* @property string logo
* @property string country
* @property Journal journal
@ -37,6 +38,7 @@ class Airline extends Model
'icao',
'iata',
'name',
'callsign',
'logo',
'country',
'total_flights',
@ -61,11 +63,12 @@ class Airline extends Model
* @var array
*/
public static $rules = [
'country' => 'nullable',
'iata' => 'nullable|max:5',
'icao' => 'required|max:5',
'logo' => 'nullable',
'name' => 'required',
'country' => 'nullable',
'iata' => 'nullable|max:5',
'icao' => 'required|max:5',
'logo' => 'nullable',
'name' => 'required',
'callsign' => 'nullable',
];
/**

View File

@ -19,6 +19,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
* @property string location
* @property string country
* @property string timezone
* @property string notes
* @property float ground_handling_cost
* @property float fuel_100ll_cost
* @property float fuel_jeta_cost
@ -56,6 +57,7 @@ class Airport extends Model
'fuel_100ll_cost',
'fuel_jeta_cost',
'fuel_mogas_cost',
'notes',
];
protected $casts = [
@ -81,8 +83,7 @@ class Airport extends Model
'ground_handling_cost' => 'nullable|numeric',
'fuel_100ll_cost' => 'nullable|numeric',
'fuel_jeta_cost' => 'nullable|numeric',
'fuel_mogas_cost' => 'nullable|numeric',
'fuel_mogas_cost' => 'nullable|numeric',
];
/**

View File

@ -169,7 +169,7 @@ class FareService extends Service
}
}
$fare->notes = '';
// $fare->notes = '';
$fare->active = true;
return $fare;

View File

@ -18,7 +18,7 @@ class AirportImporter extends ImportExport
*/
public static $columns = [
'icao' => 'required',
'iata' => 'required',
'iata' => 'nullable',
'name' => 'required',
'location' => 'nullable',
'country' => 'nullable',
@ -30,6 +30,7 @@ class AirportImporter extends ImportExport
'fuel_100ll_cost' => 'nullable|numeric',
'fuel_jeta_cost' => 'nullable|numeric',
'fuel_mogas_cost' => 'nullable|numeric',
'notes' => 'nullable',
];
/**

View File

@ -33,7 +33,7 @@ class Money
/**
* Create from a dollar amount
*
* @param mixed $amount The amount in pennies
* @param mixed $amount The amount in dollar
*
* @throws \UnexpectedValueException
* @throws \InvalidArgumentException
@ -52,12 +52,12 @@ class Money
*
* @param mixed $amount
*
* @return float|int
* @return int
*/
public static function convertToSubunit($amount)
{
$currency = setting('units.currency', 'USD');
return (int) $amount * config('money.'.$currency.'.subunit');
return (int) ($amount * config('money.'.$currency.'.subunit'));
}
/**

View File

@ -23,45 +23,46 @@
"symfony/polyfill-mbstring": "*",
"symfony/polyfill-php80": "*",
"symfony/polyfill-php81": "*",
"symfony/deprecation-contracts": "^v2.5.0",
"symfony/event-dispatcher-contracts": "^2",
"symfony/mailgun-mailer": "^6.0",
"symfony/http-client": "^6.0",
"symfony/yaml": "^6.0",
"symfony/deprecation-contracts": "~v2.5.0",
"symfony/event-dispatcher-contracts": "~2.5.0",
"symfony/mailgun-mailer": "^6.0.0",
"symfony/console": "^6.0.0",
"symfony/http-client": "^6.0.0",
"symfony/yaml": "~6.0.0",
"psr/container": "1.1.1",
"composer/composer": "^2.2.7",
"composer/composer": "~2.3.0",
"composer/installers": "~1.12.0",
"laravel/framework": "~v9.2",
"arrilot/laravel-widgets": "~3.13.0",
"doctrine/dbal": "^3.3.2",
"doctrine/dbal": "~3.3.2",
"guzzlehttp/guzzle": "~7.4.1",
"hashids/hashids": "^4.1.0",
"igaster/laravel-theme": "^2.0",
"intervention/image": "^2.4",
"hashids/hashids": "~4.1.0",
"igaster/laravel-theme": "~2.0.0",
"intervention/image": "~2.4",
"jmikola/geojson": "1.0.*",
"joshbrw/laravel-module-installer": "^2.0",
"laracasts/flash": "^3.2.1",
"laravel/helpers": "^v1.5.0",
"joshbrw/laravel-module-installer": "~2.0.1",
"laracasts/flash": "~3.2.1",
"laravel/helpers": "~v1.5.0",
"laravelcollective/html": "~6.3.0",
"jeremykendall/php-domain-parser": "~5.7.2",
"league/commonmark": "~2.2.2",
"league/csv": "^9.8.0",
"league/geotools": "^1.0.0",
"league/iso3166": "^4.0.0",
"markrogoyski/math-php": "^2.5.0",
"league/csv": "~9.8.0",
"league/geotools": "~1.0.0",
"league/iso3166": "~4.0.0",
"markrogoyski/math-php": "~2.5.0",
"myclabs/deep-copy": "~1.10.0",
"nabeel/vacentral": "~2.1.0",
"nwidart/laravel-modules": "^9.0.0",
"nwidart/laravel-modules": "~9.0.0",
"php-units-of-measure/php-units-of-measure": "~2.1.0",
"phpvms/sample-module": "^1.0",
"phpvms/sample-module": "~1.0",
"prettus/l5-repository": "~2.8.0",
"santigarcor/laratrust": "~7.0.0",
"semver/semver": "~1.1.0",
"spatie/valuestore": "~1.3.1",
"tivie/php-os-detector": "~1.1.0",
"vlucas/phpdotenv": "^5.4.1",
"webpatser/laravel-uuid": "^4.0.1",
"oomphinc/composer-installers-extender": "^2.0",
"vlucas/phpdotenv": "~5.4.1",
"webpatser/laravel-uuid": "~4.0.1",
"oomphinc/composer-installers-extender": "~2.0.0",
"laravel/ui": "^3.4.5",
"madnest/madzipper": "^1.1.0",
"elcobvg/laravel-opcache": "^0.4.1",
@ -69,8 +70,8 @@
"queueworker/sansdaemon": "^1.2.4",
"jpkleemans/attribute-events": "^1.3.0",
"akaunting/laravel-money": "^2.0.1",
"staudenmeir/belongs-to-through": "^v2.12",
"staudenmeir/eloquent-has-many-deep": "1.15",
"staudenmeir/belongs-to-through": "^v2.12.0",
"staudenmeir/eloquent-has-many-deep": "1.15.0",
"spatie/laravel-ignition": "^1.0"
},
"require-dev": {
@ -124,7 +125,8 @@
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi",
"@php artisan phpvms:caches"
]
],
"test": "phpunit --verbose"
},
"config": {
"bin-dir": "vendor/bin/",

1399
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
#
# Run with either `make docker-test` or the following Docker command:
# docker-compose -f docker-compose.yml -f docker-compose.local.yml up
# docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
#
---
services:

17723
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -2,12 +2,12 @@
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"dependencies": {
"@turf/center": "^6.0.1",
@ -46,8 +46,8 @@
"select2": "^4.0.13",
"ssri": "^8.0.1",
"tar": ">=4.4.2",
"webpack": "^5.45.1",
"webpack-cli": "^3.3.12",
"webpack": "^5.0.0",
"webpack-cli": "^4.10.0",
"x-editable": "1.5.1"
},
"devDependencies": {
@ -58,11 +58,12 @@
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jsx-a11y": "^6.2.3",
"eslint-plugin-react": "^7.21.5",
"sass": "^1.32.13",
"sass-loader": "^8.0.2",
"node-gyp": "~9.1.0",
"sass": "^1.54.5",
"sass-loader": "^12.1.0",
"tailwindcss": "^0.5.3",
"vue-template-compiler": "^2.6.12",
"webpack-bundle-analyzer": "^3.9.0",
"webpack-dev-server": "^1.16.5"
"webpack-dev-server": "^4.10.0"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,21 +1,23 @@
/* @preserve
* Leaflet 1.7.1, a JS library for interactive maps. http://leafletjs.com
* (c) 2010-2019 Vladimir Agafonkin, (c) 2010-2011 CloudMade
* Leaflet 1.8.0, a JS library for interactive maps. https://leafletjs.com
* (c) 2010-2022 Vladimir Agafonkin, (c) 2010-2011 CloudMade
*/
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
Copyright (c) Microsoft Corporation.
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/*! Leaflet.Geodesic 2.5.4 - (c) Henry Thasler - https://github.com/henrythasler/Leaflet.Geodesic */
/*! Leaflet.Geodesic 2.6.1 - (c) Henry Thasler - https://github.com/henrythasler/Leaflet.Geodesic */
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,21 +1,23 @@
/* @preserve
* Leaflet 1.7.1, a JS library for interactive maps. http://leafletjs.com
* (c) 2010-2019 Vladimir Agafonkin, (c) 2010-2011 CloudMade
* Leaflet 1.8.0, a JS library for interactive maps. https://leafletjs.com
* (c) 2010-2022 Vladimir Agafonkin, (c) 2010-2011 CloudMade
*/
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
Copyright (c) Microsoft Corporation.
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/*! Leaflet.Geodesic 2.5.4 - (c) Henry Thasler - https://github.com/henrythasler/Leaflet.Geodesic */
/*! Leaflet.Geodesic 2.6.1 - (c) Henry Thasler - https://github.com/henrythasler/Leaflet.Geodesic */
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1 @@
/*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*/
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1,38 @@
CKEDITOR.editorConfig=function(e){e.toolbarGroups=[{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"links"},{name:"insert"},{name:"forms"},{name:"tools"},{name:"document",groups:["mode","document","doctools"]},{name:"others"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list","indent","blocks","align","bidi"]},{name:"styles"},{name:"colors"},{name:"about"}],e.removeButtons="Underline,Subscript,Superscript",e.format_tags="p;h1;h2;h3;pre",e.removeDialogTabs="image:advanced;link:advanced"};
/**
* @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see https://ckeditor.com/legal/ckeditor-oss-license
*/
CKEDITOR.editorConfig = function( config ) {
// Define changes to default configuration here.
// For complete reference see:
// https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html
// The toolbar groups arrangement, optimized for two toolbar rows.
config.toolbarGroups = [
{ name: 'clipboard', groups: [ 'clipboard', 'undo' ] },
{ name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] },
{ name: 'links' },
{ name: 'insert' },
{ name: 'forms' },
{ name: 'tools' },
{ name: 'document', groups: [ 'mode', 'document', 'doctools' ] },
{ name: 'others' },
'/',
{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
{ name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] },
{ name: 'styles' },
{ name: 'colors' },
{ name: 'about' }
];
// Remove some buttons provided by the standard plugins, which are
// not needed in the Standard(s) toolbar.
config.removeButtons = 'Underline,Subscript,Superscript';
// Set the most common block elements.
config.format_tags = 'p;h1;h2;h3;pre';
// Simplify the dialog windows.
config.removeDialogTabs = 'image:advanced;link:advanced';
};

View File

@ -1 +1,208 @@
body{font-family:sans-serif,Arial,Verdana,"Trebuchet MS","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:12px;color:#333;background-color:#fff;margin:20px}.cke_editable{font-size:13px;line-height:1.6;word-wrap:break-word}blockquote{font-style:italic;font-family:Georgia,Times,"Times New Roman",serif;padding:2px 0;border-style:solid;border-color:#ccc;border-width:0}.cke_contents_ltr blockquote{padding-left:20px;padding-right:8px;border-left-width:5px}.cke_contents_rtl blockquote{padding-left:8px;padding-right:20px;border-right-width:5px}a{color:#0782c1}dl,ol,ul{padding:0 40px}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.2}hr{border:0;border-top:1px solid #ccc}img.right{border:1px solid #ccc;float:right;margin-left:15px;padding:5px}img.left{border:1px solid #ccc;float:left;margin-right:15px;padding:5px}pre{white-space:pre-wrap;word-wrap:break-word;-moz-tab-size:4;tab-size:4}.marker{background-color:#ff0}span[lang]{font-style:italic}figure{text-align:center;outline:solid 1px #ccc;background:rgba(0,0,0,.05);padding:10px;margin:10px 20px;display:inline-block}figure>figcaption{text-align:center;display:block}a>img{padding:1px;margin:1px;border:none;outline:1px solid #0782C1}.code-featured{border:5px solid red}.math-featured{padding:20px;box-shadow:0 0 2px #c80000;background-color:rgba(255,0,0,.05);margin:10px}.image-clean{border:0;background:0 0;padding:0}.image-clean>figcaption{font-size:.9em;text-align:right}.image-grayscale{background-color:#fff;color:#666}.image-grayscale img,img.image-grayscale{filter:grayscale(100%)}.embed-240p{max-width:426px;max-height:240px;margin:0 auto}.embed-360p{max-width:640px;max-height:360px;margin:0 auto}.embed-480p{max-width:854px;max-height:480px;margin:0 auto}.embed-720p{max-width:1280px;max-height:720px;margin:0 auto}.embed-1080p{max-width:1920px;max-height:1080px;margin:0 auto}
/*
Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
body
{
/* Font */
/* Emoji fonts are added to visualise them nicely in Internet Explorer. */
font-family: sans-serif, Arial, Verdana, "Trebuchet MS", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 12px;
/* Text color */
color: #333;
/* Remove the background color to make it transparent. */
background-color: #fff;
margin: 20px;
}
.cke_editable
{
font-size: 13px;
line-height: 1.6;
/* Fix for missing scrollbars with RTL texts. (#10488) */
word-wrap: break-word;
}
blockquote
{
font-style: italic;
font-family: Georgia, Times, "Times New Roman", serif;
padding: 2px 0;
border-style: solid;
border-color: #ccc;
border-width: 0;
}
.cke_contents_ltr blockquote
{
padding-left: 20px;
padding-right: 8px;
border-left-width: 5px;
}
.cke_contents_rtl blockquote
{
padding-left: 8px;
padding-right: 20px;
border-right-width: 5px;
}
a
{
color: #0782C1;
}
ol,ul,dl
{
/* IE7: reset rtl list margin. (#7334) */
*margin-right: 0px;
/* Preserved spaces for list items with text direction different than the list. (#6249,#8049)*/
padding: 0 40px;
}
h1,h2,h3,h4,h5,h6
{
font-weight: normal;
line-height: 1.2;
}
hr
{
border: 0px;
border-top: 1px solid #ccc;
}
img.right
{
border: 1px solid #ccc;
float: right;
margin-left: 15px;
padding: 5px;
}
img.left
{
border: 1px solid #ccc;
float: left;
margin-right: 15px;
padding: 5px;
}
pre
{
white-space: pre-wrap; /* CSS 2.1 */
word-wrap: break-word; /* IE7 */
-moz-tab-size: 4;
tab-size: 4;
}
.marker
{
background-color: Yellow;
}
span[lang]
{
font-style: italic;
}
figure
{
text-align: center;
outline: solid 1px #ccc;
background: rgba(0,0,0,0.05);
padding: 10px;
margin: 10px 20px;
display: inline-block;
}
figure > figcaption
{
text-align: center;
display: block; /* For IE8 */
}
a > img {
padding: 1px;
margin: 1px;
border: none;
outline: 1px solid #0782C1;
}
/* Widget Styles */
.code-featured
{
border: 5px solid red;
}
.math-featured
{
padding: 20px;
box-shadow: 0 0 2px rgba(200, 0, 0, 1);
background-color: rgba(255, 0, 0, 0.05);
margin: 10px;
}
.image-clean
{
border: 0;
background: none;
padding: 0;
}
.image-clean > figcaption
{
font-size: .9em;
text-align: right;
}
.image-grayscale
{
background-color: white;
color: #666;
}
.image-grayscale img, img.image-grayscale
{
filter: grayscale(100%);
}
.embed-240p
{
max-width: 426px;
max-height: 240px;
margin:0 auto;
}
.embed-360p
{
max-width: 640px;
max-height: 360px;
margin:0 auto;
}
.embed-480p
{
max-width: 854px;
max-height: 480px;
margin:0 auto;
}
.embed-720p
{
max-width: 1280px;
max-height: 720px;
margin:0 auto;
}
.embed-1080p
{
max-width: 1920px;
max-height: 1080px;
margin:0 auto;
}

View File

@ -1,39 +1,12 @@
{
"_from": "ckeditor4@4.14.0",
"_id": "ckeditor4@4.14.0",
"_inBundle": false,
"_integrity": "sha512-g5p3bhbxbwB094bE7ss0rOyvG/azYdRjLTyngnPM2+fKZhnPrMVaFDx3SiiWKB+zyvndT3Deu54VTv/z2MQJCA==",
"_location": "/ckeditor4",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "ckeditor4@4.14.0",
"name": "ckeditor4",
"escapedName": "ckeditor4",
"rawSpec": "4.14.0",
"saveSpec": null,
"fetchSpec": "4.14.0"
},
"_requiredBy": [
"#USER",
"/"
],
"_resolved": "https://registry.npmjs.org/ckeditor4/-/ckeditor4-4.14.0.tgz",
"_shasum": "bfcbe942599fa0c6f488309ecbfe38b2519f919b",
"_spec": "ckeditor4@4.14.0",
"_where": "/Users/a206675592/dev/nabeelio/phpvms",
"author": {
"name": "CKSource",
"url": "https://cksource.com/"
},
"bugs": {
"url": "https://github.com/ckeditor/ckeditor4/issues"
},
"bundleDependencies": false,
"deprecated": false,
"name": "ckeditor4",
"version": "4.14.0",
"description": "JavaScript WYSIWYG web text editor.",
"homepage": "https://ckeditor.com/ckeditor-4/",
"main": "ckeditor.js",
"repository": {
"type": "git",
"url": "git+https://github.com/ckeditor/ckeditor4-releases.git"
},
"keywords": [
"ckeditor4",
"ckeditor",
@ -45,12 +18,10 @@
"text",
"javascript"
],
"author": "CKSource (https://cksource.com/)",
"license": "(GPL-2.0 OR LGPL-2.1 OR MPL-1.1)",
"main": "ckeditor.js",
"name": "ckeditor4",
"repository": {
"type": "git",
"url": "git+https://github.com/ckeditor/ckeditor4-releases.git"
"bugs": {
"url": "https://github.com/ckeditor/ckeditor4/issues"
},
"version": "4.14.0"
"homepage": "https://ckeditor.com/ckeditor-4/"
}

View File

@ -1 +1,137 @@
CKEDITOR.stylesSet.add("default",[{name:"Italic Title",element:"h2",styles:{"font-style":"italic"}},{name:"Subtitle",element:"h3",styles:{color:"#aaa","font-style":"italic"}},{name:"Special Container",element:"div",styles:{padding:"5px 10px",background:"#eee",border:"1px solid #ccc"}},{name:"Marker",element:"span",attributes:{class:"marker"}},{name:"Big",element:"big"},{name:"Small",element:"small"},{name:"Typewriter",element:"tt"},{name:"Computer Code",element:"code"},{name:"Keyboard Phrase",element:"kbd"},{name:"Sample Text",element:"samp"},{name:"Variable",element:"var"},{name:"Deleted Text",element:"del"},{name:"Inserted Text",element:"ins"},{name:"Cited Work",element:"cite"},{name:"Inline Quotation",element:"q"},{name:"Language: RTL",element:"span",attributes:{dir:"rtl"}},{name:"Language: LTR",element:"span",attributes:{dir:"ltr"}},{name:"Styled Image (left)",element:"img",attributes:{class:"left"}},{name:"Styled Image (right)",element:"img",attributes:{class:"right"}},{name:"Compact Table",element:"table",attributes:{cellpadding:"5",cellspacing:"0",border:"1",bordercolor:"#ccc"},styles:{"border-collapse":"collapse"}},{name:"Borderless Table",element:"table",styles:{"border-style":"hidden","background-color":"#E6E6FA"}},{name:"Square Bulleted List",element:"ul",styles:{"list-style-type":"square"}},{name:"Clean Image",type:"widget",widget:"image",attributes:{class:"image-clean"}},{name:"Grayscale Image",type:"widget",widget:"image",attributes:{class:"image-grayscale"}},{name:"Featured Snippet",type:"widget",widget:"codeSnippet",attributes:{class:"code-featured"}},{name:"Featured Formula",type:"widget",widget:"mathjax",attributes:{class:"math-featured"}},{name:"240p",type:"widget",widget:"embedSemantic",attributes:{class:"embed-240p"},group:"size"},{name:"360p",type:"widget",widget:"embedSemantic",attributes:{class:"embed-360p"},group:"size"},{name:"480p",type:"widget",widget:"embedSemantic",attributes:{class:"embed-480p"},group:"size"},{name:"720p",type:"widget",widget:"embedSemantic",attributes:{class:"embed-720p"},group:"size"},{name:"1080p",type:"widget",widget:"embedSemantic",attributes:{class:"embed-1080p"},group:"size"},{name:"240p ",type:"widget",widget:"embed",attributes:{class:"embed-240p"},group:"size"},{name:"360p ",type:"widget",widget:"embed",attributes:{class:"embed-360p"},group:"size"},{name:"480p ",type:"widget",widget:"embed",attributes:{class:"embed-480p"},group:"size"},{name:"720p ",type:"widget",widget:"embed",attributes:{class:"embed-720p"},group:"size"},{name:"1080p ",type:"widget",widget:"embed",attributes:{class:"embed-1080p"},group:"size"}]);
/**
* Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
// This file contains style definitions that can be used by CKEditor plugins.
//
// The most common use for it is the "stylescombo" plugin which shows the Styles drop-down
// list containing all styles in the editor toolbar. Other plugins, like
// the "div" plugin, use a subset of the styles for their features.
//
// If you do not have plugins that depend on this file in your editor build, you can simply
// ignore it. Otherwise it is strongly recommended to customize this file to match your
// website requirements and design properly.
//
// For more information refer to: https://ckeditor.com/docs/ckeditor4/latest/guide/dev_styles.html#style-rules
CKEDITOR.stylesSet.add( 'default', [
/* Block styles */
// These styles are already available in the "Format" drop-down list ("format" plugin),
// so they are not needed here by default. You may enable them to avoid
// placing the "Format" combo in the toolbar, maintaining the same features.
/*
{ name: 'Paragraph', element: 'p' },
{ name: 'Heading 1', element: 'h1' },
{ name: 'Heading 2', element: 'h2' },
{ name: 'Heading 3', element: 'h3' },
{ name: 'Heading 4', element: 'h4' },
{ name: 'Heading 5', element: 'h5' },
{ name: 'Heading 6', element: 'h6' },
{ name: 'Preformatted Text',element: 'pre' },
{ name: 'Address', element: 'address' },
*/
{ name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } },
{ name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } },
{
name: 'Special Container',
element: 'div',
styles: {
padding: '5px 10px',
background: '#eee',
border: '1px solid #ccc'
}
},
/* Inline styles */
// These are core styles available as toolbar buttons. You may opt enabling
// some of them in the Styles drop-down list, removing them from the toolbar.
// (This requires the "stylescombo" plugin.)
/*
{ name: 'Strong', element: 'strong', overrides: 'b' },
{ name: 'Emphasis', element: 'em' , overrides: 'i' },
{ name: 'Underline', element: 'u' },
{ name: 'Strikethrough', element: 'strike' },
{ name: 'Subscript', element: 'sub' },
{ name: 'Superscript', element: 'sup' },
*/
{ name: 'Marker', element: 'span', attributes: { 'class': 'marker' } },
{ name: 'Big', element: 'big' },
{ name: 'Small', element: 'small' },
{ name: 'Typewriter', element: 'tt' },
{ name: 'Computer Code', element: 'code' },
{ name: 'Keyboard Phrase', element: 'kbd' },
{ name: 'Sample Text', element: 'samp' },
{ name: 'Variable', element: 'var' },
{ name: 'Deleted Text', element: 'del' },
{ name: 'Inserted Text', element: 'ins' },
{ name: 'Cited Work', element: 'cite' },
{ name: 'Inline Quotation', element: 'q' },
{ name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } },
{ name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } },
/* Object styles */
{
name: 'Styled Image (left)',
element: 'img',
attributes: { 'class': 'left' }
},
{
name: 'Styled Image (right)',
element: 'img',
attributes: { 'class': 'right' }
},
{
name: 'Compact Table',
element: 'table',
attributes: {
cellpadding: '5',
cellspacing: '0',
border: '1',
bordercolor: '#ccc'
},
styles: {
'border-collapse': 'collapse'
}
},
{ name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } },
{ name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } },
/* Widget styles */
{ name: 'Clean Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-clean' } },
{ name: 'Grayscale Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-grayscale' } },
{ name: 'Featured Snippet', type: 'widget', widget: 'codeSnippet', attributes: { 'class': 'code-featured' } },
{ name: 'Featured Formula', type: 'widget', widget: 'mathjax', attributes: { 'class': 'math-featured' } },
{ name: '240p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-240p' }, group: 'size' },
{ name: '360p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-360p' }, group: 'size' },
{ name: '480p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-480p' }, group: 'size' },
{ name: '720p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-720p' }, group: 'size' },
{ name: '1080p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-1080p' }, group: 'size' },
// Adding space after the style name is an intended workaround. For now, there
// is no option to create two styles with the same name for different widget types. See https://dev.ckeditor.com/ticket/16664.
{ name: '240p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-240p' }, group: 'size' },
{ name: '360p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-360p' }, group: 'size' },
{ name: '480p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-480p' }, group: 'size' },
{ name: '720p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-720p' }, group: 'size' },
{ name: '1080p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-1080p' }, group: 'size' }
] );

File diff suppressed because it is too large Load Diff

View File

@ -33,6 +33,7 @@ export default (_opts) => {
positions: null,
render_elem: 'map',
aircraft_icon: '/assets/img/acars/aircraft.png',
flown_route_color: ACTUAL_ROUTE_COLOR,
units: 'nmi',
}, _opts);
@ -76,7 +77,7 @@ export default (_opts) => {
layerSelFlight = new L.Geodesic([], {
weight: 5,
opacity: 0.9,
color: ACTUAL_ROUTE_COLOR,
color: opts.flown_route_color,
wrap: false,
}).addTo(map);

View File

@ -27,20 +27,6 @@ export const onFeaturePointClick = (feature, layer) => {
layer.bindPopup(popup_html);
};
/**
* Show each point as a marker
* @param feature
* @param latlng
* @returns {*}
*/
export const pointToLayer = (feature, latlng) => leaflet.circleMarker(latlng, {
radius: 5,
fillColor: CIRCLE_COLOR,
color: '#000',
weight: 1,
opacity: 1,
fillOpacity: 0.8,
});
/**
*
@ -57,12 +43,30 @@ export default (_opts) => {
live_map: false,
aircraft_icon: '/assets/img/acars/aircraft.png',
refresh_interval: 10,
flown_route_color: ACTUAL_ROUTE_COLOR,
circle_color: CIRCLE_COLOR,
flightplan_route_color: PLAN_ROUTE_COLOR,
metar_wms: {
url: '',
params: {},
},
}, _opts);
/**
* Show each point as a marker
* @param feature
* @param latlng
* @returns {*}
*/
const pointToLayer = (feature, latlng) => leaflet.circleMarker(latlng, {
radius: 5,
fillColor: opts.circle_color,
color: '#000',
weight: 1,
opacity: 1,
fillOpacity: 0.8,
});
const aircraftIcon = leaflet.icon({
iconUrl: opts.aircraft_icon,
iconSize: [42, 42],
@ -79,7 +83,7 @@ export default (_opts) => {
const plannedRouteLayer = new L.Geodesic([], {
weight: 4,
opacity: 0.9,
color: PLAN_ROUTE_COLOR,
color: opts.flightplan_route_color,
steps: 50,
wrap: false,
}).addTo(map);
@ -98,7 +102,7 @@ export default (_opts) => {
onEachFeature: onFeaturePointClick,
pointToLayer,
style: {
color: PLAN_ROUTE_COLOR,
color: opts.flightplan_route_color,
weight: 3,
opacity: 0.65,
},
@ -115,7 +119,7 @@ export default (_opts) => {
const actualRouteLayer = new L.Geodesic([], {
weight: 3,
opacity: 0.9,
color: ACTUAL_ROUTE_COLOR,
color: opts.flown_route_color,
steps: 50,
wrap: false,
}).addTo(map);
@ -134,7 +138,7 @@ export default (_opts) => {
onEachFeature: onFeaturePointClick,
pointToLayer,
style: {
color: ACTUAL_ROUTE_COLOR,
color: opts.flown_route_color,
weight: 3,
opacity: 0.65,
},

View File

@ -8,6 +8,6 @@ return [
'rejected' => 'Rechazado',
'on_leave' => 'En excedencia',
'suspended' => 'Suspendido',
'deleted' => 'Borrar',
'deleted' => 'Borrado',
],
];

View File

@ -2,11 +2,31 @@
@section('title', 'Aircraft')
@section('actions')
<li><a href="{{ route('admin.aircraft.export') }}"><i class="ti-plus"></i>Export to CSV</a></li>
<li><a href="{{ route('admin.aircraft.import') }}"><i class="ti-plus"></i>Import from CSV</a></li>
{{--<li><a href="{{ url('/admin/subfleets') }}"><i class="ti-files"></i>Subfleets</a></li>--}}
<li><a href="{{ route('admin.aircraft.create') }}?subfleet={{$subfleet_id}}">
<i class="ti-plus"></i>New Aircraft</a>
@if(request()->get('subfleet'))
<li>
<a href="{{ route('admin.aircraft.export') }}{{ '?subfleet='.request()->get('subfleet') }}">
<i class="ti-plus"></i>
Export to CSV (Selected Subfleet Only)
</a>
</li>
@endif
<li>
<a href="{{ route('admin.aircraft.export') }}">
<i class="ti-plus"></i>
Export to CSV
</a>
</li>
<li>
<a href="{{ route('admin.aircraft.import') }}">
<i class="ti-plus"></i>
Import from CSV
</a>
</li>
<li>
<a href="{{ route('admin.aircraft.create') }}?subfleet={{$subfleet_id}}">
<i class="ti-plus"></i>
New Aircraft
</a>
</li>
@endsection
@ -17,4 +37,3 @@
</div>
</div>
@endsection

View File

@ -1,31 +1,32 @@
<div class="row">
<!-- Code Field -->
<div class="form-group col-sm-6">
{{ Form::label('icao', 'Code:') }}&nbsp;<span class="required">*</span>
<div class="form-group col-sm-4">
{{ Form::label('icao', 'ICAO (3LD):') }}&nbsp;<span class="required">*</span>
{{ Form::text('icao', null, ['class' => 'form-control']) }}
<p class="text-danger">{{ $errors->first('icao') }}</p>
</div>
<div class="form-group col-sm-4">
{{ Form::label('iata', 'IATA (2LD):') }}
{{ Form::text('iata', null, ['class' => 'form-control']) }}
<p class="text-danger">{{ $errors->first('iata') }}</p>
</div>
<div class="form-group col-sm-4">
{{ Form::label('callsign', 'Radio Callsign:') }}
{{ Form::text('callsign', null, ['class' => 'form-control']) }}
<p class="text-danger">{{ $errors->first('callsign') }}</p>
</div>
</div>
<!-- Name Field -->
<div class="form-group col-sm-6">
<div class="row">
<div class="form-group col-sm-4">
{{ Form::label('name', 'Name:') }}&nbsp;<span class="required">*</span>
{{ Form::text('name', null, ['class' => 'form-control']) }}
<p class="text-danger">{{ $errors->first('name') }}</p>
</div>
</div>
<div class="row">
<div class="form-group col-sm-6">
{{ Form::label('iata', 'IATA:') }}
{{ Form::text('iata', null, ['class' => 'form-control']) }}
<p class="text-danger">{{ $errors->first('iata') }}</p>
</div>
<div class="form-group col-sm-6">
<div class="form-group col-sm-8">
{{ Form::label('logo', 'Logo URL:') }}
{{ Form::text('logo', null, ['class' => 'form-control']) }}
<p class="text-danger">{{ $errors->first('logo') }}</p>
</div>
</div>
<div class="row">
@ -34,7 +35,6 @@
{{ Form::select('country', $countries, null, ['class' => 'form-control select2' ]) }}
<p class="text-danger">{{ $errors->first('country') }}</p>
</div>
<div class="form-group col-sm-6">
{{ Form::label('active', 'Active:') }}
<br/>
@ -44,8 +44,8 @@
</label>
</div>
</div>
<div class="row">
<!-- Submit Field -->
<div class="form-group col-sm-12">
<div class="pull-right">
{{ Form::button('Save', ['type' => 'submit', 'class' => 'btn btn-success']) }}

View File

@ -100,7 +100,13 @@
This is the cost per {{ config('phpvms.internal_units.fuel') }}
@endcomponent
</div>
</div>
<div class="row">
<div class="form-group col-md-12">
{{ Form::label('notes', 'Remarks / Notes:') }}
{{ Form::textarea('notes', null, ['id' => 'editor', 'class' => 'editor', 'style' => 'padding: 5px']) }}
</div>
</div>
<div class="row">
@ -119,3 +125,10 @@
</div>
</div>
</div>
@section('scripts')
@parent
<script src="{{ public_asset('assets/vendor/ckeditor4/ckeditor.js') }}"></script>
<script>
$(document).ready(function () { CKEDITOR.replace('editor'); });
</script>
@endsection

View File

@ -4,7 +4,8 @@
<th>ICAO</th>
<th>Name</th>
<th>Location</th>
<th>Hub</th>
<th style="text-align: center;">Hub</th>
<th style="text-align: center;">Notes</th>
<th style="text-align: center;">GH Cost</th>
<th style="text-align: center;">JetA</th>
<th style="text-align: center;">100LL</th>
@ -22,6 +23,11 @@
<span class="label label-success">Hub</span>
@endif
</td>
<td style="text-align: center;">
@if(filled($airport->notes))
<span class="label label-info" title="{{ $airport->notes }}">Notes</span>
@endif
</td>
<td style="text-align: center;">
{{ $airport->ground_handling_cost }}
</td>

View File

@ -6,7 +6,7 @@
the values used come from the subfleet of the aircraft that the flight is
filed with. Only assign the fares you want to override. They can be set as
a monetary amount, or a percentage.
<a href="{{ docs_link('finances') }}" target="_blank">Read documentation about finances</a>.
<a href="https://docs.phpvms.net/guides/finances" target="_blank">Read documentation about finances</a>.
@endcomponent
<p class="text-danger">{{ $errors->first('value') }}</p>

View File

@ -83,22 +83,19 @@
<div class="form-group col-sm-4">
{{ Form::label('load_factor', 'Load Factor:') }}
{{ Form::text('load_factor', null, ['class' => 'form-control']) }}
{{ Form::number('load_factor', null, ['class' => 'form-control', 'min' => 0, 'max' => 100]) }}
<p class="text-danger">{{ $errors->first('load_factor') }}</p>
@component('admin.components.info')
Value between 1 and 100. See
<a href="{{ docs_link('load_factor') }}" target="_blank">docs</a>.
Leave blank to use the default value.
Percentage value for pax/cargo load, leave blank to use the default value.
@endcomponent
</div>
<div class="form-group col-sm-4">
{{ Form::label('load_factor_variance', 'Load Factor Variance:') }}
{{ Form::text('load_factor_variance', null, ['class' => 'form-control']) }}
{{ Form::number('load_factor_variance', null, ['class' => 'form-control', 'min' => 0, 'max' => 100]) }}
<p class="text-danger">{{ $errors->first('load_factor_variance') }}</p>
@component('admin.components.info')
How much the load factor can vary per flight (+ or -). Leave blank to
use the default value.
Percentage of how much the load can vary (+/-), leave blank to use the default value.
@endcomponent
</div>
</div>
@ -273,7 +270,7 @@
<div class="row">
<!-- Active Field -->
<div class="col-sm-4">
<div class="col-sm-3">
<div class="checkbox">
<label class="checkbox-inline">
{{ Form::label('active', 'Active:') }}
@ -282,7 +279,17 @@
</label>
</div>
</div>
<div class="col-8">
<!-- Visible Field -->
<div class="col-sm-3">
<div class="checkbox">
<label class="checkbox-inline">
{{ Form::label('visible', 'Visible:') }}
<input name="visible" type="hidden" value="0" />
{{ Form::checkbox('visible') }}
</label>
</div>
</div>
<div class="col-6">
<div class="text-right">
{{ Form::button('Save', ['type' => 'submit', 'class' => 'btn btn-info']) }}
</div>

View File

@ -9,6 +9,7 @@
<th>Arr Time</th>
<th>Notes</th>
<th style="text-align: center;">Active</th>
<th style="text-align: center;">Visible</th>
<th colspan="3" style="text-align: right;">Action</th>
</thead>
<tbody>
@ -37,6 +38,13 @@
<span class="label label-default">@lang('common.inactive')</span>
@endif
</td>
<td style="text-align: center;">
@if($flight->visible == 1)
<span class="text-success"><i class="fas fa-check fa2x" title="Visible"></i></span>
@else
<span class="text-danger"><i class="fas fa-times fa2x" title="Hidden"></i></span>
@endif
</td>
<td style="text-align: right;">
{{ Form::open(['route' => ['admin.flights.destroy', $flight->id], 'method' => 'delete']) }}
<a href="{{ route('admin.flights.edit', [$flight->id]) }}" class='btn btn-sm btn-success btn-icon'><i

View File

@ -1,12 +1,14 @@
<table class="table table-hover table-responsive" id="roles-table">
<thead>
<th>Name</th>
<th></th>
<th class="text-center">Members</th>
<th class="text-right">Actions</th>
</thead>
<tbody>
@foreach($roles as $role)
<tr>
<td>{{ $role->display_name }}</td>
<td class="text-center">{{ $role->users_count }}</td>
<td class="text-right">
{{ Form::open(['route' => ['admin.roles.destroy', $role->id], 'method' => 'delete']) }}
<a href="{{ route('admin.roles.edit', [$role->id]) }}"

View File

@ -2,15 +2,20 @@
<!-- Code Field -->
<div class="form-group col-sm-12">
<div class="form-container">
<h6><i class="fas fa-users"></i>
&nbsp;Users
<h6>
<i class="fas fa-users mr-2"></i>
@if($users_count > 0) {{ $users_count.' users are assigned to this role' }} @else No Users @endif
</h6>
<div class="form-container-body">
<div class="row">
<div class="col-sm-12">
TO DO
@if($users_count > 0)
<div class="row">
<div class="col-sm-12">
@foreach($users as $u)
&nbsp;&bull;&nbsp;<a href="{{ route('admin.users.edit', [$u->id]) }}">{{ $u->ident.' '.$u->name }}</a>
@endforeach
</div>
</div>
</div>
@endif
</div>
</div>
</div>

View File

@ -16,12 +16,11 @@
{{-- Show the airspace map in the other column --}}
<div class="col-7">
{{ Widget::AirspaceMap([
'width' => '100%',
'height' => '400px',
'lat' => $airport->lat,
'lon' => $airport->lon,
]) }}
{{ Widget::AirspaceMap(['width' => '100%', 'height' => '400px', 'lat' => $airport->lat, 'lon' => $airport->lon]) }}
@if(filled($airport->notes))
<hr>
{!! $airport->notes !!}
@endif
</div>
</div>
<div class="row">

View File

@ -12,6 +12,8 @@
route_points: {!! json_encode($map_features['route_points']) !!},
planned_route_line: {!! json_encode($map_features['planned_route_line']) !!},
metar_wms: {!! json_encode(config('map.metar_wms')) !!},
circle_color: '#056093',
flightplan_route_color: '#8B008B',
});
</script>
@endsection

View File

@ -213,43 +213,16 @@
<h6><i class="fas fa-info-circle"></i>&nbsp;Prefile ATC Flight Plan</h6>
<div class="form-container-body">
<div class="row">
<div class="col-4" align="center">
<form action="https://fpl.ivao.aero/api/fp/load" method="POST" target="_blank">
<input type="hidden" name="CALLSIGN" value="{{ $simbrief->xml->atc->callsign }}"/>
<input type="hidden" name="RULES" value="I"/>
<input type="hidden" name="FLIGHTTYPE" value="N"/>
<input type="hidden" name="NUMBER" value="1"/>
<input type="hidden" name="ACTYPE" value="{{ $simbrief->xml->aircraft->icaocode }}"/>
<input type="hidden" name="WAKECAT" value="{{ $wakecat }}"/>
<input type="hidden" name="EQUIPMENT" value="{{ $equipment }}"/>
<input type="hidden" name="TRANSPONDER" value="{{ $transponder }}"/>
<input type="hidden" name="DEPICAO" value="{{ $simbrief->xml->origin->icao_code}}"/>
<input type="hidden" name="DEPTIME" value="{{ date('Hi', $simbrief->xml->times->est_out->__toString()) }}"/>
<input type="hidden" name="SPEEDTYPE" value="{{ $simbrief->xml->atc->initial_spd_unit }}"/>
<input type="hidden" name="SPEED" value="{{ $simbrief->xml->atc->initial_spd }}"/>
<input type="hidden" name="LEVELTYPE" value="{{ $simbrief->xml->atc->initial_alt_unit }}"/>
<input type="hidden" name="LEVEL" value="{{ $simbrief->xml->atc->initial_alt }}"/>
<input type="hidden" name="ROUTE" value="{{ $simbrief->xml->general->route_ifps }}"/>
<input type="hidden" name="DESTICAO" value="{{ $simbrief->xml->destination->icao_code }}"/>
<input type="hidden" name="EET" value="@secstohhmm($simbrief->xml->times->est_time_enroute)"/>
<input type="hidden" name="ALTICAO" value="{{ $simbrief->xml->alternate->icao_code}}"/>
<input type="hidden" name="ALTICAO2" value="{{ $simbrief->xml->alternate2->icao_code}}"/>
<input type="hidden" name="OTHER" value="{{ $simbrief->xml->atc->section18 }}"/>
<input type="hidden" name="ENDURANCE" value="@secstohhmm($simbrief->xml->times->endurance)"/>
<input type="hidden" name="POB" value="{{ $simbrief->xml->weights->pax_count }}"/>
<input id="ivao_prefile" type="submit" class="btn btn-primary" value="File ATC on IVAO"/>
</form>
<div class="col-3" align="center">
<a href="{{ $simbrief->xml->prefile->ivao->link }}" target="_blank" class="btn btn-info">File > IVAO</a>
</div>
<div class="col-4" align="center">
<form action="https://my.vatsim.net/pilots/flightplan" method="GET" target="_blank">
<input type="hidden" name="raw" value="{{ $simbrief->xml->atc->flightplan_text }}">
<input type="hidden" name="fuel_time" value="@secstohhmm($simbrief->xml->times->endurance)">
<input type="hidden" name="speed" value="@if(substr($simbrief->xml->atc->initial_spd,0,1) === '0') {{ substr($simbrief->xml->atc->initial_spd,1) }} @else {{ $simbrief->xml->atc->initial_spd }} @endif">
<input type="hidden" name="altitude" value="{{ $simbrief->xml->general->initial_altitude }}">
<input id="vatsim_prefile" type="submit" class="btn btn-primary" value="File ATC on VATSIM"/>
</form>
<div class="col-3" align="center">
<a href="{{ $simbrief->xml->prefile->vatsim->link }}" target="_blank" class="btn btn-info">File > VATSIM</a>
</div>
<div class="col-4" align="center">
<div class="col-3" align="center">
<a href="{{ $simbrief->xml->prefile->poscon->link }}" target="_blank" class="btn btn-info">File > POSCON</a>
</div>
<div class="col-3" align="center">
<a
href="http://skyvector.com/?chart=304&amp;fpl={{ $simbrief->xml->origin->icao_code}} {{ $simbrief->xml->general->route }} {{ $simbrief->xml->destination->icao_code}}"
target="_blank" class="btn btn-info">View Route At SkyVector</a>

View File

@ -127,7 +127,7 @@
</div>
{{-- Prepare Form Fields For SimBrief --}}
<input type="hidden" name="acdata" value="{'paxwgt':{{ round($pax_weight + $bag_weight) }}}">
<input type="hidden" name="acdata" value="{'paxwgt':{{ round($pax_weight) }}, 'bagwgt': {{ round($bag_weight) }}}">
@if($tpaxfig)
<input type="hidden" name="pax" value="{{ $tpaxfig }}">
@elseif(!$tpaxfig && $tcargoload)

View File

@ -15,9 +15,12 @@
actual_route_line: {!! json_encode($map_features['actual_route_line']) !!},
actual_route_points: {!! json_encode($map_features['actual_route_points']) !!},
aircraft_icon: '{!! public_asset('/assets/img/acars/aircraft.png') !!}',
flown_route_color: '#067ec1',
circle_color: '#056093',
flightplan_route_color: '#8B008B',
leafletOptions: {
scrollWheelZoom: false,
}
},
});
</script>
@endsection

View File

@ -72,16 +72,18 @@
</div>
</div>
<div class="row">
<div class="col-12">
<div class="progress" style="margin: 20px 0;">
<div class="progress-bar progress-bar-success" role="progressbar"
aria-valuenow="40" aria-valuemin="0" aria-valuemax="100"
style="width: {{$pirep->progress_percent}}%;">
@if(!empty($pirep->distance))
<div class="row">
<div class="col-12">
<div class="progress" style="margin: 20px 0;">
<div class="progress-bar progress-bar-success" role="progressbar"
aria-valuenow="40" aria-valuemin="0" aria-valuemax="100"
style="width: {{$pirep->progress_percent}}%;">
</div>
</div>
</div>
</div>
</div>
@endif
<div class="row">
<div class="col-12">

View File

@ -116,6 +116,7 @@ and being mindful of the rivets bindings
aircraft_icon: '{!! public_asset('/assets/img/acars/aircraft.png') !!}',
refresh_interval: {{ setting('acars.update_interval', 60) }},
units: '{{ setting('units.distance') }}',
flown_route_color: '#067ec1',
leafletOptions: {
scrollWheelZoom: false,
}

View File

@ -712,20 +712,20 @@ class FinanceTest extends TestCase
$journalRepo->post(
$journal,
Money::createFromAmount(100),
Money::createFromAmount(100.5),
null,
$user
);
$balance = $journalRepo->getBalance($journal);
$this->assertEquals(100, $balance->getValue());
$this->assertEquals(100, $journal->balance->getValue());
$this->assertEquals(100.5, $balance->getValue());
$this->assertEquals(100.5, $journal->balance->getValue());
// add another transaction
$journalRepo->post(
$journal,
Money::createFromAmount(25),
Money::createFromAmount(24.5),
null,
$user
);
@ -912,7 +912,7 @@ class FinanceTest extends TestCase
// $this->assertCount(9, $transactions['transactions']);
$this->assertEquals(3020, $transactions['credits']->getValue());
$this->assertEquals(2050.0, $transactions['debits']->getValue());
$this->assertEquals(2050.4, $transactions['debits']->getValue());
// Check that all the different transaction types are there
// test by the different groups that exist
@ -967,7 +967,7 @@ class FinanceTest extends TestCase
// $this->assertCount(9, $transactions['transactions']);
$this->assertEquals(3020, $transactions['credits']->getValue());
$this->assertEquals(2050.0, $transactions['debits']->getValue());
$this->assertEquals(2050.4, $transactions['debits']->getValue());
// Check that all the different transaction types are there
// test by the different groups that exist
@ -1006,7 +1006,7 @@ class FinanceTest extends TestCase
$transactions = $journalRepo->getAllForObject($pirep2);
$this->assertEquals(3020, $transactions['credits']->getValue());
$this->assertEquals(2150.0, $transactions['debits']->getValue());
$this->assertEquals(2150.4, $transactions['debits']->getValue());
// Check that all the different transaction types are there
// test by the different groups that exist
@ -1115,6 +1115,6 @@ class FinanceTest extends TestCase
// $this->assertCount(9, $transactions['transactions']);
$this->assertEquals(3020, $transactions['credits']->getValue());
$this->assertEquals(2050.0, $transactions['debits']->getValue());
$this->assertEquals(2050.4, $transactions['debits']->getValue());
}
}

View File

@ -670,6 +670,7 @@ class ImporterTest extends TestCase
$this->assertEquals('-97.6699', $airport->lon);
$this->assertEquals(0.0, $airport->ground_handling_cost);
$this->assertEquals(setting('airports.default_jet_a_fuel_cost'), $airport->fuel_jeta_cost);
$this->assertEquals('Test Note', $airport->notes);
// See if it imported
$airport = Airport::where([

View File

@ -1,4 +1,4 @@
icao,iata,name,location,country,timezone,hub,lat,lon,ground_handling_cost,fuel_100ll_cost,fuel_jeta_cost,fuel_mogas_cost
KAUS,AUS,Austin-Bergstrom,"Austin, Texas, USA", United States,America/Chicago,1,30.1945,-97.6699,0,,,
KSFO,SFO,San Francisco,"San Francisco, California, USA", United States,America/California,1,30.1945,-97.6699,,,0.9,
KJFK,JFK,Kennedy,"Queens, New York, USA", United States,America/New_York,0,30.1945,abcd,150,,0.8,
icao,iata,name,location,country,timezone,hub,lat,lon,ground_handling_cost,fuel_100ll_cost,fuel_jeta_cost,fuel_mogas_cost,notes
KAUS,AUS,Austin-Bergstrom,"Austin, Texas, USA", United States,America/Chicago,1,30.1945,-97.6699,0,,,,"Test Note"
KSFO,SFO,San Francisco,"San Francisco, California, USA", United States,America/California,1,30.1945,-97.6699,,,0.9,,
KJFK,JFK,Kennedy,"Queens, New York, USA", United States,America/New_York,0,30.1945,abcd,150,,0.8,,"Busy Airport"

1 icao iata name location country timezone hub lat lon ground_handling_cost fuel_100ll_cost fuel_jeta_cost fuel_mogas_cost notes
2 KAUS AUS Austin-Bergstrom Austin, Texas, USA United States America/Chicago 1 30.1945 -97.6699 0 Test Note
3 KSFO SFO San Francisco San Francisco, California, USA United States America/California 1 30.1945 -97.6699 0.9
4 KJFK JFK Kennedy Queens, New York, USA United States America/New_York 0 30.1945 abcd 150 0.8 Busy Airport

View File

@ -1,10 +1,10 @@
icao,iata,name,location,country,timezone,hub,lat,lon,ground_handling_cost,fuel_100ll_cost,fuel_jeta_cost,fuel_mogas_cost
EGLL,LHR,"London Heathrow","London, England",,Europe/London,,51.4775,-0.4614,500,0,0,0
KAUS,AUS,Austin-Bergstrom,"Austin, Texas, USA","United States",America/Chicago,1,30.1945,-97.6699,0,0,0,0
KJFK,JFK,"John F Kennedy","New York, New York, USA","United States",America/New_York,1,40.6399,-73.7787,250,0,0,0
KPAE,PAE,"Snohomish County (Paine Field) Airport",Everett,"United States",America/Los_Angeles,,47.9063,-122.282,0,0,0,0
KSEA,SEA,"Seattle Tacoma International Airport",Seattle,"United States",America/Los_Angeles,,47.449,-122.309,0,0,0,0
LEMD,MAD,"Adolfo Suárez MadridBarajas Airport",Madrid,Spain,Europe/Madrid,,40.4719,-3.5626,,0,0,0
MKJP,KIN,"Norman Manley International Airport","Kingston, Jamaica",,America/Jamaica,,17.9357,-76.7875,50,0,0,0
MWCR,GCM,"Owen Roberts International Airport",Georgetown,Cayman,America/Cayman,,19.2928,-81.3577,50,0,0,0
OMDB,DXB,"Dubai International Airport","Dubai, UAE",,Asia/Dubai,,25.2528,55.3644,50,0,0,0
icao,iata,name,location,country,timezone,hub,lat,lon,ground_handling_cost,fuel_100ll_cost,fuel_jeta_cost,fuel_mogas_cost,notes
EGLL,LHR,"London Heathrow","London, England",,Europe/London,,51.4775,-0.4614,500,0,0,0,
KAUS,AUS,Austin-Bergstrom,"Austin, Texas, USA","United States",America/Chicago,1,30.1945,-97.6699,0,0,0,0,"Test Note"
KJFK,JFK,"John F Kennedy","New York, New York, USA","United States",America/New_York,1,40.6399,-73.7787,250,0,0,0,"Busy Airport"
KPAE,PAE,"Snohomish County (Paine Field) Airport",Everett,"United States",America/Los_Angeles,,47.9063,-122.282,0,0,0,0,
KSEA,SEA,"Seattle Tacoma International Airport",Seattle,"United States",America/Los_Angeles,,47.449,-122.309,0,0,0,0,
LEMD,MAD,"Adolfo Suárez MadridBarajas Airport",Madrid,Spain,Europe/Madrid,,40.4719,-3.5626,,0,0,0,
MKJP,KIN,"Norman Manley International Airport","Kingston, Jamaica",,America/Jamaica,,17.9357,-76.7875,50,0,0,0,
MWCR,GCM,"Owen Roberts International Airport",Georgetown,Cayman,America/Cayman,,19.2928,-81.3577,50,0,0,0,
OMDB,DXB,"Dubai International Airport","Dubai, UAE",,Asia/Dubai,,25.2528,55.3644,50,0,0,0,

1 icao iata name location country timezone hub lat lon ground_handling_cost fuel_100ll_cost fuel_jeta_cost fuel_mogas_cost notes
2 EGLL LHR London Heathrow London, England Europe/London 51.4775 -0.4614 500 0 0 0
3 KAUS AUS Austin-Bergstrom Austin, Texas, USA United States America/Chicago 1 30.1945 -97.6699 0 0 0 0 Test Note
4 KJFK JFK John F Kennedy New York, New York, USA United States America/New_York 1 40.6399 -73.7787 250 0 0 0 Busy Airport
5 KPAE PAE Snohomish County (Paine Field) Airport Everett United States America/Los_Angeles 47.9063 -122.282 0 0 0 0
6 KSEA SEA Seattle Tacoma International Airport Seattle United States America/Los_Angeles 47.449 -122.309 0 0 0 0
7 LEMD MAD Adolfo Suárez Madrid–Barajas Airport Madrid Spain Europe/Madrid 40.4719 -3.5626 0 0 0
8 MKJP KIN Norman Manley International Airport Kingston, Jamaica America/Jamaica 17.9357 -76.7875 50 0 0 0
9 MWCR GCM Owen Roberts International Airport Georgetown Cayman America/Cayman 19.2928 -81.3577 50 0 0 0
10 OMDB DXB Dubai International Airport Dubai, UAE Asia/Dubai 25.2528 55.3644 50 0 0 0