diff --git a/expert/browser/report.py b/expert/browser/report.py index d7bb768..79b5641 100644 --- a/expert/browser/report.py +++ b/expert/browser/report.py @@ -42,6 +42,8 @@ results_template = ViewPageTemplateFile('results.pt') class ReportView(ConceptView): + """ A view for defining (editing) a report. + """ @Lazy def report_macros(self): @@ -106,3 +108,52 @@ class ResultsView(NodeView): def getColumnRenderer(self, col): return self.result_macros[col.renderer] + + +class ResultsConceptView(ConceptView): + """ View on a concept using a report. + """ + + reportName = None # define in subclass if applicable + + @Lazy + def result_macros(self): + return self.controller.getTemplateMacros('results', results_template) + + @Lazy + def resultsRenderer(self): + return self.reportInstance.getResultsRenderer( + 'results', self.result_macros) + + @Lazy + def macro(self): + return self.result_macros['content'] + + @Lazy + def hasReportPredicate(self): + return self.conceptManager['hasreport'] + + @Lazy + def report(self): + if self.reportName: + return adapted(self.conceptManager[self.reportName]) + type = self.context.conceptType + reports = type.getParents([self.hasReportPredicate]) + return adapted(reports[0]) + + @Lazy + def reportInstance(self): + ri = component.getAdapter(self.report, IReportInstance, + name=self.report.reportType) + ri.view = self.nodeView + return ri + + def results(self): + return self.reportInstance.getResults(dict(tasks=util.getUidForObject(self.context))) + + @Lazy + def displayedColumns(self): + return self.reportInstance.getActiveOutputFields() + + def getColumnRenderer(self, col): + return self.result_macros[col.renderer] diff --git a/expert/browser/results.pt b/expert/browser/results.pt index 1b4ebac..0f87f8d 100644 --- a/expert/browser/results.pt +++ b/expert/browser/results.pt @@ -3,7 +3,8 @@
+ report view/reportInstance; + reportView nocall:view">
@@ -14,9 +15,19 @@
+
+
+ +
+
+
+ +
+ tal:define="results reportView/results">
- +
- +
@@ -86,13 +99,15 @@ - + - + diff --git a/expert/report.py b/expert/report.py index c89a2cd..516b21a 100644 --- a/expert/report.py +++ b/expert/report.py @@ -97,7 +97,7 @@ class ReportInstance(BaseReport): if dynaParams is not None: for k, v in dynaParams.items(): if k in crit.parts.keys(): - crit.parts[k].value = v + crit.parts[k].comparisonValue = v parts = Jeep(crit.parts) result = list(self.selectObjects(parts)) # may modify parts qc = CompoundQueryCriteria(parts) diff --git a/organize/work/configure.zcml b/organize/work/configure.zcml index e6040c4..a0df764 100644 --- a/organize/work/configure.zcml +++ b/organize/work/configure.zcml @@ -97,6 +97,12 @@ set_schema="loops.expert.report.IReportInstance" /> + + + + +
+
+ + +
+
+
+ + + diff --git a/organize/work/meeting.py b/organize/work/meeting.py new file mode 100644 index 0000000..f03783d --- /dev/null +++ b/organize/work/meeting.py @@ -0,0 +1,52 @@ +# +# Copyright (c) 2012 Helmut Merz helmutm@cy55.de +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +View class(es) for accessing tasks and work items as meeting minutes. +""" + +from zope.app.pagetemplate import ViewPageTemplateFile +from zope.cachedescriptors.property import Lazy + +from cybertools.browser.action import actions +from loops.browser.action import TargetAction +from loops.expert.browser.report import ResultsConceptView +from loops.util import _ + + +meeting_template = ViewPageTemplateFile('meeting.pt') + + +actions.register('meeting_minutes', 'portlet', TargetAction, + title=_(u'Show Meeting Minutes...'), + description=_(u'Show meeting minutes for this object.'), + viewName='meeting_minutes.html', +) + +class MeetingMinutes(ResultsConceptView): + + reportName = 'meeting_minutes' + + @Lazy + def meeting_macros(self): + return meeting_template.macros + + @Lazy + def macro(self): + return self.meeting_macros['content'] + diff --git a/organize/work/report.py b/organize/work/report.py index be2ff82..e750dfe 100644 --- a/organize/work/report.py +++ b/organize/work/report.py @@ -247,8 +247,14 @@ class MeetingMinutesWork(WorkReportInstance, SubReport): rowFactory = MeetingMinutesWorkRow + fields = Jeep((workTitle, party, day, state)) #description, + defaultOutputFields = fields states = ('planned',) + @property + def queryCriteria(self): + return CompoundQueryCriteria([]) + def selectObjects(self, parts): parts.pop('tasks', None) t = self.parentRow.context