def test_creating_and_extraction(self): class DummyResponse(object): def getStatus(self): return 200 class DummyRequest(dict): def __init__(self): self.response = DummyResponse() remote_task = self.providing_stub( [ITask, IAttributeAnnotatable]) request = DummyRequest() context = self.providing_stub( [ITask, IAttributeAnnotatable]) self.replay() response = Response(u'Sample text') response.creator = u'hugo.boss' response.date = DateTime("02.07.2010") response.add_change( 'review_state', 'State', 'before-state', 'after-state') response.add_change( 'responsible', 'Responsible', 'hugo.boss', 'james.bond') container = IResponseContainer(remote_task) container.add(response) # extract request.intids_mapping = {} data = ExtractResponses(remote_task, request)() # receive request['responses'] = data ReceiveResponses(context, request)() # check if the response is correctly synced self.assertTrue(len(IResponseContainer(context)) == 1) synced_response = IResponseContainer(context)[0] self.assertEquals(synced_response.text, response.text) self.assertEquals(synced_response.creator, response.creator) self.assertEquals(synced_response.date, response.date) # changes self.assertEquals( synced_response.changes, [ {u'after': u'after-state', u'id': u'review_state', u'name': u'State', u'before': u'before-state'}, {u'after': u'james.bond', u'id': u'responsible', u'name': u'Responsible', u'before': u'hugo.boss'}])
def test_migrates_plone_task_responsible_after(self): task = create(Builder('task')) response = Response('') response.add_change('responsible', 'foo', 'peter', 'HANS.MUSTER') IResponseContainer(task).add(response) PloneTasksMigrator(self.portal, { 'HANS.MUSTER': 'hans.muster' }, 'move').migrate() self.assertEquals('hans.muster', response.changes[-1]['after'])
def test_creating_and_extraction(self): class DummyResponse(object): def getStatus(self): return 200 class DummyRequest(dict): def __init__(self): self.response = DummyResponse() remote_task = self.providing_stub([ITask, IAttributeAnnotatable]) request = DummyRequest() context = self.providing_stub([ITask, IAttributeAnnotatable]) self.replay() response = Response(u'Sample text') response.creator = u'hugo.boss' response.date = DateTime("02.07.2010") response.add_change('review_state', 'State', 'before-state', 'after-state') response.add_change('responsible', 'Responsible', 'hugo.boss', 'james.bond') container = IResponseContainer(remote_task) container.add(response) # extract request.intids_mapping = {} data = ExtractResponses(remote_task, request)() # receive request['responses'] = data ReceiveResponses(context, request)() # check if the response is correctly synced self.assertTrue(len(IResponseContainer(context)) == 1) synced_response = IResponseContainer(context)[0] self.assertEquals(synced_response.text, response.text) self.assertEquals(synced_response.creator, response.creator) self.assertEquals(synced_response.date, response.date) # changes self.assertEquals(synced_response.changes, [{ u'after': u'after-state', u'id': u'review_state', u'name': u'State', u'before': u'before-state' }, { u'after': u'james.bond', u'id': u'responsible', u'name': u'Responsible', u'before': u'hugo.boss' }])
def handleSubmit(self, action): data, errors = self.extractData() if errors: errorMessage = '<ul>' for error in errors: if errorMessage.find(error.message): errorMessage += '<li>' + error.message + '</li>' errorMessage += '</ul>' self.status = errorMessage return None else: new_response = Response(data.get('text')) #define responseTyp responseCreator = new_response.creator task = aq_inner(self.context) if responseCreator == '(anonymous)': new_response.type = 'additional' if responseCreator == task.Creator(): new_response.type = 'clarification' if data.get('transition', None): new_response.transition = data.get('transition', None) #if util.getManagersVocab.getTerm(responseCreator): # new_response.type = 'reply' #check transition if data.get('transition', None) in ('task-transition-open-resolved', 'task-transition-in-progress-resolved'): completion_date = datetime.date.today() else: completion_date = None #check other fields options = [ # (task.deadline, data.get('deadline'), 'deadline', # _('deadline')), (task.date_of_completion, completion_date, 'date_of_completion', _('date_of_completion')) ] for task_field, resp_field, option, title in options: if resp_field and task_field != resp_field: new_response.add_change(option, title, task_field, resp_field) task.__setattr__(option, resp_field) # save relatedItems on task related_ids = [] if getattr(task, 'relatedItems'): related_ids = [item.to_id for item in task.relatedItems] relatedItems = data.get('relatedItems') or [] intids = getUtility(IIntIds) for item in relatedItems: to_id = intids.getId(item) # relation allready exists item._v__is_relation = True if to_id not in related_ids: if getattr(task, 'relatedItems'): task.relatedItems.append(RelationValue(to_id)) else: setattr(task, 'relatedItems', [RelationValue(to_id)]) new_response.add_change( 'relatedItems', _(u'label_related_items', default=u"Related Items"), '', linked(item, item.Title())) # change workflow state of task if data.get('transition'): wftool = getToolByName(self.context, 'portal_workflow') before = wftool.getInfoFor(self.context, 'review_state') if data.get('transition') != before: before = wftool.getTitleForStateOnType(before, task.Type()) wftool.doActionFor(self.context, data.get('transition')) after = wftool.getInfoFor(self.context, 'review_state') after = wftool.getTitleForStateOnType(after, task.Type()) new_response.add_change('review_state', _(u'Issue state'), before, after) container = IResponseContainer(self.context) container.add(new_response) notify(ObjectModifiedEvent(self.context)) if data.get('transition'): syncer = getMultiAdapter((self.context, self.request), IWorkflowStateSyncer) syncer.change_remote_tasks_workflow_state( data.get('transition'), text=data.get('text')) copy_related_documents_view = self.context.restrictedTraverse( '@@copy-related-documents-to-inbox') if copy_related_documents_view.available(): url = os.path.join(self.context.absolute_url(), '@@copy-related-documents-to-inbox') else: url = self.context.absolute_url() self.request.RESPONSE.redirect(url) return new_response
def handleSubmit(self, action): data, errors = self.extractData() if errors: errorMessage = '<ul>' for error in errors: if errorMessage.find(error.message): errorMessage += '<li>' + error.message + '</li>' errorMessage += '</ul>' self.status = errorMessage return None else: new_response = Response(data.get('text')) #define responseTyp responseCreator = new_response.creator task = aq_inner(self.context) if responseCreator == '(anonymous)': new_response.type = 'additional' if responseCreator == task.Creator(): new_response.type = 'clarification' if data.get('transition', None): new_response.transition = data.get('transition', None) #if util.getManagersVocab.getTerm(responseCreator): # new_response.type = 'reply' #check transition if data.get('transition', None) in ( 'task-transition-open-resolved', 'task-transition-in-progress-resolved'): completion_date = datetime.date.today() else: completion_date = None #check other fields options = [ # (task.deadline, data.get('deadline'), 'deadline', # _('deadline')), (task.date_of_completion, completion_date, 'date_of_completion', _('date_of_completion'))] for task_field, resp_field, option, title in options: if resp_field and task_field != resp_field: new_response.add_change(option, title, task_field, resp_field) task.__setattr__(option, resp_field) # save relatedItems on task related_ids = [] if getattr(task, 'relatedItems'): related_ids = [item.to_id for item in task.relatedItems] relatedItems = data.get('relatedItems') or [] intids = getUtility(IIntIds) for item in relatedItems: to_id = intids.getId(item) # relation allready exists item._v__is_relation = True if to_id not in related_ids: if getattr(task, 'relatedItems'): task.relatedItems.append(RelationValue(to_id)) else: setattr(task, 'relatedItems', [RelationValue(to_id)]) new_response.add_change('relatedItems', _(u'label_related_items', default=u"Related Items"), '', linked(item, item.Title())) # change workflow state of task if data.get('transition'): wftool = getToolByName(self.context, 'portal_workflow') before = wftool.getInfoFor(self.context, 'review_state') if data.get('transition') != before: before = wftool.getTitleForStateOnType(before, task.Type()) wftool.doActionFor(self.context, data.get('transition')) after = wftool.getInfoFor(self.context, 'review_state') after = wftool.getTitleForStateOnType(after, task.Type()) new_response.add_change('review_state', _(u'Issue state'), before, after) container = IResponseContainer(self.context) container.add(new_response) notify(ObjectModifiedEvent(self.context)) if data.get('transition'): syncer = getMultiAdapter((self.context, self.request), IWorkflowStateSyncer) syncer.change_remote_tasks_workflow_state( data.get('transition'), text=data.get('text')) copy_related_documents_view = self.context.restrictedTraverse( '@@copy-related-documents-to-inbox') if copy_related_documents_view.available(): url = os.path.join(self.context.absolute_url(), '@@copy-related-documents-to-inbox') else: url = self.context.absolute_url() self.request.RESPONSE.redirect(url) return new_response