mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-07-31 23:16:36 +02:00
Add API to select SO information
This commit is contained in:
parent
b092fc61b3
commit
a2f87c7084
5 changed files with 103 additions and 23 deletions
|
@ -511,11 +511,21 @@ function initializeWidgetOnList(list, parentId) {
|
|||
var actionNeededReasonDropdown = document.querySelector("#id_action_needed_reason");
|
||||
var actionNeededEmail = document.querySelector("#id_action_needed_reason_email");
|
||||
var readonlyView = document.querySelector("#action-needed-reason-email-readonly");
|
||||
if(!actionNeededEmail || !actionNeededReasonDropdown) {
|
||||
return;
|
||||
}
|
||||
|
||||
let emailWasSent = document.getElementById("action-needed-email-sent");
|
||||
let actionNeededEmailData = document.getElementById('action-needed-emails-data').textContent;
|
||||
let actionNeededEmailsJson = JSON.parse(actionNeededEmailData);
|
||||
if (!emailWasSent) {
|
||||
return;
|
||||
}
|
||||
|
||||
let actionNeededEmailData = document.getElementById('action-needed-emails-data').textContent;
|
||||
if(!actionNeededEmailData) {
|
||||
return;
|
||||
}
|
||||
|
||||
let actionNeededEmailsJson = JSON.parse(actionNeededEmailData);
|
||||
const domainRequestId = actionNeededReasonDropdown ? document.querySelector("#domain_request_id").value : null
|
||||
const emailSentSessionVariableName = `actionNeededEmailSent-${domainRequestId}`;
|
||||
const oldDropdownValue = actionNeededReasonDropdown ? actionNeededReasonDropdown.value : null;
|
||||
|
@ -791,35 +801,58 @@ function initializeWidgetOnList(list, parentId) {
|
|||
});
|
||||
|
||||
function handleFederalAgencyChange(federalAgency, organizationType) {
|
||||
|
||||
// Set the org type to federal if an agency is selected
|
||||
let selectedText = federalAgency.find("option:selected").text();
|
||||
if (selectedText !== "Non-Federal Agency" && selectedText) {
|
||||
organizationType.value = "federal";
|
||||
}else {
|
||||
if (organizationType.value === "federal") {
|
||||
organizationType.value = "";
|
||||
if (organizationType.value !== "federal") {
|
||||
organizationType.value = "federal";
|
||||
}
|
||||
// Set the SO field
|
||||
}else if (selectedText === "Non-Federal Agency" && organizationType.value === "federal") {
|
||||
organizationType.value = "";
|
||||
// Set the SO field
|
||||
}
|
||||
|
||||
// There isn't a senior official associated with null records and non federal agencies
|
||||
if (!selectedText || selectedText === "Non-Federal Agency") {
|
||||
return;
|
||||
}
|
||||
|
||||
// Automatically set the SO field.
|
||||
// How do we do this without an API??????????
|
||||
// let seniorOfficialId = assignSelfButton.getAttribute("data-user-id");
|
||||
// let seniorOfficialName = assignSelfButton.getAttribute("data-user-name");
|
||||
// if (!currentUserId || !currentUserName){
|
||||
// console.error("Could not assign current user: no values found.")
|
||||
// return;
|
||||
// }
|
||||
// Get the associated senior official with this federal agency
|
||||
let $seniorOfficial = django.jQuery("#id_senior_official");
|
||||
if (!$seniorOfficial) {
|
||||
console.log("Could not find the senior official field");
|
||||
return;
|
||||
}
|
||||
|
||||
// if (selector.find(`option[value='${currentUserId}']`).length) {
|
||||
// // Select the value that is associated with the current user.
|
||||
// selector.val(currentUserId).trigger("change");
|
||||
// } else {
|
||||
// // Create a DOM Option that matches the desired user. Then append it and select it.
|
||||
// let userOption = new Option(currentUserName, currentUserId, true, true);
|
||||
// selector.append(userOption).trigger("change");
|
||||
// }
|
||||
let seniorOfficialApi = document.querySelector("#senior_official_from_agency_json_url").value;
|
||||
fetch(`${seniorOfficialApi}?agency_name=${selectedText}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.error) {
|
||||
console.error('Error in AJAX call: ' + data.error);
|
||||
return;
|
||||
}
|
||||
|
||||
let seniorOfficialId = data.id;
|
||||
let seniorOfficialName = [data.first_name, data.last_name].join(" ");
|
||||
if (!seniorOfficialId || !seniorOfficialName || !seniorOfficialName.trim()){
|
||||
console.error("Could not assign current Senior Official: no values found.")
|
||||
return;
|
||||
}
|
||||
|
||||
// Add the senior official to the dropdown.
|
||||
// This format supports select2 - if we decide to convert this field in the future.
|
||||
if ($seniorOfficial.find(`option[value='${seniorOfficialId}']`).length) {
|
||||
// Select the value that is associated with the current Senior Official.
|
||||
$seniorOfficial.val(seniorOfficialId).trigger("change");
|
||||
} else {
|
||||
// Create a DOM Option that matches the desired Senior Official. Then append it and select it.
|
||||
let userOption = new Option(seniorOfficialName, seniorOfficialId, true, true);
|
||||
$seniorOfficial.append(userOption).trigger("change");
|
||||
}
|
||||
})
|
||||
.catch(error => console.error('Error fetching senior official:', error));
|
||||
}
|
||||
|
||||
function handleStateTerritoryChange(stateTerritory, urbanizationField) {
|
||||
|
|
|
@ -24,6 +24,7 @@ from registrar.views.report_views import (
|
|||
|
||||
from registrar.views.domain_request import Step
|
||||
from registrar.views.domain_requests_json import get_domain_requests_json
|
||||
from registrar.views.utility.api_views import get_senior_official_from_federal_agency_json
|
||||
from registrar.views.domains_json import get_domains_json
|
||||
from registrar.views.utility import always_404
|
||||
from api.views import available, get_current_federal, get_current_full
|
||||
|
@ -155,6 +156,12 @@ urlpatterns = [
|
|||
path("api/v1/available/", available, name="available"),
|
||||
path("api/v1/get-report/current-federal", get_current_federal, name="get-current-federal"),
|
||||
path("api/v1/get-report/current-full", get_current_full, name="get-current-full"),
|
||||
# TODO convert to admin view
|
||||
path(
|
||||
"api/v1/get-senior-official-from-federal-agency-json/",
|
||||
get_senior_official_from_federal_agency_json,
|
||||
name="get-senior-official-from-federal-agency-json"
|
||||
),
|
||||
path(
|
||||
"todo",
|
||||
lambda r: always_404(r, "We forgot to include this link, sorry."),
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
{% extends 'django/admin/email_clipboard_change_form.html' %}
|
||||
{% load i18n static %}
|
||||
|
||||
{% block content %}
|
||||
{% comment %} Stores the json endpoint in a url for easlier access {% endcomment %}
|
||||
{% url 'get-senior-official-from-federal-agency-json' as url %}
|
||||
<input id="senior_official_from_agency_json_url" class="display-none" value="{{url}}" />
|
||||
{{ block.super }}
|
||||
{% endblock content %}
|
||||
|
||||
{% block after_related_objects %}
|
||||
<div class="module aligned padding-3">
|
||||
<h2>Associated groups and suborganizations</h2>
|
||||
|
|
|
@ -8,3 +8,4 @@ from .permission_views import (
|
|||
DomainInvitationPermissionDeleteView,
|
||||
DomainRequestWizardPermissionView,
|
||||
)
|
||||
from .api_views import get_senior_official_from_federal_agency_json
|
||||
|
|
32
src/registrar/views/utility/api_views.py
Normal file
32
src/registrar/views/utility/api_views.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
import logging
|
||||
from django.http import JsonResponse
|
||||
from django.forms.models import model_to_dict
|
||||
from registrar.models import FederalAgency, SeniorOfficial
|
||||
from django.utils.dateformat import format
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.urls import reverse
|
||||
from django.db.models import Q
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@login_required
|
||||
def get_senior_official_from_federal_agency_json(request):
|
||||
"""Returns federal_agency information as a JSON"""
|
||||
|
||||
# This API is only accessible to admins
|
||||
superuser_perm = request.user.has_perm("registrar.full_access_permission")
|
||||
analyst_perm = request.user.has_perm("registrar.analyst_access_permission")
|
||||
if not request.user.is_authenticated or not analyst_perm or not superuser_perm:
|
||||
# We intentionally don't return anything here
|
||||
return {}
|
||||
|
||||
agency_name = request.GET.get("agency_name")
|
||||
agency = FederalAgency.objects.filter(agency=agency_name).first()
|
||||
senior_official = SeniorOfficial.objects.filter(federal_agency=agency).first()
|
||||
if agency and senior_official:
|
||||
# Convert the agency object to a dictionary
|
||||
so_dict = model_to_dict(senior_official)
|
||||
return JsonResponse(so_dict)
|
||||
else:
|
||||
return JsonResponse({"error": "Senior Official not found"})
|
Loading…
Add table
Add a link
Reference in a new issue