From fbb9c70ffad29d4c9b142910c6b14cda5f7ebf84 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 4 Dec 2017 13:49:30 +0100 Subject: [PATCH] configuration structure for visible notification types --- .../web/migrations/0079_auto_20171204_1235.py | 56 ++++++++++++++++++ smash/web/models/__init__.py | 3 +- smash/web/models/notification_columns.py | 57 +++++++++++++++++++ smash/web/models/study.py | 6 +- smash/web/tests/functions.py | 10 +++- smash/web/views/notifications.py | 6 +- 6 files changed, 130 insertions(+), 8 deletions(-) create mode 100644 smash/web/migrations/0079_auto_20171204_1235.py create mode 100644 smash/web/models/notification_columns.py diff --git a/smash/web/migrations/0079_auto_20171204_1235.py b/smash/web/migrations/0079_auto_20171204_1235.py new file mode 100644 index 00000000..b81fd3f6 --- /dev/null +++ b/smash/web/migrations/0079_auto_20171204_1235.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-12-04 12:35 +from __future__ import unicode_literals + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('web', '0078_auto_20171204_1040'), + ] + + operations = [ + migrations.CreateModel( + name='StudyNotificationParameters', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('exceeded_visits_visible', models.BooleanField(default=True, verbose_name=b'exceeded visit time')), + ('missing_redcap_subject_visible', + models.BooleanField(default=True, verbose_name=b'missing RED Cap subject')), + ('inconsistent_redcap_subject_visible', + models.BooleanField(default=True, verbose_name=b'inconsistent RED Cap subject')), + ('subject_require_contact_visible', + models.BooleanField(default=True, verbose_name=b'subject required contact')), + ('subject_no_visits_visible', models.BooleanField(default=True, verbose_name=b'subject without visit')), + ('unfinished_visits_visible', models.BooleanField(default=True, verbose_name=b'unfinished visits')), + ('visits_with_missing_appointments_visible', + models.BooleanField(default=True, verbose_name=b'visits with missing appointments')), + ('approaching_visits_without_appointments_visible', + models.BooleanField(default=True, verbose_name=b'approaching visits')), + ('approaching_visits_for_mail_contact_visible', + models.BooleanField(default=True, verbose_name=b'post mail for approaching visits')), + ('unfinished_appointments_visible', + models.BooleanField(default=True, verbose_name=b'unfinished appointments')), + ], + ), + migrations.RunSQL('insert into web_studynotificationparameters (exceeded_visits_visible,' + + 'missing_redcap_subject_visible,' + + 'inconsistent_redcap_subject_visible,' + + 'subject_require_contact_visible,' + + 'subject_no_visits_visible,' + + 'unfinished_visits_visible,' + + 'visits_with_missing_appointments_visible,' + + 'approaching_visits_without_appointments_visible,' + + 'approaching_visits_for_mail_contact_visible,' + + 'unfinished_appointments_visible' + + ') values(true, true, true, true, true, true, true, true, true, true)'), + migrations.AddField( + model_name='study', + name='notification_parameters', + field=models.OneToOneField(default=1, on_delete=django.db.models.deletion.CASCADE, + to='web.StudyNotificationParameters'), + preserve_default=False, + ), + ] diff --git a/smash/web/models/__init__.py b/smash/web/models/__init__.py index 5226d98e..7d37f387 100644 --- a/smash/web/models/__init__.py +++ b/smash/web/models/__init__.py @@ -10,6 +10,7 @@ from appointment_type_link import AppointmentTypeLink from country import Country from subject_columns import SubjectColumns from study_columns import StudyColumns +from notification_columns import StudyNotificationParameters from study import Study from room import Room from visit import Visit @@ -29,6 +30,6 @@ from missing_subject import MissingSubject from inconsistent_subject import InconsistentSubject, InconsistentField __all__ = [Study, FlyingTeam, Appointment, AppointmentType, Availability, Holiday, Item, Language, Location, Room, - Subject, StudySubject, StudySubjectList, SubjectColumns, + Subject, StudySubject, StudySubjectList, SubjectColumns, StudyNotificationParameters, Visit, Worker, ContactAttempt, ConfigurationItem, MailTemplate, AppointmentTypeLink, MissingSubject, InconsistentSubject, InconsistentField, Country, StudyColumns] diff --git a/smash/web/models/notification_columns.py b/smash/web/models/notification_columns.py new file mode 100644 index 00000000..aa114173 --- /dev/null +++ b/smash/web/models/notification_columns.py @@ -0,0 +1,57 @@ +# coding=utf-8 +from django.db import models + + +class StudyNotificationParameters(models.Model): + class Meta: + app_label = 'web' + + exceeded_visits_visible = models.BooleanField( + default=True, + verbose_name='exceeded visit time', + ) + + missing_redcap_subject_visible = models.BooleanField( + default=True, + verbose_name='missing RED Cap subject', + ) + + inconsistent_redcap_subject_visible = models.BooleanField( + default=True, + verbose_name='inconsistent RED Cap subject', + ) + + subject_require_contact_visible = models.BooleanField( + default=True, + verbose_name='subject required contact', + ) + + subject_no_visits_visible = models.BooleanField( + default=True, + verbose_name='subject without visit', + ) + + unfinished_visits_visible = models.BooleanField( + default=True, + verbose_name='unfinished visits', + ) + + visits_with_missing_appointments_visible = models.BooleanField( + default=True, + verbose_name='visits with missing appointments', + ) + + approaching_visits_without_appointments_visible = models.BooleanField( + default=True, + verbose_name='approaching visits', + ) + + approaching_visits_for_mail_contact_visible = models.BooleanField( + default=True, + verbose_name='post mail for approaching visits', + ) + + unfinished_appointments_visible = models.BooleanField( + default=True, + verbose_name='unfinished appointments', + ) diff --git a/smash/web/models/study.py b/smash/web/models/study.py index d3b4090d..04a8e68e 100644 --- a/smash/web/models/study.py +++ b/smash/web/models/study.py @@ -1,7 +1,7 @@ # coding=utf-8 from django.db import models -from web.models.study_columns import StudyColumns +from web.models import StudyColumns, StudyNotificationParameters class Study(models.Model): @@ -14,6 +14,10 @@ class Study(models.Model): StudyColumns, on_delete=models.CASCADE, ) + notification_parameters = models.OneToOneField( + StudyNotificationParameters, + on_delete=models.CASCADE, + ) def __str__(self): return "%s" % self.name diff --git a/smash/web/tests/functions.py b/smash/web/tests/functions.py index 6994935f..b9cd6189 100644 --- a/smash/web/tests/functions.py +++ b/smash/web/tests/functions.py @@ -4,7 +4,7 @@ import os from django.contrib.auth.models import User from web.models import Location, AppointmentType, StudySubject, Worker, Visit, Appointment, ConfigurationItem, \ - Language, ContactAttempt, FlyingTeam, Availability, Subject, Study, StudyColumns + Language, ContactAttempt, FlyingTeam, Availability, Subject, Study, StudyColumns, StudyNotificationParameters from web.models.constants import REDCAP_TOKEN_CONFIGURATION_TYPE, REDCAP_BASE_URL_CONFIGURATION_TYPE, \ SEX_CHOICES_MALE, SUBJECT_TYPE_CHOICES_CONTROL, CONTACT_TYPES_PHONE, \ MONDAY_AS_DAY_OF_WEEK, COUNTRY_AFGHANISTAN_ID @@ -48,7 +48,8 @@ def create_empty_study_columns(): def create_study(name="test"): study_columns = StudyColumns.objects.create() - return Study.objects.create(name=name, columns=study_columns) + notification_parameters = StudyNotificationParameters.objects.create() + return Study.objects.create(name=name, columns=study_columns, notification_parameters=notification_parameters) def create_empty_study(name="test"): @@ -70,7 +71,10 @@ def create_empty_study(name="test"): resigned=False, resign_reason=False ) - return Study.objects.create(name=name, columns=study_columns) + result = create_study() + result.columns = study_columns + result.save() + return result def get_test_location(): diff --git a/smash/web/views/notifications.py b/smash/web/views/notifications.py index 3829d3eb..53680ebc 100644 --- a/smash/web/views/notifications.py +++ b/smash/web/views/notifications.py @@ -68,7 +68,7 @@ def get_subject_with_no_visit_notifications_count(user): def get_visits_without_appointments_count(user): notification = NotificationCount( - title="unfinished visits ", + title="unfinished visits", count=len(get_unfinished_visits(user)), style="fa fa-user-times text-yellow", type='web.views.unfinished_visits') @@ -86,7 +86,7 @@ def get_visits_with_missing_appointments_count(user): def get_approaching_visits_without_appointments_count(user): notification = NotificationCount( - title="approaching visits ", + title="approaching visits", count=get_approaching_visits_without_appointments(user).count(), style="fa fa-users text-aqua", type='web.views.approaching_visits_without_appointments') @@ -104,7 +104,7 @@ def get_approaching_visits_for_mail_contact_count(user): def get_unfinished_appointments_count(user): return NotificationCount( - title="unfinished appointments ", + title="unfinished appointments", count=get_unfinished_appointments(user).count(), style="fa fa-history text-yellow", type='web.views.unfinished_appointments') -- GitLab