From: Emilie Date: Wed, 28 Dec 2016 11:29:15 +0000 (+0100) Subject: [Timesheet] : clean + improve admin view X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=187b35491d37b6bdd65032ed1c7977f4cf85ba34;p=mezzo.git [Timesheet] : clean + improve admin view --- diff --git a/app/local_settings.py b/app/local_settings.py index 3664849c..80b96631 100644 --- a/app/local_settings.py +++ b/app/local_settings.py @@ -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' diff --git a/app/organization/core/admin.py b/app/organization/core/admin.py index a44ec113..88d6b8d7 100644 --- a/app/organization/core/admin.py +++ b/app/organization/core/admin.py @@ -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) diff --git a/app/organization/network/admin.py b/app/organization/network/admin.py index f9a8b6bf..87ecff89 100644 --- a/app/organization/network/admin.py +++ b/app/organization/network/admin.py @@ -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 index 00000000..e84d1ed7 --- /dev/null +++ b/app/organization/network/api.py @@ -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() diff --git a/app/organization/network/management/commands/import-figgo-id.py b/app/organization/network/management/commands/import-figgo-id.py index 5d07c894..70d47754 100644 --- a/app/organization/network/management/commands/import-figgo-id.py +++ b/app/organization/network/management/commands/import-figgo-id.py @@ -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)) diff --git a/app/organization/network/management/commands/import-ircam-matricule.py b/app/organization/network/management/commands/import-ircam-matricule.py index be38a45f..fbe98d38 100644 --- a/app/organization/network/management/commands/import-ircam-matricule.py +++ b/app/organization/network/management/commands/import-ircam-matricule.py @@ -19,7 +19,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import requests import os import unicodedata import xlrd