示例#1
0
def can_touch(assessment):
    if current_user.is_anonymous() and not EU_ASSESSMENT_MODE:
        return False
    if not assessment:
        return EU_ASSESSMENT_MODE or admin_perm.can() or nat_perm.can() or etc_perm.can() or (
            sta_perm.can() and not consultation_ended())
    return EU_ASSESSMENT_MODE or admin_perm.can() or etc_perm.can() or (
        assessment.user == current_user and not sta_cannot_change())
示例#2
0
def can_touch(assessment):
    if current_user.is_anonymous() and not EU_ASSESSMENT_MODE:
        return False
    if not assessment:
        return EU_ASSESSMENT_MODE or admin_perm.can() or nat_perm.can(
        ) or etc_perm.can() or (sta_perm.can() and not consultation_ended())
    return EU_ASSESSMENT_MODE or admin_perm.can() or etc_perm.can() or (
        assessment.user == current_user and not sta_cannot_change())
示例#3
0
 def get_user_MS(self, subject, region, period):
     member_states = []
     if admin_perm.can() or sta_perm.can():
         member_states = self.get_MS(subject, region, period)
     elif nat_perm.can() and current_user.MS:
         member_states = [(current_user.MS, current_user.MS)]
     return member_states + [(DEFAULT_MS, DEFAULT_MS)]
示例#4
0
def must_edit_ref(assessment):
    if not current_user.is_authenticated() or not assessment:
        return False
    if assessment.user_id == current_user.id:
        return False

    return etc_perm.can() or admin_perm.can()
示例#5
0
def must_edit_ref(assessment):
    if not current_user.is_authenticated() or not assessment:
        return False
    if assessment.user_id == current_user.id:
        return False

    return etc_perm.can() or admin_perm.can()
示例#6
0
 def get_user_MS(self, subject, region, period):
     member_states = []
     if admin_perm.can() or sta_perm.can():
         member_states = self.get_MS(subject, region, period)
     elif nat_perm.can() and current_user.MS:
         member_states = [(current_user.MS, current_user.MS)]
     return member_states + [(DEFAULT_MS, DEFAULT_MS)]
示例#7
0
def can_delete_comment(comment):
    if not comment or not current_user.is_authenticated:
        return False

    if comment.author_id == current_user.id:
        if sta_cannot_change():
            return False
        return True

    return admin_perm.can()
示例#8
0
def can_delete_comment(comment):
    if not comment or not current_user.is_authenticated():
        return False

    if comment.author_id == current_user.id:
        if sta_cannot_change():
            return False
        return True

    return admin_perm.can()
示例#9
0
    def get_default_values(self):
        period = request.args.get('period') or get_default_period()
        subject = request.args.get('subject')
        region = request.args.get('region')
        if consultation_ended() and (etc_perm.can() or admin_perm.can()):
            best = (
                self.model_manual_cls.query
                .filter_by(
                    dataset_id=period,
                    subject=subject,
                    region=region,
                    decision='OK',
                )
                .first()
            )
            if best:
                return best.__dict__

        best = (
            self.model_auto_cls.query
            .filter_by(dataset_id=period, subject=subject, region=region)
            .join(
                EtcDicMethod,
                self.model_auto_cls.assessment_method == EtcDicMethod.method
            )
        ).all()
        cmpf = (
            lambda x, y:
            -1 if x.assessment_method == '00' else cmp(x.order, y.order)
        )
        best.sort(cmp=cmpf)
        values = {}
        for f in all_fields(self.manual_form_cls()):
            attr = f.name
            for ass in filter(lambda a: getattr(a, attr, None), best):
                if attr not in EXCLUDE_FIELDS:
                    values[attr] = split_semicolon(attr, getattr(ass, attr))
                if attr in CONC_METHODS:
                    method = getattr(ass, 'assessment_method')
                    values[CONC_METHODS[attr]] = method
                break
        # Special case: conclusion_assessment_prev
        prev_lu = (
            self.prev_lu_cls.query
            .filter_by(subject=subject, region=region, dataset_id=period)
            .first()
        )
        if prev_lu:
            values['conclusion_assessment_prev'] = prev_lu.conclusion_assessment
        return values
 def filter_conclusions(self, conclusions):
     if admin_perm.can() or etc_perm.can():
         return conclusions
     conclusions = list(conclusions)
     ok_conclusions = filter(lambda c: c.decision in ['OK', 'END'],
                             conclusions)
     user_or_expert = (lambda c: not c.user.has_role('admin') and not c.user
                       .has_role('etc') and c not in ok_conclusions
                       if c.user else False)
     user_iurmax = (lambda c: not c.user.has_role('etc')
                    if c.user else False)
     if ok_conclusions:
         return ok_conclusions + filter(user_or_expert, conclusions)
     else:
         return filter(user_iurmax, conclusions)
