Projet

Général

Profil

0001-agendas-add-new-booking-s-label-attribute-for-user-p.patch

Serghei Mihai, 14 mars 2019 15:14

Télécharger (5,43 ko)

Voir les différences:

Subject: [PATCH] agendas: add new booking's label attribute for user
 presentation purposes (#25820)

Use the new label in ICS summary
 .../migrations/0026_booking_user_label.py     | 20 +++++++++++++++++++
 chrono/agendas/models.py                      |  3 ++-
 chrono/api/views.py                           |  2 ++
 tests/test_api.py                             | 14 +++++++++++--
 4 files changed, 36 insertions(+), 3 deletions(-)
 create mode 100644 chrono/agendas/migrations/0026_booking_user_label.py
chrono/agendas/migrations/0026_booking_user_label.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.20 on 2019-03-14 11:34
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_label',
18
            field=models.CharField(blank=True, max_length=250),
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_label = models.CharField(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_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_label = serializers.CharField(max_length=250, allow_blank=True) #, required=False)
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_label=payload.get('user_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_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
-