]> git.parisson.com Git - mezzo.git/commitdiff
[Timesheet] : calculate nb of leaved days
authorEmilie <zawadzki@ircam.fr>
Wed, 28 Dec 2016 15:57:58 +0000 (16:57 +0100)
committerEmilie <zawadzki@ircam.fr>
Wed, 28 Dec 2016 15:57:58 +0000 (16:57 +0100)
app/organization/network/api.py
app/organization/network/management/commands/import-figgo-id.py

index e84d1ed7b553bfd73646ca1371910df0d4da1626..481b91936daaef24c512f71e8e667321fc7ca854 100644 (file)
@@ -5,14 +5,42 @@ from django.conf import settings
 from datetime import date, timedelta
 
 
-def get_active_person():
-    r_p_active = requests.get(settings.FIGGO_API_URL_PROD+'api/users?fields=id,lastname,firstname',
-    headers={'Authorization': settings.FIGGO_API_HEADER_AUTH})
-    return r_p_active.json()
+def figgo_request(method):
+    """generic method to call Figgo API"""
+    return requests.get(settings.FIGGO_API_URL_PROD+method, headers={'Authorization': settings.FIGGO_API_HEADER_AUTH})
 
-def get_inactive_person():
+
+def get_active_persons():
+    r_p_active = figgo_request('api/users?fields=id,lastname,firstname')
+    r_p_active = r_p_active.json()
+    return r_p_active['data']
+
+
+def get_inactive_persons():
     yesterday = date.today() - timedelta(1)
     yesterday = yesterday.isoformat()
-    r_p_inactive = requests.get(settings.FIGGO_API_URL_PROD+'api/users?dtContractEnd=until,'+yesterday+',null&fields=id,lastname,firstname',
-    headers={'Authorization': settings.FIGGO_API_HEADER_AUTH})
-    return r_p_inactive.json()
+    r_p_inactive = figgo_request('api/users?dtContractEnd=until,'+yesterday+',null&fields=id,lastname,firstname')
+    r_p_inactive = r_p_inactive.json()
+    return r_p_inactive['data']
+
+
+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 = leave_periods.json()
+    return leave_periods['data']
+
+
+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
+    """
+    leave_periods = get_leave_periods(date_from, date_to, person_external_id)
+    days = 0
+    for leave_period in leave_periods:
+        if leave_period['status'] == 1:
+            if leave_period['leaveScope'] == 'PM' or leave_period['leaveScope'] == 'AM':
+                days += 0.5
+            if leave_period['leaveScope'] == 'ALL':
+                days += 1
+    return days
index 70d477541b28bd50f0f8bc05e1d758367939aaa3..63662d53698f74cd049f5765962c40376c9c81b6 100644 (file)
@@ -34,17 +34,17 @@ class Command(BaseCommand):
     number_of_person = 0
     def handle(self, *args, **options):
         # process active person
-        self.update_external_id(get_active_person())
+        self.update_external_id(get_active_persons())
 
         # process INactive person
-        self.update_external_id(get_inactive_person())
+        self.update_external_id(get_inactive_persons())
 
         print('***************************************************')
         print("Number of person processed : "+str(self.number_of_person))
         print('***************************************************')
 
     def update_external_id(self, figgo_users):
-        for figgo_user in figgo_users['data']:
+        for figgo_user in figgo_users:
             slug = slugify(figgo_user['firstName']+'-'+figgo_user['lastName'])
             person = Person.objects.filter(slug__contains=slug)
             if person: