work in progress: view work items
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3098 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
a77166dfee
commit
94d38bbe2c
6 changed files with 79 additions and 6 deletions
|
@ -404,19 +404,16 @@ class BaseView(GenericView, I18NView):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def versionId(self):
|
def versionId(self):
|
||||||
#versionable = IVersionable(self.context, None)
|
|
||||||
versionable = IVersionable(self.target, None)
|
versionable = IVersionable(self.target, None)
|
||||||
return versionable and versionable.versionId or ''
|
return versionable and versionable.versionId or ''
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def currentVersionId(self):
|
def currentVersionId(self):
|
||||||
#versionable = IVersionable(self.context, None)
|
|
||||||
versionable = IVersionable(self.target, None)
|
versionable = IVersionable(self.target, None)
|
||||||
return versionable and versionable.currentVersion.versionId or ''
|
return versionable and versionable.currentVersion.versionId or ''
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def hasVersions(self):
|
def hasVersions(self):
|
||||||
#versionable = IVersionable(self.context, None)
|
|
||||||
versionable = IVersionable(self.target, None)
|
versionable = IVersionable(self.target, None)
|
||||||
return versionable and len(versionable.versions) > 1 or False
|
return versionable and len(versionable.versions) > 1 or False
|
||||||
|
|
||||||
|
@ -424,8 +421,6 @@ class BaseView(GenericView, I18NView):
|
||||||
def versionInfo(self):
|
def versionInfo(self):
|
||||||
if not self.useVersioning:
|
if not self.useVersioning:
|
||||||
return None
|
return None
|
||||||
#context = self.context
|
|
||||||
#versionable = IVersionable(context, None)
|
|
||||||
target = self.target
|
target = self.target
|
||||||
versionable = IVersionable(target, None)
|
versionable = IVersionable(target, None)
|
||||||
if versionable is None:
|
if versionable is None:
|
||||||
|
@ -512,6 +507,11 @@ class BaseView(GenericView, I18NView):
|
||||||
|
|
||||||
inlineEditable = False
|
inlineEditable = False
|
||||||
|
|
||||||
|
# work items
|
||||||
|
@Lazy
|
||||||
|
def workItems(self):
|
||||||
|
return []
|
||||||
|
|
||||||
# comments
|
# comments
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<metal:fields use-macro="item/template/macros/conceptfields" />
|
<metal:fields use-macro="item/template/macros/conceptfields" />
|
||||||
<metal:fields use-macro="item/template/macros/conceptchildren" />
|
<metal:fields use-macro="item/template/macros/conceptchildren" />
|
||||||
<metal:fields use-macro="item/template/macros/conceptresources" />
|
<metal:fields use-macro="item/template/macros/conceptresources" />
|
||||||
|
<metal:fields use-macro="view/work_macros/workitems" />
|
||||||
<metal:fields use-macro="view/comment_macros/comments" />
|
<metal:fields use-macro="view/comment_macros/comments" />
|
||||||
</div>
|
</div>
|
||||||
</metal:data>
|
</metal:data>
|
||||||
|
|
|
@ -482,8 +482,19 @@ class NodeView(BaseView):
|
||||||
self.recordAccess('external_edit')
|
self.recordAccess('external_edit')
|
||||||
return ExternalEditorView(target, self.request).load(url=url)
|
return ExternalEditorView(target, self.request).load(url=url)
|
||||||
|
|
||||||
# comments
|
# work items
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def work_macros(self):
|
||||||
|
from loops.organize.work.browser import work_macros
|
||||||
|
return work_macros.macros
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def workItems(self):
|
||||||
|
return component.getMultiAdapter((self.context, self.request),
|
||||||
|
name='workitems.html')
|
||||||
|
|
||||||
|
# comments
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def comment_macros(self):
|
def comment_macros(self):
|
||||||
|
|
|
@ -34,8 +34,10 @@ from cybertools.browser.action import actions
|
||||||
from cybertools.organize.interfaces import IWorkItems
|
from cybertools.organize.interfaces import IWorkItems
|
||||||
from loops.browser.action import DialogAction
|
from loops.browser.action import DialogAction
|
||||||
from loops.browser.form import ObjectForm, EditObject
|
from loops.browser.form import ObjectForm, EditObject
|
||||||
|
from loops.browser.node import NodeView
|
||||||
from loops.organize.party import getPersonForUser
|
from loops.organize.party import getPersonForUser
|
||||||
from loops.organize.tracking.browser import BaseTrackView
|
from loops.organize.tracking.browser import BaseTrackView
|
||||||
|
from loops.organize.tracking.report import TrackDetails
|
||||||
from loops import util
|
from loops import util
|
||||||
from loops.util import _
|
from loops.util import _
|
||||||
|
|
||||||
|
@ -43,6 +45,37 @@ from loops.util import _
|
||||||
work_macros = ViewPageTemplateFile('work_macros.pt')
|
work_macros = ViewPageTemplateFile('work_macros.pt')
|
||||||
|
|
||||||
|
|
||||||
|
class WorkItemsView(NodeView):
|
||||||
|
|
||||||
|
def __init__(self, context, request):
|
||||||
|
self.context = context
|
||||||
|
self.request = request
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def workItems(self):
|
||||||
|
ts = self.loopsRoot.getRecordManager().get('work')
|
||||||
|
if ts is not None:
|
||||||
|
return IWorkItems(ts)
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def allWorkItems(self):
|
||||||
|
result = []
|
||||||
|
target = self.virtualTargetObject
|
||||||
|
workItems = self.workItems
|
||||||
|
if None in (workItems, target):
|
||||||
|
return result
|
||||||
|
for wi in workItems.query(task=util.getUidForObject(target)):
|
||||||
|
result.append(WorkItemDetails(self, wi))
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
class WorkItemDetails(TrackDetails):
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def description(self):
|
||||||
|
return self.track.description
|
||||||
|
|
||||||
|
|
||||||
class WorkItemView(BaseTrackView):
|
class WorkItemView(BaseTrackView):
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -24,6 +24,12 @@
|
||||||
|
|
||||||
<!-- application views -->
|
<!-- application views -->
|
||||||
|
|
||||||
|
<browser:page
|
||||||
|
name="workitems.html"
|
||||||
|
for="loops.interfaces.INode"
|
||||||
|
class="loops.organize.work.browser.WorkItemsView"
|
||||||
|
permission="zope.View" />
|
||||||
|
|
||||||
<browser:page
|
<browser:page
|
||||||
name="create_workitem.html"
|
name="create_workitem.html"
|
||||||
for="loops.interfaces.INode"
|
for="loops.interfaces.INode"
|
||||||
|
|
|
@ -2,6 +2,28 @@
|
||||||
<!-- $Id$ -->
|
<!-- $Id$ -->
|
||||||
|
|
||||||
|
|
||||||
|
<metal:work define-macro="workitems"
|
||||||
|
tal:define="workItems nocall:view/workItems"
|
||||||
|
tal:condition="workItems/allWorkItems">
|
||||||
|
<br />
|
||||||
|
<h2 i18n:translate="">Work Items</h2>
|
||||||
|
<metal:workitems define-macro="workitems_listing"
|
||||||
|
tal:define="workItems nocall:workItems|nocall:view/workItems;">
|
||||||
|
<tal:workitem tal:repeat="workItem workItems/allWorkItems">
|
||||||
|
<br />
|
||||||
|
<div class="comment">
|
||||||
|
<h3>
|
||||||
|
<span tal:content="workItem/description">Subject</span></h3>
|
||||||
|
<div class="info">
|
||||||
|
<span tal:replace="workItem/user/title">John</span>,
|
||||||
|
<span tal:replace="workItem/timeStamp">2007-03-30</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</tal:workitem>
|
||||||
|
</metal:workitems>
|
||||||
|
</metal:work>
|
||||||
|
|
||||||
|
|
||||||
<metal:block define-macro="create_workitem">
|
<metal:block define-macro="create_workitem">
|
||||||
<form method="post"
|
<form method="post"
|
||||||
id="addWorkitem_form" class="dialog"
|
id="addWorkitem_form" class="dialog"
|
||||||
|
|
Loading…
Add table
Reference in a new issue