1593: Ajouter les pièces jointes pour la postulation.
authornilovna.bascunan-vasquez <nilovna.bascunan-vasquez@localhost.localdomain>
Tue, 7 Jun 2011 15:41:20 +0000 (11:41 -0400)
committernilovna.bascunan-vasquez <nilovna.bascunan-vasquez@localhost.localdomain>
Tue, 7 Jun 2011 15:41:20 +0000 (11:41 -0400)
La pièce jointe ne s'ajoute pas lors de la postulation.

project/development.py
project/recrutement/admin.py
project/recrutement/forms.py
project/recrutement/models.py
project/recrutement/templates/recrutement/pieces.html [new file with mode: 0644]
project/recrutement/templates/recrutement/postuler_appel_offre.html
project/recrutement/views.py
project/urls.py

index 0c7f53f..1a763c0 100644 (file)
@@ -5,8 +5,8 @@ DEBUG=True
 TEMPLATE_DEBUG=DEBUG
 
 # Décommentez ces lignes pour activer la debugtoolbar
-INTERNAL_IPS = ('127.0.0.1',)
-INSTALLED_APPS += ('debug_toolbar',)
-MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
+#INTERNAL_IPS = ('127.0.0.1',)
+#INSTALLED_APPS += ('debug_toolbar',)
+#MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
 
 AUTH_PASSWORD_REQUIRED = False
index bda3d3b..f36ccf9 100644 (file)
@@ -10,7 +10,6 @@ from datamaster_modeles.models import Employe, Implantation, Region
 
 from recrutement.models import *
 
-
 class OffreEmploiAdmin(VersionAdmin):
     date_hierarchy = 'date_creation'
     list_display = ('nom', 'resume', 'date_limite', '_candidatsList', )
index 1bc2654..6cae230 100644 (file)
@@ -6,7 +6,8 @@ from django.contrib import admin
 from django.forms.models import inlineformset_factory
 from form_utils.forms import BetterModelForm
 from django.forms import ModelForm
-from models import *
+from recrutement import models as recr
+from django.forms.models import BaseInlineFormSet 
 
 ################################################################################
 # EVALUATION
@@ -21,11 +22,11 @@ class CandidatEvaluationForm(ModelForm):
 
     class Meta:
         fields = ('note', 'commentaire', 'evaluateur')
-        model = CandidatEvaluation  
+        model = recr.CandidatEvaluation  
 
 class EvaluateurForm(forms.Form):
     evaluateurs = forms.ModelMultipleChoiceField(queryset=
-                    Evaluateur.objects.all())
+                    recr.Evaluateur.objects.all())
 
     def __init__(self, *args, **kwargs):
         self.candidats = kwargs.pop('candidats')
@@ -39,27 +40,22 @@ class EvaluateurForm(forms.Form):
 ################################################################################
 # OFFRE EMPLOI
 ################################################################################
-class PostulerOffreEmploiForm(BetterModelForm):
-    def __init__(self, *args, **kwargs):   
+class CandidatPieceForm(inlineformset_factory(recr.Candidat, recr.CandidatPiece)):
+    pass
+
+class PostulerOffreEmploiForm(ModelForm):
+    def __init__(self, *args, **kwargs):
         self.offre_emploi = kwargs.pop('offre_emploi')   
-        self.actif = True
-        # Statut de la cadidature à Nouveau
-        self.statut = STATUT_CHOICES[0]     
+        #import pdb;pdb.set_trace()   
         super(PostulerOffreEmploiForm, self).__init__(*args, **kwargs)
 
     def save(self):
         super(PostulerOffreEmploiForm, self).save()
 
     class Meta:
-        fieldsets = [
-            ('Informations personnelles', {
-                'fields': ['prenom','nom','genre', 'nationalite', 
-                            'date_naissance', 'situation_famille', 
-                            'nombre_dependant',]}),
-            ('Adresse', {
-                'fields': ['adresse', 'ville', 'etat_province', 'pays', ]}),
-            ('Informations professionnelles', {
-                'fields': ['niveau_diplome', 'employeur_actuel', 
-                            'poste_actuel', 'domaine_professionnel', ]
-            })]
-        model = Candidat  
+        model = recr.Candidat   
+        exclude = ('actif', 'offre_emploi',)
+        fields = ('nom', 'prenom', 'genre', 'nationalite', 'date_naissance',
+                    'situation_famille', 'nombre_dependant', 'niveau_diplome',
+                    'employeur_actuel', 'poste_actuel', 'domaine_professionnel',
+                    'adresse', 'ville', 'etat_province', 'pays', )
index ff30747..8fae960 100755 (executable)
@@ -109,11 +109,11 @@ def candidat_piece_dispatch(instance, filename):
 
 class CandidatPiece(models.Model):
     candidat = models.ForeignKey(Candidat, db_column='candidat',
-                related_name='+') 
+                related_name='candidat_piece') 
     nom = models.CharField(max_length=255)
     #path = PrivateFileField("file", upload_to=candidat_piece_dispatch)
     path = models.FileField(upload_to=candidat_piece_dispatch, 
-            storage=storage_prive)
+            storage=storage_prive, )
 
     def __unicode__(self):
         return '%s' % (self.nom)
diff --git a/project/recrutement/templates/recrutement/pieces.html b/project/recrutement/templates/recrutement/pieces.html
new file mode 100644 (file)
index 0000000..f853581
--- /dev/null
@@ -0,0 +1,30 @@
+<table>
+    {% for f in piecesForm.management_form %}
+        {{ f }}
+    {% endfor %}
+    <tr>  
+        <th></th> 
+        {% for field in piecesForm.forms.0 %}
+            {% if not field.is_hidden %}
+                <th>{{ field.label }}</th>
+            {% endif %}
+        {% endfor %}
+    </tr>
+    {% for f in piecesForm.forms %}
+    <tr>
+        <td>
+            {{ f.errors }}
+            {% if f.initial.path %}
+                <a href="{{ f.initial.path.url }}" target="_blank">Télécharger</a>
+            {% endif %}
+        </td>
+        {% for field in f %} 
+            {% if not field.is_hidden %}
+                <td>{{ field }}</td>
+            {% else %}
+                {{ field }}
+            {% endif %}
+        {% endfor %}
+    </tr>
+    {% endfor %}
+</table>
index d77dcb1..5008cf5 100644 (file)
     </div>
        
     <form action="" method="post">
-        {{ form.as_p }}
+        <fieldset>
+            <h2>Informations personnelles</h2>
+            <table id="informations_personnelles">
+                <tbody>
+                <tr>
+                    <td>{{ form.prenom.label }}</td>
+                    <td>{{ form.prenom }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.nom.label }}</td>
+                    <td>{{ form.nom }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.genre.label }}</td>
+                    <td>{{ form.genre }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.nationalite.label }}</td>
+                    <td>{{ form.nationalite }}</td>
+                <tr>
+                    <td>{{ form.date_naissance.label }}</td>
+                    <td>{{ form.date_naissance }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.situation_famille.label }}</td>
+                    <td>{{ form.situation_famille }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.nombre_dependant.label }}</td>
+                    <td>{{ form.nombre_dependant }}</td>
+                </tr>
+                </tbody>
+            </table>            
+        </fieldset>
+        <fieldset>
+            <h2>Adresse</h2>
+            <table id="adresse">
+                <tbody>
+                <tr>
+                    <td>{{ form.adresse.label }}</td>
+                    <td>{{ form.adresse }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.ville.label }}</td>
+                    <td>{{ form.ville }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.etat_province.label }}</td>
+                    <td>{{ form.etat_province }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.pays.label }}</td>
+                    <td>{{ form.pays }}</td>
+                </tr>
+                </tbody>
+            </table>
+        </fieldset>
+        <fieldset>
+            <h2>Informations professionnelles</h2>
+            <table id="informations_professionnelles">
+                <tbody>
+                <tr>
+                    <td>{{ form.niveau_diplome.label }}</td>
+                    <td>{{ form.niveau_diplome }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.employeur_actuel.label }}</td>
+                    <td>{{ form.employeur_actuel }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.poste_actuel.label }}</td>
+                    <td>{{ form.poste_actuel }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.domaine_professionnel.label }}</td>
+                    <td>{{ form.domaine_professionnel }}</td>
+                </tr>
+                </tbody>
+            </table>
+        </fieldset>
+        <fieldset>
+            <h2>Pièces jointes</h2>
+            <p class="info">CV, lettre de motivation...</p>
+            {% include "recrutement/pieces.html" %}
+        </fieldset>
         <div class="submit-row">
