Create change log entry on status updates
This commit is contained in:
@@ -306,11 +306,13 @@ class Event(models.Model):
|
||||
signals.event_created.send(sender=self.__class__, event=self)
|
||||
self.workflow.update_status('draft', self.editor)
|
||||
else:
|
||||
change = EventChange(event=self, user=self.editor, operation='update', content=self.diff(original))
|
||||
change = EventChange(event=self, user=self.editor, operation=EventChange.UPDATE,
|
||||
content=self.diff(original))
|
||||
change.save()
|
||||
if not implicit_update:
|
||||
logger.info('Event updated: %s', self)
|
||||
signals.event_updated.send(sender=self.__class__, event=self, diff=self.diff(original, fmt='human_readable'), user=self.editor)
|
||||
signals.event_updated.send(sender=self.__class__, event=self, user=self.editor,
|
||||
diff=self.diff(original, fmt='human_readable'))
|
||||
|
||||
def diff(self, event, fmt='json'):
|
||||
if fmt == 'human_readable':
|
||||
@@ -326,16 +328,14 @@ class Event(models.Model):
|
||||
for field in fields:
|
||||
field_name = field.name
|
||||
from_value = getattr(event, field_name)
|
||||
if (isinstance(from_value, datetime.datetime) or
|
||||
isinstance(from_value, datetime.date) or
|
||||
isinstance(from_value, datetime.time) or
|
||||
isinstance(from_value, Country)):
|
||||
try:
|
||||
json.dumps(from_value)
|
||||
except TypeError:
|
||||
from_value = str(from_value)
|
||||
to_value = getattr(self, field_name)
|
||||
if (isinstance(to_value, datetime.datetime) or
|
||||
isinstance(to_value, datetime.date) or
|
||||
isinstance(to_value, datetime.time) or
|
||||
isinstance(to_value, Country)):
|
||||
try:
|
||||
json.dumps(to_value)
|
||||
except TypeError:
|
||||
to_value = str(to_value)
|
||||
if from_value != to_value:
|
||||
change = {
|
||||
|
||||
@@ -7,10 +7,6 @@ from django.utils.encoding import python_2_unicode_compatible
|
||||
|
||||
from . import get_ghost_user, get_system_user
|
||||
|
||||
CHANGE_OPERATIONS = (
|
||||
('update', 'update'),
|
||||
)
|
||||
|
||||
|
||||
def get_system_user_id():
|
||||
return get_system_user().id
|
||||
@@ -18,6 +14,15 @@ def get_system_user_id():
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class EventChange(models.Model):
|
||||
UPDATE = 'update'
|
||||
RAISE_FLAG = 'set_flag'
|
||||
LOWER_FLAG = 'unset_flag'
|
||||
OPERATION_CHOICES = (
|
||||
(UPDATE, 'Update'),
|
||||
(RAISE_FLAG, 'Raise Flag'),
|
||||
(LOWER_FLAG, 'Lower Flag'),
|
||||
)
|
||||
|
||||
event = models.ForeignKey('dav_events.Event', related_name='changes')
|
||||
timestamp = models.DateTimeField(default=timezone.now)
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL,
|
||||
@@ -25,7 +30,7 @@ class EventChange(models.Model):
|
||||
on_delete=models.SET(get_ghost_user),
|
||||
related_name='+')
|
||||
|
||||
operation = models.CharField(max_length=20, choices=CHANGE_OPERATIONS)
|
||||
operation = models.CharField(max_length=20, choices=OPERATION_CHOICES)
|
||||
content = models.TextField()
|
||||
|
||||
class Meta:
|
||||
|
||||
Reference in New Issue
Block a user