add template for commissions, listing recent meetings (#911)
This commit is contained in:
parent
004b97b13b
commit
cde55919ba
|
@ -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>
|
|
@ -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]
|
|
@ -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"
|
||||
|
|
Reference in New Issue