Skip to content

Commit 62f33ac

Browse files
committed
Admin task status actions
1 parent dcc871f commit 62f33ac

File tree

5 files changed

+66
-2
lines changed

5 files changed

+66
-2
lines changed

viewflow/admin.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,34 @@ class TaskAdmin(admin.ModelAdmin):
4646
'started', 'finished']
4747
list_display_links = ['pk', 'created', 'process']
4848
list_filter = ['status']
49-
readonly_fields = ['process', 'flow_task', 'started', 'finished', 'previous', 'token']
49+
readonly_fields = ['process', 'status', 'flow_task', 'started', 'finished', 'previous', 'token']
50+
51+
@property
52+
def change_form_template(self):
53+
opts = self.model._meta
54+
55+
return [
56+
"admin/%s/%s/change_form.html" % (opts.app_label, opts.model_name),
57+
"admin/%s/change_form.html" % opts.app_label,
58+
'admin/viewflow/task/change_form.html'
59+
]
60+
61+
def save_model(self, request, obj, form, change):
62+
result = super(TaskAdmin, self).save_model(request, obj, form, change)
63+
64+
status_action = next((action[len('_change_status_'):]
65+
for action in request.POST.keys()
66+
if action.startswith('_change_status_')), None)
67+
if status_action:
68+
activation = obj.activate()
69+
activation_cls = activation.__class__
70+
transition = next((transition for transition in activation_cls.status.get_available_transtions(activation)
71+
if transition.name == status_action), None)
72+
if transition:
73+
transition(activation)
74+
request.POST['_continue'] = True
75+
76+
return result
5077

5178

5279
admin.site.register(Process, ProcessAdmin)

viewflow/flow/task_view.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,9 @@ def get_management_form_cls(self):
8383
@Activation.status.super()
8484
def prepare(self, data=None, user=None):
8585
super(ManagedViewActivation, self).prepare.original()
86-
self.task.owner = user
86+
87+
if user:
88+
self.task.owner = user
8789

8890
management_form_cls = self.get_management_form_cls()
8991
self.management_form = management_form_cls(data=data, instance=self.task)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{% extends "admin/change_form.html" %}
2+
{% load admin_modify viewflow %}
3+
4+
{% block submit_buttons_top %}{% viewflow_task_submit_row %}{% endblock %}
5+
6+
{% block submit_buttons_bottom %}{% viewflow_task_submit_row %}{% endblock %}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{% load i18n admin_urls %}
2+
<div class="submit-row">
3+
{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save" />{% endif %}
4+
{% if show_delete_link %}
5+
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
6+
<p class="deletelink-box"><a href="{% add_preserved_filters delete_url %}" class="deletelink">{% trans "Delete" %}</a></p>
7+
{% endif %}
8+
{% if show_save_as_new %}<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" />{%endif%}
9+
{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" />{% endif %}
10+
{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" />{% endif %}
11+
{% for transition_name, transition in transitions %}
12+
<input type="submit" value="{{ transition_name }}" class="default" name="_change_status_{{ transition }}"/>
13+
{% endfor %}
14+
</div>

viewflow/templatetags/viewflow.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from inspect import getargspec
22

33
from django import template
4+
from django.contrib.admin.templatetags.admin_modify import submit_row
45
from django.core.urlresolvers import reverse
56
from django.template.base import TemplateSyntaxError, TagHelperNode, parse_bits
67
from django.template.loader import select_template
@@ -124,3 +125,17 @@ def include_process_data(context, process):
124125
return template.render(context)
125126
finally:
126127
context.pop()
128+
129+
130+
@register.inclusion_tag('admin/viewflow/task/submit_line.html', takes_context=True)
131+
def viewflow_task_submit_row(context):
132+
task = context.get('original', None)
133+
activation = task.activate()
134+
activation_cls = activation.__class__
135+
136+
transitions = [(transition.name.replace('_', ' ').capitalize(), transition.name)
137+
for transition in activation_cls.status.get_available_transtions(activation)]
138+
139+
row_context = submit_row(context)
140+
row_context['transitions'] = transitions
141+
return row_context

0 commit comments

Comments
 (0)