Exemplo n.º 1
0
def create_subtask_response(context, event):
    """When adding a new task object within a task(subtask),
    it adds a response to the maintask.
    """

    # the event is fired multiple times when the task was transported, so we
    # need to verify that the request was not called by another client.
    request = context.REQUEST
    if request.get_header('X-OGDS-AC', None) or \
            request.get_header('X-OGDS-AUID', None) or \
            request.get('X-CREATING-SUCCESSOR', None):
        return

    parent = aq_parent(aq_inner(context))
    if ITask.providedBy(parent):
        if ITask.providedBy(context):
            transition = 'transition-add-subtask'

            # If the the added object is a subtask we have to make sure
            # that the subtask is already synced to the globalindex
            if not context.get_sql_object():
                TaskSqlSyncer(context, event).sync()

        elif IBaseDocument.providedBy(context):
            transition = 'transition-add-document'

        # add a response with a link to the object
        add_simple_response(parent,
                            added_object=context,
                            transition=transition)
Exemplo n.º 2
0
def create_subtask_response(context, event):
    """When adding a new task object within a task(subtask),
    it adds a response to the maintask.
    """

    # the event is fired multiple times when the task was transported, so we
    # need to verify that the request was not called by another client.
    request = context.REQUEST
    if request.get_header('X-OGDS-AC', None) or \
            request.get_header('X-OGDS-AUID', None) or \
            request.get('X-CREATING-SUCCESSOR', None):
        return

    parent = aq_parent(aq_inner(context))
    if ITask.providedBy(parent):
        if ITask.providedBy(context):
            transition = 'transition-add-subtask'

            # If the the added object is a subtask we have to make sure
            # that the subtask is already synced to the globalindex
            if not context.get_sql_object():
                TaskSqlSyncer(context, event).sync()

        elif IBaseDocument.providedBy(context):
            transition = 'transition-add-document'

        # add a response with a link to the object
        add_simple_response(parent, added_object=context,
                            transition=transition)
Exemplo n.º 3
0
    def test_syncing_response_changes(self):
        add_simple_response(
            self.task,
            text=u'Neu zugewiesen',
            field_changes=[(ITask['responsible'], 'peter.mueller'),
                           (ITask['responsible_client'], 'client2')],
            transition='task-transition-reassign',
        )

        copy = create(Builder('task').in_state('task-state-in-progress'))
        IResponseTransporter(self.task).send_responses(
            'client1', copy.get_physical_path())

        self.assertEquals([{
            u'after': u'peter.mueller',
            u'id': u'responsible',
            u'name': u'label_responsible',
            u'before': u'hugo.boss'
        }, {
            u'after': u'client2',
            u'id': u'responsible_client',
            u'name': u'label_resonsible_client',
            u'before': u'client1'
        }],
                          IResponseContainer(copy)[1].changes)
Exemplo n.º 4
0
 def add_response(self, **kwargs):
     add_simple_response(
         self.context,
         text=kwargs.get('text'),
         field_changes=(
             (ITask['responsible'], kwargs.get('responsible')),
             (ITask['responsible_client'],
              kwargs.get('responsible_client')),),
         transition=kwargs.get('transition'))
Exemplo n.º 5
0
    def update_deadline(self, new_deadline, text, transition):
        add_simple_response(self.context,
                            text=text,
                            field_changes=((ITask['deadline'],
                                            new_deadline), ),
                            transition=transition)

        self.context.deadline = new_deadline
        notify(ObjectModifiedEvent(self.context))
Exemplo n.º 6
0
    def update_deadline(self, new_deadline, text):
        add_simple_response(
            self.context, text=text,
            field_changes=(
                (ITask['deadline'], new_deadline),
            ),
        )

        self.context.deadline = new_deadline
        notify(ObjectModifiedEvent(self.context))
    def update_deadline(self, new_deadline, text, transition):
        add_simple_response(
            self.context, text=text,
            field_changes=(
                (ITask['deadline'], new_deadline),
            ),
            transition=transition,
            supress_events=True)

        self.context.deadline = new_deadline
        notify(ObjectModifiedEvent(self.context))
        self.context.update_reminder_trigger_dates()
