- qs = self.model._default_manager.get_query_set()
- # Si user est superuser afficher toutes les offres d'emploi
- user_groupes = request.user.groups.all()
- if not grp_drh_recrutement in user_groupes and \
- not request.user.is_superuser:
- """
- Si le user n'est ni un évaluateur ni un administrateur régional,
- retourner none
- Vérifier groupes
- """
- if grp_evaluateurs_recrutement in user_groupes:
- try:
- user = Evaluateur.objects.get(user=request.user)
- except Evaluateur.DoesNotExist:
- return qs.none()
- elif grp_administrateurs_recrutement in user_groupes:
- try:
- user = AdministrateurRegional.objects.get(user=request.user)
- except AdministrateurRegional.DoesNotExist:
- return qs.none()
- else:
- return qs.none()
-
- if type(user) is AdministrateurRegional:
- region_ids = [g.id for g in user.regions.all()]
- return qs.select_related('offre_emploi').\
- filter(region__in=region_ids)
- if type(user) is Evaluateur:
- candidats = [g for g in user.candidats.all()]
- offre_emploi_ids = [c.offre_emploi.id for c in candidats]
- return qs.select_related('offre_emploi').\
- filter(id__in=offre_emploi_ids)
- return qs.none()
- return qs.select_related('offre_emploi')
+ qs = self.model._default_manager.get_query_set() \
+ .select_related('offre_emploi')
+ user_groupes = get_user_groupnames(request.user)
+ if groups.DRH_NIVEAU_1 in user_groupes or \
+ groups.DRH_NIVEAU_2 in user_groupes or \
+ groups.HAUTE_DIRECTION in user_groupes:
+ return qs
+
+ if groups.DIRECTEUR_DE_BUREAU in user_groupes or \
+ groups.CORRESPONDANT_RH in user_groupes or \
+ groups.ADMINISTRATEURS in user_groupes:
+ employe = groups.get_employe_from_user(request.user)
+ return qs.filter(region=employe.implantation.region)
+
+ if Evaluateur.objects.filter(user=request.user).exists():
+ evaluateur = Evaluateur.objects.get(user=request.user)
+ offre_ids = [
+ e.candidat.offre_emploi_id
+ for e in CandidatEvaluation.objects
+ .select_related('candidat')
+ .filter(evaluateur=evaluateur)
+ ]
+ return qs.filter(id__in=offre_ids)
+
+ return qs.none()
+
+ ### Permission add, delete, change
+ def has_add_permission(self, request):
+ user_groupes = get_user_groupnames(request.user)
+ if request.user.is_superuser is True or \
+ groups.DRH_NIVEAU_1 in user_groupes or \
+ groups.DRH_NIVEAU_2 in user_groupes or \
+ groups.DIRECTEUR_DE_BUREAU in user_groupes or \
+ groups.ADMINISTRATEURS in user_groupes or \
+ groups.HAUTE_DIRECTION in user_groupes:
+ return True
+ return False
+
+ def has_delete_permission(self, request, obj=None):
+ user_groupes = get_user_groupnames(request.user)
+ if request.user.is_superuser is True or \
+ groups.DRH_NIVEAU_1 in user_groupes or \
+ groups.DRH_NIVEAU_2 in user_groupes or \
+ groups.HAUTE_DIRECTION in user_groupes:
+ return True
+
+ if obj is not None:
+ employe = groups.get_employe_from_user(request.user)
+ if (groups.DIRECTEUR_DE_BUREAU in user_groupes or \
+ groups.ADMINISTRATEURS in user_groupes) and (
+ employe.implantation.region == obj.lieu_affectation.region):
+ return True
+
+ return False