示例#11
0
    def get_default_values(self):
        period = request.args.get('period') or get_default_period()
        subject = request.args.get('subject')
        region = request.args.get('region')
        if consultation_ended() and (etc_perm.can() or admin_perm.can()):
            best = (self.model_manual_cls.query.filter_by(
                dataset_id=period,
                subject=subject,
                region=region,
                decision='OK',
            ).first())
            if best:
                return best.__dict__

        best = (self.model_auto_cls.query.filter_by(
            dataset_id=period, subject=subject, region=region).join(
                EtcDicMethod,
                self.model_auto_cls.assessment_method == EtcDicMethod.method)
                ).all()
        cmpf = (lambda x, y: -1
                if x.assessment_method == '00' else cmp(x.order, y.order))
        best.sort(cmp=cmpf)
        values = {}
        # for f in all_fields(self.manual_form_cls()):
        #     attr = f.name
        #     for ass in filter(lambda a: getattr(a, attr, None), best):
        #         if attr not in EXCLUDE_FIELDS:
        #             values[attr] = split_semicolon(attr, getattr(ass, attr))
        #         if attr in CONC_METHODS:
        #             method = getattr(ass, 'assessment_method')
        #             values[CONC_METHODS[attr]] = method
        #         break
        # Special case: conclusion_assessment_prev
        prev_lu = (self.prev_lu_cls.query.filter_by(subject=subject,
                                                    region=region,
                                                    dataset_id=period).first())

        if prev_lu:
            if period == '3':
                values[
                    'conclusion_assessment_prev'] = prev_lu.conclusion_assessment
            if period == '5':
                values[
                    'conclusion_assessment_prev'] = prev_lu.conclusion_assessment_prev
                values[
                    'conclusion_assessment_trend_prev'] = prev_lu.conclusion_assessment_trend_prev
                values['backcasted_2007'] = prev_lu.backcasted_2007
        return values
示例#12
0
 def filter_conclusions(self, conclusions):
     if admin_perm.can() or etc_perm.can():
         return conclusions
     conclusions = list(conclusions)
     ok_conclusions = [
         conclusion for conclusion in conclusions
         if self.check_conclusion(conclusion)
     ]
     user_or_expert = (lambda c: not c.user.has_role('admin') and not c.user
                       .has_role('etc') and c not in ok_conclusions
                       if c.user else False)
     user_iurmax = (lambda c: not c.user.has_role('etc')
                    if c.user else False)
     if ok_conclusions:
         return ok_conclusions + filter(user_or_expert, conclusions)
     else:
         return filter(user_iurmax, conclusions)
示例#13
0
def can_edit(record):
    if EU_ASSESSMENT_MODE:
        return True
    if current_user.is_anonymous():
        return False

    if record.deleted:
        return False

    if record.dataset.is_readonly:
        return False

    if record.user_id == current_user.id:
        if sta_cannot_change():
            return False
        return True

    return etc_perm.can() or admin_perm.can()
示例#14
0
def can_edit(record):
    if EU_ASSESSMENT_MODE:
        return True
    if current_user.is_anonymous():
        return False

    if record.deleted:
        return False

    if record.dataset.is_readonly:
        return False

    if record.user_id == current_user.id:
        if sta_cannot_change():
            return False
        return True

    return etc_perm.can() or admin_perm.can()
