def create_subtask(self, main_task, template, values):
        data = dict(
            title=template.title,
            issuer=template.issuer,
            responsible=template.responsible,
            responsible_client=template.responsible_client,
            task_type=template.task_type,
            text=template.text,
            relatedItems=self.related_documents,
            deadline=date.today() + timedelta(template.deadline),
        )

        data.update(values)
        self.replace_interactive_actors(data)

        task = self.add_task(main_task, data)
        self.set_initial_state(task, template)
        task.reindexObject()
        task.get_sql_object().sync_with(task)

        # add activity record for subtask
        if api.content.get_state(task) != TASK_STATE_PLANNED:
            activity = TaskAddedActivity(task, getRequest(), main_task)
            activity.record()

        return task
예제 #2
0
def create_subtask(task, data):
    subtask = createContent('opengever.task.task',
                            id=data['title'],
                            **data)
    notify(ObjectCreatedEvent(subtask))
    subtask = addContentToContainer(task, subtask,
                                    checkConstraints=True)

    for schemata in iterSchemata(subtask):
        super_repr = schemata(task)
        repr = schemata(subtask)

        for name, field in schema.getFieldsInOrder(schemata):
            if name in data:
                value = data[name]

            else:
                value = getattr(super_repr, name, None)

            setattr(repr, name, value)

    activity = TaskAddedActivity(subtask, task.REQUEST, task)
    activity.record()

    notify(ObjectModifiedEvent(subtask))
    return subtask
예제 #3
0
def create_subtask(task, data):
    subtask = createContent('opengever.task.task',
                            id=data['title'],
                            **data)
    notify(ObjectCreatedEvent(subtask))
    subtask = addContentToContainer(task, subtask,
                                    checkConstraints=True)

    for schemata in iterSchemata(subtask):
        super_repr = schemata(task)
        repr = schemata(subtask)

        for name, field in schema.getFieldsInOrder(schemata):
            if name in data:
                value = data[name]

            else:
                value = getattr(super_repr, name, None)

            setattr(repr, name, value)

    activity = TaskAddedActivity(subtask, task.REQUEST, task)
    activity.record()

    notify(ObjectModifiedEvent(subtask))
    return subtask
    def create_subtask(self, main_task, template, values):
        data = dict(
            title=template.title,
            issuer=template.issuer,
            responsible=template.responsible,
            responsible_client=template.responsible_client,
            task_type=template.task_type,
            text=template.text,
            relatedItems=self.related_documents,
            deadline=date.today() + timedelta(template.deadline),
        )

        data.update(values)
        self.replace_interactive_actors(data)

        task = self.add_task(main_task, data)
        self.set_initial_state(task, template)
        task.reindexObject()
        task.get_sql_object().sync_with(task)

        # add activity record for subtask
        if api.content.get_state(task) != TASK_STATE_PLANNED:
            activity = TaskAddedActivity(task, getRequest(), main_task)
            activity.record()

        return task
예제 #5
0
    def test_notification_mails_dont_interfere_with_txn_savepoints(self):
        # Login with a different user than task_responsible to trigger mail
        self.login(self.dossier_responsible)

        # Trigger a notification that dispatches a mail
        activity = TaskAddedActivity(self.task, getRequest(), self.dossier)
        activity.record()

        # Creating a savepoint will fail with the MailDataManager if it's
        # already registered as a transaction manager at that point
        transaction.savepoint()
예제 #6
0
    def test_notification_mails_dont_interfere_with_txn_savepoints(self):
        # Login with a different user than task_responsible to trigger mail
        self.login(self.dossier_responsible)

        # Trigger a notification that dispatches a mail
        activity = TaskAddedActivity(self.task, getRequest(), self.dossier)
        activity.record()

        # Creating a savepoint will fail with the MailDataManager if it's
        # already registered as a transaction manager at that point
        transaction.savepoint()
예제 #7
0
    def _create_task(self, task_payload):

        view = self.context.restrictedTraverse('++add++opengever.task.task')
        task_form = view.form_instance
        task_form.instance_schema = ITask

        task_form.updateFieldsFromSchemata()
        task_form.updateWidgets()

        task = task_form.create(task_payload)
        notify(ObjectCreatedEvent(task))
        task_form.add(task)

        activity = TaskAddedActivity(task, self.request, self.context)
        activity.record()
        return task
