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:
helmutm 2008-12-29 15:05:25 +00:00
parent a77166dfee
commit 94d38bbe2c
6 changed files with 79 additions and 6 deletions

View file

@ -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

View file

@ -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>

View file

@ -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):

View file

@ -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

View file

@ -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"

View file

@ -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"