poste import + liens dans RH
[auf_rh_dae.git] / project / dae / admin.py
index 8cd001b..27fd94a 100644 (file)
 # -*- encoding: utf-8 -*-
 
+from django import forms
+from django.core.urlresolvers import reverse
 from django.contrib import admin
+from django.contrib import messages
+from django.shortcuts import redirect
 from reversion.admin import VersionAdmin
-from models import Poste
+from auf.django.workflow.models import WorkflowCommentaire
+from models import Poste, Dossier, DossierFinalise, PosteFinalise
 
 class PosteAdmin(VersionAdmin):
-    pass
+    list_display = ('nom', 'implantation', 'etat', )
 
-admin.site.register(Poste, PosteAdmin)
+class DossierAdmin(VersionAdmin):
+    list_display = ('_poste', '_implantation', 'employe', 'etat', )
+    list_filter = ('etat', )
+    exclude = ('etat', )
+
+    def _poste(self, obj):
+        return obj.poste.nom
+
+    def _implantation(self, obj):
+        return obj.poste.implantation
+
+class ProxyDossierStatut(Dossier):
+    class Meta:
+        proxy = True
+        verbose_name = "Statut du dossier"
+        verbose_name_plural = "Statut des dossiers"
+
+
+class StatutDossierForm(forms.ModelForm):
+    
+    commentaire = forms.CharField(label="Commentaire",
+            widget=forms.widgets.Textarea())
+
+    class Meta:
+        model = ProxyDossierStatut
+        fields = ('etat', )
+
+    def __init__(self, *args, **kwargs):
+        super(StatutDossierForm, self).__init__(*args, **kwargs)
+        
+        # On retire le controle check des états pour faire ce qu'on veut
+        self._meta.model.__setattr__ = object.__setattr__
+
+        # on prépare le commentaire
+        self.wf = WorkflowCommentaire()
+        self.wf.etat_initial = self.instance.etat
+        self.wf.owner_id = self.user.id
+    
+    def save(self, *args, **kwargs):
+        # Le dossier se voit attribuée un commentaire WF verbeux
+        obj = super(StatutDossierForm, self).save(*args, **kwargs)
+        self.wf.content_object = obj
+        self.wf.etat_final = obj.etat
+        commentaire = u"%s => %s : %s" % (self.wf.etat_initial, self.wf.etat_final,
+                self.data['commentaire'])
+        self.wf.texte = commentaire
+        self.wf.save()
+        return obj
+        
+
+class DossierStatutAdmin(VersionAdmin):
+    search_fields = ('employe__nom', 'employe__prenom', 'poste__nom', )
+    list_display = ('_poste', '_implantation', 'employe', '_etat', )
+    form = StatutDossierForm
+    action = None
+
+    def _poste(self, obj):
+        return obj.poste.nom
+
+    def _implantation(self, obj):
+        return obj.poste.implantation
+
+    def _etat(self, obj):
+        return obj.get_etat_display()
+
+    def has_delete_permission(self, request, obj=None):
+        return False
+
+    def has_add_permission(self, request):
+        return False
+
+    def has_change_permission(self, request, obj=None):
+        return request.user.is_superuser
+
+    def get_form(self, request, obj=None, **kwargs):
+        form = super(DossierStatutAdmin, self).get_form(request,
+                obj, **kwargs)
+        form.user = request.user
+        return form
 
+class ImportAdmin(admin.ModelAdmin,):
 
+    def has_delete_permission(self, request, obj=None):
+        return False
 
+    def has_add_permission(self, request):
+        return False
+
+    def has_change_permission(self, request, obj=None):
+        if obj is None:
+            return True
+        else:
+            return False
+
+    def get_actions(self, request):
+        actions = super(ImportAdmin, self).get_actions(request)
+        del actions['delete_selected']
+        return actions
+
+
+class ImportDossierAdmin(ImportAdmin):
+    list_display = ('_poste', '_employe', '_dae', )
+    actions = ['importer_dans_RH', ]
+
+    def _employe(self, obj):
+        return obj.employe
+
+    def _poste(self, obj):
+        rh = obj.poste.rh_importation()
+        if rh is not None:
+            extra = u"<a href='%s' style='color: red;'> (déjà importé)</a>" % \
+                reverse('admin:rh_poste_change', args=(rh.id,))
+        else:
+            extra = u""
+
+        return u"%s%s" % (obj.poste.nom, extra)
+    _poste.allow_tags = True
+
+    def _implantation(self, obj):
+        return obj.poste.implantation
+
+    def _dae(self, obj):
+        url = reverse('embauche_consulter', args=(obj.id, ))
+        return "<a href='%s'>voir la DAE</a>" % url
+    _dae.allow_tags = True
+
+    def importer_dans_RH(self, request, data):
+        selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
+        dae = [d for d in Dossier.objects.filter(id__in=selected)]
+        for d in dae:
+            copie = d.importer()
+            messages.add_message(request, messages.SUCCESS, u"%s importé dans\
+                    RH" % d)
+            url = reverse('admin:rh_dossier_change', args=(copie.id, ))
+            return redirect(url)
+
+
+class ImportPosteAdmin(ImportAdmin):
+    list_display = ('nom', '_implantation', '_dae', )
+    actions = ['importer_dans_RH', ]
+
+    def _implantation(self, obj):
+        return obj.implantation
+
+    def _dae(self, obj):
+        url = reverse('poste_consulter', args=(obj.id, ))
+        return "<a href='%s'>voir le poste dans DAE</a>" % url
+    _dae.allow_tags = True
+
+    def importer_dans_RH(self, request, data):
+        selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
+        dae = [d for d in Poste.objects.filter(id__in=selected)]
+        for p in dae:
+            copie = p.importer()
+            messages.add_message(request, messages.SUCCESS, u"%s importé dans\
+                    RH" % d)
+            url = reverse('admin:rh_poste_change', args=(copie.id, ))
+            return redirect(url)
+
+admin.site.register(Poste, PosteAdmin)
+admin.site.register(Dossier, DossierAdmin)
+admin.site.register(ProxyDossierStatut, DossierStatutAdmin)
+admin.site.register(DossierFinalise, ImportDossierAdmin)
+admin.site.register(PosteFinalise, ImportPosteAdmin)