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 datetime
import json
import json
 
import logging
from operator import itemgetter
from operator import itemgetter
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.http import JsonResponse
from django.shortcuts import get_object_or_404
from django.shortcuts import get_object_or_404
from ..models import Appointment, AppointmentTypeLink, Worker, Availability, Holiday
from web.views import e500_error
from ..views.notifications import get_filter_locations
from web.models import Appointment, AppointmentTypeLink, Worker, Availability, Holiday
 
from web.views.notifications import get_filter_locations
 
 
logger = logging.getLogger(__name__)
RANDOM_COLORS = [
RANDOM_COLORS = [
'#%02X%02X%02X' % (8, 218, 217),
'#%02X%02X%02X' % (8, 218, 217),
@@ -184,6 +188,52 @@ def get_conflicts(worker, date):
@@ -184,6 +188,52 @@ def get_conflicts(worker, date):
return result
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
@login_required
def events(request, date):
def events(request, date):
appointments = Appointment.objects.filter(
appointments = Appointment.objects.filter(
@@ -233,6 +283,8 @@ def events(request, date):
@@ -233,6 +283,8 @@ def events(request, date):
subject_events = subjects[appointment_subject.id]['events']
subject_events = subjects[appointment_subject.id]['events']
subject_events.append(event)
subject_events.append(event)
 
generic_appointment_events = get_generic_appointment_events(request, date)
 
availabilities = []
availabilities = []
holidays = []
holidays = []
workers = get_workers_for_daily_planning(request)
workers = get_workers_for_daily_planning(request)
@@ -243,6 +295,7 @@ def events(request, date):
@@ -243,6 +295,7 @@ def events(request, date):
return JsonResponse({
return JsonResponse({
"data": subjects.values(),
"data": subjects.values(),
 
"generic": generic_appointment_events,
'availabilities': availabilities,
'availabilities': availabilities,
'holidays': holidays
'holidays': holidays
})
})
@@ -275,22 +328,39 @@ def availabilities(request, date):
@@ -275,22 +328,39 @@ def availabilities(request, date):
@login_required
@login_required
def events_persist(request):
def events_persist(request):
event_links = json.loads(request.POST.get('events_to_persist'))
try:
for event_link in event_links:
event_links = json.loads(request.POST.get('events_to_persist'))
try:
for event_link in event_links:
when = datetime.datetime.strptime(event_link['start'], '%Y-%m-%dT%H:%M:00')
try:
except ValueError:
when = datetime.datetime.strptime(event_link['start'], '%Y-%m-%dT%H:%M:00')
when = datetime.datetime.strptime(event_link['start'][0:-6], '%Y-%m-%dT%H:%M:00')
except ValueError:
worker_id = event_link['link_who']
when = datetime.datetime.strptime(event_link['start'][0:-6], '%Y-%m-%dT%H:%M:00')
link_id = event_link['link_id']
worker_id = event_link['link_who']
appointment_type_link = get_object_or_404(AppointmentTypeLink, pk=link_id)
if 'link_id' in event_link:
appointment_type_link.worker_id = worker_id
link_id = event_link['link_id']
appointment_type_link.date_when = when
appointment_type_link = get_object_or_404(AppointmentTypeLink, pk=link_id)
appointment_type_link.save()
appointment_type_link.worker_id = worker_id
events_to_clear = json.loads(request.POST.get('events_to_clear'))
appointment_type_link.date_when = when
for link_id in events_to_clear:
appointment_type_link.save()
appointment_type_link = get_object_or_404(AppointmentTypeLink, pk=link_id)
else:
appointment_type_link.worker_id = None
logger.info(event_link)
appointment_type_link.date_when = None
appointment_id = event_link['appointment_id']
appointment_type_link.save()
appointment = get_object_or_404(Appointment, pk=appointment_id)
return JsonResponse({}, status=201)
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