From c1a0e2eb64b6761be5d126ba4a4dc49397a96856 Mon Sep 17 00:00:00 2001
From: "de@itstall.de" <de@itstall.de>
Date: Mon, 5 Mar 2018 20:39:39 +0100
Subject: [PATCH] Added clubs, reports, add keys, and some more stuff

---
 application/controllers/admin/Clubs.php       |  72 +++++++++
 application/controllers/admin/Dashboard.php   |   7 +
 application/controllers/admin/Guests.php      | 105 +++++++++---
 application/controllers/admin/Keys.php        |  23 ++-
 application/controllers/admin/Members.php     |  21 ++-
 application/controllers/admin/Reports.php     |  12 ++
 application/helpers/data_helper.php           |   4 +
 application/models/admin/Clubs_model.php      |  28 ++++
 application/models/admin/Dashboard_model.php  |  24 +++
 application/models/admin/Guests_model.php     |  50 +++++-
 application/models/admin/Keys_model.php       |  15 +-
 application/models/admin/Logging_model.php    |  12 ++
 application/models/admin/Reports_model.php    |  23 ++-
 application/views/admin/clubs/clubs_add.php   |  81 ++++++++++
 .../clubs_edit.php}                           |  18 +--
 .../clubs_list.php}                           |   8 +-
 application/views/admin/dashboard/index.php   | 153 +++++++++++++++++-
 application/views/admin/guests/guests_add.php |   6 +-
 .../views/admin/guests/guests_edit.php        | 125 ++++++++++++++
 .../views/admin/guests/guests_list.php        |  46 ++++--
 .../views/admin/guests/guests_visit_add.php   |  57 +++++++
 .../admin/guests/guests_visit_add_event.php   |  39 +++++
 application/views/admin/include/sidebar.php   |  34 ++--
 application/views/admin/keys/keys_add.php     | 120 +-------------
 application/views/admin/keys/keys_list.php    |   9 +-
 .../views/admin/members/member_add.php        |   6 +
 .../views/admin/members/member_edit.php       |   8 +-
 .../views/admin/members/member_list.php       |  63 ++++----
 .../views/admin/members/member_view.php       |  30 ++--
 application/views/admin/reports/history.php   |  59 +++++++
 .../admin/reports/joined_anniversary.php      |  31 ++++
 public/dist/css/style.css                     |   2 +-
 32 files changed, 1045 insertions(+), 246 deletions(-)
 create mode 100644 application/controllers/admin/Clubs.php
 create mode 100644 application/models/admin/Clubs_model.php
 create mode 100644 application/views/admin/clubs/clubs_add.php
 rename application/views/admin/{guests/guests_clubs_edit.php => clubs/clubs_edit.php} (91%)
 rename application/views/admin/{guests/guests_clubs_list.php => clubs/clubs_list.php} (87%)
 create mode 100644 application/views/admin/guests/guests_edit.php
 create mode 100644 application/views/admin/guests/guests_visit_add.php
 create mode 100644 application/views/admin/guests/guests_visit_add_event.php
 create mode 100644 application/views/admin/reports/history.php
 create mode 100644 application/views/admin/reports/joined_anniversary.php

diff --git a/application/controllers/admin/Clubs.php b/application/controllers/admin/Clubs.php
new file mode 100644
index 0000000..b17e651
--- /dev/null
+++ b/application/controllers/admin/Clubs.php
@@ -0,0 +1,72 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+class Clubs extends MY_Controller {
+
+    public function __construct() {
+        parent::__construct();
+        $this->load->model('admin/clubs_model', 'clubs_model');
+        $this->load->model('admin/logging_model', 'logging_model');
+    }
+    public function index() {
+        $data['clubs'] = $this->clubs_model->get_clubs();
+        $data['title'] = 'Vereins Liste';
+        $data['view'] = 'admin/clubs/clubs_list';
+        $this->load->view('admin/layout', $data);
+    }
+    public function edit($id = 0) {
+        if($this->input->post('submit')) {
+            $data = array(
+                'name' => $this->input->post('name'),
+                'street' => $this->input->post('street'),
+                'zip' => $this->input->post('zip'),
+                'town' => $this->input->post('town'),
+                'phone' => $this->input->post('phone'),
+                'email' => $this->input->post('email'),
+                'executive_firstname' => $this->input->post('executive_firstname'),
+                'executive_lastname' => $this->input->post('executive_lastname'),
+            );
+            $data = $this->security->xss_clean($data);
+            $result = $this->clubs_model->edit($data, $id);
+            if($result) {
+                $this->logging_model->history_write($this->session->userdata('admin_id'), 'edited', 'clubs', $id);
+                $this->session->set_flashdata('msg', 'Verein erfolgreich bearbeitet!');
+                redirect(base_url('admin/clubs/'));
+            }
+        }
+        else {
+            $data['club_data'] = $this->clubs_model->get_club($id);
+            $data['title'] = 'Edit Club';
+            $data['view'] = 'admin/clubs/clubs_edit';
+            $this->load->view('admin/layout', $data);
+        }
+    }
+    public function add() {
+        if($this->input->post('submit')) {
+            $data = array(
+                'name' => $this->input->post('name'),
+                'street' => $this->input->post('street'),
+                'zip' => $this->input->post('zip'),
+                'town' => $this->input->post('town'),
+                'phone' => $this->input->post('phone'),
+                'email' => $this->input->post('email'),
+                'executive_firstname' => $this->input->post('executive_firstname'),
+                'executive_lastname' => $this->input->post('executive_lastname'),
+            );
+            $data = $this->security->xss_clean($data);
+            $result = $this->clubs_model->add($data);
+            if($result) {
+                $this->logging_model->history_write($this->session->userdata('admin_id'), 'added', 'clubs', $result);
+                $this->session->set_flashdata('msg', 'Verein erfolgreich hinzugefügt!');
+                redirect(base_url('admin/clubs'));
+            }
+        }
+        else {
+            $data['clubs'] = $this->clubs_model->get_clubs();
+            $data['title'] = 'Add Club';
+            $data['view'] = 'admin/clubs/clubs_add';
+            $this->load->view('admin/layout', $data);
+        }
+    }
+}
+?>
\ No newline at end of file
diff --git a/application/controllers/admin/Dashboard.php b/application/controllers/admin/Dashboard.php
index 45da0fe..5b8428b 100644
--- a/application/controllers/admin/Dashboard.php
+++ b/application/controllers/admin/Dashboard.php
@@ -5,6 +5,7 @@
 		public function __construct(){
 			parent::__construct();
             $this->load->model('admin/dashboard_model', 'dashboard_model');
+            $this->load->model('admin/logging_model', 'logging_model');
 		}
 		public function index(){
 			$data['title'] = 'Dashboard';
@@ -13,6 +14,12 @@
             $data['keys_count'] = $this->dashboard_model->get_keys_count();
             $data['member_types'] = $this->dashboard_model->get_member_types();
             $data['clubs_count'] = $this->dashboard_model->get_clubs_count();
+            $data['visits_count'] = $this->dashboard_model->get_visits_count();
+            $guests_per_year = $this->dashboard_model->get_guests_per_year("Flugfest");
+            $data['guests_per_year_years'] = json_encode($guests_per_year['years']);
+            $data['guests_per_year_guests'] = json_encode($guests_per_year['guests']);
+            $data['changelog'] = $this->dashboard_model->get_changelog();
+            $data['history'] = $this->logging_model->history_get(10);
 			$data['view'] = 'admin/dashboard/index';
 			$this->load->view('admin/layout', $data);
 		}
diff --git a/application/controllers/admin/Guests.php b/application/controllers/admin/Guests.php
index f39f7c5..ccec588 100644
--- a/application/controllers/admin/Guests.php
+++ b/application/controllers/admin/Guests.php
@@ -8,14 +8,12 @@
 			$this->load->model('admin/guests_model', 'guests_model');
             $this->load->model('admin/logging_model', 'logging_model');
 		}
-
 		public function index() {
 			$data['all_users'] =  $this->guests_model->get_all_guests();
 			$data['title'] = 'Gäste Liste';
 			$data['view'] = 'admin/guests/guests_list';
 			$this->load->view('admin/layout', $data);
 		}
-
 		public function add() {
             if($this->input->post('submit')) {
                 if($this->input->post('birthday')) { $birthday = date_to_default($this->input->post('birthday')); } else { $birthday = null; }
@@ -39,12 +37,47 @@
                     redirect(base_url('admin/guests'));
                 }
             }
-            else{
+            else {
+                $data['clubs'] = $this->guests_model->get_clubs();
                 $data['title'] = 'Add Guest';
                 $data['view'] = 'admin/guests/guests_add';
                 $this->load->view('admin/layout', $data);
             }
         }
