agendas: migrate booking check data into new model (#80371)
This commit is contained in:
parent
6d31c85dd7
commit
bcae843c0d
|
@ -0,0 +1,56 @@
|
|||
# Generated by Django 3.2.18 on 2023-08-22 15:47
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
def migrate_booking_check_data(apps, schema_editor):
|
||||
Booking = apps.get_model('agendas', 'Booking')
|
||||
BookingCheck = apps.get_model('agendas', 'BookingCheck')
|
||||
|
||||
booking_checks = []
|
||||
bookings = list(Booking.objects.filter(user_was_present__isnull=False))
|
||||
for booking in bookings:
|
||||
booking_check = BookingCheck(
|
||||
booking=booking,
|
||||
presence=booking.user_was_present,
|
||||
start_time=booking.user_check_start_time,
|
||||
end_time=booking.user_check_end_time,
|
||||
type_slug=booking.user_check_type_slug,
|
||||
type_label=booking.user_check_type_label,
|
||||
)
|
||||
booking_checks.append(booking_check)
|
||||
|
||||
BookingCheck.objects.bulk_create(booking_checks)
|
||||
|
||||
|
||||
def reverse_migrate_booking_check_data(apps, schema_editor):
|
||||
Booking = apps.get_model('agendas', 'Booking')
|
||||
|
||||
bookings = list(Booking.objects.filter(user_check__isnull=False).select_related('user_check'))
|
||||
for booking in bookings:
|
||||
booking.user_was_present = booking.user_check.presence
|
||||
booking.user_check_start_time = booking.user_check.start_time
|
||||
booking.user_check_end_time = booking.user_check.end_time
|
||||
booking.user_check_type_slug = booking.user_check.type_slug
|
||||
booking.user_check_type_label = booking.user_check.type_label
|
||||
|
||||
Booking.objects.bulk_update(
|
||||
bookings,
|
||||
fields=[
|
||||
'user_was_present',
|
||||
'user_check_start_time',
|
||||
'user_check_end_time',
|
||||
'user_check_type_slug',
|
||||
'user_check_type_label',
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
('agendas', '0161_add_booking_check_model'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(migrate_booking_check_data, reverse_migrate_booking_check_data),
|
||||
]
|
|
@ -390,3 +390,50 @@ def test_migration_convert_week_days(transactional_db):
|
|||
assert Event.objects.get(slug='all').recurrence_days == [1, 2, 3, 4, 5, 6, 7]
|
||||
|
||||
assert SharedCustodyRule.objects.get().days == [1, 5, 7]
|
||||
|
||||
|
||||
def test_migration_booking_check_data(transactional_db):
|
||||
app = 'agendas'
|
||||
|
||||
migrate_from = [(app, '0161_add_booking_check_model')]
|
||||
migrate_to = [(app, '0162_migrate_booking_check_data')]
|
||||
executor = MigrationExecutor(connection)
|
||||
old_apps = executor.loader.project_state(migrate_from).apps
|
||||
executor.migrate(migrate_from)
|
||||
|
||||
Agenda = old_apps.get_model(app, 'Agenda')
|
||||
Event = old_apps.get_model(app, 'Event')
|
||||
Booking = old_apps.get_model(app, 'Booking')
|
||||
|
||||
agenda = Agenda.objects.create(label='Foo', kind='events')
|
||||
event = Event.objects.create(start_datetime=now(), places=10, agenda=agenda, slug='event')
|
||||
|
||||
not_checked = Booking.objects.create(event=event)
|
||||
present = Booking.objects.create(event=event, user_was_present=True)
|
||||
absent = Booking.objects.create(event=event, user_was_present=False)
|
||||
with_check_type = Booking.objects.create(
|
||||
event=event,
|
||||
user_was_present=False,
|
||||
user_check_type_slug='xxx',
|
||||
user_check_type_label='XXX',
|
||||
user_check_start_time=datetime.time(12, 0),
|
||||
user_check_end_time=datetime.time(14, 0),
|
||||
)
|
||||
|
||||
executor = MigrationExecutor(connection)
|
||||
executor.migrate(migrate_to)
|
||||
executor.loader.build_graph()
|
||||
|
||||
apps = executor.loader.project_state(migrate_to).apps
|
||||
Booking = apps.get_model(app, 'Booking')
|
||||
|
||||
assert not hasattr(Booking.objects.get(pk=not_checked.pk), 'user_check')
|
||||
assert Booking.objects.get(pk=present.pk).user_check.presence is True
|
||||
assert Booking.objects.get(pk=absent.pk).user_check.presence is False
|
||||
|
||||
with_check_type = Booking.objects.get(pk=with_check_type.pk)
|
||||
assert with_check_type.user_check.presence is False
|
||||
assert with_check_type.user_check.type_slug == 'xxx'
|
||||
assert with_check_type.user_check.type_label == 'XXX'
|
||||
assert with_check_type.user_check.start_time == datetime.time(12, 0)
|
||||
assert with_check_type.user_check.end_time == datetime.time(14, 0)
|
||||
|
|
Loading…
Reference in New Issue