Repository URL to install this package:
|
Version:
1.1.1 ▾
|
from rest_framework import serializers
from rest_framework.reverse import reverse
from django_fsm_log.models import StateLog
class FSMActionField(serializers.ReadOnlyField):
''' Shows all available FSM Actions for the current user '''
def __init__(self, url_prefix, *args, **kwargs):
self.url_prefix = url_prefix
super().__init__(*args, **kwargs)
def get_attribute(self, obj):
request = self.context.get('request', None)
if request:
available_transitions = obj.get_available_user_status_transitions(request.user)
return {transition.name :reverse(f'{self.url_prefix}-{transition.name}', args=[obj.id], request=request) for transition in available_transitions}
return None
class FSMHistoryField(serializers.ReadOnlyField):
''' Shows the history of all FSM Actions '''
def get_attribute(self, obj):
rv = list()
for log in StateLog.objects.for_(obj):
log_by = None
log_by_repr = None
if log.by:
if hasattr(log.by, 'profile'):
# NOTE: Only if wbcrm is installed
log_by = log.by.profile.id
log_by_repr = str(log.by.profile)
else:
log_by = log.by.id
log_by_repr = str(log.by)
rv.append({
'timestamp': log.timestamp,
'by': log_by,
'by_repr': log_by_repr,
'status': log.state,
'description': log.description,
'data': log.data
})
return rv