示例#15
0
    def setup_objects_and_data(self, period, group, conclusion_type, user_id):
        fields = self.get_progress_fields(conclusion_type)
        if not fields:
            return {}

        self.objects = (
            db.session.query(self.model_manual_cls)
            .join(EtcDicHdHabitat, and_(
                self.model_manual_cls.habitatcode == EtcDicHdHabitat.habcode,
                self.model_manual_cls.dataset_id == EtcDicHdHabitat.dataset_id
            ))
            .with_entities(self.model_manual_cls.subject,
                           self.model_manual_cls.region,
                           self.model_manual_cls.decision,
                           self.model_manual_cls.user_id,
                           self.model_manual_cls.method_assessment,
                           self.model_manual_cls.method_range,
                           *fields)
            .filter(self.model_manual_cls.dataset_id == period)
        )
        if user_id:
            self.objects = self.objects.filter(
                self.model_manual_cls.user_id == user_id)

        if not admin_perm.can():
            self.objects = self.objects.filter(
                self.model_manual_cls.decision == 'OK')

        data_dict = {}
        for entry in self.objects.all():
            fields = ('subject', 'region', 'decision', 'user_id',
                      'overall', 'range', 'method', 'conclusion')
            row = dict(zip(fields, entry))
            if not (row['subject'] and row['region']):
                continue

            if row['subject'] not in data_dict:
                data_dict[row['subject']] = {}
            if row['region'] and row['region'] not in data_dict[row['subject']]:
                data_dict[row['subject']][row['region']] = []
            data_dict[row['subject']][row['region']].append(row)

        return data_dict
示例#16
0
    def setup_objects_and_data(self, period, group, conclusion_type, user_id):
        fields = self.get_progress_fields(conclusion_type)
        if not fields:
            return {}

        self.objects = (
            db.session.query(self.model_manual_cls)
            .join(EtcDicHdHabitat, and_(
                self.model_manual_cls.habitatcode == EtcDicHdHabitat.habcode,
                self.model_manual_cls.dataset_id == EtcDicHdHabitat.dataset_id
            ))
            .with_entities(self.model_manual_cls.subject,
                           self.model_manual_cls.region,
                           self.model_manual_cls.decision,
                           self.model_manual_cls.user_id,
                           self.model_manual_cls.method_assessment,
                           self.model_manual_cls.method_range,
                           *fields)
            .filter(self.model_manual_cls.dataset_id == period)
        )
        if user_id:
            self.objects = self.objects.filter(
                self.model_manual_cls.user_id == user_id)

        if not admin_perm.can():
            self.objects = self.objects.filter(
                self.model_manual_cls.decision == 'OK')

        data_dict = {}
        for entry in self.objects.all():
            fields = ('subject', 'region', 'decision', 'user_id',
                      'overall', 'range', 'method', 'conclusion')
            row = dict(zip(fields, entry))
            if not (row['subject'] and row['region']):
                continue

            if row['subject'] not in data_dict:
                data_dict[row['subject']] = {}
            if row['region'] and row['region'] not in data_dict[row['subject']]:
                data_dict[row['subject']][row['region']] = []
            data_dict[row['subject']][row['region']].append(row)

        return data_dict
示例#17
0
 def filter_conclusions(self, conclusions):
     if admin_perm.can() or etc_perm.can():
         return conclusions
     conclusions = list(conclusions)
     ok_conclusions = filter(lambda c: c.decision in ['OK', 'END'],
                             conclusions)
     user_or_expert = (
         lambda c:
         not c.user.has_role('admin') and not c.user.has_role('etc')
         and c not in ok_conclusions
         if c.user else False
     )
     user_iurmax = (
         lambda c:
         not c.user.has_role('etc')
         if c.user else False
     )
     if ok_conclusions:
         return ok_conclusions + filter(user_or_expert, conclusions)
     else:
         return filter(user_iurmax, conclusions)
示例#18
0
def can_add_conclusion(dataset, zone, subject, region=None):
    """
    Zone: one of 'species', 'habitat'
    """
    from art17.summary.views import SpeciesSummary, HabitatSummary
    zone_cls_mapping = {'species': SpeciesSummary, 'habitat': HabitatSummary}

    can_add = False
    warning_message = ''

    if not dataset:
        warning_message = 'Please select a valid dataset in order to add ' + \
            'a conclusion.'
    elif dataset.is_readonly:
        warning_message = 'The current dataset is readonly, so you cannot ' + \
            'add a conclusion.'
    elif not region:
        warning_message = 'Please select a Bioregion in order to add a ' + \
            'conclusion.'
    elif not (admin_perm.can() or sta_perm.can() or nat_perm.can()
              or etc_perm.can() or EU_ASSESSMENT_MODE):
        warning_message = 'You do not have permission to add conclusions.'
    elif sta_cannot_change():
        warning_message = 'The consultation period has ended; you cannont ' + \
            'add conclusions anymore.'
    else:
        if not EU_ASSESSMENT_MODE:
            record_exists = zone_cls_mapping[zone].get_manual_record(
                dataset.id, subject, region, current_user.id)
            if record_exists:
                warning_message = 'You have already added a conclusion for ' + \
                    'the selected subject and region.'
            else:
                can_add = True
        else:
            can_add = True
    return can_add, warning_message
