diff --git a/README.md b/README.md
index aa6ccbb..b495ab0 100644
--- a/README.md
+++ b/README.md
@@ -26,3 +26,15 @@
## ExamTyperatingAnswer
- BelongsTo ExamTyperatingQuestion
+
+## ExamMemberRank
+
+- BelongsTo MemberRank
+- **TODO** BelongsTo Member (External DB)
+- **TODO** HasMany ExamMemberRankQuestion
+
+## ExamTyperating
+
+- BelongsTo Typerating
+- **TODO** BelongsTo Member (External DB)
+- **TODO** HasMany ExamTyperatingQuestion
diff --git a/controllers/ExamMemberRank.php b/controllers/ExamMemberRank.php
new file mode 100644
index 0000000..d468caa
--- /dev/null
+++ b/controllers/ExamMemberRank.php
@@ -0,0 +1,21 @@
+where('member_rank_id', '<>', null);
+ }
+}
diff --git a/controllers/ExamTyperating.php b/controllers/ExamTyperating.php
new file mode 100644
index 0000000..ec5425f
--- /dev/null
+++ b/controllers/ExamTyperating.php
@@ -0,0 +1,21 @@
+where('typerating_id', '<>', null);
+ }
+}
diff --git a/controllers/exammemberrank/_list_toolbar.htm b/controllers/exammemberrank/_list_toolbar.htm
new file mode 100644
index 0000000..c651229
--- /dev/null
+++ b/controllers/exammemberrank/_list_toolbar.htm
@@ -0,0 +1,17 @@
+
+
+
diff --git a/controllers/exammemberrank/config_list.yaml b/controllers/exammemberrank/config_list.yaml
new file mode 100644
index 0000000..8a38fda
--- /dev/null
+++ b/controllers/exammemberrank/config_list.yaml
@@ -0,0 +1,11 @@
+list: $/germanairlinesva/schooling/models/exammemberrank/columns.yaml
+modelClass: GermanAirlinesVa\Schooling\Models\ExamMemberRank
+title: Exams Member Rank
+noRecordsMessage: 'backend::lang.list.no_records'
+showSetup: true
+showCheckboxes: true
+recordsPerPage: 20
+toolbar:
+ buttons: list_toolbar
+ search:
+ prompt: 'backend::lang.list.search_prompt'
diff --git a/controllers/exammemberrank/index.htm b/controllers/exammemberrank/index.htm
new file mode 100644
index 0000000..ea43a36
--- /dev/null
+++ b/controllers/exammemberrank/index.htm
@@ -0,0 +1 @@
+= $this->listRender() ?>
diff --git a/controllers/examtyperating/_list_toolbar.htm b/controllers/examtyperating/_list_toolbar.htm
new file mode 100644
index 0000000..c651229
--- /dev/null
+++ b/controllers/examtyperating/_list_toolbar.htm
@@ -0,0 +1,17 @@
+
+
+
diff --git a/controllers/examtyperating/config_list.yaml b/controllers/examtyperating/config_list.yaml
new file mode 100644
index 0000000..c3ac8a8
--- /dev/null
+++ b/controllers/examtyperating/config_list.yaml
@@ -0,0 +1,11 @@
+list: $/germanairlinesva/schooling/models/examtyperating/columns.yaml
+modelClass: GermanAirlinesVa\Schooling\Models\ExamTyperating
+title: Exams Typerating
+noRecordsMessage: 'backend::lang.list.no_records'
+showSetup: true
+showCheckboxes: true
+recordsPerPage: 20
+toolbar:
+ buttons: list_toolbar
+ search:
+ prompt: 'backend::lang.list.search_prompt'
diff --git a/controllers/examtyperating/index.htm b/controllers/examtyperating/index.htm
new file mode 100644
index 0000000..ea43a36
--- /dev/null
+++ b/controllers/examtyperating/index.htm
@@ -0,0 +1 @@
+= $this->listRender() ?>
diff --git a/lang/en/lang.php b/lang/en/lang.php
index 4943086..3d9eaff 100644
--- a/lang/en/lang.php
+++ b/lang/en/lang.php
@@ -15,6 +15,8 @@
'exam_question_typerating' => 'Exam Typerating Questions',
'exam_answer_rank' => 'Exam Member Rank Answers',
'exam_answer_typerating' => 'Exam Typerating Answers',
+ 'exam_member_rank' => 'Exams Member Rank',
+ 'exam_typerating' => 'Exams Typerating',
],
'permissions' => [
'tab' => 'German Airlines VA - Schooling',
diff --git a/models/ExamMemberRank.php b/models/ExamMemberRank.php
new file mode 100644
index 0000000..dcaae07
--- /dev/null
+++ b/models/ExamMemberRank.php
@@ -0,0 +1,37 @@
+ 'required',
+ 'member_rank_id' => 'required',
+ 'start' => 'required',
+ 'status' => 'required',
+ ];
+
+ public $belongsTo = [
+ 'member_rank' => 'GermanAirlinesVa\Schooling\Models\MemberRank',
+ ];
+}
diff --git a/models/ExamTyperating.php b/models/ExamTyperating.php
new file mode 100644
index 0000000..6603279
--- /dev/null
+++ b/models/ExamTyperating.php
@@ -0,0 +1,37 @@
+ 'required',
+ 'typerating_id' => 'required',
+ 'start' => 'required',
+ 'status' => 'required',
+ ];
+
+ public $belongsTo = [
+ 'typerating' => 'GermanAirlinesVa\Schooling\Models\Typerating',
+ ];
+}
diff --git a/models/ExamTyperatingQuestion.php b/models/ExamTyperatingQuestion.php
index 1df7d8a..0fbded9 100644
--- a/models/ExamTyperatingQuestion.php
+++ b/models/ExamTyperatingQuestion.php
@@ -31,6 +31,10 @@ class ExamTyperatingQuestion extends Model
'text' => 'required',
];
+ public $hasMany = [
+ 'exam_answers' => 'GermanAirlinesVa\Schooling\Models\ExamTyperatingAnswer',
+ ];
+
public $belongsTo = [
'typerating' => 'GermanAirlinesVa\Schooling\Models\Typerating',
];
diff --git a/models/exammemberrank/columns.yaml b/models/exammemberrank/columns.yaml
new file mode 100644
index 0000000..a43f2f9
--- /dev/null
+++ b/models/exammemberrank/columns.yaml
@@ -0,0 +1,18 @@
+columns:
+ id:
+ label: id
+ type: number
+ member_id:
+ label: member_id
+ type: number
+ member_rank:
+ label: member_rank
+ type: text
+ relation: member_rank
+ valueFrom: name
+ start:
+ label: start
+ type: datetime
+ status:
+ label: status
+ type: text
diff --git a/models/examtyperating/columns.yaml b/models/examtyperating/columns.yaml
new file mode 100644
index 0000000..aa525fb
--- /dev/null
+++ b/models/examtyperating/columns.yaml
@@ -0,0 +1,18 @@
+columns:
+ id:
+ label: id
+ type: number
+ member_id:
+ label: member_id
+ type: number
+ typerating:
+ label: typerating
+ type: text
+ relation: typerating
+ valueFrom: name
+ start:
+ label: start
+ type: datetime
+ status:
+ label: status
+ type: text
diff --git a/plugin.yaml b/plugin.yaml
index 7b273f4..98be21c 100644
--- a/plugin.yaml
+++ b/plugin.yaml
@@ -36,6 +36,14 @@ navigation:
label: 'germanairlinesva.schooling::lang.menu.exam_answer_typerating'
url: germanairlinesva/schooling/examtyperatinganswer
icon: icon-check
+ side-menu-item7:
+ label: 'germanairlinesva.schooling::lang.menu.exam_member_rank'
+ url: germanairlinesva/schooling/exammemberrank
+ icon: icon-file-text
+ side-menu-item8:
+ label: 'germanairlinesva.schooling::lang.menu.exam_typerating'
+ url: germanairlinesva/schooling/examtyperating
+ icon: icon-file-text
permissions:
schooling:
tab: 'germanairlinesva.schooling::lang.permissions.tab'
diff --git a/updates/builder_table_create_exams.php b/updates/builder_table_create_exams.php
new file mode 100644
index 0000000..3a29f89
--- /dev/null
+++ b/updates/builder_table_create_exams.php
@@ -0,0 +1,40 @@
+create('exams', function ($table) {
+ $table->engine = 'InnoDB';
+ $table->bigIncrements('id')->unsigned();
+ $table->bigInteger('member_id')->unsigned();
+ $table
+ ->bigInteger('member_rank_id')
+ ->unsigned()
+ ->nullable();
+ $table
+ ->foreign('member_rank_id')
+ ->references('id')
+ ->on('member_ranks');
+ $table
+ ->bigInteger('typerating_id')
+ ->unsigned()
+ ->nullable();
+ $table
+ ->foreign('typerating_id')
+ ->references('id')
+ ->on('typeratings');
+ $table->datetime('start')->default(DB::raw('NOW()'));
+ $table->enum('status', ['pending', 'validated', 'closed', 'open']);
+ });
+ }
+
+ public function down()
+ {
+ Schema::connection('germanairlinesva_schooling')->dropIfExists('exams');
+ }
+}
diff --git a/updates/version.yaml b/updates/version.yaml
index cbac02d..ca30741 100644
--- a/updates/version.yaml
+++ b/updates/version.yaml
@@ -11,3 +11,5 @@
- builder_table_create_exam_questions.php
- 'Created table exam_answers'
- builder_table_create_exam_answers.php
+ - 'Created table exams'
+ - builder_table_create_exams.php