django-orchestra-test/orchestra/apps/issues/helpers.py

41 lines
1.6 KiB
Python

def filter_actions(modeladmin, ticket, request):
if not hasattr(modeladmin, 'change_view_actions_backup'):
modeladmin.change_view_actions_backup = list(modeladmin.change_view_actions)
actions = modeladmin.change_view_actions_backup
if ticket.state == modeladmin.model.CLOSED:
del_actions = actions
else:
from .actions import action_map
del_actions = [action_map.get(ticket.state, None)]
if ticket.owner == request.user:
del_actions.append('take')
exclude = lambda a: not (a == action or a.url_name == action)
for action in del_actions:
actions = list(filter(exclude, actions))
return actions
def markdown_formated_changes(changes):
markdown = ''
for name, values in changes.items():
context = (name.capitalize(), values[0], values[1])
markdown += '* **%s** changed from _%s_ to _%s_\n' % context
return markdown + '\n'
def get_ticket_changes(modeladmin, request, ticket):
ModelForm = modeladmin.get_form(request, ticket)
form = ModelForm(request.POST, request.FILES)
changes = {}
if form.is_valid():
for attr in ['state', 'priority', 'owner', 'queue']:
old_value = getattr(ticket, attr)
new_value = form.cleaned_data[attr]
if old_value != new_value:
choices = dict(form.fields[attr].choices)
if old_value in choices:
old_value = choices[old_value]
new_value = choices[new_value]
changes[attr] = (old_value, new_value)
return changes