Exemplo n.º 8
0
    def after_transition_hook(self, transition, disable_sync, transition_params):
        successor_task = self.create_successor_task(transition_params['dossier'])

        add_simple_response(
            self.context, transition=transition, text=transition_params.get('text'),
            successor_oguid=Oguid.for_object(successor_task).id)

        # set predecessor on successor task
        successor_tc_task = ISuccessorTaskController(successor_task)
        successor_tc_task.set_predecessor(Oguid.for_object(self.context).id)

        IYearfolderStorer(self.context).store_in_yearfolder()
        return successor_task
Exemplo n.º 9
0
    def after_transition_hook(self, transition, disable_sync, transition_params):
        # Revoke local roles for current responsible, except if
        # revoke_permissions is set to False.
        # the roles for the new responsible will be assigned afterwards
        # in set_roles_after_modifying on the ObjectModifiedEvent.
        if self.context.revoke_permissions:
            LocalRolesSetter(self.context).revoke_roles()

        former_responsible = ITask['responsible']
        former_responsible_client = ITask['responsible_client']

        self.context.clear_reminder(self.context.responsible)

        changes = (
            (former_responsible, transition_params.get('responsible')),
            (former_responsible_client, transition_params.get('responsible_client')))
        response = add_simple_response(
            self.context, transition=transition, text=transition_params.get('text'),
            field_changes=changes, supress_events=True)

        self.save_related_items(response, transition_params.get('relatedItems'))
        self.change_responsible(transition_params)
        notify(ObjectModifiedEvent(self.context))
        self.record_activity(response)

        if not disable_sync:
            sync_task_response(
                self.context, getRequest(), 'workflow',
                transition, transition_params.get('text'),
                responsible=transition_params.get('responsible'),
                responsible_client=transition_params.get('responsible_client'))
Exemplo n.º 10
0
    def after_transition_hook(self, transition, disable_sync, transition_params):
        response = add_simple_response(
            self.context, transition=transition,
            text=transition_params.get('text'))

        self.save_related_items(response, transition_params.get('relatedItems'))
        self.sync_change(transition, transition_params.get('text'), disable_sync)
Exemplo n.º 11
0
    def after_transition_hook(self, transition, disable_sync, transition_params):
        response = add_simple_response(
            self.context, transition=transition,
            text=transition_params.get('text'))

        self.save_related_items(response, transition_params.get('relatedItems'))
        self.sync_change(transition, transition_params.get('text'), disable_sync)
Exemplo n.º 12
0
    def after_transition_hook(self, transition, disable_sync, transition_params):
        # Revoke local roles for current responsible, except if
        # revoke_permissions is set to False.
        # the roles for the new responsible will be assigned afterwards
        # in set_roles_after_modifying on the ObjectModifiedEvent.
        if self.context.revoke_permissions:
            LocalRolesSetter(self.context).revoke_roles()

        former_responsible = ITask['responsible']
        former_responsible_client = ITask['responsible_client']

        TaskReminder().clear_reminder(self.context, self.context.responsible)

        changes = (
            (former_responsible, transition_params.get('responsible')),
            (former_responsible_client, transition_params.get('responsible_client')))
        response = add_simple_response(
            self.context, transition=transition, text=transition_params.get('text'),
            field_changes=changes, supress_events=True)

        self.save_related_items(response, transition_params.get('relatedItems'))
        self.change_responsible(transition_params)
        notify(ObjectModifiedEvent(self.context))
        self.record_activity(response)

        if not disable_sync:
            sync_task_response(
                self.context, getRequest(), 'workflow',
                transition, transition_params.get('text'),
                responsible=transition_params.get('responsible'),
                responsible_client=transition_params.get('responsible_client'))
    def setUp(self):
        super(TestResponeTransporter, self).setUp()

        create(Builder('ogds_user')
               .having(userid=u'peter.mueller', firstname=u'Peter',
                       lastname=u'M\xfcller'))
        create(Builder('ogds_user')
               .having(userid=u'hugo.boss', firstname=u'Hugo',
                       lastname=u'B\xf6ss'))

        self.task = create(Builder('task')
                           .having(responsible=u'hugo.boss',
                                   deadline=date(2016, 03, 27))
                           .in_state('task-state-in-progress'))
        add_simple_response(self.task,
                            text=u'Ich \xfcbernehme diese Aufgabe',
                            transition='task-transition-open-in-progress')
Exemplo n.º 14
0
def create_subtask_response(context, event):
    """When adding a new task object within a task(subtask),
    it adds a response to the maintask.
    """

    # the event is fired multiple times when the task was transported, so we
    # need to verify that the request was not called by another client.
    request = context.REQUEST
    if request.get_header('X-OGDS-AC', None) or \
            request.get_header('X-OGDS-CID', None) or \
            request.get('X-CREATING-SUCCESSOR', None):
        return

    parent = aq_parent(aq_inner(context))

    if ITask.providedBy(parent):
        # add a response with a link to the object
        add_simple_response(parent, added_object=context)
Exemplo n.º 15
0
    def setUp(self):
        super(TestResponeTransporter, self).setUp()

        create(Builder('ogds_user')
               .having(userid=u'peter.mueller', firstname=u'Peter',
                       lastname=u'M\xfcller'))
        create(Builder('ogds_user')
               .having(userid=u'hugo.boss', firstname=u'Hugo',
                       lastname=u'B\xf6ss'))

        self.task = create(Builder('task')
                           .having(responsible=u'hugo.boss',
                                   responsible_client=u'org-unit-1',
                                   deadline=date(2016, 03, 27))
                           .in_state('task-state-in-progress'))
        add_simple_response(self.task,
                            text=u'Ich \xfcbernehme diese Aufgabe',
                            transition='task-transition-open-in-progress')
Exemplo n.º 16
0
 def add_response(self, **kwargs):
     return add_simple_response(
         self.context,
         text=kwargs.get('text'),
         field_changes=(
             (ITask['responsible'], kwargs.get('responsible')),
             (ITask['responsible_client'],
              kwargs.get('responsible_client')),),
         transition=kwargs.get('transition'))
Exemplo n.º 17
0
    def render(self):
        # set responsible
        self.context.responsible_client = get_client_id()
        self.context.responsible = u'inbox:%s' % (
            self.context.responsible_client)

        # create a response in the task
        add_simple_response(
            self.context,
            field_changes=(
                (ITask['responsible'], self.context.responsible),
                (ITask['responsible_client'],
                 self.context.responsible_client),),
            transition=u'forwarding-transition-refuse')

        notify(ObjectModifiedEvent(self.context))

        return self.request.RESPONSE.redirect('.')
Exemplo n.º 18
0
    def render(self):
        # set responsible
        org_unit = get_current_org_unit()
        self.context.responsible_client = org_unit.id()
        self.context.responsible = org_unit.inbox().id()

        # create a response in the task
        add_simple_response(
            self.context,
            field_changes=(
                (ITask['responsible'], self.context.responsible),
                (ITask['responsible_client'],
                 self.context.responsible_client),),
            transition=u'forwarding-transition-refuse')

        notify(ObjectModifiedEvent(self.context))

        return self.request.RESPONSE.redirect('.')
Exemplo n.º 19
0
 def add_reassign_response(self, data):
     return add_simple_response(
         self.context,
         text=None,
         field_changes=(
             (ITask['responsible'], data.get('responsible')),
             (ITask['responsible_client'],
              data.get('responsible_client')),),
         transition=REASSIGN_TRANSITION, supress_events=True)
Exemplo n.º 20
0
    def after_transition_hook(self, transition, disable_sync, transition_params):
        response = add_simple_response(self.context, transition=transition,
                                       text=transition_params.get('text'),
            supress_activity=True)

        TaskAddedActivity(
            self.context, getRequest(), aq_parent(self.context)).record()

        self.save_related_items(response, transition_params.get('relatedItems'))
        self.sync_change(transition, transition_params.get('text'), disable_sync)
