Esempio n. 1
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'))
Esempio n. 2
0
 def sync_deadline(self, new_deadline, text, transition):
     sync_task_response(self.context,
                        self.context.REQUEST,
                        'deadline',
                        transition,
                        text,
                        new_deadline=new_deadline)
Esempio n. 3
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'))
Esempio n. 4
0
 def sync_remote_task(self, **kwargs):
     sync_task_response(self.context,
                        self.request,
                        'workflow',
                        kwargs.get('transition'),
                        kwargs.get('text'),
                        responsible=kwargs.get('responsible'),
                        responsible_client=kwargs.get('responsible_client'))
Esempio n. 5
0
 def sync_remote_task(self, **kwargs):
     sync_task_response(self.context, self.request, 'workflow',
                        kwargs.get('transition'),
                        kwargs.get('text'),
                        responsible=kwargs.get('responsible'),
                        responsible_client=kwargs.get('responsible_client'))
Esempio n. 6
0
 def sync_change(self, transition, text, disable_sync):
     if not disable_sync:
         sync_task_response(self.context, getRequest(), 'workflow',
                            transition, text)
 def sync_deadline(self, new_deadline, text, transition):
     sync_task_response(self.context, self.context.REQUEST, 'deadline',
                        transition, text, new_deadline=new_deadline)
Esempio n. 8
0
 def _sync_response(self, text):
     sync_task_response(self.context, self.context.REQUEST, 'comment',
                        self.TRANSITION_TYPE, text)
Esempio n. 9
0
 def sync_change(self, transition, text, disable_sync):
     if not disable_sync:
         sync_task_response(self.context, getRequest(), 'workflow',
                            transition, text)
Esempio n. 10
0
    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)
            transition = data['transition']

            if responseCreator == '(anonymous)':
                new_response.type = 'additional'
            if responseCreator == task.Creator():
                new_response.type = 'clarification'

            new_response.transition = self.transition

            # if util.getManagersVocab.getTerm(responseCreator):
            #   new_response.type =  'reply'
            # check transition
            if transition 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()))

            container = IResponseContainer(self.context)
            container.add(new_response)

            # change workflow state of task
            wftool = getToolByName(self.context, 'portal_workflow')
            before = wftool.getInfoFor(self.context, 'review_state')
            if transition != before:
                before = wftool.getTitleForStateOnType(before, task.Type())
                wftool.doActionFor(self.context, 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)

            notify(ObjectModifiedEvent(self.context))

            self.record_activity(new_response)

            sync_task_response(self.context, self.request, 'workflow',
                               transition, data.get('text'))

            url = self.context.absolute_url()
            self.request.RESPONSE.redirect(url)
            return new_response
Esempio n. 11
0
    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)
            transition = data['transition']

            if responseCreator == '(anonymous)':
                new_response.type = 'additional'
            if responseCreator == task.Creator():
                new_response.type = 'clarification'

            new_response.transition = self.transition

            # if util.getManagersVocab.getTerm(responseCreator):
            #   new_response.type =  'reply'
            # check transition
            if transition 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()))

            container = IResponseContainer(self.context)
            container.add(new_response)

            # change workflow state of task
            wftool = getToolByName(self.context, 'portal_workflow')
            before = wftool.getInfoFor(self.context, 'review_state')
            if transition != before:
                before = wftool.getTitleForStateOnType(before, task.Type())
                wftool.doActionFor(self.context, 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)

            notify(ObjectModifiedEvent(self.context))

            self.record_activity(new_response)

            sync_task_response(self.context, self.request, 'workflow',
                               transition, data.get('text'))

            url = self.context.absolute_url()
            self.request.RESPONSE.redirect(url)
            return new_response