示例#1
0
    def fix_assessment_data(self):
        from wise.msfd.compliance.content import AssessmentData

        for obj, data in self.get_saved_assessment_data():
            last = data.last().copy()

            new_data = AssessmentData()
            new_data._append(last)

            obj.saved_assessment_data = new_data
示例#2
0
    def handle_save(self, action):
        if self.read_only_access:
            raise Unauthorized

        data, errors = self.extractData()

        if errors:
            return

        context = self.context

        # BBB code, useful in development

        if not hasattr(context, 'saved_assessment_data') or \
                not isinstance(context.saved_assessment_data, PersistentList):
            context.saved_assessment_data = AssessmentData()

        saved_data = self.context.saved_assessment_data.last()

        if not saved_data:
            self.context.saved_assessment_data.append(data)
        else:
            saved_data.update(data)
        self.context.saved_assessment_data._p_changed = True
示例#3
0
    def __call__(self):
        if 'assessor' in self.request.form:
            assessors = self.request.form['assessor']

            if isinstance(assessors, list):
                assessors = ', '.join(assessors)
            self.context.saved_assessment_data.ass_new = assessors

        # BBB:
        context = self.context

        if not hasattr(context, 'saved_assessment_data') or \
                not isinstance(context.saved_assessment_data, PersistentList):
            context.saved_assessment_data = AssessmentData()

        # Assessment 2012
        assessments_2012 = self.get_reg_assessments_data_2012()
        assessment_2012_header_data = self.get_assessment_2012_header_data(
            assessments_2012
        )
        self.assessment_header_2012 = self.assessment_header_template(
            report_by=assessment_2012_header_data.get('report_by', '-'),
            assessor_list=self.assessor_list,
            assessors=assessment_2012_header_data.get('assessed_by', '-'),
            assess_date=assessment_2012_header_data.get('assess_date', '-'),
            source_file=[
                assessment_2012_header_data.get('file_name', '-'),
                assessment_2012_header_data.get('file_url', ''),
            ],
            show_edit_assessors=False,
        )
        self.assessment_data_2012 = self.assessment_data_2012_tpl(
            data=assessments_2012
        )

        score_2012 = (assessments_2012 and assessments_2012[0].overall_score
                      or 0)
        conclusion_2012 = (assessments_2012 and assessments_2012[0].conclusion
                           or 'Not found')
        conclusion_2012_color = CONCLUSION_COLOR_TABLE.get(score_2012, 0)

        # Assessment 2018
        assessors_2018 = getattr(
            self.context.saved_assessment_data, 'ass_new', 'Not assessed'
        )
        data = self.context.saved_assessment_data.last()
        elements = self.get_elements_for_question()
        assess_date_2018 = data.get('assess_date', u'Not assessed')
        source_file_2018 = ('To be addedd...', '.')
        muids = None
        article_weights = ARTICLE_WEIGHTS
        assessment = format_assessment_data(
            self.article,
            # self.get_available_countries(),
            elements,
            self.questions,
            muids,
            data,
            self.descriptor_obj,
            article_weights,
            self
        )
        change = int(
            assessment.phase_overall_scores
            .get_range_index_for_phase('coherence') - score_2012
        )

        can_edit = self.check_permission('wise.msfd: Edit Assessment')
        show_edit_assessors = self.assessor_list and can_edit

        national_assessments_data = self.get_adequacy_assessment_data()
        self.national_assessments_2018 = self.national_assessment_tpl(
            data=national_assessments_data, report_header=""
        )

        self.assessment_header_2018_html = self.assessment_header_template(
            report_by="Member state",
            assessor_list=self.assessor_list,
            assessors=assessors_2018,
            assess_date=assess_date_2018,
            source_file=source_file_2018,
            show_edit_assessors=show_edit_assessors,
        )
        self.assessment_data_2018_html = self.assessment_data_2018_tpl(
            assessment=assessment,
            score_2012=score_2012,
            conclusion_2012=conclusion_2012,
            conclusion_2012_color=conclusion_2012_color,
            change_since_2012=change,
            can_comment=self.can_comment
        )

        return self.index()
