work in progress: meeting minutes: additional fields, improved layout
This commit is contained in:
parent
4cb27a1e4a
commit
0700bb971b
7 changed files with 174 additions and 78 deletions
Binary file not shown.
|
@ -3,7 +3,7 @@ msgstr ""
|
||||||
|
|
||||||
"Project-Id-Version: $Id$\n"
|
"Project-Id-Version: $Id$\n"
|
||||||
"POT-Creation-Date: 2007-05-22 12:00 CET\n"
|
"POT-Creation-Date: 2007-05-22 12:00 CET\n"
|
||||||
"PO-Revision-Date: 2012-07-17 12:00 CET\n"
|
"PO-Revision-Date: 2012-07-26 12:00 CET\n"
|
||||||
"Last-Translator: Helmut Merz <helmutm@cy55.de>\n"
|
"Last-Translator: Helmut Merz <helmutm@cy55.de>\n"
|
||||||
"Language-Team: loops developers <helmutm@cy55.de>\n"
|
"Language-Team: loops developers <helmutm@cy55.de>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
@ -296,6 +296,9 @@ msgstr "Besprechungsprotokoll für dieses Objekt anzeigen."
|
||||||
msgid "Download Meeting Minutes"
|
msgid "Download Meeting Minutes"
|
||||||
msgstr "Besprechungsprotokoll generieren"
|
msgstr "Besprechungsprotokoll generieren"
|
||||||
|
|
||||||
|
msgid "Copy Agenda Items"
|
||||||
|
msgstr "Tagesordnungspunkte kopieren"
|
||||||
|
|
||||||
msgid "Participants"
|
msgid "Participants"
|
||||||
msgstr "Teilnehmer"
|
msgstr "Teilnehmer"
|
||||||
|
|
||||||
|
@ -303,7 +306,7 @@ msgid "The names of the persons taking part in the event."
|
||||||
msgstr "Die Namen der Personen, die an der Besprechung teilnehmen."
|
msgstr "Die Namen der Personen, die an der Besprechung teilnehmen."
|
||||||
|
|
||||||
msgid "label_responsible"
|
msgid "label_responsible"
|
||||||
msgstr "Vortragender"
|
msgstr "Vortragende/r"
|
||||||
|
|
||||||
msgid "desc_responsible"
|
msgid "desc_responsible"
|
||||||
msgstr "Person, die diesen Tagesordnungpunkt vertritt."
|
msgstr "Person, die diesen Tagesordnungpunkt vertritt."
|
||||||
|
@ -315,10 +318,19 @@ msgid "desc_discussion"
|
||||||
msgstr "Diskussion"
|
msgstr "Diskussion"
|
||||||
|
|
||||||
msgid "label_consequences"
|
msgid "label_consequences"
|
||||||
msgstr "Schlussfolgerungen"
|
msgstr "Schlussfolgerung"
|
||||||
|
|
||||||
msgid "desc_consequences"
|
msgid "desc_consequences"
|
||||||
msgstr "Schlussfolgerungen"
|
msgstr "Schlussfolgerung"
|
||||||
|
|
||||||
|
msgid "header_workitems"
|
||||||
|
msgstr "Aufgaben"
|
||||||
|
|
||||||
|
msgid "header_responsible"
|
||||||
|
msgstr "zuständig"
|
||||||
|
|
||||||
|
msgid "header_deadline"
|
||||||
|
msgstr "Termin"
|
||||||
|
|
||||||
msgid "Task/Action"
|
msgid "Task/Action"
|
||||||
msgstr "Aufgabe"
|
msgstr "Aufgabe"
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
<input type="hidden" name="form.action"
|
<input type="hidden" name="form.action"
|
||||||
tal:attributes="value view/form_action" />
|
tal:attributes="value view/form_action" />
|
||||||
<metal:data use-macro="view/fieldRenderers/fields" />
|
<metal:data use-macro="view/fieldRenderers/fields" />
|
||||||
<h3 i18n:translate="">Tasks</h3>
|
<br />
|
||||||
<tal:tasks define="report item/reportInstance;
|
<tal:tasks define="report item/reportInstance;
|
||||||
reportView nocall:item;
|
reportView nocall:item;
|
||||||
results reportView/results;
|
results reportView/results;
|
||||||
|
|
|
@ -186,7 +186,7 @@ class IAgendaItem(ILoopsAdapter):
|
||||||
missing_value=u'',
|
missing_value=u'',
|
||||||
required=False)
|
required=False)
|
||||||
|
|
||||||
concequences = schema.Text(
|
consequences = schema.Text(
|
||||||
title=_(u'label_consequences'),
|
title=_(u'label_consequences'),
|
||||||
description=_(u'desc_consequences.'),
|
description=_(u'desc_consequences.'),
|
||||||
default=u'',
|
default=u'',
|
||||||
|
|
|
@ -248,7 +248,7 @@ Let's start with creating an a event and assigning it a task.
|
||||||
... typeInterface=IEvent)
|
... typeInterface=IEvent)
|
||||||
>>> tAgendaItem = addAndConfigureObject(concepts, Concept, 'agendaitem',
|
>>> tAgendaItem = addAndConfigureObject(concepts, Concept, 'agendaitem',
|
||||||
... title=u'AgendaItem', conceptType=concepts.getTypeConcept(),
|
... title=u'AgendaItem', conceptType=concepts.getTypeConcept(),
|
||||||
... typeInterface=IEvent)
|
... typeInterface=IAgendaItem)
|
||||||
|
|
||||||
>>> ev01 = addAndConfigureObject(concepts, Concept, 'ev01',
|
>>> ev01 = addAndConfigureObject(concepts, Concept, 'ev01',
|
||||||
... title=u'loops Meeting', conceptType=tEvent)
|
... title=u'loops Meeting', conceptType=tEvent)
|
||||||
|
|
|
@ -25,85 +25,139 @@
|
||||||
reportView nocall:item;
|
reportView nocall:item;
|
||||||
results reportView/results;
|
results reportView/results;
|
||||||
fields results/context/fields">
|
fields results/context/fields">
|
||||||
<metal:header use-macro="item/macros/header" />
|
<metal:page use-macro="item/macros/page_header" />
|
||||||
<metal:results use-macro="reportView/resultsRenderer" />
|
<table class="report" width="100%"
|
||||||
</div>
|
tal:define="showCheckboxes nothing">
|
||||||
|
<metal:header use-macro="item/macros/header" />
|
||||||
|
<metal:header use-macro="item/macros/rows" />
|
||||||
<div metal:define-macro="header"
|
|
||||||
tal:define="row results/first">
|
|
||||||
<h1 i18n:translate="">Meeting Minutes</h1>
|
|
||||||
<h2 tal:define="col fields/eventTitle">
|
|
||||||
<metal:col use-macro="python:item.getColumnRenderer(col)" /></h2>
|
|
||||||
<div>
|
|
||||||
<span tal:define="col fields/eventStart">
|
|
||||||
<metal:col use-macro="python:item.getColumnRenderer(col)" /></span> -
|
|
||||||
<span tal:define="col fields/eventEnd">
|
|
||||||
<metal:col use-macro="python:item.getColumnRenderer(col)" /></span>
|
|
||||||
</div>
|
|
||||||
<div tal:define="col fields/eventDescription">
|
|
||||||
<metal:col use-macro="python:item.getColumnRenderer(col)" /></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div metal:define-macro="results">
|
|
||||||
<table class="report"
|
|
||||||
tal:define="showCheckboxes cb_name|nothing">
|
|
||||||
<tr>
|
|
||||||
<th tal:condition="showCheckboxes"
|
|
||||||
style="border: 1px solid grey">
|
|
||||||
<input type="checkbox" checked
|
|
||||||
tal:attributes="onclick
|
|
||||||
string:toggleCheckBoxes(this, '$cb_name:list')" /></th>
|
|
||||||
<th i18n:translate=""
|
|
||||||
style="border: 1px solid grey">Task/Action</th>
|
|
||||||
<th style="border: 1px solid grey"
|
|
||||||
i18n:translate="">Who?</th>
|
|
||||||
<th style="border: 1px solid grey"
|
|
||||||
i18n:translate="">When?</th>
|
|
||||||
<th style="border: 1px solid grey"
|
|
||||||
i18n:translate=""></th>
|
|
||||||
</tr>
|
|
||||||
<tal:task repeat="row results">
|
|
||||||
<tr tal:repeat="colname python: ('title', 'description',)">
|
|
||||||
<td tal:condition="showCheckboxes"
|
|
||||||
style="border: 1px solid grey">
|
|
||||||
<input type="checkbox" checked
|
|
||||||
tal:condition="python:colname == 'title'"
|
|
||||||
tal:attributes="name string:$cb_name:list;
|
|
||||||
value row/context/uid" /></td>
|
|
||||||
<td style="border: 1px solid grey"
|
|
||||||
tal:define="col report/fields/?colname"
|
|
||||||
tal:attributes="class col/cssClass">
|
|
||||||
<metal:column use-macro="python:
|
|
||||||
reportView.getColumnRenderer(col)" />
|
|
||||||
</td>
|
|
||||||
<td style="border: 1px solid grey" />
|
|
||||||
<td style="border: 1px solid grey" />
|
|
||||||
<td style="border: 1px solid grey" />
|
|
||||||
</tr>
|
|
||||||
<tal:workitems define="col report/fields/workItems">
|
|
||||||
<metal:column use-macro="python:
|
|
||||||
reportView.getColumnRenderer(col)" />
|
|
||||||
</tal:workitems>
|
|
||||||
</tal:task>
|
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div metal:define-macro="subreport"
|
<div metal:define-macro="page_header">
|
||||||
|
<table width="100%">
|
||||||
|
<tr>
|
||||||
|
<td> </td>
|
||||||
|
<td><h1 i18n:translate="">Meeting Minutes</h1></td>
|
||||||
|
<td><span i18n:translate="">Page</span> </td>
|
||||||
|
</tr>
|
||||||
|
<table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<metal:header define-macro="header"
|
||||||
|
tal:define="row results/first">
|
||||||
|
<tr>
|
||||||
|
<td colspan="4">
|
||||||
|
<div tal:define="col fields/eventTitle">
|
||||||
|
<metal:col use-macro="python:item.getColumnRenderer(col)" /></div>
|
||||||
|
<div tal:define="col fields/eventDescription">
|
||||||
|
<metal:col use-macro="python:item.getColumnRenderer(col)" /></div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<span tal:define="col fields/eventDate">
|
||||||
|
<metal:col use-macro="python:item.getColumnRenderer(col)" /></span>
|
||||||
|
</td>
|
||||||
|
<td colspan="2">
|
||||||
|
<span tal:define="col fields/eventStart">
|
||||||
|
<metal:col use-macro="python:item.getColumnRenderer(col)" /></span> -
|
||||||
|
<span tal:define="col fields/eventEnd">
|
||||||
|
<metal:col use-macro="python:item.getColumnRenderer(col)" /></span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20%"
|
||||||
|
i18n:translate="">Participants</td>
|
||||||
|
<td colspan="3">
|
||||||
|
<span tal:define="col fields/participants">
|
||||||
|
<metal:col use-macro="python:item.getColumnRenderer(col)" /></span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</metal:header>
|
||||||
|
|
||||||
|
|
||||||
|
<metal:results define-macro="results">
|
||||||
|
<table class="report"
|
||||||
|
tal:define="showCheckboxes cb_name|nothing">
|
||||||
|
<metal:rows define-macro="rows">
|
||||||
|
<tr tal:condition="showCheckboxes">
|
||||||
|
<th style="border: 1px solid grey; width: 5%">
|
||||||
|
<input type="checkbox" checked
|
||||||
|
tal:attributes="onclick
|
||||||
|
string:toggleCheckBoxes(this, '$cb_name:list')" /></th>
|
||||||
|
<th colspan="4"
|
||||||
|
i18n:translate=""
|
||||||
|
style="border: 1px solid grey">Copy Agenda Items</th>
|
||||||
|
</tr>
|
||||||
|
<tal:task repeat="row results">
|
||||||
|
<tr>
|
||||||
|
<td tal:condition="showCheckboxes"
|
||||||
|
style="border: 1px solid grey">
|
||||||
|
<input type="checkbox" checked
|
||||||
|
tal:attributes="name string:$cb_name:list;
|
||||||
|
value row/context/uid" /></td>
|
||||||
|
<td colspan="4"
|
||||||
|
style="border: 1px solid grey"
|
||||||
|
tal:define="col report/fields/title"
|
||||||
|
tal:attributes="class col/cssClass">
|
||||||
|
<metal:column use-macro="python:
|
||||||
|
reportView.getColumnRenderer(col)" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr tal:repeat="colname python:
|
||||||
|
('responsible', 'description', 'discussion', 'consequences')">
|
||||||
|
<tal:field define="col report/fields/?colname">
|
||||||
|
<td style="border: 1px solid grey"
|
||||||
|
tal:condition="showCheckboxes"></td>
|
||||||
|
<td style="border: 1px solid grey; width: 15%"
|
||||||
|
tal:content="col/title"
|
||||||
|
i18n:translate=""></td>
|
||||||
|
<td colspan="3"
|
||||||
|
style="border: 1px solid grey"
|
||||||
|
tal:attributes="class col/cssClass">
|
||||||
|
<metal:column use-macro="python:
|
||||||
|
reportView.getColumnRenderer(col)" />
|
||||||
|
</td>
|
||||||
|
</tal:field>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th style="border: 1px solid grey"
|
||||||
|
tal:condition="showCheckboxes"></th>
|
||||||
|
<th colspan="2"
|
||||||
|
style="border: 1px solid grey"
|
||||||
|
i18n:translate="">header_workitems</th>
|
||||||
|
<th style="border: 1px solid grey; width: 20%"
|
||||||
|
i18n:translate="">header_responsible</th>
|
||||||
|
<th style="border: 1px solid grey; width: 12%"
|
||||||
|
i18n:translate="">header_deadline</th>
|
||||||
|
</tr>
|
||||||
|
<tal:workitems define="col report/fields/workItems">
|
||||||
|
<metal:column use-macro="python:
|
||||||
|
reportView.getColumnRenderer(col)" />
|
||||||
|
</tal:workitems>
|
||||||
|
</tal:task>
|
||||||
|
</metal:rows>
|
||||||
|
</table>
|
||||||
|
</metal:results>
|
||||||
|
|
||||||
|
|
||||||
|
<metal:sub define-macro="subreport"
|
||||||
tal:define="results python:col.getValue(row)">
|
tal:define="results python:col.getValue(row)">
|
||||||
<tr class="listing" tal:repeat="row results">
|
<tr class="listing" tal:repeat="row results">
|
||||||
<td tal:condition="showCheckboxes"
|
<td tal:condition="showCheckboxes"
|
||||||
style="border: 1px solid grey" />
|
style="border: 1px solid grey" />
|
||||||
<td tal:repeat="col results/displayedColumns"
|
<td tal:repeat="col results/displayedColumns"
|
||||||
tal:attributes="class col/cssClass"
|
tal:attributes="class col/cssClass;
|
||||||
|
colspan python:
|
||||||
|
col.name == 'title' and '2' or None"
|
||||||
style="border: 1px solid grey">
|
style="border: 1px solid grey">
|
||||||
<metal:column use-macro="python:
|
<metal:column use-macro="python:
|
||||||
reportView.getColumnRenderer(col)" />
|
reportView.getColumnRenderer(col)" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</div>
|
</metal:sub>
|
||||||
|
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -285,7 +285,7 @@ class MeetingMinutesWork(WorkReportInstance, SubReport):
|
||||||
|
|
||||||
rowFactory = MeetingMinutesWorkRow
|
rowFactory = MeetingMinutesWorkRow
|
||||||
|
|
||||||
fields = Jeep((workTitle, party, day, state)) #description,
|
fields = Jeep((workTitle, party, day)) #, state)) #description,
|
||||||
defaultOutputFields = fields
|
defaultOutputFields = fields
|
||||||
defaultSortCriteria = (day,)
|
defaultSortCriteria = (day,)
|
||||||
states = ('planned', 'accepted', 'running', 'done',
|
states = ('planned', 'accepted', 'running', 'done',
|
||||||
|
@ -309,13 +309,20 @@ eventTitle = CalculatedField('eventTitle', u'Event Title',
|
||||||
eventDescription = CalculatedField('eventDescription', u'Event Description',
|
eventDescription = CalculatedField('eventDescription', u'Event Description',
|
||||||
description=u'',
|
description=u'',
|
||||||
executionSteps=(['header']))
|
executionSteps=(['header']))
|
||||||
|
eventDate = DateField('eventDate', u'Event Date',
|
||||||
|
description=u'',
|
||||||
|
format=('date', 'short'),
|
||||||
|
executionSteps=(['header']))
|
||||||
eventStart = DateField('eventStart', u'Event Start',
|
eventStart = DateField('eventStart', u'Event Start',
|
||||||
description=u'',
|
description=u'',
|
||||||
format=('dateTime', 'short'),
|
format=('time', 'short'),
|
||||||
executionSteps=(['header']))
|
executionSteps=(['header']))
|
||||||
eventEnd = DateField('eventEnd', u'Event End',
|
eventEnd = DateField('eventEnd', u'Event End',
|
||||||
description=u'',
|
description=u'',
|
||||||
format=('dateTime', 'short'),
|
format=('time', 'short'),
|
||||||
|
executionSteps=(['header']))
|
||||||
|
participants = CalculatedField('participants', u'Participants',
|
||||||
|
description=u'',
|
||||||
executionSteps=(['header']))
|
executionSteps=(['header']))
|
||||||
taskTitle = UrlField('title', u'Task Title',
|
taskTitle = UrlField('title', u'Task Title',
|
||||||
description=u'The short description of the task.',
|
description=u'The short description of the task.',
|
||||||
|
@ -325,6 +332,18 @@ taskDescription = TextField('description', u'Description',
|
||||||
description=u'The long description of the task.',
|
description=u'The long description of the task.',
|
||||||
cssClass='header-2',
|
cssClass='header-2',
|
||||||
executionSteps=['output'])
|
executionSteps=['output'])
|
||||||
|
responsible = TextField('responsible', u'label_responsible',
|
||||||
|
description=u'Responsible.',
|
||||||
|
cssClass='header-2',
|
||||||
|
executionSteps=['output'])
|
||||||
|
discussion = TextField('discussion', u'label_discussion',
|
||||||
|
description=u'Discussion.',
|
||||||
|
cssClass='header-2',
|
||||||
|
executionSteps=['output'])
|
||||||
|
consequences = TextField('consequences', u'label_consequences',
|
||||||
|
description=u'Consequences.',
|
||||||
|
cssClass='header-2',
|
||||||
|
executionSteps=['output'])
|
||||||
workItems = SubReportField('workItems', u'Work Items',
|
workItems = SubReportField('workItems', u'Work Items',
|
||||||
description=u'A list of work items belonging to the task.',
|
description=u'A list of work items belonging to the task.',
|
||||||
reportFactory=MeetingMinutesWork,
|
reportFactory=MeetingMinutesWork,
|
||||||
|
@ -345,6 +364,10 @@ class TaskRow(BaseRow):
|
||||||
def eventDescription(self):
|
def eventDescription(self):
|
||||||
return self.event.description
|
return self.event.description
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def eventDate(self):
|
||||||
|
return self.event.start
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def eventStart(self):
|
def eventStart(self):
|
||||||
return self.event.start
|
return self.event.start
|
||||||
|
@ -353,8 +376,13 @@ class TaskRow(BaseRow):
|
||||||
def eventEnd(self):
|
def eventEnd(self):
|
||||||
return self.event.end
|
return self.event.end
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def participants(self):
|
||||||
|
return self.event.participants
|
||||||
|
|
||||||
useRowProperty = BaseRow.useRowProperty
|
useRowProperty = BaseRow.useRowProperty
|
||||||
attributeHandlers = dict(
|
attributeHandlers = dict(
|
||||||
|
eventDate=useRowProperty,
|
||||||
eventStart=useRowProperty,
|
eventStart=useRowProperty,
|
||||||
eventEnd=useRowProperty,
|
eventEnd=useRowProperty,
|
||||||
)
|
)
|
||||||
|
@ -367,8 +395,10 @@ class MeetingMinutes(WorkReportInstance):
|
||||||
|
|
||||||
rowFactory = TaskRow
|
rowFactory = TaskRow
|
||||||
|
|
||||||
fields = Jeep((eventTitle, eventStart, eventEnd, eventDescription,
|
fields = Jeep((eventTitle, eventDate, eventStart, eventEnd,
|
||||||
tasks, taskTitle, taskDescription, workItems))
|
eventDescription, participants,
|
||||||
|
tasks, taskTitle, responsible, taskDescription,
|
||||||
|
discussion, consequences, workItems))
|
||||||
defaultOutputFields = fields
|
defaultOutputFields = fields
|
||||||
states = ('planned', 'accepted', 'done', 'done_x', 'finished')
|
states = ('planned', 'accepted', 'done', 'done_x', 'finished')
|
||||||
taskTypeNames = ('agendaitem',)
|
taskTypeNames = ('agendaitem',)
|
||||||
|
|
Loading…
Add table
Reference in a new issue