Skip to content
Snippets Groups Projects

Feature/flag tooltip in daily planning

Merged Carlos Vega requested to merge feature/flag_tooltip_in_daily_planning into master
4 files
+ 119
47
Compare changes
  • Side-by-side
  • Inline
Files
4
@@ -43,15 +43,21 @@ def build_duration(duration):
def get_holidays(worker, date):
today_start = datetime.datetime.strptime(date, '%Y-%m-%d').replace(hour=0, minute=0)
today_end = datetime.datetime.strptime(date, '%Y-%m-%d').replace(hour=23, minute=59)
holidays = Holiday.objects.filter(person=worker, datetime_start__lte=today_end, datetime_end__gte=today_start)
today_start = datetime.datetime.strptime(
date, '%Y-%m-%d').replace(hour=0, minute=0)
today_end = datetime.datetime.strptime(
date, '%Y-%m-%d').replace(hour=23, minute=59)
holidays = Holiday.objects.filter(
person=worker, datetime_start__lte=today_end, datetime_end__gte=today_start)
result = []
for holiday in holidays:
minutes = int((holiday.datetime_end - holiday.datetime_start).total_seconds() / 60)
minutes = int(
(holiday.datetime_end - holiday.datetime_start).total_seconds() / 60)
# hack for time zones
start_date = datetime.datetime.combine(today_start, holiday.datetime_start.time())
end_date = datetime.datetime.combine(today_start, holiday.datetime_end.time())
start_date = datetime.datetime.combine(
today_start, holiday.datetime_start.time())
end_date = datetime.datetime.combine(
today_start, holiday.datetime_end.time())
event = {
'duration': build_duration(minutes),
'link_when': start_date,
@@ -65,14 +71,16 @@ def get_holidays(worker, date):
def remove_holidays(availability, worker, date):
today_start = datetime.datetime.strptime(date, '%Y-%m-%d').replace(hour=0, minute=0)
today_end = datetime.datetime.strptime(date, '%Y-%m-%d').replace(hour=23, minute=59)
holidays_starting_before = Holiday.objects.filter(person=worker, datetime_start__lte=today_start,
datetime_end__gte=today_start)
holidays_starting_today = Holiday.objects.filter(person=worker, datetime_start__lte=today_end,
datetime_start__gte=today_start)
holidays_ending_today = Holiday.objects.filter(person=worker, datetime_end__lte=today_end,
datetime_end__gte=today_start)
today_start = datetime.datetime.strptime(
date, '%Y-%m-%d').replace(hour=0, minute=0)
today_end = datetime.datetime.strptime(
date, '%Y-%m-%d').replace(hour=23, minute=59)
holidays_starting_before = Holiday.objects.filter(
person=worker, datetime_start__lte=today_start, datetime_end__gte=today_start)
holidays_starting_today = Holiday.objects.filter(
person=worker, datetime_start__lte=today_end, datetime_start__gte=today_start)
holidays_ending_today = Holiday.objects.filter(
person=worker, datetime_end__lte=today_end, datetime_end__gte=today_start)
result = []
timestamps = [{
"time": availability.available_from,
@@ -124,13 +132,17 @@ def get_availabilities(worker, date):
result = []
today = datetime.datetime.strptime(date, '%Y-%m-%d')
weekday = today.weekday() + 1
availabilities = Availability.objects.filter(person=worker, day_number=weekday)
availabilities = Availability.objects.filter(
person=worker, day_number=weekday)
for availability in availabilities:
availabilities_without_holidays = remove_holidays(availability, worker, date)
availabilities_without_holidays = remove_holidays(
availability, worker, date)
for availability_without_holiday in availabilities_without_holidays:
start_date = datetime.datetime.combine(today, availability_without_holiday.available_from)
end_date = datetime.datetime.combine(today, availability_without_holiday.available_till)
start_date = datetime.datetime.combine(
today, availability_without_holiday.available_from)
end_date = datetime.datetime.combine(
today, availability_without_holiday.available_till)
delta = end_date - start_date
minutes = int(delta.total_seconds() / 60)
@@ -156,7 +168,8 @@ def get_conflicts(worker, date):
if appointment.worker_assigned is not None:
link_when = appointment.datetime_when
link_when = link_when.replace(tzinfo=None)
link_end = link_when + datetime.timedelta(minutes=appointment.length)
link_end = link_when + \
datetime.timedelta(minutes=appointment.length)
event = {
'title': appointment.title(),
'duration': appointment.length,
@@ -168,12 +181,15 @@ def get_conflicts(worker, date):
}
result.append(event)
links = AppointmentTypeLink.objects.filter(appointment=appointment).all()
links = AppointmentTypeLink.objects.filter(
appointment=appointment).all()
for j, link in enumerate(links):
link_when = link.date_when
if link_when is not None:
link_when = link_when.replace(tzinfo=None)
link_end = link_when + datetime.timedelta(minutes=link.appointment_type.default_duration)
link_end = link_when + \
datetime.timedelta(
minutes=link.appointment_type.default_duration)
event = {
'title': link.appointment_type.description,
'duration': build_duration(link.appointment_type.default_duration),
@@ -212,7 +228,8 @@ def get_generic_appointment_events(request, date):
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)
link_end = link_when + \
datetime.timedelta(minutes=appointment.length)
event = {
'title': appointment.title(),
'short_title': appointment.title(),
@@ -250,6 +267,7 @@ def events(request, date):
'appointment_id': appointment.id,
'color': RANDOM_COLORS[i],
'start': appointment.datetime_when.replace(tzinfo=None).strftime("%H:%M"),
'flags': [language.image.url for language in appointment_subject.subject.languages.all()],
# this indicates only location of the first appointment
# (there is small chance to have two appointments in two different places at the same day)
'location': str(appointment.location),
@@ -257,13 +275,16 @@ def events(request, date):
}
subjects[appointment_subject.id] = subject
links = AppointmentTypeLink.objects.filter(appointment=appointment).all()
links = AppointmentTypeLink.objects.filter(
appointment=appointment).all()
for j, link in enumerate(links):
link_when = link.date_when
link_end = None
if link_when is not None:
link_when = link_when.replace(tzinfo=None)
link_end = link_when + datetime.timedelta(minutes=link.appointment_type.default_duration)
link_end = link_when + \
datetime.timedelta(
minutes=link.appointment_type.default_duration)
event = {
'title': link.appointment_type.description,
'short_title': link.appointment_type.code,
@@ -330,13 +351,16 @@ 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')
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')
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 = 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()
@@ -349,11 +373,13 @@ def events_persist(request):
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 = 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'))
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
Loading