Skip to content
Snippets Groups Projects
Commit 46cb494d authored by Piotr Gawron's avatar Piotr Gawron
Browse files

Merge branch '202-notification-list-changes' into 'master'

Resolve "notification list changes"

Closes #202

See merge request NCER-PD/scheduling-system!130
parents 0ab27750 3b888153
No related branches found
No related tags found
1 merge request!130Resolve "notification list changes"
Pipeline #
......@@ -7,7 +7,7 @@ from django.utils import timezone
from web.api_views.serialization_utils import serialize_datetime, location_to_str, flying_team_to_str, add_column, \
bool_to_yes_no, get_filters_for_data_table_request
from web.models import Appointment, Study, SubjectColumns, AppointmentColumns, AppointmentList
from web.models import Appointment, Study, SubjectColumns, AppointmentColumns, AppointmentList, StudyColumns
from web.models.appointment_list import APPOINTMENT_LIST_GENERIC, APPOINTMENT_LIST_UNFINISHED, \
APPOINTMENT_LIST_APPROACHING
from web.models.constants import GLOBAL_STUDY_ID
......@@ -22,14 +22,18 @@ def get_appointment_columns(request, appointment_list_type):
if len(appointment_lists) > 0:
appointment_list = appointment_lists[0]
subject_columns = appointment_list.visible_subject_columns
subject_study_columns = appointment_list.visible_study_subject_columns
appointment_columns = appointment_list.visible_appointment_columns
else:
subject_columns = SubjectColumns()
subject_study_columns = StudyColumns()
appointment_columns = AppointmentColumns()
result = []
add_column(result, "First name", "first_name", subject_columns, "string_filter")
add_column(result, "Last name", "last_name", subject_columns, "string_filter")
add_column(result, "ND number", "nd_number", subject_study_columns, "string_filter")
add_column(result, "Type", "type", subject_study_columns, "type_filter")
add_column(result, "Info sent", "post_mail_sent", appointment_columns, "yes_no_filter")
add_column(result, "Date", "datetime_when", appointment_columns, None)
add_column(result, "Appointment types", "appointment_types", appointment_columns, "appointment_type_filter",
......@@ -73,6 +77,10 @@ def get_appointments_order(appointments_to_be_ordered, order_column, order_direc
result = appointments_to_be_ordered.order_by(order_direction + 'visit__subject__subject__first_name')
elif order_column == "last_name":
result = appointments_to_be_ordered.order_by(order_direction + 'visit__subject__subject__last_name')
elif order_column == "nd_number":
result = appointments_to_be_ordered.order_by(order_direction + 'visit__subject__nd_number')
elif order_column == "type":
result = appointments_to_be_ordered.order_by(order_direction + 'visit__subject__type')
elif order_column == "location":
result = appointments_to_be_ordered.order_by(order_direction + 'location')
elif order_column == "flying_team":
......@@ -95,6 +103,10 @@ def get_appointments_filtered(appointments_to_be_filtered, filters):
result = result.filter(visit__subject__subject__first_name__icontains=value)
elif column == "last_name":
result = result.filter(visit__subject__subject__last_name__icontains=value)
elif column == "nd_number":
result = result.filter(visit__subject__nd_number__icontains=value)
elif column == "type":
result = result.filter(visit__subject__type=value)
elif column == "location":
result = result.filter(location=value)
elif column == "flying_team":
......@@ -159,6 +171,7 @@ def serialize_appointment(appointment):
subject_string = ""
first_name = ""
last_name = ""
subject_type = ""
nd_number = screening_number = phone_numbers = appointment_type_names = None
if appointment.visit is not None:
title = "Visit " + str(appointment.visit.visit_number)
......@@ -168,6 +181,7 @@ def serialize_appointment(appointment):
last_name = study_subject.subject.last_name
nd_number = study_subject.nd_number
screening_number = study_subject.screening_number
subject_type = study_subject.get_type_display()
phone_numbers = ", ".join(filter(None,
[study_subject.subject.phone_number, study_subject.subject.phone_number_2,
study_subject.subject.phone_number_3]))
......@@ -188,6 +202,7 @@ def serialize_appointment(appointment):
"title": title,
"nd_number": nd_number,
"screening_number": screening_number,
"type": subject_type,
"phone_number": phone_numbers,
"appointment_type_names": appointment_type_names,
"datetime_until": until,
......
......@@ -36,8 +36,8 @@ def get_visit_columns(request, visit_list_type):
result = []
add_column(result, "First name", "first_name", visit_subject_columns, "string_filter")
add_column(result, "Last name", "last_name", visit_subject_columns, "string_filter")
add_column(result, "Location", "default_location", visit_subject_study_columns, "location_filter",
study.columns)
add_column(result, "ND number", "nd_number", visit_subject_study_columns, "string_filter", study.columns)
add_column(result, "Location", "default_location", visit_subject_study_columns, "location_filter", study.columns)
add_column(result, "Flying team location", "flying_team", visit_subject_study_columns, "flying_team_filter",
study.columns)
add_column(result, "Visit begins", "datetime_begin", visit_columns, None)
......@@ -86,6 +86,8 @@ def get_visits_order(visits_to_be_ordered, order_column, order_direction):
result = visits_to_be_ordered.order_by(order_direction + 'subject__subject__first_name')
elif order_column == "last_name":
result = visits_to_be_ordered.order_by(order_direction + 'subject__subject__last_name')
elif order_column == "nd_number":
result = visits_to_be_ordered.order_by(order_direction + 'subject__nd_number')
elif order_column == "default_location":
result = visits_to_be_ordered.order_by(order_direction + 'subject__default_location')
elif order_column == "flying_team":
......@@ -139,6 +141,8 @@ def get_visits_filtered(visits_to_be_filtered, filters):
result = result.filter(subject__subject__first_name__icontains=value)
elif column == "last_name":
result = result.filter(subject__subject__last_name__icontains=value)
elif column == "nd_number":
result = result.filter(subject__nd_number__icontains=value)
elif column == "flying_team":
result = result.filter(subject__flying_team=value)
elif column == "default_location":
......@@ -227,6 +231,7 @@ def serialize_visit(visit):
result = {
"first_name": visit.subject.subject.first_name,
"last_name": visit.subject.subject.last_name,
"nd_number": visit.subject.nd_number,
"datetime_begin": serialize_date(visit.datetime_begin),
"datetime_end": serialize_date(visit.datetime_end),
"flying_team": flying_team_to_str(visit.subject.flying_team),
......
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-02-14 10:26
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('web', '0102_studynotificationparameters_subject_voucher_expiry_visible'),
]
operations = [
migrations.AlterField(
model_name='studysubjectlist',
name='type',
field=models.CharField(blank=True, choices=[(b'GENERIC', b'Generic'), (b'NO_VISIT', b'Subjects without visit'), (b'REQUIRE_CONTACT', b'Subjects required contact'), (b'VOUCHER_EXPIRY', b'Subject with vouchers to be expired soon')], max_length=50, null=True, verbose_name=b'Type of list'),
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-02-14 10:26
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('web', '0103_auto_20180214_1026'),
]
operations = [
migrations.RunSQL(
'UPDATE web_studysubjectlist SET last_contact_attempt = TRUE WHERE type=\'REQUIRE_CONTACT\';'),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-02-14 10:26
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('web', '0104_contact_required_list_update'),
]
operations = [
migrations.RunSQL(
'UPDATE web_studycolumns SET nd_number=TRUE, type=TRUE WHERE id IN ' +
'(SELECT visible_study_subject_columns_id FROM web_appointmentlist WHERE type = \'UNFINISHED\');'),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-02-14 10:26
from __future__ import unicode_literals
from django.db import migrations, models
def create_default_columns_for_VISIT_LIST_APPROACHING_FOR_MAIL_CONTACT(apps, schema_editor):
# We can't import the Study model directly as it may be a newer
# version than this migration expects. We use the historical version.
SubjectColumns = apps.get_model("web", "SubjectColumns")
subject_columns = SubjectColumns.objects.create()
subject_columns.sex = False
subject_columns.first_name = True
subject_columns.last_name = True
subject_columns.languages = False
subject_columns.default_written_communication_langua0106_approaching_post_mail_list_updatege = False
subject_columns.phone_number = False
subject_columns.phone_number_2 = False
subject_columns.phone_number_3 = False
subject_columns.email = False
subject_columns.date_born = False
subject_columns.address = False
subject_columns.postal_code = False
subject_columns.city = False
subject_columns.country = False
subject_columns.dead = False
subject_columns.save()
StudyColumns = apps.get_model("web", "StudyColumns")
study_columns = StudyColumns.objects.create()
study_columns.postponed = False
study_columns.datetime_contact_reminder = False
study_columns.type = False
study_columns.default_location = True
study_columns.flying_team = True
study_columns.screening_number = False
study_columns.nd_number = True
study_columns.mpower_id = False
study_columns.comments = False
study_columns.referral = False
study_columns.diagnosis = False
study_columns.year_of_diagnosis = False
study_columns.information_sent = False
study_columns.pd_in_family = False
study_columns.resigned = False
study_columns.resign_reason = False
study_columns.save()
VisitColumns = apps.get_model("web", "VisitColumns")
visit_columns = VisitColumns.objects.create()
visit_columns.datetime_begin = True
visit_columns.datetime_end = False
visit_columns.is_finished = False
visit_columns.post_mail_sent = False
visit_columns.visit_number = True
visit_columns.visible_appointment_types = False
visit_columns.save()
class Migration(migrations.Migration):
dependencies = [
('web', '0105_unfinished_appointments_list_update'),
]
operations = [
migrations.RunPython(create_default_columns_for_VISIT_LIST_APPROACHING_FOR_MAIL_CONTACT),
migrations.RunSQL('INSERT INTO web_studyvisitlist (' +
'study_id, ' +
'visible_visit_columns_id, ' +
'visible_subject_columns_id, ' +
'visible_study_subject_columns_id, ' +
'visible_appointment_types_done,'
'visible_appointment_types_in_progress,'
'visible_appointment_types_missing,'
'type) ' +
"SELECT " +
"1, " +
"max(web_visitcolumns.id), " +
"max(web_subjectcolumns.id), " +
"max(web_studycolumns.id), " +
"FALSE, " +
"FALSE, " +
"FALSE, " +
"'APPROACHING_FOR_MAIL_CONTACT' FROM web_visitcolumns, web_studycolumns, web_subjectcolumns;"),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-02-14 10:26
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('web', '0106_approaching_post_mail_list_update'),
]
operations = [
migrations.RunSQL(
'UPDATE web_studycolumns SET nd_number=TRUE WHERE id IN ' +
'(SELECT visible_study_subject_columns_id FROM web_studyvisitlist WHERE type = \'EXCEEDED_TIME\');'),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-02-14 10:26
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('web', '0107_exceeded_visit_time_list_update'),
]
operations = [
migrations.RunSQL(
'UPDATE web_studycolumns SET nd_number=TRUE where id IN ' +
'(SELECT visible_study_subject_columns_id FROM web_studyvisitlist WHERE type = \'UNFINISHED\');'),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-02-14 10:26
from __future__ import unicode_literals
from django.db import migrations, models
def create_default_columns_for_VISIT_LIST_MISSING_APPOINTMENT(apps, schema_editor):
# We can't import the Study model directly as it may be a newer
# version than this migration expects. We use the historical version.
SubjectColumns = apps.get_model("web", "SubjectColumns")
subject_columns = SubjectColumns.objects.create()
subject_columns.sex = False
subject_columns.first_name = True
subject_columns.last_name = True
subject_columns.languages = False
subject_columns.default_written_communication_langua0106_approaching_post_mail_list_updatege = False
subject_columns.phone_number = False
subject_columns.phone_number_2 = False
subject_columns.phone_number_3 = False
subject_columns.email = False
subject_columns.date_born = False
subject_columns.address = False
subject_columns.postal_code = False
subject_columns.city = False
subject_columns.country = False
subject_columns.dead = False
subject_columns.save()
StudyColumns = apps.get_model("web", "StudyColumns")
study_columns = StudyColumns.objects.create()
study_columns.postponed = False
study_columns.datetime_contact_reminder = False
study_columns.type = False
study_columns.default_location = True
study_columns.flying_team = True
study_columns.screening_number = False
study_columns.nd_number = True
study_columns.mpower_id = False
study_columns.comments = False
study_columns.referral = False
study_columns.diagnosis = False
study_columns.year_of_diagnosis = False
study_columns.information_sent = False
study_columns.pd_in_family = False
study_columns.resigned = False
study_columns.resign_reason = False
study_columns.save()
VisitColumns = apps.get_model("web", "VisitColumns")
visit_columns = VisitColumns.objects.create()
visit_columns.datetime_begin = True
visit_columns.datetime_end = True
visit_columns.is_finished = False
visit_columns.post_mail_sent = False
visit_columns.visit_number = True
visit_columns.visible_appointment_types = False
visit_columns.save()
class Migration(migrations.Migration):
dependencies = [
('web', '0108_unfinished_visit_list_update'),
]
operations = [
migrations.RunPython(create_default_columns_for_VISIT_LIST_MISSING_APPOINTMENT),
migrations.RunSQL('INSERT INTO web_studyvisitlist (' +
'study_id, ' +
'visible_visit_columns_id, ' +
'visible_subject_columns_id, ' +
'visible_study_subject_columns_id, ' +
'visible_appointment_types_done,'
'visible_appointment_types_in_progress,'
'visible_appointment_types_missing,'
'type) ' +
"SELECT " +
"1, " +
"max(web_visitcolumns.id), " +
"max(web_subjectcolumns.id), " +
"max(web_studycolumns.id), " +
"TRUE, " +
"TRUE, " +
"TRUE, " +
"'MISSING_APPOINTMENTS' FROM web_visitcolumns, web_studycolumns, web_subjectcolumns;"),
]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment