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" />
+