show meeting minutes as Word document

This commit is contained in:
Helmut Merz 2012-06-11 10:17:40 +02:00
parent 4447ea04ef
commit 707a1dd8c4
4 changed files with 79 additions and 22 deletions

View file

@ -147,7 +147,8 @@ class ResultsConceptView(ConceptView):
reportType = self.reportType or self.report.reportType
ri = component.getAdapter(self.report, IReportInstance,
name=reportType)
ri.view = self.nodeView
#ri.view = self.nodeView
ri.view = self
return ri
def results(self):

View file

@ -67,6 +67,7 @@
<h3 i18n:translate="">Tasks</h3>
<tal:tasks define="report item/reportInstance;
reportView nocall:item;
results reportView/results;
cb_name string:cb_select_tasks;">
<metal:results use-macro="view/resultsRenderer" />
</tal:tasks>

View file

@ -3,7 +3,8 @@
<div metal:define-macro="content"
tal:define="report item/reportInstance;
reportView nocall:item">
reportView nocall:item;
results reportView/results">
<div tal:attributes="class string:content-$level;">
<metal:block use-macro="view/concept_macros/concepttitle" />
<metal:block use-macro="view/concept_macros/conceptfields" />
@ -21,15 +22,33 @@
<div metal:define-macro="document"
tal:define="item nocall:view;
report item/reportInstance;
reportView nocall:item">
<div metal:use-macro="reportView/resultsRenderer" />
reportView nocall:item;
results reportView/results;
fields results/context/fields">
<metal:header use-macro="item/macros/header" />
<metal:results use-macro="reportView/resultsRenderer" />
</div>
<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="results reportView/results;
showCheckboxes cb_name|nothing">
tal:define="showCheckboxes cb_name|nothing">
<tr>
<th tal:condition="showCheckboxes"
style="border: 1px solid grey">

View file

@ -26,14 +26,14 @@ from zope.component import adapter
from cybertools.composer.report.base import Report
from cybertools.composer.report.base import LeafQueryCriteria, CompoundQueryCriteria
from cybertools.composer.report.field import Field
from cybertools.composer.report.field import Field, CalculatedField
from cybertools.composer.report.result import ResultSet, Row as BaseRow
from cybertools.organize.interfaces import IWorkItems
from cybertools.util.date import timeStamp2Date
from cybertools.util.format import formatDate
from cybertools.util.jeep import Jeep
from loops.common import adapted, baseObject
from loops.expert.field import TargetField, TextField, UrlField
from loops.expert.field import TargetField, DateField, TextField, UrlField
from loops.expert.field import SubReport, SubReportField
from loops.expert.report import ReportInstance
from loops import util
@ -44,7 +44,8 @@ class StateField(Field):
value = self.getValue(row)
return util._(value)
class DateField(Field):
class TrackDateField(Field):
part = 'date'
format = 'short'
@ -65,7 +66,7 @@ class DateField(Field):
return u''
class TimeField(DateField):
class TrackTimeField(TrackDateField):
part = 'time'
@ -105,14 +106,14 @@ dayFrom = Field('dayFrom', u'Start Day',
dayTo = Field('dayTo', u'End Day',
description=u'The last day until which to select work.',
executionSteps=['query'])
day = DateField('day', u'Day',
day = TrackDateField('day', u'Day',
description=u'The day the work was done.',
cssClass='center',
executionSteps=['sort', 'output'])
timeStart = TimeField('start', u'Start',
timeStart = TrackTimeField('start', u'Start',
description=u'The time the unit of work was started.',
executionSteps=['sort', 'output'])
timeEnd = TimeField('end', u'End',
timeEnd = TrackTimeField('end', u'End',
description=u'The time the unit of work was finished.',
executionSteps=['output'])
task = TargetField('taskId', u'Task',
@ -272,7 +273,21 @@ class MeetingMinutesWork(WorkReportInstance, SubReport):
return []
taskTitle = UrlField('title', u'Title',
eventTitle = CalculatedField('eventTitle', u'Event Title',
description=u'',
executionSteps=(['header']))
eventDescription = CalculatedField('eventDescription', u'Event Description',
description=u'',
executionSteps=(['header']))
eventStart = DateField('eventStart', u'Event Start',
description=u'',
format=('dateTime', 'short'),
executionSteps=(['header']))
eventEnd = DateField('eventEnd', u'Event End',
description=u'',
format=('dateTime', 'short'),
executionSteps=(['header']))
taskTitle = UrlField('title', u'Task Title',
description=u'The short description of the task.',
cssClass='header-1',
executionSteps=['output'])
@ -288,23 +303,44 @@ workItems = SubReportField('workItems', u'Work Items',
class TaskRow(BaseRow):
pass
@Lazy
def event(self):
return self.parent.context.view.adapted
@Lazy
def eventTitle(self):
return self.event.title
@Lazy
def eventDescription(self):
return self.event.description
@Lazy
def eventStart(self):
return self.event.start
@Lazy
def eventEnd(self):
return self.event.end
useRowProperty = BaseRow.useRowProperty
attributeHandlers = dict(
eventStart=useRowProperty,
eventEnd=useRowProperty,
)
class MeetingMinutes(WorkReportInstance):
# TODO:
# header (event) fields: title, description, from/to,
# location, participants (or put in description?)
# result set field for work items
# work item fields: title, description, party, deadline, state
type = "meeting_minutes"
label = u'Meeting Minutes'
rowFactory = TaskRow
fields = Jeep((tasks, taskTitle, taskDescription, workItems))
fields = Jeep((eventTitle, eventStart, eventEnd, eventDescription,
tasks, taskTitle, taskDescription, workItems))
defaultOutputFields = fields
states = ('planned', 'accepted', 'done', 'done_x', 'finished')