A more "service orientated" view
This commit is contained in:
parent
42fb686758
commit
134d04dc80
|
@ -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)
|
||||
|
|
|
@ -19,7 +19,8 @@
|
|||
<metal:main fill-slot="main">
|
||||
<tal:main-macro metal:define-macro="main"
|
||||
tal:define="kssClassesView context/@@kss_field_decorator_view;
|
||||
getKssClasses nocall:kssClassesView/getKssClassesInlineEditable;">
|
||||
getKssClasses nocall:kssClassesView/getKssClassesInlineEditable;
|
||||
service python:context.REQUEST.get('service')">
|
||||
|
||||
<div tal:replace="structure provider:plone.abovecontenttitle" />
|
||||
<h1 metal:use-macro="here/kss_generic_macros/macros/generic_title_view">
|
||||
|
@ -35,12 +36,44 @@
|
|||
Description
|
||||
</div>
|
||||
|
||||
<ul>
|
||||
<li tal:repeat="entry python: context.getEntries()">
|
||||
<span tal:replace="entry/givenName">givenName</span>
|
||||
<span tal:replace="entry/sn">sn</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div tal:condition="python: not(service)">
|
||||
<h2>Secrétaire Général</h2>
|
||||
<ul>
|
||||
<li tal:repeat="entry python: [context.getSecretaireGeneral()]">
|
||||
<span tal:replace="entry/givenName">givenName</span>
|
||||
<span tal:replace="entry/sn">sn</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>Services</h2>
|
||||
<ul>
|
||||
<li tal:repeat="service python: context.getServices()">
|
||||
<a tal:attributes="href string:?service=${service}" tal:content="service">service</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div tal:condition="python: not(not(service))">
|
||||
<h2 tal:content="python: service">service name</h2>
|
||||
<ul>
|
||||
<li tal:repeat="entry python: context.getServiceManagers(service)">
|
||||
<span tal:replace="entry/givenName">givenName</span>
|
||||
<span tal:replace="entry/sn">sn</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul tal:repeat="cellule python: context.getCellules(service)">
|
||||
<a href="xx" tal:content="cellule">cellule</a>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li tal:repeat="entry python: context.getServiceNonManagers(service)">
|
||||
<span tal:replace="entry/givenName">givenName</span>
|
||||
<span tal:replace="entry/sn">sn</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div tal:replace="structure provider:plone.belowcontentbody" />
|
||||
</tal:main-macro>
|
||||
|
|
Reference in New Issue