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 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, )
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, )
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)
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, )
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('.')
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)