diff --git a/dashboard_viewer/dashboard_viewer/settings.py b/dashboard_viewer/dashboard_viewer/settings.py index f80c7bb3..9d8922a1 100644 --- a/dashboard_viewer/dashboard_viewer/settings.py +++ b/dashboard_viewer/dashboard_viewer/settings.py @@ -345,6 +345,23 @@ def locks_make_key(key, key_prefix, version): # noqa "Css for the img tag displaying the app logo", str, ), + "ALLOW_ONBOARDING_UPLOAD" :( + False, + "If Onboarding reports are allowed to be uploaded, which shows a button in the uploader page if true to allow these kind of files", + bool, + ), + "CAPTION_ONBOARDING" :( + "Drug Exposure Diagnostics results for selected ingredients. Executed with minCellCount = 5, sample = 1e+06, " + "earliestStartDate = 2010-01-01. # = Number of records. Type (n,%) = Frequency and percentage of available drug types." + "Route (n,%) = Frequency and percentage of available routes. Dose Form present n (%) = Frequency and percentage with dose form present." + "Fixed amount dose form n (%) = Frequency and percentage of missing denominator unit concept id. Amount distrib. [null or missing] = Distribution of amount (median q05-q95)," + "frequency and percentage of null or missing amount. Quantity distrib. [null or missing] = Distribution of quantity (median q05-q95), frequency and percentage of null or missing quantity." + "Exposure days distrib. [null or missing] = Distribution of exposure days (median q05-q95), frequency and percentage of null days_supply or missing exposure dates." + "Neg. Days n (%) = Frequency and percentage of negative exposure days.", + "Caption Text for the table in the Onboarding Report Page", + "markdown", + ), + } CONSTANCE_CONFIG_FIELDSETS = OrderedDict( @@ -356,9 +373,10 @@ def locks_make_key(key, key_prefix, version): # noqa "UPLOADER_EXECUTE_EXPORT_PACKAGE", "UPLOADER_UPLOAD", "UPLOADER_AUTO_UPDATE", + "CAPTION_ONBOARDING" ), ), - ("Uploader Settings", ("UPLOADER_ALLOW_EDIT_DRAFT_STATUS",)), + ("Uploader Settings", ("UPLOADER_ALLOW_EDIT_DRAFT_STATUS", "ALLOW_ONBOARDING_UPLOAD")), ( "Superset", ("SUPERSET_HOST", "DATABASE_DASHBOARD_IDENTIFIER", "DATABASE_FILTER_ID"), diff --git a/dashboard_viewer/uploader/forms.py b/dashboard_viewer/uploader/forms.py index 67daaee3..5cef36af 100644 --- a/dashboard_viewer/uploader/forms.py +++ b/dashboard_viewer/uploader/forms.py @@ -33,4 +33,10 @@ class Meta(SourceForm.Meta): class AchillesResultsForm(forms.Form): - results_file = forms.FileField() + if constance.config.ALLOW_ONBOARDING_UPLOAD: + results_file = forms.FileField(required=False, label='Catalogue Export File') + else: + results_file = forms.FileField() + +class OnboardingReportForm(forms.Form): + onboarding_results_file = forms.FileField(required=False, label='Onboarding Report file (Optional)') \ No newline at end of file diff --git a/dashboard_viewer/uploader/migrations/0014_onboardingreport.py b/dashboard_viewer/uploader/migrations/0014_onboardingreport.py new file mode 100644 index 00000000..685386ad --- /dev/null +++ b/dashboard_viewer/uploader/migrations/0014_onboardingreport.py @@ -0,0 +1,26 @@ +# Generated by Django 3.2.13 on 2024-03-27 12:05 + +from django.db import migrations, models +import django.db.models.deletion +import uploader.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('uploader', '0013_auto_20210721_1715'), + ] + + operations = [ + migrations.CreateModel( + name='OnBoardingReport', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('uploaded_file', models.FileField(null=True, upload_to=uploader.models.onboarding_folder)), + ('data_source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='uploader.datasource')), + ], + options={ + 'db_table': 'onboarding_report', + }, + ), + ] diff --git a/dashboard_viewer/uploader/migrations/0015_onboardingreport_upload_date.py b/dashboard_viewer/uploader/migrations/0015_onboardingreport_upload_date.py new file mode 100644 index 00000000..83021284 --- /dev/null +++ b/dashboard_viewer/uploader/migrations/0015_onboardingreport_upload_date.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.13 on 2024-03-28 12:35 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('uploader', '0014_onboardingreport'), + ] + + operations = [ + migrations.AddField( + model_name='onboardingreport', + name='upload_date', + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + ] diff --git a/dashboard_viewer/uploader/models.py b/dashboard_viewer/uploader/models.py index fc247d35..149ecc2c 100644 --- a/dashboard_viewer/uploader/models.py +++ b/dashboard_viewer/uploader/models.py @@ -175,6 +175,15 @@ def success_data_source_directory(instance, filename): return datetime.datetime.now().strftime(file_path) +def onboarding_folder(instance, filename): + file_path = os.path.join( + settings.ACHILLES_RESULTS_STORAGE_PATH, + instance.data_source.hash, + "onboarding", + "%Y%m%d%H%M%S%f" + "".join(pathlib.Path(filename).suffixes), + ) + return datetime.datetime.now().strftime(file_path) + class UploadHistory(models.Model): """ @@ -266,3 +275,16 @@ class Meta: p25_value = models.FloatField(null=True) p75_value = models.FloatField(null=True) p90_value = models.FloatField(null=True) + +class OnboardingReport(models.Model): + class Meta: + db_table = "onboarding_report" + + data_source = models.ForeignKey(DataSource, on_delete=models.CASCADE) + upload_date = models.DateTimeField(auto_now_add=True) + uploaded_file = models.FileField( + null=True, upload_to=onboarding_folder + ) + + def get_status(self): + return "Done" \ No newline at end of file diff --git a/dashboard_viewer/uploader/static/js/uploader.js b/dashboard_viewer/uploader/static/js/uploader.js index cb0f8df5..bd8340c7 100644 --- a/dashboard_viewer/uploader/static/js/uploader.js +++ b/dashboard_viewer/uploader/static/js/uploader.js @@ -26,8 +26,10 @@ document.addEventListener("DOMContentLoaded", () => { const tbody = tbodys[0]; for (const tr of tbody.children) { - const status_td = tr.children[5]; - + const numberOfColumns = tr.children.length; + const status_td = tr.children[numberOfColumns-1]; + + if (status_td.dataset.failed === "yes") { add_failure_message_popup(status_td, status_td.dataset.failureMsg); } @@ -37,10 +39,10 @@ document.addEventListener("DOMContentLoaded", () => { .then(r => r.json()) .then(r => { if (r.status === "Done") { - tr.children[1].innerText = r.data.r_package_version; - tr.children[2].innerText = r.data.generation_date; - tr.children[3].innerText = r.data.cdm_version; - tr.children[4].innerText = r.data.vocabulary_version; + tr.children[numberOfColumns - 5].innerText = r.data.r_package_version; + tr.children[numberOfColumns - 4].innerText = r.data.generation_date; + tr.children[numberOfColumns - 3].innerText = r.data.cdm_version; + tr.children[numberOfColumns - 2].innerText = r.data.vocabulary_version; update_upload_status(status_td, "Done", "fas fa-check", "status-done"); diff --git a/dashboard_viewer/uploader/templates/onboarding_report.html b/dashboard_viewer/uploader/templates/onboarding_report.html new file mode 100644 index 00000000..da3912a8 --- /dev/null +++ b/dashboard_viewer/uploader/templates/onboarding_report.html @@ -0,0 +1,80 @@ +{% extends 'base.html' %} +{% load static %} +{% load bootstrap4 %} +{% load markdownify %} + +{% block head_tail %} + {{ form.media.css }} + + + +{% endblock %} + + +{% block content %} +
Database type: {{ obj_data_source.database_type }}
+Country: {{ obj_data_source.country }}
+Release date: {{ obj_data_source.release_date }}
+{{ header }} | + {% endfor %} +
---|
{{ el }} | + {% endfor %} +
Onboarding report is not available.
+ {% endif %} +Type | + {% endif %}Upload Date | R Package Version | Generation Date | @@ -52,8 +55,11 @@
---|---|---|---|
{{ type }} | + {% endif %}{{ up_hi.upload_date }} | {% if up_hi.r_package_version %}{{ up_hi.r_package_version }}{% else %}--{% endif %} | {% if up_hi.generation_date %}{{ up_hi.generation_date }}{% else %}--{% endif %} | diff --git a/dashboard_viewer/uploader/templates/uploader_base.html b/dashboard_viewer/uploader/templates/uploader_base.html index 59f4e252..8efe3ffd 100644 --- a/dashboard_viewer/uploader/templates/uploader_base.html +++ b/dashboard_viewer/uploader/templates/uploader_base.html @@ -36,7 +36,18 @@ {% block title %}{% endblock %}