diff --git a/README.md b/README.md
index b50134a..7dae7d4 100644
--- a/README.md
+++ b/README.md
@@ -3,3 +3,9 @@
## Airport
- HasMany Aircraft (2x, External DB)
+- BelongsToMany Airport (Defined via Alternate)
+
+
+## Alternate
+
+- BelongsTo Airport (2x)
diff --git a/controllers/Alternate.php b/controllers/Alternate.php
new file mode 100644
index 0000000..b0f91fc
--- /dev/null
+++ b/controllers/Alternate.php
@@ -0,0 +1,17 @@
+
+ = e(trans('backend::lang.form.create')) ?>
+
+
diff --git a/controllers/alternate/config_form.yaml b/controllers/alternate/config_form.yaml
new file mode 100644
index 0000000..ce7c631
--- /dev/null
+++ b/controllers/alternate/config_form.yaml
@@ -0,0 +1,10 @@
+name: Alternate
+form: $/germanairlinesva/routes/models/alternate/fields.yaml
+modelClass: GermanAirlinesVa\Routes\Models\Alternate
+defaultRedirect: germanairlinesva/routes/alternate
+create:
+ redirect: 'germanairlinesva/routes/alternate/update/:id'
+ redirectClose: germanairlinesva/routes/alternate
+update:
+ redirect: germanairlinesva/routes/alternate
+ redirectClose: germanairlinesva/routes/alternate
diff --git a/controllers/alternate/config_list.yaml b/controllers/alternate/config_list.yaml
new file mode 100644
index 0000000..431dc67
--- /dev/null
+++ b/controllers/alternate/config_list.yaml
@@ -0,0 +1,12 @@
+list: $/germanairlinesva/routes/models/alternate/columns.yaml
+modelClass: GermanAirlinesVa\Routes\Models\Alternate
+title: Alternates
+noRecordsMessage: 'backend::lang.list.no_records'
+showSetup: true
+showCheckboxes: true
+recordsPerPage: 20
+toolbar:
+ buttons: list_toolbar
+ search:
+ prompt: 'backend::lang.list.search_prompt'
+recordUrl: 'germanairlinesva/routes/alternate/update/:id'
diff --git a/controllers/alternate/create.htm b/controllers/alternate/create.htm
new file mode 100644
index 0000000..47abfb4
--- /dev/null
+++ b/controllers/alternate/create.htm
@@ -0,0 +1,46 @@
+
+
+
+
+fatalError): ?>
+
+ = Form::open(['class' => 'layout']) ?>
+
+
+ = $this->formRender() ?>
+
+
+
+
+ = Form::close() ?>
+
+
+ = e(trans($this->fatalError)) ?>
+ = e(trans('backend::lang.form.return_to_list')) ?>
+
diff --git a/controllers/alternate/index.htm b/controllers/alternate/index.htm
new file mode 100644
index 0000000..ea43a36
--- /dev/null
+++ b/controllers/alternate/index.htm
@@ -0,0 +1 @@
+= $this->listRender() ?>
diff --git a/controllers/alternate/preview.htm b/controllers/alternate/preview.htm
new file mode 100644
index 0000000..1e7ddf1
--- /dev/null
+++ b/controllers/alternate/preview.htm
@@ -0,0 +1,22 @@
+
+
+
+
+fatalError): ?>
+
+
+ = $this->formRenderPreview() ?>
+
+
+
+ = e($this->fatalError) ?>
+
+
+
+
+ = e(trans('backend::lang.form.return_to_list')) ?>
+
+
diff --git a/controllers/alternate/update.htm b/controllers/alternate/update.htm
new file mode 100644
index 0000000..6cad925
--- /dev/null
+++ b/controllers/alternate/update.htm
@@ -0,0 +1,54 @@
+
+
+
+
+fatalError): ?>
+
+ = Form::open(['class' => 'layout']) ?>
+
+
+ = $this->formRender() ?>
+
+
+
+ = Form::close() ?>
+
+
+ = e(trans($this->fatalError)) ?>
+ = e(trans('backend::lang.form.return_to_list')) ?>
+
diff --git a/lang/en/lang.php b/lang/en/lang.php
index c14d4ee..aac03be 100644
--- a/lang/en/lang.php
+++ b/lang/en/lang.php
@@ -24,4 +24,9 @@
'routes' => 'Manage Routes',
],
],
+ 'alternates' => [
+ 'airport' => 'Airport',
+ 'alternate' => 'Alternate',
+ 'index' => 'Index',
+ ],
];
diff --git a/models/Airport.php b/models/Airport.php
index 72b9968..e4b7729 100644
--- a/models/Airport.php
+++ b/models/Airport.php
@@ -38,4 +38,13 @@ class Airport extends Model
'based' => ['GermanAirlinesVa\Fleet\Models\Aircraft', 'key' => 'home_airport_id'],
'occupying' => ['GermanAirlinesVa\Fleet\Models\Aircraft', 'key' => 'airport_id'],
];
+
+ public $belongsToMany = [
+ 'alternates' => [
+ 'GermanAirlinesVa\Routes\Models\Airport',
+ 'table' => 'alternates',
+ 'key' => 'airport_id',
+ 'otherKey' => 'alternate_id',
+ ],
+ ];
}
diff --git a/models/Alternate.php b/models/Alternate.php
new file mode 100644
index 0000000..17ff06c
--- /dev/null
+++ b/models/Alternate.php
@@ -0,0 +1,36 @@
+ 'required',
+ 'alternate_id' => 'required',
+ ];
+
+ public $belongsTo = [
+ 'airport' => ['GermanAirlinesVa\Routes\Models\Airport', 'key' => 'airport_id'],
+ 'alternate' => ['GermanAirlinesVa\Routes\Models\Airport', 'key' => 'alternate_id'],
+ ];
+}
diff --git a/models/alternate/columns.yaml b/models/alternate/columns.yaml
new file mode 100644
index 0000000..fedc7ba
--- /dev/null
+++ b/models/alternate/columns.yaml
@@ -0,0 +1,17 @@
+columns:
+ id:
+ label: id
+ type: number
+ airport:
+ label: airport
+ type: text
+ relation: airport
+ valueFrom: icao
+ alternate:
+ label: alternate
+ type: text
+ relation: alternate
+ valueFrom: icao
+ index:
+ label: index
+ type: number
diff --git a/models/alternate/fields.yaml b/models/alternate/fields.yaml
new file mode 100644
index 0000000..8432a61
--- /dev/null
+++ b/models/alternate/fields.yaml
@@ -0,0 +1,21 @@
+fields:
+ airport:
+ label: 'germanairlinesva.routes::lang.alternates.airport'
+ nameFrom: icao
+ descriptionFrom: description
+ span: auto
+ required: 1
+ type: relation
+ alternate:
+ label: 'germanairlinesva.routes::lang.alternates.alternate'
+ nameFrom: icao
+ descriptionFrom: description
+ span: auto
+ required: 1
+ type: relation
+ index:
+ label: 'germanairlinesva.routes::lang.alternates.index'
+ span: auto
+ default: '0'
+ required: 1
+ type: number
diff --git a/updates/builder_table_create_airports.php b/updates/builder_table_create_airports.php
index 43a76fc..3ca566b 100644
--- a/updates/builder_table_create_airports.php
+++ b/updates/builder_table_create_airports.php
@@ -33,6 +33,8 @@ class BuilderTableCreateAirports extends Migration
public function down()
{
+ Schema::connection('germanairlinesva_routes')->disableForeignKeyConstraints();
Schema::connection('germanairlinesva_routes')->dropIfExists('airports');
+ Schema::connection('germanairlinesva_routes')->enableForeignKeyConstraints();
}
}
diff --git a/updates/builder_table_create_alternates.php b/updates/builder_table_create_alternates.php
new file mode 100644
index 0000000..34c947e
--- /dev/null
+++ b/updates/builder_table_create_alternates.php
@@ -0,0 +1,36 @@
+create('alternates', function ($table) {
+ $table->engine = 'InnoDB';
+ $table->bigIncrements('id')->unsigned();
+ $table->bigInteger('airport_id')->unsigned();
+ $table
+ ->foreign('airport_id')
+ ->references('id')
+ ->on('airports');
+ $table->bigInteger('alternate_id')->unsigned();
+ $table
+ ->foreign('alternate_id')
+ ->references('id')
+ ->on('airports');
+ $table
+ ->integer('index')
+ ->unsigned()
+ ->default(0);
+ });
+ }
+
+ public function down()
+ {
+ Schema::connection('germanairlinesva_routes')->enableForeignKeyConstraints();
+ Schema::connection('germanairlinesva_routes')->dropIfExists('alternates');
+ Schema::connection('germanairlinesva_routes')->enableForeignKeyConstraints();
+ }
+}
diff --git a/updates/version.yaml b/updates/version.yaml
index f0b4938..d0a175f 100644
--- a/updates/version.yaml
+++ b/updates/version.yaml
@@ -5,3 +5,5 @@
1.0.2:
- 'Create table airports'
- builder_table_create_airports.php
+ - 'Create table alternates'
+ - builder_table_create_alternates.php
diff --git a/yarn.lock b/yarn.lock
index afc768a..df5d0a6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -41,9 +41,9 @@ p-defer@^1.0.0:
resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
-"php-parser@git+https://github.com/glayzzle/php-parser.git#e61e26102144f267ecf5e09020865a9baa6ca2f1":
+"php-parser@https://github.com/glayzzle/php-parser#e61e26102144f267ecf5e09020865a9baa6ca2f1":
version "3.0.2"
- resolved "git+https://github.com/glayzzle/php-parser.git#e61e26102144f267ecf5e09020865a9baa6ca2f1"
+ resolved "https://github.com/glayzzle/php-parser#e61e26102144f267ecf5e09020865a9baa6ca2f1"
prettier@^2.3.0:
version "2.3.2"