Merge branch 'release/1.3.0'
This commit is contained in:
commit
71a7b52732
@ -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>
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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'
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user