-            <input type="submit" name="_save" class="default" value="Enregistrer">
+            <input type="submit" name="save" value="Enregistrer" />
         </div>
     </form>
 
index c8db232..7e69b0f 100755 (executable)
@@ -53,21 +53,26 @@ def affecter_evaluateurs_candidats(request):
             Context(c), context_instance = RequestContext(request))
 
 def postuler_appel_offre(request):
+    vars = dict()
     offre_emploi = get_object_or_404(OffreEmploi, id=request.GET.get('id'))
     candidat = Candidat()
     candidat.offre_emploi = offre_emploi
+
     if request.method == "POST":
-        form = PostulerOffreEmploiForm(request.POST, instance=candidat, 
-                offre_emploi=offre_emploi)
-        if form.is_valid():
+        form = PostulerOffreEmploiForm(request.POST, request.FILES, instance=candidat, offre_emploi=offre_emploi)
+        piecesForm = CandidatPieceForm(request.POST, request.FILES, instance=candidat)
+        #import pdb;pdb.set_trace()
+        if form.is_valid() and piecesForm.is_valid():
             form.save()
             messages.add_message(request, messages.SUCCESS, 
                             "Votre application à l'appel d'offre d'emploi a \
                             été effectuée.")
             return redirect("admin:recrutement_offreemploi_changelist")
     else:
-        form = PostulerOffreEmploiForm(offre_emploi=offre_emploi)
+        form = PostulerOffreEmploiForm(instance=candidat, offre_emploi=offre_emploi)
+        piecesForm = CandidatPieceForm(instance=candidat)
 
-    c = {'form' : form}   
-    return render_to_response("recrutement/postuler_appel_offre.html", 
-            Context(c), context_instance = RequestContext(request))
+    vars.update(dict(form=form, candidat=candidat, piecesForm=piecesForm, ))
+    return render_to_response('recrutement/postuler_appel_offre.html', vars, 
+            RequestContext(request))
index fc71517..f903563 100644 (file)
@@ -18,12 +18,17 @@ urlpatterns = patterns(
     (r'^deconnexion/$', 'django.contrib.auth.views.logout'),
     (r'^dae/', include('project.dae.urls')),
     (r'^recrutement/', include('project.recrutement.urls')),
-    url(r'^recrutement/affecter_evaluateurs_candidats/$', 'recrutement.views.affecter_evaluateurs_candidats', 
+    url(r'^recrutement/affecter_evaluateurs_candidats/$', 
+        'recrutement.views.affecter_evaluateurs_candidats', 
         name='affecter_evaluateurs_candidats'),
-    url(r'^recrutement/evaluer_candidat/$', 'recrutement.views.evaluer_candidat', name='evaluer_candidat'),
-    url(r'^recrutement/postuler_appel_offre/$', 'recrutement.views.postuler_appel_offre', name='postuler_appel_offre'),    
+    url(r'^recrutement/pieces/$', 'recrutement.views.postuler_appel_offre', name='pieces'),
+    url(r'^recrutement/evaluer_candidat/$', 
+        'recrutement.views.evaluer_candidat', name='evaluer_candidat'),
+    url(r'^recrutement/postuler_appel_offre/$', 
+        'recrutement.views.postuler_appel_offre', name='postuler_appel_offre'),    
     (r'^', include('project.rh.urls')),
-    (r'^prive/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.PRIVE_MEDIA_ROOT}),
+    (r'^prive/(?P<path>.*)$', 'django.views.static.serve', 
+        {'document_root': settings.PRIVE_MEDIA_ROOT}),
 )
 
 if settings.DEBUG: