class FinishObservationReasonForm(Form): fields = field.Fields(IFinishObservationReasonForm) label = _(u'Request finalisation of the observation') description = _( u'Check the reason for requesting the closure of this observation') ignoreContext = True @button.buttonAndHandler(u'Request finalisation of the observation') def finish_observation(self, action): comments = self.request.get('form.widgets.comments') with api.env.adopt_roles(['Manager']): if api.content.get_state(self.context) == 'phase1-conclusions': self.context.closing_comments = comments return self.context.content_status_modify( workflow_action='phase1-request-close', ) elif api.content.get_state(self.context) == 'phase2-conclusions': self.context.closing_comments_phase2 = comments return self.context.content_status_modify( workflow_action='phase2-finish-observation', ) self.request.response.redirect(self.context.absolute_url()) def updateWidgets(self): super(FinishObservationReasonForm, self).updateWidgets() self.widgets['comments'].rows = 15 def updateActions(self): super(FinishObservationReasonForm, self).updateActions() for k in self.actions.keys(): self.actions[k].addClass('standardButton') self.actions[k].addClass('defaultWFButton')
class IAssignAnswererForm(Interface): answerers = schema.Choice( title=_(u'Select the answerers'), vocabulary=u'plone.app.vocabularies.Users', ) workflow_action = schema.TextLine(title=_(u'Workflow action'), required=True)
class IESDRTFile(form.Schema, IImageScaleTraversable): """ Files with special needs """ title = schema.TextLine( title=_(u'Title'), required=False, ) form.primary('file') file = NamedBlobFile( title=_(u'File'), required=True, )
class IConclusion(form.Schema, IImageScaleTraversable): """ Conclusions of this observation """ closing_reason = schema.Choice( title=_(u'Status of observation'), vocabulary='esdrt.content.conclusionreasons', required=True, ) text = schema.Text( title=_(u'Internal note for expert/reviewers'), required=True, )
class IDenyFinishObservationReasonForm(Interface): comments = schema.Text( title=_( u'Enter your reasons to deny the finishing of this observation'), required=False, )
class AddAnswerForm(Form): ignoreContext = True fields = field.Fields(IComment).select('text') label = 'Answer' description = '' @button.buttonAndHandler(_('Add answer')) def create_question(self, action): context = aq_inner(self.context) text = self.request.form.get('form.widgets.text', '') if not text.strip(): raise ActionExecutionError(Invalid(u"Answer text is empty")) id = str(int(time())) item_id = context.invokeFactory( type_name='CommentAnswer', id=id, ) comment = context.get(item_id) comment.text = text return self.request.response.redirect(context.absolute_url()) def updateWidgets(self): super(AddAnswerForm, self).updateWidgets() self.widgets['text'].rows = 15 def updateActions(self): super(AddAnswerForm, self).updateActions() for k in self.actions.keys(): self.actions[k].addClass('standardButton')
def update(self): self.add(ICommentExtenderFields, prefix="") self.move('attachment', after='text', prefix="") self.form.description = _(u'Handling of confidential files: ' u'Please zip your file, protect it with a password, upload it to your reply in the EEA review tool ' u'and send the password per email to the ESD Secretariat mailbox. ' u'Your password will only be shared with the lead reviewer and review expert. ' )
class ITableRowSchema(form.Schema): line_title = schema.TextLine(title=_(u'Title'), required=True) co2 = schema.Float(title=_(u'CO\u2082'), required=False) ch4 = schema.Float(title=_(u'CH\u2084'), required=False) n2o = schema.Float(title=_(u'N\u2082O'), required=False) nox = schema.Float(title=_(u'NO\u2093'), required=False) co = schema.Float(title=_(u'CO'), required=False) nmvoc = schema.Float(title=_(u'NMVOC'), required=False) so2 = schema.Float(title=_(u'SO\u2082'), required=False)
def update(self): # Some checks: waction = self.request.get('workflow_action') comment = self.request.get('comment') if waction not in ['phase1-send-comments', 'phase2-send-comments'] and \ comment not in self.context.keys(): status = IStatusMessage(self.request) msg = _(u'There was an error, try again please') status.addStatusMessage(msg, "error") else: self.comment = comment
def update(self): super(AddForm, self).update() status = IStatusMessage(self.request) msg = _(u'Handling of confidential files: ' u'Please zip your file, protect it with a password, upload it to your reply in the EEA review tool ' u'and send the password per email to the ESD Secretariat mailbox. ' u'Your password will only be shared with the lead reviewer and review expert. ' ) status.add(msg, type='info')
def __call__(self): """Perform the update and redirect if necessary, or render the page """ target = self.assignation_target() if self.request.form.get('send', None): usernames = self.request.get('counterparts', None) if not usernames: status = IStatusMessage(self.request) msg = _( u'You need to select at least one expert for discussion') status.addStatusMessage(msg, "error") return self.index() self.revoke_all_roles() for username in usernames: api.user.grant_roles(username=username, roles=['MSExpert'], obj=target) if api.content.get_state(self.context) in [ u'phase1-pending', u'phase1-pending-answer-drafting' ]: wf_action = 'phase1-assign-answerer' elif api.content.get_state(self.context) in [ u'phase2-pending', u'phase2-pending-answer-drafting' ]: wf_action = 'phase2-assign-answerer' else: status = IStatusMessage(self.request) msg = _(u'There was an error. Try again please') status.addStatusMessage(msg, "error") url = self.context.absolute_url() return self.request.response.redirect(url) return self.context.content_status_modify( workflow_action=wf_action, ) else: self.revoke_all_roles() return self.index()
class ICommentAnswer(form.Schema, IImageScaleTraversable): """ Answer for Questions """ # If you want a schema-defined interface, delete the form.model # line below and delete the matching file in the models sub-directory. # If you want a model-based interface, edit # models/comment.xml to define the content type # and add directives here as necessary. text = schema.Text( title=_(u'Text'), required=True, )
def __call__(self): """Perform the update and redirect if necessary, or render the page """ target = self.assignation_target() if self.request.form.get('send', None): usernames = self.request.form.get('counterparts', None) if not usernames: status = IStatusMessage(self.request) msg = _( u'You need to select at least one reviewer for conclusions' ) status.addStatusMessage(msg, "error") return self.index() self.revoke_all_roles() for username in usernames: api.user.grant_roles( username=username, obj=target, roles=['CounterPart'], ) if api.content.get_state(self.context).startswith('phase1-'): wf_action = 'phase1-request-comments' elif api.content.get_state(self.context).startswith('phase2-'): wf_action = 'phase2-request-comments' else: status = IStatusMessage(self.request) msg = _(u'There was an error. Try again please') status.addStatusMessage(msg, "error") url = self.context.absolute_url() return self.request.response.redirect(url) return self.context.content_status_modify( workflow_action=wf_action, ) else: return self.index()
def __call__(self): """Perform the update and redirect if necessary, or render the page """ target = self.assignation_target() if self.request.form.get('send', None): counterparts = self.request.get('counterparts', None) if counterparts is None: status = IStatusMessage(self.request) msg = _(u'You need to select at least one counterpart') status.addStatusMessage(msg, "error") return self.index() self.revoke_all_roles() for username in counterparts: api.user.grant_roles(username=username, roles=['CounterPart'], obj=target) if api.content.get_state(self.context) == 'phase1-draft': wf_action = 'phase1-request-for-counterpart-comments' elif api.content.get_state(self.context) == 'phase2-draft': wf_action = 'phase2-request-for-counterpart-comments' else: status = IStatusMessage(self.request) msg = _(u'There was an error. Try again please') status.addStatusMessage(msg, "error") url = self.context.absolute_url() return self.request.response.redirect(url) return self.context.content_status_modify( workflow_action=wf_action, ) else: self.revoke_all_roles() return self.index()
def __call__(self): """Perform the update and redirect if necessary, or render the page """ target = self.assignation_target() if self.request.form.get('send', None): counterparts = self.request.get('counterparts', None) if counterparts is None: status = IStatusMessage(self.request) msg = _(u'You need to select at least one counterpart') status.addStatusMessage(msg, "error") return self.index() self.revoke_all_roles() for username in counterparts: api.user.grant_roles(username=username, roles=['CounterPart'], obj=target) status = IStatusMessage(self.request) msg = _(u'CounterParts reassigned correctly') status.addStatusMessage(msg, "info") url = self.context.absolute_url() subject = u'New draft question to comment' _temp = PageTemplateFile('../notifications/question_to_counterpart.pt') notify( target, _temp, subject, role='CounterPart', notification_name='question_to_counterpart' ) return self.request.response.redirect(url) else: return self.index()
def __call__(self): """Perform the update and redirect if necessary, or render the page """ target = self.assignation_target() if self.request.form.get('send', None): counterparts = self.request.get('counterparts', None) if counterparts is None: status = IStatusMessage(self.request) msg = _(u'You need to select at least one counterpart') status.addStatusMessage(msg, "error") return self.index() self.revoke_all_roles() for username in counterparts: api.user.grant_roles(username=username, roles=['CounterPart'], obj=target) status = IStatusMessage(self.request) msg = _(u'CounterParts reassigned correctly') status.addStatusMessage(msg, "info") url = self.context.absolute_url() subject = u'New draft question to comment' _temp = PageTemplateFile( '../notifications/question_to_counterpart.pt') notify(target, _temp, subject, role='CounterPart', notification_name='question_to_counterpart') return self.request.response.redirect(url) else: return self.index()
def __call__(self): """Perform the update and redirect if necessary, or render the page """ target = self.assignation_target() if self.request.form.get('send', None): usernames = self.request.get('counterparts', None) if not usernames: status = IStatusMessage(self.request) msg = _(u'You need to select at least one expert for discussion') status.addStatusMessage(msg, "error") return self.index() self.revoke_all_roles() for username in usernames: api.user.grant_roles(username=username, roles=['MSExpert'], obj=target) if api.content.get_state(self.context) in [u'phase1-pending', u'phase1-pending-answer-drafting']: wf_action = 'phase1-assign-answerer' elif api.content.get_state(self.context) in [u'phase2-pending', u'phase2-pending-answer-drafting']: wf_action = 'phase2-assign-answerer' else: status = IStatusMessage(self.request) msg = _(u'There was an error. Try again please') status.addStatusMessage(msg, "error") url = self.context.absolute_url() return self.request.response.redirect(url) return self.context.content_status_modify( workflow_action=wf_action, ) else: self.revoke_all_roles() return self.index()
def __call__(self): target = self.assignation_target() if self.request.form.get('send', None): usernames = self.request.get('counterparts', None) if not usernames: status = IStatusMessage(self.request) msg = _(u'You need to select at least one expert for discussion') status.addStatusMessage(msg, "error") return self.index() self.revoke_all_roles() for username in usernames: api.user.grant_roles(username=username, roles=['MSExpert'], obj=target) return self.request.response.redirect(target.absolute_url()) else: return self.index()
def __call__(self): target = self.assignation_target() if self.request.form.get('send', None): usernames = self.request.get('counterparts', None) if not usernames: status = IStatusMessage(self.request) msg = _( u'You need to select at least one expert for discussion') status.addStatusMessage(msg, "error") return self.index() self.revoke_all_roles() for username in usernames: api.user.grant_roles(username=username, roles=['MSExpert'], obj=target) return self.request.response.redirect(target.absolute_url()) else: return self.index()
class ESDRTIntegerDataConverter(ESDRTNumberDataConverter): """A data converter for integers.""" zope.component.adapts( zope.schema.interfaces.IInt, IWidget) type = int errorMessage = _('The entered value is not a valid integer literal.')
class IAssignConclusionReviewerForm(Interface): reviewers = schema.Choice( title=_(u'Select the conclusion reviewers'), vocabulary=u'plone.app.vocabularies.Users', )
class IFinishObservationReasonForm(Interface): comments = schema.Text( title=_(u'Enter comments if you want'), required=False, )
class IConclusionsPhase2(form.Schema, IImageScaleTraversable): """ Conclusions of the Second Phase of the Review """ closing_reason = schema.Choice( title=_(u'Conclusion'), vocabulary='esdrt.content.conclusionphase2reasons', required=True, ) text = schema.Text( title=_(u'Text'), required=True, default=DEFAULTCONCLUSIONTEXT, ) form.widget(ghg_estimations=DataGridFieldFactory) ghg_estimations = schema.List( title=_(u'GHG estimates [Gg CO2 eq.]'), value_type=DictRow(title=u"tablerow", schema=ITableRowSchema), default=[ { 'line_title': 'Original estimate', 'co2': 0, 'ch4': 0, 'n2o': 0, 'nox': 0, 'co': 0, 'nmvoc': 0, 'so2': 0 }, { 'line_title': 'Technical correction proposed by TERT', 'co2': 0, 'ch4': 0, 'n2o': 0, 'nox': 0, 'co': 0, 'nmvoc': 0, 'so2': 0 }, { 'line_title': 'Revised estimate by MS', 'co2': 0, 'ch4': 0, 'n2o': 0, 'nox': 0, 'co': 0, 'nmvoc': 0, 'so2': 0 }, { 'line_title': 'Corrected estimate', 'co2': 0, 'ch4': 0, 'n2o': 0, 'nox': 0, 'co': 0, 'nmvoc': 0, 'so2': 0 }, ], )
class IAssignCounterPartForm(Interface): counterpart = schema.TextLine(title=_(u'Select the counterpart'), ) workflow_action = schema.TextLine(title=_(u'Workflow action'), required=True)