diff --git a/src/registrar/assets/js/get-gov-admin.js b/src/registrar/assets/js/get-gov-admin.js
index dcdeeb106..f5bcd3b26 100644
--- a/src/registrar/assets/js/get-gov-admin.js
+++ b/src/registrar/assets/js/get-gov-admin.js
@@ -276,53 +276,27 @@ function enableRelatedWidgetButtons(changeLink, deleteLink, viewLink, elementPk,
viewLink.setAttribute('title', viewLink.getAttribute('title-template').replace('selected item', elementText));
}
-// function performDataLookup(e) {
-// e.preventDefault(); // Prevent the default form submission
+/** An IIFE for admin in DjangoAdmin to listen to clicks on the growth report export button,
+ * attach the seleted start and end dates to a url that'll trigger the view, and finally
+ * redirect to that url.
+*/
+(function (){
-// console.log('Form submitted!');
+ let exportGrowthReportButton = document.getElementById('exportLink');
+ if (exportGrowthReportButton) {
+ exportGrowthReportButton.addEventListener('click', function() {
+ // Get the selected start and end dates
+ let startDate = document.getElementById('start').value;
+ let endDate = document.getElementById('end').value;
+ let exportUrl = document.getElementById('exportLink').dataset.exportUrl;
-// var form = document.getElementById("exportDataForm");
-// var formData = new FormData(form);
-
-// // Perform an AJAX request to fetch data
-// fetch('/admin/', {
-// method: 'POST',
-// body: formData,
-// })
-// .then(response => {
-// if (!response.ok) {
-// console.log(response);
-// console.log(`HTTP error! Status: ${response.status}`);
-// throw new Error(`HTTP error! Status: ${response.status}`);
-// }
-// return response.json();
-// })
-// .then(data => {
-// // Handle the data (update the result div, for example)
-// document.getElementById("dataResult").innerText = JSON.stringify(data);
-// })
-// .catch(error => console.error('Error:', error));
-// }
-
- (function (){
-
- document.getElementById('exportLink').addEventListener('click', function(event) {
- event.preventDefault(); // Prevent the default link behavior
+ // Build the URL with parameters
+ exportUrl += "?start_date=" + startDate + "&end_date=" + endDate;
- // Get the selected start and end dates
- var startDate = document.getElementById('start').value;
- var endDate = document.getElementById('end').value;
-
- var exportUrl = document.getElementById('exportLink').dataset.exportUrl;
+ // Redirect to the export URL
+ window.location.href = exportUrl;
+ });
+ }
- // Build the URL with parameters
- exportUrl += "?start_date=" + startDate + "&end_date=" + endDate;
-
- // Redirect to the export URL
- window.location.href = exportUrl;
- });
-
-
- // document.getElementById('exportDataForm').addEventListener('submit', performDataLookup);
})();
\ No newline at end of file
diff --git a/src/registrar/templates/admin/index.html b/src/registrar/templates/admin/index.html
index 9052ddb44..495dbc4f9 100644
--- a/src/registrar/templates/admin/index.html
+++ b/src/registrar/templates/admin/index.html
@@ -10,6 +10,8 @@
Inputs of type date suck for accessibility.
We'll need to replace those guys with a django form once we figure out how to hook one onto this page.
The challenge is in the path definition in urls. Itdoes NOT like admin/export_data/
+
+ See the commit "Review for ticket #999"
{% endcomment %}
@@ -17,8 +19,7 @@
- {% comment %} TODO: add a aria label or something {% endcomment %}
- Export
+
diff --git a/src/registrar/utility/csv_export.py b/src/registrar/utility/csv_export.py
index 563983e3c..50b67909b 100644
--- a/src/registrar/utility/csv_export.py
+++ b/src/registrar/utility/csv_export.py
@@ -1,4 +1,5 @@
import csv
+import logging
from datetime import datetime
from registrar.models.domain import Domain
from registrar.models.domain_information import DomainInformation
@@ -7,20 +8,20 @@ from django.db.models import Value
from django.db.models.functions import Coalesce
from itertools import chain
+logger = logging.getLogger(__name__)
def export_domains_to_writer(writer, columns, sort_fields, filter_condition):
# write columns headers to writer
writer.writerow(columns)
-
- print(f"filter_condition {filter_condition}")
+ # Get the domainInfos
domainInfos = DomainInformation.objects.filter(**filter_condition).order_by(*sort_fields)
+ # domain__created_at__gt is in filter_conditions. This means that we're querrying for the growth report and
+ # need to fetch the domainInfos for the deleted domains. This is an OR situation so we can' combine the filters
+ # in one query which would be an AND operation.
if 'domain__created_at__gt' in filter_condition:
-
- deleted_domainInfos = DomainInformation.objects.filter(domain__state=Domain.State.DELETED).order_by("domain__deleted_at")
- print(f"filtering by deleted {domainInfos}")
-
+ deleted_domainInfos = DomainInformation.objects.filter(domain__state=Domain.State.DELETED).order_by("domain__deleted_at")
# Combine the two querysets into a single iterable
all_domainInfos = list(chain(domainInfos, deleted_domainInfos))
else:
@@ -150,27 +151,20 @@ def export_data_federal_to_csv(csv_file):
def export_data_growth_to_csv(csv_file, start_date, end_date):
- print(f'start_date {start_date}')
- print(f'end_date {end_date}')
-
- # Check if start_date is not empty before using strptime
if start_date:
start_date_formatted = datetime.strptime(start_date, "%Y-%m-%d")
- print(f'start_date_formatted {start_date_formatted}')
else:
# Handle the case where start_date is missing or empty
- print('ON NO')
- # TODO: use Nov 1 2023
- start_date_formatted = None # Replace with appropriate handling
+ # Default to a date that's prior to our first deployment
+ logger.error(f"Error fetching the start date, will default to 12023/1/1")
+ start_date_formatted = datetime(2023, 11, 1) # Replace with appropriate handling
if end_date:
end_date_formatted = datetime.strptime(end_date, "%Y-%m-%d")
- print(f'end_date_formatted {end_date_formatted}')
else:
- # Handle the case where start_date is missing or empty
- print('ON NO')
- # TODO: use now
- end_date_formatted = None # Replace with appropriate handling
+ # Handle the case where end_date is missing or empty
+ logger.error(f"Error fetching the end date, will default to now()")
+ end_date_formatted = datetime.now() # Replace with appropriate handling
writer = csv.writer(csv_file)
# define columns to include in export
diff --git a/src/registrar/views/admin_views.py b/src/registrar/views/admin_views.py
index 4c7aa3340..22792a002 100644
--- a/src/registrar/views/admin_views.py
+++ b/src/registrar/views/admin_views.py
@@ -1,54 +1,31 @@
"""Admin-related views."""
-from django.http import HttpResponse, JsonResponse
+from django.http import HttpResponse
from django.views import View
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render
from registrar.utility import csv_export
-from django.views.generic import TemplateView
-from registrar.models import (
- Domain,
- DomainApplication,
- DomainInvitation,
- DomainInformation,
- UserDomainRole,
-)
import logging
-
logger = logging.getLogger(__name__)
class ExportData(View):
- def get_context_data(self, **kwargs):
- print('VIE VIE VIE')
- context = super().get_context_data(**kwargs)
- context['form'] = self.form_class()
- context['test'] = 'testing the context'
- return context
-
def get(self, request, *args, **kwargs):
# Get start_date and end_date from the request's GET parameters
+ # #999: not needed if we switch to django forms
start_date = request.GET.get('start_date', '')
end_date = request.GET.get('end_date', '')
-
- print(start_date)
- print(end_date)
- # Do something with start_date and end_date, e.g., include in the CSV export logic
- # # Federal only
response = HttpResponse(content_type="text/csv")
response["Content-Disposition"] = f'attachment; filename="growth-from-{start_date}-to-{end_date}.csv"'
+ # For #999: set export_data_growth_to_csv to return the resulting queryset, which we can then use
+ # in context to display this data in the template.
csv_export.export_data_growth_to_csv(response, start_date, end_date)
-
- # response = HttpResponse(content_type="text/csv")
- # response["Content-Disposition"] = 'attachment; filename="current-federal.csv"'
- # csv_export.export_data_growth_to_csv(response)
-
return response
\ No newline at end of file