diff --git a/organize/task.py b/organize/task.py index cdbd172..5f1ad41 100644 --- a/organize/task.py +++ b/organize/task.py @@ -60,7 +60,6 @@ class AgendaItem(AdapterBase): implements(IAgendaItem) - _adapterAttributes = AdapterBase._adapterAttributes _contextAttributes = list(IAgendaItem) diff --git a/organize/work/README.txt b/organize/work/README.txt index bd588e1..49bb1a8 100644 --- a/organize/work/README.txt +++ b/organize/work/README.txt @@ -174,8 +174,8 @@ So we use the PersonWorkItems view, assigning john to the query. >>> work = PersonWorkItems(query, TestRequest(form=input)) >>> work.listWorkItems() [] + {'title': u'Install Zope', 'created': ..., 'end': 1232352000, + 'start': 1232352000, 'creator': '33'}>] Work Reports diff --git a/organize/work/browser.py b/organize/work/browser.py index f0d86fb..2658aa9 100644 --- a/organize/work/browser.py +++ b/organize/work/browser.py @@ -33,13 +33,16 @@ from zope.traversing.api import getName, getParent from cybertools.ajax import innerHtml from cybertools.browser.action import actions +from cybertools.meta.interfaces import IOptions from cybertools.organize.interfaces import IWorkItems +from cybertools.organize.work import workItemTypes from cybertools.tracking.btree import getTimeStamp from cybertools.util import format from loops.browser.action import DialogAction from loops.browser.concept import ConceptView from loops.browser.form import ObjectForm, EditObject from loops.browser.node import NodeView +from loops.common import adapted from loops.organize.party import getPersonForUser from loops.organize.stateful.browser import StateAction from loops.organize.tracking.browser import BaseTrackView @@ -340,6 +343,30 @@ class CreateWorkItemForm(ObjectForm, BaseTrackView): def description(self): return self.track.description or u'' + @Lazy + def workItemType(self): + name = self.track.workItemType + return (name and workItemTypes[name] or self.workItemTypes[0]) + + @Lazy + def workItemTypes(self): + options = IOptions(adapted(self.task.conceptType)) + typeNames = options.workitem_types + if typeNames: + return [workItemTypes[name] for name in typeNames] + return workItemTypes + + @Lazy + def showTypes(self): + return len(self.workItemTypes) != 1 + + @Lazy + def deadline(self): + ts = self.track.deadline# or getTimeStamp() + if ts: + return time.strftime('%Y-%m-%d', time.localtime(ts)) + return '' + @Lazy def date(self): ts = self.track.start or getTimeStamp() @@ -367,9 +394,10 @@ class CreateWorkItemForm(ObjectForm, BaseTrackView): @Lazy def actions(self): result = [dict(name=t.name, title=t.title) - for t in self.track.getAvailableTransitions()] - #if t.name != 'delegate' or - # checkPermission('loops.ManageSite', self.context)] + for t in self.track.getAvailableTransitions() + if t.name in self.workItemType.actions] + #and (t.name != 'delegate' or + # checkPermission('loops.ManageSite', self.context))] return result def getTypesParamsForFilteringSelect(self, types=['person']): @@ -452,17 +480,16 @@ class CreateWorkItem(EditObject, BaseTrackView): v = form.get(k) if v: result[k] = v - for k in ('title', 'description', 'comment'): + for k in ('workItemType', 'title', 'description', 'comment'): setValue(k) if action == 'delegate': setValue('party') if action == 'move': setValue('task') + result['deadline'] = parseDate(form.get('deadline')) startDate = form.get('start_date', '').strip() startTime = form.get('start_time', '').strip().replace('T', '') or '00:00:00' endTime = form.get('end_time', '').strip().replace('T', '') or '00:00:00' - #print '***', startDate, startTime, endTime - #if startDate and startTime: if startDate: result['start'] = parseDateTime('T'.join((startDate, startTime))) result['end'] = parseDateTime('T'.join((startDate, endTime))) diff --git a/organize/work/report.py b/organize/work/report.py index 57aae78..7ef40c9 100644 --- a/organize/work/report.py +++ b/organize/work/report.py @@ -66,7 +66,7 @@ class TrackDateField(Field): def getValue(self, row): value = self.getRawValue(row) - if value is None: + if not value: return None return timeStamp2Date(value) @@ -119,6 +119,10 @@ tasks = Field('tasks', u'Tasks', # work report fields +deadline = TrackDateField('deadline', u'Deadline', + description=u'The day the work has to be finished.', + cssClass='center', + executionSteps=['sort', 'output']) dayFrom = TrackDateField('dayFrom', u'Start Day', description=u'The first day from which to select work.', fieldType='date', @@ -285,7 +289,7 @@ class MeetingMinutesWork(WorkReportInstance, SubReport): rowFactory = MeetingMinutesWorkRow - fields = Jeep((workTitle, party, day)) #, state)) #description, + fields = Jeep((workTitle, party, deadline)) #, state)) #description, defaultOutputFields = fields defaultSortCriteria = (day,) states = ('planned', 'accepted', 'running', 'done', diff --git a/organize/work/work_macros.pt b/organize/work/work_macros.pt index 0dde42f..a82c69b 100644 --- a/organize/work/work_macros.pt +++ b/organize/work/work_macros.pt @@ -67,12 +67,29 @@
+ xx_dojoType="dijit.form.Form" + tal:define="workItemTypes view/workItemTypes; + workItemType view/workItemType">
Add Work Item
+ + + + + + +
- -
- - - -
- -
- / -
+
+ +
+
+
+
+ +
+ + - +
+
+
+ +
+ / +
+