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 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('.')
Example #3
0
    def boxes(self):
        """Defines the boxes wich are Displayed at the Overview tab"""

        items = [[dict(id='assigned_inbox_tasks',
                       content=self.assigned_tasks(),
                       label=_(u'label_assigned_inbox_tasks',
                               default='Assigned tasks')),
                  dict(id='issued_inbox_tasks',
                       content=self.issued_tasks(),
                       label=_(u'label_issued_inbox_tasks',
                               default='Issued tasks')), ],
                 [dict(id='documents',
                       content=self.documents()), ]]
        return items
Example #4
0
class IInbox(model.Schema, ITabbedviewUploadable):
    """ Inbox for OpenGever
    """

    model.fieldset(
        u'common',
        label=_(u'fieldset_common', default=u'Common'),
        fields=[u'inbox_group', ],
    )

    inbox_group = schema.TextLine(
        title=_(u'label_inbox_group', default=u'Inbox Group'),
        description=_(u'help_inbox_group', default=u''),
        required=False,
    )
Example #5
0
 def get_task_type_label(self, language=None):
     label = _('forwarding_task_type', default=u'Forwarding')
     if language:
         return translate(label, context=self.REQUEST,
                          domain='opengever.inbox',
                          target_language=language)
     return label
Example #6
0
 def get_task_type_label(self, language=None):
     label = _('forwarding_task_type', default=u'Forwarding')
     if language:
         return translate(label, context=self.REQUEST,
                          domain='opengever.inbox',
                          target_language=language)
     return label
Example #7
0
 def summary(self):
     actor = Actor.lookup(self.context.Creator())
     msg = _(
         "msg_forwarding_added",
         u"New forwarding added by ${user}",
         mapping={"user": actor.get_label(with_principal=False)},
     )
     return self.translate_to_all_languages(msg)
    def update(self):
        """Store default value for relatedItems in the request.

        The added objects will later be moved inside the forwarding.
        """
        paths = self.request.get('paths', [])

        search_endpoint = (
            '++widget++form.widgets.responsible/search'
            in self.request.get('ACTUAL_URL', '')
            )

        if not (
                search_endpoint
                or paths
                or self.request.form.get('form.widgets.relatedItems', [])
            ):
            # add status message and redirect current window back to inbox
            # but ONLY if we're not in a z3cform_inline_validation.
            IStatusMessage(self.request).addStatusMessage(
                _(
                    u'error_no_document_selected',
                    u'Error: Please select at least one document to forward.',
                    ),
                type=u'error',
                )

            redir_url = self.request.get(
                'orig_template',
                self.context.absolute_url(),
                )

            self.request.RESPONSE.redirect(redir_url)

        if paths:
            self.request.set('form.widgets.relatedItems', paths)

        # put default value for issuer into request
        if not self.request.get('form.widgets.issuer', None):
            self.request.set(
                'form.widgets.issuer',
                get_current_org_unit().inbox().id(),
                )

        # put the default responsible into the request
        if not self.request.get('form.widgets.responsible_client', None):
            org_unit = (
                get_ou_selector(ignore_anonymous=True).get_current_unit()
                )

            self.request.set('form.widgets.responsible_client', org_unit.id())

            self.request.set(
                'form.widgets.responsible',
                [org_unit.inbox().id()],
                )

        super(ForwardingAddForm, self).update()
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 #10
0
    def render(self):
        current_inbox = self.context.get_current_inbox()

        if current_inbox:
            return self.request.RESPONSE.redirect(current_inbox.absolute_url())
        else:
            msg = _(
                u'current_inbox_not_available',
                u'Your not allowed to access the inbox of ${current_org_unit}.',
                mapping={'current_org_unit': get_current_org_unit().label()})

            IStatusMessage(self.request).addStatusMessage(msg, type='warning')

        return super(InboxContainerView, self).render()
Example #11
0
    def render(self):
        current_inbox = self.context.get_current_inbox()

        if current_inbox:
            return self.request.RESPONSE.redirect(current_inbox.absolute_url())
        else:
            msg = _(
                u'current_inbox_not_available',
                u'Your not allowed to access the inbox of ${current_org_unit}.',
                mapping={'current_org_unit': get_current_org_unit().label()})

            IStatusMessage(self.request).addStatusMessage(msg, type='warning')

        return super(InboxContainerView, self).render()
Example #12
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 #13
0
def _create_yearfolder(inbox, year):
    """creates the yearfolder for the given year"""

    with changed_security():
        # for creating the folder, we need to be a superuser since
        # normal user should not be able to add year folders.
        # --- help i18ndude ---
        msg = _(u'yearfolder_title', default=u'Closed ${year}',
                mapping=dict(year=str(year)))
        # --- / help i18ndude ---
        folder_title = translate(str(msg), msg.domain, msg.mapping,
                                 context=inbox.REQUEST, default=msg.default)
        return createContentInContainer(
            inbox, 'opengever.inbox.yearfolder',
            title=folder_title, id=year)
class IChooseDossierSchema(Schema):

    dossier = RelationChoice(
        title=_(u'label_dossier', default=u'Dossier'),
        source=RepositoryPathSourceBinder(
            object_provides='opengever.dossier.behaviors.dossier.'
            'IDossierMarker',
            navigation_tree_query={
                'object_provides': [
                    'opengever.repository.repositoryroot.IRepositoryRoot',
                    'opengever.repository.repositoryfolder.'
                    'IRepositoryFolderSchema',
                    'opengever.dossier.behaviors.dossier.IDossierMarker',
                ]
                }),
        required=False)
