0001-agendas-add-new-booking-s-label-attribute-for-user-p.patch
chrono/agendas/migrations/0026_booking_user_display_label.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# Generated by Django 1.11.20 on 2019-03-14 15:06 |
|
3 |
from __future__ import unicode_literals |
|
4 | ||
5 |
from django.db import migrations, models |
|
6 | ||
7 | ||
8 |
class Migration(migrations.Migration): |
|
9 | ||
10 |
dependencies = [ |
|
11 |
('agendas', '0025_auto_20181206_1252'), |
|
12 |
] |
|
13 | ||
14 |
operations = [ |
|
15 |
migrations.AddField( |
|
16 |
model_name='booking', |
|
17 |
name='user_display_label', |
|
18 |
field=models.CharField(blank=True, max_length=250, verbose_name='Label displayed to user'), |
|
19 |
), |
|
20 |
] |
chrono/agendas/models.py | ||
---|---|---|
365 | 365 |
on_delete=models.CASCADE, related_name='secondary_booking_set') |
366 | 366 | |
367 | 367 |
label = models.CharField(max_length=250, blank=True) |
368 |
user_display_label = models.CharField(verbose_name=_('Label displayed to user'), max_length=250, blank=True) |
|
368 | 369 |
user_name = models.CharField(max_length=250, blank=True) |
369 | 370 |
backoffice_url = models.URLField(blank=True) |
370 | 371 | |
... | ... | |
395 | 396 |
vevent = vobject.newFromBehavior('vevent') |
396 | 397 |
vevent.add('uid').value = '%s-%s-%s' % (self.event.start_datetime.isoformat(), self.event.agenda.pk, self.pk) |
397 | 398 | |
398 |
vevent.add('summary').value = self.label |
|
399 |
vevent.add('summary').value = self.user_display_label or self.label
|
|
399 | 400 |
vevent.add('dtstart').value = self.event.start_datetime |
400 | 401 |
if self.user_name: |
401 | 402 |
vevent.add('attendee').value = self.user_name |
chrono/api/views.py | ||
---|---|---|
308 | 308 |
''' |
309 | 309 |
label = serializers.CharField(max_length=250, allow_blank=True) #, required=False) |
310 | 310 |
user_name = serializers.CharField(max_length=250, allow_blank=True) #, required=False) |
311 |
user_display_label = serializers.CharField(max_length=250, allow_blank=True) |
|
311 | 312 |
backoffice_url = serializers.URLField(allow_blank=True) # , required=False) |
312 | 313 |
count = serializers.IntegerField(min_value=1) # , required=False) |
313 | 314 | |
... | ... | |
451 | 452 |
label=payload.get('label', ''), |
452 | 453 |
user_name=payload.get('user_name', ''), |
453 | 454 |
backoffice_url=payload.get('backoffice_url', ''), |
455 |
user_display_label=payload.get('user_display_label', ''), |
|
454 | 456 |
extra_data=extra_data) |
455 | 457 |
if primary_booking is not None: |
456 | 458 |
new_booking.primary_booking = primary_booking |
tests/test_api.py | ||
---|---|---|
404 | 404 |
assert 'ATTENDEE:bar\r\n' in booking_ics |
405 | 405 |
assert 'URL:http://example.com/booking\r\n' in booking_ics |
406 | 406 | |
407 |
# test with user_label in additionnal data |
|
408 |
resp = app.post_json('/api/agenda/%s/fillslot/%s/' % (agenda.id, event.id), |
|
409 |
params={'label': 'foo', 'user_name': 'bar', 'backoffice_url': 'http://example.net/', |
|
410 |
'url': 'http://example.com/booking', 'user_display_label': 'your booking'}) |
|
411 |
assert Booking.objects.count() == 3 |
|
412 |
booking_ics = Booking.objects.get(id=resp.json['booking_id']).get_ics() |
|
413 |
assert 'SUMMARY:your booking\r\n' in booking_ics |
|
414 |
assert 'ATTENDEE:bar\r\n' in booking_ics |
|
415 |
assert 'URL:http://example.com/booking\r\n' in booking_ics |
|
416 | ||
407 | 417 |
# extra data stored in extra_data field |
408 | 418 |
resp = app.post_json('/api/agenda/%s/fillslot/%s/' % (agenda.id, event.id), |
409 | 419 |
params={'label': 'l', 'user_name': 'u', 'backoffice_url': '', 'location': 'bar', |
410 | 420 |
'comment': 'booking comment', 'description': 'booking description'}) |
411 |
assert Booking.objects.count() == 3
|
|
421 |
assert Booking.objects.count() == 4
|
|
412 | 422 |
booking_id = resp.json['booking_id'] |
413 | 423 |
booking = Booking.objects.get(id=booking_id) |
414 | 424 |
booking_ics = booking.get_ics() |
... | ... | |
437 | 447 |
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id) |
438 | 448 |
event = resp.json['data'][2] |
439 | 449 |
resp = app.post('/api/agenda/%s/fillslot/%s/' % (meetings_agenda_id, event['id'])) |
440 |
assert Booking.objects.count() == 4
|
|
450 |
assert Booking.objects.count() == 5
|
|
441 | 451 |
assert 'ics_url' in resp.json['api'] |
442 | 452 |
booking = Booking.objects.get(id=resp.json['booking_id']) |
443 | 453 |
booking_ics = booking.get_ics() |
444 |
- |