mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-28 13:36:30 +02:00
domain information changes done
This commit is contained in:
parent
8001c405d4
commit
2730047588
3 changed files with 161 additions and 26 deletions
|
@ -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 = [
|
||||||
|
|
|
@ -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");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue