Skip to content
Snippets Groups Projects

in daily planning user can schedule non-subject related appointments

Merged Piotr Gawron requested to merge 160-daily-planning-other-appointment into master
4 files
+ 196
45
Compare changes
  • Side-by-side
  • Inline
Files
4
import datetime
import json
import logging
from operator import itemgetter
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.shortcuts import get_object_or_404
from ..models import Appointment, AppointmentTypeLink, Worker, Availability, Holiday
from ..views.notifications import get_filter_locations
from web.views import e500_error
from web.models import Appointment, AppointmentTypeLink, Worker, Availability, Holiday
from web.views.notifications import get_filter_locations
logger = logging.getLogger(__name__)
RANDOM_COLORS = [
'#%02X%02X%02X' % (8, 218, 217),
@@ -184,6 +188,52 @@ def get_conflicts(worker, date):
return result
def get_generic_appointment_events(request, date):
result = {}
appointments = Appointment.objects.filter(
datetime_when__date=date,
location__in=get_filter_locations(request.user),
status=Appointment.APPOINTMENT_STATUS_SCHEDULED,
visit__isnull=True).all()
for appointment in appointments:
if appointment.location_id not in result:
appointment_data = {
'name': "GENERAL",
'id': appointment.id,
'color': RANDOM_COLORS[len(RANDOM_COLORS)-1],
'start': "",
'location': str(appointment.location),
'events': []
}
result[appointment.location_id] = appointment_data
link_when = appointment.datetime_when
link_end = None
if link_when is not None:
link_when = link_when.replace(tzinfo=None)
link_end = link_when + datetime.timedelta(minutes=appointment.length)
event = {
'title': appointment.title(),
'short_title': appointment.title(),
'duration': build_duration(appointment.length),
'id': 'app-{}'.format(appointment.id),
'appointment_id': appointment.id,
'link_when': link_when,
'link_who': appointment.worker_assigned_id,
'link_end': link_end,
'location': str(appointment.location),
'flying_team_location': unicode(appointment.flying_team),
'appointment_start': appointment.datetime_when.replace(tzinfo=None, hour=7, minute=0),
'appointment_end': appointment.datetime_when.replace(tzinfo=None, hour=19, minute=0),
}
appointment_events = result[appointment.location_id]['events']
appointment_events.append(event)
return result.values()
@login_required
def events(request, date):
appointments = Appointment.objects.filter(
@@ -233,6 +283,8 @@ def events(request, date):
subject_events = subjects[appointment_subject.id]['events']
subject_events.append(event)
generic_appointment_events = get_generic_appointment_events(request, date)
availabilities = []
holidays = []
workers = get_workers_for_daily_planning(request)
@@ -243,6 +295,7 @@ def events(request, date):
return JsonResponse({
"data": subjects.values(),
"generic": generic_appointment_events,
'availabilities': availabilities,
'holidays': holidays
})
@@ -275,22 +328,39 @@ def availabilities(request, date):
@login_required
def events_persist(request):
event_links = json.loads(request.POST.get('events_to_persist'))
for event_link in event_links:
try:
when = datetime.datetime.strptime(event_link['start'], '%Y-%m-%dT%H:%M:00')
except ValueError:
when = datetime.datetime.strptime(event_link['start'][0:-6], '%Y-%m-%dT%H:%M:00')
worker_id = event_link['link_who']
link_id = event_link['link_id']
appointment_type_link = get_object_or_404(AppointmentTypeLink, pk=link_id)
appointment_type_link.worker_id = worker_id
appointment_type_link.date_when = when
appointment_type_link.save()
events_to_clear = json.loads(request.POST.get('events_to_clear'))
for link_id in events_to_clear:
appointment_type_link = get_object_or_404(AppointmentTypeLink, pk=link_id)
appointment_type_link.worker_id = None
appointment_type_link.date_when = None
appointment_type_link.save()
return JsonResponse({}, status=201)
try:
event_links = json.loads(request.POST.get('events_to_persist'))
for event_link in event_links:
try:
when = datetime.datetime.strptime(event_link['start'], '%Y-%m-%dT%H:%M:00')
except ValueError:
when = datetime.datetime.strptime(event_link['start'][0:-6], '%Y-%m-%dT%H:%M:00')
worker_id = event_link['link_who']
if 'link_id' in event_link:
link_id = event_link['link_id']
appointment_type_link = get_object_or_404(AppointmentTypeLink, pk=link_id)
appointment_type_link.worker_id = worker_id
appointment_type_link.date_when = when
appointment_type_link.save()
else:
logger.info(event_link)
appointment_id = event_link['appointment_id']
appointment = get_object_or_404(Appointment, pk=appointment_id)
appointment.worker_assigned_id = worker_id
appointment.datetime_when = when
appointment.save()
events_to_clear = json.loads(request.POST.get('events_to_clear'))
for link_id in events_to_clear:
appointment_type_link = get_object_or_404(AppointmentTypeLink, pk=link_id)
appointment_type_link.worker_id = None
appointment_type_link.date_when = None
appointment_type_link.save()
appointments_to_clear = json.loads(request.POST.get('appointments_to_clear'))
for appointment_id in appointments_to_clear:
appointment = get_object_or_404(Appointment, pk=appointment_id)
appointment.worker_assigned_id = None
appointment.save()
return JsonResponse({}, status=201)
except Exception as e:
logger.error(e, exc_info=True)
return e500_error(request)
Loading