Example #1
0
class IForwarding(ITask):
    """Schema interface for forwardings.
    """

    # common fieldset
    form.omitted('task_type')

    # only hide relatedItems - we need it for remembering which documents
    # should be moved after creation when creating forwarding from tabbed view.
    form.mode(relatedItems=HIDDEN_MODE)

    # additional fieldset
    form.omitted('expectedStartOfWork')
    form.omitted('expectedDuration')
    form.omitted('expectedCost')
    form.omitted('effectiveDuration')
    form.omitted('effectiveCost')

    #only hide date_of_completion, it's used
    form.mode(date_of_completion=HIDDEN_MODE)

    # deadline is not required
    deadline = schema.Date(
        title=task_mf(u"label_deadline", default=u"Deadline"),
        description=task_mf(u"help_deadline", default=u""),
        required=False,
    )

    form.widget(responsible=AutocompleteFieldWidget)
    responsible = schema.Choice(
        title=_(u"label_responsible", default=u"Responsible"),
        description=_(u"help_responsible", default=""),
        vocabulary=u'opengever.ogds.base.InboxesVocabulary',
        required=True,
    )
Example #2
0
class IForwardingAssignSchema(IAssignSchema):

    responsible = schema.Choice(
        title=task_mf(u"label_responsible", default=u"Responsible"),
        description=task_mf(u"help_responsible", default=""),
        source=AllUsersAndInboxesSourceBinder(),
        required=True,
    )
Example #3
0
class IForwardingAssignSchema(IAssignSchema):

    form.widget(responsible=AutocompleteFieldWidget)
    responsible = schema.Choice(
        title=task_mf(u"label_responsible", default=u"Responsible"),
        description=task_mf(u"help_responsible", default=""),
        vocabulary=u'opengever.ogds.base.InboxesVocabulary',
        required=True,
    )
Example #4
0
class ISimpleResponseForm(form.Schema):
    """Special addresponse form for the forwarding close transition.
    Looks the same, but do something different.
    """

    text = schema.Text(
        title=task_mf('label_response', default="Response"),
        description=task_mf('help_response', default=""),
        required=False,
        )
class INewForwardingResponsibleSchema(Schema):
    responsible = schema.Choice(
        title=task_mf(u"label_responsible", default=u"Responsible"),
        description=task_mf(u"help_responsible", default=""),
        source=AllUsersInboxesAndTeamsSourceBinder(include_teams=True),
        required=True,
        )

    responsible_client = schema.Choice(
        title=task_mf(u'label_resonsible_client', default=u'Responsible Client'),
        description=task_mf(u'help_responsible_client', default=u''),
        vocabulary='opengever.ogds.base.OrgUnitsVocabularyFactory',
        required=True)
Example #6
0
class ForwardingCloseForm(Form):
    """Form for assigning task.
    """

    fields = Fields(IForwardingCloseForm)
    ignoreContext = True

    label = _(u'title_close_forwarding', u'Close orwarding')

    @button.buttonAndHandler(_(u'close', default='Close'), name='save')
    def handle_close(self, action):

        data, errors = self.extractData()
        if not errors:

            # close and store the forwarding in yearfolder
            change_task_workflow_state(self.context,
                                       'forwarding-transition-close',
                                       text=data.get('text'))

            IYearfolderStorer(self.context).store_in_yearfolder()

            return self.request.RESPONSE.redirect('.')

    @button.buttonAndHandler(task_mf(u'button_cancel', default=u'Cancel'))
    def handle_cancel(self, action):
        return self.request.RESPONSE.redirect('.')
