diff --git a/apcd-cms/src/apps/admin_extension/urls.py b/apcd-cms/src/apps/admin_extension/urls.py
index ed0acfe6..eb002d66 100644
--- a/apcd-cms/src/apps/admin_extension/urls.py
+++ b/apcd-cms/src/apps/admin_extension/urls.py
@@ -1,7 +1,11 @@
from django.urls import path
from apps.admin_extension.views import AdminExtensionsTable
+
app_name = 'admin_extension'
urlpatterns = [
- path('list-extensions/', AdminExtensionsTable.as_view(), name="admin_extensions"),
+ path('list-extensions/', AdminExtensionsTable.as_view(), name="list_extensions"),
+ path('list-extensions/', AdminExtensionsTable.as_view(), name='status'),
+ path('list-extensions/', AdminExtensionsTable.as_view(), name='org'),
+ path('list-extensions/', AdminExtensionsTable.as_view(), name='status_org')
]
\ No newline at end of file
diff --git a/apcd-cms/src/apps/admin_extension/views.py b/apcd-cms/src/apps/admin_extension/views.py
index 97293a9b..bd2c3be0 100644
--- a/apcd-cms/src/apps/admin_extension/views.py
+++ b/apcd-cms/src/apps/admin_extension/views.py
@@ -1,9 +1,13 @@
-from django.http import HttpResponseRedirect
+from django.http import HttpResponseRedirect, HttpResponse, JsonResponse
from django.core.paginator import Paginator, EmptyPage
from django.views.generic.base import TemplateView
-from apps.utils.apcd_database import get_all_extensions
+from django.template import loader
+from apps.utils.apcd_database import get_all_extensions, update_extension
from apps.utils.apcd_groups import is_apcd_admin
+from apps.utils.utils import table_filter
from apps.utils.utils import title_case
+from apps.components.paginator.paginator import paginator
+from dateutil import parser
from datetime import datetime
import logging
@@ -12,18 +16,47 @@
class AdminExtensionsTable(TemplateView):
template_name = 'list_admin_extension.html'
+ def post(self, request):
+
+ form = request.POST.copy()
+
+ def _err_msg(resp):
+ if hasattr(resp, 'pgerror'):
+ return resp.pgerror
+ if isinstance(resp, Exception):
+ return str(resp)
+ return None
+
+ def _edit_extension(form):
+ errors = []
+ extension_response = update_extension(form)
+ if _err_msg(extension_response):
+ errors.append(_err_msg(extension_response))
+ if len(errors) != 0:
+ logger.debug(print(errors))
+ template = loader.get_template('edit_extension_error.html')
+ else:
+ logger.debug(print("success"))
+ template = loader.get_template('edit_extension_success.html')
+ return template
+
+ template = _edit_extension(form)
+ return HttpResponse(template.render({}, request))
+ def get(self, request, *args, **kwargs):
+ extension_content = get_all_extensions()
+
+
+ context = self.get_context_data(extension_content, *args,**kwargs)
+ template = loader.get_template(self.template_name)
+ return HttpResponse(template.render(context, request))
def dispatch(self, request, *args, **kwargs):
if not request.user.is_authenticated or not is_apcd_admin(request.user):
return HttpResponseRedirect('/')
return super(AdminExtensionsTable, self).dispatch(request, *args, **kwargs)
- def get_context_data(self, *args, **kwargs):
-
+ def get_context_data(self, extension_content, *args, **kwargs):
context = super(AdminExtensionsTable, self).get_context_data(*args, **kwargs)
-
- extension_content = get_all_extensions()
-
def _set_extensions(extension):
return {
'extension_id': extension[0],
@@ -31,7 +64,8 @@ def _set_extensions(extension):
'current_expected_date': extension[2],
'requested_target_date': extension[3],
'approved_expiration_date': extension[4],
- 'extension_type': title_case(extension[5]),
+ # to separate small carrier into two words
+ 'extension_type': title_case(extension[5].replace('_', ' ')) if extension[5] else None,
'applicable_data_period': _get_applicable_data_period(extension[6]),
'status': title_case(extension[7]),
'outcome': title_case(extension[8]),
@@ -40,40 +74,73 @@ def _set_extensions(extension):
'submitter_code': extension[11],
'payor_code': extension[12],
'user_id': extension[13],
- 'requestor_name': extension[14],
+ 'requestor_name': title_case(extension[14]),
'requestor_email': extension[15],
'explanation_justification': extension[16],
'notes': extension[17],
'org_name': extension[18]
}
-
- context['header'] = ['Created', 'Organization', 'Requestor Name', 'Extension Type', 'Outcome', 'Status', 'Actions']
- extensions = []
-
- for extension in extension_content:
- extensions.append(_set_extensions(extension))
+ context['header'] = ['Created', 'Organization', 'Requestor Name', 'Extension Type', 'Outcome', 'Status', 'Approved Expiration', 'Actions']
+ context['status_options'] = ['All']
+ context['org_options'] = ['All']
+ context['outcome_options'] = []
+ context['extensions'] = []
try:
page_num = int(self.request.GET.get('page'))
except:
page_num = 1
- p = Paginator(extensions, 10)
+ def getDate(row):
+ date = row[1]
+ return date if date is not None else parser.parse('1-1-0001')
- try:
- page = p.page(page_num)
- except EmptyPage:
- page = p.page(1)
+ extension_content = sorted(extension_content, key=lambda row:getDate(row), reverse=True) # sort extensions by newest to oldest
- context['page'] = page
- context['page_num'] = int(page_num)
- context['num_pages'] = range(1, p.num_pages + 1)
+ extension_table_entries = []
+ for extension in extension_content:
+ # to be used by paginator
+ extension_table_entries.append(_set_extensions(extension))
+ # to be able to access any extension in a template
+ context['extensions'].append(_set_extensions(extension))
+ org_name = title_case(extension[18])
+ status = title_case(extension[7])
+ outcome = title_case(extension[8])
+ if org_name not in context['org_options']:
+ context['org_options'].append(org_name)
+ context['org_options'] = sorted(context['org_options'], key=lambda x: (x != 'All', x))
+ if status not in context['status_options']:
+ context['status_options'].append(status)
+ context['status_options'] = sorted(context['status_options'], key=lambda x: (x != 'All', x))
+ if outcome not in context['outcome_options']:
+ context['outcome_options'].append(outcome)
+ context['outcome_options'] = context['outcome_options']
+
+ queryStr = ''
+ status_filter = self.request.GET.get('status')
+ org_filter = self.request.GET.get('org')
+
+ context['selected_status'] = None
+ if status_filter is not None and status_filter != 'All':
+ context['selected_status'] = status_filter
+ queryStr += f'&status={status_filter}'
+ extension_table_entries = table_filter(status_filter, extension_table_entries, 'status')
+
+ context['selected_org'] = None
+ if org_filter is not None and org_filter != 'All':
+ context['selected_org'] = org_filter
+ queryStr += f'&org={org_filter}'
+ extension_table_entries = table_filter(org_filter.replace("(", "").replace(")",""), extension_table_entries, 'org_name')
+
+ context['query_str'] = queryStr
+ context.update(paginator(self.request, extension_table_entries))
+ context['pagination_url_namespaces'] = 'admin_extension:list_extensions'
return context
# function converts int value in the format YYYYMM to a string with abbreviated month and year
def _get_applicable_data_period(value):
- try:
+ try:
return datetime.strptime(str(value), '%Y%m').strftime('%b. %Y')
except:
return None
\ No newline at end of file
diff --git a/apcd-cms/src/apps/admin_regis_table/views.py b/apcd-cms/src/apps/admin_regis_table/views.py
index fb426a61..a7a4821c 100644
--- a/apcd-cms/src/apps/admin_regis_table/views.py
+++ b/apcd-cms/src/apps/admin_regis_table/views.py
@@ -239,22 +239,22 @@ def getDate(row):
if org_name not in context['org_options']:
context['org_options'].append(org_name)
+ queryStr = ''
status_filter = self.request.GET.get('status')
org_filter = self.request.GET.get('org')
context['selected_status'] = None
if status_filter is not None and status_filter != 'All':
context['selected_status'] = status_filter
+ queryStr += f'&status={status_filter}'
registration_table_entries = table_filter(status_filter, registration_table_entries, 'reg_status')
context['selected_org'] = None
if org_filter is not None and org_filter != 'All':
context['selected_org'] = org_filter
+ queryStr += f'&org={org_filter}'
registration_table_entries = table_filter(org_filter.replace("(", "").replace(")",""), registration_table_entries, 'biz_name')
- queryStr = '?'
- if len(self.request.META['QUERY_STRING']) > 0:
- queryStr = queryStr + self.request.META['QUERY_STRING'].replace(f'page={page_num}', '') + ('&' if self.request.GET.get('page') is None else '')
context['query_str'] = queryStr
context.update(paginator(self.request, registration_table_entries))
context['pagination_url_namespaces'] = 'administration:admin_regis_table'
diff --git a/apcd-cms/src/apps/admin_submissions/templates/list_admin_submissions.html b/apcd-cms/src/apps/admin_submissions/templates/list_admin_submissions.html
index 52f282e9..bc8c424d 100644
--- a/apcd-cms/src/apps/admin_submissions/templates/list_admin_submissions.html
+++ b/apcd-cms/src/apps/admin_submissions/templates/list_admin_submissions.html
@@ -22,7 +22,7 @@ View Submissions
Filter by Status:
Sort by:
@@ -32,7 +32,7 @@ View Submissions
{% endfor %}
- {% if selected_filter or selected_sort %}
+ {% if selected_status or selected_sort %}
{% endif %}
@@ -71,9 +71,9 @@
View Submissions
var filterDropdown, filterValue, url_params, url, xhr;
filterDropdown = document.getElementById("statusFilter");
filterValue = filterDropdown.value;
- url_params = `?filter=${filterValue}`;
+ url_params = `?status=${filterValue}`;
{% if selected_sort %}
- url_params = `?filter=${filterValue}&sort={{selected_sort}}`;
+ url_params = `?sort={{selected_sort}}&status=${filterValue}`;
{% endif %}
url = `/administration/list-submissions/${url_params}`;
xhr = new XMLHttpRequest();
@@ -87,8 +87,8 @@
View Submissions
sortDropdown = document.getElementById('dateSort');
sortValue = sortDropdown.value;
url_params = `?sort=${sortValue}`;
- {% if selected_filter %}
- url_params = `?filter={{selected_filter}}&sort=${sortValue}`;
+ {% if selected_status %}
+ url_params = `?sort=${sortValue}&status={{selected_status}}`;
{% endif %}
url = `/administration/list-submissions/${url_params}`;
xhr = new XMLHttpRequest();
diff --git a/apcd-cms/src/apps/admin_submissions/urls.py b/apcd-cms/src/apps/admin_submissions/urls.py
index dab6a62d..abf229e0 100644
--- a/apcd-cms/src/apps/admin_submissions/urls.py
+++ b/apcd-cms/src/apps/admin_submissions/urls.py
@@ -4,7 +4,7 @@
app_name = 'administration'
urlpatterns = [
path('list-submissions/', AdminSubmissionsTable.as_view(), name="admin_submissions"),
- path(r'list-submissions/?filter=(?P
)/', AdminSubmissionsTable.as_view(), name="admin_submissions"),
+ path(r'list-submissions/?status=(?P)/', AdminSubmissionsTable.as_view(), name="admin_submissions"),
path(r'list-submissions/?sort=(?P)/', AdminSubmissionsTable.as_view(), name="admin_submissions"),
- path(r'list-submissions/?filter=(?P)&sort=(?P)/', AdminSubmissionsTable.as_view(), name="admin_submissions"),
+ path(r'list-submissions/?sort=(?P)&filter=(?P)/', AdminSubmissionsTable.as_view(), name="admin_submissions"),
]
diff --git a/apcd-cms/src/apps/admin_submissions/views.py b/apcd-cms/src/apps/admin_submissions/views.py
index 33eda310..08593b73 100644
--- a/apcd-cms/src/apps/admin_submissions/views.py
+++ b/apcd-cms/src/apps/admin_submissions/views.py
@@ -24,8 +24,9 @@ def get_context_data(self, *args, **kwargs):
submission_content = get_all_submissions_and_logs()
- filter = self.request.GET.get('filter')
+ queryStr = ''
dateSort = self.request.GET.get('sort')
+ status_filter = self.request.GET.get('status')
def getDate(row):
date = row['received_timestamp']
@@ -33,6 +34,7 @@ def getDate(row):
if dateSort is not None:
context['selected_sort'] = dateSort
+ queryStr += f'&sort={dateSort}'
submission_content = sorted(submission_content, key=lambda row:getDate(row), reverse=(dateSort == 'newDate'))
try:
@@ -40,10 +42,11 @@ def getDate(row):
except:
page_num = 1
- context['selected_filter'] = None
- if filter is not None and filter != 'All':
- context['selected_filter'] = filter
- submission_content = table_filter(filter, submission_content, 'status')
+ context['selected_status'] = None
+ if status_filter is not None and status_filter != 'All':
+ context['selected_status'] = status_filter
+ queryStr += f'&status={status_filter}'
+ submission_content = table_filter(status_filter, submission_content, 'status')
limit = 50
offset = limit * (page_num - 1)
@@ -64,9 +67,6 @@ def getDate(row):
context['filter_options'] = ['All', 'In Process', 'Complete']
context['sort_options'] = {'newDate': 'Newest Received', 'oldDate': 'Oldest Received'}
- queryStr = '?'
- if len(self.request.META['QUERY_STRING']) > 0:
- queryStr = queryStr + self.request.META['QUERY_STRING'].replace(f'page={page_num}', '') + ('&' if self.request.GET.get('page') is None else '')
context['query_str'] = queryStr
context.update(paginator(self.request, submission_content, limit))
context['pagination_url_namespaces'] = 'admin_submission:admin_submissions'
diff --git a/apcd-cms/src/apps/components/paginator/templates/paginator.html b/apcd-cms/src/apps/components/paginator/templates/paginator.html
index 4f0b2381..f06ed9d1 100644
--- a/apcd-cms/src/apps/components/paginator/templates/paginator.html
+++ b/apcd-cms/src/apps/components/paginator/templates/paginator.html
@@ -7,7 +7,7 @@
class="c-button c-button--as-link c-page-end"
type="button"
{% if page.has_previous %}
- onclick="window.location.href='{% url pagination_url_namespaces %}{% if query_str %}{{ query_str }}{% elif selected_filter %}?filter={{selected_filter}}&{% else %}?{% endif %}page={{page.previous_page_number}}';"
+ onclick="window.location.href='{% url pagination_url_namespaces %}?page={{page.previous_page_number}}{{ query_str }}';"
{% else %}
disabled
{% endif %}
@@ -20,7 +20,7 @@
@@ -33,7 +33,7 @@
class="c-button c-button--as-link c-page-end"
type="button"
{% if page.has_next %}
- onclick="window.location.href='{% url pagination_url_namespaces %}{% if query_str %}{{ query_str }}{% elif selected_filter %}?filter={{selected_filter}}&{% else %}?{% endif %}page={{page.next_page_number}}';"
+ onclick="window.location.href='{% url pagination_url_namespaces %}?page={{page.next_page_number}}{{ query_str }}';"
{% else %}
disabled
{% endif %}
diff --git a/apcd-cms/src/apps/extension/templates/extension_submission_form/extension_submission_form.html b/apcd-cms/src/apps/extension/templates/extension_submission_form/extension_submission_form.html
index 9fed5b86..fd2d46b8 100644
--- a/apcd-cms/src/apps/extension/templates/extension_submission_form/extension_submission_form.html
+++ b/apcd-cms/src/apps/extension/templates/extension_submission_form/extension_submission_form.html
@@ -70,11 +70,11 @@ Submission Dates