Example #15
0
class AssignForwardingForm(AssignTaskForm):

    fields = Fields(IForwardingAssignSchema)
    fields['responsible'].widgetFactory[INPUT_MODE] = AutocompleteFieldWidget
    ignoreContext = True

    label = _(u'title_assign_forwarding', u'Assign Forwarding')

    def updateWidgets(self):
        super(AssignForwardingForm, self).updateWidgets()
        self.widgets['responsible_client'].mode = INPUT_MODE

    def update(self):
        move(self, 'text', after='*')
        super(AssignForwardingForm, self).update()

    def update_task(self, **kwargs):
        super(AssignForwardingForm, self).update_task(**kwargs)
        wf_tool = getToolByName(self.context, 'portal_workflow')
        wf_tool.doActionFor(self.context, kwargs.get('transition'))
def _create_yearfolder(inbox, year):
    """creates the yearfolder for the given year"""

    with elevated_privileges():
        # for creating the folder, we need to be a superuser since
        # normal user should not be able to add year folders.
        # --- help i18ndude ---
        msg = _(u'yearfolder_title',
                default=u'Closed ${year}',
                mapping=dict(year=str(year)))
        # --- / help i18ndude ---
        folder_title = translate(str(msg),
                                 msg.domain,
                                 msg.mapping,
                                 context=inbox.REQUEST,
                                 default=msg.default)
        return createContentInContainer(inbox,
                                        'opengever.inbox.yearfolder',
                                        title=folder_title,
                                        id=year)
Example #17
0
class AssignForwardingForm(AssignTaskForm):

    fields = Fields(IForwardingAssignSchema)
    fields['responsible'].widgetFactory[INPUT_MODE] = ParameterizedWidget(
        KeywordWidget, async=True)

    ignoreContext = True
    allow_prefill_from_GET_request = True  # XXX

    label = _(u'title_assign_forwarding', u'Assign Forwarding')

    def updateWidgets(self):
        super(AssignForwardingForm, self).updateWidgets()

    def update(self):
        move(self, 'text', after='*')
        super(AssignForwardingForm, self).update()

    def update_task(self, **kwargs):
        wf_tool = getToolByName(self.context, 'portal_workflow')
        wf_tool.doActionFor(self.context, kwargs.get('transition'))
        super(AssignForwardingForm, self).update_task(**kwargs)
Example #18
0
    def update(self):
        """put default value for relatedItems into request - the added
           objects will later be moved insed the forwarding
        """
        paths = self.request.get('paths', [])

        if not (paths or self.request.form.get('form.widgets.relatedItems', [])
                or '@@autocomplete-search' in self.request.get(
                    'ACTUAL_URL', '')):
            # add status message and redirect current window back to inbox
            # but ONLY if we're not in a z3cform_inline_validation or
            # autocomplete-search request!
            IStatusMessage(self.request).addStatusMessage(_(
                u'error_no_document_selected',
                u'Error: Please select at least one document to forward'),
                                                          type='error')
            redir_url = self.request.get('orig_template',
                                         self.context.absolute_url())
            self.request.RESPONSE.redirect(redir_url)

        if paths:
            self.request.set('form.widgets.relatedItems', paths)

        # put default value for issuer into request
        if not self.request.get('form.widgets.issuer', None):
            self.request.set('form.widgets.issuer',
                             u'inbox:%s' % get_client_id())

        # put the default responsible into the request
        if not self.request.get('form.widgets.responsible_client', None):
            client = get_client_id()
            self.request.set('form.widgets.responsible_client', client)
            self.request.set('form.widgets.responsible',
                             [(u'inbox:%s' % client).encode('utf-8')])

        AddForm.update(self)
Example #19
0
    def update(self):
        """put default value for relatedItems into request - the added
           objects will later be moved insed the forwarding
        """
        paths = self.request.get('paths', [])

        if not (paths or
                self.request.form.get('form.widgets.relatedItems', [])
        or '@@autocomplete-search' in self.request.get('ACTUAL_URL', '')):
            # add status message and redirect current window back to inbox
            # but ONLY if we're not in a z3cform_inline_validation or
            # autocomplete-search request!
            IStatusMessage(self.request).addStatusMessage(
                _(u'error_no_document_selected',
                  u'Error: Please select at least one document to forward'),
                type='error')
            redir_url = self.request.get('orig_template',
                        self.context.absolute_url())
            self.request.RESPONSE.redirect(redir_url)

        if paths:
            self.request.set('form.widgets.relatedItems', paths)

        # put default value for issuer into request
        if not self.request.get('form.widgets.issuer', None):
            self.request.set('form.widgets.issuer',
                             u'inbox:%s' % get_client_id())

        # put the default responsible into the request
        if not self.request.get('form.widgets.responsible_client', None):
            client = get_client_id()
            self.request.set('form.widgets.responsible_client', client)
            self.request.set('form.widgets.responsible',
                             [(u'inbox:%s' % client).encode('utf-8')])

        AddForm.update(self)
Example #20
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)
Example #21
0
 def label(self):
     return self.translate_to_all_languages(
         _('label_forwarding_added', u'Forwarding added'))
Example #22
0
 def label(self):
     return self.translate_to_all_languages(_("label_forwarding_added", u"Forwarding added"))
Example #23
0
 def summary(self):
     actor = Actor.lookup(self.context.Creator())
     msg = _('msg_forwarding_added',
             u'New forwarding added by ${user}',
             mapping={'user': actor.get_label(with_principal=False)})
     return self.translate_to_all_languages(msg)