From ee0711782b44f9f4edb484040dfbbbf81680c3fe Mon Sep 17 00:00:00 2001 From: Emilie Date: Thu, 29 Dec 2016 15:58:34 +0100 Subject: [PATCH] [Timesheet] : calculate half days not worked in a week --- app/organization/network/api.py | 45 ++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/app/organization/network/api.py b/app/organization/network/api.py index 481b9193..efcc2ac5 100644 --- a/app/organization/network/api.py +++ b/app/organization/network/api.py @@ -1,9 +1,18 @@ # Figgo API consumption import requests +import time from django.conf import settings -from datetime import date, timedelta +from datetime import date, datetime, timedelta +import dateutil.parser +WEEK_DAYS = { + 1:'monday', + 2:'tuesday', + 3:'wednesday', + 4:'thursday', + 5:'friday' +} def figgo_request(method): """generic method to call Figgo API""" @@ -25,7 +34,7 @@ def get_inactive_persons(): def get_leave_periods(date_from, date_to, person_external_id): - leave_periods = figgo_request('api/leaves?date=between,'+date_from+','+date_to+'&fields=owner.name,owner.login,owner.mail,owner.matricule,name,date,status,leaveScope&owner.id='+str(person_external_id)) + leave_periods = figgo_request('api/leaves?date=between,'+date_from+','+date_to+'&fields=owner.name,owner.login,owner.mail,owner.matricule,duration,name,date,status,leaveScope&owner.id='+str(person_external_id)) leave_periods = leave_periods.json() return leave_periods['data'] @@ -33,14 +42,36 @@ def get_leave_periods(date_from, date_to, person_external_id): def get_leave_days(date_from, date_to, person_external_id): """Calculate the number of validated leaving days. It takes in account half days. - Return float value + Return a dictionary of half days not worked in a week. + Example : + { + "wednesday_am": 2, + "monday_pm": 1, + "friday_am": 2, + "thursday_am": 3, + } """ leave_periods = get_leave_periods(date_from, date_to, person_external_id) - days = 0 + days_dict = {} for leave_period in leave_periods: + # if leave period has been validated if leave_period['status'] == 1: + day_week = dateutil.parser.parse(leave_period['date']).isoweekday() + # morning or evening if leave_period['leaveScope'] == 'PM' or leave_period['leaveScope'] == 'AM': - days += 0.5 + key = WEEK_DAYS[day_week]+"_"+leave_period['leaveScope'].lower() + days_dict = increment_day(key, days_dict) + # whole day = morning + evening if leave_period['leaveScope'] == 'ALL': - days += 1 - return days + key_am = WEEK_DAYS[day_week]+"_am" + days_dict = increment_day(key_am, days_dict) + key_pm = WEEK_DAYS[day_week]+"_pm" + days_dict = increment_day(key_pm, days_dict) + return days_dict + +def increment_day(key, dt): + if key in dt: + dt[key] += 1 + else : + dt[key] = 1 + return dt -- 2.39.5