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

refactor on notifications (count of events execute common code with

getting events)
parent 489aebbb
No related branches found
No related tags found
1 merge request!2Appointments dev
......@@ -106,3 +106,46 @@ class NotificationViewTests(TestCase):
notification = get_approaching_visits_without_appointments_count()
self.assertEquals(original_notification.count + 1, notification.count)
def test_get_subject_with_no_visit_notifications_count(self):
original_notification = get_subject_with_no_visit_notifications_count()
subject = create_subject()
notification = get_subject_with_no_visit_notifications_count()
self.assertEquals(original_notification.count + 1, notification.count)
def test_get_subject_with_no_visit_notifications_count_2(self):
original_notification = get_subject_with_no_visit_notifications_count()
subject = create_subject()
visit = create_visit(subject)
visit.is_finished=True
visit.save()
notification = get_subject_with_no_visit_notifications_count()
self.assertEquals(original_notification.count + 1, notification.count)
def test_get_subject_with_no_visit_notifications_count_3(self):
original_notification = get_subject_with_no_visit_notifications_count()
subject = create_subject()
visit = create_visit(subject)
notification = get_subject_with_no_visit_notifications_count()
self.assertEquals(original_notification.count, notification.count)
def test_get_subject_with_no_visit_notifications_count_4(self):
original_notification = get_subject_with_no_visit_notifications_count()
subject = create_subject()
subject.dead = True
subject.save()
notification = get_subject_with_no_visit_notifications_count()
self.assertEquals(original_notification.count, notification.count)
def test_get_subject_with_no_visit_notifications_count_5(self):
original_notification = get_subject_with_no_visit_notifications_count()
subject = create_subject()
subject.resigned = True
subject.save()
notification = get_subject_with_no_visit_notifications_count()
self.assertEquals(original_notification.count, notification.count)
......@@ -12,6 +12,9 @@ from django.shortcuts import render
from django.db.models import Q
import collections
import datetime
from django.db.models import Count
from django.db.models import Case
from django.db.models import When
# See https://docs.djangoproject.com/en/1.10/topics/http/views/#customizing-error-views
# They should work ONLY in production! (DEBUG=False)
......@@ -68,77 +71,63 @@ class NotificationCount(object):
self.style = style
self.type = type
def get_exceeded_visits():
return Visit.objects.filter(datetime_end__lt = get_today_midnight_date(), is_finished = False).order_by('datetime_begin')
def get_exceeded_visit_notifications_count():
notification = NotificationCount("exceeded visit time",0 , "fa fa-thermometer-4 text-red", 'web.views.exceeded_visits')
today = get_today_midnight_date()
count = Visit.objects.filter(datetime_end__lt = today, is_finished = False).count()
notification.count = count
notification = NotificationCount(
title = "exceeded visit time",
count = get_exceeded_visits().count(),
style = "fa fa-thermometer-4 text-red",
type = 'web.views.exceeded_visits')
return notification
def get_subjects_with_no_visit():
return Subject.objects.annotate(my_count=Count(Case(When(visit__is_finished=False, then=1)))).filter(dead=False, resigned=False, my_count=0)
def get_subject_with_no_visit_notifications_count():
notification = NotificationCount(
title = "subject without visit",
count = get_subjects_with_no_visit().count(),
style = "fa fa-users text-aqua",
type = 'web.views.subject_no_visits')
return notification
def get_exceeded_visits():
return Visit.objects.filter(datetime_end__lt = get_today_midnight_date(), is_finished = False).order_by('datetime_begin')
def get_visits_without_appointments_count():
notification = NotificationCount("unfinished visits ",0 , "fa fa-user-times text-yellow", 'web.views.unfinished_visits')
today = get_today_midnight_date()
count = 0
#visits in progress
visits = Visit.objects.filter(datetime_begin__lt = today, datetime_end__gt = today, is_finished = False)
for visit in visits:
app_count = Appointment.objects.filter(visit = visit, status = Appointment.APPOINTMENT_STATUS_SCHEDULED).count()
if app_count==0:
count+=1
notification.count = count
notification = NotificationCount(
title = "unfinished visits ",
count = get_unfinished_visits().count(),
style = "fa fa-user-times text-yellow",
type = 'web.views.unfinished_visits')
return notification
def get_unfinished_visits():
today = get_today_midnight_date()
result = [];
#visits in progress
visits = Visit.objects.filter(datetime_begin__lt = today, datetime_end__gt = today, is_finished = False)
for visit in visits:
app_count = Appointment.objects.filter(visit = visit, status = Appointment.APPOINTMENT_STATUS_SCHEDULED).count()
if app_count==0:
result.append(visit)
return result
#list visits that have no scheduled appointments and taking place now
return Visit.objects.annotate(my_count=Count(Case(When(appointment__status=Appointment.APPOINTMENT_STATUS_SCHEDULED, then=1)))).filter(datetime_begin__lt = today, datetime_end__gt = today, is_finished = False, my_count=0)
def get_approaching_visits_without_appointments_count():
notification = NotificationCount("approaching visits ",0 , "fa fa-users text-aqua",'web.views.approaching_visits_without_appointments')
today = get_today_midnight_date()
today_plus_two_months =today+datetime.timedelta(days=62)
count = 0
#visits in near future (2 months)
visits = Visit.objects.filter(datetime_begin__gt = today, datetime_begin__lt = today_plus_two_months, is_finished = False)
for visit in visits:
app_count = Appointment.objects.filter(visit = visit, status = Appointment.APPOINTMENT_STATUS_SCHEDULED).count()
if app_count==0:
count+=1
notification.count = count
notification = NotificationCount(
title = "approaching visits ",
count = get_approaching_visits_without_appointments().count(),
style = "fa fa-users text-aqua",
type = 'web.views.approaching_visits_without_appointments')
return notification
def get_approaching_visits_without_appointments():
today = get_today_midnight_date()
today_plus_two_months =today+datetime.timedelta(days=62)
result = [];
#visits in progress
visits = Visit.objects.filter(datetime_begin__gt = today, datetime_begin__lt = today_plus_two_months, is_finished = False)
for visit in visits:
app_count = Appointment.objects.filter(visit = visit, status = Appointment.APPOINTMENT_STATUS_SCHEDULED).count()
if app_count==0:
result.append(visit)
return result
return Visit.objects.annotate(my_count=Count(Case(When(appointment__status=Appointment.APPOINTMENT_STATUS_SCHEDULED, then=1)))).filter(datetime_begin__gt = today, datetime_begin__lt = today_plus_two_months, is_finished = False, my_count=0)
def get_unfinished_appointments_count():
notification = NotificationCount("unfinished appointments ",0 , "fa fa-history text-yellow",'web.views.unfinished_appointments')
today = get_today_midnight_date()
count = Appointment.objects.filter(datetime_when__lt = today, status = Appointment.APPOINTMENT_STATUS_SCHEDULED).count()
notification.count = count
return notification
return NotificationCount(
title = "unfinished appointments ",
count = get_unfinished_appointments(),
style = "fa fa-history text-yellow",
type = 'web.views.unfinished_appointments')
def get_unfinished_appointments():
return Appointment.objects.filter(datetime_when__lt = get_today_midnight_date(), status = Appointment.APPOINTMENT_STATUS_SCHEDULED)
......@@ -154,6 +143,7 @@ def get_notifications(the_user):
notifications.append(get_visits_without_appointments_count())
notifications.append(get_approaching_visits_without_appointments_count())
notifications.append(get_unfinished_appointments_count())
notifications.append(get_subject_with_no_visit_notifications_count())
for notification in notifications:
count += notification.count
return (count, notifications)
......
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