Ajout d'un outil d'extraction de l'annuaire vers un fichier CSV.
authorProgfou <jean-christophe.andre@auf.org>
Wed, 17 May 2017 23:40:49 +0000 (19:40 -0400)
committerProgfou <jean-christophe.andre@auf.org>
Wed, 17 May 2017 23:40:49 +0000 (19:40 -0400)
auf-annuaire2csv [new file with mode: 0755]

diff --git a/auf-annuaire2csv b/auf-annuaire2csv
new file mode 100755 (executable)
index 0000000..2f668cb
--- /dev/null
@@ -0,0 +1,122 @@
+#!/usr/bin/python3
+"""Outil d'extraction de l'annuaire AuF vers un fichier CSV.
+
+Copyright ©2017  Agence universitaire de la Francophonie
+Licence : GPL version 3
+Auteur : Progfou <jean-christophe.andre@auf.org>
+
+Dépendances Debian : python >= 3, auf-refer
+
+Usage :
+
+  auf-annuaire2csv > /tmp/annuaire-auf.csv
+"""
+import sys
+import csv
+import aufrefer
+from unicodedata import normalize
+
+# constantes
+TENANT = 'auforg.onmicrosoft.com'
+FIELDS = [
+    'DisplayName',          # ADM Florian Desbiens
+    'FirstName',            # Florian
+    'LastName',             # Desbiens
+    'UserPrincipalName',    # fdesbiens@auforg.onmicrosoft.com
+    'Department',           # AUF
+    'Title',                # Prestataire
+    'Office',               # Paris 1er Etage
+    'PhoneNumber',          # 11.22.33.44.55
+    'MobilePhone',          # 06.05.04.03.02
+    'Fax',                  # 01.02.03.04.05
+    'PostalCode',           # 75009
+    'City',                 # Paris
+    'StreetAddress',        # 15-17 Rue Auber
+    'State',                # France
+]
+
+# récupération des référentiels
+annuaire = {
+    x['adel']: x for x in aufrefer.get('annuaire.json')
+}
+employes = aufrefer.get('datamaster-employe.json')
+implantations = {
+    x['id']: x for x in aufrefer.get('datamaster-implantation.json')
+}
+pays = aufrefer.get('iso-3166-fr.json')
+
+# préparation des donnéees
+rows = [FIELDS]
+for employe in employes:
+    id_implantation = employe['implantation_physique']
+    # gestion d'une implantation qui manque
+    try:
+        implantation = implantations[id_implantation]
+    except KeyError:
+        print("\033[31mERREUR\033[m: employé {id} ({nom} {prenom}) : "\
+              "implantation {implantation_physique} manquante.".format(**employe), file=sys.stderr)
+        implantation = {
+            'nom': 'INCONNU ({})'.format(id_implantation),
+            'telephone': '',
+            'fax': '',
+            'adresse_physique_code_postal': '',
+            'adresse_physique_ville': 'INCONNU',
+            'adresse_physique_rue': '',
+            'adresse_physique_no': '',
+            'adresse_physique_pays': 'INCONNU',
+            'adresse_physique_region': '',
+        }
+    # gestion d'une adél qui manque
+    if not employe['courriel']:
+        prenom = employe['prenom'].lower().replace(' ','-')
+        nom = employe['nom'].lower().replace(' ','-')
+        employe['courriel'] = prenom + '.' + nom + '@auf.org'
+        print("\033[31mERREUR\033[m: employé {id} ({nom} {prenom}) : "\
+              "adél manquante, remplacée par {courriel}.".format(**employe), file=sys.stderr)
+    # gestion d'un nom d'affichage qui manque
+    try:
+        employe['nom_affichage'] = annuaire[employe['courriel']]['nom']
+    except KeyError:
+        employe['nom_affichage'] = ''
+    if not employe['nom_affichage']:
+        employe['nom_affichage'] = employe['prenom'] + ' ' + employe['nom']
+        #print("\033[33mAVERTISSEMENT\033[m: employé {id} ({nom} {prenom}) : "\
+        #      "nom d'affichage manquant, remplacé par {nom_affichage}.".format(**employe), file=sys.stderr)
+    # préparation des infos
+    info = {}
+    info['DisplayName'] = employe['nom_affichage']
+    info['FirstName'] = employe['prenom']
+    info['LastName'] = employe['nom']
+    info['UserPrincipalName'] = employe['courriel'].replace('@auf.org','@'+TENANT)
+    info['Department'] = 'AUF'
+    info['Title'] = employe['fonction']
+    info['Office'] = implantation['nom']
+    info['PhoneNumber'] = implantation['telephone']
+    if employe['telephone_poste']:
+        info['PhoneNumber'] += ', poste ' + employe['telephone_poste']
+    info['MobilePhone'] = employe['telephone_ip']
+    info['Fax'] = implantation['fax']
+    info['PostalCode'] = implantation['adresse_physique_code_postal']
+    info['City'] = implantation['adresse_physique_ville']
+    # https://fr.wikipedia.org/wiki/Hanoï
+    if info['City'] == 'Hanoi':
+        info['City'] = 'Hanoï'
+    # https://fr.wikipedia.org/wiki/Hô-Chi-Minh-Ville
+    if info['City'] == 'Hô Chi Minh Ville':
+        info['City'] = 'Hô-Chi-Minh-Ville'
+    info['StreetAddress'] = implantation['adresse_physique_rue']
+    if implantation['adresse_physique_no']:
+        info['StreetAddress'] = implantation['adresse_physique_no'] + ' ' + info['StreetAddress']
+    info['State'] = pays.get(implantation['adresse_physique_pays'], 'INCONNU')
+    if implantation['adresse_physique_region']:
+        info['State'] = implantation['adresse_physique_region'] + ', ' + info['State']
+    # ajout de la ligne
+    row = [info[field] for field in FIELDS]
+    rows.append(row)
+
+# production du fichier CSV
+#writer = csv.writer(sys.stdout, delimiter=';', quotechar='"')
+writer = csv.writer(sys.stdout, dialect='excel', quoting=csv.QUOTE_ALL)
+writer.writerows(rows)
+sys.stdout.flush()
+sys.exit(0)