mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-24 19:48:36 +02:00
changes to domain form
This commit is contained in:
parent
7875069897
commit
42c62c2ba0
6 changed files with 108 additions and 8 deletions
|
@ -239,6 +239,14 @@ class DomainInformationInlineForm(forms.ModelForm):
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
widgets = {
|
widgets = {
|
||||||
"other_contacts": NoAutocompleteFilteredSelectMultiple("other_contacts", False),
|
"other_contacts": NoAutocompleteFilteredSelectMultiple("other_contacts", False),
|
||||||
|
"portfolio": AutocompleteSelectWithPlaceholder(
|
||||||
|
DomainInformation._meta.get_field("portfolio"), admin.site, attrs={"data-placeholder": "---------"}
|
||||||
|
),
|
||||||
|
"sub_organization": AutocompleteSelectWithPlaceholder(
|
||||||
|
DomainInformation._meta.get_field("sub_organization"),
|
||||||
|
admin.site,
|
||||||
|
attrs={"data-placeholder": "---------", "ajax-url": "get-suborganization-list-json"},
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2716,7 +2724,72 @@ class DomainInformationInline(admin.StackedInline):
|
||||||
template = "django/admin/includes/domain_info_inline_stacked.html"
|
template = "django/admin/includes/domain_info_inline_stacked.html"
|
||||||
model = models.DomainInformation
|
model = models.DomainInformation
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
fieldsets = copy.deepcopy(list(DomainInformationAdmin.fieldsets))
|
fieldsets = copy.deepcopy(list(DomainInformationAdmin.fieldsets))
|
||||||
|
readonly_fields = copy.deepcopy(DomainInformationAdmin.readonly_fields)
|
||||||
analyst_readonly_fields = copy.deepcopy(DomainInformationAdmin.analyst_readonly_fields)
|
analyst_readonly_fields = copy.deepcopy(DomainInformationAdmin.analyst_readonly_fields)
|
||||||
autocomplete_fields = copy.deepcopy(DomainInformationAdmin.autocomplete_fields)
|
autocomplete_fields = copy.deepcopy(DomainInformationAdmin.autocomplete_fields)
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { handlePortfolioSelection } from './helpers-portfolio-dynamic-fields.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A function that appends target="_blank" to the domain_form buttons
|
* A function that appends target="_blank" to the domain_form buttons
|
||||||
*/
|
*/
|
||||||
|
@ -28,3 +30,15 @@ export function initDomainFormTargetBlankButtons() {
|
||||||
domainSubmitButton.addEventListener("mouseout", () => openInNewTab(domainFormElement, false));
|
domainSubmitButton.addEventListener("mouseout", () => openInNewTab(domainFormElement, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function for dynamic Domain fields
|
||||||
|
*/
|
||||||
|
export function initDynamicDomainFields(){
|
||||||
|
const domainPage = document.getElementById("domain_form");
|
||||||
|
if (domainPage) {
|
||||||
|
console.log("handling domain page");
|
||||||
|
handlePortfolioSelection("#id_domain_info-0-portfolio",
|
||||||
|
"#id_domain_info-0-sub_organization");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
import { handlePortfolioSelection } from './helpers-portfolio-dynamic-fields.js';
|
import { handlePortfolioSelection } from './helpers-portfolio-dynamic-fields.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A function for dynamic DomainRequest fields
|
* A function for dynamic DomainInformation fields
|
||||||
*/
|
*/
|
||||||
export function initDynamicDomainInformationFields(){
|
export function initDynamicDomainInformationFields(){
|
||||||
const domainInformationPage = document.getElementById("domaininformation_form");
|
const domainInformationPage = document.getElementById("domaininformation_form");
|
||||||
if (domainInformationPage) {
|
if (domainInformationPage) {
|
||||||
|
console.log("handling domain information page");
|
||||||
handlePortfolioSelection();
|
handlePortfolioSelection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,10 +48,13 @@ export function handleSuborganizationFields(
|
||||||
*
|
*
|
||||||
* IMPORTANT NOTE: The logic in this method is paired dynamicPortfolioFields
|
* IMPORTANT NOTE: The logic in this method is paired dynamicPortfolioFields
|
||||||
*/
|
*/
|
||||||
export function handlePortfolioSelection() {
|
export function handlePortfolioSelection(
|
||||||
|
portfolioDropdownSelector="#id_portfolio",
|
||||||
|
suborgDropdownSelector="#id_sub_organization"
|
||||||
|
) {
|
||||||
// These dropdown are select2 fields so they must be interacted with via jquery
|
// These dropdown are select2 fields so they must be interacted with via jquery
|
||||||
const portfolioDropdown = django.jQuery("#id_portfolio");
|
const portfolioDropdown = django.jQuery(portfolioDropdownSelector);
|
||||||
const suborganizationDropdown = django.jQuery("#id_sub_organization");
|
const suborganizationDropdown = django.jQuery(suborgDropdownSelector);
|
||||||
const suborganizationField = document.querySelector(".field-sub_organization");
|
const suborganizationField = document.querySelector(".field-sub_organization");
|
||||||
const requestedSuborganizationField = document.querySelector(".field-requested_suborganization");
|
const requestedSuborganizationField = document.querySelector(".field-requested_suborganization");
|
||||||
const suborganizationCity = document.querySelector(".field-suborganization_city");
|
const suborganizationCity = document.querySelector(".field-suborganization_city");
|
||||||
|
@ -440,8 +443,8 @@ export function handlePortfolioSelection() {
|
||||||
showElement(portfolioSeniorOfficialField);
|
showElement(portfolioSeniorOfficialField);
|
||||||
|
|
||||||
// Hide fields not applicable when a portfolio is selected
|
// Hide fields not applicable when a portfolio is selected
|
||||||
hideElement(otherEmployeesField);
|
if (otherEmployeesField) hideElement(otherEmployeesField);
|
||||||
hideElement(noOtherContactsRationaleField);
|
if (noOtherContactsRationaleField) hideElement(noOtherContactsRationaleField);
|
||||||
hideElement(cisaRepresentativeFirstNameField);
|
hideElement(cisaRepresentativeFirstNameField);
|
||||||
hideElement(cisaRepresentativeLastNameField);
|
hideElement(cisaRepresentativeLastNameField);
|
||||||
hideElement(cisaRepresentativeEmailField);
|
hideElement(cisaRepresentativeEmailField);
|
||||||
|
@ -463,8 +466,8 @@ export function handlePortfolioSelection() {
|
||||||
// Show fields that are relevant when no portfolio is selected
|
// Show fields that are relevant when no portfolio is selected
|
||||||
showElement(seniorOfficialField);
|
showElement(seniorOfficialField);
|
||||||
hideElement(portfolioSeniorOfficialField);
|
hideElement(portfolioSeniorOfficialField);
|
||||||
showElement(otherEmployeesField);
|
if (otherEmployeesField) showElement(otherEmployeesField);
|
||||||
showElement(noOtherContactsRationaleField);
|
if (noOtherContactsRationaleField) showElement(noOtherContactsRationaleField);
|
||||||
showElement(cisaRepresentativeFirstNameField);
|
showElement(cisaRepresentativeFirstNameField);
|
||||||
showElement(cisaRepresentativeLastNameField);
|
showElement(cisaRepresentativeLastNameField);
|
||||||
showElement(cisaRepresentativeEmailField);
|
showElement(cisaRepresentativeEmailField);
|
||||||
|
|
|
@ -14,6 +14,7 @@ import {
|
||||||
import { initDomainFormTargetBlankButtons } from './domain-form.js';
|
import { initDomainFormTargetBlankButtons } from './domain-form.js';
|
||||||
import { initDynamicPortfolioFields } from './portfolio-form.js';
|
import { initDynamicPortfolioFields } from './portfolio-form.js';
|
||||||
import { initDynamicDomainInformationFields } from './domain-information-form.js';
|
import { initDynamicDomainInformationFields } from './domain-information-form.js';
|
||||||
|
import { initDynamicDomainFields } from './domain-form.js';
|
||||||
|
|
||||||
// General
|
// General
|
||||||
initModals();
|
initModals();
|
||||||
|
@ -33,6 +34,7 @@ initDynamicDomainRequestFields();
|
||||||
|
|
||||||
// Domain
|
// Domain
|
||||||
initDomainFormTargetBlankButtons();
|
initDomainFormTargetBlankButtons();
|
||||||
|
initDynamicDomainFields();
|
||||||
|
|
||||||
// Portfolio
|
// Portfolio
|
||||||
initDynamicPortfolioFields();
|
initDynamicPortfolioFields();
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
{% extends 'admin/change_form.html' %}
|
{% extends 'admin/change_form.html' %}
|
||||||
{% load i18n static %}
|
{% load i18n static %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% comment %} Stores the json endpoint in a url for easier access {% endcomment %}
|
||||||
|
{% url 'get-portfolio-json' as url %}
|
||||||
|
<input id="portfolio_json_url" class="display-none" value="{{url}}" />
|
||||||
|
{{ block.super }}
|
||||||
|
{% endblock content %}
|
||||||
|
|
||||||
{% block field_sets %}
|
{% block field_sets %}
|
||||||
<div class="display-flex flex-row flex-justify submit-row">
|
<div class="display-flex flex-row flex-justify submit-row">
|
||||||
<div class="flex-align-self-start button-list-mobile">
|
<div class="flex-align-self-start button-list-mobile">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue