Ajouté les sources de financement des postes
authorNicolas Cadou <ncadou@cadou.ca>
Thu, 24 Mar 2011 00:06:58 +0000 (20:06 -0400)
committerNicolas Cadou <ncadou@cadou.ca>
Thu, 24 Mar 2011 00:06:58 +0000 (20:06 -0400)
project/dae/forms.py
project/dae/templates/dae/financement.html [new file with mode: 0644]
project/dae/templates/dae/poste.html
project/dae/urls.py
project/dae/views.py

index b0f8c17..215c809 100644 (file)
@@ -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 (file)
index 0000000..158e307
--- /dev/null
@@ -0,0 +1,19 @@
+{% extends 'base.html' %}
+
+{% block title %}
+  Formulaire financement
+{% endblock %}
+
+{% block main %}
+  <h2>Financement</h2>
+
+  <form action="" method="post">
+    <table cellspacing="0">
+      {{ form.as_table }}
+    </table>
+    <input type="submit" name="save" value="Sauvegarder" />
+    {% if not new %}
+      <input type="submit" name="delete" value="Supprimer" />
+    {% endif %}
+  </form>
+{% endblock %}
index 74e3669..8648787 100644 (file)
 {% endblock %}
 
 {% block main %}
+  <h2>
+    {% if new %}
+      Nouveau poste
+    {% else %}
+      Poste
+    {% endif %}
+  </h2>
+
   <form action="" method="post">
     <table cellspacing="0">
       {{ form.as_table }}
     </table>
-    <input type="submit" name="submit" value="Sauvegarder" />
+    <input type="submit" name="save" value="Sauvegarder" />
   </form>
+
   <script type="text/javascript">
     $('#id_poste').change(function() {
         window.location = '{% url poste %}/' + $(this).val();
     });
   </script>
+
+  <h2>Financement</h2>
+
+  <table cellspacing="0">
+    <tr>
+      <th>Type</th>
+      <th>Montant</th>
+      <th>Devise</th>
+      <th>Pourcentage</th>
+      <th>Commentaire</th>
+      <th></th>
+    </tr>
+    {% for fin in poste.financements.all %}
+      <tr>
+        <td>{{ fin.type }}</td>
+        <td>{{ fin.montant }}</td>
+        <td>{{ fin.devise }}</td>
+        <td>{{ fin.pourcentage }}</td>
+        <td>{{ fin.commentaire }}</td>
+        <td><a href="{% url financement poste_key fin.id %}">Modifier</a></td>
+      </tr>
+    {% empty %}
+      <tr>
+        <td colspan="5">
+          {% 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 %}
+        </td>
+      </tr>
+    {% endfor %}
+  </table>
+  {% if not new %}
+    <a href="{% url financement poste_key %}">
+      Ajouter une source de financement
+    </a>
+  {% endif %}
 {% endblock %}
index 900a5ee..25f2708 100644 (file)
@@ -4,6 +4,9 @@ from django.conf.urls.defaults import patterns, url
 urlpatterns = patterns(
     'project.dae.views',
     (r'^$', 'index'),
+    url(r'^poste/(?P<key>.*)/financement$', 'financement', name='financement'),
+    url(r'^poste/(?P<key>.*)/financement/(?P<id>\d*)$', 'financement',
+        name='financement'),
     url(r'^poste$', 'poste', name='poste'),
-    url(r'^poste/(?P<id>.*)$', 'poste', name='poste'),
+    url(r'^poste/(?P<key>.*)$', 'poste', name='poste'),
 )
index 3904725..93efeeb 100644 (file)
@@ -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))