Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/assets/js/indicatorHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,6 @@ class IndicatorHandler {
data: JSON.stringify(submitData),
}).done((data) => {
const payload = this.prepareDataLayerPayload("epivis");
console.log(payload);
dataLayerPush(payload);
window.open(data["epivis_url"], '_blank').focus();
});
Expand Down
26 changes: 26 additions & 0 deletions src/assets/js/selectedIndicatorsModal.js
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,23 @@ async function checkGeoCoverage(geoValue) {
}
}

async function checkFluviewGeoCoverage(geoValue) {
try {
const result = await $.ajax({
url: "check_fluview_geo_coverage/",
type: "GET",
data: {
geo: geoValue,
indicators: JSON.stringify(checkedIndicatorMembers.filter((indicator) => indicator["_endpoint"] === "fluview" || indicator["_endpoint"] === "fluview_clinical")),
}
});
return result["not_covered_indicators"];
} catch (error) {
console.error("Error fetching fluview geo coverage:", error);
return [];
}
}

async function getAvailableGeos(indicators) {
const csrftoken = Cookies.get("csrftoken");
const submitData = { indicators: indicators };
Expand Down Expand Up @@ -224,6 +241,15 @@ $("#geographic_value").on("select2:select", function (e) {
});
});

$("#otherEndpointLocations").on("select2:select", "#fluviewLocations", function (e) {
var geo = e.params.data;
checkFluviewGeoCoverage(geo.id).then((notCoveredIndicators) => {
if (notCoveredIndicators.length > 0) {
showNotCoveredGeoWarningMessage(notCoveredIndicators, geo);
}
});
});

