Initial work on workflow report

pull/6257/head
Karl Hobley 2020-02-13 16:01:40 +00:00 zatwierdzone przez Matt Westcott
rodzic c59cae51ee
commit 3ab3f5d171
5 zmienionych plików z 216 dodań i 2 usunięć

Wyświetl plik

@ -0,0 +1,108 @@
{% extends "wagtailadmin/base.html" %}
{% load i18n l10n wagtailadmin_tags wagtailui_tags %}
{% block titletag %}{% trans "Workflows" %}{% endblock %}
{% block content %}
<header role="banner">
<div class="row nice-padding">
<div class="left">
<div class="col header-title">
<h1 class="icon icon-placeholder">{% trans "Workflows" %}</h1>
</div>
</div>
<div class="right">
<div class="addbutton">
<a href="{% url 'wagtailadmin_reports:workflow_tasks' %}" class="button">{% trans "By Task" %}</a>
</div>
</div>
</div>
</header>
<div class="nice-padding">
{% if object_list %}
<table class="listing">
<thead>
<tr>
<th>
{% trans 'Workflow' %}
</th>
<th>
{% trans 'Page' %}
</th>
<th>
{% trans 'Status' %}
</th>
<th>
{% trans 'Tasks' %}
</th>
<th>
{% trans 'Requested by' %}
</th>
<th>
{% trans 'Started at' %}
</th>
</tr>
</thead>
<tbody>
{% for workflow_state in object_list %}
<tr>
<td>
<b>{{ workflow_state.workflow }}</b>
</td>
<td>
<a href="{% url 'wagtailadmin_pages:edit' workflow_state.page.id %}">
{{ workflow_state.page.get_admin_display_title }}
</a>
</td>
<td>
<a href="{% url 'wagtailadmin_pages:workflow_history_detail' workflow_state.page.id workflow_state.id %}" class="status-tag primary">
{{ workflow_state.get_status_display }}
</a>
</td>
<td>
<h2>{{ workflow_name }}</h2>
{% trans 'Approved task' as approved_title %}
{% trans 'Incomplete task' as incomplete_title %}
{% for task in workflow_state.all_tasks_with_status %}
<span data-wagtail-tooltip="{{ task.name }}: {{ task.status_display }}">
{% if task.status == 'approved' %}
{% wagtail_icon name="success" title=approved_title %}
{% else %}
{% wagtail_icon name="radio-empty" title=incomplete_title %}
{% endif %}
</span>
{% endfor %}
</td>
<td>{{ workflow_state.requested_by }}</td>
<td>{{ workflow_state.created_at }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{% trans "No pages have been submitted for moderation yet" %}</p>
{% endif %}
</div>
{% endblock %}
{% block extra_js %}
{{ block.super }}
{# load editor js to get tooltips #}
{% include "wagtailadmin/pages/_editor_js.html" %}
<script>
$(function() {
$('[data-wagtail-tooltip]').tooltip({
animation: false,
title: function() {
return $(this).attr('data-wagtail-tooltip');
},
trigger: 'hover',
placement: 'bottom',
});
})
</script>
{% endblock %}

Wyświetl plik

@ -0,0 +1,74 @@
{% extends "wagtailadmin/base.html" %}
{% load i18n l10n wagtailadmin_tags wagtailui_tags %}
{% block titletag %}{% trans "Workflows" %}{% endblock %}
{% block content %}
{% trans "Workflows" as title_str %}
<header role="banner">
<div class="row nice-padding">
<div class="left">
<div class="col header-title">
<h1 class="icon icon-placeholder">Workflows</h1>
</div>
</div>
<div class="right">
<div class="addbutton">
<a href="{% url 'wagtailadmin_reports:workflow' %}" class="button">By Workflow</a>
</div>
</div>
</div>
</header>
<div class="nice-padding">
{% if object_list %}
<table class="listing">
<thead>
<tr>
<th>
{% trans 'Task' %}
</th>
<th>
{% trans 'Page' %}
</th>
<th>
{% trans 'Status' %}
</th>
<th>
{% trans 'Started at' %}
</th>
<th>
{% trans 'Completed at' %}
</th>
</tr>
</thead>
<tbody>
{% for task_state in object_list %}
<tr>
<td>
<b>{{ task_state.task }}</b>
</td>
<td>
{% with task_state.workflow_state.page as page %}
<a href="{% url 'wagtailadmin_pages:edit' page.id %}">
{{ page.get_admin_display_title }}
</a>
{% endwith %}
</td>
<td>
<div class="status-tag primary">
{{ task_state.get_status_display }}
</div>
</td>
<td>{{ task_state.started_at }}</td>
<td>{{ task_state.finished_at }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{% blocktrans %}No pages have been submitted for moderation yet{% endblocktrans %}</p>
{% endif %}
</div>
{% endblock %}

Wyświetl plik

@ -4,5 +4,7 @@ from wagtail.admin.views import reports
app_name = 'wagtailadmin_reports'
urlpatterns = [
path('locked/', reports.LockedPagesView.as_view(), name='locked_pages')
path('locked/', reports.LockedPagesView.as_view(), name='locked_pages'),
path('workflow/', reports.WorkflowView.as_view(), name='workflow'),
path('workflow/tasks/', reports.WorkflowTasksView.as_view(), name='workflow_tasks'),
]

Wyświetl plik

@ -12,7 +12,7 @@ from xlsxwriter.workbook import Workbook
from wagtail.admin.auth import permission_denied
from wagtail.admin.filters import LockedPagesReportFilterSet
from wagtail.core.models import Page, UserPagePermissionsProxy
from wagtail.core.models import Page, TaskState, UserPagePermissionsProxy, WorkflowState
class Echo:
@ -271,3 +271,23 @@ class LockedPagesView(PageReportView):
if not UserPagePermissionsProxy(request.user).can_remove_locks():
return permission_denied(request)
return super().dispatch(request, *args, **kwargs)
class WorkflowView(ReportView):
template_name = 'wagtailadmin/reports/workflow.html'
title = _('Workflow')
header_icon = 'placeholder'
def get_queryset(self):
pages = UserPagePermissionsProxy(self.request.user).editable_pages()
return WorkflowState.objects.filter(page__in=pages)
class WorkflowTasksView(ReportView):
template_name = 'wagtailadmin/reports/workflow_tasks.html'
title = _('Workflow')
header_icon = 'placeholder'
def get_queryset(self):
pages = UserPagePermissionsProxy(self.request.user).editable_pages()
return TaskState.objects.filter(workflow_state__page__in=pages)

Wyświetl plik

@ -648,11 +648,21 @@ class LockedPagesMenuItem(MenuItem):
return UserPagePermissionsProxy(request.user).can_remove_locks()
class WorkflowReportMenuItem(MenuItem):
def is_shown(self, request):
return True
@hooks.register('register_reports_menu_item')
def register_locked_pages_menu_item():
return LockedPagesMenuItem(_('Locked Pages'), reverse('wagtailadmin_reports:locked_pages'), classnames='icon icon-locked', order=700)
@hooks.register('register_reports_menu_item')
def register_workflow_report_menu_item():
return WorkflowReportMenuItem(_('Workflows'), reverse('wagtailadmin_reports:workflow'), classnames='icon icon-placeholder', order=800)
@hooks.register('register_admin_menu_item')
def register_reports_menu():
return ReportsMenuItem(