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

work in progress

parent 4793ed6f
No related branches found
No related tags found
1 merge request!85subject list contain list of visits
import logging
import traceback
from datetime import datetime
from django.contrib.auth.decorators import login_required
......
......@@ -3,12 +3,14 @@ import logging
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from web.models import Subject
from web.models import Subject, Visit, Appointment
from web.models.constants import SUBJECT_TYPE_CHOICES
from web.views import e500_error
from web.views.notifications import get_subjects_with_no_visit, get_subjects_with_reminder
from web.views.notifications import get_subjects_with_no_visit, get_subjects_with_reminder, get_today_midnight_date
from web.views.subject import SUBJECT_LIST_GENERIC, SUBJECT_LIST_NO_VISIT, SUBJECT_LIST_REQUIRE_CONTACT
from django.db.models import Count, Case, When, Min
logger = logging.getLogger(__name__)
......@@ -48,37 +50,45 @@ def get_subjects(request, type):
raise TypeError("Unknown query type: " + type)
def get_subjects_order(subjects, order_column, order_direction):
result = subjects
def get_subjects_order(subjects_to_be_ordered, order_column, order_direction):
result = subjects_to_be_ordered
if order_direction == "asc":
order_direction = ""
else:
order_direction = "-"
if order_column == "first_name":
result = subjects.order_by(order_direction + 'first_name')
result = subjects_to_be_ordered.order_by(order_direction + 'first_name')
elif order_column == "last_name":
result = subjects.order_by(order_direction + 'last_name')
result = subjects_to_be_ordered.order_by(order_direction + 'last_name')
elif order_column == "nd_number":
result = subjects.order_by(order_direction + 'nd_number')
result = subjects_to_be_ordered.order_by(order_direction + 'nd_number')
elif order_column == "screening_number":
result = subjects.order_by(order_direction + 'screening_number')
result = subjects_to_be_ordered.order_by(order_direction + 'screening_number')
elif order_column == "default_location":
result = subjects.order_by(order_direction + 'default_location')
result = subjects_to_be_ordered.order_by(order_direction + 'default_location')
elif order_column == "dead":
result = subjects.order_by(order_direction + 'dead')
result = subjects_to_be_ordered.order_by(order_direction + 'dead')
elif order_column == "resigned":
result = subjects.order_by(order_direction + 'resigned')
result = subjects_to_be_ordered.order_by(order_direction + 'resigned')
elif order_column == "information_sent":
result = subjects.order_by(order_direction + 'information_sent')
result = subjects_to_be_ordered.order_by(order_direction + 'information_sent')
elif order_column == "postponed":
result = subjects.order_by(order_direction + 'postponed')
result = subjects_to_be_ordered.order_by(order_direction + 'postponed')
elif order_column == "type":
result = subjects.order_by(order_direction + 'type')
result = subjects_to_be_ordered.order_by(order_direction + 'type')
elif order_column == "visit_0":
result = subjects_to_be_ordered.annotate(visit_0=Min('visit__datetime_begin')).order_by(
order_direction + 'visit_0')
elif order_column == "visit_1":
result = subjects_to_be_ordered.annotate(visit_0=Min('visit__datetime_begin'))
result = result.filter(visit__datetime_begin__gt=Min('visit__datetime_begin'))
result = result.annotate(visit_1=Min('visit__datetime_begin')).order_by(order_direction + 'visit_1')
logger.info(result.query)
return result
def get_subjects_filtered(subjects, filters):
result = subjects
def get_subjects_filtered(subjects_to_be_filtered, filters):
result = subjects_to_be_filtered
for row in filters:
column = row[0]
value = row[1]
......@@ -177,10 +187,43 @@ def get_yes_no(val):
return "NO"
def serialize_subject_visit(visit):
status = "---"
appointments = visit.appointment_set.filter()
pass
def serialize_subject(subject):
location = ""
if subject.default_location is not None:
location = subject.default_location.name
visits = Visit.objects.filter(subject=subject)
serialized_visits = []
for visit in visits:
if visit.datetime_begin < get_today_midnight_date():
if visit.is_finished:
finished_appointments_count = visit.appointment_set.filter(
status=Appointment.APPOINTMENT_STATUS_FINISHED).count()
if finished_appointments_count > 0:
status = "DONE"
else:
status = "MISSED"
elif visit.datetime_end < get_today_midnight_date():
status = "EXCEEDED"
else:
scheduled_appointments_count = visit.appointment_set.filter(
status=Appointment.APPOINTMENT_STATUS_SCHEDULED).count()
if scheduled_appointments_count > 0:
status = "IN_PROGRESS"
else:
status = "SHOULD_BE_IN_PROGRESS"
else:
status = "UPCOMING"
serialized_visits.append({
"status": status,
"datetime_start": visit.datetime_begin.strftime('%Y-%m-%d'),
"datetime_end": visit.datetime_end.strftime('%Y-%m-%d'),
})
result = {
"first_name": subject.first_name,
......@@ -195,5 +238,6 @@ def serialize_subject(subject):
"information_sent": get_yes_no(subject.information_sent),
"type": subject.get_type_display(),
"id": subject.id,
"visits": serialized_visits,
}
return result
......@@ -32,8 +32,7 @@
<tr>
<th>ND</th>
<th>Screening</th>
<th>First name
</th>
<th>First name</th>
<th>Last name</th>
<th>Default location</th>
<th>Deceased</th>
......@@ -41,6 +40,14 @@
<th>Postponed</th>
<th>Info sent</th>
<th>Type</th>
<th>Visit 1</th>
<th>Visit 2</th>
<th>Visit 3</th>
<th>Visit 4</th>
<th>Visit 5</th>
<th>Visit 6</th>
<th>Visit 7</th>
<th>Visit 8</th>
<th>Edit</th>
</tr>
</thead>
......@@ -76,6 +83,14 @@
<th>
<div name="type_filter">---</div>
</th>
<th/>
<th/>
<th/>
<th/>
<th/>
<th/>
<th/>
<th/>
</tr>
</tfoot>
......@@ -128,6 +143,34 @@
});
function create_visit_row(visit) {
var color = "white";
var text = "---";
if (visit !== undefined && visit !== null) {
if (visit.status === "DONE") {
color = "green";
text = "OK";
} else if (visit.status === "MISSED") {
color = "pink";
text = "MISSED";
} else if (visit.status === "UPCOMING") {
color = "blue";
text = "UPCOMING";
} else if (visit.status === "EXCEEDED") {
color = "orange";
text = "EXCEEDED";
} else if (visit.status === "SHOULD_BE_IN_PROGRESS") {
color = "orange";
text = "IN PROGRESS (NO APPOINTMENTS)";
} else if (visit.status === "IN_PROGRESS") {
color = "lightgreen";
text = "IN PROGRESS";
}
text += "<br/>" + visit.datetime_start + " - " + visit.datetime_end;
}
return "<div style='background-color:" + color + "';width:100%;height:100%>" + text + "</div>";
}
$(function () {
table = $('#table').DataTable({
pageLength: 25,
......@@ -146,10 +189,58 @@
{"data": "postponed"},
{"data": "information_sent"},
{"data": "type"},
{"data": "visit_0"},
{"data": "visit_1"},
{"data": null},
{"data": null},
{"data": null},
{"data": null},
{"data": null},
{"data": null},
{"data": null}
],
columnDefs: [{
"targets": 10,
"render": function (data, type, row, meta) {
return create_visit_row(row.visits[0]);
}
}, {
"targets": 11,
"render": function (data, type, row, meta) {
return create_visit_row(row.visits[1]);
}
}, {
"targets": 12,
"render": function (data, type, row, meta) {
return create_visit_row(row.visits[2]);
}
}, {
"targets": 13,
"render": function (data, type, row, meta) {
return create_visit_row(row.visits[3]);
}
}, {
"targets": 14,
"render": function (data, type, row, meta) {
return create_visit_row(row.visits[4]);
}
}, {
"targets": 15,
"render": function (data, type, row, meta) {
return create_visit_row(row.visits[5]);
}
}, {
"targets": 16,
"render": function (data, type, row, meta) {
return create_visit_row(row.visits[6]);
}
}, {
"targets": 17,
"render": function (data, type, row, meta) {
return create_visit_row(row.visits[7]);
}
}, {
"targets": 18,
"data": "id",
"defaultContent": '<a href="#" type="button" class="btn btn-block btn-default">Edit</a>'
}],
......
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