domain information changes done

This commit is contained in:
David Kennedy 2024-12-10 13:41:48 -05:00
parent 8001c405d4
commit 2730047588
No known key found for this signature in database
GPG key ID: 6528A5386E66B96B
3 changed files with 161 additions and 26 deletions

View file

@ -220,6 +220,14 @@ class DomainInformationAdminForm(forms.ModelForm):
fields = "__all__" fields = "__all__"
widgets = { widgets = {
"other_contacts": NoAutocompleteFilteredSelectMultiple("other_contacts", False), "other_contacts": NoAutocompleteFilteredSelectMultiple("other_contacts", False),
"portfolio": AutocompleteSelectWithPlaceholder(
DomainRequest._meta.get_field("portfolio"), admin.site, attrs={"data-placeholder": "---------"}
),
"sub_organization": AutocompleteSelectWithPlaceholder(
DomainRequest._meta.get_field("sub_organization"),
admin.site,
attrs={"data-placeholder": "---------", "ajax-url": "get-suborganization-list-json"},
),
} }
@ -1523,6 +1531,71 @@ class DomainInformationAdmin(ListHeaderAdmin, ImportExportModelAdmin):
orderable_fk_fields = [("domain", "name")] orderable_fk_fields = [("domain", "name")]
# Define methods to display fields from the related portfolio
def portfolio_senior_official(self, obj) -> Optional[SeniorOfficial]:
return obj.portfolio.senior_official if obj.portfolio and obj.portfolio.senior_official else None
portfolio_senior_official.short_description = "Senior official" # type: ignore
def portfolio_organization_type(self, obj):
return (
DomainRequest.OrganizationChoices.get_org_label(obj.portfolio.organization_type)
if obj.portfolio and obj.portfolio.organization_type
else "-"
)
portfolio_organization_type.short_description = "Organization type" # type: ignore
def portfolio_federal_type(self, obj):
return (
BranchChoices.get_branch_label(obj.portfolio.federal_type)
if obj.portfolio and obj.portfolio.federal_type
else "-"
)
portfolio_federal_type.short_description = "Federal type" # type: ignore
def portfolio_organization_name(self, obj):
return obj.portfolio.organization_name if obj.portfolio else ""
portfolio_organization_name.short_description = "Organization name" # type: ignore
def portfolio_federal_agency(self, obj):
return obj.portfolio.federal_agency if obj.portfolio else ""
portfolio_federal_agency.short_description = "Federal agency" # type: ignore
def portfolio_state_territory(self, obj):
return obj.portfolio.state_territory if obj.portfolio else ""
portfolio_state_territory.short_description = "State, territory, or military post" # type: ignore
def portfolio_address_line1(self, obj):
return obj.portfolio.address_line1 if obj.portfolio else ""
portfolio_address_line1.short_description = "Address line 1" # type: ignore
def portfolio_address_line2(self, obj):
return obj.portfolio.address_line2 if obj.portfolio else ""
portfolio_address_line2.short_description = "Address line 2" # type: ignore
def portfolio_city(self, obj):
return obj.portfolio.city if obj.portfolio else ""
portfolio_city.short_description = "City" # type: ignore
def portfolio_zipcode(self, obj):
return obj.portfolio.zipcode if obj.portfolio else ""
portfolio_zipcode.short_description = "Zip code" # type: ignore
def portfolio_urbanization(self, obj):
return obj.portfolio.urbanization if obj.portfolio else ""
portfolio_urbanization.short_description = "Urbanization" # type: ignore
# Filters # Filters
list_filter = [GenericOrgFilter] list_filter = [GenericOrgFilter]
@ -1537,16 +1610,36 @@ class DomainInformationAdmin(ListHeaderAdmin, ImportExportModelAdmin):
None, None,
{ {
"fields": [ "fields": [
"portfolio",
"sub_organization",
"creator",
"domain_request", "domain_request",
"notes", "notes",
] ]
}, },
), ),
(
"Requested by",
{
"fields": [
"portfolio",
"sub_organization",
"creator",
]
},
),
(".gov domain", {"fields": ["domain"]}), (".gov domain", {"fields": ["domain"]}),
("Contacts", {"fields": ["senior_official", "other_contacts", "no_other_contacts_rationale"]}), (
"Contacts",
{
"fields": [
"senior_official",
"portfolio_senior_official",
"other_contacts",
"no_other_contacts_rationale",
"cisa_representative_first_name",
"cisa_representative_last_name",
"cisa_representative_email",
]
},
),
("Background info", {"fields": ["anything_else"]}), ("Background info", {"fields": ["anything_else"]}),
( (
"Type of organization", "Type of organization",
@ -1595,10 +1688,58 @@ class DomainInformationAdmin(ListHeaderAdmin, ImportExportModelAdmin):
], ],
}, },
), ),
# the below three sections are for portfolio fields
(
"Type of organization",
{
"fields": [
"portfolio_organization_type",
"portfolio_federal_type",
]
},
),
(
"Organization name and mailing address",
{
"fields": [
"portfolio_organization_name",
"portfolio_federal_agency",
]
},
),
(
"Show details",
{
"classes": ["collapse--dgfieldset"],
"description": "Extends organization name and mailing address",
"fields": [
"portfolio_state_territory",
"portfolio_address_line1",
"portfolio_address_line2",
"portfolio_city",
"portfolio_zipcode",
"portfolio_urbanization",
],
},
),
] ]
# Readonly fields for analysts and superusers # Readonly fields for analysts and superusers
readonly_fields = ("other_contacts", "is_election_board") readonly_fields = (
"portfolio_senior_official",
"portfolio_organization_type",
"portfolio_federal_type",
"portfolio_organization_name",
"portfolio_federal_agency",
"portfolio_state_territory",
"portfolio_address_line1",
"portfolio_address_line2",
"portfolio_city",
"portfolio_zipcode",
"portfolio_urbanization",
"other_contacts",
"is_election_board"
)
# Read only that we'll leverage for CISA Analysts # Read only that we'll leverage for CISA Analysts
analyst_readonly_fields = [ analyst_readonly_fields = [

View file

@ -1,17 +1,11 @@
import { handleSuborganizationFields } from './helpers-portfolio-dynamic-fields.js'; import { handlePortfolioSelection } from './helpers-portfolio-dynamic-fields.js';
/** /**
* A function for dynamic DomainInformation fields * A function for dynamic DomainRequest fields
*/ */
export function initDynamicDomainInformationFields(){ export function initDynamicDomainInformationFields(){
const domainInformationPage = document.getElementById("domaininformation_form"); const domainInformationPage = document.getElementById("domaininformation_form");
if (domainInformationPage) { if (domainInformationPage) {
handleSuborganizationFields(); handlePortfolioSelection();
}
// DomainInformation is embedded inside domain so this should fire there too
const domainPage = document.getElementById("domain_form");
if (domainPage) {
handleSuborganizationFields(portfolioDropdownSelector="#id_domain_info-0-portfolio", suborgDropdownSelector="#id_domain_info-0-sub_organization");
} }
} }

View file

@ -24,13 +24,13 @@ export function handleSuborganizationFields(
function toggleSuborganizationFields() { function toggleSuborganizationFields() {
if (portfolioDropdown.val() && !suborganizationDropdown.val()) { if (portfolioDropdown.val() && !suborganizationDropdown.val()) {
showElement(requestedSuborgField); if (requestedSuborgField) showElement(requestedSuborgField);
showElement(suborgCity); if (suborgCity) showElement(suborgCity);
showElement(suborgStateTerritory); if (suborgStateTerritory) showElement(suborgStateTerritory);
}else { }else {
hideElement(requestedSuborgField); if (requestedSuborgField) hideElement(requestedSuborgField);
hideElement(suborgCity); if (suborgCity) hideElement(suborgCity);
hideElement(suborgStateTerritory); if (suborgStateTerritory) hideElement(suborgStateTerritory);
} }
} }
@ -504,14 +504,14 @@ export function handlePortfolioSelection() {
if (portfolio_id && !suborganization_id) { if (portfolio_id && !suborganization_id) {
// Show suborganization request fields // Show suborganization request fields
showElement(requestedSuborganizationField); if (requestedSuborganizationField) showElement(requestedSuborganizationField);
showElement(suborganizationCity); if (suborganizationCity) showElement(suborganizationCity);
showElement(suborganizationStateTerritory); if (suborganizationStateTerritory) showElement(suborganizationStateTerritory);
} else { } else {
// Hide suborganization request fields if suborganization is selected // Hide suborganization request fields if suborganization is selected
hideElement(requestedSuborganizationField); if (requestedSuborganizationField) hideElement(requestedSuborganizationField);
hideElement(suborganizationCity); if (suborganizationCity) hideElement(suborganizationCity);
hideElement(suborganizationStateTerritory); if (suborganizationStateTerritory) hideElement(suborganizationStateTerritory);
} }
} }