Add tables for domains / requests and readonly senior official logic

This commit is contained in:
zandercymatics 2024-09-26 10:36:58 -06:00
parent 02bf9c4781
commit 1a9002c1b4
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
6 changed files with 92 additions and 6 deletions

View file

@ -2938,7 +2938,7 @@ class PortfolioAdmin(ListHeaderAdmin):
}, },
), ),
("Portfolio members", {"fields": ["display_admins", "display_members"]}), ("Portfolio members", {"fields": ["display_admins", "display_members"]}),
("Portfolio domains", {"fields": ["domains", "domain_requests"]}), ("Domains and requests", {"fields": ["domains", "domain_requests"]}),
("Suborganizations", {"fields": ["suborganizations"]}), ("Suborganizations", {"fields": ["suborganizations"]}),
("Senior official", {"fields": ["senior_official"]}), ("Senior official", {"fields": ["senior_official"]}),
] ]
@ -3192,8 +3192,12 @@ class PortfolioAdmin(ListHeaderAdmin):
obj = self.get_object(request, object_id) obj = self.get_object(request, object_id)
extra_context = extra_context or {} extra_context = extra_context or {}
extra_context["skip_additional_contact_info"] = True 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["members"] = self.get_user_portfolio_permission_non_admins(obj)
extra_context["admins"] = self.get_user_portfolio_permission_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) return super().change_view(request, object_id, form_url, extra_context)
def save_model(self, request, obj, form, change): def save_model(self, request, obj, form, change):

View file

@ -959,6 +959,7 @@ function initializeWidgetOnList(list, parentId) {
hideElement(contactList.parentElement); hideElement(contactList.parentElement);
let $seniorOfficial = django.jQuery("#id_senior_official"); 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; let seniorOfficialApi = document.getElementById("senior_official_from_agency_json_url").value;
fetch(`${seniorOfficialApi}?agency_name=${selectedText}`) fetch(`${seniorOfficialApi}?agency_name=${selectedText}`)
.then(response => { .then(response => {
@ -969,7 +970,12 @@ function initializeWidgetOnList(list, parentId) {
if (data.error) { if (data.error) {
// Clear the field if the SO doesn't exist. // Clear the field if the SO doesn't exist.
if (statusCode === 404) { if (statusCode === 404) {
if ($seniorOfficial && $seniorOfficial.length > 0) {
$seniorOfficial.val("").trigger("change"); $seniorOfficial.val("").trigger("change");
}else {
// Show the "create one now" text if this field is none in readonly mode.
readonlySeniorOfficial.innerHTML = '<a href="admin/registrar/seniorofficial/add/">No senior official has been found. Create one now.</a>'
}
console.warn("Record not found: " + data.error); console.warn("Record not found: " + data.error);
}else { }else {
console.error("Error in AJAX call: " + data.error); 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 // Get the associated senior official with this federal agency
let seniorOfficialId = data.id; let seniorOfficialId = data.id;
let seniorOfficialName = [data.first_name, data.last_name].join(" "); 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 // If the senior official is a dropdown field, edit that
updateSeniorOfficialDropdown($seniorOfficial, seniorOfficialId, seniorOfficialName); updateSeniorOfficialDropdown($seniorOfficial, seniorOfficialId, seniorOfficialName);
}else { }else {
let readonlySeniorOfficial = document.querySelector(".field-senior_official .readonly");
if (readonlySeniorOfficial) { if (readonlySeniorOfficial) {
let seniorOfficialLink = `<a href=/admin/registrar/seniorofficial/${seniorOfficialId}/change/>${seniorOfficialName}</a>` let seniorOfficialLink = `<a href=/admin/registrar/seniorofficial/${seniorOfficialId}/change/>${seniorOfficialName}</a>`
readonlySeniorOfficial.innerHTML = seniorOfficialName ? seniorOfficialLink : "-"; readonlySeniorOfficial.innerHTML = seniorOfficialName ? seniorOfficialLink : "-";

View file

@ -39,7 +39,7 @@
None<br> None<br>
{% endif %} {% endif %}
{% else %} {% elif not hide_no_contact_info_message %}
No additional contact information found.<br> No additional contact information found.<br>
{% endif %} {% endif %}

View file

@ -0,0 +1,28 @@
{% load static url_helpers %}
<details class="margin-top-1 dja-detail-table" aria-role="button" closed>
<summary class="padding-1 padding-left-0 dja-details-summary">Details</summary>
<div class="grid-container margin-left-0 padding-left-0 padding-right-0 dja-details-contents">
<table>
<thead>
<tr>
<th>Name</th>
<th>Status</th>
</tr>
</thead>
<tbody>
{% for domain_request in domain_requests %}
{% url 'admin:registrar_domainrequest_change' domain_request.pk as url %}
<tr>
<td><a href={{url}}>{{ domain_request }}</a></td>
{% if domain_request.get_status_display %}
<td>{{ domain_request.get_status_display }}</td>
{% else %}
<td>None</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
</details>

View file

@ -0,0 +1,32 @@
{% load static url_helpers %}
<details class="margin-top-1 dja-detail-table" aria-role="button" closed>
<summary class="padding-1 padding-left-0 dja-details-summary">Details</summary>
<div class="grid-container margin-left-0 padding-left-0 padding-right-0 dja-details-contents">
<table>
<thead>
<tr>
<th>Name</th>
<th>State</th>
</tr>
</thead>
<tbody>
{% for domain_info in domains %}
{% if domain_info.domain %}
{% with domain=domain_info.domain %}
{% url 'admin:registrar_domain_change' domain.pk as url %}
<tr>
<td><a href={{url}}>{{ domain }}</a></td>
{% if domain and domain.get_state_display %}
<td>{{ domain.get_state_display }}</td>
{% else %}
<td>None</td>
{% endif %}
</tr>
{% endwith %}
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
</details>

View file

@ -21,6 +21,15 @@
<p>No additional permissions found.</p> <p>No additional permissions found.</p>
{% endif %} {% endif %}
</div> </div>
{% elif field.field.name == "senior_official" %}
{% if original_object.senior_official %}
<div class="readonly">{{ field.contents }}</div>
{% else %}
{% url "admin:registrar_seniorofficial_add" as url %}
<div class="readonly">
<a href={{ url }}>No senior official has been found. Create one now.</a>
</div>
{% endif %}
{% else %} {% else %}
<div class="readonly">{{ field.contents }}</div> <div class="readonly">{{ field.contents }}</div>
{% endif %} {% endif %}
@ -30,7 +39,7 @@
{% if field.field.name == "senior_official" %} {% if field.field.name == "senior_official" %}
<div class="flex-container"> <div class="flex-container">
<label aria-label="Senior official contact details"></label> <label aria-label="Senior official contact details"></label>
{% 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 %}
</div> </div>
{% elif field.field.name == "display_admins" %} {% elif field.field.name == "display_admins" %}
{% if admins|length > 0 %} {% if admins|length > 0 %}
@ -40,5 +49,13 @@
{% if members|length > 0 %} {% if members|length > 0 %}
{% include "django/admin/includes/portfolio_members_table.html" with members=members %} {% include "django/admin/includes/portfolio_members_table.html" with members=members %}
{% endif %} {% 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 %} {% endif %}
{% endblock after_help_text %} {% endblock after_help_text %}