from django.db import migrations def create_parking_thematic(apps, schema_editor): Thematic = apps.get_model('common', 'Thematic') AssetCategory = apps.get_model('assets', 'AssetCategory') ContentType = apps.get_model('contenttypes', 'ContentType') thematic, _created = Thematic.objects.get_or_create( code='parking', defaults={ 'name_fr': 'Stationnement & Mobilité', 'name_nl': 'Parkeren & Mobiliteit', 'description': 'Thématique dédiée aux emplacements de stationnement et zones de mobilité (vélos, trottinettes, PMR, livraison)', 'icon': 'bi-p-square', 'color': '#0d6efd', } ) category, _cat_created = AssetCategory.objects.get_or_create( code='parking_spot', defaults={ 'thematic': thematic, 'name_fr': 'Emplacements de stationnement', 'name_nl': 'Parkeerplaatsen', } ) if category.thematic_id != thematic.id: category.thematic = thematic category.save() # Link ContentTypes try: spot_ct = ContentType.objects.get(app_label='assets', model='parkingspot') category.allowed_models.add(spot_ct) except Exception: pass try: loc_ct = ContentType.objects.get(app_label='assets', model='parkinglocation') category.allowed_models.add(loc_ct) except Exception: pass # Assign category to existing ParkingSpot records ParkingSpot = apps.get_model('assets', 'ParkingSpot') ParkingSpot.objects.filter(category__isnull=True).update(category=category) # Grant thematic permissions only to admin user configurations UserConfig = apps.get_model('common', 'UserConfig') UserThematics = apps.get_model('common', 'UserThematics') for uc in UserConfig.objects.filter(roles__name='admin').distinct(): UserThematics.objects.get_or_create( user_config=uc, thematic=thematic, defaults={'can_view_assets': True, 'can_edit_assets': True} ) def remove_parking_thematic(apps, schema_editor): pass class Migration(migrations.Migration): dependencies = [ ('assets', '0009_remove_assetinspection_verified_has_scooter_drop_zone_and_more'), ('common', '0001_initial'), ] operations = [ migrations.RunPython(create_parking_thematic, remove_parking_thematic), ]