diff --git a/src/registrar/admin.py b/src/registrar/admin.py index a83aedf8e..2c1bd5a5a 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -2938,7 +2938,7 @@ class PortfolioAdmin(ListHeaderAdmin): }, ), ("Portfolio members", {"fields": ["display_admins", "display_members"]}), - ("Portfolio domains", {"fields": ["domains", "domain_requests"]}), + ("Domains and requests", {"fields": ["domains", "domain_requests"]}), ("Suborganizations", {"fields": ["suborganizations"]}), ("Senior official", {"fields": ["senior_official"]}), ] @@ -3192,8 +3192,12 @@ class PortfolioAdmin(ListHeaderAdmin): obj = self.get_object(request, object_id) extra_context = extra_context or {} extra_context["skip_additional_contact_info"] = True + + # We repeat these calls twice. extra_context["members"] = self.get_user_portfolio_permission_non_admins(obj) extra_context["admins"] = self.get_user_portfolio_permission_admins(obj) + extra_context["domains"] = obj.get_domains() + extra_context["domain_requests"] = obj.get_domain_requests() return super().change_view(request, object_id, form_url, extra_context) def save_model(self, request, obj, form, change): diff --git a/src/registrar/assets/js/get-gov-admin.js b/src/registrar/assets/js/get-gov-admin.js index eb62f4b64..fd2d6330e 100644 --- a/src/registrar/assets/js/get-gov-admin.js +++ b/src/registrar/assets/js/get-gov-admin.js @@ -959,6 +959,7 @@ function initializeWidgetOnList(list, parentId) { hideElement(contactList.parentElement); let $seniorOfficial = django.jQuery("#id_senior_official"); + let readonlySeniorOfficial = document.querySelector(".field-senior_official .readonly"); let seniorOfficialApi = document.getElementById("senior_official_from_agency_json_url").value; fetch(`${seniorOfficialApi}?agency_name=${selectedText}`) .then(response => { @@ -969,7 +970,12 @@ function initializeWidgetOnList(list, parentId) { if (data.error) { // Clear the field if the SO doesn't exist. if (statusCode === 404) { - $seniorOfficial.val("").trigger("change"); + if ($seniorOfficial && $seniorOfficial.length > 0) { + $seniorOfficial.val("").trigger("change"); + }else { + // Show the "create one now" text if this field is none in readonly mode. + readonlySeniorOfficial.innerHTML = 'No senior official has been found. Create one now.' + } console.warn("Record not found: " + data.error); }else { console.error("Error in AJAX call: " + data.error); @@ -984,11 +990,10 @@ function initializeWidgetOnList(list, parentId) { // Get the associated senior official with this federal agency let seniorOfficialId = data.id; let seniorOfficialName = [data.first_name, data.last_name].join(" "); - if (!$seniorOfficial) { + if ($seniorOfficial && $seniorOfficial.length > 0) { // If the senior official is a dropdown field, edit that updateSeniorOfficialDropdown($seniorOfficial, seniorOfficialId, seniorOfficialName); }else { - let readonlySeniorOfficial = document.querySelector(".field-senior_official .readonly"); if (readonlySeniorOfficial) { let seniorOfficialLink = `${seniorOfficialName}` readonlySeniorOfficial.innerHTML = seniorOfficialName ? seniorOfficialLink : "-"; diff --git a/src/registrar/templates/django/admin/includes/contact_detail_list.html b/src/registrar/templates/django/admin/includes/contact_detail_list.html index 7cc72e8e1..0a28a6532 100644 --- a/src/registrar/templates/django/admin/includes/contact_detail_list.html +++ b/src/registrar/templates/django/admin/includes/contact_detail_list.html @@ -39,7 +39,7 @@ None
{% endif %} - {% else %} + {% elif not hide_no_contact_info_message %} No additional contact information found.
{% endif %} diff --git a/src/registrar/templates/django/admin/includes/portfolio_domain_requests_table.html b/src/registrar/templates/django/admin/includes/portfolio_domain_requests_table.html new file mode 100644 index 000000000..2887c2179 --- /dev/null +++ b/src/registrar/templates/django/admin/includes/portfolio_domain_requests_table.html @@ -0,0 +1,28 @@ +{% load static url_helpers %} + +
+ Details +
+ + + + + + + + + {% for domain_request in domain_requests %} + {% url 'admin:registrar_domainrequest_change' domain_request.pk as url %} + + + {% if domain_request.get_status_display %} + + {% else %} + + {% endif %} + + {% endfor %} + +
NameStatus
{{ domain_request }}{{ domain_request.get_status_display }}None
+
+
\ No newline at end of file diff --git a/src/registrar/templates/django/admin/includes/portfolio_domains_table.html b/src/registrar/templates/django/admin/includes/portfolio_domains_table.html new file mode 100644 index 000000000..8d958c8e8 --- /dev/null +++ b/src/registrar/templates/django/admin/includes/portfolio_domains_table.html @@ -0,0 +1,32 @@ +{% load static url_helpers %} + +
+ Details +
+ + + + + + + + + {% for domain_info in domains %} + {% if domain_info.domain %} + {% with domain=domain_info.domain %} + {% url 'admin:registrar_domain_change' domain.pk as url %} + + + {% if domain and domain.get_state_display %} + + {% else %} + + {% endif %} + + {% endwith %} + {% endif %} + {% endfor %} + +
NameState
{{ domain }}{{ domain.get_state_display }}None
+
+
\ No newline at end of file diff --git a/src/registrar/templates/django/admin/includes/portfolio_fieldset.html b/src/registrar/templates/django/admin/includes/portfolio_fieldset.html index 2299a579a..c63964d80 100644 --- a/src/registrar/templates/django/admin/includes/portfolio_fieldset.html +++ b/src/registrar/templates/django/admin/includes/portfolio_fieldset.html @@ -21,6 +21,15 @@

No additional permissions found.

{% endif %} + {% elif field.field.name == "senior_official" %} + {% if original_object.senior_official %} +
{{ field.contents }}
+ {% else %} + {% url "admin:registrar_seniorofficial_add" as url %} +
+ No senior official has been found. Create one now. +
+ {% endif %} {% else %}
{{ field.contents }}
{% endif %} @@ -30,7 +39,7 @@ {% if field.field.name == "senior_official" %}
- {% include "django/admin/includes/contact_detail_list.html" with user=original_object.senior_official no_title_top_padding=field.is_readonly %} + {% include "django/admin/includes/contact_detail_list.html" with user=original_object.senior_official no_title_top_padding=field.is_readonly hide_no_contact_info_message=True %}
{% elif field.field.name == "display_admins" %} {% if admins|length > 0 %} @@ -40,5 +49,13 @@ {% if members|length > 0 %} {% include "django/admin/includes/portfolio_members_table.html" with members=members %} {% endif %} + {% elif field.field.name == "domains" %} + {% if domains|length > 0 %} + {% include "django/admin/includes/portfolio_domains_table.html" with domains=domains %} + {% endif %} + {% elif field.field.name == "domain_requests" %} + {% if domain_requests|length > 0 %} + {% include "django/admin/includes/portfolio_domain_requests_table.html" with domain_requests=domain_requests %} + {% endif %} {% endif %} {% endblock after_help_text %} \ No newline at end of file