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 ############################################
31 self
.prefixe_implantation
:
32 employe
.implantation
.zone_administrative
36 if self
.prefixe_service \
37 and groups
.SERVICE_UTILISATEURS
in groupes
:
38 q
= q |
Q(**{self
.prefixe_service
: employe
.service
})
40 liste
= self
.get_query_set().filter(q
)
42 ############################################
44 ############################################
45 if groups
.ACCIOR
in groupes
:
46 liste
= self
.get_query_set().all()
48 ############################################
50 ############################################
51 if groups
.ABF
in groupes
:
52 liste
= self
.get_query_set().all()
54 ############################################
55 # TRAITEMENT HAUTE DIRECTION
56 ############################################
57 if groups
.HAUTE_DIRECTION
in groupes
:
58 liste
= self
.get_query_set().all()
60 ############################################
62 ############################################
63 if groups
.DRH_NIVEAU_1
in groupes
or groups
.DRH_NIVEAU_2
in groupes
:
64 liste
= self
.get_query_set().all()
67 liste
= self
.get_query_set().all()
72 class ActifsQuerySet(QuerySet
):
74 def _actifs(self
, debut_field
, fin_field
, date_min
=None, date_max
=None,
78 janvier
= date(annee
, 1, 1)
79 decembre
= date(annee
, 12, 31)
80 date_min
= max(janvier
, date_min
) if date_min
else janvier
81 date_max
= min(decembre
, date_max
) if date_max
else decembre
82 if not date_min
and not date_max
:
83 date_min
= date_max
= date
.today()
86 Q(**{fin_field
+ '__gte': date_min
}) |
87 Q(**{fin_field
: None}))
90 Q(**{debut_field
+ '__lte': date_max
}) |
91 Q(**{debut_field
: None}))
94 def actifs(self
, *args
, **kwargs
):
95 return self
._actifs('date_debut', 'date_fin', *args
, **kwargs
)
98 class PosteQuerySet(ActifsQuerySet
):
102 class PosteManager(SecurityManager
):
103 prefixe_service
= "service"
104 prefixe_implantation
= "implantation__zone_administrative"
106 def get_query_set(self
):
107 return PosteQuerySet(self
.model
).select_related('type_poste')
109 def actifs(self
, *args
, **kwargs
):
110 return self
.get_query_set().actifs(*args
, **kwargs
)
112 def ma_region_ou_service(self
, user
):
113 return super(PosteManager
, self
).ma_region_ou_service(user
)
116 class DossierQuerySet(ActifsQuerySet
):
120 class DossierManager(SecurityManager
):
121 prefixe_service
= "poste__service"
122 prefixe_implantation
= "poste__implantation__zone_administrative"
124 def get_query_set(self
):
125 return DossierQuerySet(self
.model
) \
126 .select_related('poste', 'employe')
128 def actifs(self
, *args
, **kwargs
):
129 return self
.get_query_set().actifs(*args
, **kwargs
)
131 def sans_contrats_ou_echus(self
, *args
, **kwargs
):
132 app
= self
.model
._meta
.app_label
134 SELECT D.id FROM %(app)s_dossier AS D
135 LEFT JOIN %(app)s_contrat AS C ON D.id = C.dossier AND C.date_debut =
136 (SELECT MAX(date_debut) FROM %(app)s_contrat WHERE dossier=D.id)
137 WHERE (D.date_fin > '%(today)s' OR D.date_fin IS NULL)
138 AND (C.id IS NULL OR C.date_fin < '%(today)s')
139 """ % {'today': date
.today(), 'app': app
}
140 ids
= [d
.id for d
in self
.raw(sql
)]
141 return self
.get_query_set().filter(id__in
=ids
).filter(*args
, **kwargs
)
144 class RemunerationQuerySet(ActifsQuerySet
):
146 def actifs(self
, *args
, **kwargs
):
148 ._actifs('date_debut', 'date_fin', *args
, **kwargs
) \
150 'dossier__date_debut', 'dossier__date_fin',
154 class RemunerationManager(models
.Manager
):
156 def get_query_set(self
):
157 return RemunerationQuerySet(self
.model
)
159 def actifs(self
, *args
, **kwargs
):
160 return self
.get_query_set().actifs(*args
, **kwargs
)
163 class EmployeQuerySet(ActifsQuerySet
):
165 def actifs(self
, date_min
=None, date_max
=None, annee
=None):
167 ._actifs('rh_dossiers__date_debut', 'rh_dossiers__date_fin') \
171 class EmployeManager(models
.Manager
):
173 def get_query_set(self
):
174 return EmployeQuerySet(self
.model
)
176 def actifs(self
, *args
, **kwargs
):
177 return self
.get_query_set().actifs(*args
, **kwargs
)
180 class PosteComparaisonManager(SecurityManager
):
181 use_for_related_fields
= True
182 prefixe_implantation
= "implantation__zone_administrative"
185 class DossierComparaisonManager(SecurityManager
):
186 use_for_related_fields
= True
187 prefixe_implantation
= "implantation__zone_administrative"
190 class DeviseManager(models
.Manager
):
194 class ServiceManager(models
.Manager
):
198 class TypeRemunerationManager(models
.Manager
):