Skip to content

Commit ab00e0d

Browse files
author
Dmytro Trotsko
committed
Added warning message if fluview/fluview_clinical indicator(s) is/are not available for selected geo
1 parent 5297545 commit ab00e0d

File tree

5 files changed

+123
-37
lines changed

5 files changed

+123
-37
lines changed

src/assets/js/indicatorHandler.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,6 @@ class IndicatorHandler {
455455
data: JSON.stringify(submitData),
456456
}).done((data) => {
457457
const payload = this.prepareDataLayerPayload("epivis");
458-
console.log(payload);
459458
dataLayerPush(payload);
460459
window.open(data["epivis_url"], '_blank').focus();
461460
});

src/assets/js/selectedIndicatorsModal.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,23 @@ async function checkGeoCoverage(geoValue) {
195195
}
196196
}
197197

198+
async function checkFluviewGeoCoverage(geoValue) {
199+
try {
200+
const result = await $.ajax({
201+
url: "check_fluview_geo_coverage/",
202+
type: "GET",
203+
data: {
204+
geo: geoValue,
205+
indicators: JSON.stringify(checkedIndicatorMembers.filter((indicator) => indicator["_endpoint"] === "fluview" || indicator["_endpoint"] === "fluview_clinical")),
206+
}
207+
});
208+
return result["not_covered_indicators"];
209+
} catch (error) {
210+
console.error("Error fetching fluview geo coverage:", error);
211+
return [];
212+
}
213+
}
214+
198215
async function getAvailableGeos(indicators) {
199216
const csrftoken = Cookies.get("csrftoken");
200217
const submitData = { indicators: indicators };
@@ -224,6 +241,15 @@ $("#geographic_value").on("select2:select", function (e) {
224241
});
225242
});
226243

