1 # -*- encoding: utf-8 -*-
6 from collections
import defaultdict
7 from datetime
import date
8 from simplejson
import dumps
11 from django
.core
.urlresolvers
import reverse
12 from django
.http
import Http404
, HttpResponse
, HttpResponseGone
13 from django
.shortcuts
import redirect
, render_to_response
, get_object_or_404
14 from django
.template
import Context
, RequestContext
15 from django
.template
.loader
import get_template
16 from django
.contrib
import messages
17 from django
.conf
import settings
19 from reversion
.models
import Version
21 from project
.dae
import models
as dae
22 from project
.rh_v1
import models
as rh
24 from decorators
import dae_groupe_requis
, \
25 poste_dans_ma_region_ou_service
, \
26 dossier_dans_ma_region_ou_service
, \
27 vieux_dossier_dans_ma_region_ou_service
, \
28 employe_dans_ma_region_ou_service
, \
29 dossier_est_modifiable
, \
35 for d
in rh
.Devise
.objects
.all():
36 annee
= date
.today().year
37 taux
= rh
.TauxChange
.objects
.filter(annee
=annee
, devise
=d
)
42 data
['taux_euro'] = taux
[0].taux
43 data
['devise_code'] = d
.code
47 def reponse_pdf(template_src
, context_dict
):
49 Générer une réponse HTTP avec un PDF
51 import ho
.pisa
as pisa
54 for f
in ('css/pdf.css', 'css/dae.css'):
55 css_file
= os
.path
.join(settings
.MEDIA_ROOT
, f
)
56 css
+= open(css_file
, 'r').read()
57 context_dict
['css'] = css
59 template
= get_template(template_src
)
60 context
= Context(context_dict
)
61 html
= template
.render(context
)
62 result
= StringIO
.StringIO()
63 pdf
= pisa
.pisaDocument(html
, result
, encoding
='UTF-8')
65 return HttpResponse(result
.getvalue(), mimetype
='application/pdf')
66 return HttpResponse("impossible de générer le pdf! %s" % html
)
71 return render_to_response('dae/index.html', {}, RequestContext(request
))
74 @poste_dans_ma_region_ou_service
75 def poste_consulter(request
, key
):
76 source
, id = key
.split('-')
77 poste
= get_object_or_404(dae
.Poste
, pk
=id)
80 validationForm
= PosteWorkflowForm(request
.POST
, instance
=poste
, request
=request
)
81 if validationForm
.is_valid():
83 messages
.add_message(request
, messages
.SUCCESS
, "La validation a été enregistrée.")
84 return redirect('dae_postes_liste')
86 validationForm
= PosteWorkflowForm(instance
=poste
, request
=request
)
88 vars = {'poste' : poste
, 'validationForm' : validationForm
, }
91 mode
= request
.GET
.get('mode', None)
93 return render_to_response('dae/poste_consulter.html', vars, RequestContext(request
))
95 return reponse_pdf('dae/poste_pdf.html', vars)
97 return render_to_response('dae/poste_pdf.html', vars, RequestContext(request
))
101 @poste_dans_ma_region_ou_service
102 @poste_est_modifiable
103 def poste(request
, key
=None):
104 """ Formulaire pour un poste.
106 Permet de créer ou modifier un poste. Si le poste n'existe que dans rh_v1
107 il est automatiquement copié dans dae.
110 poste
, data
, vars = None, dict(), dict()
115 source
, id = key
.split('-')
118 poste
= get_object_or_404(dae
.Poste
, pk
=id)
120 p
= get_object_or_404(rh
.Poste
, pk
=id)
121 # Initialisation avec les valeurs du poste de rh_v1
122 poste
= dae
.Poste(id_rh
=p
, nom
=p
.type_poste
.nom
)
123 for field
in ('implantation', 'type_poste', 'actif'):
124 setattr(poste
, field
, getattr(p
, field
))
130 data
.update(dict(request
.POST
.items()))
131 form
= PosteForm(data
, instance
=poste
, request
=request
)
132 financementForm
= FinancementForm(request
.POST
, instance
=poste
)
133 piecesForm
= PostePieceForm(request
.POST
, request
.FILES
, instance
=poste
)
134 postesComparaisonsForm
= PosteComparaisonForm(request
.POST
, instance
=poste
)
135 if form
.is_valid() and piecesForm
.is_valid() and financementForm
.is_valid():
137 piecesForm
.instance
= poste
139 financementForm
.instance
= poste
140 financementForm
.save()
141 postesComparaisonsForm
.instance
= poste
142 postesComparaisonsForm
.save()
143 messages
.add_message(request
, messages
.SUCCESS
, "Le poste %s a été sauvegardé." % poste
)
144 if request
.POST
.has_key('save'):
145 return redirect('poste_consulter', key
='dae-%s' % poste
.id)
147 return redirect('poste', key
='dae-%s' % poste
.id)
150 messages
.add_message(request
, messages
.ERROR
, 'Il y a des erreurs dans le formulaire.')
153 # 'initial' évite la validation prémature lors d'une copie de poste de
155 form
= PosteForm(initial
=data
, instance
=poste
, request
=request
)
156 piecesForm
= PostePieceForm(instance
=poste
)
157 financementForm
= FinancementForm(instance
=poste
)
158 postesComparaisonsForm
= PosteComparaisonForm(instance
=poste
)
160 vars.update(dict(form
=form
, poste
=poste
, poste_key
=key
, piecesForm
=piecesForm
, financementForm
=financementForm
, postesComparaisonsForm
=postesComparaisonsForm
))
162 return render_to_response('dae/poste.html', vars, RequestContext(request
))
165 def postes_liste(request
):
166 """ Liste des postes. """
168 vars['postes_a_traiter'] = dae
.Poste
.objects
.mes_choses_a_faire(request
.user
).filter(pourvu
=False).order_by('-date_creation')
169 vars['postes_vacants'] = dae
.Poste
.objects
.ma_region_ou_service(request
.user
).filter(pourvu
=False).order_by('-date_creation')
170 vars['postes_pourvus'] = dae
.Poste
.objects
.ma_region_ou_service(request
.user
).filter(pourvu
=True).order_by('-date_creation')
171 return render_to_response('dae/postes_liste.html', vars, RequestContext(request
))
173 def filtered_type_remun():
174 defaut
= (2, 3, 8, 17) # salaire de base, indemnité de fonction, charges patronales
175 return rh
.TypeRemuneration
.objects
.filter(pk__in
=defaut
)
178 @dossier_dans_ma_region_ou_service
179 def embauche_consulter(request
, dossier_id
):
180 dossier
= get_object_or_404(dae
.Dossier
, pk
=dossier_id
)
183 validationForm
= DossierWorkflowForm(request
.POST
, instance
=dossier
, request
=request
)
184 if validationForm
.is_valid():
185 validationForm
.save()
186 messages
.add_message(request
, messages
.SUCCESS
, "La validation a été enregistrée.")
187 return redirect('dae_embauches_liste')
189 validationForm
= DossierWorkflowForm(instance
=dossier
, request
=request
)
193 'validationForm' : validationForm
,
196 mode
= request
.GET
.get('mode', None)
198 return render_to_response('dae/embauche_consulter.html', vars, RequestContext(request
))
200 return reponse_pdf('dae/embauche_pdf.html', vars)
202 return render_to_response('dae/embauche_pdf.html', vars, RequestContext(request
))
205 @dossier_dans_ma_region_ou_service
206 @dossier_est_modifiable
207 def embauche(request
, key
=None, dossier_id
=None):
208 """ Formulaire d'autorisation d'embauche. """
210 vars = dict(step
='poste', form
=ChoosePosteForm(request
=request
))
212 type_remun
= filtered_type_remun()
213 vars = dict(type_remun
=type_remun
)
214 source
, id = key
.split('-')
217 poste
= get_object_or_404(dae
.Poste
, pk
=id)
222 if request
.POST
['employe'] == '':
224 employe
= dae
.Employe()
226 employe_source
, id = request
.POST
['employe'].split('-')
227 if employe_source
== 'dae':
229 employe
= get_object_or_404(dae
.Employe
, pk
=id)
230 elif employe_source
== 'rh':
231 # Employé RH, on le copie dans DAE
232 e
= get_object_or_404(rh
.Employe
, pk
=id)
233 employe
= dae
.Employe(id_rh
=e
, prenom
=e
.prenom
, nom
=e
.nom
,
238 employe_form
= EmployeForm(request
.POST
, instance
=employe
, request
=request
)
241 if employe_form
.is_valid():
242 data
= dict(request
.POST
.items())
243 #with warnings.catch_warnings():
244 # warnings.simplefilter('ignore')
245 employe
= employe_form
.save()
246 data
['employe'] = 'dae-%s' % employe
.id
247 employe_form
= EmployeForm(data
, instance
=employe
, request
=request
)
250 dossier
= dae
.Dossier(poste
=poste
, employe
=employe
)
252 dossier
= get_object_or_404(dae
.Dossier
, pk
=dossier_id
)
253 dossier_form
= DossierForm(request
.POST
, instance
=dossier
)
254 piecesForm
= DossierPieceForm(request
.POST
, request
.FILES
, instance
=dossier
)
255 dossiersComparaisonsForm
= DossierComparaisonForm(request
.POST
, instance
=dossier
)
256 remunForm
= RemunForm(request
.POST
, instance
=dossier
)
257 if dossier_form
.is_valid() and \
258 piecesForm
.is_valid() and \
259 dossiersComparaisonsForm
.is_valid() and \
260 remunForm
.is_valid():
262 dossier
= dossier_form
.save()
263 piecesForm
.instance
= dossier
265 dossiersComparaisonsForm
.instance
= dossier
266 dossiersComparaisonsForm
.save()
267 remunForm
.instance
= dossier
270 #if not dossier.remuneration_set.all():
271 # # Pré-peuplement des entrées de la section "coût
272 # # global", à l'exclusion de "Indemnité de fonction"
273 # for type in type_remun.all():
274 # dae.Remuneration(dossier=dossier, type=type,
275 # devise=dossier.devise).save()
278 # # Sauvegarde du coût global
279 # cg_lines = defaultdict(dict)
280 # for k, v in request.POST.items():
281 # if k.startswith('cg-'):
282 # prefix, field_name, cg_id = k.split('-')
283 # cg_lines[int(cg_id)][unicode(field_name)] = v
285 # for r in dossier.remuneration_set.all():
286 # print 'trying %r' % r
287 # if r.id in cg_lines:
288 # if cg_lines[r.id]['montant'] == '':
291 # for k, v in cg_lines[r.id].items():
295 messages
.add_message(request
, messages
.SUCCESS
, "Le dossier %s a été sauvegardé." % dossier
)
296 if request
.POST
.has_key('save'):
297 return redirect('embauche_consulter', dossier_id
=dossier
.id)
299 return redirect('embauche', key
=dossier
.poste
.key
, dossier_id
=dossier
.id)
302 messages
.add_message(request
, messages
.ERROR
, 'Il y a des erreurs dans le formulaire.')
305 dossier_form
= DossierForm(instance
=dossier
)
306 piecesForm
= DossierPieceForm(instance
=dossier
)
307 dossiersComparaisonsForm
= DossierComparaisonForm(instance
=dossier
)
308 remunForm
= RemunForm(instance
=dossier
)
310 # Initialisation d'un formulaire vide
311 dossier_rh
= rh
.Dossier()
312 poste_rh
= poste
.id_rh
314 dossier
= get_object_or_404(dae
.Dossier
, pk
=dossier_id
)
315 employe
= dossier
.employe
316 data
= dict(employe
='dae-%s' % employe
.id)
317 employe_form
= EmployeForm(initial
=data
, instance
=employe
, request
=request
)
319 dossier
= pre_filled_dossier(dossier_rh
, 'new', poste_rh
)
320 employe_form
= EmployeForm(request
=request
)
322 dossier_form
= DossierForm(instance
=dossier
)
323 piecesForm
= DossierPieceForm(instance
=dossier
)
324 dossiersComparaisonsForm
= DossierComparaisonForm(instance
=dossier
)
325 remunForm
= RemunForm(instance
=dossier
)
327 vars = dict(step
='employe',
328 type_remun
=type_remun
,
332 piecesForm
=piecesForm
,
334 dossiersComparaisonsForm
=dossiersComparaisonsForm
,
335 forms
=dict(employe
=employe_form
, dossier
=dossier_form
, )
339 return render_to_response('dae/embauche.html', vars,
340 RequestContext(request
))
342 @dossier_dans_ma_region_ou_service
343 def embauches_liste(request
):
344 """ Liste des embauches. """
346 vars['embauches_a_traiter'] = dae
.Dossier
.objects
.mes_choses_a_faire(request
.user
).filter(poste__pourvu
=False).order_by('-date_creation')
347 vars['embauches_en_cours'] = dae
.Dossier
.objects
.ma_region_ou_service(request
.user
).filter(poste__pourvu
=False).order_by('-date_creation')
348 vars['embauches_non_retenues'] = dae
.Dossier
.objects
.ma_region_ou_service(request
.user
).filter(poste__pourvu
=True).order_by('-date_creation')
349 return render_to_response('dae/embauches_liste.html', vars, RequestContext(request
))
351 def employe(request
, key
):
352 """ Récupération AJAX de l'employé pour la page d'embauche. """
353 data
= dict(employe
=key
)
357 employe
= dae
.Employe()
360 source
, id = key
.split('-')
363 employe
= get_object_or_404(dae
.Employe
, pk
=id)
365 e
= get_object_or_404(rh
.Employe
, id=id)
366 # Initialisation avec les valeurs de l'employé de rh_v1
367 employe
= dae
.Employe(id_rh
=e
)
368 for field
in ('prenom', 'nom', 'genre'):
369 setattr(employe
, field
, getattr(e
, field
))
371 return HttpResponse(EmployeForm(initial
=data
, instance
=employe
, request
=request
).as_table())
373 ################################################################################
375 ################################################################################
377 @employe_dans_ma_region_ou_service
378 def dossier(request
, poste_key
, employe_key
):
379 """ Récupération AJAX du dossier pour la page d'embauche. """
382 poste_source
, poste_id
= poste_key
.split('-')
383 poste
= get_object_or_404(dae
.Poste
, pk
=poste_id
)
385 # Récupérer la devise de l'implantation lié au poste
386 implantation_devise
= poste
.get_default_devise()
387 data
.update({'devise' : implantation_devise
.id})
389 if poste
.id_rh_id
is not None:
390 poste_rh
= get_object_or_404(rh
.Poste
, pk
=poste
.id_rh_id
)
394 ##########################################################################################
396 ##########################################################################################
397 if employe_key
== '':
398 employe_source
= 'new'
400 dossier_rh
= rh
.Dossier()
401 dossier
= pre_filled_dossier(dossier_rh
, employe_source
, poste_rh
)
403 ##########################################################################################
405 ##########################################################################################
406 if employe_key
.startswith('dae'):
407 employe_source
, employe_id
= employe_key
.split('-')
408 employe_dae
= get_object_or_404(dae
.Employe
, pk
=employe_id
)
410 # récupération de l'ancien dossier rh v1 pour l'employe DAE
412 dossier_rh
= rh
.Dossier
.objects
.get(employe
=employe_dae
.id_rh_id
, mandat_date_fin
=None)
413 except (rh
.Dossier
.DoesNotExist
):
414 dossier_rh
= rh
.Dossier()
416 # on tente de récupérer le dossier DAE, au pire on le contruit en le
417 # prépoluant avec son dossier rh v1.
419 dossier
= dae
.Dossier
.objects
.get(employe
=employe_dae
, poste
=poste
)
420 except (dae
.Dossier
.DoesNotExist
):
421 dossier
= pre_filled_dossier(dossier_rh
, employe_source
, poste_rh
)
422 employe
= employe_dae
.id_rh
423 ##########################################################################################
425 ##########################################################################################
426 if employe_key
.startswith('rh'):
427 employe_source
, employe_id
= employe_key
.split('-')
428 employe_rh
= get_object_or_404(rh
.Employe
, pk
=employe_id
)
430 # récupération de l'ancien dossier rh v1 pour l'employe rh v1, s'il n'en a pas,
431 # on en fournit un nouveau qui servira uniquement un créer un nouveau dossier DAE.
433 dossier_rh
= rh
.Dossier
.objects
.get(employe
=employe_rh
, mandat_date_fin
=None)
434 except (rh
.Dossier
.DoesNotExist
):
435 dossier_rh
= rh
.Dossier()
436 dossier
= pre_filled_dossier(dossier_rh
, employe_source
, poste_rh
)
439 dossier_form
= DossierForm(initial
=data
, instance
=dossier
)
440 vars = dict(form
=dossier_form
, poste
=poste
, employe
=employe
)
441 return render_to_response('dae/embauche-dossier.html', vars,
442 RequestContext(request
))
444 # @Cette fonction est appelée à partir de fonctions déjà sécurisée
445 def pre_filled_dossier(dossier_rh
, employe_source
, poste_rh
):
446 dossier
= dae
.Dossier()
448 if employe_source
!= 'new' and dossier_rh
.id:
449 dossier
.statut_anterieur
= dossier_rh
.statut
451 # Certains dossiers ont un classement à zéro
452 if dossier_rh
.classement_id
> 0:
453 dossier
.classement_anterieur
= dossier_rh
.classement
455 # Récupération du salaire de base
456 remun
= dossier_rh
.remuneration_set
.filter(type=1).order_by('-date_effective')
458 dossier
.salaire_anterieur
= remun
[0].montant
460 # Récupération du titulaire précédent
462 dossiers
= rh
.Dossier
.objects
.order_by('-mandat_date_fin')
463 dossiers
= dossiers
.filter(poste1
=poste_rh
) | dossiers
.filter(poste2
=poste_rh
)
465 # Ce bloc ignore toutes les erreurs, car les données de rh
466 # manquantes peuvent en générer
469 titulaire
= d
.employe
470 dossier
.employe_anterieur
= titulaire
471 dossier
.classement_titulaire_anterieur
= d
.classement
472 dossier
.statut_titulaire_anterieur
= d
.statut
473 dossier
.salaire_titulaire_anterieur
= d
.remuneration_set
.filter(type=1).order_by('-date_effective')[0].montant
476 # TODO: afficher l'info, les champs ne sont pas dans le
477 # modèle dae.Dossier: nom, prenom, classement, salaire
480 except (rh
.Dossier
.DoesNotExist
):
481 dossier_rh
= rh
.Dossier()
486 @vieux_dossier_dans_ma_region_ou_service
487 def dossier_resume(request
, dossier_id
=None):
489 dossier
= rh
.Dossier
.objects
.get(id=dossier_id
)
491 return HttpResponseGone("Ce dossier n'est pas accessible")
494 data
['personne'] = unicode(dossier
.employe
)
495 data
['implantation'] = dossier
.implantation1
.id
496 data
['poste'] = u
"%s %s" % (dossier
.poste1
.type_poste
.nom
, dossier
.complement1
)
497 data
['montant'] = dossier
.get_salaire()
498 salaire
= dossier
.get_dernier_salaire_remun()
499 if salaire
is not None:
500 data
['devise'] = salaire
.devise
.id
501 data
['montant_euros'] = salaire
.en_euros()
503 data
['devise'] = None
504 data
['montant_euros'] = 0
505 return HttpResponse(dumps(data
))
508 @vieux_dossier_dans_ma_region_ou_service
509 def poste_resume(request
, dossier_id
=None):
511 On travaille, en réalité sur le dossier mais on cache
512 l'identité de la personne.
515 dossier
= rh
.Dossier
.objects
.get(id=dossier_id
)
517 return HttpResponseGone("Ce dossier n'est pas accessible")
520 data
['implantation'] = dossier
.implantation1
.id
521 data
['poste'] = u
"%s %s" % (dossier
.poste1
.type_poste
.nom
, dossier
.complement1
)
522 data
['montant'] = dossier
.get_salaire()
523 salaire
= dossier
.get_dernier_salaire_remun()
524 if salaire
is not None:
525 data
['devise'] = salaire
.devise
.id
526 data
['montant_euros'] = salaire
.en_euros()
528 data
['devise'] = None
529 data
['montant_euros'] = 0
530 return HttpResponse(dumps(data
))
532 def liste_postes(request
):
534 input : implantation_id
535 output : JSON liste de valeur point
537 method
= request
.method
538 params
= getattr(request
, method
, [])
541 # Voir le code de _poste_choices dans forms.py
542 dae_
= dae
.Poste
.objects
.filter(actif
=True, id_rh__isnull
=True)
543 copies
= dae
.Poste
.objects
.exclude(id_rh__isnull
=True)
544 rh_postes_actifs
= rh
.Poste
.objects
.filter(actif
=True)
546 if 'implantation_id' in params
and params
.get('implantation_id') is not u
"":
547 implantation_id
= params
.get('implantation_id')
548 dae_
= dae_
.filter(implantation__id
=implantation_id
)
549 copies
= copies
.filter(implantation__id
=implantation_id
)
550 rh_postes_actifs
= rh_postes_actifs
.filter(implantation__id
=implantation_id
)
552 id_copies
= [p
.id_rh_id
for p
in copies
.all()]
553 rhv1
= rh_postes_actifs
.exclude(id__in
=id_copies
)
554 rhv1
= rhv1
.select_related(depth
=1)
556 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])
557 return HttpResponse(dumps(data
))
560 ################################################################################
561 # AJAX SECURITE non nécessaire
562 ################################################################################
563 def coefficient(request
):
568 method
= request
.method
569 params
= getattr(request
, method
, [])
571 if 'classement' in params
and params
.get('classement') is not u
"":
572 classement
= params
.get('classement')
573 classement
= rh
.Classement
.objects
.get(pk
=classement
)
574 data
['coefficient'] = classement
.coefficient
576 data
['coefficient'] = 0
577 return HttpResponse(dumps(data
))
583 output : devise, devise_code, taux_euro
585 method
= request
.method
586 params
= getattr(request
, method
, [])
588 if 'valeur_point' in params
and params
.get('valeur_point') is not u
"":
589 valeur_point
= params
.get('valeur_point')
590 valeur_point
= rh
.ValeurPoint
.objects
.get(pk
=valeur_point
)
591 annee
= valeur_point
.annee
592 implantation
= valeur_point
.implantation
593 taux
= rh
.TauxChange
.objects
.get(annee
=annee
,
594 implantation
=implantation
)
595 data
['devise'] = taux
.devise
.id
596 data
['valeur'] = valeur_point
.valeur
597 data
['devise_code'] = taux
.devise
.code
598 data
['taux_euro'] = taux
.taux
600 return HttpResponseGone("Vous devez choisir une valeur de point")
601 return HttpResponse(dumps(data
))
603 def devise_code(request
):
606 output : devise_code, taux_euro
608 method
= request
.method
609 params
= getattr(request
, method
, [])
611 if 'devise' in params
:
612 devise
= params
.get('devise')
613 devise
= rh
.Devise
.objects
.get(pk
=devise
)
614 annee
= date
.today().year
615 taux
= rh
.TauxChange
.objects
.filter(annee
=annee
, devise
=devise
)
617 return HttpResponseGone("Le taux n'est pas disponible")
618 data
['devise_code'] = devise
.code
619 data
['taux_euro'] = taux
[0].taux
620 return HttpResponse(dumps(data
))
622 def add_remun(request
, dossier
, type_remun
):
623 dossier
= get_object_or_404(dae
.Dossier
, pk
=dossier
)
624 type_remun
= get_object_or_404(rh
.TypeRemuneration
, pk
=type_remun
)
625 dae
.Remuneration(dossier
=dossier
, devise
=dossier
.devise
,
626 type=type_remun
).save()
628 return render_to_response('dae/embauche-remun.html', dict(dossier
=dossier
),
629 RequestContext(request
))
631 def salaire(request
, implantation
, devise
, classement
):
632 if not devise
or not classement
:
635 taux_impl
= rh
.TauxChange
.objects
.filter(implantation
=implantation
) \
637 taux
= rh
.TauxChange
.objects
.filter(devise
=devise
).order_by('-annee')
638 vp
= rh
.ValeurPoint
.objects
.filter(implantation
=implantation
) \
640 if vp
.count() * taux
.count() * taux_impl
.count() == 0:
643 classement
= get_object_or_404(rh
.Classement
, pk
=classement
)
644 taux
, taux_impl
, vp
= taux
[0].taux
, taux_impl
[0].taux
, vp
[0].valeur
646 salaire_euro
= round(vp
* classement
.coefficient
* taux_impl
, 2)
647 data
= dict(salaire_euro
=salaire_euro
, taux
=taux
,
648 salaire_devise
=round(salaire_euro
/ taux
, 2))
650 return HttpResponse(dumps(data
))
652 def liste_valeurs_point(request
):
654 input : implantation_id
655 output : JSON liste de valeur point
657 method
= request
.method
658 params
= getattr(request
, method
, [])
660 annee_courante
= datetime
.datetime
.now().year
661 if 'implantation_id' in params
and params
.get('implantation_id') is not u
"":
662 implantation_id
= params
.get('implantation_id')
663 objects
= rh
.ValeurPoint
.objects
.filter(implantation
=implantation_id
, annee__in
=(annee_courante
-1, annee_courante
)).order_by("-annee")
665 objects
= rh
.ValeurPoint
.objects
.filter(annee__in
=(annee_courante
-1, annee_courante
)).order_by("-annee")
667 data
.append({'id' : o
.id, 'label' : o
.__unicode__(), })
668 return HttpResponse(dumps(data
))