poste PDF
[auf_rh_dae.git] / project / dae / views.py
CommitLineData
5d680e84 1# -*- encoding: utf-8 -*-
f87fe1a1 2
868a9322 3import os
f87fe1a1 4import datetime
868a9322 5import StringIO
cb1d62b5 6from collections import defaultdict
8e30e17f 7from datetime import date
3feae3c6 8from simplejson import dumps
768d7e1b 9import warnings
139686f2 10
a05cc82d 11from django.core.urlresolvers import reverse
86f1e48d 12from django.http import Http404, HttpResponse, HttpResponseGone
5d680e84 13from django.shortcuts import redirect, render_to_response, get_object_or_404
868a9322
OL
14from django.template import Context, RequestContext
15from django.template.loader import get_template
9cb4de55 16from django.contrib import messages
868a9322 17from django.conf import settings
5d680e84 18
ad86bbb3 19from reversion.models import Version
868a9322 20import ho.pisa as pisa
ad86bbb3 21
5d680e84
NC
22from project.dae import models as dae
23from project.rh_v1 import models as rh
24
04380fba
OL
25from decorators import dae_groupe_requis, \
26 poste_dans_ma_region_ou_service, \
27 dossier_dans_ma_region_ou_service, \
28 employe_dans_ma_region_ou_service
151e7bd0 29from forms import *
ed1982f3 30
868a9322
OL
31pisa.showLogging()
32
33def reponse_pdf(template_src, context_dict):
34 """
35 Générer une réponse HTTP avec un PDF
36 """
37 css = ""
38 for f in ('css/pdf.css', 'css/dae.css'):
39 css_file = os.path.join(settings.MEDIA_ROOT, f)
40 css += open(css_file, 'r').read()
41 context_dict['css'] = css
42
43 template = get_template(template_src)
44 context = Context(context_dict)
45 html = template.render(context)
46 result = StringIO.StringIO()
47 pdf = pisa.pisaDocument(html, result, encoding='UTF-8')
48 if not pdf.err:
49 return HttpResponse(result.getvalue(), mimetype='application/pdf')
50 return HttpResponse("impossible de générer le pdf! %s" % html)
51
52
5633fa41 53@dae_groupe_requis
5d680e84
NC
54def index(request):
55 return render_to_response('dae/index.html', {}, RequestContext(request))
56
5633fa41
OL
57@dae_groupe_requis
58@poste_dans_ma_region_ou_service
c0413a6f
OL
59def poste_consulter(request, key):
60 source, id = key.split('-')
61 poste = get_object_or_404(dae.Poste, pk=id)
e6f52402
OL
62
63 if request.POST:
64 validationForm = PosteWorkflowForm(request.POST, instance=poste, request=request)
65 if validationForm.is_valid():
66 validationForm.save()
67 messages.add_message(request, messages.SUCCESS, "La validation a été enregistrée.")
68 return redirect('poste_consulter', key=key)
69 else:
70 validationForm = PosteWorkflowForm(instance=poste, request=request)
71
72 vars = {'poste' : poste, 'validationForm' : validationForm, }
868a9322
OL
73
74
75 mode = request.GET.get('mode', None)
76 if mode is None:
77 return render_to_response('dae/poste_consulter.html', vars, RequestContext(request))
78 if mode == 'pdf':
79 return reponse_pdf('dae/poste_pdf.html', vars)
80 if mode == 'vpdf':
81 return render_to_response('dae/poste_pdf.html', vars, RequestContext(request))
82
c0413a6f 83
5633fa41 84@dae_groupe_requis
1b217058 85@poste_dans_ma_region_ou_service
3ed49093 86def poste(request, key=None):
5d680e84
NC
87 """ Formulaire pour un poste.
88
89 Permet de créer ou modifier un poste. Si le poste n'existe que dans rh_v1
90 il est automatiquement copié dans dae.
91
92 """
93 poste, data, vars = None, dict(), dict()
94
3ed49093 95 if key:
5d680e84 96 # Poste existant
3ed49093 97 data['poste'] = key
139686f2 98 source, id = key.split('-')
5d680e84 99
139686f2 100 if source == 'dae':
5d680e84 101 poste = get_object_or_404(dae.Poste, pk=id)
139686f2
NC
102 elif source == 'rh':
103 p = get_object_or_404(rh.Poste, pk=id)
5d680e84
NC
104 # Initialisation avec les valeurs du poste de rh_v1
105 poste = dae.Poste(id_rh=p, nom=p.type_poste.nom)
106 for field in ('implantation', 'type_poste', 'actif'):
107 setattr(poste, field, getattr(p, field))
3ed49093
NC
108 else:
109 # Nouveau poste
110 vars['new'] = True
5d680e84
NC
111
112 if request.POST:
3ed49093 113 data.update(dict(request.POST.items()))
f258e4e7 114 form = PosteForm(data, instance=poste, request=request)
151e7bd0 115 financementForm = FinancementForm(request.POST, instance=poste)
36341125 116 piecesForm = PostePieceForm(request.POST, request.FILES, instance=poste)
05855464 117 if form.is_valid() and piecesForm.is_valid() and financementForm.is_valid():
5d680e84 118 poste = form.save()
eb8c3edb
OL
119 piecesForm.instance = poste
120 piecesForm.save()
151e7bd0
OL
121 financementForm.instance = poste
122 financementForm.save()
9cb4de55 123 messages.add_message(request, messages.SUCCESS, "Le poste %s a été sauvegardé." % poste)
5bc760f9
OL
124 if request.POST.has_key('save'):
125 return redirect('poste_consulter', key='dae-%s' % poste.id)
126 else:
127 return redirect('poste', key='dae-%s' % poste.id)
128
9cb4de55
OL
129 else:
130 messages.add_message(request, messages.ERROR, 'Il y a des erreurs dans le formulaire.')
131
5d680e84
NC
132 else:
133 # 'initial' évite la validation prémature lors d'une copie de poste de
134 # rh_v1 vers dae.
f258e4e7 135 form = PosteForm(initial=data, instance=poste, request=request)
36341125 136 piecesForm = PostePieceForm(instance=poste)
151e7bd0 137 financementForm = FinancementForm(instance=poste)
5d680e84 138
151e7bd0 139 vars.update(dict(form=form, poste=poste, poste_key=key, piecesForm=piecesForm, financementForm=financementForm))
5d680e84
NC
140
141 return render_to_response('dae/poste.html', vars, RequestContext(request))
3ed49093 142
5633fa41 143@dae_groupe_requis
498881f4 144def postes_liste(request):
0f23302a 145 """ Liste des postes. """
498881f4 146 vars = dict()
5633fa41 147 vars['postes'] = dae.Poste.objects.ma_region_ou_service(request.user).order_by('-date_creation')
5633fa41 148 return render_to_response('dae/postes_liste.html', vars, RequestContext(request))
98d51b59 149
cb1d62b5
NC
150def filtered_type_remun():
151 # Exclusion de "Indemnité de fonction" des types de rémun utilisés
152 return rh.TypeRemuneration.objects.exclude(pk=7)
153
5633fa41 154@dae_groupe_requis
62d3903d 155@dossier_dans_ma_region_ou_service
5d5a57a4
OL
156def embauche_consulter(request, dossier_id):
157 dossier = get_object_or_404(dae.Dossier, pk=dossier_id)
e6f52402
OL
158
159 if request.POST:
160 validationForm = DossierWorkflowForm(request.POST, instance=dossier, request=request)
161 if validationForm.is_valid():
162 validationForm.save()
163 messages.add_message(request, messages.SUCCESS, "La validation a été enregistrée.")
164 return redirect('embauche_consulter', dossier_id=dossier.id)
165 else:
166 validationForm = DossierWorkflowForm(instance=dossier, request=request)
167
5d5a57a4
OL
168 vars = {
169 'dossier' : dossier,
e6f52402 170 'validationForm' : validationForm,
5d5a57a4 171 }
3a33b1ce
OL
172
173 mode = request.GET.get('mode', None)
174 if mode is None:
175 return render_to_response('dae/embauche_consulter.html', vars, RequestContext(request))
176 if mode == 'pdf':
177 return reponse_pdf('dae/embauche_pdf.html', vars)
178 if mode == 'vpdf':
179 return render_to_response('dae/embauche_pdf.html', vars, RequestContext(request))
5d5a57a4 180
5633fa41 181@dae_groupe_requis
62d3903d
OL
182@dossier_dans_ma_region_ou_service
183def embauche(request, key=None, dossier_id=None):
139686f2
NC
184 """ Formulaire d'autorisation d'embauche. """
185 if not key:
4ee6d70a 186 vars = dict(step='poste', form=ChoosePosteForm(request=request))
139686f2 187 else:
cb1d62b5
NC
188 type_remun = filtered_type_remun()
189 vars = dict(type_remun=type_remun)
139686f2
NC
190 source, id = key.split('-')
191 if source != 'dae':
192 return Http404
193 poste = get_object_or_404(dae.Poste, pk=id)
62d3903d 194 if not dossier_id:
cb1d62b5 195 vars['new'] = True
139686f2
NC
196
197 if request.POST:
768d7e1b
NC
198 if request.POST['employe'] == '':
199 # Nouvel employé
200 employe = dae.Employe()
139686f2 201 else:
768d7e1b
NC
202 employe_source, id = request.POST['employe'].split('-')
203 if employe_source == 'dae':
204 # Employé DAE
205 employe = get_object_or_404(dae.Employe, pk=id)
206 elif employe_source == 'rh':
207 # Employé RH, on le copie dans DAE
208 e = get_object_or_404(rh.Employe, pk=id)
209 employe = dae.Employe(id_rh=e, prenom=e.prenom, nom=e.nom,
210 genre=e.genre)
211 else:
212 raise Http404
213
f258e4e7 214 employe_form = EmployeForm(request.POST, instance=employe, request=request)
768d7e1b 215
5bc760f9 216 if request.POST:
768d7e1b
NC
217 if employe_form.is_valid():
218 data = dict(request.POST.items())
3feae3c6
OL
219 #with warnings.catch_warnings():
220 # warnings.simplefilter('ignore')
221 employe = employe_form.save()
768d7e1b 222 data['employe'] = 'dae-%s' % employe.id
ac6235f6 223 employe_form = EmployeForm(data, instance=employe, request=request)
cb1d62b5 224
62d3903d 225 if not dossier_id:
ed1982f3
NC
226 dossier = dae.Dossier(poste=poste, employe=employe)
227 else:
62d3903d 228 dossier = get_object_or_404(dae.Dossier, pk=dossier_id)
ed1982f3 229 dossier_form = DossierForm(request.POST, instance=dossier)
d766bf2c 230 piecesForm = DossierPieceForm(request.POST, request.FILES, instance=dossier)
72db8238
OL
231 justificationsNouveauForm = JustificationNouvelEmployeForm(request.POST, instance=dossier)
232 justificationsAutreForm = JustificationAutreEmployeForm(request.POST, instance=dossier)
03b395db 233 dossiersComparaisonsForm = DossierComparaisonForm(request.POST, instance=dossier)
d766bf2c 234
58ad4beb 235 if dossier_form.is_valid() and piecesForm.is_valid() and justificationsNouveauForm.is_valid() and justificationsAutreForm.is_valid() and dossiersComparaisonsForm.is_valid():
768d7e1b 236 dossier = dossier_form.save()
eb8c3edb
OL
237 piecesForm.instance = dossier
238 piecesForm.save()
72db8238
OL
239 justificationsNouveauForm.instance = dossier
240 justificationsNouveauForm.save()
241 justificationsAutreForm.instance = dossier
242 justificationsAutreForm.save()
03b395db
OL
243 dossiersComparaisonsForm.instance = dossier
244 dossiersComparaisonsForm.save()
245
cb1d62b5
NC
246 if not dossier.remuneration_set.all():
247 # Pré-peuplement des entrées de la section "coût
248 # global", à l'exclusion de "Indemnité de fonction"
249 for type in type_remun.all():
250 dae.Remuneration(dossier=dossier, type=type,
251 devise=dossier.devise).save()
252
253 else:
254 # Sauvegarde du coût global
255 cg_lines = defaultdict(dict)
256 for k, v in request.POST.items():
257 if k.startswith('cg-'):
258 prefix, field_name, cg_id = k.split('-')
259 cg_lines[int(cg_id)][unicode(field_name)] = v
260
261 for r in dossier.remuneration_set.all():
262 print 'trying %r' % r
263 if r.id in cg_lines:
264 if cg_lines[r.id]['montant'] == '':
265 r.delete()
266 else:
267 for k, v in cg_lines[r.id].items():
268 setattr(r, k, v)
269 r.save()
5bc760f9 270
9cb4de55 271 messages.add_message(request, messages.SUCCESS, "Le dossier %s a été sauvegardé." % dossier)
5bc760f9
OL
272 if request.POST.has_key('save'):
273 return redirect('embauche_consulter', dossier_id=dossier.id)
274 else:
275 return redirect('embauche', key=dossier.poste.key, dossier_id=dossier.id)
276
9cb4de55
OL
277 else:
278 messages.add_message(request, messages.ERROR, 'Il y a des erreurs dans le formulaire.')
279
768d7e1b
NC
280 else:
281 dossier_form = DossierForm(instance=dossier)
d766bf2c 282 piecesForm = DossierPieceForm(instance=dossier)
72db8238
OL
283 justificationsNouveauForm = JustificationNouvelEmployeForm(instance=dossier)
284 justificationsAutreForm = JustificationAutreEmployeForm(instance=dossier)
03b395db 285 dossiersComparaisonsForm = DossierComparaisonForm(instance=dossier)
ed1982f3 286 else:
768d7e1b 287 # Initialisation d'un formulaire vide
ed1982f3
NC
288 dossier_rh = rh.Dossier()
289 poste_rh = poste.id_rh
62d3903d
OL
290 if dossier_id:
291 dossier = get_object_or_404(dae.Dossier, pk=dossier_id)
768d7e1b
NC
292 employe = dossier.employe
293 data = dict(employe='dae-%s' % employe.id)
03b395db 294 employe_form = EmployeForm(initial=data, instance=employe, request=request)
768d7e1b
NC
295 else:
296 dossier = pre_filled_dossier(dossier_rh, 'new', poste_rh)
f258e4e7 297 employe_form = EmployeForm(request=request)
d766bf2c 298
ed1982f3 299 dossier_form = DossierForm(instance=dossier)
d766bf2c 300 piecesForm = DossierPieceForm(instance=dossier)
72db8238
OL
301 justificationsNouveauForm = JustificationNouvelEmployeForm(instance=dossier)
302 justificationsAutreForm = JustificationAutreEmployeForm(instance=dossier)
03b395db 303 dossiersComparaisonsForm = DossierComparaisonForm(instance=dossier)
72db8238
OL
304
305 vars = dict(step='employe',
057763bc 306 type_remun=type_remun,
72db8238
OL
307 poste=poste,
308 dossier=dossier,
309 piecesForm=piecesForm,
310 justificationsNouveauForm=justificationsNouveauForm,
311 justificationsAutreForm=justificationsAutreForm,
03b395db 312 dossiersComparaisonsForm=dossiersComparaisonsForm,
72db8238
OL
313 forms=dict(employe=employe_form, dossier=dossier_form, )
314 )
7e43f9b6 315
139686f2 316
139686f2
NC
317 return render_to_response('dae/embauche.html', vars,
318 RequestContext(request))
5633fa41 319@dae_groupe_requis
62d3903d 320@dossier_dans_ma_region_ou_service
0140cbd2 321def embauches_liste(request):
322 """ Liste des embauches. """
323 vars = dict()
e4f56614 324 vars['embauches'] = dae.Dossier.objects.ma_region_ou_service(request.user).order_by('-date_creation')
5d5a57a4 325 return render_to_response('dae/embauches_liste.html', vars, RequestContext(request))
355c80c8 326
139686f2
NC
327def employe(request, key):
328 """ Récupération AJAX de l'employé pour la page d'embauche. """
329 data = dict(employe=key)
330
331 if key == '':
332 # Nouvel employé
333 employe = dae.Employe()
334 else:
335 # Employé existant
336 source, id = key.split('-')
337
338 if source == 'dae':
339 employe = get_object_or_404(dae.Employe, pk=id)
340 elif source == 'rh':
341 e = get_object_or_404(rh.Employe, id=id)
342 # Initialisation avec les valeurs de l'employé de rh_v1
343 employe = dae.Employe(id_rh=e)
344 for field in ('prenom', 'nom', 'genre'):
345 setattr(employe, field, getattr(e, field))
346
f258e4e7 347 return HttpResponse(EmployeForm(initial=data, instance=employe, request=request).as_table())
139686f2 348
04380fba
OL
349################################################################################
350# AJAX SECURISE
351################################################################################
352@dae_groupe_requis
353@employe_dans_ma_region_ou_service
139686f2
NC
354def dossier(request, poste_key, employe_key):
355 """ Récupération AJAX du dossier pour la page d'embauche. """
356 data = dict()
357
358 poste_source, poste_id = poste_key.split('-')
359 poste = get_object_or_404(dae.Poste, pk=poste_id)
179f6b49
OL
360
361 # Récupérer la devise de l'implantation lié au poste
362 implantation_devise = poste.get_default_devise()
363 data.update({'devise' : implantation_devise.id})
364
e27db04c
OL
365 if poste.id_rh_id is not None:
366 poste_rh = get_object_or_404(rh.Poste, pk=poste.id_rh_id)
367 else:
368 poste_rh = None
139686f2 369
eabaed81
OL
370 ##########################################################################################
371 # NOUVEL EMPLOYE
372 ##########################################################################################
139686f2
NC
373 if employe_key == '':
374 employe_source = 'new'
eabaed81 375 employe = None
139686f2 376 dossier_rh = rh.Dossier()
ed1982f3 377 dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
139686f2 378
eabaed81
OL
379 ##########################################################################################
380 # EMPLOYE DAE
381 ##########################################################################################
382 if employe_key.startswith('dae'):
383 employe_source, employe_id = employe_key.split('-')
384 employe_dae = get_object_or_404(dae.Employe, pk=employe_id)
385
386 # récupération de l'ancien dossier rh v1 pour l'employe DAE
387 try:
388 dossier_rh = rh.Dossier.objects.get(employe=employe_dae.id_rh_id, mandat_date_fin=None)
389 except (rh.Dossier.DoesNotExist):
390 dossier_rh = rh.Dossier()
391
392 # on tente de récupérer le dossier DAE, au pire on le contruit en le
393 # prépoluant avec son dossier rh v1.
394 try:
395 dossier = dae.Dossier.objects.get(employe=employe_dae, poste=poste)
396 except (dae.Dossier.DoesNotExist):
397 dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
398 employe = employe_dae.id_rh
399 ##########################################################################################
400 # EMPLOYE RH v1
401 ##########################################################################################
402 if employe_key.startswith('rh'):
403 employe_source, employe_id = employe_key.split('-')
404 employe_rh = get_object_or_404(rh.Employe, pk=employe_id)
405
406 # récupération de l'ancien dossier rh v1 pour l'employe rh v1, s'il n'en a pas,
407 # on en fournit un nouveau qui servira uniquement un créer un nouveau dossier DAE.
408 try:
409 dossier_rh = rh.Dossier.objects.get(employe=employe_rh, mandat_date_fin=None)
410 except (rh.Dossier.DoesNotExist):
411 dossier_rh = rh.Dossier()
412 dossier = pre_filled_dossier(dossier_rh, employe_source, poste_rh)
413 employe = employe_rh
da3ca955 414
eabaed81
OL
415 dossier_form = DossierForm(initial=data, instance=dossier)
416 vars = dict(form=dossier_form, poste=poste, employe=employe)
da3ca955 417 return render_to_response('dae/embauche-dossier.html', vars,
418 RequestContext(request))
139686f2 419
04380fba 420# @Cette fonction est appelée à partir de fonctions déjà sécurisée
ed1982f3
NC
421def pre_filled_dossier(dossier_rh, employe_source, poste_rh):
422 dossier = dae.Dossier()
423
424 if employe_source != 'new' and dossier_rh.id:
425 dossier.statut_anterieur = dossier_rh.statut
426
427 # Certains dossiers ont un classement à zéro
428 if dossier_rh.classement_id > 0:
429 dossier.classement_anterieur = dossier_rh.classement
430
431 # Récupération du salaire de base
432 remun = dossier_rh.remuneration_set.filter(type=1)
433 if remun:
434 dossier.salaire_anterieur = remun[0].montant
435
436 # Récupération du titulaire précédent
437 try:
438 dossiers = rh.Dossier.objects.order_by('-mandat_date_fin')
e27db04c 439 dossiers = dossiers.filter(poste1=poste_rh) | dossiers.filter(poste2=poste_rh)
ed1982f3
NC
440 if len(dossiers):
441 # Ce bloc ignore toutes les erreurs, car les données de rh
442 # manquantes peuvent en générer
443 d = dossiers[0]
444 try:
445 titulaire = d.employe
446 dossier.employe_anterieur = titulaire
447 dossier.classement_titulaire_anterieur = d.classement
448 dossier.statut_titulaire_anterieur = d.statut
449 dossier.salaire_titulaire_anterieur = \
450 d.remuneration_set.all()[0].montant
451 except:
452 pass
453 # TODO: afficher l'info, les champs ne sont pas dans le
454 # modèle dae.Dossier: nom, prenom, classement, salaire
455 pass
456
457 except (rh.Dossier.DoesNotExist):
458 dossier_rh = rh.Dossier()
459
460 return dossier
461
04380fba
OL
462@dae_groupe_requis
463@dossier_dans_ma_region_ou_service
464def dossier_resume(request, dossier_id=None):
3d627bfd 465 """ Appel AJAX :
04380fba
OL
466 input : valeur_point
467 output : devise, devise_code, taux_euro
3d627bfd 468 """
04380fba
OL
469 try:
470 dossier = rh.Dossier.objects.get(id=dossier_id)
471 except:
472 return HttpResponseGone("Ce dossier n'est pas accessible")
f87fe1a1 473
04380fba
OL
474 data = {}
475 data['personne'] = unicode(dossier.employe)
476 data['implantation'] = dossier.implantation1.id
477 data['poste'] = u"%s %s" % (dossier.poste1.type_poste.nom, dossier.complement1)
478 data['montant'] = dossier.get_salaire()
479 salaire = dossier.get_dernier_salaire_remun()
480 if salaire is not None:
481 data['devise'] = dossier.get_dernier_salaire_remun().devise.id
482 data['montant_euros'] = dossier.get_dernier_salaire_remun().en_euros()
f87fe1a1 483 else:
04380fba
OL
484 data['devise'] = None
485 data['montant_euros'] = 0
85668061 486 return HttpResponse(dumps(data))
f87fe1a1 487
6d047148
OL
488def liste_postes(request):
489 """ Appel AJAX :
490 input : implantation_id
491 output : JSON liste de valeur point
492 """
493 method = request.method
494 params = getattr(request, method, [])
495 data = []
496
497 # Voir le code de _poste_choices dans forms.py
498 dae_ = dae.Poste.objects.filter(actif=True, id_rh__isnull=True)
499 copies = dae.Poste.objects.exclude(id_rh__isnull=True)
500 rh_postes_actifs = rh.Poste.objects.filter(actif=True)
501
502 if 'implantation_id' in params and params.get('implantation_id') is not u"":
503 implantation_id = params.get('implantation_id')
504 dae_ = dae_.filter(implantation__id=implantation_id)
505 copies = copies.filter(implantation__id=implantation_id)
506 rh_postes_actifs = rh_postes_actifs.filter(implantation__id=implantation_id)
507
508 id_copies = [p.id_rh_id for p in copies.all()]
509 rhv1 = rh_postes_actifs.exclude(id__in=id_copies)
510 rhv1 = rhv1.select_related(depth=1)
4bce4d24
OL
511
512 data = [('', 'Nouveau poste')] + sorted([('dae-%s' % p.id, label_poste_display(p)) for p in dae_ | copies] + [('rh-%s' % p.id, label_poste_display(p)) for p in rhv1], key=lambda t: t[1])
6d047148
OL
513 return HttpResponse(dumps(data))
514
04380fba
OL
515
516################################################################################
517# AJAX SECURITE non nécessaire
518################################################################################
519def coefficient(request):
520 """ Appel AJAX :
521 input : classement
522 output : coefficient
523 """
524 method = request.method
525 params = getattr(request, method, [])
526 data = dict()
527 if 'classement' in params and params.get('classement') is not u"":
528 classement = params.get('classement')
529 classement = rh.Classement.objects.get(pk=classement)
530 data['coefficient'] = classement.coefficient
531 else:
532 data['coefficient'] = 0
533 return HttpResponse(dumps(data))
534
535
3d627bfd 536def devise(request):
537 """ Appel AJAX :
538 input : valeur_point
8e30e17f 539 output : devise, devise_code, taux_euro
3d627bfd 540 """
f87fe1a1
OL
541 method = request.method
542 params = getattr(request, method, [])
3d627bfd 543 data = dict()
f87fe1a1
OL
544 if 'valeur_point' in params and params.get('valeur_point') is not u"":
545 valeur_point = params.get('valeur_point')
3d627bfd 546 valeur_point = rh.ValeurPoint.objects.get(pk=valeur_point)
547 annee = valeur_point.annee
548 implantation = valeur_point.implantation
549 taux = rh.TauxChange.objects.get(annee=annee,
550 implantation=implantation)
551 data['devise'] = taux.devise.id
f87fe1a1 552 data['valeur'] = valeur_point.valeur
3d627bfd 553 data['devise_code'] = taux.devise.code
8e30e17f 554 data['taux_euro'] = taux.taux
be3c51e9
OL
555 else:
556 return HttpResponseGone("Vous devez choisir une valeur de point")
3d627bfd 557 return HttpResponse(dumps(data))
558
559def devise_code(request):
560 """ Appel AJAX :
561 input : devise
8e30e17f 562 output : devise_code, taux_euro
3d627bfd 563 """
f87fe1a1
OL
564 method = request.method
565 params = getattr(request, method, [])
3d627bfd 566 data = dict()
f87fe1a1
OL
567 if 'devise' in params:
568 devise = params.get('devise')
3d627bfd 569 devise = rh.Devise.objects.get(pk=devise)
8e30e17f 570 annee = date.today().year
571 taux = rh.TauxChange.objects.filter(annee=annee, devise=devise)
86f1e48d
OL
572 if len(taux) == 0:
573 return HttpResponseGone("Le taux n'est pas disponible")
3d627bfd 574 data['devise_code'] = devise.code
8e30e17f 575 data['taux_euro'] = taux[0].taux
3d627bfd 576 return HttpResponse(dumps(data))
85668061 577
cb1d62b5
NC
578def add_remun(request, dossier, type_remun):
579 dossier = get_object_or_404(dae.Dossier, pk=dossier)
580 type_remun = get_object_or_404(rh.TypeRemuneration, pk=type_remun)
581 dae.Remuneration(dossier=dossier, devise=dossier.devise,
582 type=type_remun).save()
583
584 return render_to_response('dae/embauche-remun.html', dict(dossier=dossier),
585 RequestContext(request))
03b395db 586
04380fba
OL
587def salaire(request, implantation, devise, classement):
588 if not devise or not classement:
589 raise Http404
590
591 taux_impl = rh.TauxChange.objects.filter(implantation=implantation) \
592 .order_by('-annee')
593 taux = rh.TauxChange.objects.filter(devise=devise).order_by('-annee')
594 vp = rh.ValeurPoint.objects.filter(implantation=implantation) \
595 .order_by('-annee')
596 if vp.count() * taux.count() * taux_impl.count() == 0:
597 raise Http404
598
599 classement = get_object_or_404(rh.Classement, pk=classement)
600 taux, taux_impl, vp = taux[0].taux, taux_impl[0].taux, vp[0].valeur
601
602 salaire_euro = round(vp * classement.coefficient * taux_impl, 2)
603 data = dict(salaire_euro=salaire_euro, taux=taux,
604 salaire_devise=round(salaire_euro / taux, 2))
605
606 return HttpResponse(dumps(data))
607
608def liste_valeurs_point(request):
03b395db 609 """ Appel AJAX :
04380fba
OL
610 input : implantation_id
611 output : JSON liste de valeur point
03b395db 612 """
04380fba
OL
613 method = request.method
614 params = getattr(request, method, [])
615 data = []
616 annee_courante = datetime.datetime.now().year
617 if 'implantation_id' in params and params.get('implantation_id') is not u"":
618 implantation_id = params.get('implantation_id')
619 objects = rh.ValeurPoint.objects.filter(implantation=implantation_id, annee__in=(annee_courante-1, annee_courante)).order_by("-annee")
b1f7765e 620 else:
04380fba
OL
621 objects = rh.ValeurPoint.objects.filter(annee__in=(annee_courante-1, annee_courante)).order_by("-annee")
622 for o in objects:
623 data.append({'id' : o.id, 'label' : o.__unicode__(), })
03b395db 624 return HttpResponse(dumps(data))
04380fba 625