diff --git a/src/registrar/admin.py b/src/registrar/admin.py index 54b618731..4f2d2bbe0 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -1016,6 +1016,7 @@ class ContactAdmin(ListHeaderAdmin, ImportExportModelAdmin): # Get the filtered values return super().changelist_view(request, extra_context=extra_context) + class SeniorOfficialAdmin(ListHeaderAdmin, ImportExportModelAdmin): """Custom Senior Official Admin class.""" @@ -1038,8 +1039,6 @@ class SeniorOfficialAdmin(ListHeaderAdmin, ImportExportModelAdmin): ] - - class WebsiteResource(resources.ModelResource): """defines how each field in the referenced model should be mapped to the corresponding fields in the import/export file""" @@ -1048,7 +1047,6 @@ class WebsiteResource(resources.ModelResource): model = models.Website - class WebsiteAdmin(ListHeaderAdmin, ImportExportModelAdmin): """Custom website admin class.""" diff --git a/src/registrar/migrations/0105_seniorofficial_portfolio_senior_official.py b/src/registrar/migrations/0105_seniorofficial_portfolio_senior_official.py new file mode 100644 index 000000000..76cc6c0cb --- /dev/null +++ b/src/registrar/migrations/0105_seniorofficial_portfolio_senior_official.py @@ -0,0 +1,41 @@ +# Generated by Django 4.2.10 on 2024-06-20 21:16 + +from django.db import migrations, models +import django.db.models.deletion +import phonenumber_field.modelfields +import registrar.models.federal_agency + + +class Migration(migrations.Migration): + + dependencies = [ + ("registrar", "0104_create_groups_v13"), + ] + + operations = [ + migrations.CreateModel( + name="SeniorOfficial", + fields=[ + ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("first_name", models.CharField(verbose_name="first name")), + ("last_name", models.CharField(verbose_name="last name")), + ("title", models.CharField(verbose_name="title / role")), + ( + "phone", + phonenumber_field.modelfields.PhoneNumberField(blank=True, max_length=128, null=True, region=None), + ), + ], + ), + migrations.AddField( + model_name="portfolio", + name="senior_official", + field=models.ForeignKey( + default=registrar.models.federal_agency.FederalAgency.get_non_federal_agency, + help_text="Associated senior official", + on_delete=django.db.models.deletion.PROTECT, + to="registrar.seniorofficial", + ), + ), + ] diff --git a/src/registrar/migrations/0106_create_groups_v14.py b/src/registrar/migrations/0106_create_groups_v14.py new file mode 100644 index 000000000..6e2b38372 --- /dev/null +++ b/src/registrar/migrations/0106_create_groups_v14.py @@ -0,0 +1,37 @@ +# This migration creates the create_full_access_group and create_cisa_analyst_group groups +# It is dependent on 0079 (which populates federal agencies) +# If permissions on the groups need changing, edit CISA_ANALYST_GROUP_PERMISSIONS +# in the user_group model then: +# [NOT RECOMMENDED] +# step 1: docker-compose exec app ./manage.py migrate --fake registrar 0035_contenttypes_permissions +# step 2: docker-compose exec app ./manage.py migrate registrar 0036_create_groups +# step 3: fake run the latest migration in the migrations list +# [RECOMMENDED] +# Alternatively: +# step 1: duplicate the migration that loads data +# step 2: docker-compose exec app ./manage.py migrate + +from django.db import migrations +from registrar.models import UserGroup +from typing import Any + + +# For linting: RunPython expects a function reference, +# so let's give it one +def create_groups(apps, schema_editor) -> Any: + UserGroup.create_cisa_analyst_group(apps, schema_editor) + UserGroup.create_full_access_group(apps, schema_editor) + + +class Migration(migrations.Migration): + dependencies = [ + ("registrar", "0105_seniorofficial_portfolio_senior_official"), + ] + + operations = [ + migrations.RunPython( + create_groups, + reverse_code=migrations.RunPython.noop, + atomic=True, + ), + ] diff --git a/src/registrar/models/__init__.py b/src/registrar/models/__init__.py index 370eb2fa5..5d12328e3 100644 --- a/src/registrar/models/__init__.py +++ b/src/registrar/models/__init__.py @@ -60,3 +60,4 @@ auditlog.register(TransitionDomain) auditlog.register(VerifiedByStaff) auditlog.register(WaffleFlag) auditlog.register(Portfolio) +auditlog.register(SeniorOfficial)