From 92bacf05d4f67bd43ca734ffd8f145b02fc6e935 Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 28 Dec 2008 14:26:02 +0000 Subject: [PATCH] work in progress: task management with work items git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3091 fd906abe-77d9-0310-91a1-e0d9ade77398 --- organize/work/README.txt | 81 ++++++++++++++++++++++++++++++++++++ organize/work/browser.py | 12 +++++- organize/work/configure.zcml | 9 ++++ organize/work/tests.py | 22 ++++++++++ organize/work/work_macros.pt | 60 +++++++++++++------------- 5 files changed, 151 insertions(+), 33 deletions(-) create mode 100644 organize/work/README.txt create mode 100755 organize/work/tests.py diff --git a/organize/work/README.txt b/organize/work/README.txt new file mode 100644 index 0000000..03abe8c --- /dev/null +++ b/organize/work/README.txt @@ -0,0 +1,81 @@ +=============================================================== +loops - Linked Objects for Organization and Processing Services +=============================================================== + + ($Id$) + +Let's do some basic setup + + >>> from zope.app.testing.setup import placefulSetUp, placefulTearDown + >>> site = placefulSetUp(True) + >>> from zope import component, interface + >>> from zope.publisher.browser import TestRequest + +and set up a simple loops site with a concept manager and some concepts +(with all the type machinery, what in real life is done via standard +ZCML setup): + + >>> from loops.organize.setup import SetupManager + >>> component.provideAdapter(SetupManager, name='organize') + >>> from loops.organize.work.setup import SetupManager + >>> component.provideAdapter(SetupManager, name='organize.work') + + >>> from loops.tests.setup import TestSite + >>> t = TestSite(site) + >>> concepts, resources, views = t.setup() + + +Work Items - Plannning and Recording Activities for Tasks +========================================================= + + >>> loopsRoot = concepts.getLoopsRoot() + >>> records = loopsRoot.getRecordManager() + +More setup +---------- + +In order to be able to login and store favorites and other personal data +we have to prepare our environment. We need some basic adapter registrations, +and a pluggable authentication utility with a principal folder. + + >>> from loops.organize.tests import setupObjectsForTesting + >>> setupData = setupObjectsForTesting(site, concepts) + >>> johnC = setupData.johnC + +We also assign a task as a target to the home node so that we are able +to assign work items to this task. + + >>> tTask = concepts['task'] + >>> home = views['home'] + >>> from loops.concept import Concept + >>> from loops.setup import addAndConfigureObject + >>> task01 = addAndConfigureObject(concepts, Concept, 'loops_dev', + ... title=u'loops Development', conceptType=tTask) + >>> home.target = task01 + +Forms for adding and editing work items +--------------------------------------- + +New work items are created using a CreateWorkItemForm. + + >>> from loops.organize.work.browser import CreateWorkItemForm, CreateWorkItem + >>> form = CreateWorkItemForm(home, TestRequest()) + +When this form is submitted, a form controller is automatically created +for the view on the currently shown node. The data from the form is processed +by calling the form controller's update method + + >>> input = {'form.action': 'create_workitem', 'workitem.action': 'finish'} + >>> request = TestRequest(form=input) + >>> from loops.browser.node import NodeView + >>> view = NodeView(home, request) + >>> cwiController = CreateWorkItem(view, request) + + >>> cwiController.update() + False + + +Fin de partie +============= + + >>> placefulTearDown() diff --git a/organize/work/browser.py b/organize/work/browser.py index d0df6c3..dc1296c 100644 --- a/organize/work/browser.py +++ b/organize/work/browser.py @@ -31,11 +31,11 @@ from zope.traversing.browser import absoluteURL from zope.traversing.api import getName from cybertools.browser.action import actions -from cybertools.tracking.browser import TrackView from loops.browser.action import DialogAction from loops.browser.form import ObjectForm, EditObject from loops.organize.tracking.browser import BaseTrackView from loops import util +from loops.util import _ work_macros = ViewPageTemplateFile('work_macros.pt') @@ -46,7 +46,7 @@ class WorkItemView(BaseTrackView): pass -class CreateWorkItemForm(ObjectForm): +class CreateWorkItemForm(ObjectForm, BaseTrackView): template = work_macros @@ -63,6 +63,14 @@ class CreateWorkItemForm(ObjectForm): return time.strftime('%Y-%m-%dT%H:%M') +class CreateWorkItem(EditObject, BaseTrackView): + + def update(self): + url = self.view.virtualTargetUrl + '?version=this' + self.request.response.redirect(url) + return False + + # actions actions.register('createWorkitem', 'portlet', DialogAction, diff --git a/organize/work/configure.zcml b/organize/work/configure.zcml index e3c47ef..f9231bc 100644 --- a/organize/work/configure.zcml +++ b/organize/work/configure.zcml @@ -28,6 +28,15 @@ class="loops.organize.work.browser.CreateWorkItemForm" permission="zope.ManageContent" /> + + + + diff --git a/organize/work/tests.py b/organize/work/tests.py new file mode 100755 index 0000000..384ef4d --- /dev/null +++ b/organize/work/tests.py @@ -0,0 +1,22 @@ +# $Id$ + +import unittest, doctest +from zope.testing.doctestunit import DocFileSuite + + +class Test(unittest.TestCase): + "Basic tests for the loops.organize.work package." + + def testBasics(self): + pass + + +def test_suite(): + flags = doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS + return unittest.TestSuite(( + unittest.makeSuite(Test), + DocFileSuite('README.txt', optionflags=flags), + )) + +if __name__ == '__main__': + unittest.main(defaultTest='test_suite') diff --git a/organize/work/work_macros.pt b/organize/work/work_macros.pt index 0fb78e5..4cfb2ed 100644 --- a/organize/work/work_macros.pt +++ b/organize/work/work_macros.pt @@ -7,6 +7,7 @@ id="addWorkitem_form" class="dialog" dojoType="dijit.form.Form"> +
Add Work Item
- -
- - - - -
- -
- / - -
+ +
+ + - +
+ +
+ / +
+
@@ -53,15 +53,13 @@ dojoType="dijit.form.SimpleTextarea" style="width: 60em">
-
-
+ i18n:attributes="value">