def tasks(self): items = defaultdict(list) if self.is_case else [] catalog = api.portal.get_tool('portal_catalog') wft = api.portal.get_tool('portal_workflow') current_path = '/'.join(self.getPhysicalPath()) ptype = 'todo' brains = catalog(path=current_path, portal_type=ptype, sort_on='due') for brain in brains: obj = brain.getObject() todo = ITodo(obj) assignee = api.user.get(obj.assignee) if obj.assignee else None initiator = api.user.get(obj.initiator) if obj.initiator else None data = { 'id': brain.UID, 'title': brain.Title, 'description': brain.Description, 'url': brain.getURL(), 'checked': wft.getInfoFor(todo, 'review_state') == u'done', 'due': obj.due, 'assignee': assignee, 'initiator': initiator, } if self.is_case: milestone = "unassigned" if obj.milestone not in ["", None]: milestone = obj.milestone items[milestone].append(data) else: items.append(data) if self.is_case: for milestone in items.keys(): # Show the checked tasks before the unchecked tasks items[milestone].sort(key=lambda x: x['checked'] is False) return items
def setUp(self): self.portal = self.layer['portal'] obj = api.content.create( type='todo', title='todo1', container=self.portal, ) todo = ITodo(self.portal.todo1) todo.assignee = TEST_USER_ID event = ObjectModifiedEvent(obj) zope.event.notify(event)
def tasks(self): ''' Get the context tasks ''' is_case = self.context.is_case items = defaultdict(list) if is_case else [] wft = api.portal.get_tool('portal_workflow') ptype = 'todo' brains = api.content.find( context=self.context, portal_type=ptype, sort_on=['due', 'getObjPositionInParent'], ) today = date.today() for brain in brains: obj = brain.getObject() todo = ITodo(obj) done = wft.getInfoFor(todo, 'review_state') == u'done' overdue = False if not done and todo.due: overdue = todo.due < today data = { 'id': brain.UID, 'title': brain.Title, 'description': brain.Description, 'url': brain.getURL(), 'checked': done, 'due': todo.due, 'overdue': overdue, 'obj': obj, 'can_edit': api.user.has_permission('Modify portal content', obj=obj), } if is_case: milestone = "unassigned" if obj.milestone not in ["", None]: milestone = obj.milestone items[milestone].append(data) else: items.append(data) if is_case: for milestone in items.keys(): # Show the checked tasks before the unchecked tasks items[milestone].sort(key=lambda x: x['checked'] is False) return items
def create_tasks(todos): portal = api.portal.get() if 'todos' not in portal: todos_folder = api.content.create(type='Folder', title='Todos', container=portal) else: todos_folder = portal['todos'] for data in todos: obj = create_as(data['creator'], type='simpletodo', title=data['title'], container=todos_folder) todo = ITodo(obj) todo.assignee = data['assignee']