]> git.parisson.com Git - mezzo.git/commitdiff
[Timesheet] : clean + improve admin view
authorEmilie <zawadzki@ircam.fr>
Wed, 28 Dec 2016 11:29:15 +0000 (12:29 +0100)
committerEmilie <zawadzki@ircam.fr>
Wed, 28 Dec 2016 11:29:15 +0000 (12:29 +0100)
app/local_settings.py
app/organization/core/admin.py
app/organization/network/admin.py
app/organization/network/api.py [new file with mode: 0644]
app/organization/network/management/commands/import-figgo-id.py
app/organization/network/management/commands/import-ircam-matricule.py

index 3664849ce8a77e744414b7c0189f5b7b0bfa4a77..80b966316706e7d2e8812193b4e09287d9043c81 100644 (file)
@@ -267,3 +267,4 @@ FORMAT_MODULE_PATH = [
 
 # FIGGO API - Lucca
 FIGGO_API_URL_PROD='https://ircam.ilucca.net/'
+FIGGO_API_HEADER_AUTH='Lucca application=bd6d5481-40eb-414b-9135-434e12749223'
index a44ec113d32008fa5aec8663980a07f7ff8326dd..88d6b8d7c9856aaa81a1f11ce6daf70f445b77d6 100644 (file)
@@ -27,6 +27,7 @@ from organization.core.models import *
 from mezzanine.blog.models import BlogPost
 from mezzanine.generic.models import ThreadedComment, Keyword
 from mezzanine.conf import settings
+from django.contrib.admin import SimpleListFilter
 
 
 class KeywordAdmin(BaseTranslationModelAdmin):
@@ -53,6 +54,29 @@ class BaseTranslationOrderedModelAdmin(BaseTranslationModelAdmin):
         return res
 
 
+class NullListFilter(SimpleListFilter):
+    """Class to filter by null or not null any field in admin"""
+    def lookups(self, request, model_admin):
+        return (
+            ('1', 'Null', ),
+            ('0', '!= Null', ),
+        )
+
+    def queryset(self, request, queryset):
+        if self.value() in ('0', '1'):
+            kwargs = { '{0}__isnull'.format(self.parameter_name) : self.value() == '1' }
+            return queryset.filter(**kwargs)
+        return queryset
+
+
+def null_filter(field, title_=None):
+    """Helper to filter by null or not null any field in admin"""
+    class NullListFieldFilter(NullListFilter):
+        parameter_name = field
+        title = title_ or parameter_name
+    return NullListFieldFilter
+
+
 admin.site.register(LinkType)
 admin.site.unregister(BlogPost)
 admin.site.unregister(ThreadedComment)
index f9a8b6bfddd47e9984e7b6486adb2804f5b65f2b..87ecff89651d50bd7ce9b81efeb853af2b7f5225 100644 (file)
@@ -188,11 +188,19 @@ class PersonAdmin(BaseTranslationOrderedModelAdmin):
                PersonActivityInline,]
     first_fields = ['last_name', 'first_name', 'title', 'gender', 'user']
     search_fields = ['last_name', 'first_name']
-    list_display = [ 'last_name', 'first_name', 'register_id', 'external_id', 'email', 'gender', 'created']
+    list_display = [ 'last_name', 'first_name', 'register_id', 'external_id', 'email', 'last_weekly_hour_volume', 'gender', 'created']
     list_filter = ['person_title', 'activities__date_from', 'activities__date_to',
                     'activities__is_permanent', 'activities__framework', 'activities__grade',
-                    'activities__status', 'activities__teams', 'activities__projects']
-
+                    'activities__status', 'activities__teams', 'activities__projects',
+                    'activities__weekly_hour_volume', null_filter('register_id'), null_filter('external_id')]
+
+    def last_weekly_hour_volume(self, instance):
+        last_activity = instance.activities.first()
+        weekly_hour_volume = '-'
+        if hasattr(last_activity, 'weekly_hour_volume'):
+            if last_activity.weekly_hour_volume.__str__() != 'None':
+                weekly_hour_volume = last_activity.weekly_hour_volume.__str__()
+        return weekly_hour_volume
 
 class PersonActivityAdmin(BaseTranslationModelAdmin):
 
diff --git a/app/organization/network/api.py b/app/organization/network/api.py
new file mode 100644 (file)
index 0000000..e84d1ed
--- /dev/null
@@ -0,0 +1,18 @@
+# Figgo API consumption
+
+import requests
+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 get_inactive_person():
+    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()
index 5d07c894fa2faa2f66d78399050d5fca7ace877d..70d477541b28bd50f0f8bc05e1d758367939aaa3 100644 (file)
@@ -24,6 +24,7 @@ from optparse import make_option
 from django.conf import settings
 from django.core.management.base import BaseCommand, CommandError
 from organization.network.models import Person
+from organization.network.api import *
 from django.utils.text import slugify
 
 class Command(BaseCommand):
@@ -33,14 +34,10 @@ class Command(BaseCommand):
     number_of_person = 0
     def handle(self, *args, **options):
         # process active person
-        r_p_active = requests.get(settings.FIGGO_API_URL_PROD+'api/users?fields=id,lastname,firstname',
-        headers={'Authorization': 'Lucca application=bd6d5481-40eb-414b-9135-434e12749223'})
-        self.update_external_id(r_p_active.json())
+        self.update_external_id(get_active_person())
 
         # process INactive person
-        r_p_inactive = requests.get(settings.FIGGO_API_URL_PROD+'api/users?dtContractEnd=until,2016-12-31,null&fields=id,lastname,firstname',
-        headers={'Authorization': 'Lucca application=bd6d5481-40eb-414b-9135-434e12749223'})
-        self.update_external_id(r_p_inactive.json())
+        self.update_external_id(get_inactive_person())
 
         print('***************************************************')
         print("Number of person processed : "+str(self.number_of_person))
index be38a45fda37ff2cb9b3b54a7e248ee239963fff..fbe98d380aba99ea76851c9ee85d5031a5b48c79 100644 (file)
@@ -19,7 +19,6 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
-import requests
 import os
 import unicodedata
 import xlrd