]> git.parisson.com Git - mezzo.git/commitdiff
[Timesheet] : calculate half days not worked in a week
authorEmilie <zawadzki@ircam.fr>
Thu, 29 Dec 2016 14:58:34 +0000 (15:58 +0100)
committerEmilie <zawadzki@ircam.fr>
Thu, 29 Dec 2016 14:58:34 +0000 (15:58 +0100)
app/organization/network/api.py

index 481b91936daaef24c512f71e8e667321fc7ca854..efcc2ac56d666cf4596beaa1f7e45d672b6619aa 100644 (file)
@@ -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