class IForwarding(ITask):
    """Schema interface for forwardings.
    """

    # common fieldset
    form.omitted('task_type')

    # only hide relatedItems - we need it for remembering which documents
    # should be moved after creation when creating forwarding from tabbed view.
    form.mode(relatedItems=HIDDEN_MODE)

    # additional fieldset
    form.omitted('expectedStartOfWork')
    form.omitted('expectedDuration')
    form.omitted('expectedCost')
    form.omitted('effectiveDuration')
    form.omitted('effectiveCost')

    # only hide date_of_completion, it's used
    form.mode(date_of_completion=HIDDEN_MODE)

    # make sure hidden field is not rendered in its own empty fieldset by
    # moving it to the form's first position before title
    form.order_before(date_of_completion='title')

    # deadline is not required
    deadline = schema.Date(
        title=task_mf(u"label_deadline", default=u"Deadline"),
        description=task_mf(u"help_deadline", default=u""),
        required=False,
    )

    form.widget('responsible', KeywordFieldWidget, async=True)
    responsible = schema.Choice(
        title=_(u"label_responsible", default=u"Responsible"),
        description=_(u"help_responsible", default=""),
        source=AllUsersInboxesAndTeamsSourceBinder(
            only_current_orgunit=True, include_teams=True),
        required=True,
    )
Example #8
0
class ForwardingCloseForm(Form):
    """Form for assigning task.
    """

    fields = Fields(IForwardingCloseForm)
    ignoreContext = True

    label = _(u'title_close_forwarding', u'Close orwarding')

    @button.buttonAndHandler(_(u'close', default='Close'), name='save')
    def handle_close(self, action):

        data, errors = self.extractData()
        if not errors:
            wftool = api.portal.get_tool('portal_workflow')
            wftool.doActionFor(self.context,
                               'forwarding-transition-close',
                               transition_params=data)

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

    @button.buttonAndHandler(task_mf(u'button_cancel', default=u'Cancel'))
    def handle_cancel(self, action):
        return self.request.RESPONSE.redirect('.')
Example #9
0
class ForwardingRefuseForm(Form):

    fields = Fields(ISimpleResponseForm)
    ignoreContext = True
    label = _(u'label_refuse_forwarding', default=u'Refuse Forwarding')

    @button.buttonAndHandler(_(u'label_refuse', default='Refuse'),
                             name='refuse')
    def handle_refuse(self, action):

        data, errors = self.extractData()
        if not errors:

            refusing_client = self.context.responsible_client
            self.change_workflow_sate()
            self.add_response(data.get('text'))
            copy_url = self.store_copy_in_remote_yearfolder(refusing_client)
            self.reset_responsible()
            notify(ObjectModifiedEvent(self.context))

        return self.request.RESPONSE.redirect(copy_url)

    @button.buttonAndHandler(task_mf(u'button_cancel', default=u'Cancel'))
    def handle_cancel(self, action):
        return self.request.RESPONSE.redirect('.')

    def reset_responsible(self):
        """Set responsible back to the issuer respectively current inbox."""

        self.context.responsible_client = get_client_id()
        self.context.responsible = u'inbox:%s' % (
            self.context.responsible_client)

    def add_response(self, response_text):
        add_simple_response(self.context,
                            text=response_text,
                            transition=u'forwarding-transition-refuse')

    def change_workflow_sate(self):
        wf_tool = getToolByName(self.context, 'portal_workflow')
        wf_tool.doActionFor(self.context, 'forwarding-transition-refuse')

    def store_copy_in_remote_yearfolder(self, refusing_client_id):
        transporter = getUtility(ITransporter)
        jsondata = json.dumps(transporter._extract_data(self.context))
        request_data = {
            REQUEST_KEY: jsondata,
        }

        response = remote_json_request(refusing_client_id,
                                       '@@store_refused_forwarding',
                                       data=request_data)

        if response.get('status') not in [
                STATUS_SUCCESSFULL, STATUS_ALLREADY_DONE
        ]:
            raise Exception(
                'Storing the forwarding on remote yearfolder failed')

        remote_task = response.get('remote_task')
        if response.get('status') != STATUS_ALLREADY_DONE:
            # transport responses
            response_transporter = IResponseTransporter(self.context)
            response_transporter.send_responses(refusing_client_id,
                                                remote_task)

            # transport documents
            for document in get_documents_of_task(self.context):
                transporter.transport_to(document, refusing_client_id,
                                         remote_task)

        return self.get_remote_task_url(refusing_client_id, remote_task)

    def get_remote_task_url(self, refusing_client_id, remote_task):
        info = getUtility(IContactInformation)
        return '%s/%s' % (info.get_client_by_id(refusing_client_id).public_url,
                          remote_task)