Merge branch 'release/1.3.0'

This commit is contained in:
Nathan Chapman 2021-07-28 21:04:07 -06:00
commit 71a7b52732
4 changed files with 66 additions and 7 deletions

View File

@ -6,11 +6,19 @@
<p><a href="{% url 'employee-pre' %}" class="action-button">Add employee from email</a> or <a href="{% url 'employee-create' %}">Add employee from scratch</a></p> <p><a href="{% url 'employee-pre' %}" class="action-button">Add employee from email</a> or <a href="{% url 'employee-create' %}">Add employee from scratch</a></p>
<section> <section>
{% for employee in employee_list %} {% for employee in employee_list %}
<div class="employee__item">
<div class="pie_chart" type="pie" percent="0%">
<svg viewBox="0 0 64 64">
<circle class="pie" r="32" cx="32" cy="32" style="stroke-width: 64;"></circle>
<circle class="slice" r="32" cx="32" cy="32" style="stroke-width: 64;stroke-dasharray: {% widthratio employee.todos_completed employee.todos_total 201 %} 200;"></circle>
</svg>
</div>
<p> <p>
<a href="{% url 'employee-detail' employee.pk %}"><strong>{{employee.full_name}}</strong></a><br> <a href="{% url 'employee-detail' employee.pk %}"><strong>{{employee.full_name}}</strong></a><br>
<small>Hire date: {{employee.hire_date|date:"SHORT_DATE_FORMAT"}}</small><br> <small>Hire date: {{employee.hire_date|date:"SHORT_DATE_FORMAT"}}</small><br>
<small>Department: {{employee.department}}</small> <small>Department: {{employee.department}}</small>
</p> </p>
</div>
{% endfor %} {% endfor %}
</section> </section>
<section> <section>

View File

@ -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.detail import DetailView
from django.views.generic.list import ListView from django.views.generic.list import ListView
from django.contrib.auth.mixins import LoginRequiredMixin 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 .models import Employee, LogEntry, Todo, Event
from .forms import ( from .forms import (
@ -32,7 +36,10 @@ class SearchResultsView(ListView):
# Employees # Employees
class EmployeeListView(LoginRequiredMixin, ListView): class EmployeeListView(LoginRequiredMixin, ListView):
model = Employee 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): class EmployeeArchivedView(LoginRequiredMixin, ListView):
model = Employee model = Employee

View File

@ -53,6 +53,7 @@ MIDDLEWARE = [
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'onboard.middleware.TimezoneMiddleware',
] ]
ROOT_URLCONF = 'onboard.urls' ROOT_URLCONF = 'onboard.urls'

View File

@ -3,6 +3,7 @@
--black: #393d3f; --black: #393d3f;
--grey: #a7b4bb; --grey: #a7b4bb;
--blue: #10638c; --blue: #10638c;
--light-blue: #74c0e6;
--red: #8c1016; --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 { .log_entry {
display: grid; display: grid;
@ -343,3 +351,38 @@ hgroup {
column-gap: 0.5rem; column-gap: 0.5rem;
margin-bottom: 1rem; 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;
}