api: add anonymize booking endpoint (#49093)
This commit is contained in:
parent
57ee5b6369
commit
7342e8d24e
|
@ -32,12 +32,4 @@ class Command(BaseCommand):
|
|||
event__start_datetime__lt=timezone.now()
|
||||
- timedelta(days=1) * F('event__agenda__anonymize_delay'),
|
||||
)
|
||||
|
||||
bookings_to_anonymize.update(
|
||||
label='',
|
||||
user_display_label='',
|
||||
user_external_id='',
|
||||
user_name='',
|
||||
extra_data={},
|
||||
anonymization_datetime=timezone.now(),
|
||||
)
|
||||
Booking.anonymize_bookings(bookings_to_anonymize)
|
||||
|
|
|
@ -1135,6 +1135,17 @@ class Booking(models.Model):
|
|||
self.secondary_booking_set.update(in_waiting_list=True)
|
||||
self.save()
|
||||
|
||||
@classmethod
|
||||
def anonymize_bookings(cls, bookings_queryset):
|
||||
bookings_queryset.update(
|
||||
label='',
|
||||
user_display_label='',
|
||||
user_external_id='',
|
||||
user_name='',
|
||||
extra_data={},
|
||||
anonymization_datetime=now(),
|
||||
)
|
||||
|
||||
def get_ics(self, request=None):
|
||||
ics = vobject.iCalendar()
|
||||
ics.add('prodid').value = '-//Entr\'ouvert//NON SGML Publik'
|
||||
|
|
|
@ -58,6 +58,7 @@ urlpatterns = [
|
|||
url(r'^booking/(?P<booking_pk>\w+)/$', views.booking, name='api-booking'),
|
||||
url(r'^booking/(?P<booking_pk>\w+)/cancel/$', views.cancel_booking, name='api-cancel-booking'),
|
||||
url(r'^booking/(?P<booking_pk>\w+)/accept/$', views.accept_booking, name='api-accept-booking'),
|
||||
url(r'^booking/(?P<booking_pk>\w+)/anonymize/$', views.anonymize_booking, name='api-anonymize-booking'),
|
||||
url(r'^booking/(?P<booking_pk>\w+)/suspend/$', views.suspend_booking, name='api-suspend-booking'),
|
||||
url(r'^booking/(?P<booking_pk>\w+)/resize/$', views.resize_booking, name='api-resize-booking'),
|
||||
url(r'^booking/(?P<booking_pk>\w+)/ics/$', views.booking_ics, name='api-booking-ics'),
|
||||
|
|
|
@ -1409,6 +1409,20 @@ class SuspendBooking(APIView):
|
|||
suspend_booking = SuspendBooking.as_view()
|
||||
|
||||
|
||||
class AnonymizeBooking(APIView):
|
||||
permission_classes = (permissions.IsAuthenticated,)
|
||||
|
||||
def post(self, request, booking_pk=None, format=None):
|
||||
booking = get_object_or_404(Booking, pk=booking_pk)
|
||||
bookings = Booking.objects.filter(Q(pk=booking.pk) | Q(primary_booking=booking.pk))
|
||||
Booking.anonymize_bookings(bookings)
|
||||
response = {'err': 0, 'booking_id': booking.pk}
|
||||
return Response(response)
|
||||
|
||||
|
||||
anonymize_booking = AnonymizeBooking.as_view()
|
||||
|
||||
|
||||
class ResizeSerializer(serializers.Serializer):
|
||||
count = serializers.IntegerField(min_value=1)
|
||||
|
||||
|
|
|
@ -2806,6 +2806,20 @@ def test_resize_booking_non_event_agenda(app, user):
|
|||
app.post('/api/booking/%s/resize/' % booking.pk, params={'count': 42}, status=404)
|
||||
|
||||
|
||||
def test_anonymize_booking(app, user):
|
||||
agenda = Agenda.objects.create(label='Foo bar')
|
||||
event = Event.objects.create(start_datetime=now(), places=5, agenda=agenda)
|
||||
Booking.objects.create(event=event, label='not to anonymize')
|
||||
booking = Booking.objects.create(event=event, label='test')
|
||||
secondary_booking = Booking.objects.create(event=event, label='test secondary', primary_booking=booking)
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
|
||||
resp = app.post('/api/booking/%s/anonymize/' % booking.pk)
|
||||
assert resp.json['err'] == 0
|
||||
assert Booking.objects.filter(anonymization_datetime__isnull=False).count() == 2
|
||||
assert Booking.objects.filter(label='').count() == 2
|
||||
|
||||
|
||||
def test_multiple_booking_api(app, some_data, user):
|
||||
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
||||
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0]
|
||||
|
|
Loading…
Reference in New Issue