Compare commits
1 Commits
a1d73bb8cf
...
95b34eb9d7
Author | SHA1 | Date |
---|---|---|
Frédéric Péters | 95b34eb9d7 |
|
@ -2277,7 +2277,7 @@ class Event(WithInspectMixin, models.Model):
|
|||
return self.label
|
||||
return date_format(localtime(self.start_datetime), format='DATETIME_FORMAT')
|
||||
|
||||
def get_time_label(self):
|
||||
def get_journal_label(self):
|
||||
date_str = date_format(localtime(self.start_datetime), format='SHORT_DATETIME_FORMAT')
|
||||
if self.label:
|
||||
return f'{self.label} ({date_str})'
|
||||
|
@ -3117,9 +3117,34 @@ class Booking(models.Model):
|
|||
start_time = models.TimeField(null=True)
|
||||
end_time = models.TimeField(null=True)
|
||||
|
||||
def get_journal_label(self):
|
||||
parts = [_('ID: %s') % self.id]
|
||||
if self.user_name:
|
||||
parts.append(_('user: %s') % self.user_name)
|
||||
if self.in_waiting_list:
|
||||
parts.append(_('in waiting list'))
|
||||
if self.cancellation_datetime:
|
||||
parts.append(
|
||||
_('cancelled at %s')
|
||||
% date_format(localtime(self.cancellation_datetime), format='SHORT_DATETIME_FORMAT')
|
||||
)
|
||||
if self.start_time and self.end_time:
|
||||
parts.append(
|
||||
'%s → %s'
|
||||
% (
|
||||
date_format(self.start_time, 'TIME_FORMAT'),
|
||||
date_format(self.end_time, 'TIME_FORMAT'),
|
||||
)
|
||||
)
|
||||
elif self.start_time:
|
||||
parts.append('%s → ?' % date_format(self.start_time, 'TIME_FORMAT'))
|
||||
elif self.end_time:
|
||||
parts.append('? → %s' % date_format(self.end_time, 'TIME_FORMAT'))
|
||||
return ' / '.join([str(x) for x in parts])
|
||||
|
||||
@property
|
||||
def user_name(self):
|
||||
return ('%s %s' % (self.user_first_name, self.user_last_name)).strip()
|
||||
return ('%s %s' % (self.user_first_name or '', self.user_last_name or '')).strip()
|
||||
|
||||
@cached_property
|
||||
def user_check(self): # pylint: disable=method-hidden
|
||||
|
|
|
@ -22,10 +22,10 @@ def audit(action, request=None, user=None, agenda=None, extra_data=None):
|
|||
extra_data = extra_data or {}
|
||||
if 'event' in extra_data:
|
||||
extra_data['event_id'] = extra_data['event'].id
|
||||
extra_data['event'] = extra_data['event'].get_time_label()
|
||||
extra_data['event'] = extra_data['event'].get_journal_label()
|
||||
if 'booking' in extra_data:
|
||||
extra_data['booking_id'] = extra_data['booking'].id
|
||||
del extra_data['booking']
|
||||
extra_data['booking'] = extra_data['booking'].get_journal_label()
|
||||
return AuditEntry.objects.create(
|
||||
user=request.user if request else user,
|
||||
action_type=action_type,
|
||||
|
|
|
@ -293,6 +293,70 @@ def test_journal_browse(app, admin_user, manager_user, settings):
|
|||
]
|
||||
|
||||
|
||||
def test_journal_audit_booking():
|
||||
agenda = Agenda.objects.create(label='Bar', kind='events')
|
||||
event = Event.objects.create(
|
||||
start_datetime=make_aware(datetime.datetime(2024, 1, 2, 3, 4)), places=20, agenda=agenda
|
||||
)
|
||||
booking = Booking.objects.create(
|
||||
event=event,
|
||||
in_waiting_list=True,
|
||||
cancellation_datetime=make_aware(datetime.datetime(2024, 1, 2, 3, 4)),
|
||||
)
|
||||
|
||||
entry = audit(
|
||||
'booking:cancel',
|
||||
agenda=agenda,
|
||||
extra_data={'booking': booking, 'event': event},
|
||||
)
|
||||
assert (
|
||||
entry.extra_data['booking']
|
||||
== f'ID: {booking.id} / in waiting list / cancelled at 01/02/2024 3:04 a.m.'
|
||||
)
|
||||
|
||||
booking.user_first_name = 'first'
|
||||
booking.user_last_name = 'last'
|
||||
booking.in_waiting_list = False
|
||||
booking.save()
|
||||
entry = audit(
|
||||
'booking:cancel',
|
||||
agenda=agenda,
|
||||
extra_data={'booking': booking, 'event': event},
|
||||
)
|
||||
assert (
|
||||
entry.extra_data['booking']
|
||||
== f'ID: {booking.id} / user: first last / cancelled at 01/02/2024 3:04 a.m.'
|
||||
)
|
||||
|
||||
booking.cancellation_datetime = None
|
||||
booking.start_time = datetime.time(10, 0)
|
||||
booking.save()
|
||||
entry = audit(
|
||||
'booking:cancel',
|
||||
agenda=agenda,
|
||||
extra_data={'booking': booking, 'event': event},
|
||||
)
|
||||
assert entry.extra_data['booking'] == f'ID: {booking.id} / user: first last / 10 a.m. → ?'
|
||||
|
||||
booking.end_time = datetime.time(11, 0)
|
||||
booking.save()
|
||||
entry = audit(
|
||||
'booking:cancel',
|
||||
agenda=agenda,
|
||||
extra_data={'booking': booking, 'event': event},
|
||||
)
|
||||
assert entry.extra_data['booking'] == f'ID: {booking.id} / user: first last / 10 a.m. → 11 a.m.'
|
||||
|
||||
booking.start_time = None
|
||||
booking.save()
|
||||
entry = audit(
|
||||
'booking:cancel',
|
||||
agenda=agenda,
|
||||
extra_data={'booking': booking, 'event': event},
|
||||
)
|
||||
assert entry.extra_data['booking'] == f'ID: {booking.id} / user: first last / ? → 11 a.m.'
|
||||
|
||||
|
||||
def test_journal_browse_invalid_or_unknown_event(app, admin_user, settings):
|
||||
settings.AUDIT_JOURNAL_ENABLED = True
|
||||
admin_user.first_name = 'Admin'
|
||||
|
|
Loading…
Reference in New Issue