# -*- encoding: utf-8 -*-
-import datetime
-from datetime import date
-from simplejson import dumps
+from datetime import date, datetime
+from auf.django.permissions.decorators import get_object
from django.contrib import messages
-from django.contrib.auth.decorators import login_required
+from django.contrib.auth.decorators import login_required, user_passes_test
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import MultipleObjectsReturned
from django.core.paginator import Paginator, InvalidPage
from django.db.models import Q
from django.http import Http404, HttpResponse, HttpResponseGone
from django.shortcuts import redirect, render, get_object_or_404
-
from sendfile import sendfile
-
-from auf.django.permissions.decorators import get_object
+from simplejson import dumps
from project.dae import models as dae
from project.dae.decorators import \
employe_dans_ma_region_ou_service, \
dossier_est_modifiable, \
poste_est_modifiable, get_contrat
+from project.dae.forms import FinancementFormSet, FinancementFormSetInitial
+from project.dae.forms import PosteComparaisonFormSet, PosteComparaisonFormSetInitial
from project.dae.forms import \
- PosteWorkflowForm, PosteForm, FinancementForm, PostePieceForm, \
- PosteComparaisonFormSet, DossierWorkflowForm, ChoosePosteForm, \
+ PosteWorkflowForm, PosteForm, PostePieceFormSet, \
+ DossierWorkflowForm, ChoosePosteForm, \
EmployeForm, DossierForm, DossierPieceForm, \
DossierComparaisonFormSet, RemunForm, ContratForm, DAENumeriseeForm, \
label_poste_display, DAEFinaliseesSearchForm
from project.dae.workflow import \
DOSSIER_ETAT_FINALISE, DOSSIER_ETAT_REGION_FINALISATION, \
DOSSIER_ETAT_DRH_FINALISATION, POSTE_ETAT_FINALISE
-from project.decorators import redirect_interdiction
+from project.decorators import \
+ redirect_interdiction, drh_or_admin_required, in_drh_or_admin
from project.rh import models as rh
+# Helpers
+
def devises():
liste = []
for d in rh.Devise.objects.all():
request.POST, instance=poste, request=request
)
if validationForm.is_valid():
- validationForm.save()
messages.add_message(
request, messages.SUCCESS, "La validation a été enregistrée."
)
comparaisons_internes = \
poste.dae_comparaisons_internes.ma_region_ou_service(request.user)
- vars = {
+ return render(request, 'dae/poste_consulter.html', {
'poste': poste,
'validationForm': validationForm,
- 'comparaisons_internes': comparaisons_internes
- }
+ 'comparaisons_internes': comparaisons_internes,
+ 'importer': in_drh_or_admin(request.user)
+ })
- return render(request, 'dae/poste_consulter.html', vars)
+@drh_or_admin_required
def poste_importer(request, id):
poste_dae = get_object_or_404(dae.Poste, id=id)
if request.method == 'POST':
il est automatiquement copié dans dae.
"""
+
+ def _dupliquer_poste(poste_dae, poste_rh):
+ """
+ Recopie les fields d'un poste RH dans un poste DAE
+ avec ceux-ci précédemment crées
+ """
+ exclus = ('id', 'supprime', 'date_creation',
+ 'user_creation', 'date_modification',
+ 'user_modification', )
+ fields = [f for f in poste_rh._meta.fields if f.name not in exclus]
+ for field in fields:
+ setattr(poste_dae, field.name, getattr(poste_rh, field.name))
+ return poste_dae
+
poste, data, vars = None, dict(), dict()
- if key:
- # Poste existant
+ # Sans key, c'est un nouveau poste
+ if key is None:
+ new = True
+ else:
+ new = False
+
+ # Type intervention
+ if 'type_intervention' in request.GET:
+ data['type_intervention'] = request.GET['type_intervention']
+
+ # Poste existant
+ poste_rh = None
+ if not new:
source, id = key.split('-')
if source == 'dae':
poste = get_object_or_404(dae.Poste, pk=id)
- poste_rh = None
+ data['poste'] = key
elif source == 'rh':
poste_rh = get_object_or_404(rh.Poste, pk=id)
- # Initialisation avec les valeurs du poste de rh_v1
poste = dae.Poste(id_rh=poste_rh)
- exclus = ('id', 'supprime', 'date_creation',
- 'user_creation', 'date_modification',
- 'user_modification', )
- fields = [f for f in poste_rh._meta.fields if f.name not in exclus]
- for field in fields:
- setattr(poste, field.name, getattr(poste_rh, field.name))
-
- if poste.id_rh_id:
+ # Initialisation avec les valeurs du poste de rh_v1
+ poste = _dupliquer_poste(poste, poste_rh)
data['poste'] = 'rh-' + str(poste.id_rh_id)
- else:
- data['poste'] = key
- else:
- # Nouveau poste
- vars['new'] = True
# prépopuler pour la modification de poste
+ if poste_rh is not None:
+ FinancementForm = FinancementFormSetInitial
+ PosteComparaisonForm = PosteComparaisonFormSetInitial
- if poste_rh is None: # poste RH n'est pas un modele
- qs_financements = poste.dae_financements.all()
- qs_comparaisons = poste.dae_comparaisons_internes.all()
- else:
qs_financements = poste_rh.rh_financements.all()
qs_comparaisons = poste_rh.rh_comparaisons_internes.all()
-
- financements = [{'type': f.type, 'pourcentage': f.pourcentage,
- 'commentaire': f.commentaire} for f in qs_financements]
- comparaisons = [{'implantation': c.implantation, 'nom': c.nom,
- 'montant': c.montant, 'devise': c.devise} for c in qs_comparaisons]
+ financements = [{'type': f.type, 'pourcentage': f.pourcentage,
+ 'commentaire': f.commentaire} for f in qs_financements]
+ comparaisons = [{'implantation': c.implantation, 'nom': c.nom,
+ 'montant': c.montant, 'devise': c.devise} for c in qs_comparaisons]
+ # formulaires normaux, avec modifications des objects FK
+ else:
+ FinancementForm = FinancementFormSet
+ PosteComparaisonForm = PosteComparaisonFormSet
+ financements = []
+ comparaisons = []
if request.POST:
data.update(dict(request.POST.items()))
form = PosteForm(data, instance=poste, request=request)
- financementForm = FinancementForm(request.POST, instance=poste,
- )
- piecesForm = PostePieceForm(
- request.POST, request.FILES, instance=poste,
- )
- if isinstance(poste, dae.Poste):
- comparaisons_formset = PosteComparaisonFormSet(
- request.POST,
- queryset=poste.dae_comparaisons_internes.ma_region_ou_service(
- request.user,
- )
- )
- else:
- comparaisons_formset = PosteComparaisonFormSet(
+ financementForm = FinancementForm(request.POST, instance=poste, )
+ piecesForm = PostePieceFormSet(request.POST, request.FILES, instance=poste, )
+ comparaisons_formset = PosteComparaisonForm(
request.POST,
- initial=comparaisons,
- queryset=dae.PosteComparaison.objects.none(),
+ instance=poste,
)
if form.is_valid() and piecesForm.is_valid() and \
financementForm.is_valid() and comparaisons_formset.is_valid():
# 'initial' évite la validation prémature lors d'une copie de poste de
# rh_v1 vers dae.
form = PosteForm(initial=data, instance=poste, request=request)
+ piecesForm = PostePieceFormSet(instance=poste)
- piecesForm = PostePieceForm(
- #initial=pieces,
- instance=poste)
- financementForm = FinancementForm(initial=financements, instance=poste)
-
- if isinstance(poste, dae.Poste):
- comparaisons_formset = PosteComparaisonFormSet(
+ if poste_rh is not None:
+ financementForm = FinancementForm(initial=financements, instance=poste)
+ comparaisons_formset = PosteComparaisonForm(
initial=comparaisons,
- queryset=poste.dae_comparaisons_internes.ma_region_ou_service(
- request.user
- )
+ instance=poste,
)
+ # cas de la création d'un nouveau poste
else:
- comparaisons_formset = PosteComparaisonFormSet(
- initial=comparaisons,
- queryset=dae.PosteComparaison.objects.none()
- )
+ financementForm = FinancementForm(instance=poste)
+ comparaisons_formset = PosteComparaisonForm(instance=poste)
vars.update(dict(
form=form, poste=poste, poste_key=key, piecesForm=piecesForm,
content_type.id
)}
postes_a_traiter = dae.Poste.objects.mes_choses_a_faire(request.user) \
- .extra(select=extra_select).order_by('-date_creation')
+ .extra(select=extra_select).order_by('-id')
postes_en_cours = dae.Poste.objects.ma_region_ou_service(request.user) \
.extra(select=extra_select) \
.filter(~Q(etat=POSTE_ETAT_FINALISE)) \
- .order_by('-date_creation')
- c = {
+ .order_by('-id')
+ return render(request, 'dae/postes_liste.html', {
'postes_a_traiter': postes_a_traiter,
'postes_en_cours': postes_en_cours,
- }
- return render(request, 'dae/postes_liste.html', c)
+ })
@login_required
request.user
)
comparaisons = dossier.dae_comparaisons.ma_region_ou_service(request.user)
- vars = {
+ return render(request, 'dae/embauche_consulter.html', {
'dossier': dossier,
'validationForm': validationForm,
'comparaisons_internes': comparaisons_internes,
- 'comparaisons': comparaisons
- }
- return render(request, 'dae/embauche_consulter.html', vars)
-
+ 'comparaisons': comparaisons,
+ 'importer': in_drh_or_admin(request.user)
+ })
+@user_passes_test(lambda u: u.is_superuser)
@dae_groupe_requis
@dossier_dans_ma_region_ou_service
def embauche_importer(request, dossier_id=None):
)}
embauches_a_traiter = dae.Dossier.objects \
.mes_choses_a_faire(request.user) \
- .extra(select=extra_select).order_by('-date_creation')
+ .extra(select=extra_select).order_by('-id')
embauches_en_cours = dae.Dossier.objects \
.ma_region_ou_service(request.user) \
.extra(select=extra_select) \
- .order_by('-date_creation') \
+ .order_by('-id') \
.exclude(etat=DOSSIER_ETAT_FINALISE)
c = {
'embauches_a_traiter': embauches_a_traiter,
except InvalidPage:
page = paginator.page(1)
- c = {
+ return render(request, 'dae/embauches_finalisees.html', {
'embauches': page,
'search_form': search_form,
- }
- return render(request, 'dae/embauches_finalisees.html', c)
+ 'importer': in_drh_or_admin(request.user)
+ })
def employe(request, key):
if dossier.statut is not None:
data['statut'] = dossier.statut.id
data['implantation'] = dossier.poste.implantation.id
- data['poste'] = u"%s %s" % (
- dossier.poste.type_poste.nom, dossier.poste.nom
- )
+ data['poste'] = dossier.poste.nom
salaire = dossier.get_salaire()
if salaire is not None:
data['montant'] = float(salaire.montant)
salaire = dossier.get_salaire()
data = {}
data['implantation'] = dossier.poste.implantation.id
- data['poste'] = u"%s %s" % (
- dossier.poste.type_poste.nom, dossier.poste.nom
- )
+ data['poste'] = dossier.poste.nom
if salaire is not None:
data['devise'] = salaire.devise.id
data['montant'] = float(salaire.montant)
params = getattr(request, method, [])
data = []
- # Voir le code de _poste_choices dans forms.py
- copies = dae.Poste.objects.exclude(id_rh__isnull=True) \
- .filter(etat=POSTE_ETAT_FINALISE)
- rh_postes_actifs = rh.Poste.objects.all()
-
if 'implantation_id' in params \
and params.get('implantation_id') is not u"":
implantation_id = params.get('implantation_id')
- copies = copies.filter(implantation__id=implantation_id)
- rh_postes_actifs = rh_postes_actifs.filter(
- implantation__id=implantation_id
- )
+ q = Q(implantation__id=implantation_id)
+ else:
+ q = Q()
- id_copies = [p.id_rh_id for p in copies.all()]
- rhv1 = rh_postes_actifs.exclude(id__in=id_copies)
- rhv1 = rhv1.select_related(depth=1)
+ postes_rh = rh.Poste.objects.ma_region_ou_service(request.user).filter(q)
+ postes_rh = postes_rh.select_related(depth=1)
data = [('', 'Nouveau poste')] + \
- sorted([('rh-%s' % p.id, label_poste_display(p)) for p in rhv1],
- key=lambda t: t[1])
+ sorted([('rh-%s' % p.id, label_poste_display(p)) for p in
+ postes_rh],
+ key=lambda t: t[1])
return HttpResponse(dumps(data))
method = request.method
params = getattr(request, method, [])
data = []
- annee_courante = datetime.datetime.now().year
+ annee_courante = datetime.now().year
if 'implantation_id' in params \
and params.get('implantation_id') is not u"":
implantation_id = params.get('implantation_id')