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 auf
.django
.metadata
.managers
import NoDeleteManager
, NoDeleteQuerySet
11 from project
.groups
import get_employe_from_user
12 from project
.groups
import \
13 grp_drh
, grp_drh2
, grp_accior
, grp_abf
, grp_haute_direction
, \
14 grp_service_utilisateurs
17 class SecurityManager(models
.Manager
):
19 prefixe_service
= None
20 prefixe_implantation
= None
22 def ma_region_ou_service(self
, user
):
24 Filtrage des postes en fonction du user connecté (region / service)
25 On s'intéresse aussi au groupe auquel appartient le user car
26 certains groupes peuvent tout voir.
28 employe
= get_employe_from_user(user
)
30 ############################################
32 ############################################
34 q
= Q(**{self
.prefixe_implantation
: employe
.implantation
.region
})
37 if self
.prefixe_service \
38 and grp_service_utilisateurs
in user
.groups
.all():
39 q
= q |
Q(**{self
.prefixe_service
: employe
.service
})
41 liste
= self
.get_query_set().filter(q
)
43 ############################################
45 ############################################
46 if grp_accior
in user
.groups
.all():
47 liste
= self
.get_query_set().all()
49 ############################################
51 ############################################
52 if grp_abf
in user
.groups
.all():
53 liste
= self
.get_query_set().all()
55 ############################################
56 # TRAITEMENT HAUTE DIRECTION
57 ############################################
58 if grp_haute_direction
in user
.groups
.all():
59 liste
= self
.get_query_set().all()
61 ############################################
63 ############################################
64 if grp_drh
in user
.groups
.all() or grp_drh2
in user
.groups
.all():
65 liste
= self
.get_query_set().all()
68 liste
= self
.get_query_set().all()
73 class ActifsQuerySet(QuerySet
):
75 def _actifs(self
, debut_field
, fin_field
, date_min
=None, date_max
=None,
79 janvier
= date(annee
, 1, 1)
80 decembre
= date(annee
, 12, 31)
81 date_min
= max(janvier
, date_min
) if date_min
else janvier
82 date_max
= min(decembre
, date_max
) if date_max
else decembre
83 if not date_min
and not date_max
:
84 date_min
= date_max
= date
.today()
87 Q(**{fin_field
+ '__gte': date_min
}) |
88 Q(**{fin_field
: None})
92 Q(**{debut_field
+ '__lte': date_max
}) |
93 Q(**{debut_field
: None})
97 def actifs(self
, *args
, **kwargs
):
98 return self
._actifs('date_debut', 'date_fin', *args
, **kwargs
)
101 class PosteQuerySet(NoDeleteQuerySet
, ActifsQuerySet
):
105 class PosteManager(SecurityManager
, NoDeleteManager
):
106 prefixe_service
= "service"
107 prefixe_implantation
= "implantation__region"
109 def get_query_set(self
):
110 return PosteQuerySet(self
.model
).filter(supprime
=False) \
111 .select_related('type_poste')
113 def actifs(self
, *args
, **kwargs
):
114 return self
.get_query_set().actifs(*args
, **kwargs
)
116 def ma_region_ou_service(self
, user
):
117 return super(PosteManager
, self
).ma_region_ou_service(user
)
120 class DossierQuerySet(NoDeleteQuerySet
, ActifsQuerySet
):
124 class DossierManager(SecurityManager
, NoDeleteManager
):
125 prefixe_service
= "poste__service"
126 prefixe_implantation
= "poste__implantation__region"
128 def get_query_set(self
):
129 return DossierQuerySet(self
.model
) \
130 .filter(supprime
=False) \
131 .select_related('poste', 'employe')
133 def actifs(self
, *args
, **kwargs
):
134 return self
.get_query_set().actifs(*args
, **kwargs
)
137 class RemunerationQuerySet(NoDeleteQuerySet
, ActifsQuerySet
):
139 def actifs(self
, *args
, **kwargs
):
141 ._actifs('date_debut', 'date_fin', *args
, **kwargs
) \
143 'dossier__date_debut', 'dossier__date_fin', *args
, **kwargs
147 class RemunerationManager(NoDeleteManager
):
149 def get_query_set(self
):
150 return RemunerationQuerySet(self
.model
).filter(supprime
=False)
152 def actifs(self
, *args
, **kwargs
):
153 return self
.get_query_set().actifs(*args
, **kwargs
)
156 class EmployeQuerySet(NoDeleteQuerySet
, ActifsQuerySet
):
158 def actifs(self
, date_min
=None, date_max
=None, annee
=None):
159 return self
._actifs('dossiers__date_debut', 'dossiers__date_fin') \
163 class EmployeManager(NoDeleteManager
):
164 def get_query_set(self
):
165 return EmployeQuerySet(self
.model
) \
166 .filter(supprime
=False)
168 def actifs(self
, *args
, **kwargs
):
169 return self
.get_query_set().actifs(*args
, **kwargs
)
172 class PosteComparaisonManager(SecurityManager
):
173 use_for_related_fields
= True
174 prefixe_implantation
= "implantation__region"
177 class DossierComparaisonManager(SecurityManager
):
178 use_for_related_fields
= True
179 prefixe_implantation
= "implantation__region"
182 class DeviseManager(NoDeleteManager
):
186 class ServiceManager(NoDeleteManager
):
190 class TypeRemunerationManager(NoDeleteManager
):