예제 #8
0
    def open_next_task(self):
        next_task = self.get_sql_object().get_next_task()
        if not next_task:
            return

        next_task = next_task.oguid.resolve_object()
        if api.content.get_state(obj=next_task) == TASK_STATE_PLANNED:
            with as_internal_workflow_transition():
                api.content.transition(
                    obj=next_task, transition='task-transition-planned-open')

            next_task.sync()

            activity = TaskAddedActivity(
                next_task, getRequest(), aq_parent(next_task))
            activity.record()
예제 #9
0
    def open_next_task(self):
        next_task = self.get_sql_object().get_next_task()
        if not next_task:
            return

        next_task = next_task.oguid.resolve_object()
        if api.content.get_state(obj=next_task) == TASK_STATE_PLANNED:
            with as_internal_workflow_transition():
                api.content.transition(
                    obj=next_task, transition='task-transition-planned-open')

            next_task.sync()

            activity = TaskAddedActivity(next_task, getRequest(),
                                         aq_parent(next_task))
            activity.record()
예제 #10
0
    def _create_task(self, task_payload):

        view = self.context.restrictedTraverse('++add++opengever.task.task')
        task_form = view.form_instance
        task_form.instance_schema = ITask

        task_form.updateFieldsFromSchemata()
        task_form.updateWidgets()

        task = task_form.create(task_payload)
        notify(ObjectCreatedEvent(task))
        task_form.add(task)

        activity = TaskAddedActivity(task, self.request, self.context)
        activity.record()
        return task
예제 #11
0
    def create_subtask(self, main_task, template, related_documents):
        data = dict(
            title=template.title,
            issuer=self.replace_interactive_user(template.issuer),
            responsible=self.replace_interactive_user(template.responsible),
            task_type=template.task_type,
            text=template.text,
            relatedItems=related_documents,
            deadline=date.today() + timedelta(template.deadline),
        )

        data['responsible_client'] = self.get_responsible_client(
            template, data['responsible'])

        task = createContent('opengever.task.task', **data)
        notify(ObjectCreatedEvent(task))
        task = addContentToContainer(main_task, task, checkConstraints=True)
        self.mark_as_generated_from_tasktemplate(task)

        task.reindexObject()

        # add activity record for subtask
        activity = TaskAddedActivity(task, self.request, self.context)
        activity.record()
예제 #12
0
    def create_subtask(self, main_task, template, related_documents):
        data = dict(
            title=template.title,
            issuer=self.replace_interactive_user(template.issuer),
            responsible=self.replace_interactive_user(template.responsible),
            task_type=template.task_type,
            text=template.text,
            relatedItems=related_documents,
            deadline=date.today() + timedelta(template.deadline),
        )

        data['responsible_client'] = self.get_responsible_client(
            template, data['responsible'])

        task = createContent('opengever.task.task', **data)
        notify(ObjectCreatedEvent(task))
        task = addContentToContainer(main_task, task, checkConstraints=True)
        self.mark_as_generated_from_tasktemplate(task)

        task.reindexObject()

        # add activity record for subtask
        activity = TaskAddedActivity(task, self.request, self.context)
        activity.record()