示例#4
0
    def handle_save(self, action):

        # roles = get_roles(obj=self.context)

        if self.read_only_access:
            raise Unauthorized

        context = self.context

        if not hasattr(context, 'saved_assessment_data') or \
                not isinstance(context.saved_assessment_data, PersistentList):
            context.saved_assessment_data = AssessmentData()

        last = self.context.saved_assessment_data.last().copy()
        datetime_now = datetime.datetime.now().replace(microsecond=0)

        data, errors = self.extractData()
        # if not errors:
        # TODO: check for errors

        for question in self.questions:
            # countries = self.get_available_countries()
            elements = question.get_assessed_elements(self.descriptor_obj,
                                                      muids=[])

            values = []
            score = None

            if question.use_criteria == 'none':
                field_name = '{}_{}'.format(self.article, question.id)
                values.append(data.get(field_name, None))

            for element in elements:
                field_name = '{}_{}_{}'.format(self.article, question.id,
                                               element.id)
                values.append(data.get(field_name, None))

            # score is updated if ALL of the fields have been answered

            if values and None not in values:
                score = question.calculate_score(self.descriptor, values)

            name = '{}_{}_Score'.format(self.article, question.id)
            last_upd = '{}_{}_Last_update'.format(self.article, question.id)
            logger.info("Set score: %s - %s", name, score)
            data[name] = score

            last_values = last.get(name, [])
            last_values = getattr(last_values, 'values', '')
            score_values = getattr(score, 'values', '')

            if last_values != score_values:
                data[last_upd] = datetime_now

            # check if _Summary text is changed, and update _Last_update field
            summary = '{}_{}_Summary'.format(self.article, question.id)

            if last.get(summary, '') != data.get(summary, ''):
                data[last_upd] = datetime_now

        last_upd = "{}_assess_summary_last_upd".format(self.article)
        name = "{}_assessment_summary".format(self.article)

        if last.get(name, '') != data.get(name, ''):
            data[last_upd] = datetime_now

        overall_score = 0

        for k, v in data.items():
            if not k.endswith('_Score'):
                continue
            else:
                overall_score += getattr(v, 'weighted_score', 0)

        data['OverallScore'] = overall_score

        try:
            data['assessor'] = user.get_current().getId()
        except:
            data['assessor'] = 'system'

        data['assess_date'] = datetime.date.today()

        if last != data:
            last.update(data)
            self.context.saved_assessment_data.append(last)

        url = self.context.absolute_url() + '/@@edit-assessment-data-2018'
        self.request.response.setHeader('Content-Type', 'text/html')

        return self.request.response.redirect(url)
示例#5
0
文件: main.py 项目: eea/wise.msfd
    def __call__(self):
        alsoProvides(self.request, IDisableCSRFProtection)

        if 'assessor' in self.request.form:
            assessors = self.request.form['assessor']

            if isinstance(assessors, list):
                assessors = ', '.join(assessors)
            self.context.saved_assessment_data.ass_new = assessors

        # BBB:

        context = self.context

        if not hasattr(context, 'saved_assessment_data') or \
                not isinstance(context.saved_assessment_data, PersistentList):
            context.saved_assessment_data = AssessmentData()

        # Assessment data 2012
        # descriptor_criterions = get_descriptor(self.descriptor).criterions
        descriptor_criterions = []

        country_name = self._country_folder.title

        try:
            db_data_2012 = get_assessment_data_2012_db(country_name,
                                                       self.descriptor,
                                                       self.article)
            assessments_2012 = filter_assessment_data_2012(
                db_data_2012,
                self.country_region_code,
                descriptor_criterions,
            )
            self.assessment_data_2012 = self.assessment_data_2012_tpl(
                data=assessments_2012)

            if assessments_2012.get(country_name):
                score_2012 = assessments_2012[country_name].score
                conclusion_2012 = assessments_2012[country_name].overall_ass
            else:  # fallback
                ctry = assessments_2012.keys()[0]
                score_2012 = assessments_2012[ctry].score
                conclusion_2012 = assessments_2012[ctry].overall_ass

            report_by, assessors, assess_date, source_file = \
                get_assessment_head_data_2012(self.article,
                                              self.country_region_code,
                                              self._country_folder.id)
        except:
            logger.exception("Could not get assessment data for 2012")
            self.assessment_data_2012 = ''
            score_2012 = 100
            conclusion_2012 = 'Not found'
            report_by, assessors, assess_date, source_file = [
                'Not found'
            ] * 3 + [('Not found', '')]

        # Assessment header 2012

        self.assessment_header_2012 = self.assessment_header_template(
            report_by=report_by,
            assessor_list=[],
            assessors=assessors,
            assess_date=assess_date,
            source_file=source_file,
            show_edit_assessors=False,
            show_file_version=False,
        )

        # Assessment data 2018
        data = self.context.saved_assessment_data.last()
        elements = self.questions[0].get_all_assessed_elements(
            self.descriptor_obj,
            country_name=self.country_name,
            country_code=self.country_code)
        article_weights = ARTICLE_WEIGHTS
        assessment = format_assessment_data(self.article, elements,
                                            self.questions, self.muids, data,
                                            self.descriptor_obj,
                                            article_weights, self)

        score_2012 = int(round(score_2012))
        conclusion_2012_color = CONCLUSION_COLOR_TABLE.get(score_2012, 0)
        change = int(
            assessment.phase_overall_scores.get_range_index_for_phase(
                'adequacy') - score_2012)

        self.assessment_data_2018_html = self.assessment_data_2018_tpl(
            assessment=assessment,
            score_2012=score_2012,
            conclusion_2012=conclusion_2012,
            conclusion_2012_color=conclusion_2012_color,
            change_since_2012=change,
            can_comment=self.can_comment)

        # Assessment header 2018
        report_by_2018 = u'Commission'
        # assessors_2018 = self.context.saved_assessment_data.assessors
        assessors_2018 = getattr(self.context.saved_assessment_data, 'ass_new',
                                 'Not assessed')
        assess_date_2018 = data.get('assess_date', u'Not assessed')
        source_file_2018 = ('To be addedd...', '.')

        can_edit = self.check_permission('wise.msfd: Edit Assessment')
        show_edit_assessors = self.assessor_list and can_edit

        self.assessment_header_2018_html = self.assessment_header_template(
            report_by=report_by_2018,
            assessor_list=self.assessor_list,
            assessors=assessors_2018,
            assess_date=assess_date_2018,
            source_file=source_file_2018,
            show_edit_assessors=show_edit_assessors,
            show_file_version=False,
        )

        return self.index()