244+
$("#otherEndpointLocations").on("select2:select", "#fluviewLocations", function (e) {
245+
var geo = e.params.data;
246+
checkFluviewGeoCoverage(geo.id).then((notCoveredIndicators) => {
247+
if (notCoveredIndicators.length > 0) {
248+
showNotCoveredGeoWarningMessage(notCoveredIndicators, geo);
249+
}
250+
});
251+
});
252+
227253
function showFluviewLocationSelect() {
228254
if (indicatorHandler.getFluviewIndicators().length > 0) {
229255
if (document.getElementsByName("fluviewLocations").length === 0) {

src/epiportal/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from sentry_sdk.integrations.django import DjangoIntegration
2525
from sentry_sdk.integrations.redis import RedisIntegration
2626

27-
APP_VERSION = "1.0.21"
27+
APP_VERSION = "1.0.22"
2828
ALTERNATIVE_INTERFACE_VERSION = "1.0.9"
2929

3030

src/indicatorsets/urls.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
from django.urls import path
22
from django.urls.resolvers import URLPattern
3-
from indicatorsets.views import (IndicatorSetListView, epivis,
4-
generate_export_data_url, preview_data, create_query_code, get_available_geos, get_related_indicators_json)
3+
4+
from indicatorsets.views import (IndicatorSetListView,
5+
check_fluview_geo_coverage, create_query_code,
6+
epivis, generate_export_data_url,
7+
get_available_geos,
8+
get_related_indicators_json, preview_data)
59

610
urlpatterns: list[URLPattern] = [
711
path("", IndicatorSetListView.as_view(), name="indicatorsets"),
@@ -10,5 +14,14 @@
1014
path("preview_data/", preview_data, name="preview_data"),
1115
path("create_query_code/", create_query_code, name="create_query_code"),
1216
path("get_available_geos/", get_available_geos, name="get_available_geos"),
13-
path("get_related_indicators/", get_related_indicators_json, name="get_related_indicators"),
17+
path(
18+
"get_related_indicators/",
19+
get_related_indicators_json,
20+
name="get_related_indicators",
21+
),
22+
path(
23+
"check_fluview_geo_coverage/",
24+
check_fluview_geo_coverage,
25+
name="check_fluview_geo_coverage",
26+
),
1427
]

src/indicatorsets/views.py

Lines changed: 80 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,50 @@
1-
import sys
21
import base64
32
import json
4-
import requests
3+
import sys
4+
from datetime import datetime
55
from textwrap import dedent
66

7-
7+
import requests
8+
from delphi_utils import get_structured_logger
89
from django.conf import settings
10+
from django.db.models import Case, IntegerField, Value, When
911
from django.http import JsonResponse
1012
from django.views.generic import ListView
11-
from django.db.models import Case, When, Value, IntegerField
13+
from epiweeks import Week
1214

15+
from alternative_interface.utils import get_fluview_data
1316
from base.models import Geography, GeographyUnit
1417
from indicatorsets.filters import IndicatorSetFilter
1518
from indicatorsets.forms import IndicatorSetFilterForm
16-
from indicatorsets.models import IndicatorSet, FilterDescription, ColumnDescription
19+
from indicatorsets.models import ColumnDescription, FilterDescription, IndicatorSet
1720
from indicatorsets.utils import (
18-
group_by_property,
1921
generate_covidcast_dataset_epivis,
20-
generate_fluview_dataset_epivis,
21-
generate_nidss_flu_dataset_epivis,
22-
generate_nidss_dengue_dataset_epivis,
23-
generate_flusurv_dataset_epivis,
2422
generate_covidcast_indicators_export_url,
23+
generate_flusurv_dataset_epivis,
24+
generate_flusurv_export_url,
25+
generate_fluview_dataset_epivis,
2526
generate_fluview_indicators_export_url,
26-
generate_nidss_flu_export_url,
27+
generate_nidss_dengue_dataset_epivis,
2728
generate_nidss_dengue_export_url,
28-
generate_flusurv_export_url,
29-
preview_covidcast_data,
30-
preview_fluview_data,
31-
preview_nidss_flu_data,
32-
preview_nidss_dengue_data,
33-
preview_flusurv_data,
29+
generate_nidss_flu_dataset_epivis,
30+
generate_nidss_flu_export_url,
3431
generate_query_code_covidcast,
32+
generate_query_code_flusurv,
3533
generate_query_code_fluview,
36-
generate_query_code_nidss_flu,
3734
generate_query_code_nidss_dengue,
38-
generate_query_code_flusurv,
39-
log_form_data,
40-
log_form_stats,
35+
generate_query_code_nidss_flu,
4136
get_grouped_original_data_provider_choices,
4237
get_num_locations_from_meta,
38+
group_by_property,
39+
log_form_data,
40+
log_form_stats,
41+
preview_covidcast_data,
42+
preview_flusurv_data,
43+
preview_fluview_data,
44+
preview_nidss_dengue_data,
45+
preview_nidss_flu_data,
4346
)
4447

45-
from delphi_utils import get_structured_logger
46-
4748
indicatorsets_logger = get_structured_logger("indicatorsets_logger")
4849

4950

@@ -59,13 +60,9 @@ def get_related_indicators(queryset, indicator_set_ids: list):
5960
"display_name": (
6061
indicator.get_display_name if indicator.get_display_name else ""
6162
),
62-
"member_name": (
63-
indicator.member_name if indicator.member_name else ""
64-
),
63+
"member_name": (indicator.member_name if indicator.member_name else ""),
6564
"member_short_name": (
66-
indicator.member_short_name
67-
if indicator.member_short_name
68-
else ""
65+
indicator.member_short_name if indicator.member_short_name else ""
6966
),
7067
"name": indicator.name if indicator.name else "",
7168
"indicator_set": (
@@ -86,9 +83,7 @@ def get_related_indicators(queryset, indicator_set_ids: list):
8683
),
8784
"source": indicator.source.name if indicator.source else "",
8885
"time_type": indicator.time_type if indicator.time_type else "",
89-
"description": (
90-
indicator.description if indicator.description else ""
91-
),
86+
"description": (indicator.description if indicator.description else ""),
9287
"member_description": (
9388
indicator.member_description
9489
if indicator.member_description
@@ -559,3 +554,56 @@ def get_related_indicators_json(request):
559554
"num_of_timeseries": num_of_timeseries,
560555
}
561556
)
557+
558+
559+
def check_fluview_geo_coverage(request):
560+
null_data_indicators = []
561+
if request.method == "GET":
562+
geo_value = request.GET.get("geo")
563+
indicators = request.GET.get("indicators")
564+
start_date = 199740
565+
end_date = Week.fromdate(datetime.today())
566+
end_date = f"{end_date.year}{end_date.week if end_date.week >= 10 else '0' + str(end_date.week)}"
567+
indicators = json.loads(indicators)
568+
569+
fluview_indicators = {}
570+
fluview_clinical_indicators = {}
571+
for indicator in indicators:
572+
if indicator["data_source"] == "fluview":
573+
fluview_indicators[indicator["indicator"]] = 0
574+
elif indicator["data_source"] == "fluview_clinical":
575+
fluview_clinical_indicators[indicator["indicator"]] = 0
576+
577+
params = {
578+
"regions": geo_value,
579+
"epiweeks": f"{start_date}-{end_date}",
580+
"api_key": settings.EPIDATA_API_KEY,
581+
}
582+
583+
if fluview_indicators:
584+
response = requests.get(f"{settings.EPIDATA_URL}fluview", params=params)
585+
if response.status_code == 200:
586+
data = response.json()
587+
if len(data["epidata"]):
588+
for el in data["epidata"]:
589+
for indicator in fluview_indicators.keys():
590+
fluview_indicators[indicator] += el[indicator] if el[indicator] else 0
591+
if fluview_clinical_indicators:
592+
response = requests.get(
593+
f"{settings.EPIDATA_URL}fluview_clinical", params=params
594+
)
595+
if response.status_code == 200:
596+
data = response.json()
597+
if len(data["epidata"]):
598+
for el in data["epidata"]:
599+
for indicator in fluview_clinical_indicators.keys():
600+
fluview_clinical_indicators[indicator] += el[indicator]
601+
602+
for indicator in fluview_indicators.keys():
603+
if fluview_indicators[indicator] == 0:
604+
null_data_indicators.append(indicator)
605+
for indicator in fluview_clinical_indicators.keys():
606+
if fluview_clinical_indicators[indicator] == 0:
607+
null_data_indicators.append(indicator)
608+
not_covered_indicators = [indicator for indicator in indicators if indicator["indicator"] in null_data_indicators]
609+
return JsonResponse({"not_covered_indicators": not_covered_indicators})

0 commit comments

Comments
 (0)