Exemplo n.º 21
0
    def __call__(self):
        # set responsible
        org_unit = get_current_org_unit()
        self.context.responsible_client = org_unit.id()
        self.context.responsible = org_unit.inbox().id()

        # create a response in the task
        add_simple_response(self.context,
                            field_changes=(
                                (ITask['responsible'],
                                 self.context.responsible),
                                (ITask['responsible_client'],
                                 self.context.responsible_client),
                            ),
                            transition=u'forwarding-transition-refuse')

        notify(ObjectModifiedEvent(self.context))

        return self.request.RESPONSE.redirect('.')
Exemplo n.º 22
0
 def add_reassign_response(self, data):
     return add_simple_response(self.context,
                                text=None,
                                field_changes=(
                                    (ITask['responsible'],
                                     data.get('responsible')),
                                    (ITask['responsible_client'],
                                     data.get('responsible_client')),
                                ),
                                transition=REASSIGN_TRANSITION)
Exemplo n.º 23
0
    def after_transition_hook(self, transition, disable_sync, transition_params):
        response = add_simple_response(self.context, transition=transition,
                                       text=transition_params.get('text'),
            supress_activity=True)

        TaskAddedActivity(
            self.context, getRequest(), aq_parent(self.context)).record()

        self.save_related_items(response, transition_params.get('relatedItems'))
        self.sync_change(transition, transition_params.get('text'), disable_sync)
    def test_syncing_response_changes(self):
        add_simple_response(self.task,
                            text=u'Neu zugewiesen',
                            field_changes=[(ITask['responsible'], 'peter.mueller'),
                                           (ITask['responsible_client'], 'client2')],
                            transition='task-transition-reassign',)

        copy = create(Builder('task').in_state('task-state-in-progress'))
        IResponseTransporter(self.task).send_responses(
            'client1', copy.get_physical_path())

        self.assertEquals([{u'after': u'peter.mueller',
                            u'id': u'responsible',
                            u'name': u'label_responsible',
                            u'before': u'hugo.boss'},
                           {u'after': u'client2',
                            u'id': u'responsible_client',
                            u'name': u'label_resonsible_client',
                            u'before': u'client1'}],
                          IResponseContainer(copy)[1].changes)
Exemplo n.º 25
0
    def render(self):

        if not IInternalOpengeverRequestLayer.providedBy(self.request):
            raise Forbidden()

        transition = self.request.get('transition')
        text = self.request.get('text')
        responsible = self.request.get('responsible')
        responsible_client = self.request.get('responsible_client')

        if self.is_already_done(transition, text):
            # Set correct content type for text response
            self.request.response.setHeader("Content-type", "text/plain")

            return 'OK'

        wftool = getToolByName(self.context, 'portal_workflow')

        # change workflow state
        before = wftool.getInfoFor(self.context, 'review_state')
        before = wftool.getTitleForStateOnType(before, self.context.Type())

        wftool.doActionFor(self.context, transition)

        after = wftool.getInfoFor(self.context, 'review_state')
        after = wftool.getTitleForStateOnType(after, self.context.Type())

        # create response
        response = add_simple_response(
            self.context,
            transition=transition,
            text=text)

        if responsible and responsible is not 'None':
            # special handling for reassign
            response.add_change(
                'reponsible',
                _(u"label_responsible", default=u"Responsible"),
                ITask(self.context).responsible,
                responsible)

            ITask(self.context).responsible_client = responsible_client
            ITask(self.context).responsible = responsible

            notify(ObjectModifiedEvent(self.context))

        response.add_change('review_state', _(u'Issue state'),
                            before, after)

        # Set correct content type for text response
        self.request.response.setHeader("Content-type", "text/plain")

        return 'OK'
