From 6a35e448db67a95e36709059c8c1f53af2711eb4 Mon Sep 17 00:00:00 2001 From: Carlos Vega <carlos.vega@uni.lu> Date: Thu, 23 Apr 2020 17:23:16 +0200 Subject: [PATCH] move setting to configuration item --- smash/smash/settings.py | 2 -- smash/web/api_views/subject.py | 9 ++++-- smash/web/api_views/visit.py | 13 +++++--- smash/web/forms/study_subject_forms.py | 9 ++++-- .../web/migrations/0166_auto_20200423_1457.py | 32 +++++++++++++++++++ smash/web/models/constants.py | 2 ++ smash/web/templatetags/filters.py | 8 +++-- 7 files changed, 61 insertions(+), 14 deletions(-) create mode 100644 smash/web/migrations/0166_auto_20200423_1457.py diff --git a/smash/smash/settings.py b/smash/smash/settings.py index 76e42543..a327ecd6 100644 --- a/smash/smash/settings.py +++ b/smash/smash/settings.py @@ -20,8 +20,6 @@ PROJECT_PATH = os.path.abspath(os.path.dirname(__file__)) DEBUG = True -SHOW_VISITS_FROM_ZERO = True - # Application definition INSTALLED_APPS = [ diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py index f4f1a6e5..74f7cd76 100644 --- a/smash/web/api_views/subject.py +++ b/smash/web/api_views/subject.py @@ -4,12 +4,13 @@ from django.db.models import Count, Case, When, Min, Max from django.db.models import Q from django.http import JsonResponse from django.urls import reverse -from django.conf import settings +from web.models import ConfigurationItem +from distutils.util import strtobool from web.api_views.serialization_utils import bool_to_yes_no, flying_team_to_str, location_to_str, add_column, \ serialize_date, serialize_datetime, get_filters_for_data_table_request, virus_test_to_str from web.models import StudySubject, Visit, Appointment, Subject, SubjectColumns, StudyColumns, Study, ContactAttempt -from web.models.constants import SUBJECT_TYPE_CHOICES, GLOBAL_STUDY_ID +from web.models.constants import SUBJECT_TYPE_CHOICES, GLOBAL_STUDY_ID, VISIT_SHOW_VISIT_NUMBER_FROM_ZERO from web.models.study_subject_list import SUBJECT_LIST_GENERIC, SUBJECT_LIST_NO_VISIT, SUBJECT_LIST_REQUIRE_CONTACT, \ StudySubjectList, SUBJECT_LIST_VOUCHER_EXPIRY from web.views import e500_error @@ -79,7 +80,9 @@ def get_subject_columns(request, subject_list_type): add_column(result, "Excluded", "excluded", study_subject_columns, "yes_no_filter", study.columns) add_column(result, "Info sent", "information_sent", study_subject_columns, "yes_no_filter", study.columns) - if getattr(settings, "SHOW_VISITS_FROM_ZERO", False): + visit_from_zero = ConfigurationItem.objects.get(type=VISIT_SHOW_VISIT_NUMBER_FROM_ZERO).value + #True values are y, yes, t, true, on and 1; false values are n, no, f, false, off and 0. + if strtobool(visit_from_zero): virus_visit_numbers = range(0, 5) visit_numbers = range(0, study.visits_to_show_in_subject_list + 0) else: diff --git a/smash/web/api_views/visit.py b/smash/web/api_views/visit.py index 596421c7..14c7021f 100644 --- a/smash/web/api_views/visit.py +++ b/smash/web/api_views/visit.py @@ -2,7 +2,8 @@ import logging from django.db.models import Q from django.http import JsonResponse -from django.conf import settings +from web.models import ConfigurationItem +from distutils.util import strtobool from web.api_views.serialization_utils import bool_to_yes_no, flying_team_to_str, location_to_str, add_column, \ serialize_date, get_filters_for_data_table_request @@ -10,7 +11,7 @@ from web.models import AppointmentType, Appointment from web.models import SubjectColumns from web.templatetags.filters import display_visit_number from web.models import Visit, Study, VisitColumns, StudyVisitList, StudyColumns -from web.models.constants import GLOBAL_STUDY_ID +from web.models.constants import GLOBAL_STUDY_ID, VISIT_SHOW_VISIT_NUMBER_FROM_ZERO from web.models.study_visit_list import VISIT_LIST_GENERIC, VISIT_LIST_EXCEEDED_TIME, VISIT_LIST_UNFINISHED, \ VISIT_LIST_MISSING_APPOINTMENTS, VISIT_LIST_APPROACHING_WITHOUT_APPOINTMENTS, \ VISIT_LIST_APPROACHING_FOR_MAIL_CONTACT @@ -47,7 +48,9 @@ def get_visit_columns(request, visit_list_type): add_column(result, "Finished", "is_finished", visit_columns, "yes_no_filter") add_column(result, "Post mail sent", "post_mail_sent", visit_columns, "yes_no_filter") - if getattr(settings, "SHOW_VISITS_FROM_ZERO", False): + visit_from_zero = ConfigurationItem.objects.get(type=VISIT_SHOW_VISIT_NUMBER_FROM_ZERO).value + #True values are y, yes, t, true, on and 1; false values are n, no, f, false, off and 0. + if strtobool(visit_from_zero): add_column(result, "Visit number", "display_visit_number", None, "from_zero_integer_filter") else: add_column(result, "Visit number", "visit_number", visit_columns, "integer_filter") @@ -257,7 +260,9 @@ def serialize_visit(visit): "visible_appointment_types": appointment_types_to_str(appointment_types), } - if getattr(settings, "SHOW_VISITS_FROM_ZERO", False): + visit_from_zero = ConfigurationItem.objects.get(type=VISIT_SHOW_VISIT_NUMBER_FROM_ZERO).value + #True values are y, yes, t, true, on and 1; false values are n, no, f, false, off and 0. + if strtobool(visit_from_zero): result["display_visit_number"] = display_visit_number(visit.visit_number) return result diff --git a/smash/web/forms/study_subject_forms.py b/smash/web/forms/study_subject_forms.py index d2d8bb50..d051d129 100644 --- a/smash/web/forms/study_subject_forms.py +++ b/smash/web/forms/study_subject_forms.py @@ -3,11 +3,12 @@ import re from django import forms from django.forms import ModelForm -from django.conf import settings +from web.models import ConfigurationItem +from distutils.util import strtobool from web.forms.forms import DATETIMEPICKER_DATE_ATTRS, get_worker_from_args from web.models import StudySubject, Study, StudyColumns, VoucherType, Worker -from web.models.constants import SCREENING_NUMBER_PREFIXES_FOR_TYPE +from web.models.constants import SCREENING_NUMBER_PREFIXES_FOR_TYPE, VISIT_SHOW_VISIT_NUMBER_FROM_ZERO from web.models.worker_study_role import WORKER_HEALTH_PARTNER from web.widgets.secure_file_widget import SecuredFileWidget @@ -24,7 +25,9 @@ class StudySubjectForm(ModelForm): self.fields['health_partner'].queryset = Worker.get_workers_by_worker_type( WORKER_HEALTH_PARTNER) - if getattr(settings, "SHOW_VISITS_FROM_ZERO", False): + visit_from_zero = ConfigurationItem.objects.get(type=VISIT_SHOW_VISIT_NUMBER_FROM_ZERO).value + #True values are y, yes, t, true, on and 1; false values are n, no, f, false, off and 0. + if strtobool(visit_from_zero): virus_visit_numbers = range(0, 5) for one_based_idx, virus_visit_number in enumerate(virus_visit_numbers, 1): field = 'virus_test_{}'.format(one_based_idx) diff --git a/smash/web/migrations/0166_auto_20200423_1457.py b/smash/web/migrations/0166_auto_20200423_1457.py new file mode 100644 index 00000000..093f4bb6 --- /dev/null +++ b/smash/web/migrations/0166_auto_20200423_1457.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2020-04-23 14:57 +from __future__ import unicode_literals + +from web.models.constants import VISIT_SHOW_VISIT_NUMBER_FROM_ZERO +from django.db import migrations + + +def create_item(apps, type, value, name): + # We can't import the ConfigurationItem model directly as it may be a newer + # version than this migration expects. We use the historical version. + ConfigurationItem = apps.get_model("web", "ConfigurationItem") + item = ConfigurationItem.objects.create() + item.type = type + item.value = value + item.name = name + item.save() + +def configuration_items(apps, schema_editor): + create_item(apps, VISIT_SHOW_VISIT_NUMBER_FROM_ZERO, False, + "Should visit numbers be shown starting in 0") + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0165_configurationitem_email_virus'), + ] + + operations = [ + migrations.RunPython(configuration_items), + ] \ No newline at end of file diff --git a/smash/web/models/constants.py b/smash/web/models/constants.py index 361c158e..51e7a70b 100644 --- a/smash/web/models/constants.py +++ b/smash/web/models/constants.py @@ -43,6 +43,8 @@ CONTACT_TYPES_CHOICES = ( (CONTACT_TYPES_SMS, 'SMS'), ) +VISIT_SHOW_VISIT_NUMBER_FROM_ZERO = "VISIT_SHOW_VISIT_NUMBER_FROM_ZERO" + CANCELLED_APPOINTMENT_COLOR_CONFIGURATION_TYPE = "CANCELLED_APPOINTMENT_COLOR" NO_SHOW_APPOINTMENT_COLOR_CONFIGURATION_TYPE = "NO_SHOW_APPOINTMENT_COLOR" diff --git a/smash/web/templatetags/filters.py b/smash/web/templatetags/filters.py index a6ba8812..218e34bc 100644 --- a/smash/web/templatetags/filters.py +++ b/smash/web/templatetags/filters.py @@ -1,9 +1,11 @@ # See: http://stackoverflow.com/a/18962481 from django import template -from django.conf import settings from django.forms import CheckboxSelectMultiple, CheckboxInput from django.utils.safestring import mark_safe import datetime +from web.models import ConfigurationItem +from web.models.constants import VISIT_SHOW_VISIT_NUMBER_FROM_ZERO +from distutils.util import strtobool register = template.Library() @@ -51,7 +53,9 @@ def timestamp(value): @register.filter(name='display_visit_number') def display_visit_number(visit_number): - if getattr(settings, "SHOW_VISITS_FROM_ZERO", False): + visit_from_zero = ConfigurationItem.objects.get(type=VISIT_SHOW_VISIT_NUMBER_FROM_ZERO).value + #True values are y, yes, t, true, on and 1; false values are n, no, f, false, off and 0. + if strtobool(visit_from_zero): return (visit_number - 1) else: return visit_number \ No newline at end of file -- GitLab