from datetime import date
from django.db import models
-from django.db.models import Q
+from django.db.models import Q, Max
from django.db.models.query import QuerySet
from project import groups
def actifs(self, *args, **kwargs):
return self.get_query_set().actifs(*args, **kwargs)
+ def sans_contrats_ou_echus(self, *args, **kwargs):
+ app = self.model._meta.app_label
+ sql = """
+ SELECT D.id FROM rh_dossier AS D
+ LEFT JOIN rh_contrat AS C ON D.id = C.dossier AND C.date_debut =
+ (SELECT MAX(date_debut) FROM rh_contrat WHERE dossier=D.id)
+ WHERE (D.date_fin > '%(today)s' OR D.date_fin IS NULL) AND (C.id IS NULL OR C.date_fin < '%(today)s')
+ """ % {'today': date.today()}
+ ids = [d.id for d in self.raw(sql)]
+ return self.get_query_set().filter(id__in=ids).filter(*args, **kwargs)
class RemunerationQuerySet(ActifsQuerySet):
{% block contentrapport %}
<div id="changelist-filter">
<h2>{% trans 'Filter' %}</h2>
- {% filter_region_contrat %}
- {% filter_implantation_contrat %}
+ {% filter_region_dossier %}
+ {% filter_implantation_dossier %}
</div>
<table id="result_list" class="results">
# régionalisation
user_groups = [g.name for g in request.user.groups.all()]
- q_region = Q()
if groups.CORRESPONDANT_RH in user_groups or\
groups.ADMINISTRATEURS in user_groups or\
groups.DIRECTEUR_DE_BUREAU in user_groups:
employe = get_employe_from_user(request.user)
- q_region = Q(poste__implantation__region=employe.implantation.region)
+ lookup_params['poste__implantation__region'] = employe.implantation.region
# contrats échus
- contrats_echus = rh.Contrat.objects.filter(
- date_fin__lt=date.today()
- ).filter(
- **lookup_params
- )
+ #contrats_echus = rh.Contrat.objects.filter(
+ # date_fin__lt=date.today()
+ # ).filter(
+ # **lookup_params
+ # )
+
+ ## dossiers en cours sans contrat
+ #dossiers = rh.Dossier.objects.filter(q_region & (
+ # Q(date_fin=None) | Q(date_fin__gt=date.today())),
+ # ).exclude(
+ # date_debut__gt=date.today()
+ # ).filter(
+ # # sans contrat | contrat échu
+ # Q(rh_contrats=None) | Q(rh_contrats__in=contrats_echus)
+ # ).distinct()
+
+ ## employés sans contrat ou contrats échus
+ #employes = rh.Employe.objects.filter(rh_dossiers__in=dossiers) \
+ # .distinct().count()
+
+ dossiers = rh.Dossier.objects.sans_contrats_ou_echus(**lookup_params)
+ for d in dossiers:
+ print d
- # dossiers en cours sans contrat
- dossiers = rh.Dossier.objects.filter(q_region & (
- Q(date_fin=None) | Q(date_fin__gt=date.today())),
- ).exclude(
- date_debut__gt=date.today()
- ).filter(
- # sans contrat | contrat échu
- Q(rh_contrats=None) | Q(rh_contrats__in=contrats_echus)
- ).distinct()
-
- # employés sans contrat ou contrats échus
- employes = rh.Employe.objects.filter(rh_dossiers__in=dossiers) \
- .distinct().count()
+ dossiers_ids = [d.id for d in dossiers]
+ employes = rh.Employe.objects.filter(id__in=dossiers_ids).distinct().count()
# tri
if 'o' in request.GET: