1 # -*- encoding: utf-8 -*-
3 from datetime
import date
5 from django
.db
import models
6 from django
.db
.models
import Q
7 from django
.db
.models
.query
import QuerySet
9 from project
import groups
12 class SecurityManager(models
.Manager
):
14 prefixe_service
= None
15 prefixe_implantation
= None
17 def ma_region_ou_service(self
, user
):
19 Filtrage des postes en fonction du user connecté (region / service)
20 On s'intéresse aussi au groupe auquel appartient le user car
21 certains groupes peuvent tout voir.
23 employe
= groups
.get_employe_from_user(user
)
24 groupes
= [g
.name
for g
in user
.groups
.all()]
26 ############################################
28 ############################################
30 q
= Q(**{self
.prefixe_implantation
: employe
.implantation
.region
})
33 if self
.prefixe_service \
34 and groups
.SERVICE_UTILISATEURS
in groupes
:
35 q
= q |
Q(**{self
.prefixe_service
: employe
.service
})
37 liste
= self
.get_query_set().filter(q
)
39 ############################################
41 ############################################
42 if groups
.ACCIOR
in groupes
:
43 liste
= self
.get_query_set().all()
45 ############################################
47 ############################################
48 if groups
.ABF
in groupes
:
49 liste
= self
.get_query_set().all()
51 ############################################
52 # TRAITEMENT HAUTE DIRECTION
53 ############################################
54 if groups
.HAUTE_DIRECTION
in groupes
:
55 liste
= self
.get_query_set().all()
57 ############################################
59 ############################################
60 if groups
.DRH_NIVEAU_1
in groupes
or groups
.DRH_NIVEAU_2
in groupes
:
61 liste
= self
.get_query_set().all()
64 liste
= self
.get_query_set().all()
69 class ActifsQuerySet(QuerySet
):
71 def _actifs(self
, debut_field
, fin_field
, date_min
=None, date_max
=None,
75 janvier
= date(annee
, 1, 1)
76 decembre
= date(annee
, 12, 31)
77 date_min
= max(janvier
, date_min
) if date_min
else janvier
78 date_max
= min(decembre
, date_max
) if date_max
else decembre
79 if not date_min
and not date_max
:
80 date_min
= date_max
= date
.today()
83 Q(**{fin_field
+ '__gte': date_min
}) |
84 Q(**{fin_field
: None})
88 Q(**{debut_field
+ '__lte': date_max
}) |
89 Q(**{debut_field
: None})
93 def actifs(self
, *args
, **kwargs
):
94 return self
._actifs('date_debut', 'date_fin', *args
, **kwargs
)
97 class PosteQuerySet(ActifsQuerySet
):
101 class PosteManager(SecurityManager
):
102 prefixe_service
= "service"
103 prefixe_implantation
= "implantation__region"
105 def get_query_set(self
):
106 return PosteQuerySet(self
.model
).select_related('type_poste')
108 def actifs(self
, *args
, **kwargs
):
109 return self
.get_query_set().actifs(*args
, **kwargs
)
111 def ma_region_ou_service(self
, user
):
112 return super(PosteManager
, self
).ma_region_ou_service(user
)
115 class DossierQuerySet(ActifsQuerySet
):
119 class DossierManager(SecurityManager
):
120 prefixe_service
= "poste__service"
121 prefixe_implantation
= "poste__implantation__region"
123 def get_query_set(self
):
124 return DossierQuerySet(self
.model
) \
125 .select_related('poste', 'employe')
127 def actifs(self
, *args
, **kwargs
):
128 return self
.get_query_set().actifs(*args
, **kwargs
)
131 class RemunerationQuerySet(ActifsQuerySet
):
133 def actifs(self
, *args
, **kwargs
):
135 ._actifs('date_debut', 'date_fin', *args
, **kwargs
) \
137 'dossier__date_debut', 'dossier__date_fin', *args
, **kwargs
141 class RemunerationManager(models
.Manager
):
143 def get_query_set(self
):
144 return RemunerationQuerySet(self
.model
)
146 def actifs(self
, *args
, **kwargs
):
147 return self
.get_query_set().actifs(*args
, **kwargs
)
150 class EmployeQuerySet(ActifsQuerySet
):
152 def actifs(self
, date_min
=None, date_max
=None, annee
=None):
154 ._actifs('rh_dossiers__date_debut', 'rh_dossiers__date_fin') \
158 class EmployeManager(models
.Manager
):
160 def get_query_set(self
):
161 return EmployeQuerySet(self
.model
)
163 def actifs(self
, *args
, **kwargs
):
164 return self
.get_query_set().actifs(*args
, **kwargs
)
167 class PosteComparaisonManager(SecurityManager
):
168 use_for_related_fields
= True
169 prefixe_implantation
= "implantation__region"
172 class DossierComparaisonManager(SecurityManager
):
173 use_for_related_fields
= True
174 prefixe_implantation
= "implantation__region"
177 class DeviseManager(models
.Manager
):
181 class ServiceManager(models
.Manager
):
185 class TypeRemunerationManager(models
.Manager
):