function showFluviewLocationSelect() {
if (indicatorHandler.getFluviewIndicators().length > 0) {
if (document.getElementsByName("fluviewLocations").length === 0) {
Expand Down
2 changes: 1 addition & 1 deletion src/epiportal/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from sentry_sdk.integrations.django import DjangoIntegration
from sentry_sdk.integrations.redis import RedisIntegration

APP_VERSION = "1.0.21"
APP_VERSION = "1.0.22"
ALTERNATIVE_INTERFACE_VERSION = "1.0.9"


Expand Down
19 changes: 16 additions & 3 deletions src/indicatorsets/urls.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
from django.urls import path
from django.urls.resolvers import URLPattern
from indicatorsets.views import (IndicatorSetListView, epivis,
generate_export_data_url, preview_data, create_query_code, get_available_geos, get_related_indicators_json)

from indicatorsets.views import (IndicatorSetListView,
check_fluview_geo_coverage, create_query_code,
epivis, generate_export_data_url,
get_available_geos,
get_related_indicators_json, preview_data)

urlpatterns: list[URLPattern] = [
path("", IndicatorSetListView.as_view(), name="indicatorsets"),
Expand All @@ -10,5 +14,14 @@
path("preview_data/", preview_data, name="preview_data"),
path("create_query_code/", create_query_code, name="create_query_code"),
path("get_available_geos/", get_available_geos, name="get_available_geos"),
path("get_related_indicators/", get_related_indicators_json, name="get_related_indicators"),
path(
"get_related_indicators/",
get_related_indicators_json,
name="get_related_indicators",
),
path(
"check_fluview_geo_coverage/",
check_fluview_geo_coverage,
name="check_fluview_geo_coverage",
),
]
112 changes: 80 additions & 32 deletions src/indicatorsets/views.py
Original file line number Diff line number Diff line change
@@ -1,49 +1,50 @@
import sys
import base64
import json
import requests
import sys
from datetime import datetime
from textwrap import dedent


import requests
from delphi_utils import get_structured_logger
from django.conf import settings
from django.db.models import Case, IntegerField, Value, When
from django.http import JsonResponse
from django.views.generic import ListView
from django.db.models import Case, When, Value, IntegerField
from epiweeks import Week

from alternative_interface.utils import get_fluview_data
from base.models import Geography, GeographyUnit
from indicatorsets.filters import IndicatorSetFilter
from indicatorsets.forms import IndicatorSetFilterForm
from indicatorsets.models import IndicatorSet, FilterDescription, ColumnDescription
from indicatorsets.models import ColumnDescription, FilterDescription, IndicatorSet
from indicatorsets.utils import (
group_by_property,
generate_covidcast_dataset_epivis,
generate_fluview_dataset_epivis,
generate_nidss_flu_dataset_epivis,
generate_nidss_dengue_dataset_epivis,
generate_flusurv_dataset_epivis,
generate_covidcast_indicators_export_url,
generate_flusurv_dataset_epivis,
generate_flusurv_export_url,
generate_fluview_dataset_epivis,
generate_fluview_indicators_export_url,
generate_nidss_flu_export_url,
generate_nidss_dengue_dataset_epivis,
generate_nidss_dengue_export_url,
generate_flusurv_export_url,
preview_covidcast_data,
preview_fluview_data,
preview_nidss_flu_data,
preview_nidss_dengue_data,
preview_flusurv_data,
generate_nidss_flu_dataset_epivis,
generate_nidss_flu_export_url,
generate_query_code_covidcast,
generate_query_code_flusurv,
generate_query_code_fluview,
generate_query_code_nidss_flu,
generate_query_code_nidss_dengue,
generate_query_code_flusurv,
log_form_data,
log_form_stats,
generate_query_code_nidss_flu,
get_grouped_original_data_provider_choices,
get_num_locations_from_meta,
group_by_property,
log_form_data,
log_form_stats,
preview_covidcast_data,
preview_flusurv_data,
preview_fluview_data,
preview_nidss_dengue_data,
preview_nidss_flu_data,
)

from delphi_utils import get_structured_logger

indicatorsets_logger = get_structured_logger("indicatorsets_logger")


Expand All @@ -59,13 +60,9 @@ def get_related_indicators(queryset, indicator_set_ids: list):
"display_name": (
indicator.get_display_name if indicator.get_display_name else ""
),
"member_name": (
indicator.member_name if indicator.member_name else ""
),
"member_name": (indicator.member_name if indicator.member_name else ""),
"member_short_name": (
indicator.member_short_name
if indicator.member_short_name
else ""
indicator.member_short_name if indicator.member_short_name else ""
),
"name": indicator.name if indicator.name else "",
"indicator_set": (
Expand All @@ -86,9 +83,7 @@ def get_related_indicators(queryset, indicator_set_ids: list):
),
"source": indicator.source.name if indicator.source else "",
"time_type": indicator.time_type if indicator.time_type else "",
"description": (
indicator.description if indicator.description else ""
),
"description": (indicator.description if indicator.description else ""),
"member_description": (
indicator.member_description
if indicator.member_description
Expand Down Expand Up @@ -559,3 +554,56 @@ def get_related_indicators_json(request):
"num_of_timeseries": num_of_timeseries,
}
)


def check_fluview_geo_coverage(request):
null_data_indicators = []
if request.method == "GET":
geo_value = request.GET.get("geo")
indicators = request.GET.get("indicators")
start_date = 199740
end_date = Week.fromdate(datetime.today())
end_date = f"{end_date.year}{end_date.week if end_date.week >= 10 else '0' + str(end_date.week)}"
indicators = json.loads(indicators)

fluview_indicators = {}
fluview_clinical_indicators = {}
for indicator in indicators:
if indicator["data_source"] == "fluview":
fluview_indicators[indicator["indicator"]] = 0
elif indicator["data_source"] == "fluview_clinical":
fluview_clinical_indicators[indicator["indicator"]] = 0

params = {
"regions": geo_value,
"epiweeks": f"{start_date}-{end_date}",
"api_key": settings.EPIDATA_API_KEY,
}

if fluview_indicators:
response = requests.get(f"{settings.EPIDATA_URL}fluview", params=params)
if response.status_code == 200:
data = response.json()
if len(data["epidata"]):
for el in data["epidata"]:
for indicator in fluview_indicators.keys():
fluview_indicators[indicator] += el[indicator] if el[indicator] else 0
if fluview_clinical_indicators:
response = requests.get(
f"{settings.EPIDATA_URL}fluview_clinical", params=params
)
if response.status_code == 200:
data = response.json()
if len(data["epidata"]):
for el in data["epidata"]:
for indicator in fluview_clinical_indicators.keys():
fluview_clinical_indicators[indicator] += el[indicator]

for indicator in fluview_indicators.keys():
if fluview_indicators[indicator] == 0:
null_data_indicators.append(indicator)
for indicator in fluview_clinical_indicators.keys():
if fluview_clinical_indicators[indicator] == 0:
null_data_indicators.append(indicator)
not_covered_indicators = [indicator for indicator in indicators if indicator["indicator"] in null_data_indicators]
return JsonResponse({"not_covered_indicators": not_covered_indicators})
Loading