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())
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())
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()
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)
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
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)
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()
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)
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
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()
def can_manage_revisions(): return admin_perm.can() or etc_perm.can() or EU_ASSESSMENT_MODE
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
def can_view_decision(): return etc_perm.can() or admin_perm.can() or EU_ASSESSMENT_MODE
def can_view(record, countries): return (admin_perm.can() or etc_perm.can() or record.eu_country_code not in countries)
def can_update_decision(conclusion): if conclusion.deleted: return False return etc_perm.can() or admin_perm.can() or EU_ASSESSMENT_MODE