예제 #13
0
    def create(self, paths=[]):
        """generate the task templates"""

        if 'abort' in self.request.keys():
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        templates = []

        for path in paths:
            templates.append(self.context.restrictedTraverse(path))

        if len(templates) == 0:
            IStatusMessage(self.request).addStatusMessage(_(
                u'message_no_templates_selected',
                default=u'You have not selected any templates'),
                                                          type="info")

            return self.request.RESPONSE.redirect(self.context.absolute_url())

        # Create main task
        templatefolder = aq_parent(aq_inner(templates[0]))

        highest_deadline = max([temp.deadline for temp in templates])

        deadline_timedelta = api.portal.get_registry_record(
            'deadline_timedelta', interface=ITaskSettings)

        data = dict(
            title=templatefolder.title,
            issuer=self.replace_interactive_user('current_user'),
            responsible=self.replace_interactive_user('current_user'),
            responsible_client=get_current_org_unit().id(),
            task_type='direct-execution',
            deadline=date.today() +
            timedelta(highest_deadline + deadline_timedelta),
        )

        main_task = createContent('opengever.task.task', **data)
        notify(ObjectCreatedEvent(main_task))
        main_task = addContentToContainer(self.context,
                                          main_task,
                                          checkConstraints=True)
        ogdsservice = ogds_service()

        # set marker Interfaces
        alsoProvides(main_task, IFromTasktemplateGenerated)

        # set the main_task in to the in progress state
        wft = getToolByName(self.context, 'portal_workflow')
        wft.doActionFor(main_task, 'task-transition-open-in-progress')

        # create subtasks
        for template in templates:
            deadline = date.today() + timedelta(template.deadline)

            data = dict(
                title=template.title,
                issuer=self.replace_interactive_user(template.issuer),
                responsible=self.replace_interactive_user(
                    template.responsible),
                task_type=template.task_type,
                text=template.text,
                deadline=deadline,
            )

            if template.responsible_client == 'interactive_users':
                responsible_assigned_org_units = ogdsservice.assigned_org_units(
                    data['responsible'])
                current_org_unit = get_current_org_unit()
                if not responsible_assigned_org_units or \
                        current_org_unit in responsible_assigned_org_units:
                    data['responsible_client'] = current_org_unit.id()
                else:
                    data['responsible_client'] = \
                        responsible_assigned_org_units[0].id()
            else:
                data['responsible_client'] = template.responsible_client

            task = createContent('opengever.task.task', **data)
            notify(ObjectCreatedEvent(task))
            task = addContentToContainer(main_task,
                                         task,
                                         checkConstraints=True)
            alsoProvides(task, IFromTasktemplateGenerated)
            task.reindexObject()

            # add activity record for subtask
            activity = TaskAddedActivity(task, self.request, self.context)
            activity.record()

        # add activity record for the main task
        activity = TaskAddedActivity(main_task, self.request, self.context)
        activity.record()

        IStatusMessage(self.request).addStatusMessage(_(
            u'message_tasks_created', default=u'tasks created'),
                                                      type="info")

        return self.request.RESPONSE.redirect('%s#tasks' %
                                              self.context.absolute_url())
예제 #14
0
    def create(self, paths=[]):
        """generate the task templates"""

        if "abort" in self.request.keys():
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        templates = []

        for path in paths:
            templates.append(self.context.restrictedTraverse(path))

        if len(templates) == 0:
            IStatusMessage(self.request).addStatusMessage(
                _(u"message_no_templates_selected", default=u"You have not selected any templates"), type="info"
            )

            return self.request.RESPONSE.redirect(self.context.absolute_url())

        # Create main task
        templatefolder = aq_parent(aq_inner(templates[0]))

        highest_deadline = max([temp.deadline for temp in templates])

        data = dict(
            title=templatefolder.title,
            issuer=self.replace_interactive_user("current_user"),
            responsible=self.replace_interactive_user("current_user"),
            responsible_client=get_current_org_unit().id(),
            task_type="direct-execution",
            deadline=date.today() + timedelta(highest_deadline + MAIN_TASK_DEADLINE_DELTA),
        )

        main_task = createContent("opengever.task.task", **data)
        notify(ObjectCreatedEvent(main_task))
        main_task = addContentToContainer(self.context, main_task, checkConstraints=True)
        ogdsservice = ogds_service()

        # set marker Interfaces
        alsoProvides(main_task, IFromTasktemplateGenerated)

        # set the main_task in to the in progress state
        wft = getToolByName(self.context, "portal_workflow")
        wft.doActionFor(main_task, "task-transition-open-in-progress")

        # create subtasks
        for template in templates:
            deadline = date.today() + timedelta(template.deadline)

            data = dict(
                title=template.title,
                issuer=self.replace_interactive_user(template.issuer),
                responsible=self.replace_interactive_user(template.responsible),
                task_type=template.task_type,
                text=template.text,
                deadline=deadline,
            )

            if template.responsible_client == "interactive_users":
                responsible_assigned_org_units = ogdsservice.assigned_org_units(data["responsible"])
                current_org_unit = get_current_org_unit()
                if not responsible_assigned_org_units or current_org_unit in responsible_assigned_org_units:
                    data["responsible_client"] = current_org_unit.id()
                else:
                    data["responsible_client"] = responsible_assigned_org_units[0].id()
            else:
                data["responsible_client"] = template.responsible_client

            task = createContent("opengever.task.task", **data)
            notify(ObjectCreatedEvent(task))
            task = addContentToContainer(main_task, task, checkConstraints=True)
            alsoProvides(task, IFromTasktemplateGenerated)
            task.reindexObject()

            # add activity record for subtask
            activity = TaskAddedActivity(task, self.request, self.context)
            activity.record()

        # add activity record for the main task
        activity = TaskAddedActivity(main_task, self.request, self.context)
        activity.record()

        IStatusMessage(self.request).addStatusMessage(
            _(u"message_tasks_created", default=u"tasks created"), type="info"
        )

        return self.request.RESPONSE.redirect("%s#tasks" % self.context.absolute_url())