add template for commissions, listing recent meetings (#911)

This commit is contained in:
Frédéric Péters 2011-11-16 15:52:27 +01:00
parent 004b97b13b
commit cde55919ba
3 changed files with 182 additions and 0 deletions

View File

@ -0,0 +1,103 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
lang="fr"
metal:use-macro="context/main_template/macros/master"
i18n:domain="tabellio.pcfviews">
<body>
<metal:main fill-slot="main">
<tal:main-macro metal:define-macro="main">
<div tal:replace="structure provider:plone.abovecontenttitle" />
<h1 metal:use-macro="context/kss_generic_macros/macros/generic_title_view">Title</h1>
<div tal:replace="structure provider:plone.belowcontenttitle" />
<div tal:replace="structure provider:plone.abovecontentbody" />
<div tal:condition="context/competences">
<h2>Compétences</h2>
<ul>
<li tal:repeat="item context/competences" tal:content="item">item</li>
</ul>
</div>
<div tal:condition="context/ministries">
<h3 tal:condition="python: len(context.ministries) == 1">Ministre compétent :</h3>
<h3 tal:condition="python: len(context.ministries) > 1">Ministres compétents :</h3>
<ul>
<li tal:repeat="item context/ministries" tal:content="item/to_object/Title">item</li>
</ul>
</div>
<h2>Composition</h2>
<h3>Président(e)</h3>
<div class="commission-people-group" tal:repeat="polgroup view/presidence_polgroups">
<span tal:attributes="class string:polgroup polgroup-${polgroup/getId}"
tal:content="polgroup/Title"/>
<ul>
<li tal:repeat="member python: view.presidence_members(polgroup)"><a
tal:attributes="href member/absolute_url"
tal:content="member/Title">member</a></li>
</ul>
</div>
<div tal:condition="context/vicepresidents">
<h3>Vice Président(e)s</h3>
<div class="commission-people-group" tal:repeat="polgroup view/vicepresidence_polgroups">
<span tal:attributes="class string:polgroup polgroup-${polgroup/getId}"
tal:content="polgroup/Title"/>
<ul>
<li tal:repeat="member python: view.vicepresidence_members(polgroup)"><a
tal:attributes="href member/absolute_url"
tal:content="member/Title">member</a></li>
</ul>
</div>
</div>
<div tal:condition="context/members">
<h3>Membres effectifs/ves</h3>
<div class="commission-people-group" tal:repeat="polgroup view/members_polgroups">
<span tal:attributes="class string:polgroup polgroup-${polgroup/getId}"
tal:content="polgroup/Title"/>
<ul>
<li tal:repeat="member python: view.members_members(polgroup)"><a
tal:attributes="href member/absolute_url"
tal:content="member/Title">member</a></li>
</ul>
</div>
</div>
<div tal:condition="context/substitutes">
<h3>Membres suppléant(e)s</h3>
<div class="commission-people-group" tal:repeat="polgroup view/substitutes_polgroups">
<span tal:attributes="class string:polgroup polgroup-${polgroup/getId}"
tal:content="polgroup/Title"/>
<ul>
<li tal:repeat="member python: view.substitutes_members(polgroup)"><a
tal:attributes="href member/absolute_url"
tal:content="member/Title">member</a></li>
</ul>
</div>
</div>
<tal:block tal:define="meetings view/get_meetings" tal:condition="meetings">
<h2>Dernières réunions</h2>
<ul>
<li tal:repeat="item meetings"><a tal:attributes="href item/getURL" tal:content="python: item.getObject().shortdatetime"/></li>
</ul>
</tal:block>
<div tal:replace="structure provider:plone.belowcontentbody" />
</tal:main-macro>
</metal:main>
</body>
</html>

View File

@ -0,0 +1,71 @@
# -*- coding: utf-8 -*-
from zope import component
from zc.relation.interfaces import ICatalog
from zope.app.intid.interfaces import IIntIds
from Products.CMFCore.utils import getToolByName
from Products.Five import BrowserView
from themis.fields.vocabs import cmp_person
class View(BrowserView):
def presidence_polgroups(self):
return [self.context.president.to_object.polgroup.to_object]
def presidence_members(self, polgroup):
return [self.context.president.to_object]
def list_polgroups(self, list):
d = {}
polgroups = {}
for member in list:
polgroup = member.to_object.polgroup.to_object
polgroup_id = polgroup.id
polgroups[polgroup.id] = polgroup
if not polgroup_id in d:
d[polgroup_id] = 0
d[polgroup_id] = d[polgroup_id] + 1
items = d.items()
items.sort(lambda x,y: cmp(x[1], y[1]))
items.reverse()
return [polgroups.get(x[0]) for x in items]
def vicepresidence_polgroups(self):
return self.list_polgroups(self.context.vicepresidents)
def vicepresidence_members(self, polgroup):
return sorted([x.to_object for x in self.context.vicepresidents
if x.to_object.polgroup.to_object == polgroup], cmp_person)
def members_polgroups(self):
return self.list_polgroups(self.context.members)
def members_members(self, polgroup):
return sorted([x.to_object for x in self.context.members
if x.to_object.polgroup.to_object == polgroup], cmp_person)
def substitutes_polgroups(self):
return self.list_polgroups(self.context.substitutes)
def substitutes_members(self, polgroup):
return sorted([x.to_object for x in self.context.substitutes
if x.to_object.polgroup.to_object == polgroup], cmp_person)
def get_meetings(self):
intids = component.getUtility(IIntIds)
catalog = component.getUtility(ICatalog)
try:
com_intid = intids.getId(self.context)
except KeyError:
intids.register(self.context)
com_intid = intids.get(self.context)
# objects created from relations do not have a working absolute_url()
# method; so we get ids and go through the catalog do fetch appropriate
# brains.
meeting_ids = [x.from_object.id for x in catalog.findRelations(
{'to_id': com_intid, 'from_attribute': 'commission'})]
portal_catalog = getToolByName(self.context, 'portal_catalog')
return portal_catalog(portal_type='tabellio.agenda.comevent',
id=meeting_ids,
sort_on='start', sort_order='descending')[:10]

View File

@ -44,6 +44,14 @@
permission="zope2.View"
/>
<browser:page
for="themis.datatypes.commission.ICommission"
name="view"
class=".commission.View"
template="commission.pt"
permission="zope2.View"
/>
<genericsetup:registerProfile
name="default"
title="tabellio.pcfviews"