示例#19
0
def can_add_conclusion(dataset, zone, subject, region=None):
    """
    Zone: one of 'species', 'habitat'
    """
    from art17.summary.views import SpeciesSummary, HabitatSummary
    zone_cls_mapping = {'species': SpeciesSummary, 'habitat': HabitatSummary}

    can_add = False
    warning_message = ''

    if not dataset:
        warning_message = 'Please select a valid dataset in order to add ' + \
            'a conclusion.'
    elif dataset.is_readonly:
        warning_message = 'The current dataset is readonly, so you cannot ' + \
            'add a conclusion.'
    elif not region:
        warning_message = 'Please select a Bioregion in order to add a ' + \
            'conclusion.'
    elif not (admin_perm.can() or sta_perm.can() or nat_perm.can() or
              etc_perm.can() or EU_ASSESSMENT_MODE):
        warning_message = 'You do not have permission to add conclusions.'
    elif sta_cannot_change():
        warning_message = 'The consultation period has ended; you cannont ' + \
            'add conclusions anymore.'
    else:
        if not EU_ASSESSMENT_MODE:
            record_exists = zone_cls_mapping[zone].get_manual_record(
                dataset.id, subject, region, current_user.id)
            if record_exists:
                warning_message = 'You have already added a conclusion for ' + \
                    'the selected subject and region.'
            else:
                can_add = True
        else:
            can_add = True
    return can_add, warning_message
示例#20
0
def can_change_revision(revision):
    if not revision.dataset or revision.dataset.is_readonly or revision.active:
        return False
    return admin_perm.can() or etc_perm.can()
示例#21
0
def can_manage_revisions():
    return admin_perm.can() or etc_perm.can() or EU_ASSESSMENT_MODE
示例#22
0
def can_edit_page(dataset):
    if not dataset or dataset.is_readonly:
        return False
    return admin_perm.can() or etc_perm.can() or EU_ASSESSMENT_MODE
示例#23
0
def can_change_revision(revision):
    if not revision.dataset or revision.dataset.is_readonly or revision.active:
        return False
    return admin_perm.can() or etc_perm.can()
示例#24
0
def can_edit_page(dataset):
    if not dataset or dataset.is_readonly:
        return False
    return admin_perm.can() or etc_perm.can() or EU_ASSESSMENT_MODE
示例#25
0
def can_manage_revisions():
    return admin_perm.can() or etc_perm.can() or EU_ASSESSMENT_MODE
示例#26
0
def can_view_decision():
    return etc_perm.can() or admin_perm.can() or EU_ASSESSMENT_MODE
示例#27
0
def can_view(record, countries):
    return (admin_perm.can() or etc_perm.can() or
            record.eu_country_code not in countries)
示例#28
0
def can_select_MS():
    return admin_perm.can() or sta_perm.can() or nat_perm.can()
示例#29
0
def can_update_decision(conclusion):
    if conclusion.deleted:
        return False
    return etc_perm.can() or admin_perm.can() or EU_ASSESSMENT_MODE
示例#30
0
def can_update_decision(conclusion):
    if conclusion.deleted:
        return False
    return etc_perm.can() or admin_perm.can() or EU_ASSESSMENT_MODE
示例#31
0
def can_view(record, countries):
    return (admin_perm.can() or etc_perm.can()
            or record.eu_country_code not in countries)
示例#32
0
def can_select_MS():
    return admin_perm.can() or sta_perm.can() or nat_perm.can()
示例#33
0
def can_view_decision():
    return etc_perm.can() or admin_perm.can() or EU_ASSESSMENT_MODE