from datamaster_modeles import models as ref
from django.core.urlresolvers import reverse
from django.db.models import Q
-from django.utils.encoding import smart_str
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.http import HttpResponse
from django.core.servers.basehttp import FileWrapper
from rh import models as rh
-from rh.lib import calc_remun
+from rh.lib import calc_remun, get_lookup_params
from rh.decorators import drh_or_admin_required
from rh.templatetags.rapports import SortHeaders
from rh.change_list import RechercheTemporelle
@login_required
@drh_or_admin_required
-def rapports_poste(request):
-
- lookup_params = dict(request.GET.items())
-
- for key, value in lookup_params.items():
- if key == 'o' or key == 'ot':
- del lookup_params[key]
- continue
- if not isinstance(key, str):
- # 'key' will be used as a keyword argument later, so Python
- # requires it to be a string.
- del lookup_params[key]
- lookup_params[smart_str(key)] = value
-
- if key == 'comble':
- del lookup_params[key]
-
- sort_order = 'ASC' if request.GET.get('ot') == 'asc' else 'DESC'
-
- postes = rh.Poste.objects.select_related('implantation') \
- .extra(select={
- 'employe_id':
- 'SELECT GROUP_CONCAT(employe SEPARATOR "|") '
- 'FROM rh_dossier '
- 'WHERE poste = rh_poste.id '
- 'AND rh_dossier.date_fin IS NULL ' + (
- 'ORDER BY employe ' + sort_order
- if request.GET.get('o') == 'employe_id' else ''
- )
- }) \
- .extra(select={
- 'employe_nom':
- 'SELECT GROUP_CONCAT(rh_employe.nom SEPARATOR "|") '
- 'FROM rh_dossier INNER JOIN rh_employe '
- 'ON rh_dossier.employe = rh_employe.id '
- 'WHERE poste = rh_poste.id '
- 'AND rh_dossier.date_fin IS NULL ' + (
- 'ORDER BY rh_employe.nom ' + sort_order
- if request.GET.get('o') == 'employe_nom' else ''
- )
- }) \
- .extra(select={
- 'employe_prenom':
- 'SELECT GROUP_CONCAT(rh_employe.prenom SEPARATOR "|") '
- 'FROM rh_dossier INNER JOIN rh_employe '
- 'ON rh_dossier.employe = rh_employe.id '
- 'WHERE poste = rh_poste.id '
- 'AND rh_dossier.date_fin IS NULL ' + (
- 'ORDER BY rh_employe.prenom ' + sort_order
- if request.GET.get('o') == 'employe_prenom' else ''
- )
- })
-
- postes = postes.filter(**lookup_params)
- if 'o' in request.GET:
- postes = postes.order_by(
- ('-' if sort_order == "DESC" else '') + request.GET['o']
- )
-
- out = []
- for p in postes:
- out.append({
- 'id': p.id,
- 'nom': p.nom,
- 'implantation': p.implantation,
- 'employes': [] if not p.employe_id else [
- {'id': id, 'nom': nom, 'prenom': prenom}
- for id, nom, prenom in izip(
- p.employe_id.split('|'),
- p.employe_nom.split('|'),
- p.employe_prenom.split('|')
- )
- ]
- })
-
- headers = [
- ("id", u"# du poste"),
- ("nom", u"Nom du poste"),
- ("implantation__id", u"Implantation"),
- ("employe_nom", u"Nom"),
- ]
- h = SortHeaders(request, headers, order_field_type="ot", order_field="o")
- c = {
- 'title': 'Rapport des postes',
- 'postes': out,
- 'count': len(out),
- 'headers': list(h.headers()),
- }
-
- return render_to_response(
- 'rh/rapports/postes.html', c, RequestContext(request)
- )
-
-
-@login_required
-@drh_or_admin_required
def rapports_contrat(request):
if 'HTTP_REFERER' in request.META.keys():
referer = request.META['HTTP_REFERER']
params.update({'statut': 'Actif'})
request.GET = params
- lookup_params = dict(request.GET.items())
- if 'ot' in lookup_params:
- del lookup_params['ot']
- if 'o' in lookup_params:
- del lookup_params['o']
-
- for key, value in lookup_params.items():
- if not isinstance(key, str):
- # 'key' will be used as a keyword argument later, so Python
- # requires it to be a string.
- del lookup_params[key]
- lookup_params[smart_str(key)] = value
+ lookup_params = get_lookup_params(request)
contrats = rh.Contrat.objects.select_related(
'dossier', 'dossier__poste', 'dossier__poste__implantation',
headers = [
("dossier__employe__id", u"# de l'employé"),
("dossier__employe__nom", u"Employé"),
- ("type_contrat__nom", u"Poste"),
+ ("dossier__poste__nom", u"Poste"),
("dossier__poste__implantation__region", u"Région"),
("dossier__poste__implantation", u"Implantation"),
("type_contrat__nom", u"Type de contrat"),
@login_required
@drh_or_admin_required
-def rapports_remuneration(request):
-
- lookup_params = dict(request.GET.items())
- if 'ot' in lookup_params:
- del lookup_params['ot']
- if 'o' in lookup_params:
- del lookup_params['o']
-
- for key, value in lookup_params.items():
- if not isinstance(key, str):
- # 'key' will be used as a keyword argument later, so Python
- # requires it to be a string.
- del lookup_params[key]
- lookup_params[smart_str(key)] = value
-
- employes = rh.Employe.objects.all()
- if 'o' in request.GET:
- employes = employes.order_by(
- ('-' if request.GET.get('ot') == "desc" else '') + request.GET['o']
- )
-
- employes = employes.filter(**lookup_params)
-
- output = []
- headers = [
- ("id", u"# de l'employé"),
- ("nom", u"Nom"),
- ("prenom", u"Prénom"),
- ("", u"Salaire"),
- ("", u"RAS"),
- ("", u"Indemnités"),
- ("", u"Accessoire"),
- ("", u"Charges patronales"),
- ("", u"Total"),
- ]
- h = SortHeaders(request, headers, order_field_type="ot", order_field="o")
-
- for employe in employes:
- line = {}
- output.append(line)
-
- dossiers = employe.rh_dossiers.all()
-
- remun = {}
- remun_sum_euro = 0
-
- for dossier in dossiers:
- this_remun, this_remun_sum, this_remun_sum_euro = \
- calc_remun(dossier)
-
- for item in this_remun:
- if item not in remun:
- remun[item] = this_remun[item]
- else:
- remun[item][0] += this_remun[item][0]
- remun[item][1] += this_remun[item][1]
-
- remun_sum_euro += this_remun_sum_euro
-
- line['remun_sum_euro'] = remun_sum_euro
-
- for r in remun:
- if r == u'Indemnité':
- line['Indemnite'] = remun[r][1]
- else:
- line[r] = remun[r][1]
-
- line['id'] = employe.id
- line['nom'] = employe.nom
- line['prenom'] = employe.prenom
-
- c = {
- 'title': 'Rapport de remuneration',
- 'employes': output,
- 'headers': list(h.headers()),
- }
-
- return render_to_response(
- 'rh/rapports/remuneration.html', c, RequestContext(request)
- )
-
-
-@login_required
-@drh_or_admin_required
def rapports_employes_sans_contrat(request):
+ lookup_params = get_lookup_params(request)
- # tri : TODO fonctionne pas
- lookup_params = dict(request.GET.items())
- if 'ot' in lookup_params:
- del lookup_params['ot']
- if 'o' in lookup_params:
- del lookup_params['o']
-
- for key, value in lookup_params.items():
- if not isinstance(key, str):
- # 'key' will be used as a keyword argument later, so Python
- # requires it to be a string.
- del lookup_params[key]
- lookup_params[smart_str(key)] = value
-
- employes_query = rh.Employe.objects
+ # 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_query = employes_query.order_by(
+ employes = employes.order_by(
('-' if request.GET.get('ot') == "desc" else '') + request.GET['o']
)
- # données
- employes = {}
-
- dossiers_en_cours = rh.Dossier.objects.filter(
- Q(date_fin=None) | Q(date_fin__gt=date.today())
- )
- tous_contrats_echus = rh.Contrat.objects.filter(
- date_fin__lt=date.today(), dossier__in=dossiers_en_cours
- )
- contrats = tous_contrats_echus.filter(**lookup_params).all()
- for c in contrats:
- if c.dossier.employe.id not in employes.keys():
- employes[c.dossier.employe.id] = {
- 'employe': c.dossier.employe,
- 'dossiers': []
- }
- employes[c.dossier.employe.id]['dossiers'] += [c.dossier]
-
# affichage
headers = [
("id", u"# de l'employé"),
- ("nom", u"Nom"),
- ("prenom", u"Prénom"),
- ("dossier", u"Dossiers"),
+ ("nom", u"Employé"),
+ ("dossier", u"Dossier : Poste"),
+ ("dossier_date_debut", u"Début occupation poste"),
+ ("dossier_date_fin", u"Fin occupation poste"),
]
h = SortHeaders(
request, headers, order_field_type="ot", order_field="o",
- not_sortable=('dossier',)
+ not_sortable=('dossier','dossier_date_debut','dossier_date_fin',)
)
c = {
'title': u'Rapport des employés sans contrat',
'employes': employes,
- 'count': len(employes),
+ 'dossiers_sans_contrat':dossiers_sans_contrat,
'headers': list(h.headers()),
}