From 3ed4909328b32fac86d559abd9b389551b1c87a9 Mon Sep 17 00:00:00 2001 From: Nicolas Cadou Date: Wed, 23 Mar 2011 20:06:58 -0400 Subject: [PATCH] =?utf8?q?Ajout=C3=A9=20les=20sources=20de=20financement=20d?= =?utf8?q?es=20postes?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- project/dae/forms.py | 7 ++++ project/dae/templates/dae/financement.html | 19 +++++++++ project/dae/templates/dae/poste.html | 50 ++++++++++++++++++++++- project/dae/urls.py | 5 ++- project/dae/views.py | 61 +++++++++++++++++++++++----- 5 files changed, 129 insertions(+), 13 deletions(-) create mode 100644 project/dae/templates/dae/financement.html diff --git a/project/dae/forms.py b/project/dae/forms.py index b0f8c17..215c809 100644 --- a/project/dae/forms.py +++ b/project/dae/forms.py @@ -58,3 +58,10 @@ class PosteForm(forms.ModelForm): sorted([('dae-%s' % p.id, unicode(p)) for p in dae_ | copies] + [('rh-%s' % p.id, unicode(p)) for p in rhv1], key=lambda t: t[1]) + + +class PosteFinancementForm(forms.ModelForm): + """ Formulaire des sources de financement pour un poste. """ + class Meta: + model = dae.PosteFinancement + fields = ('type', 'montant', 'pourcentage', 'commentaire') diff --git a/project/dae/templates/dae/financement.html b/project/dae/templates/dae/financement.html new file mode 100644 index 0000000..158e307 --- /dev/null +++ b/project/dae/templates/dae/financement.html @@ -0,0 +1,19 @@ +{% extends 'base.html' %} + +{% block title %} + Formulaire financement +{% endblock %} + +{% block main %} +

Financement

+ +
+ + {{ form.as_table }} +
+ + {% if not new %} + + {% endif %} +
+{% endblock %} diff --git a/project/dae/templates/dae/poste.html b/project/dae/templates/dae/poste.html index 74e3669..8648787 100644 --- a/project/dae/templates/dae/poste.html +++ b/project/dae/templates/dae/poste.html @@ -10,15 +10,63 @@ {% endblock %} {% block main %} +

+ {% if new %} + Nouveau poste + {% else %} + Poste + {% endif %} +

+
{{ form.as_table }}
- +
+ + +

Financement

+ + + + + + + + + + + {% for fin in poste.financements.all %} + + + + + + + + + {% empty %} + + + + {% endfor %} +
TypeMontantDevisePourcentageCommentaire
{{ fin.type }}{{ fin.montant }}{{ fin.devise }}{{ fin.pourcentage }}{{ fin.commentaire }}Modifier
+ {% if new %} + Vous devez enregister ce nouveau poste avant de pouvoir spécifier + la ou les sources de financement. + {% else %} + Aucun financement au registre + {% endif %} +
+ {% if not new %} + + Ajouter une source de financement + + {% endif %} {% endblock %} diff --git a/project/dae/urls.py b/project/dae/urls.py index 900a5ee..25f2708 100644 --- a/project/dae/urls.py +++ b/project/dae/urls.py @@ -4,6 +4,9 @@ from django.conf.urls.defaults import patterns, url urlpatterns = patterns( 'project.dae.views', (r'^$', 'index'), + url(r'^poste/(?P.*)/financement$', 'financement', name='financement'), + url(r'^poste/(?P.*)/financement/(?P\d*)$', 'financement', + name='financement'), url(r'^poste$', 'poste', name='poste'), - url(r'^poste/(?P.*)$', 'poste', name='poste'), + url(r'^poste/(?P.*)$', 'poste', name='poste'), ) diff --git a/project/dae/views.py b/project/dae/views.py index 3904725..93efeeb 100644 --- a/project/dae/views.py +++ b/project/dae/views.py @@ -2,7 +2,7 @@ from django.shortcuts import redirect, render_to_response, get_object_or_404 from django.template import RequestContext -from project.dae.forms import PosteForm +from project.dae.forms import PosteForm, PosteFinancementForm from project.dae import models as dae from project.rh_v1 import models as rh @@ -11,7 +11,7 @@ def index(request): return render_to_response('dae/index.html', {}, RequestContext(request)) -def poste(request, id=None): +def poste(request, key=None): """ Formulaire pour un poste. Permet de créer ou modifier un poste. Si le poste n'existe que dans rh_v1 @@ -20,13 +20,10 @@ def poste(request, id=None): """ poste, data, vars = None, dict(), dict() - if request.POST: - data.update(dict(request.POST.items())) - - if id: + if key: # Poste existant - data['poste'] = id - type, id = id.split('-') + data['poste'] = key + type, id = key.split('-') if type == 'dae': poste = get_object_or_404(dae.Poste, pk=id) @@ -36,17 +33,59 @@ def poste(request, id=None): poste = dae.Poste(id_rh=p, nom=p.type_poste.nom) for field in ('implantation', 'type_poste', 'actif'): setattr(poste, field, getattr(p, field)) + else: + # Nouveau poste + vars['new'] = True if request.POST: + data.update(dict(request.POST.items())) form = PosteForm(data, instance=poste) - if form.is_valid(): + if 'save' in data and form.is_valid(): poste = form.save() - return redirect('poste', id='dae-%s' % poste.id) + return redirect('poste', key='dae-%s' % poste.id) else: # 'initial' évite la validation prémature lors d'une copie de poste de # rh_v1 vers dae. form = PosteForm(initial=data, instance=poste) - vars['form'] = form + vars.update(dict(form=form, poste=poste, poste_key=key)) return render_to_response('dae/poste.html', vars, RequestContext(request)) + + +def financement(request, key=None, id=None): + """ Formulaire pour une source de financement pour un poste. """ + poste, financement, data, vars = None, None, dict(), dict() + + if request.POST: + data.update(dict(request.POST.items())) + + if key: + type, poste_id = key.split('-') + if type == 'dae': + poste = get_object_or_404(dae.Poste, pk=poste_id) + if id: + # Financement existant + financement = get_object_or_404(dae.PosteFinancement, pk=id) + else: + # Nouveau financement + financement = dae.PosteFinancement(poste_id=poste_id) + vars['new'] = True + + if not financement: + return Http404 + + if request.POST: + form = PosteFinancementForm(data, instance=financement) + if 'delete' in data: + financement.delete() + elif 'save' in data and form.is_valid(): + financement = form.save() + return redirect('poste', key='dae-%s' % poste.id) + else: + form = PosteFinancementForm(initial=data, instance=financement) + + vars.update(dict(form=form, financement=financement)) + + return render_to_response('dae/financement.html', vars, + RequestContext(request)) -- 1.7.10.4