From 707a1dd8c47cd37ede7df4839d5fb3760e336ced Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 11 Jun 2012 10:17:40 +0200 Subject: [PATCH] show meeting minutes as Word document --- expert/browser/report.py | 3 +- organize/browser/view_macros.pt | 1 + organize/work/meeting.pt | 29 +++++++++++--- organize/work/report.py | 68 +++++++++++++++++++++++++-------- 4 files changed, 79 insertions(+), 22 deletions(-) diff --git a/expert/browser/report.py b/expert/browser/report.py index b33c715..fbbb7c2 100644 --- a/expert/browser/report.py +++ b/expert/browser/report.py @@ -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): diff --git a/organize/browser/view_macros.pt b/organize/browser/view_macros.pt index 93631a0..b3eb002 100644 --- a/organize/browser/view_macros.pt +++ b/organize/browser/view_macros.pt @@ -67,6 +67,7 @@

Tasks

diff --git a/organize/work/meeting.pt b/organize/work/meeting.pt index 0d5fe9e..036ccc4 100644 --- a/organize/work/meeting.pt +++ b/organize/work/meeting.pt @@ -3,7 +3,8 @@
+ reportView nocall:item; + results reportView/results">
@@ -21,15 +22,33 @@
-
+ reportView nocall:item; + results reportView/results; + fields results/context/fields"> + + +
+ + +
+

Meeting Minutes

+

+

+
+ + - + + +
+
+
+ tal:define="showCheckboxes cb_name|nothing">
diff --git a/organize/work/report.py b/organize/work/report.py index 4bbd9e0..9690dfd 100644 --- a/organize/work/report.py +++ b/organize/work/report.py @@ -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')