def get_user_progress(user): if not can_participate(user): return None if is_at_phase(Phase.SELF_REVIEW): person_reviews = get_all_person_reviews(user) project_reviews = get_all_project_reviews(user) res = {'performance_competencies': 0, 'dominant_characteristics': 0} if len(person_reviews) > 0: res = get_person_review_progress(person_reviews[0]) project_reviews_progress = [] for project_review in project_reviews: project_reviews_progress.append(get_project_review_progress(project_review)) res['projects'] = project_reviews_progress return res if is_at_phase(Phase.PEER_REVIEW): res = [] for peer in get_users_to_review(user): person_review_qs = get_user_person_reviews(user=user, reviewee=peer) if not person_review_qs: res.append((peer, State.TODO)) else: res.append((peer, State(person_review_qs.get().state))) return res return None
def get_users_to_review(user): if not user.is_authenticated: return User.objects.none() if is_at_phase(Phase.MANAGER_REVIEW): return User.objects.filter(manager=user) if is_at_phase(Phase.PEER_REVIEW): return User.objects.filter(projectreview__reviewers=user).distinct() return User.objects.none()
def get_users_to_review(user): if not user.is_authenticated: return User.objects.none() if is_at_phase(Phase.MANAGER_REVIEW): qs = User.objects.filter(round=get_active_round()) return filter_query_set_for_manager_review(user, qs) if is_at_phase(Phase.PEER_REVIEW): return User.objects.filter( projectreview__reviewers=user, projectreview__round=get_active_round()).distinct() return User.objects.none()
def get_all_project_comments(user): if not user.is_authenticated: return ProjectComment.objects.none() if is_at_phase(Phase.PEER_REVIEW): return ProjectComment.objects.filter(reviewer=user) if is_at_phase(Phase.MANAGER_REVIEW): return ProjectComment.objects.filter( project_review__reviewee__manager=user) if is_at_phase(Phase.RESULTS): return ProjectComment.objects.filter(project_review__reviewee=user) return ProjectComment.objects.none()
def get_all_person_reviews(user): if not user.is_authenticated: return PersonReview.objects.none() if is_at_phase(Phase.SELF_REVIEW): return PersonReview.objects.filter(reviewer=user, reviewee=user) if is_at_phase(Phase.PEER_REVIEW): return PersonReview.objects.filter(reviewer=user).exclude(reviewee=user) if is_at_phase(Phase.MANAGER_REVIEW): return PersonReview.objects.filter(reviewee__manager=user) if is_at_phase(Phase.RESULTS): return PersonReview.objects.filter(reviewee=user) return PersonReview.objects.none()
def can_review_person(user, reviewee): if not user.is_authenticated: return False if is_at_phase(Phase.SELF_REVIEW): if user == reviewee: return True return False if is_at_phase(Phase.PEER_REVIEW): if ProjectReview.objects.filter(reviewee=reviewee, reviewers=user).exists(): return True return False return False
def get_all_project_reviews(user): if not user.is_authenticated: return ProjectReview.objects.none() if is_at_phase(Phase.SELF_REVIEW): return ProjectReview.objects.filter(round=get_active_round(), reviewee=user) if is_at_phase(Phase.PEER_REVIEW): return ProjectReview.objects.filter(round=get_active_round(), reviewers=user) if is_at_phase(Phase.MANAGER_REVIEW): qs = ProjectReview.objects.filter(round=get_active_round()) return filter_query_set_for_manager_review(user, qs, 'reviewee') if is_at_phase(Phase.RESULTS): return ProjectReview.objects.filter(round=get_active_round(), reviewee=user) return ProjectReview.objects.none()
def get_all_manager_person_reviews(user): if not user.is_authenticated: return ManagerPersonReview.objects.none() if is_at_phase(Phase.MANAGER_REVIEW): qs = ManagerPersonReview.objects.filter(round=get_active_round()) return filter_query_set_for_manager_review(user, qs, 'reviewee') return ManagerPersonReview.objects.none()
def get_progess(self, obj): progress = get_user_progress(obj) if progress is None: return '' if is_at_phase(Phase.SELF_REVIEW): res = 'Criteria: %d%% - SW: %d%% - P: %s' % ( progress['performance_competencies'], progress['dominant_characteristics'], list(map(int, progress['projects']))) return res if is_at_phase(Phase.PEER_REVIEW): res = [ '%s: %s' % (peer.name, state.name) for peer, state in progress ] return ', '.join(res) return ''
def get_progess(self, obj): if is_at_phase(Phase.SELF_REVIEW): progress = get_user_progress(obj) res = 'Criteria: %d%% - SW: %d%% - P: %s' % ( progress['performance_competencies'], progress['dominant_characteristics'], list(map(int, progress['projects']))) return res return ''
def get_all_manager_project_comments(user): if not user.is_authenticated: return ManagerProjectComment.objects.none() if is_at_phase(Phase.MANAGER_REVIEW): qs = ManagerProjectComment.objects.filter( project_review__round=get_active_round()) return filter_query_set_for_manager_review(user, qs, 'project_review__reviewee') return ManagerProjectComment.objects.none()
def get_or_create_project_review(project, reviewee): if not reviewee.is_authenticated: return None if not is_at_phase(Phase.SELF_REVIEW): return None project_review, created = ProjectReview.objects.get_or_create( project=project, reviewee=reviewee) return project_review
def delete_project_review(user, project_review): if not user.is_authenticated: return None if project_review.reviewee != user: return None if not is_at_phase(Phase.SELF_REVIEW): return None project_review_id = project_review.id project_review.delete() return project_review_id
def get_user_progress(user): if is_at_phase(Phase.SELF_REVIEW): person_reviews = PersonReview.objects.filter(reviewee=user, reviewer=user) project_reviews = ProjectReview.objects.filter(reviewee=user) res = {'performance_competencies': 0, 'dominant_characteristics': 0} if len(person_reviews) > 0: res = get_person_review_progress(person_reviews[0]) project_reviews_progress = [] for project_review in project_reviews: project_reviews_progress.append( get_project_review_progress(project_review)) res['projects'] = project_reviews_progress return res return {}
def resolve_reviewers(self, info): if not is_at_phase(Phase.SELF_REVIEW): return ProjectReview.objects.none() return self.reviewers.all()
def get_project_review_reviewers(project_review): if not is_at_phase(Phase.SELF_REVIEW): return User.objects.none() return project_review.reviewers.all()
def can_review_project(user, project_review): if is_at_phase(Phase.PEER_REVIEW): return user in project_review.reviewers.all() return False
def get_project_review_rating(project_review): if not is_at_phase(Phase.PEER_REVIEW): return project_review.rating return None