Projet

Général

Profil

0002-agendas-propagate-check-status-to-secondary-bookings.patch

Valentin Deniaud, 04 août 2021 12:30

Télécharger (6,61 ko)

Voir les différences:

Subject: [PATCH 2/2] agendas: propagate check status to secondary bookings
 (#55900)

 chrono/agendas/models.py    | 14 +++++++++----
 chrono/manager/views.py     |  1 +
 tests/manager/test_event.py | 40 +++++++++++++++++++++++++++++++++++--
 3 files changed, 49 insertions(+), 6 deletions(-)
chrono/agendas/models.py
1811 1811
    def mark_user_absence(self, reason=None):
1812 1812
        self.user_absence_reason = reason
1813 1813
        self.user_was_present = False
1814
        self.save()
1815
        self.event.set_is_checked()
1814
        with transaction.atomic():
1815
            self.secondary_booking_set.update(user_absence_reason=reason)
1816
            self.secondary_booking_set.update(user_was_present=False)
1817
            self.save()
1818
            self.event.set_is_checked()
1816 1819

  
1817 1820
    def mark_user_presence(self):
1818 1821
        self.user_absence_reason = ''
1819 1822
        self.user_was_present = True
1820
        self.save()
1821
        self.event.set_is_checked()
1823
        with transaction.atomic():
1824
            self.secondary_booking_set.update(user_absence_reason='')
1825
            self.secondary_booking_set.update(user_was_present=True)
1826
            self.save()
1827
            self.event.set_is_checked()
1822 1828

  
1823 1829
    def get_user_block(self):
1824 1830
        template_vars = Context(settings.TEMPLATE_VARS)
chrono/manager/views.py
2805 2805
            event__cancelled=False,
2806 2806
            cancellation_datetime__isnull=True,
2807 2807
            in_waiting_list=False,
2808
            primary_booking__isnull=True,
2808 2809
        )
2809 2810

  
2810 2811
    def response(self, request, booking):
tests/manager/test_event.py
1090 1090
    booking7 = Booking.objects.create(
1091 1091
        event=event, user_first_name='User', user_last_name='Waiting', in_waiting_list=True
1092 1092
    )
1093
    booking8 = Booking.objects.create(
1094
        event=event, user_first_name='User', user_last_name='Secondary', primary_booking=booking1
1095
    )
1093 1096
    login(app)
1094 1097

  
1095 1098
    # event not in past
......
1108 1111
    app.get('/manage/agendas/%s/events/%s/check' % (agenda2.pk, event.pk), status=404)
1109 1112

  
1110 1113
    resp = resp.click('Check')
1111
    assert 'Bookings (5/10)' in resp
1114
    assert 'Bookings (6/10)' in resp
1112 1115
    assert 'Waiting List (1/5)' in resp
1113 1116
    assert (
1114
        resp.text.index('Bookings (5/10)')
1117
        resp.text.index('Bookings (6/10)')
1115 1118
        < resp.text.index('User 01')
1116 1119
        < resp.text.index('User 05')
1117 1120
        < resp.text.index('User 17')
......
1153 1156
        status=404,
1154 1157
    )
1155 1158

  
1159
    # secondary booking
1160
    app.post(
1161
        '/manage/agendas/%s/bookings/%s/presence' % (agenda.pk, booking8.pk),
1162
        params={'csrfmiddlewaretoken': token},
1163
        status=404,
1164
    )
1165
    app.post(
1166
        '/manage/agendas/%s/bookings/%s/absence' % (agenda.pk, booking8.pk),
1167
        params={'csrfmiddlewaretoken': token},
1168
        status=404,
1169
    )
1170

  
1156 1171
    # unknown agenda
1157 1172
    app.post(
1158 1173
        '/manage/agendas/%s/bookings/%s/presence' % (0, booking1.pk),
......
1321 1336
        agenda=agenda,
1322 1337
    )
1323 1338
    booking = Booking.objects.create(event=event, user_first_name='User', user_last_name='42')
1339
    secondary_booking = Booking.objects.create(
1340
        event=event, user_first_name='User', user_last_name='42', primary_booking=booking
1341
    )
1324 1342
    assert agenda.mark_event_checked_auto is False
1325 1343

  
1326 1344
    login(app)
......
1342 1360
    booking.refresh_from_db()
1343 1361
    assert booking.user_was_present is True
1344 1362
    assert booking.user_absence_reason == ''
1363
    secondary_booking.refresh_from_db()
1364
    assert secondary_booking.user_was_present is True
1365
    assert secondary_booking.user_absence_reason == ''
1345 1366
    event.refresh_from_db()
1346 1367
    assert event.checked is False
1347 1368

  
......
1359 1380
    booking.refresh_from_db()
1360 1381
    assert booking.user_was_present is False
1361 1382
    assert booking.user_absence_reason == ''
1383
    secondary_booking.refresh_from_db()
1384
    assert secondary_booking.user_was_present is False
1385
    assert secondary_booking.user_absence_reason == ''
1362 1386
    event.refresh_from_db()
1363 1387
    assert event.checked is True
1364 1388

  
......
1380 1404
    booking.refresh_from_db()
1381 1405
    assert booking.user_was_present is False
1382 1406
    assert booking.user_absence_reason == 'Foo reason'
1407
    secondary_booking.refresh_from_db()
1408
    assert secondary_booking.user_was_present is False
1409
    assert secondary_booking.user_absence_reason == 'Foo reason'
1383 1410

  
1384 1411
    # set as present
1385 1412
    app.post(
......
1389 1416
    booking.refresh_from_db()
1390 1417
    assert booking.user_was_present is True
1391 1418
    assert booking.user_absence_reason == ''
1419
    secondary_booking.refresh_from_db()
1420
    assert secondary_booking.user_was_present is True
1421
    assert secondary_booking.user_absence_reason == ''
1392 1422

  
1393 1423
    # mark the event as checked
1394 1424
    event.checked = True
......
1504 1534
    assert '/manage/agendas/%s/events/%s/absence' % (agenda.pk, event.pk) not in resp
1505 1535

  
1506 1536
    booking2 = Booking.objects.create(event=event, user_first_name='User', user_last_name='35')
1537
    secondary_booking = Booking.objects.create(
1538
        event=event, user_first_name='User', user_last_name='35', primary_booking=booking2
1539
    )
1507 1540
    resp = app.get('/manage/agendas/%s/events/%s/check' % (agenda.pk, event.pk))
1508 1541
    assert 'Mark all bookings without status' in resp
1509 1542
    assert '/manage/agendas/%s/events/%s/presence' % (agenda.pk, event.pk) in resp
......
1518 1551
    booking2.refresh_from_db()
1519 1552
    assert booking2.user_was_present is True
1520 1553
    assert booking2.user_absence_reason == ''
1554
    secondary_booking.refresh_from_db()
1555
    assert secondary_booking.user_was_present is True
1556
    assert secondary_booking.user_absence_reason == ''
1521 1557
    event.refresh_from_db()
1522 1558
    assert event.checked is True
1523 1559

  
1524
-