diff --git a/organize/work/browser.py b/organize/work/browser.py
index b5270b3..478dab5 100644
--- a/organize/work/browser.py
+++ b/organize/work/browser.py
@@ -28,6 +28,7 @@ from zope.app.pagetemplate import ViewPageTemplateFile
from zope.cachedescriptors.property import Lazy
from zope.event import notify
from zope.lifecycleevent import ObjectModifiedEvent
+from zope.security.proxy import removeSecurityProxy
from zope.traversing.browser import absoluteURL
from zope.traversing.api import getName, getParent
@@ -733,3 +734,25 @@ def formatTimeDelta(value):
return str(int(round(h / 24.0)))
return u'%02i:%02i' % (h, m)
+
+class FixCheckupWorkItems(object):
+
+ def __call__(self):
+ context = removeSecurityProxy(self.context)
+ rm = context['records']['work']
+ count = 0
+ workItems = list(rm.values())
+ for wi in workItems:
+ if wi.state in ('done',):
+ if wi.workItemType != 'checkup':
+ print '*** done, but not checkup', wi.__name__
+ continue
+ wi.state = 'running'
+ wi.reindex('state')
+ if wi.end == wi.start:
+ del wi.data['end']
+ count += 1
+ msg = '*** checked: %i, updated: %i.' % (len(workItems), count)
+ print msg
+ return msg
+
diff --git a/organize/work/configure.zcml b/organize/work/configure.zcml
index d4eab19..28d8d54 100644
--- a/organize/work/configure.zcml
+++ b/organize/work/configure.zcml
@@ -132,6 +132,14 @@
attribute="embed"
permission="zope.View" />
+
+
+
+