From 9f9e3509337cba372eea596747aa2de679ea06fe Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 30 Dec 2011 12:47:23 +0100 Subject: [PATCH 1/8] work in progress: extend reporting features - report 'meeting minutes' --- organize/work/README.txt | 52 +++++++++++++++++++++++++++-- organize/work/configure.zcml | 11 +++++++ organize/work/report.py | 64 +++++++++++++++++++++++++++--------- 3 files changed, 109 insertions(+), 18 deletions(-) diff --git a/organize/work/README.txt b/organize/work/README.txt index 2dea1a0..1702ea9 100644 --- a/organize/work/README.txt +++ b/organize/work/README.txt @@ -2,8 +2,6 @@ loops - Linked Objects for Organization and Processing Services =============================================================== - ($Id$) - Let's do some basic setup >>> from zope.app.testing.setup import placefulSetUp, placefulTearDown @@ -194,6 +192,9 @@ In addition we need a predicate that connects one or more tasks with a report. >>> hasReport = addAndConfigureObject(concepts, Concept, 'hasreport', ... title=u'has Report', conceptType=concepts.getPredicateType()) +Work statement report +--------------------- + Now we can create a report and register it as the report for the task used above. @@ -235,6 +236,53 @@ in a results view. {'effort': 900} +Meeting Minutes +=============== + +We can use an event with assigned tasks as the basis for planning a meeting +and recording information about the tasks. + +Let's start with creating an a event and assigning it a task. + + >>> from loops.organize.interfaces import ITask + >>> tEvent = addAndConfigureObject(concepts, Concept, 'event', + ... title=u'Event', conceptType=concepts.getTypeConcept(), + ... typeInterface=ITask) + + >>> ev01 = addAndConfigureObject(concepts, Concept, 'ev01', + ... title=u'loops Meeting', conceptType=tEvent) + >>> ev01.assignChild(task01) + +Now we create the meeting minutes report. We assign the event type as a +child in order to provide the information for which types of objects the +report is available. + + >>> from loops.organize.work.report import MeetingMinutes + >>> component.provideAdapter(MeetingMinutes, provides=IReportInstance, + ... name='meeting_minutes') + + >>> meetingMinutes = addAndConfigureObject(concepts, Concept, 'meeting_minutes', + ... title=u'Meeting Minutes', conceptType=tReport, + ... reportType='meeting_minutes') + >>> meetingMinutes.assignChild(tEvent, hasReport) + +We can now access the report using a results view. + + >>> from loops.util import getUidForObject + >>> input = dict(tasks=getUidForObject(ev01)) + >>> resultsView = ResultsView(home, TestRequest(form=input)) + >>> resultsView.virtualTargetObject = meetingMinutes + + >>> results = resultsView.results() + >>> len(list(results)) + 1 + >>> for row in results: + ... for col in resultsView.displayedColumns: + ... print col.getDisplayValue(row), + ... print + loops Development + + Fin de partie ============= diff --git a/organize/work/configure.zcml b/organize/work/configure.zcml index ccd434f..e6040c4 100644 --- a/organize/work/configure.zcml +++ b/organize/work/configure.zcml @@ -86,6 +86,17 @@ set_schema="loops.expert.report.IReportInstance" /> + + + + + + Date: Sat, 31 Dec 2011 11:01:55 +0100 Subject: [PATCH 2/8] bug fix: split only once on ':' for meta tag analysis on DC Description --- browser/skin/controller.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/browser/skin/controller.py b/browser/skin/controller.py index a551b4c..1b4be58 100644 --- a/browser/skin/controller.py +++ b/browser/skin/controller.py @@ -38,10 +38,11 @@ class Controller(BaseController): target = self.view.virtualTarget if target is not None: desc = target.dcDescription + print '***', desc if desc: for line in desc.splitlines(): if ':' in line: - name, value = line.split(':') + name, value = line.split(':', 1) if name in metaTagNames: macros.register('meta', name, metaName=name, metaContent=value) From 8f1d31966fc05eea6ddbb7fe60dedd10ec8b2f86 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sat, 31 Dec 2011 11:04:33 +0100 Subject: [PATCH 3/8] bug fix: split only once on ':' for meta tag analysis on DC Description --- browser/skin/controller.py | 1 - 1 file changed, 1 deletion(-) diff --git a/browser/skin/controller.py b/browser/skin/controller.py index 1b4be58..30ae2b4 100644 --- a/browser/skin/controller.py +++ b/browser/skin/controller.py @@ -38,7 +38,6 @@ class Controller(BaseController): target = self.view.virtualTarget if target is not None: desc = target.dcDescription - print '***', desc if desc: for line in desc.splitlines(): if ':' in line: From ec4116d88ca3c66cdf1d7b09f739ab74c0824947 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sun, 1 Jan 2012 12:16:53 +0100 Subject: [PATCH 4/8] use correct URL for type-based sub-form --- browser/form_macros.pt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/form_macros.pt b/browser/form_macros.pt index 5e32cb8..667d643 100644 --- a/browser/form_macros.pt +++ b/browser/form_macros.pt @@ -97,7 +97,7 @@ tal:attributes="onChange string:return replaceFieldsNode( 'form.fields', 'form.type', - '${view/url}/$innerForm')"> + '${view/virtualTargetUrl}/$innerForm')">