diff --git a/board/templates/board/employee_list.html b/board/templates/board/employee_list.html index 13f37a0..59a5402 100644 --- a/board/templates/board/employee_list.html +++ b/board/templates/board/employee_list.html @@ -6,11 +6,19 @@

Add employee from email or Add employee from scratch

{% for employee in employee_list %} -

- {{employee.full_name}}
- Hire date: {{employee.hire_date|date:"SHORT_DATE_FORMAT"}}
- Department: {{employee.department}} -

+
+
+ + + + +
+

+ {{employee.full_name}}
+ Hire date: {{employee.hire_date|date:"SHORT_DATE_FORMAT"}}
+ Department: {{employee.department}} +

+
{% endfor %}
diff --git a/board/views.py b/board/views.py index dc4ccce..abc8202 100644 --- a/board/views.py +++ b/board/views.py @@ -5,7 +5,11 @@ from django.views.generic.edit import FormView, CreateView, UpdateView, DeleteVi from django.views.generic.detail import DetailView from django.views.generic.list import ListView from django.contrib.auth.mixins import LoginRequiredMixin -from django.db.models import Q + + +from django.db.models import (Exists, OuterRef, + Prefetch, Subquery, Count, Sum, F, Q, Value) +from django.db.models.functions import Length, Upper from .models import Employee, LogEntry, Todo, Event from .forms import ( @@ -32,7 +36,10 @@ class SearchResultsView(ListView): # Employees class EmployeeListView(LoginRequiredMixin, ListView): model = Employee - queryset = Employee.objects.filter(archived=False).order_by('hire_date') + queryset = Employee.objects.filter(archived=False).order_by('hire_date').annotate( + todos_total=Count('todo'), + todos_completed=Count('pk', filter=Q(todo__completed=True)), + ) class EmployeeArchivedView(LoginRequiredMixin, ListView): model = Employee diff --git a/onboard/settings.py b/onboard/settings.py index a0775c0..1fc67d7 100644 --- a/onboard/settings.py +++ b/onboard/settings.py @@ -53,6 +53,7 @@ MIDDLEWARE = [ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'onboard.middleware.TimezoneMiddleware', ] ROOT_URLCONF = 'onboard.urls' diff --git a/static/styles/main.css b/static/styles/main.css index 0e037c5..65ffeee 100644 --- a/static/styles/main.css +++ b/static/styles/main.css @@ -3,6 +3,7 @@ --black: #393d3f; --grey: #a7b4bb; --blue: #10638c; + --light-blue: #74c0e6; --red: #8c1016; } @@ -313,6 +314,13 @@ hgroup { } +.employee__item { + display: grid; + grid-template-columns: 0.25fr 4fr; + column-gap: 1rem; + align-items: center; +} + .log_entry { display: grid; @@ -342,4 +350,39 @@ hgroup { grid-template-columns: 0.25fr 2fr 0.25fr; column-gap: 0.5rem; margin-bottom: 1rem; +} + + + + + +.pie_chart { + display: inline-block; + width: 2rem; + height: 2rem; + +} + + +circle.pie { + fill: rgba(255,255,255,0); + stroke: var(--light-blue); +} + +circle.slice { + fill: rgba(255,255,255,0); + stroke: var(--blue); +} + +svg { + border-radius: 50%; + -webkit-transform: rotate(-90deg); + -moz-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); +} + +svg:not(:root) { + overflow: hidden; } \ No newline at end of file