provide work report view 'work.html' using its context object for the 'tasks' query criteria, use this instead of 'results.html'
This commit is contained in:
parent
b2a755b3fc
commit
d0ef48e692
4 changed files with 55 additions and 31 deletions
|
@ -134,7 +134,7 @@ class ResultsView(NodeView):
|
|||
|
||||
|
||||
class ResultsConceptView(ConceptView):
|
||||
""" View on a concept using a report.
|
||||
""" View on a concept using the results of a report.
|
||||
"""
|
||||
|
||||
reportName = None # define in subclass if applicable
|
||||
|
@ -175,7 +175,7 @@ class ResultsConceptView(ConceptView):
|
|||
return ri
|
||||
|
||||
def results(self):
|
||||
return self.reportInstance.getResults(dict(tasks=util.getUidForObject(self.context)))
|
||||
return self.reportInstance.getResults()
|
||||
|
||||
@Lazy
|
||||
def displayedColumns(self):
|
||||
|
@ -183,3 +183,8 @@ class ResultsConceptView(ConceptView):
|
|||
|
||||
def getColumnRenderer(self, col):
|
||||
return self.result_macros[col.renderer]
|
||||
|
||||
|
||||
class ReportConceptView(ResultsConceptView):
|
||||
""" View on a concept using a report.
|
||||
"""
|
||||
|
|
|
@ -212,25 +212,23 @@ The executable report is a report instance that is an adapter to the
|
|||
... provides=IReportInstance,
|
||||
... name='work_report')
|
||||
|
||||
The user interface to the report is a report view, the results are presented
|
||||
in a results view.
|
||||
The user interface is a ReportConceptView subclass that is directly associated with the task.
|
||||
|
||||
>>> from loops.view import Node
|
||||
>>> reportNode = addAndConfigureObject(home, Node, 'report',
|
||||
... title=u'Report', target=workStatement)
|
||||
>>> from loops.expert.browser.report import ReportView, ResultsView
|
||||
>>> resultsView = ResultsView(reportNode, TestRequest())
|
||||
>>> from loops.organize.work.report import WorkStatementView
|
||||
>>> reportView = WorkStatementView(task01, TestRequest())
|
||||
>>> reportView.nodeView = nodeView
|
||||
|
||||
>>> results = resultsView.results()#.getResult()
|
||||
>>> results = reportView.results()
|
||||
>>> len(list(results))
|
||||
1
|
||||
|
||||
>>> for row in results:
|
||||
... for col in resultsView.displayedColumns:
|
||||
... for col in reportView.displayedColumns:
|
||||
... print col.getDisplayValue(row),
|
||||
... print
|
||||
08/12/28 19:00 20:15
|
||||
{'url': '.../home/report/.36', 'title': u'loops Development'}
|
||||
{'url': '.../home/report/.33', 'title': u'john'} 01:15 00:15 finished
|
||||
{'url': '.../home/.36', 'title': u'loops Development'}
|
||||
{'url': '.../home/.33', 'title': u'john'} 01:15 00:15 finished
|
||||
|
||||
>>> results.totals.data
|
||||
{'effort': 900}
|
||||
|
@ -266,18 +264,17 @@ report is available.
|
|||
... reportType='meeting_minutes')
|
||||
>>> meetingMinutes.assignChild(tEvent, hasReport)
|
||||
|
||||
We can now access the report using a results view.
|
||||
We can now access the report using a corresponding report-based view.
|
||||
|
||||
>>> from loops.util import getUidForObject
|
||||
>>> input = dict(tasks=getUidForObject(ev01))
|
||||
>>> resultsView = ResultsView(home, TestRequest(form=input))
|
||||
>>> resultsView.virtualTargetObject = meetingMinutes
|
||||
>>> from loops.organize.work.meeting import MeetingMinutes
|
||||
>>> reportView = MeetingMinutes(ev01, TestRequest())
|
||||
>>> reportView.nodeView = nodeView
|
||||
|
||||
>>> results = resultsView.results()
|
||||
>>> results = reportView.results()
|
||||
>>> len(list(results))
|
||||
1
|
||||
>>> for row in results:
|
||||
... for col in resultsView.displayedColumns:
|
||||
... for col in reportView.displayedColumns:
|
||||
... print col.getDisplayValue(row),
|
||||
... print
|
||||
{'url': 'http://127.0.0.1/loops/views/home/.36', 'title': u'loops Development'}
|
||||
|
|
|
@ -75,8 +75,9 @@
|
|||
|
||||
<!-- reporting -->
|
||||
|
||||
<zope:adapter factory="loops.organize.work.report.WorkReportInstance"
|
||||
<zope:adapter
|
||||
name="work_report"
|
||||
factory="loops.organize.work.report.WorkReportInstance"
|
||||
provides="loops.expert.report.IReportInstance"
|
||||
trusted="True" />
|
||||
<zope:class class="loops.organize.work.report.WorkReportInstance">
|
||||
|
@ -86,8 +87,15 @@
|
|||
set_schema="loops.expert.report.IReportInstance" />
|
||||
</zope:class>
|
||||
|
||||
<zope:adapter factory="loops.organize.work.report.MeetingMinutes"
|
||||
<browser:page
|
||||
name="work.html"
|
||||
for="loops.organize.interfaces.ITask"
|
||||
class="loops.organize.work.report.WorkStatementView"
|
||||
permission="zope.View" />
|
||||
|
||||
<zope:adapter
|
||||
name="meeting_minutes"
|
||||
factory="loops.organize.work.report.MeetingMinutes"
|
||||
provides="loops.expert.report.IReportInstance"
|
||||
trusted="True" />
|
||||
<zope:class class="loops.organize.work.report.MeetingMinutes">
|
||||
|
|
|
@ -33,13 +33,24 @@ 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.browser.report import ReportConceptView
|
||||
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
|
||||
|
||||
|
||||
# reporting views
|
||||
|
||||
class WorkStatementView(ReportConceptView):
|
||||
|
||||
reportName = 'work_statement'
|
||||
|
||||
|
||||
# fields
|
||||
|
||||
class StateField(Field):
|
||||
|
||||
def getDisplayValue(self, row):
|
||||
value = self.getValue(row)
|
||||
return util._(value)
|
||||
|
@ -178,9 +189,11 @@ class WorkReportInstance(ReportInstance):
|
|||
rowFactory = WorkRow
|
||||
|
||||
fields = Jeep((dayFrom, dayTo, tasks,
|
||||
day, timeStart, timeEnd, task, party, workTitle, #description,
|
||||
day, timeStart, timeEnd, task, party, workTitle,
|
||||
#description,
|
||||
duration, effort, state))
|
||||
|
||||
userSettings = (dayFrom, dayTo, party)
|
||||
defaultOutputFields = fields
|
||||
defaultSortCriteria = (day, timeStart,)
|
||||
states = ('done', 'done_x', 'finished')
|
||||
|
@ -192,12 +205,13 @@ class WorkReportInstance(ReportInstance):
|
|||
crit = self.context.queryCriteria or []
|
||||
if not crit and 'tasks' not in form:
|
||||
f = self.fields['tasks']
|
||||
tasks = baseObject(self.context).getChildren([self.hasReportPredicate])
|
||||
tasks = [self.view.context]
|
||||
tasks = [util.getUidForObject(task) for task in tasks]
|
||||
crit = [LeafQueryCriteria(f.name, f.operator, tasks, f)]
|
||||
for f in self.getAllQueryFields():
|
||||
if f.name in form:
|
||||
crit.append(LeafQueryCriteria(f.name, f.operator, form[f.name], f))
|
||||
crit.append(
|
||||
LeafQueryCriteria(f.name, f.operator, form[f.name], f))
|
||||
return CompoundQueryCriteria(crit)
|
||||
|
||||
def selectObjects(self, parts):
|
||||
|
|
Loading…
Add table
Reference in a new issue