From 97d3e9dfb682d1b6ce23df3f51bd09e156897723 Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Wed, 17 Jul 2019 01:06:04 +0200
Subject: [PATCH] Implement view for person. Closes #10.

---
 biscuit/core/static/css/style.css       |   3 +
 biscuit/core/static/img/fallback.png    | Bin 0 -> 19126 bytes
 biscuit/core/tables.py                  |   6 +-
 biscuit/core/templates/core/base.html   |   3 +-
 biscuit/core/templates/core/person.html |  83 ++++++++++++++++++++++++
 biscuit/core/urls.py                    |   2 +
 biscuit/core/views.py                   |  20 +++++-
 7 files changed, 112 insertions(+), 5 deletions(-)
 create mode 100644 biscuit/core/static/css/style.css
 create mode 100644 biscuit/core/static/img/fallback.png
 create mode 100644 biscuit/core/templates/core/person.html

diff --git a/biscuit/core/static/css/style.css b/biscuit/core/static/css/style.css
new file mode 100644
index 000000000..e74da4373
--- /dev/null
+++ b/biscuit/core/static/css/style.css
@@ -0,0 +1,3 @@
+img.person-img {
+        max-height: 300px;
+}
diff --git a/biscuit/core/static/img/fallback.png b/biscuit/core/static/img/fallback.png
new file mode 100644
index 0000000000000000000000000000000000000000..a39964ba07f9a6aea6b53943f8e79199cb204c87
GIT binary patch
literal 19126
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

literal 0
HcmV?d00001

diff --git a/biscuit/core/tables.py b/biscuit/core/tables.py
index 5d6f480c2..f4a8e508a 100644
--- a/biscuit/core/tables.py
+++ b/biscuit/core/tables.py
@@ -1,11 +1,11 @@
 from django.utils.translation import ugettext_lazy as _
 import django_tables2 as tables
-#from django_tables2.utils import A
+from django_tables2.utils import A
 
 
 class PersonsTable(tables.Table):
     class Meta:
         attrs = {'class': 'table table-striped table-bordered table-hover table-responsive-xl'}
 
-    first_name = tables.Column(verbose_name=_('First name'))
-    last_name = tables.Column(verbose_name=_('Last name'))
+    first_name = tables.LinkColumn('person_by_id', args=[A('id')])
+    last_name = tables.LinkColumn('person_by_id', args=[A('id')])
diff --git a/biscuit/core/templates/core/base.html b/biscuit/core/templates/core/base.html
index a55cafddd..320c74455 100644
--- a/biscuit/core/templates/core/base.html
+++ b/biscuit/core/templates/core/base.html
@@ -5,8 +5,9 @@
 {% block bootstrap4_title %}BiscuIT School Information System{% endblock %}
 
 {% block bootstrap4_extra_head %}
+ {% fa_css %}
  {% include_css "DataTables-Bootstrap4" %}
- <link rel="stylesheet" href="{% static 'style.css' %}" />
+ <link rel="stylesheet" href="{% static 'css/style.css' %}" />
  <link rel="shortcut icon" href="#" />
 {% endblock %}
 
diff --git a/biscuit/core/templates/core/person.html b/biscuit/core/templates/core/person.html
new file mode 100644
index 000000000..af0dc9312
--- /dev/null
+++ b/biscuit/core/templates/core/person.html
@@ -0,0 +1,83 @@
+{% extends "core/base.html" %}
+{% load bootstrap4 font_awesome i18n staticfiles %}
+
+{% block content %}
+<div class="col-sm-12 col-md-12">
+ {% if person %}
+  <h2>{{ person.first_name }} {{ person.last_name }}</h2>
+  <p>
+   <a href="{{ '#' }}">
+    {% blocktrans %}Edit person{% endblocktrans %}
+   </a>
+  </p>
+  <h3>{% blocktrans %}Contact details{% endblocktrans %}</h3>
+  <table class="table table-responsive-xl table-border table-striped">
+   <tr>
+    <td rowspan="6">
+     {% if person.photo %}
+      <img class="person-img" src="{{ person.photo.url }}" alt="{{ person.first_name }} {{ person.last_name }}" />
+     {% else %}
+      <img class="person-img" src="{% static 'img/fallback.png' %}" alt="{{ person.first_name }} {{ person.last_name }}" />
+     {% endif %}
+    </td>
+    <td>{% fa 'user' %}</td>
+    <td>{{ person.first_name }}</td>
+    <td>{{ person.additional_name }}</td>
+    <td>{{ person.last_name }}</td>
+   </tr>
+   <tr>
+    <td>{% fa 'venus-mars' %}</td>
+    <td colspan="3">{{ person.get_sex_display }}</td>
+   </tr>
+   <tr>
+    <td>{% fa 'fa-home' %}</td>
+    <td colspan="2">{{ person.street }} {{ person.housenumber }}</td>
+    <td colspan="2">{{ person.postal_code }} {{ person.place }}</td>
+   </tr>
+   <tr>
+    <td>{% fa 'phone-square' %}</td>
+    <td>{{ person.phone_number }}</td>
+    <td>{{ person.mobile_number }}</td>
+   </tr>
+   <tr>
+    <td>{% fa 'envelope' %}</td>
+    <td colspan="3">{{ person.email }}</td>
+   </tr>
+   <tr>
+    <td>{% fa 'gift' %}</td>
+    <td colspan="3">{{ person.date_of_birth|date }}</td>
+   </tr>
+   {% comment %}
+   <tr>
+    <td>{% fa 'graduation-cap' %}</td>
+    <td>Class</td>
+    <td>Teacher</td>
+   </tr>
+   {% endcomment %}
+  </table>
+
+  {# Will be implemted soon #}
+  <table class="table table-responsive-xl table-border table-striped">
+   <tr>
+    <td>Member</td>
+     <td>
+      <h4>Groups</h4>
+      <ul>
+       <li><a href="#">Foo</a></li>
+       <li><a href="#">Foo</a></li>
+       <li><a href="#">Foo</a></li>
+       <li><a href="#">Foo</a></li>
+     </td>
+   </tr> 
+  </table>
+ {% else %}
+  <h2>{% blocktrans %}Person not found{% endblocktrans %}</h2>
+
+  <p>
+   {% blocktrans %}
+    There is no person with this id.
+   {% endblocktrans %}
+  </p>
+ {% endif %}
+</div>
+{% endblock %}
diff --git a/biscuit/core/urls.py b/biscuit/core/urls.py
index 1fac42e09..781d9f223 100644
--- a/biscuit/core/urls.py
+++ b/biscuit/core/urls.py
@@ -10,6 +10,8 @@ urlpatterns = [
     path('admin/', admin.site.urls),
     path('accounts/', include('django.contrib.auth.urls')),
     path('persons', views.persons, name='persons'),
+    path('person', views.person, name='person'),
+    path('person/<int:id_>', views.person, name='person_by_id'),
     path('', views.index, name='index'),
 ]
 
diff --git a/biscuit/core/views.py b/biscuit/core/views.py
index e4c0929c4..8154e4aaf 100644
--- a/biscuit/core/views.py
+++ b/biscuit/core/views.py
@@ -1,6 +1,9 @@
 from django.contrib.auth.decorators import login_required
-from django.shortcuts import render
+from django.utils.translation import gettext as _
+from django.http import Http404
+from django.shortcuts import redirect, render
 from django_tables2 import RequestConfig
+from django.urls import reverse
 from .models import Person
 from .tables import PersonsTable
 
@@ -21,3 +24,18 @@ def persons(request):
     context['persons_table'] = persons_table
 
     return render(request, 'core/persons.html', context)
+
+@login_required
+def person(request, id_):
+    context = {}
+
+    # Get person and check access
+    try:
+        person = Person.objects.get(pk=id_)
+    except Person.DoesNotExist as e:
+        # Turn not-found object into a 404 error
+        raise Http404 from e
+
+    context['person'] = person
+
+    return render(request, 'core/person.html', context)
-- 
GitLab