1 # -*- encoding: utf-8 -*-
4 from datetime
import date
6 from auf
.django
.metadata
.managers
import NoDeleteManager
, NoDeleteQuerySet
7 from django
.db
import models
8 from django
.db
.models
import Q
10 from project
.groups
import get_employe_from_user
11 from project
.groups
import \
12 grp_drh
, grp_drh2
, grp_accior
, grp_abf
, grp_haute_direction
, \
13 grp_service_utilisateurs
16 class SecurityManager(models
.Manager
):
18 prefixe_service
= None
19 prefixe_implantation
= None
21 def ma_region_ou_service(self
, user
):
23 Filtrage des postes en fonction du user connecté (region / service)
24 On s'intéresse aussi au groupe auquel appartient le user car
25 certains groupes peuvent tout voir.
27 employe
= get_employe_from_user(user
)
29 ############################################
31 ############################################
33 q
= Q(**{self
.prefixe_implantation
: employe
.implantation
.region
})
36 if self
.prefixe_service \
37 and grp_service_utilisateurs
in user
.groups
.all():
38 q
= q |
Q(**{self
.prefixe_service
: employe
.service
})
40 liste
= self
.get_query_set().filter(q
)
42 ############################################
44 ############################################
45 if grp_accior
in user
.groups
.all():
46 liste
= self
.get_query_set().all()
48 ############################################
50 ############################################
51 if grp_abf
in user
.groups
.all():
52 liste
= self
.get_query_set().all()
54 ############################################
55 # TRAITEMENT HAUTE DIRECTION
56 ############################################
57 if grp_haute_direction
in user
.groups
.all():
58 liste
= self
.get_query_set().all()
60 ############################################
62 ############################################
63 if grp_drh
in user
.groups
.all() or grp_drh2
in user
.groups
.all():
64 liste
= self
.get_query_set().all()
67 liste
= self
.get_query_set().all()
72 class PosteManager(SecurityManager
):
74 Chargement de tous les objets FK existants sur chaque QuerySet.
76 prefixe_service
= "service"
77 prefixe_implantation
= "implantation__region"
80 return super(PosteManager
, self
).get_query_set().filter(
81 Q(date_fin__gt
=datetime
.datetime
.now()) |
82 Q(date_fin__isnull
=True)
85 def ma_region_ou_service(self
, user
):
86 return super(PosteManager
, self
).ma_region_ou_service(user
)
88 def get_query_set(self
):
93 #'implantation.bureau_rattachement',
101 return super(PosteManager
, self
).get_query_set() \
102 .select_related(*fkeys
).all()
105 class DossierManager(SecurityManager
):
106 prefixe_service
= "poste__service"
107 prefixe_implantation
= "poste__implantation__region"
109 def get_query_set(self
):
114 return super(DossierManager
, self
).get_query_set() \
115 .select_related(*fkeys
).all()
117 def ma_region_ou_service(self
, user
):
118 return super(DossierManager
, self
).ma_region_ou_service(user
)
121 class EmployeQuerySet(NoDeleteQuerySet
):
123 def actifs(self
, date_min
=None, date_max
=None, annee
=None):
126 janvier
= date(annee
, 1, 1)
127 decembre
= date(annee
, 12, 31)
128 date_min
= max(janvier
, date_min
) if date_min
else janvier
129 date_max
= min(decembre
, date_max
) if date_max
else decembre
130 if not date_min
and not date_max
:
131 date_min
= date_max
= date
.today()
134 Q(rh_dossiers__date_fin__gte
=date_min
) |
135 Q(rh_dossiers__date_fin
=None)
139 Q(rh_dossiers__date_debut__lte
=date_max
) |
140 Q(rh_dossiers__date_debut
=None)
145 class EmployeManager(NoDeleteManager
):
146 def get_query_set(self
):
147 return EmployeQuerySet(self
.model
) \
148 .filter(supprime
=False)
150 def actifs(self
, *args
, **kwargs
):
151 return self
.get_query_set().actifs(*args
, **kwargs
)
154 class PosteComparaisonManager(SecurityManager
):
155 use_for_related_fields
= True
156 prefixe_implantation
= "implantation__region"
159 class DossierComparaisonManager(SecurityManager
):
160 use_for_related_fields
= True
161 prefixe_implantation
= "implantation__region"
164 class TypeRemunerationManager(models
.Manager
):