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, )
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('.')
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
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, )
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
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, )
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()
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('.')
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)
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)
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)
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)
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)
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)
def label(self): return self.translate_to_all_languages( _('label_forwarding_added', u'Forwarding added'))
def label(self): return self.translate_to_all_languages(_("label_forwarding_added", u"Forwarding added"))
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)