From 134d04dc808a09ee385fe831199d5cbef51a38d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Mon, 2 Nov 2009 15:17:40 +0100 Subject: [PATCH] A more "service orientated" view --- PcfAnnuaire.py | 58 +++++++++++++++++++++++++-- skins/pcfannuaire/pcfannuaire_view.pt | 47 ++++++++++++++++++---- 2 files changed, 95 insertions(+), 10 deletions(-) diff --git a/PcfAnnuaire.py b/PcfAnnuaire.py index 9aa808f..8541f67 100644 --- a/PcfAnnuaire.py +++ b/PcfAnnuaire.py @@ -15,14 +15,18 @@ from Acquisition import aq_base schema = BaseSchema +def get_sn(x): + return getattr(x, 'sn') class PcfAnnuaireEntry: - def __init__(self, ldap_entry): + def __init__(self, ldap_dn, ldap_entry): def get_attr(x): try: return ldap_entry.get(x)[0] except (IndexError, TypeError): return None + self._debug_entry = ldap_entry + self.dn = ldap_dn self.cn = get_attr('cn') self.sn = get_attr('sn') self.telephoneNumbers = ldap_entry.get('telephoneNumber') @@ -32,7 +36,8 @@ class PcfAnnuaireEntry: self.shortTelephoneNumber = None self.givenName = get_attr('givenName') self.mobile = get_attr('mobile') - self.building = get_attr('location') + self.service = get_attr('department') + self.building = get_attr('destinationIndicator') self.floor = get_attr('extensionAttribute1') self.office = get_attr('physicalDeliveryOfficeName') self.fax = get_attr('facsimileTelephoneNumber') @@ -40,6 +45,7 @@ class PcfAnnuaireEntry: self.division = get_attr('division') self.title = get_attr('title') self.company = get_attr('company') + self.manager = get_attr('manager') class PcfAnnuaireService: pass @@ -72,7 +78,7 @@ class PcfAnnuaire(BaseContent): ldap_conn = self.get_ldap_conn() result = ldap_conn.search_s(self.get_users_base(), ldap.SCOPE_SUBTREE, 'objectClass=person') - return [PcfAnnuaireEntry(x[1]) for x in result] + return [PcfAnnuaireEntry(*x) for x in result] def getEntries(self): return [x for x in self.getObjectEntries() if \ @@ -102,4 +108,50 @@ class PcfAnnuaire(BaseContent): def get_sn(x): return getattr(x, 'sn') return sorted([x for x in self.getEntries() if x.telephoneNumbers], key=get_sn) + def getSecretaireGeneral(self): + try: + return [x for x in self.getEntries() if x.title == 'Secrétaire Général'][0] + except IndexError: + raise KeyError + + def getServices(self): + services = {} + for entry in self.getEntries(): + services[entry.service] = True + services = sorted(services.keys()) + return services + + def getServiceManagers(self, service): + sec_gen = self.getSecretaireGeneral() + entries = [x for x in self.getEntries() if x.service == service and x.manager == sec_gen.dn] + return sorted(entries, key=get_sn) + + def getServiceNonManagers(self, service): + service_managers = [x.dn for x in self.getServiceManagers(service)] + entries = [x for x in self.getEntries() if \ + x.service == service and x.manager in service_managers and not x.division] + return sorted(entries, key=get_sn) + + def getCellules(self, service): + service_managers = [x.dn for x in self.getServiceManagers(service)] + entries = [x for x in self.getEntries() if x.manager in service_managers] + cells = {} + for entry in entries: + if entry.division: + cells[entry.division] = True + cells = sorted(cells.keys()) + return cells + + def getCelluleManager(self, cellule): + entries = [x for x in self.getEntries() if x.division == cellule] + dns = [x.dn for x in entries] + manager = [x for x in entries if x.manager not in dns][0] + return manager + + def getCellulePeople(self, cellule): + entries = [x for x in self.getEntries() if x.division == cellule] + cellule_manager = self.getCelluleManager() + return sorted(entries, key=get_sn) + + registerType(PcfAnnuaire) diff --git a/skins/pcfannuaire/pcfannuaire_view.pt b/skins/pcfannuaire/pcfannuaire_view.pt index d95cc46..38baf5d 100644 --- a/skins/pcfannuaire/pcfannuaire_view.pt +++ b/skins/pcfannuaire/pcfannuaire_view.pt @@ -19,7 +19,8 @@ + getKssClasses nocall:kssClassesView/getKssClassesInlineEditable; + service python:context.REQUEST.get('service')">

@@ -35,12 +36,44 @@ Description

-
    -
  • - givenName - sn -
  • -
+
+

Secrétaire Général

+
    +
  • + givenName + sn +
  • +
+ +

Services

+ +
+ +
+

service name

+
    +
  • + givenName + sn +
  • +
+ + + +
    +
  • + givenName + sn +
  • +
+ +