예제 #1
0
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')
예제 #2
0
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)
예제 #3
0
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,
    )
예제 #4
0
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,
    )
예제 #5
0
class IDenyFinishObservationReasonForm(Interface):

    comments = schema.Text(
        title=_(
            u'Enter your reasons to deny the finishing of this observation'),
        required=False,
    )
예제 #6
0
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')
예제 #7
0
 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. '
     )
예제 #8
0
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)
예제 #9
0
 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
예제 #10
0
 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
예제 #11
0
    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')
예제 #12
0
    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()
예제 #13
0
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,
    )
예제 #14
0
    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()
예제 #15
0
    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()
예제 #16
0
    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()
예제 #17
0
    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()
예제 #18
0
    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()
예제 #19
0
    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()
예제 #20
0
    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()
예제 #21
0
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.')
예제 #22
0
class IAssignConclusionReviewerForm(Interface):
    reviewers = schema.Choice(
        title=_(u'Select the conclusion reviewers'),
        vocabulary=u'plone.app.vocabularies.Users',
    )
예제 #23
0
class IFinishObservationReasonForm(Interface):

    comments = schema.Text(
        title=_(u'Enter comments if you want'),
        required=False,
    )
예제 #24
0
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
            },
        ],
    )
예제 #25
0
class IAssignCounterPartForm(Interface):
    counterpart = schema.TextLine(title=_(u'Select the counterpart'), )

    workflow_action = schema.TextLine(title=_(u'Workflow action'),
                                      required=True)