make sure indirectly called reports (like CSV export) use the correct report name

This commit is contained in:
Helmut Merz 2016-05-13 08:20:22 +02:00
parent 428c772ea9
commit 85dfd815dc
3 changed files with 16 additions and 3 deletions

View file

@ -56,6 +56,10 @@
tal:condition="sortinfo" tal:condition="sortinfo"
tal:attributes="name string:sortinfo_results; tal:attributes="name string:sortinfo_results;
value sortinfo" /> value sortinfo" />
<input type="hidden" name="report_name"
tal:define="reportName item/reportName"
tal:condition="reportName"
tal:attributes="value reportName" />
</tal:hidden> </tal:hidden>
<div metal:use-macro="item/report_macros/params" /> <div metal:use-macro="item/report_macros/params" />
<div metal:define-macro="buttons"> <div metal:define-macro="buttons">

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011 Helmut Merz helmutm@cy55.de # Copyright (c) 2016 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -20,6 +20,7 @@
View classes for reporting. View classes for reporting.
""" """
from logging import getLogger
from urllib import urlencode from urllib import urlencode
from zope import interface, component from zope import interface, component
from zope.app.pagetemplate import ViewPageTemplateFile from zope.app.pagetemplate import ViewPageTemplateFile
@ -158,6 +159,8 @@ class ResultsConceptView(ConceptView):
""" View on a concept using the results of a report. """ View on a concept using the results of a report.
""" """
logger = getLogger ('ResultsConceptView')
reportName = None # define in subclass if applicable reportName = None # define in subclass if applicable
reportDownload = None reportDownload = None
reportType = None # set for using special report instance adapter reportType = None # set for using special report instance adapter
@ -188,6 +191,9 @@ class ResultsConceptView(ConceptView):
@Lazy @Lazy
def reportName(self): def reportName(self):
rn = self.request.form.get('report_name')
if rn is not None:
return rn
return (self.getOptions('report_name') or [None])[0] return (self.getOptions('report_name') or [None])[0]
@Lazy @Lazy
@ -198,7 +204,10 @@ class ResultsConceptView(ConceptView):
@Lazy @Lazy
def report(self): def report(self):
if self.reportName: if self.reportName:
return adapted(self.conceptManager[self.reportName]) report = adapted(self.conceptManager.get(self.reportName))
if report is None:
self.logger.warn("Report '%s' not found." % self.reportName)
return report
reports = self.context.getParents([self.hasReportPredicate]) reports = self.context.getParents([self.hasReportPredicate])
if not reports: if not reports:
type = self.context.conceptType type = self.context.conceptType

View file

@ -346,7 +346,7 @@ class WorkReportInstance(ReportInstance):
if checked is None: if checked is None:
checked = set() checked = set()
for c in concept.getChildren([self.view.defaultPredicate]): for c in concept.getChildren([self.view.defaultPredicate]):
if c.conceptType in self.taskTypes: if c.conceptType in self.taskTypes and c not in checked:
result.append(c) result.append(c)
if c not in checked: if c not in checked:
checked.add(c) checked.add(c)