Merge branch 'masse-salariale' into dev
[auf_rh_dae.git] / project / rh / views.py
index 58e7617..b65eef3 100644 (file)
@@ -130,6 +130,72 @@ def rapports_contrat(request):
 
 @login_required
 @drh_or_admin_required
+def rapports_employes_sans_contrat(request):
+    """
+    Employé sans contrat = a un Dossier qui n'a pas de Contrat associé
+    Employé avec contrat échu = a un Dossier avec un Contrat se terminant hier
+    au plus tard... (aujourd'hui = ok, pas date de fin = illimité donc ok)
+    """
+    lookup_params = get_lookup_params(request)
+
+    # contrats échus
+    contrats_echus = rh.Contrat.objects.filter(
+            date_fin__lt=date.today()
+        ).filter(
+            **lookup_params
+        )
+
+    # dossiers en cours sans contrat ou contrats échus
+    dossiers = rh.Dossier.objects.filter(
+            Q(date_debut=None) | Q(date_debut__lte=date.today()),
+        ).filter(
+            Q(date_fin=None) | Q(date_fin__gte=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()
+
+    # tri
+    if 'o' in request.GET:
+        dossiers = dossiers.order_by(
+            ('-' if request.GET.get('ot') == "desc" else '') + request.GET['o']
+        )
+
+    # affichage
+    headers = [
+        ("employe__id", u"#"),
+        ("employe__nom", u"Employé"),
+        ("dossier", u"Dossier : Poste"),
+        ("rh_contrats__type_contrat", u"Contrat"),
+        ("rh_contrats__date_debut", u"Début contrat"),
+        ("rh_contrats__date_fin", u"Fin contrat"),
+        ("statut_residence", u"Statut"),
+        ("poste__implantation__region__code", u"Région"),
+        ("poste__implantation__nom", u"Implantation"),
+    ]
+    h = SortHeaders(
+        request, headers, order_field_type="ot", order_field="o",
+        not_sortable=('dossier',)
+    )
+
+    c = {
+        'title': u'Rapport des employés sans contrat ou contrat échu',
+        'employes': employes,
+        'dossiers': dossiers,
+        'headers': list(h.headers()),
+    }
+
+    return render(request, 'rh/rapports/employes_sans_contrat.html', c)
+
+
+@login_required
+@drh_or_admin_required
 def rapports_masse_salariale(request):
     form = MasseSalarialeForm(request.user, request.GET)
     if 'annee' in request.GET and form.is_valid():
@@ -437,58 +503,6 @@ def rapports_masse_salariale(request):
 
 @login_required
 @drh_or_admin_required
-def rapports_employes_sans_contrat(request):
-    lookup_params = get_lookup_params(request)
-
-    # contrats échus
-    contrats_echus = rh.Contrat.objects.filter(
-            date_fin__lt=date.today()
-        ).filter(
-            **lookup_params
-        )
-
-    # dossiers en cours sans contrat
-    dossiers_sans_contrat = rh.Dossier.objects.filter(
-            Q(date_fin=None) | Q(date_fin__gt=date.today()),
-        ).exclude(
-            date_debut__gt=date.today()
-        ).filter(
-            rh_contrats__in=contrats_echus
-        )
-
-    # employés sans contrat
-    employes = rh.Employe.objects \
-            .filter(rh_dossiers__in=dossiers_sans_contrat).distinct()
-    if 'o' in request.GET:
-        employes = employes.order_by(
-            ('-' if request.GET.get('ot') == "desc" else '') + request.GET['o']
-        )
-
-    # affichage
-    headers = [
-        ("id", u"#"),
-        ("nom", u"Employé"),
-        ("dossier", u"Dossier : Poste"),
-        ("dossier_date_debut", u"Début dossier"),
-        ("dossier_date_fin", u"Fin dossier"),
-    ]
-    h = SortHeaders(
-        request, headers, order_field_type="ot", order_field="o",
-        not_sortable=('dossier', 'dossier_date_debut', 'dossier_date_fin')
-    )
-
-    c = {
-        'title': u'Rapport des employés sans contrat',
-        'employes': employes,
-        'dossiers_sans_contrat': dossiers_sans_contrat,
-        'headers': list(h.headers()),
-    }
-
-    return render(request, 'rh/rapports/employes_sans_contrat.html', c)
-
-
-@login_required
-@drh_or_admin_required
 def rapports_postes_modelisation(request):
     c = {}
     data = []