Exemplo n.º 26
0
    def test_response_view(self):
        # test added objects info
        add_simple_response(self.task,
                            text=u'field',
                            added_object=[self.doc1, self.doc2])

        # test field changes info
        add_simple_response(self.task,
                            text=u'field',
                            field_changes=(
                                (ITask['responsible'], TEST_USER_ID),
                                (ITask['responsible_client'], 'plone'),
                            ),
                            transition=u'task-transition-open-in-progress')

        # test successsor info
        successor_oguid = ISuccessorTaskController(self.successor).get_oguid()
        add_simple_response(self.task, successor_oguid=successor_oguid)

        transaction.commit()

        self.assertEquals(len(IResponseContainer(self.task)), 3)

        # test different responeses and their infos
        self.browser.open('%s/tabbedview_view-overview' %
                          self.task.absolute_url())

        # TODO: replace with OGBrowse API. What is it looking for?
        self.assertEquals(
            'Added successor task',
            self.browser.css('div.response-info div span.label')
            [0].plain_text())

        successor_info = """<span class="issueChange"><span class="wf-task-state-open"><a href="http://nohost/plone/dossier-1/task-2" title="[Plone] > dossier-1 > Test task 1"><span class="rollover-breadcrumb icon-task-remote-task">Test task 1</span></a>  <span class="discreet">(Client2 / <a href="http://nohost/plone/@@user-details/testuser2">User 2 Test (testuser2)</a>)</span></span></span>"""

        self.assertTrue(successor_info in self.browser.contents)

        responsible_container = self.browser.xpath(
            "//div[@class='response-info']/div[descendant-or-self::*[contains(text(), 'label_responsible')]]"
        )[0]
        links = responsible_container.xpath("./*/a")
        self.assertEquals(
            ['User 2 Test (testuser2)', 'User Test (test_user_1_)'],
            [l.text for l in links])
        self.assertEquals([
            'http://nohost/plone/@@user-details/testuser2',
            'http://nohost/plone/@@user-details/test_user_1_'
        ], [l.attrib["href"] for l in links])

        documents = self.browser.css(
            ".contenttype-opengever-document-document")
        self.assertEquals(['Doc 1', 'Doc 2'],
                          [d.plain_text() for d in documents])
        self.assertEquals([
            'http://nohost/plone/dossier-1/document-1',
            'http://nohost/plone/dossier-1/document-2'
        ], [d.attrib["href"] for d in documents])

        # edit and delete should not be possible
        self.assertEquals([], self.browser.css("input[type='submit']"))
Exemplo n.º 27
0
    def after_transition_hook(self, transition, disable_sync, transition_params):
        self.update_watchers()

        response = add_simple_response(
            self.context, transition=transition, text=transition_params.get('text'))

        response.add_change(
            'responsible',
            _(u"label_responsible", default=u"Responsible"),
            ITask(self.context).responsible, ITask(self.context).issuer)

        self.save_related_items(response, transition_params.get('relatedItems'))
        self.switch_responsible()
Exemplo n.º 28
0
    def after_transition_hook(self, transition, disable_sync, transition_params):
        self.update_watchers()

        response = add_simple_response(
            self.context, transition=transition, text=transition_params.get('text'))

        response.add_change(
            'responsible',
            ITask(self.context).responsible, ITask(self.context).issuer,
            _(u"label_responsible", default=u"Responsible"))

        self.save_related_items(response, transition_params.get('relatedItems'))
        self.switch_responsible()
Exemplo n.º 29
0
    def test_response_view(self):
        # test added objects info
        add_simple_response(
            self.task, text=u'field', added_object=[self.doc1, self.doc2])

        # test field changes info
        add_simple_response(
            self.task, text=u'field',
            field_changes=(
                (ITask['responsible'], TEST_USER_ID),
                (ITask['responsible_client'], 'plone'),
                ),
            transition=u'task-transition-open-in-progress')

        # test successsor info
        successor_oguid = ISuccessorTaskController(self.successor).get_oguid()
        add_simple_response(self.task, successor_oguid=successor_oguid)

        transaction.commit()

        self.assertEquals(len(IResponseContainer(self.task)), 3)

        # test different responeses and their infos
        self.browser.open(
            '%s/tabbedview_view-overview' % self.task.absolute_url())

        # TODO: replace with OGBrowse API. What is it looking for?
        self.assertEquals(
            'Added successor task',
            self.browser.css('div.response-info div span.label')[0].plain_text())

        successor_info = """<span class="issueChange"><span class="wf-task-state-open"><a href="http://nohost/plone/dossier-1/task-2" title="[Plone] > dossier-1 > Test task 1"><span class="rollover-breadcrumb icon-task-remote-task">Test task 1</span></a>  <span class="discreet">(Client2 / <a href="http://nohost/plone/@@user-details/testuser2">User 2 Test (testuser2)</a>)</span></span></span>"""

        self.assertTrue(successor_info in self.browser.contents)

        responsible_container = self.browser.xpath("//div[@class='response-info']/div[descendant-or-self::*[contains(text(), 'label_responsible')]]")[0]
        links = responsible_container.xpath("./*/a")
        self.assertEquals(['User 2 Test (testuser2)', 'User Test (test_user_1_)'],
                          [l.text for l in links])
        self.assertEquals(['http://nohost/plone/@@user-details/testuser2',
                           'http://nohost/plone/@@user-details/test_user_1_'],
                          [l.attrib["href"] for l in links])

        documents = self.browser.css(".contenttype-opengever-document-document")
        self.assertEquals(['Doc 1', 'Doc 2'], [d.plain_text() for d in documents])
        self.assertEquals(['http://nohost/plone/dossier-1/document-1',
                           'http://nohost/plone/dossier-1/document-2'],
                          [d.attrib["href"] for d in documents])

        # edit and delete should not be possible
        self.assertEquals([], self.browser.css("input[type='submit']"))
Exemplo n.º 30
0
    def render(self):
        self.check_internal_request()

        transition = self.request.get("transition")
        text = self.request.get("text")
        responsible = self.request.get("responsible")
        responsible_client = self.request.get("responsible_client")

        if self.is_already_done(transition, text):
            return ok_response(self.request)

        wftool = getToolByName(self.context, "portal_workflow")

        # change workflow state
        before = wftool.getInfoFor(self.context, "review_state")
        before = wftool.getTitleForStateOnType(before, self.context.Type())

        wftool.doActionFor(self.context, transition)

        after = wftool.getInfoFor(self.context, "review_state")
        after = wftool.getTitleForStateOnType(after, self.context.Type())

        # create response
        response = add_simple_response(self.context, transition=transition, text=text)

        if responsible and responsible is not "None":
            # special handling for reassign
            response.add_change(
                "responsible",
                _(u"label_responsible", default=u"Responsible"),
                ITask(self.context).responsible,
                responsible,
            )

            ITask(self.context).responsible_client = responsible_client
            ITask(self.context).responsible = responsible

            notify(ObjectModifiedEvent(self.context))

        response.add_change("review_state", _(u"Issue state"), before, after)

        return ok_response(self.request)
Exemplo n.º 31
0
 def _update(self, transition, text):
     """Updates the current task with the received data
     """
     return add_simple_response(self.context,
                                transition=transition,
                                text=text)
Exemplo n.º 32
0
    def after_transition_hook(self, transition, disable_sync, transition_params):
        add_simple_response(
            self.context, transition=transition, text=transition_params.get('text'))

        IYearfolderStorer(self.context).store_in_yearfolder()
Exemplo n.º 33
0
 def add_response(self, response_text):
     add_simple_response(
         self.context,
         text=response_text,
         transition=u'forwarding-transition-refuse', supress_events=True)
Exemplo n.º 34
0
 def add_response(self, response_text):
     add_simple_response(
         self.context,
         text=response_text,
         transition=u'forwarding-transition-refuse')
Exemplo n.º 35
0
 def add_response(self, response_text):
     add_simple_response(self.context,
                         text=response_text,
                         transition=u'forwarding-transition-refuse')
Exemplo n.º 36
0
 def add_response(self, response_text):
     add_simple_response(self.context,
                         text=response_text,
                         transition=u'forwarding-transition-refuse',
                         supress_events=True)