+        public function edit($id) {
+            if($this->input->post('submit')) {
+                if($this->input->post('invitation') == 'on') { $invitation = 1; } else { $invitation = 0; }
+                if($this->input->post('birthday')) { $birthday = date_to_default($this->input->post('birthday')); } else { $birthday = null; }
+                $data = array(
+                    'firstname' => $this->input->post('firstname'),
+                    'lastname' => $this->input->post('lastname'),
+                    'street' => $this->input->post('street'),
+                    'zip' => $this->input->post('zip'),
+                    'town' => $this->input->post('town'),
+                    'phone' => $this->input->post('phone'),
+                    'email' => $this->input->post('email'),
+                    'birthday' => $birthday,
+                    'club' => $this->input->post('club'),
+                    'insurance_number' => $this->input->post('insurance_number'),
+                    'invitation' => $invitation,
+                );
+                $data = $this->security->xss_clean($data);
+                $result = $this->guests_model->guest_edit($data, $id);
+                if($result) {
+                    $this->logging_model->history_write($this->session->userdata('admin_id'), 'edited', 'guests', $id);
+                    $this->session->set_flashdata('msg', 'Gast erfolgreich bearbeitet!');
+                    redirect(base_url('admin/guests/'));
+                }
+            }
+            else {
+                $data['guest'] = $this->guests_model->guest_get($id);
+                $data['visits'] = $this->guests_model->guest_get_visits($id);
+                $data['clubs'] = $this->guests_model->get_clubs();
+                $data['title'] = 'Edit User';
+                $data['view'] = 'admin/guests/guests_edit';
+                $this->load->view('admin/layout', $data);
+            }
+        }
         public function clubs_list() {
             $data['clubs'] = $this->guests_model->get_clubs();
             $data['title'] = 'Vereins Liste';
@@ -52,31 +85,51 @@
             $this->load->view('admin/layout', $data);
         }
         public function clubs_edit($id = 0) {
-        if($this->input->post('submit')) {
-            $data = array(
-                'name' => $this->input->post('name'),
-                'street' => $this->input->post('street'),
-                'zip' => $this->input->post('zip'),
-                'town' => $this->input->post('town'),
-                'phone' => $this->input->post('phone'),
-                'email' => $this->input->post('email'),
-                'executive_firstname' => $this->input->post('executive_firstname'),
-                'executive_lastname' => $this->input->post('executive_lastname'),
-            );
-            $data = $this->security->xss_clean($data);
-            $result = $this->guests_model->edit_club($data, $id);
-            if($result) {
-                $this->logging_model->history_write($this->session->userdata('admin_id'), 'edited', 'guests_club', $id);
-                $this->session->set_flashdata('msg', 'Verein erfolgreich bearbeitet!');
-                redirect(base_url('admin/guests/clubs_list/'));
+            if($this->input->post('submit')) {
+                $data = array(
+                    'name' => $this->input->post('name'),
+                    'street' => $this->input->post('street'),
+                    'zip' => $this->input->post('zip'),
+                    'town' => $this->input->post('town'),
+                    'phone' => $this->input->post('phone'),
+                    'email' => $this->input->post('email'),
+                    'executive_firstname' => $this->input->post('executive_firstname'),
+                    'executive_lastname' => $this->input->post('executive_lastname'),
+                );
+                $data = $this->security->xss_clean($data);
+                $result = $this->guests_model->edit_club($data, $id);
+                if($result) {
+                    $this->logging_model->history_write($this->session->userdata('admin_id'), 'edited', 'guests_club', $id);
+                    $this->session->set_flashdata('msg', 'Verein erfolgreich bearbeitet!');
+                    redirect(base_url('admin/guests/clubs_list/'));
+                }
+            }
+            else {
+                $data['club_data'] = $this->guests_model->get_club($id);
+                $data['title'] = 'Edit User';
+                $data['view'] = 'admin/guests/guests_clubs_edit';
+                $this->load->view('admin/layout', $data);
             }
         }
-        else {
-            $data['club_data'] = $this->guests_model->get_club($id);
-            $data['title'] = 'Edit User';
-            $data['view'] = 'admin/guests/guests_clubs_edit';
-            $this->load->view('admin/layout', $data);
+        public function visit_add($event=null) {
+            if (!$event) {
+                if($this->input->post('event')) {
+                    redirect(base_url('admin/guests/visit_add/'.$this->input->post('event')));
+                }
+                $data['title'] = 'Event angeben';
+                $data['view'] = 'admin/guests/guests_visit_add_event';
+                $this->load->view('admin/layout', $data);
+            } else {
+                $data['event'] = $event;
+                $data['guests'] = $this->guests_model->get_event_guests();
+                $data['title'] = 'Besuche eintragen';
+                $data['view'] = 'admin/guests/guests_visit_add';
+                $this->load->view('admin/layout', $data);
+            }
+        }
+        public function visit_add_do($event) {
+		    $this->guests_model->visit_add($event, $this->input->post('guests_id'));
+            redirect(base_url('admin/guests/visit_add/'.$event));
         }
-    }
 	}
 ?>
\ No newline at end of file
diff --git a/application/controllers/admin/Keys.php b/application/controllers/admin/Keys.php
index 9a90433..431c75f 100644
--- a/application/controllers/admin/Keys.php
+++ b/application/controllers/admin/Keys.php
@@ -20,7 +20,8 @@ class Keys extends MY_Controller {
         $data = array(
             'key_number' => $this->input->post('keyid'),
             'member_id' => $this->input->post('member_id'),
-            'key_distribution' => date_to_default($this->input->post('key_distribution'))
+            'key_distribution' => date_to_default($this->input->post('key_distribution')),
+            'key_note' => $this->input->post('key_note'),
         );
         $data = $this->security->xss_clean($data);
         $result = $this->keys_model->edit_key($data);
@@ -36,5 +37,25 @@ class Keys extends MY_Controller {
         $this->session->set_flashdata('msg', 'Record is Deleted Successfully!');
         redirect(base_url('admin/group'));
     }
+    public function add() {
+        if($this->input->post('submit')) {
+            $data = array(
+                'key_number' => $this->input->post('key_number'),
+                'member_id' => $this->keys_model->key_master_get()
+            );
+            $data = $this->security->xss_clean($data);
+            $result = $this->keys_model->add($data);
+            if($result) {
+                $this->logging_model->history_write($this->session->userdata('admin_id'), 'added', 'keys', $result);
+                $this->session->set_flashdata('msg', 'Schlüssel erfolgreich hinzugefügt!');
+                redirect(base_url('admin/keys'));
+            }
+        }
+        else {
+            $data['title'] = 'Add Club';
+            $data['view'] = 'admin/keys/keys_add';
+            $this->load->view('admin/layout', $data);
+        }
+    }
 }
 ?>
\ No newline at end of file
diff --git a/application/controllers/admin/Members.php b/application/controllers/admin/Members.php
index 1b543d3..c22d3e4 100644
--- a/application/controllers/admin/Members.php
+++ b/application/controllers/admin/Members.php
@@ -66,6 +66,7 @@ class Members extends MY_Controller {
                 'club_function_id' => $this->input->post('club_function_id'),
                 'knowledge_proof' => $knowledge_proof,
                 'flight_manager' => $flight_manager,
+                'members_note' => $this->input->post('members_note'),
             );
             $data = $this->security->xss_clean($data);
             $result = $this->members_model->add_member($data);
@@ -89,10 +90,10 @@ class Members extends MY_Controller {
     //  Edit User
     public function edit($id = 0) {
         if($this->input->post('submit')) {
-            if($this->input->post('birthday')) { $birthday = date_to_default($this->input->post('birthday')); } else { $birthday = null; }
-            if($this->input->post('joined')) { $joined = date_to_default($this->input->post('joined')); } else { $joined = null; }
-            if($this->input->post('withdrawal')) { $withdrawal = date_to_default($this->input->post('withdrawal')); } else { $withdrawal = null; }
-            if($this->input->post('knowledge_proof')) { $knowledge_proof = date_to_default($this->input->post('knowledge_proof')); } else { $knowledge_proof = null; }
+            if($this->input->post('birthday') != '') { $birthday = date_to_default($this->input->post('birthday')); } else { $birthday = null; }
+            if($this->input->post('joined') != '') { $joined = date_to_default($this->input->post('joined')); } else { $joined = null; }
+            if($this->input->post('withdrawal') != '') { $withdrawal = date_to_default($this->input->post('withdrawal')); } else { $withdrawal = null; }
+            if($this->input->post('knowledge_proof') != '') { $knowledge_proof = date_to_default($this->input->post('knowledge_proof')); } else { $knowledge_proof = null; }
             if($this->input->post('flight_manager') == 'on') { $flight_manager = 1; } else { $flight_manager = 0; }
             $data = array(
                 'firstname' => $this->input->post('firstname'),
@@ -109,6 +110,7 @@ class Members extends MY_Controller {
                 'club_function_id' => $this->input->post('club_function_id'),
                 'knowledge_proof' => $knowledge_proof,
                 'flight_manager' => $flight_manager,
+                'members_note' => $this->input->post('members_note'),
             );
             $data = $this->security->xss_clean($data);
             $result = $this->members_model->edit_user($data, $id);
@@ -123,10 +125,13 @@ class Members extends MY_Controller {
             $data['member_types'] = $this->members_model->get_member_types();
             $data['insurance_types'] = $this->members_model->get_insurance_types();
             $data['member_data'] = $this->members_model->get_user_by_id($id);
-            $data['member_data']['birthday'] = date_to_german($data['member_data']['birthday']);
-            $data['member_data']['joined'] = date_to_german($data['member_data']['joined']);
-            if($data['member_data']['withdrawal'] != '0000-00-00') { $data['member_data']['withdrawal'] = date_to_german($data['member_data']['withdrawal']); }
-            if($data['member_data']['knowledge_proof'] != '0000-00-00') { $data['member_data']['knowledge_proof'] = date_to_german($data['member_data']['knowledge_proof']); }
+            if($data['member_data']['birthday'] != '' && $data['member_data']['birthday'] != '0000-00-00') { $data['member_data']['birthday'] = date_to_german($data['member_data']['birthday']); }
+            else { $data['member_data']['birthday'] = null; }
+            if($data['member_data']['joined'] != '' && $data['member_data']['joined'] != '0000-00-00') { $data['member_data']['joined'] = date_to_german($data['member_data']['joined']); }
+            else { $data['member_data']['joined'] = null; }
+            if($data['member_data']['knowledge_proof'] != '' && $data['member_data']['knowledge_proof'] != '0000-00-00') { $data['member_data']['knowledge_proof'] = date_to_german($data['member_data']['knowledge_proof']); }
+            else { $data['member_data']['knowledge_proof'] = null; }
+            if($data['member_data']['withdrawal'] != '' && $data['member_data']['withdrawal'] != '0000-00-00') { $data['member_data']['withdrawal'] = date_to_german($data['member_data']['withdrawal']); }
             else { $data['member_data']['withdrawal'] = null; }
             $data['title'] = 'Edit User';
             $data['view'] = 'admin/members/member_edit';
diff --git a/application/controllers/admin/Reports.php b/application/controllers/admin/Reports.php
index 1158ae0..6c1dfe1 100644
--- a/application/controllers/admin/Reports.php
+++ b/application/controllers/admin/Reports.php
@@ -19,5 +19,17 @@ class Reports extends MY_Controller {
         $data['view'] = 'admin/reports/birthdays';
         $this->load->view('admin/layout', $data);
     }
+    public function joined_anniversary() {
+        $data['anniversary'] = $this->reports_model->get_joined_anniversary();
+        $data['title'] = 'Vereins Zugehörigkeit';
+        $data['view'] = 'admin/reports/joined_anniversary';
+        $this->load->view('admin/layout', $data);
+    }
+    public function history() {
+        $data['history'] = $this->reports_model->get_history();
+        $data['title'] = 'Datensatz Änderungen';
+        $data['view'] = 'admin/reports/history';
+        $this->load->view('admin/layout', $data);
+    }
 }
 ?>
\ No newline at end of file
diff --git a/application/helpers/data_helper.php b/application/helpers/data_helper.php
index e310737..501d0f5 100644
--- a/application/helpers/data_helper.php
+++ b/application/helpers/data_helper.php
@@ -9,6 +9,10 @@
         if($date != '0000-00-00' && $date != null) { return date_format(date_create($date), 'd.m.Y'); }
         else { return null; }
     }
+    function datetime_to_german($date) {
+        if($date != '0000-00-00' && $date != null) { return date_format(date_create($date), 'd.m.Y H:i'); }
+        else { return null; }
+    }
     function date_to_default($date) {
         $temp_date = date_parse_from_format("d.m.Y", $date);
         return date_format(date_create($temp_date['year'].'-'.$temp_date['month'].'-'.$temp_date['day']), 'Y-m-d');
diff --git a/application/models/admin/Clubs_model.php b/application/models/admin/Clubs_model.php
new file mode 100644
index 0000000..9a954c6
--- /dev/null
+++ b/application/models/admin/Clubs_model.php
@@ -0,0 +1,28 @@
+<?php
+class Clubs_model extends CI_Model {
+    public function get_clubs() {
+        $query = $this->db->query('SELECT `clubs`.*, pilots.visits as guests
+                                    FROM `clubs`
+                                    LEFT JOIN (SELECT guests.club, COUNT(*) as visits
+                                       FROM guests
+                                       GROUP by guests.club
+                                      ) as pilots ON (pilots.club=clubs.id)');
+        return $result = $query->result_array();
+    }
+    public function get_club($id) {
+        $this->db->from('clubs');
+        $this->db->where('id', $id);
+        $query = $this->db->get();
+        return $result = $query->row_array();
+    }
+    public function edit($data, $id) {
+        $this->db->where('id', $id);
+        $this->db->update('clubs', $data);
+        return $id;
+    }
+    public function add($data){
+        $this->db->insert('clubs', $data);
+        return true;
+    }
+}
+?>
\ No newline at end of file
diff --git a/application/models/admin/Dashboard_model.php b/application/models/admin/Dashboard_model.php
index a1dc37a..6c790ac 100644
--- a/application/models/admin/Dashboard_model.php
+++ b/application/models/admin/Dashboard_model.php
@@ -34,5 +34,29 @@
         public function get_clubs_count() {
             return $this->db->count_all('clubs');
         }
+        public function get_visits_count() {
+            return $this->db->count_all('guests_visits');
+        }
+        public function get_guests_per_year($event) {
+            $this->db->select('COUNT(guests_visits.date) AS guests, guests_visits.date');
+            $this->db->from('guests_visits');
+            $this->db->where('guests_visits.event', $event);
+            $this->db->group_by('guests_visits.date');
+            $query = $this->db->get();
+            $result = $query->result_array();
+            foreach($result as $data) {
+                $return['years'][] = $data['date'];
+                $return['guests'][] = $data['guests'];
+            }
+            return $return;
+        }
+        public function get_changelog() {
+            $this->db->select('log_text, log_date');
+            $this->db->from('changelog');
+            $this->db->order_by('log_date', 'DESC');
+            $this->db->limit(10);
+            $query = $this->db->get();
+            return $query->result_array();
+        }
     }
 ?>
\ No newline at end of file
diff --git a/application/models/admin/Guests_model.php b/application/models/admin/Guests_model.php
index 13dc195..e18f3e6 100644
--- a/application/models/admin/Guests_model.php
+++ b/application/models/admin/Guests_model.php
@@ -1,17 +1,33 @@
 <?php
 	class Guests_model extends CI_Model {
 
-		public function get_all_guests() {
-		    $this->db->select('guests.*, clubs.name AS club');
-		    $this->db->from('guests');
-		    $this->db->join('clubs', 'guests.club=clubs.id');
-			$query = $this->db->get();
-			return $result = $query->result_array();
-		}
-		public function guest_add($data){
+        public function get_all_guests() {
+            $query = $this->db->query('SELECT `guests`.*, `clubs`.`name` AS `club`, visitors.visits as visits
+                                        FROM `guests`
+                                        LEFT JOIN `clubs` ON `guests`.`club`=`clubs`.`id`
+                                        LEFT JOIN (SELECT guests_visits.guest_id, COUNT(*) as visits
+                                           FROM guests_visits
+                                           GROUP by guests_visits.guest_id
+                                          ) as visitors ON (visitors.guest_id=guests.guests_id)');
+            return $result = $query->result_array();
+        }
+        public function get_event_guests() {
+            $this->db->select("CONCAT(guests.firstname, ' ', guests.lastname) AS value, CONCAT(guests.firstname, ' ', guests.lastname) AS label, guests.guests_id AS id");
+            $this->db->from('guests');
+            $query = $this->db->get();
+            $result = $query->result_array();
+            return json_encode($result);
+        }
+        public function guest_add($data){
             $this->db->insert('guests', $data);
             return true;
         }
+        public function guest_get($id) {
+            $this->db->from('guests');
+            $this->db->where('guests_id', $id);
+            $query = $this->db->get();
+            return $result = $query->row_array();
+        }
         public function get_clubs() {
 		    $query = $this->db->get('clubs');
             return $result = $query->result_array();
@@ -27,5 +43,23 @@
             $this->db->update('clubs', $data);
             return $id;
         }
+        public function visit_add($event, $guest_id) {
+            $data['guest_id'] = $guest_id;
+            $data['event'] = $event;
+            $data['date'] = date("Y");
+            $this->db->insert('guests_visits', $data);
+        }
+        public function guest_edit($data, $id) {
+            $this->db->where('guests_id', $id);
+            $this->db->update('guests', $data);
+            return $id;
+        }
+        public function guest_get_visits($guest_id) {
+            $this->db->from('guests_visits');
+            $this->db->where('guests_visits.guest_id', $guest_id);
+            $this->db->order_by('guests_visits.date', 'ASC');
+            $query = $this->db->get();
+            return $result = $query->result_array();
+        }
 	}
 ?>
\ No newline at end of file
diff --git a/application/models/admin/Keys_model.php b/application/models/admin/Keys_model.php
index 4d875b8..cc0842a 100644
--- a/application/models/admin/Keys_model.php
+++ b/application/models/admin/Keys_model.php
@@ -21,11 +21,24 @@
         }
 
         public function get_keys_by_userid($id) {
-            $this->db->select('key_number');
+            $this->db->select('key_number, key_note');
             $this->db->from('club_keys');
             $this->db->where('member_id', $id);
             $query = $this->db->get();
             return $result = $query->result_array();
         }
+        public function add($data){
+            $this->db->insert('club_keys', $data);
+            return true;
+        }
+        public function key_master_get() {
+            $this->db->select('members.id');
+            $this->db->from('members');
+            $this->db->where('members.club_function_id', '4');
+            $this->db->limit(1);
+            $query = $this->db->get();
+            $result = $query->row_array();
+            return $result['id'];
+        }
 	}
 ?>
\ No newline at end of file
diff --git a/application/models/admin/Logging_model.php b/application/models/admin/Logging_model.php
index 907cb01..eb3d18e 100644
--- a/application/models/admin/Logging_model.php
+++ b/application/models/admin/Logging_model.php
@@ -10,5 +10,17 @@
             $this->db->insert('history', $data);
             return true;
         }
+        public function history_get($limit) {
+            $this->db->select('ci_users.firstname, ci_users.lastname, history.*');
+            $this->db->from('history');
+            $this->db->join('ci_users', 'ci_users.id=history.user_id');
+            $this->db->order_by('timestamp', 'DESC');
+            if($limit) {
+                $this->db->limit($limit);
+            }
+            $query = $this->db->get();
+            $result = $query->result_array();
+            return $result;
+        }
 	}
 ?>
\ No newline at end of file
diff --git a/application/models/admin/Reports_model.php b/application/models/admin/Reports_model.php
index eb9a610..954b39a 100644
--- a/application/models/admin/Reports_model.php
+++ b/application/models/admin/Reports_model.php
@@ -1,11 +1,6 @@
 <?php
 class Reports_model extends CI_Model {
     public function get_birthdays() {
-        $sql = "SELECT members.id, members.firstname, members.lastname, DAY(members.birthday) AS day, MONTH(members.birthday) AS month, (YEAR(CURRENT_DATE) - YEAR(members.birthday)) - (RIGHT(CURRENT_DATE,5) < RIGHT(members.birthday, 5)) AS age
-                FROM members
-                JOIN member_types ON (member_types.id=members.member_type_id)
-                WHERE member_types.is_member = 1
-                ORDER BY age DESC, month ASC, day ASC";
         $this->db->select('members.id, members.firstname, members.lastname, members.birthday, DAY(members.birthday) AS day, MONTH(members.birthday) AS month, (YEAR(CURRENT_DATE) - YEAR(members.birthday)) - (RIGHT(CURRENT_DATE,5) < RIGHT(members.birthday, 5)) AS age');
         $this->db->from('members');
         $this->db->join('member_types', 'member_types.id=members.member_type_id');
@@ -14,5 +9,23 @@ class Reports_model extends CI_Model {
         $query = $this->db->get();
         return $result = $query->result_array();
     }
+    public function get_joined_anniversary() {
+        $this->db->select('members.id, members.firstname, members.lastname, members.joined, DAY(members.joined) AS day, MONTH(members.joined) AS month, (YEAR(CURRENT_DATE) - YEAR(members.joined)) - (RIGHT(CURRENT_DATE,5) < RIGHT(members.joined, 5)) AS age');
+        $this->db->from('members');
+        $this->db->join('member_types', 'member_types.id=members.member_type_id');
+        $this->db->where('member_types.is_member', '1');
+        $this->db->order_by('age DESC');
+        $query = $this->db->get();
+        return $result = $query->result_array();
+    }
+    public function get_history() {
+        $this->db->select('ci_users.firstname, ci_users.lastname, history.*');
+        $this->db->from('history');
+        $this->db->join('ci_users', 'ci_users.id=history.user_id');
+        $this->db->order_by('timestamp', 'DESC');
+        $query = $this->db->get();
+        $result = $query->result_array();
+        return $result;
+    }
 }
 ?>
\ No newline at end of file
diff --git a/application/views/admin/clubs/clubs_add.php b/application/views/admin/clubs/clubs_add.php
new file mode 100644
index 0000000..2303328
--- /dev/null
+++ b/application/views/admin/clubs/clubs_add.php
@@ -0,0 +1,81 @@
+<link rel="stylesheet" href="<?= base_url() ?>public/plugins/bootstrap-datepicker/css/datepicker.css">
+<link rel="stylesheet" href="<?= base_url() ?>public/plugins/iCheck/square/_all.css">
+
+<section class="content">
+    <div class="row">
+        <div class="col-md-12">
+            <div class="box box-body with-border">
+                <div class="col-md-6">
+                    <h4><i class="fa fa-plus"></i> &nbsp;Verein anlegen</h4>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col-md-12">
+            <div class="box border-top-solid">
+                <div class="box-body my-form-body">
+                    <?php echo form_open(base_url('admin/clubs/add/'), 'class="form-horizontal"' )?>
+                    <div class="form-group">
+                        <label for="lastname" class="col-sm-2 control-label">Name</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="name" class="form-control" id="name" placeholder="" value="" maxlength="50">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="street" class="col-sm-2 control-label">Straße</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="street" class="form-control" id="street" placeholder="" value="" maxlength="50">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="zip" class="col-sm-2 control-label">Postleitzahl</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="zip" class="form-control" id="zip" placeholder="" value="" maxlength="10">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="town" class="col-sm-2 control-label">Ort</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="town" class="form-control" id="town" placeholder="" value="" maxlength="50">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="town" class="col-sm-2 control-label">Telefon</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="phone" class="form-control" id="phone" placeholder="" value="" maxlength="16">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="town" class="col-sm-2 control-label">eMail</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="email" class="form-control" id="email" placeholder="" value="" maxlength="50">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="town" class="col-sm-2 control-label">Anprechpartner Vorname</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="executive_firstname" class="form-control" id="executive_firstname" placeholder="" value="" maxlength="25">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="town" class="col-sm-2 control-label">Anprechpartner Nachname</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="executive_lastname" class="form-control" id="executive_lastname" placeholder="" value="" maxlength="25">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <div class="col-md-11">
+                            <input type="submit" name="submit" value="Anlegen" class="btn btn-info pull-right">
+                        </div>
+                    </div>
+                    <?php echo form_close( ); ?>
+                </div>
+            </div>
+        </div>
+    </div>
+</section>
+
+<script>
+    $("#clubs_add").addClass('active');
+</script>
\ No newline at end of file
diff --git a/application/views/admin/guests/guests_clubs_edit.php b/application/views/admin/clubs/clubs_edit.php
similarity index 91%
rename from application/views/admin/guests/guests_clubs_edit.php
rename to application/views/admin/clubs/clubs_edit.php
index 76e2b91..2c85845 100644
--- a/application/views/admin/guests/guests_clubs_edit.php
+++ b/application/views/admin/clubs/clubs_edit.php
@@ -15,7 +15,7 @@
         <div class="col-md-12">
             <div class="box border-top-solid">
                 <div class="box-body my-form-body">
-                    <?php echo form_open(base_url('admin/guests/clubs_edit/'.$club_data['id']), 'class="form-horizontal"' )?>
+                    <?php echo form_open(base_url('admin/clubs/edit/'.$club_data['id']), 'class="form-horizontal"' )?>
                     <div class="form-group">
                         <label for="lastname" class="col-sm-2 control-label">Name</label>
                         <div class="col-sm-9">
@@ -43,7 +43,7 @@
                     <div class="form-group">
                         <label for="town" class="col-sm-2 control-label">Telefon</label>
                         <div class="col-sm-9">
-                            <input type="text" name="phone" class="form-control" id="phone" placeholder="" value="<?= $club_data['phone'];?>" maxlength="50">
+                            <input type="text" name="phone" class="form-control" id="phone" placeholder="" value="<?= $club_data['phone'];?>" maxlength="16">
                         </div>
                     </div>
                     <div class="form-group">
@@ -53,15 +53,15 @@
                         </div>
                     </div>
                     <div class="form-group">
-                        <label for="town" class="col-sm-2 control-label">Vorstand Vorname</label>
+                        <label for="town" class="col-sm-2 control-label">Anprechpartner Vorname</label>
                         <div class="col-sm-9">
-                            <input type="text" name="executive_firstname" class="form-control" id="executive_firstname" placeholder="" value="<?= $club_data['executive_firstname'];?>" maxlength="50">
+                            <input type="text" name="executive_firstname" class="form-control" id="executive_firstname" placeholder="" value="<?= $club_data['executive_firstname'];?>" maxlength="25">
                         </div>
                     </div>
                     <div class="form-group">
-                        <label for="town" class="col-sm-2 control-label">Vorstand Nachname</label>
+                        <label for="town" class="col-sm-2 control-label">Anprechpartner Nachname</label>
                         <div class="col-sm-9">
-                            <input type="text" name="executive_lastname" class="form-control" id="executive_lastname" placeholder="" value="<?= $club_data['executive_lastname'];?>" maxlength="50">
+                            <input type="text" name="executive_lastname" class="form-control" id="executive_lastname" placeholder="" value="<?= $club_data['executive_lastname'];?>" maxlength="25">
                         </div>
                     </div>
                     <div class="form-group">
@@ -76,8 +76,8 @@
     </div>
 </section>
 
-<script src="<?= base_url() ?>public/plugins/datepicker/bootstrap-datepicker.js"></script>
 <script src="<?= base_url() ?>public/plugins/iCheck/icheck.js"></script>
+
 <script>
-    $('#datepicker').datepicker({})
-</script>
+    $("#clubs_list").addClass('active');
+</script>
\ No newline at end of file
diff --git a/application/views/admin/guests/guests_clubs_list.php b/application/views/admin/clubs/clubs_list.php
similarity index 87%
rename from application/views/admin/guests/guests_clubs_list.php
rename to application/views/admin/clubs/clubs_list.php
index 4bce5e2..1c4f846 100644
--- a/application/views/admin/guests/guests_clubs_list.php
+++ b/application/views/admin/clubs/clubs_list.php
@@ -21,7 +21,8 @@
                     <th>Ort</th>
                     <th>Telefon</th>
                     <th>Email</th>
-                    <th>Vorstand</th>
+                    <th>Anprechpartner</th>
+                    <th>Gastpiloten</th>
                     <th>Optionen</th>
                 </tr>
                 </thead>
@@ -35,8 +36,9 @@
                         <td><?= $row['phone']; ?></td>
                         <td><?= $row['email']; ?></td>
                         <td><?= $row['executive_firstname'].' '.$row['executive_lastname']; ?></td>
+                        <td><?= $row['guests']; ?></td>
                         <td class="text-right">
-                            <a href="<?= base_url('admin/guests/clubs_edit/'.$row['id']); ?>" class="btn btn-danger btn-flat btn-xs"><i class="fa fa-edit"></i></a>
+                            <a href="<?= base_url('admin/clubs/edit/'.$row['id']); ?>" class="btn btn-danger btn-flat btn-xs"><i class="fa fa-edit"></i></a>
                         </td>
                     </tr>
                 <?php endforeach; ?>
@@ -63,5 +65,5 @@
 </script>
 
 <script>
-    $("#guests_clubs_list").addClass('active');
+    $("#clubs_list").addClass('active');
 </script>
\ No newline at end of file
diff --git a/application/views/admin/dashboard/index.php b/application/views/admin/dashboard/index.php
index 4af983c..ecc24a3 100644
--- a/application/views/admin/dashboard/index.php
+++ b/application/views/admin/dashboard/index.php
@@ -1,6 +1,6 @@
 <section class="content">
     <div class="row">
-        <div class="col-md-3 col-sm-6 col-xs-12">
+        <div class="col-md-2 col-sm-6 col-xs-12">
             <div class="info-box">
                 <span class="info-box-icon bg-red"><i class="fa fa-wheelchair"></i></span>
                 <div class="info-box-content">
@@ -9,7 +9,7 @@
                 </div>
             </div>
         </div>
-        <div class="col-md-3 col-sm-6 col-xs-12">
+        <div class="col-md-2 col-sm-6 col-xs-12">
             <div class="info-box">
                 <span class="info-box-icon bg-light-blue"><i class="fa fa-address-book"></i></span>
                 <div class="info-box-content">
@@ -18,7 +18,7 @@
                 </div>
             </div>
         </div>
-        <div class="col-md-3 col-sm-6 col-xs-12">
+        <div class="col-md-2 col-sm-6 col-xs-12">
             <div class="info-box">
                 <span class="info-box-icon bg-gray"><i class="fa fa-key"></i></span>
                 <div class="info-box-content">
@@ -27,7 +27,7 @@
                 </div>
             </div>
         </div>
-        <div class="col-md-3 col-sm-6 col-xs-12">
+        <div class="col-md-2 col-sm-6 col-xs-12">
             <div class="info-box">
                 <span class="info-box-icon bg-green"><i class="fa fa-map-marker"></i></span>
                 <div class="info-box-content">
@@ -36,6 +36,15 @@
                 </div>
             </div>
         </div>
+        <div class="col-md-2 col-sm-6 col-xs-12">
+            <div class="info-box">
+                <span class="info-box-icon bg-yellow"><i class="fa fa-map-pin"></i></span>
+                <div class="info-box-content">
+                    <span class="info-box-text">Besucher</span>
+                    <span class="info-box-number"><?= $visits_count; ?></span>
+                </div>
+            </div>
+        </div>
     </div>
     <div class="row">
         <div class="col-md-4 col-sm-4 col-xs-10">
@@ -53,12 +62,84 @@
                 </div>
             </div>
         </div>
+        <div class="col-md-6 col-sm-4 col-xs-10">
+            <div class="box box-info">
+                <div class="box-header with-border">
+                    <h3 class="box-title">Gastpiloten (Flugfest)</h3>
+                    <div class="box-tools pull-right">
+                        <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
+                        <button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
+                    </div>
+                </div>
+                <div class="box-body">
+                    <div class="chart">
+                        <canvas id="lineChart" style="height:300px;"></canvas>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="col-md-4">
+            <div class="box box-info">
+                <div class="box-header with-border bg-yellow">
+                    <h3 class="box-title">Changelog</h3>
+                    <div class="box-tools pull-right">
+                        <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
+                        <button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
+                    </div>
+                </div>
+                <div class="box-body no-padding">
+                    <table class="table">
+                        <tr>
+                            <th>Datum</th>
+                            <th>Änderung</th>
+                        </tr>
+                        <?php foreach($changelog as $change) { ?>
+                        <tr>
+                            <td><?=date_to_german($change['log_date'])?></td>
+                            <td><?=$change['log_text']?></td>
+                        </tr>
+                        <?php } ?>
+                    </table>
+                </div>
+            </div>
+        </div>
+        <div class="col-md-4">
+            <div class="box box-info">
+                <div class="box-header with-border bg-yellow">
+                    <h3 class="box-title"><i class="fa fa-link"></i> <a href="/admin/reports/history">Änderungs Historie</a></h3>
+                    <div class="box-tools pull-right">
+                        <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
+                        <button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
+                    </div>
+                </div>
+                <div class="box-body no-padding">
+                    <table class="table">
+                        <tr>
+                            <th>Datum</th>
+                            <th>Benutzer</th>
+                            <th colspan="3">Änderung</th>
+                        </tr>
+                        <?php foreach($history as $hist_item) { ?>
+                            <tr>
+                                <td><?=datetime_to_german($hist_item['timestamp'])?></td>
+                                <td><?=$hist_item['firstname'].' '.$hist_item['lastname']?></td>
+                                <td><?=$hist_item['action']?></td>
+                                <td><?=$hist_item['table_name']?></td>
+                                <td><?='('.$hist_item['table_id'].')'?></td>
+                            </tr>
+                        <?php } ?>
+                    </table>
+                </div>
+            </div>
+        </div>
     </div>
 </section>
 
 <script src="<?= base_url() ?>public/plugins/flot/jquery.flot.js"></script>
 <script src="<?= base_url() ?>public/plugins/flot/jquery.flot.pie.js"></script>
 <script src="<?= base_url() ?>public/plugins/flot/jquery.flot.categories.js"></script>
+<script src="<?= base_url() ?>public/plugins/chartjs/Chart.js"></script>
+
 
 <script>
     var donutData = [
@@ -89,4 +170,68 @@
     function labelFormatter(label, series) {
         return "<div style='font-size:8pt; text-align:center; padding:2px; color:white; font-weight:bold;'>" + label + "</div>";
     };
+
+    var areaChartData = {
+        labels  : <?=$guests_per_year_years?>,
+        datasets: [
+            {
+                label               : 'Flugfest',
+                fillColor           : 'rgba(210, 214, 222, 1)',
+                strokeColor         : 'rgba(210, 214, 222, 1)',
+                pointColor          : 'rgba(210, 214, 222, 1)',
+                pointStrokeColor    : '#c1c7d1',
+                pointHighlightFill  : '#fff',
+                pointHighlightStroke: 'rgba(220,220,220,1)',
+                data                : <?=$guests_per_year_guests?>
+            }
+        ]
+    }
+
+    var areaChartOptions = {
+        //Boolean - If we should show the scale at all
+        showScale               : true,
+        //Boolean - Whether grid lines are shown across the chart
+        scaleShowGridLines      : false,
+        //String - Colour of the grid lines
+        scaleGridLineColor      : 'rgba(0,0,0,.05)',
+        //Number - Width of the grid lines
+        scaleGridLineWidth      : 1,
+        //Boolean - Whether to show horizontal lines (except X axis)
+        scaleShowHorizontalLines: true,
+        //Boolean - Whether to show vertical lines (except Y axis)
+        scaleShowVerticalLines  : true,
+        //Boolean - Whether the line is curved between points
+        bezierCurve             : true,
+        //Number - Tension of the bezier curve between points
+        bezierCurveTension      : 0.3,
+        //Boolean - Whether to show a dot for each point
+        pointDot                : true,
+        //Number - Radius of each point dot in pixels
+        pointDotRadius          : 4,
+        //Number - Pixel width of point dot stroke
+        pointDotStrokeWidth     : 1,
+        //Number - amount extra to add to the radius to cater for hit detection outside the drawn point
+        pointHitDetectionRadius : 20,
+        //Boolean - Whether to show a stroke for datasets
+        datasetStroke           : true,
+        //Number - Pixel width of dataset stroke
+        datasetStrokeWidth      : 2,
+        //Boolean - Whether to fill the dataset with a color
+        datasetFill             : true,
+        //String - A legend template
+        legendTemplate          : '<ul class="<%=name.toLowerCase()%>-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].lineColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>',
+        //Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
+        maintainAspectRatio     : true,
+        //Boolean - whether to make the chart responsive to window resizing
+        responsive              : true
+    }
+
+    //-------------
+    //- LINE CHART -
+    //--------------
+    var lineChartCanvas          = $('#lineChart').get(0).getContext('2d')
+    var lineChart                = new Chart(lineChartCanvas)
+    var lineChartOptions         = areaChartOptions
+    lineChartOptions.datasetFill = false
+    lineChart.Line(areaChartData, lineChartOptions)
 </script>
\ No newline at end of file
diff --git a/application/views/admin/guests/guests_add.php b/application/views/admin/guests/guests_add.php
index 789c836..dd83313 100644
--- a/application/views/admin/guests/guests_add.php
+++ b/application/views/admin/guests/guests_add.php
@@ -70,7 +70,11 @@
             <div class="form-group">
                 <label for="club" class="col-sm-2 control-label">Verein</label>
                 <div class="col-sm-9">
-                    <input type="text" name="club" class="form-control" id="club" placeholder="" maxlength="50">
+                    <select name="club" class="form-control">
+                        <?php foreach($clubs as $club): ?>
+                            <option value="<?= $club['id']; ?>"><?= $club['name']; ?></option>
+                        <?php endforeach; ?>
+                    </select>
                 </div>
             </div>
             <div class="form-group">
diff --git a/application/views/admin/guests/guests_edit.php b/application/views/admin/guests/guests_edit.php
new file mode 100644
index 0000000..db67150
--- /dev/null
+++ b/application/views/admin/guests/guests_edit.php
@@ -0,0 +1,125 @@
+<link rel="stylesheet" href="<?= base_url() ?>public/plugins/bootstrap-datepicker/css/datepicker.css">
+<link rel="stylesheet" href="<?= base_url() ?>public/plugins/iCheck/square/_all.css">
+
+<section class="content">
+    <div class="row">
+        <div class="col-md-12">
+            <div class="box box-body with-border">
+                <div class="col-md-6">
+                    <h4><i class="fa fa-plus"></i> &nbsp;Gast bearbeiten</h4>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col-md-12">
+            <div class="box border-top-solid">
+                <div class="box-body my-form-body">
+                    <?php echo form_open(base_url('admin/guests/edit/'.$guest['guests_id']), 'class="form-horizontal"' )?>
+                    <div class="form-group">
+                        <label for="town" class="col-sm-2 control-label">Vorname</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="firstname" class="form-control" id="firstname" placeholder="" value="<?= $guest['firstname'];?>" maxlength="50">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="town" class="col-sm-2 control-label">Nachname</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="lastname" class="form-control" id="lastname" placeholder="" value="<?= $guest['lastname'];?>" maxlength="50">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="street" class="col-sm-2 control-label">Straße</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="street" class="form-control" id="street" placeholder="" value="<?= $guest['street'];?>" maxlength="50">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="zip" class="col-sm-2 control-label">Postleitzahl</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="zip" class="form-control" id="zip" placeholder="" value="<?= $guest['zip'];?>" maxlength="10">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="town" class="col-sm-2 control-label">Ort</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="town" class="form-control" id="town" placeholder="" value="<?= $guest['town'];?>" maxlength="50">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="birthday" class="col-sm-2 control-label">Geburtstag</label>
+                        <div class="col-sm-9">
+                            <div class="input-group date">
+                                <div class="input-group-addon"><i class="fa fa-calendar"></i></div>
+                                <input type="text" class="form-control pull-right datepicker" id="datepicker" name="birthday" data-provide="datepicker" data-date-format="dd.mm.yyyy" value="<?= date_to_german($guest['birthday']);?>">
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="town" class="col-sm-2 control-label">Telefon</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="phone" class="form-control" id="phone" placeholder="" value="<?= $guest['phone'];?>" maxlength="50">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="town" class="col-sm-2 control-label">eMail</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="email" class="form-control" id="email" placeholder="" value="<?= $guest['email'];?>" maxlength="50">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="club" class="col-sm-2 control-label">Verein</label>
+                        <div class="col-sm-9">
+                            <select name="club" class="form-control">
+                                <option value="" <?php if($guest['club'] == null) { echo " selected"; } ?>>- Kein Verein -</option>
+                                <?php foreach($clubs as $club): ?>
+                                    <option value="<?= $club['id']; ?>"<?php if($club['id'] == $guest['club']) { echo " selected"; } ?>><?= $club['name']; ?></option>
+                                <?php endforeach; ?>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="insurance_number" class="col-sm-2 control-label">Versicherungs Nummer</label>
+                        <div class="col-sm-9">
+                            <input type="text" name="insurance_number" class="form-control" id="insurance_number" placeholder="" value="<?= $guest['insurance_number'];?>" maxlength="50">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="invitation" class="col-sm-2 control-label">Einladen?</label>
+                        <div class="col-sm-9">
+                            <input type="checkbox" class="icheckbox_square-green" id="invitation" name="invitation" <?php if($guest['invitation']) { echo " checked"; } ?>>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <div class="col-md-11">
+                            <input type="submit" name="submit" value="Speichern" class="btn btn-info pull-right">
+                        </div>
+                    </div>
+                    <?php echo form_close( ); ?>
+
+                    <div class="form-group">
+
+                        <div class="box-body no-padding">
+                            <table class="table">
+                                <tr>
+                                    <th colspan="2">Veranstaltungen besucht</th>
+                                </tr>
+                                <?php foreach($visits as $visit) { ?>
+                                    <tr>
+                                        <td><?=$visit['event'].' '.$visit['date']?></td>
+                                    </tr>
+                                <?php } ?>
+                            </table>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</section>
+
+<script src="<?= base_url() ?>public/plugins/datepicker/bootstrap-datepicker.js"></script>
+<script src="<?= base_url() ?>public/plugins/iCheck/icheck.js"></script>
+<script>
+    $('#datepicker').datepicker({})
+</script>
\ No newline at end of file
diff --git a/application/views/admin/guests/guests_list.php b/application/views/admin/guests/guests_list.php
index 68c4895..e6c62d3 100644
--- a/application/views/admin/guests/guests_list.php
+++ b/application/views/admin/guests/guests_list.php
@@ -23,6 +23,8 @@
             <th>Geburtstag</th>
             <th>Email</th>
             <th>Verein</th>
+            <th>Besuche</th>
+            <th>Optionen</th>
         </tr>
         </thead>
         <tbody>
@@ -36,6 +38,10 @@
             <td><?= date_to_german($row['birthday']); ?></td>
             <td><?= $row['email']; ?></td>
             <td><?= $row['club']; ?></td>
+            <td><?= $row['visits']; ?></td>
+            <td class="text-right">
+              <a href="<?= base_url('admin/guests/edit/'.$row['guests_id']); ?>" class="btn btn-danger btn-flat btn-xs"><i class="fa fa-edit"></i></a>
+            </td>
 		  </tr>
           <?php endforeach; ?>
         </tbody>
@@ -44,22 +50,38 @@
   </div>
 </section>
 
-<script src="<?= base_url() ?>public/plugins/datatables/jquery.dataTables.min.js"></script>
-<script src="<?= base_url() ?>public/plugins/datatables/dataTables.bootstrap.min.js"></script>
-<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
-<script src="//cdn.datatables.net/plug-ins/1.10.16/sorting/datetime-moment.js"></script>
-
+<script type="text/javascript" src="https://cdn.datatables.net/r/bs/jszip-2.5.0,pdfmake-0.1.18,dt-1.10.9,b-1.0.3,b-html5-1.0.3,b-print-1.0.3/datatables.min.js"></script>
 <script>
     $(function () {
-        $.fn.dataTable.moment( 'DD.MM.YYYY' );
-        $("#example1").DataTable({
-            "language": {
-                "url": "//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/German.json"
+        var example1 =  $("#example1").DataTable({
+            responsive: true,
+            lengthMenu: [[10, 25, 50, 100, -1], [10, 25, 50, 100, "Alle"]],
+            buttons: ['excelHtml5', 'pdfHtml5'],
+            language: {
+                "sEmptyTable":      "Keine Daten in der Tabelle vorhanden",
+                "sInfo":            "_START_ bis _END_ von _TOTAL_ Einträgen",
+                "sInfoEmpty":       "0 bis 0 von 0 Einträgen",
+                "sInfoFiltered":    "(gefiltert von _MAX_ Einträgen)",
+                "sInfoPostFix":     "",
+                "sInfoThousands":   ".",
+                "sLengthMenu":      "_MENU_ Einträge anzeigen",
+                "sLoadingRecords":  "Wird geladen...",
+                "sProcessing":      "Bitte warten...",
+                "sSearch":          "Suchen",
+                "sZeroRecords":     "Keine Einträge vorhanden.",
+                "oPaginate": {
+                    "sFirst":       "Erste",
+                    "sPrevious":    "Zurück",
+                    "sNext":        "Nächste",
+                    "sLast":        "Letzte"
+                },
+                "oAria": {
+                    "sSortAscending":  ": aktivieren, um Spalte aufsteigend zu sortieren",
+                    "sSortDescending": ": aktivieren, um Spalte absteigend zu sortieren"
+                }
             }
         });
+        example1.buttons().container().appendTo($('.col-sm-6:eq(0)', example1.table().container()));
     });
-</script>
-
-<script>
     $("#guests_list").addClass('active');
 </script>
\ No newline at end of file
diff --git a/application/views/admin/guests/guests_visit_add.php b/application/views/admin/guests/guests_visit_add.php
new file mode 100644
index 0000000..366a04e
--- /dev/null
+++ b/application/views/admin/guests/guests_visit_add.php
@@ -0,0 +1,57 @@
+<link rel="stylesheet" href="<?= base_url() ?>public/plugins/bootstrap-datepicker/css/datepicker.css">
+<link rel="stylesheet" href="<?= base_url() ?>public/plugins/iCheck/square/_all.css">
+<link href="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.2/jquery-ui.css" rel="stylesheet"/>
+
+<section class="content">
+    <div class="row">
+        <div class="col-md-12">
+            <div class="box box-body with-border">
+                <div class="col-md-6">
+                    <h4><i class="fa fa-plus"></i> &nbsp;Gastpilot hinzufügen zu <?=$event?></h4>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col-md-12">
+            <div class="box border-top-solid">
+                <div class="box-body my-form-body">
+                    <?php echo form_open(base_url('admin/guests/visit_add_do/'.$event), 'class="form-horizontal"');  ?>
+                    <div class="form-group">
+                        <div class="col-md-6">
+                            <label for="guests">Gast: </label>
+                            <input class="form-control autocomplete" id="guests_label" name="guests_label">
+                            <input type="hidden" name="guests_id" id="guests_id">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <div class="col-md-6">
+                            <input type="submit" name="submit" value="Besuch hinzufügen" class="btn btn-info pull-right" maxlength="25">
+                        </div>
+                    </div>
+                    <?php echo form_close( ); ?>
+                </div>
+            </div>
+        </div>
+    </div>
+</section>
+
+<script src="<?= base_url() ?>public/plugins/datepicker/bootstrap-datepicker.js"></script>
+<script src="<?= base_url() ?>public/plugins/iCheck/icheck.js"></script>
+<script>
+    $('#datepicker').datepicker({});
+    $( function() {
+        var availableGuests = <?=$guests?>;
+        $( ".autocomplete" ).autocomplete({
+            source: availableGuests,
+            select: function (event, ui) {
+                $("#guests_label").val(ui.item.label); // display the selected text
+                $("#guests_id").val(ui.item.id); // save selected id to hidden input
+            }
+        });
+    } );
+</script>
+
+<script>
+    $("#guests_visit_add").addClass('active');
+</script>
\ No newline at end of file
diff --git a/application/views/admin/guests/guests_visit_add_event.php b/application/views/admin/guests/guests_visit_add_event.php
new file mode 100644
index 0000000..6447f95
--- /dev/null
+++ b/application/views/admin/guests/guests_visit_add_event.php
@@ -0,0 +1,39 @@
+<link rel="stylesheet" href="<?= base_url() ?>public/plugins/bootstrap-datepicker/css/datepicker.css">
+<link rel="stylesheet" href="<?= base_url() ?>public/plugins/iCheck/square/_all.css">
+
+<section class="content">
+    <div class="row">
+        <div class="col-md-12">
+            <div class="box box-body with-border">
+                <div class="col-md-6">
+                    <h4><i class="fa fa-plus"></i> &nbsp;Gastpilot hinzufügen</h4>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col-md-12">
+            <div class="box border-top-solid">
+                <div class="box-body my-form-body">
+                    <?php echo form_open(base_url('admin/guests/visit_add/'), 'class="form-horizontal"');  ?>
+                    <div class="form-group">
+                        <label for="event">Veranstaltung: </label>
+                        <input class="form-control" id="event" name="event">
+                    </div>
+                    <div class="form-group">
+                        <div class="col-md-11">
+                            <input type="submit" name="submit" value="Weiter zu den Gästen" class="btn btn-info pull-right">
+                        </div>
+                    </div>
+                    <?php echo form_close( ); ?>
+                </div>
+            </div>
+        </div>
+    </div>
+</section>
+
+<script src="<?= base_url() ?>public/plugins/datepicker/bootstrap-datepicker.js"></script>
+<script src="<?= base_url() ?>public/plugins/iCheck/icheck.js"></script>
+<script>
+    $("#guests_visit_add").addClass('active');
+</script>
\ No newline at end of file
diff --git a/application/views/admin/include/sidebar.php b/application/views/admin/include/sidebar.php
index 7b10f38..cc18026 100644
--- a/application/views/admin/include/sidebar.php
+++ b/application/views/admin/include/sidebar.php
@@ -26,22 +26,22 @@ $cur_tab = $this->uri->segment(2)==''?'dashboard': $this->uri->segment(2);
             </span>
           </a>
           <ul class="treeview-menu">
-              <li id="members_add"><a href="<?= base_url('admin/members/add'); ?>"><i class="fa fa-circle-o"></i> Mitglied hinzufügen</a></li>
-              <li id="view_members_member" class=""><a href="<?= base_url('admin/members/list_member/1'); ?>"><i class="fa fa-circle-o"></i> Mitglieder anzeigen</a></li>
-              <li id="view_members_withdrawl" class=""><a href="<?= base_url('admin/members/list_member/4'); ?>"><i class="fa fa-circle-o"></i> Ausgetretene Mitglieder</a></li>
-              <li id="view_members_died" class=""><a href="<?= base_url('admin/members/list_member/5'); ?>"><i class="fa fa-circle-o"></i> Verstorbene Mitglieder</a></li>
+              <li id="members_add"><a href="<?= base_url('admin/members/add'); ?>"><i class="fa fa-plus"></i> Mitglied hinzufügen</a></li>
+              <li id="view_members_member" class=""><a href="<?= base_url('admin/members/list_member/1'); ?>"><i class="fa fa-wheelchair"></i> Mitglieder anzeigen</a></li>
+              <li id="view_members_withdrawl" class=""><a href="<?= base_url('admin/members/list_member/4'); ?>"><i class="fab fa-accessible-icon"></i> Ausgetretene Mitglieder</a></li>
+              <li id="view_members_died" class=""><a href="<?= base_url('admin/members/list_member/5'); ?>"><i class="fa fa-user-md"></i> Verstorbene Mitglieder</a></li>
           </ul>
         </li>
         <li id="keys" class="treeview">
           <a href="#">
               <i class="fa fa-key"></i> <span>Schlüssel</span>
               <span class="pull-right-container">
-            <i class="fa fa-angle-left pull-right"></i>
-        </span>
+                <i class="fa fa-angle-left pull-right"></i>
+              </span>
           </a>
           <ul class="treeview-menu">
-              <!--<li id="keys_add"><a href="<?= base_url('admin/keys/add'); ?>"><i class="fa fa-circle-o"></i> Schlüssel hinzufügen</a></li>-->
-              <li id="keys_list" class=""><a href="<?= base_url('admin/keys'); ?>"><i class="fa fa-circle-o"></i> Schlüssel anzeigen</a></li>
+              <li id="keys_add"><a href="<?= base_url('admin/keys/add'); ?>"><i class="fa fa-plus"></i> Schlüssel hinzufügen</a></li>
+              <li id="keys_list" class=""><a href="<?= base_url('admin/keys'); ?>"><i class="fa fa-key"></i> Schlüssel anzeigen</a></li>
           </ul>
         </li>
           <li id="guests" class="treeview">
@@ -52,9 +52,21 @@ $cur_tab = $this->uri->segment(2)==''?'dashboard': $this->uri->segment(2);
                   </span>
               </a>
               <ul class="treeview-menu">
-                  <li id="guests_add" class=""><a href="<?= base_url('admin/guests/add'); ?>"><i class="fa fa-circle-o"></i> Gast hinzufügen</a></li>
+                  <li id="guests_add" class=""><a href="<?= base_url('admin/guests/add'); ?>"><i class="fa fa-plus"></i> Gast hinzufügen</a></li>
                   <li id="guests_list" class=""><a href="<?= base_url('admin/guests'); ?>"><i class="fa fa-address-book"></i> Gäste anzeigen</a></li>
-                  <li id="guests_clubs_list" class=""><a href="<?= base_url('admin/guests/clubs_list'); ?>"><i class="fa fa-map-marker"></i> Vereine anzeigen</a></li>
+                  <li id="guests_visit_add" class=""><a href="<?= base_url('admin/guests/visit_add'); ?>"><i class="fa fa-user-plus"></i> Besuch erfassen</a></li>
+              </ul>
+          </li>
+          <li id="clubs" class="treeview">
+              <a href="#">
+                  <i class="fa fa-map-marker"></i> <span>Vereine</span>
+                  <span class="pull-right-container">
+                    <i class="fa fa-angle-left pull-right"></i>
+                  </span>
+              </a>
+              <ul class="treeview-menu">
+                  <li id="clubs_add" class=""><a href="<?= base_url('admin/clubs/add'); ?>"><i class="fa fa-plus"></i> Verein hinzufügen</a></li>
+                  <li id="clubs_list" class=""><a href="<?= base_url('admin/clubs'); ?>"><i class="fa fa-map-marker"></i> Vereine anzeigen</a></li>
               </ul>
           </li>
           <li id="reports" class="treeview">
@@ -66,6 +78,8 @@ $cur_tab = $this->uri->segment(2)==''?'dashboard': $this->uri->segment(2);
               </a>
               <ul class="treeview-menu">
                   <li id="reports_birthdays" class=""><a href="<?= base_url('admin/reports/birthdays'); ?>"><i class="fa fa-birthday-cake"></i> Geburtstage</a></li>
+                  <li id="reports_joined_anniversary" class=""><a href="<?= base_url('admin/reports/joined_anniversary'); ?>"><i class="fa fa-birthday-cake"></i> Vereinszugehörigkeit</a></li>
+                  <li id="reports_history" class=""><a href="<?= base_url('admin/reports/history'); ?>"><i class="fa fa-eye"></i> Änderungs Historie</a></li>
               </ul>
           </li>
 	</section>
diff --git a/application/views/admin/keys/keys_add.php b/application/views/admin/keys/keys_add.php
index 63c8d3e..85b17ec 100644
--- a/application/views/admin/keys/keys_add.php
+++ b/application/views/admin/keys/keys_add.php
@@ -1,15 +1,9 @@
-<script src="<?= base_url() ?>public/plugins/datepicker/bootstrap-datepicker.js"></script>
-<link rel="stylesheet" href="<?= base_url() ?>public/plugins/bootstrap-datepicker/css/datepicker.css">
-<script>
-    $('#datepicker').datepicker({})
-</script>
-
 <section class="content">
   <div class="row">
     <div class="col-md-12">
       <div class="box box-body with-border">
         <div class="col-md-6">
-          <h4><i class="fa fa-plus"></i> &nbsp;Mitglied hinzufügen</h4>
+          <h4><i class="fa fa-plus"></i> &nbsp;Schlüssel hinzufügen</h4>
         </div>
       </div>
     </div>
@@ -17,125 +11,21 @@
   <div class="row">
     <div class="col-md-12">
       <div class="box border-top-solid">
-        <!-- /.box-header -->
-        <!-- form start -->
         <div class="box-body my-form-body">
-            <?php echo form_open(base_url('admin/members/add'), 'class="form-horizontal"');  ?>
+            <?php echo form_open(base_url('admin/keys/add'), 'class="form-horizontal"');  ?>
               <div class="form-group">
-                <label for="firstname" class="col-sm-2 control-label">Vorname</label>
-
+                <label for="key_number" class="col-sm-2 control-label">Schlüssel Nummer</label>
                 <div class="col-sm-9">
-                  <input type="text" name="firstname" class="form-control" id="firstname" placeholder="">
+                  <input type="text" name="key_number" class="form-control" id="key_number" placeholder="">
                 </div>
               </div>
-
-              <div class="form-group">
-                <label for="lastname" class="col-sm-2 control-label">Nachname</label>
-
-                <div class="col-sm-9">
-                  <input type="text" name="lastname" class="form-control" id="lastname" placeholder="">
-                </div>
-              </div>
-
-              <div class="form-group">
-                <label for="street" class="col-sm-2 control-label">Straße</label>
-
-                <div class="col-sm-9">
-                  <input type="text" name="street" class="form-control" id="street" placeholder="">
-                </div>
-              </div>
-              <div class="form-group">
-                <label for="zip" class="col-sm-2 control-label">Postleitzahl</label>
-
-                <div class="col-sm-9">
-                  <input type="text" name="zip" class="form-control" id="zip" placeholder="">
-                </div>
-              </div>
-            <div class="form-group">
-                <label for="town" class="col-sm-2 control-label">Ort</label>
-
-                <div class="col-sm-9">
-                    <input type="text" name="town" class="form-control" id="town" placeholder="">
-                </div>
-            </div>
-            <div class="form-group">
-                <label for="birthday" class="col-sm-2 control-label">Geburtstag</label>
-
-                <div class="col-sm-9">
-                    <div class="input-group date">
-                        <div class="input-group-addon"><i class="fa fa-calendar"></i></div>
-                        <input type="text" class="form-control pull-right datepicker" id="datepicker" name="birthday" data-provide="datepicker" data-date-format="dd.mm.yyyy">
-                    </div>
-                </div>
-            </div>
-            <div class="form-group">
-                <label for="joined" class="col-sm-2 control-label">Eintritt</label>
-
-                <div class="col-sm-9">
-                    <div class="input-group date">
-                        <div class="input-group-addon"><i class="fa fa-calendar"></i></div>
-                        <input type="text" class="form-control pull-right datepicker" id="datepicker" name="joined" data-provide="datepicker" data-date-format="dd.mm.yyyy">
-                    </div>
-                </div>
-            </div>
-            <div class="form-group">
-                <label for="withdrawal" class="col-sm-2 control-label">Austritt</label>
-
-                <div class="col-sm-9">
-                    <div class="input-group date">
-                        <div class="input-group-addon"><i class="fa fa-calendar"></i></div>
-                        <input type="text" class="form-control pull-right datepicker" id="datepicker" name="withdrawal" data-provide="datepicker" data-date-format="dd.mm.yyyy">
-                    </div>
-                </div>
-            </div>
-            <div class="form-group">
-                <label for="insurance_type" class="col-sm-2 control-label">Versicherungs Typ</label>
-
-                <div class="col-sm-9">
-                    <select name="insurance_type_id" class="form-control">
-                        <?php foreach($insurance_types as $insurance_type): ?>
-                            <option value="<?= $insurance_type['id']; ?>"><?= $insurance_type['insurance_type_name']; ?></option>
-                        <?php endforeach; ?>
-                    </select>
-                </div>
-            </div>
-            <div class="form-group">
-                <label for="insurance_number" class="col-sm-2 control-label">Versicherungs Nummer</label>
-
-                <div class="col-sm-9">
-                    <input type="text" name="insurance_number" class="form-control" id="insurance_number" placeholder="">
-                </div>
-            </div>
-                <div class="form-group">
-                    <label for="role" class="col-sm-2 control-label">Amt im Verein</label>
-
-                    <div class="col-sm-9">
-                        <select name="club_function_id" class="form-control">
-                            <?php foreach($club_functions as $function): ?>
-                                <option value="<?= $function['id']; ?>"><?= $function['club_function_name']; ?></option>
-                            <?php endforeach; ?>
-                        </select>
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label for="role" class="col-sm-2 control-label">Mitgliedschaft</label>
-
-                    <div class="col-sm-9">
-                        <select name="member_type_id" class="form-control">
-                            <?php foreach($member_types as $member_type): ?>
-                                <option value="<?= $member_type['id']; ?>"><?= $member_type['member_type_name']; ?></option>
-                            <?php endforeach; ?>
-                        </select>
-                    </div>
-                </div>
               <div class="form-group">
                 <div class="col-md-11">
-                  <input type="submit" name="submit" value="Mitglied hinzufügen" class="btn btn-info pull-right">
+                  <input type="submit" name="submit" value="Schlüssel hinzufügen" class="btn btn-info pull-right">
                 </div>
               </div>
             <?php echo form_close( ); ?>
           </div>
-          <!-- /.box-body -->
       </div>
     </div>
   </div>
diff --git a/application/views/admin/keys/keys_list.php b/application/views/admin/keys/keys_list.php
index 0f3539c..19e5284 100644
--- a/application/views/admin/keys/keys_list.php
+++ b/application/views/admin/keys/keys_list.php
@@ -18,6 +18,7 @@
             <th>Nummer</th>
             <th>Besitzer</th>
             <th>Ausgabe Datum</th>
+            <th>Notizen</th>
             <th style="width: 100px;" class="text-right">Optionen</th>
         </tr>
         </thead>
@@ -27,8 +28,9 @@
             <td><?= $row['key_number']; ?></td>
             <td><?= $row['firstname'].' '.$row['lastname'];; ?></td>
             <td><?= date_to_german($row['key_distribution']); ?></td>
+            <td><?= $row['key_note']; ?></td>
             <td class="text-right">
-                <button type="button" class="btn btn-danger btn-sm key_edit" data-toggle="modal" data-target="#key_edit" data-memberid="<?= $row['member_id']?>" data-keyid="<?= $row['key_number']?>"><i class="fa fa-edit"></i></button>
+                <button type="button" class="btn btn-danger btn-sm key_edit" data-toggle="modal" data-target="#key_edit" data-key_note="<?= $row['key_note']?>" data-memberid="<?= $row['member_id']?>" data-keyid="<?= $row['key_number']?>"><i class="fa fa-edit"></i></button>
             </td>
 		  </tr>
           <?php endforeach; ?>
@@ -64,6 +66,9 @@
                             <input type="text" class="form-control pull-right" id="key_distribution" name="key_distribution" data-date-format="dd.mm.yyyy">
                         </div>
                     </div>
+                    <div class="form-group">
+                        <input type="text" class="form-control" name="key_note" id="key_note" data-cip-id="key_note" />
+                    </div>
                     <div class="modal-footer">
                         <button type="button" class="btn btn-default" data-dismiss="modal">Abbruch</button>
                         <button type="submit" class="btn btn-success">Speichern</button>
@@ -94,11 +99,13 @@
         var button = $(event.relatedTarget);
         var keyid = button.data('keyid');
         var memberid = button.data('memberid');
+        var key_note = button.data('key_note');
 
         var modal = $(this);
         //modal.find('.key_distribution').datepicker();
         modal.find('.modal-body select').val(memberid);
         modal.find('.modal-body #keyid').val(keyid);
+        modal.find('.modal-body #key_note').val(key_note);
     });
 </script>
 
diff --git a/application/views/admin/members/member_add.php b/application/views/admin/members/member_add.php
index 6208b51..e41e045 100644
--- a/application/views/admin/members/member_add.php
+++ b/application/views/admin/members/member_add.php
@@ -124,6 +124,12 @@
                     <input type="checkbox" class="icheckbox_square-green" id="flight_manager" name="flight_manager">
                 </div>
             </div>
+            <div class="form-group">
+                <label for="members_note" class="col-sm-2 control-label">Notizen</label>
+                <div class="col-sm-9">
+                    <textarea class="form-control" rows="5" name="members_note" class="form-control" id="members_note" placeholder="" value=""></textarea>
+                </div>
+            </div>
             <div class="form-group">
                 <div class="col-md-11">
                   <input type="submit" name="submit" value="Mitglied hinzufügen" class="btn btn-info pull-right">
diff --git a/application/views/admin/members/member_edit.php b/application/views/admin/members/member_edit.php
index b28c5a4..ee37365 100644
--- a/application/views/admin/members/member_edit.php
+++ b/application/views/admin/members/member_edit.php
@@ -126,6 +126,12 @@
                             <input type="checkbox" class="icheckbox_square-green" id="flight_manager" name="flight_manager" <?php if($member_data['flight_manager']) { echo " checked"; } ?>>
                         </div>
                     </div>
+                    <div class="form-group">
+                        <label for="members_note" class="col-sm-2 control-label">Notizen</label>
+                        <div class="col-sm-9">
+                            <textarea class="form-control" rows="5" name="members_note" class="form-control" id="members_note" placeholder="" value="<?= $member_data['members_note'];?>"></textarea>
+                        </div>
+                    </div>
                     <div class="form-group">
                         <div class="col-md-11">
                             <input type="submit" name="submit" value="Speichern" class="btn btn-info pull-right">
@@ -143,4 +149,4 @@
 <script src="<?= base_url() ?>public/plugins/iCheck/icheck.js"></script>
 <script>
     $('#datepicker').datepicker({})
-</script>
+</script>
\ No newline at end of file
diff --git a/application/views/admin/members/member_list.php b/application/views/admin/members/member_list.php
index 1d61f8e..d8b78f7 100644
--- a/application/views/admin/members/member_list.php
+++ b/application/views/admin/members/member_list.php
@@ -7,19 +7,10 @@
         <div class="col-md-6">
           <h4><i class="fa fa-wheelchair"></i> &nbsp;Mitglieder</h4>
         </div>
-          <!--
-        <div class="col-md-6 text-right">
-          <div class="btn-group margin-bottom-20"> 
-            <a href="<?= base_url('admin/member/create_users_pdf'); ?>" class="btn btn-success">Export as PDF</a>
-            <a href="<?= base_url('admin/member/export_csv'); ?>" class="btn btn-success">Export as CSV</a>
-          </div>
-        </div>
-        -->
       </div>
     </div>
   </div>
    <div class="box border-top-solid">
-    <!-- /.box-header -->
     <div class="box-body table-responsive">
       <table id="example1" class="table table-bordered table-striped ">
         <thead>
@@ -58,15 +49,11 @@
        
       </table>
     </div>
-    <!-- /.box-body -->
   </div>
-  <!-- /.box -->
-</section>  
+</section>
 
-<!-- Modal -->
 <div id="confirm-delete" class="modal fade" role="dialog">
   <div class="modal-dialog">
-    <!-- Modal content-->
     <div class="modal-content">
       <div class="modal-header">
         <button type="button" class="close" data-dismiss="modal">&times;</button>
@@ -83,27 +70,45 @@
   </div>
 </div>
 
-<script src="<?= base_url() ?>public/plugins/datatables/jquery.dataTables.min.js"></script>
-<script src="<?= base_url() ?>public/plugins/datatables/dataTables.bootstrap.min.js"></script>
-<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
-<script src="//cdn.datatables.net/plug-ins/1.10.16/sorting/datetime-moment.js"></script>
+<script type="text/javascript" src="https://cdn.datatables.net/r/bs/jszip-2.5.0,pdfmake-0.1.18,dt-1.10.9,b-1.0.3,b-html5-1.0.3,b-print-1.0.3/datatables.min.js"></script>
 
-<script>
-  $(function () {
-      $.fn.dataTable.moment( 'DD.MM.YYYY' );
-      $("#example1").DataTable({
-        "language": {
-            "url": "//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/German.json"
-        }
-    });
-  });
-</script> 
 <script type="text/javascript">
     $('#confirm-delete').on('show.bs.modal', function(e) {
         $(this).find('.btn-ok').attr('href', $(e.relatedTarget).data('href'));
     });
 </script>
-  
+
 <script>
+    $(function () {
+        var example1 =  $("#example1").DataTable({
+            responsive: true,
+            lengthMenu: [[10, 25, 50, 100, -1], [10, 25, 50, 100, "Alle"]],
+            buttons: ['excelHtml5', 'pdfHtml5'],
+            language: {
+                "sEmptyTable":      "Keine Daten in der Tabelle vorhanden",
+                "sInfo":            "_START_ bis _END_ von _TOTAL_ Einträgen",
+                "sInfoEmpty":       "0 bis 0 von 0 Einträgen",
+                "sInfoFiltered":    "(gefiltert von _MAX_ Einträgen)",
+                "sInfoPostFix":     "",
+                "sInfoThousands":   ".",
+                "sLengthMenu":      "_MENU_ Einträge anzeigen",
+                "sLoadingRecords":  "Wird geladen...",
+                "sProcessing":      "Bitte warten...",
+                "sSearch":          "Suchen",
+                "sZeroRecords":     "Keine Einträge vorhanden.",
+                "oPaginate": {
+                    "sFirst":       "Erste",
+                    "sPrevious":    "Zurück",
+                    "sNext":        "Nächste",
+                    "sLast":        "Letzte"
+                },
+                "oAria": {
+                    "sSortAscending":  ": aktivieren, um Spalte aufsteigend zu sortieren",
+                    "sSortDescending": ": aktivieren, um Spalte absteigend zu sortieren"
+                }
+            }
+        });
+        example1.buttons().container().appendTo($('.col-sm-6:eq(0)', example1.table().container()));
+    });
     $("#view_members_<?= $menu_class?>").addClass('active');
 </script>
\ No newline at end of file
diff --git a/application/views/admin/members/member_view.php b/application/views/admin/members/member_view.php
index ad6dd23..77d0755 100644
--- a/application/views/admin/members/member_view.php
+++ b/application/views/admin/members/member_view.php
@@ -68,20 +68,28 @@
                     </div>
                     <?php } ?>
 
-                    <?php if($user['knowledge_proof']) { ?>
-                    <div class="form-group">
-                        <div class="col-sm-4">Kenntnisnachweis</div>
-                        <div class="col-sm-8"><?= date_to_german($user['knowledge_proof']); ?></div>
-                    </div>
+                    <?php if($user['knowledge_proof'] != '' && $user['knowledge_proof'] != '0000-00-00') { ?>
+                        <div class="form-group">
+                            <div class="col-sm-4">Kenntnisnachweis</div>
+                            <div class="col-sm-8"><?= date_to_german($user['knowledge_proof']); ?></div>
+                        </div>
                     <?php } ?>
 
-                    <?php if($user['flight_manager']) { ?>
-                    <div class="form-group">
-                        <div class="col-sm-4">Flugleiter Schulung</div>
-                        <div class="col-sm-8">Ja</div>
-                    </div>
+                    <?php if($user['flight_manager'] != '') { ?>
+                        <div class="form-group">
+                            <div class="col-sm-4">Flugleiter Schulung</div>
+                            <div class="col-sm-8">Ja</div>
+                        </div>
                     <?php } ?>
 				</div>
+                <?php if($user['members_note'] != '') { ?>
+                <div class="box-body my-form-body">
+                    <h3>Notizen</h3>
+                    <div class="form-group">
+                        <div class="col-sm-8"><?= $user['members_note']; ?></div>
+                    </div>
+                </div>
+                <?php } ?>
                 <div class="box-body my-form-body">
                     <h3>Kontaktdaten <button style="display: <?= $button_visibility ?>;" type="button" class="btn btn-success btn-sm contact_add" data-toggle="modal" data-target="#contact_add">+</button></h3>
                     <?php foreach ($contact AS $condata) { ?>
@@ -90,7 +98,7 @@
                             <div class="col-sm-6">
                                 <button style="display: <?= $button_visibility ?>;" type="button" class="btn btn-info btn-sm contact_edit" data-toggle="modal" data-target="#contact_edit" data-contactid="<?= $condata['id']?>" data-contactvalue="<?= $condata['value']?>" data-contact_type_id="<?= $condata['contact_type_id']?>"><i class="fa fa-edit"></i></button>
                                 <button style="display: <?= $button_visibility ?>;" type="button" class="btn btn-danger btn-sm contact_delete" data-toggle="modal" data-target="#contact_delete" data-contactid="<?= $condata['id']?>"><i class="fa fa-trash"></i></button>
-                            <?= $condata['value']; ?></div>
+                                <?= $condata['value']; ?></div>
                         </div>
                     <?php } ?>
                 </div>
diff --git a/application/views/admin/reports/history.php b/application/views/admin/reports/history.php
new file mode 100644
index 0000000..08ea9d3
--- /dev/null
+++ b/application/views/admin/reports/history.php
@@ -0,0 +1,59 @@
+<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/r/bs/jszip-2.5.0,pdfmake-0.1.18,dt-1.10.9,b-1.0.3,b-html5-1.0.3,b-print-1.0.3/datatables.min.css" />
+
+<section class="content">
+    <div class="row">
+        <div class="col-md-12">
+            <div class="box box-body">
+                <div class="col-md-6">
+                    <h4><i class="fa fa-eye"></i> Änderungs Historie</h4>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="box border-top-solid">
+        <div class="box-body table-responsive">
+            <table id="example1" class="table table-bordered table-striped ">
+                <thead>
+                <tr>
+                    <th>Datum</th>
+                    <th>Benutzer</th>
+                    <th>Änderung</th>
+                    <th>Tabelle</th>
+                    <th>Datensatz</th>
+                </tr>
+                </thead>
+                <tbody>
+                <?php foreach($history as $row): ?>
+                    <tr>
+                        <td><?=datetime_to_german($row['timestamp'])?></td>
+                        <td><?=$row['firstname'].' '.$row['lastname']?></td>
+                        <td><?=$row['action']?></td>
+                        <td><?=$row['table_name']?></td>
+                        <td><?='('.$row['table_id'].')'?></td>
+                    </tr>
+                <?php endforeach; ?>
+                </tbody>
+            </table>
+        </div>
+    </div>
+</section>
+
+
+<script src="<?= base_url() ?>public/plugins/datatables/jquery.dataTables.min.js"></script>
+<script src="<?= base_url() ?>public/plugins/datatables/dataTables.bootstrap.min.js"></script>
+<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
+<script src="//cdn.datatables.net/plug-ins/1.10.16/sorting/datetime-moment.js"></script>
+
+<script>
+    $(function () {
+        $.fn.dataTable.moment( 'DD.MM.YYYY HH:mm' );
+        $("#example1").DataTable({
+            "language": {
+                "url": "//cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/German.json"
+            },
+            "order": [[ 0, "desc" ]],
+            "lengthMenu": [[25, 50, -1], [25, 50, "All"]]
+        });
+    });
+    $("#reports_history").addClass('active');
+</script>
\ No newline at end of file
diff --git a/application/views/admin/reports/joined_anniversary.php b/application/views/admin/reports/joined_anniversary.php
new file mode 100644
index 0000000..fa531af
--- /dev/null
+++ b/application/views/admin/reports/joined_anniversary.php
@@ -0,0 +1,31 @@
+<section class="content">
+    <div class="row">
+        <div class="col-md-12">
+            <div class="box box-body">
+                <div class="col-md-6">
+                    <h4><i class="fas fa-birthday-cake"></i> &nbsp;Vereinszugehörigkeit</h4>
+                </div>
+            </div>
+        </div>
+    </div>
+    <table id="example1" class="table table-bordered table-striped ">
+        <tr>
+            <th></th>
+            <th>Name</th>
+            <th>Eintritt</th>
+            <th>Zugehörigkeit</th>
+        </tr>
+        <?php foreach ($anniversary as $row) { ?>
+            <tr>
+                <td></td>
+                <td><?= $row['firstname'].' '.$row['lastname']; ?></td>
+                <td><?= date_to_german($row['joined']); ?></td>
+                <td><?= $row['age']; ?></td>
+            </tr>
+        <?php } ?>
+    </table>
+</section>
+
+<script>
+    $("#reports_joined_anniversary").addClass('active');
+</script>
\ No newline at end of file
diff --git a/public/dist/css/style.css b/public/dist/css/style.css
index 2051209..31cbb3a 100644
--- a/public/dist/css/style.css
+++ b/public/dist/css/style.css
@@ -1,6 +1,6 @@
 
 /* Import fonts */
-@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,300,300italic,400italic,600,600italic,700,700italic,800,800italic);
+@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,300,300italic,400italic,600,600italic,700,700italic,800,800italic);
 
 body {
     color: #3e3e3e;
-- 
GitLab