# -*- encoding: utf-8 -*-
+from django import forms
from django.contrib import admin
-from reversion.admin import VersionAdmin
-from models import Poste, JustificationQuestion
-class PosteAdmin(VersionAdmin):
- list_display = ('_titre', 'pourvu')
+from auf.django.workflow.models import WorkflowCommentaire
- def _titre(self, obj):
- return unicode(obj)
+from project.dae.models import Poste, Dossier, ProxyDossierStatut, \
+ ProxyPosteStatut
-class JustificationQuestionAdmin(admin.ModelAdmin):
- pass
-admin.site.register(Poste, PosteAdmin)
-admin.site.register(JustificationQuestion, JustificationQuestionAdmin)
+class BaseAdmin(admin.ModelAdmin):
+
+ class Media:
+ css = {'screen': (
+ 'css/admin_custom.css',
+ 'jquery-autocomplete/jquery.autocomplete.css',
+ )}
+ js = (
+ 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',
+ 'jquery-autocomplete/jquery.autocomplete.min.js',
+ )
+
+
+class PosteAdmin(BaseAdmin):
+ list_display = ('nom', 'implantation', 'etat', )
+
+
+class DossierAdmin(BaseAdmin):
+ 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 StatutForm(forms.ModelForm):
+ commentaire = forms.CharField(label="Commentaire",
+ widget=forms.widgets.Textarea())
+
+ def __init__(self, *args, **kwargs):
+ super(StatutForm, 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(StatutForm, self).save(*args, **kwargs)
+ self.wf.content_object = obj
+ self.wf.etat_final = obj.etat
+ commentaire = u"%s => %s : %s" % (
+ self.wf.get_etat_label(self.wf.etat_initial),
+ self.wf.get_etat_label(self.wf.etat_final),
+ self.data['commentaire'])
+ self.wf.texte = commentaire
+ self.wf.save()
+ return obj
+
+
+class StatutDossierForm(StatutForm):
+
+ class Meta:
+ model = ProxyDossierStatut
+ fields = ('etat', )
+class StatutPosteForm(StatutForm):
+ class Meta:
+ model = ProxyPosteStatut
+ fields = ('etat', )
+
+
+class StatutAdmin(BaseAdmin):
+ action = None
+
+ 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(StatutAdmin, self).get_form(request,
+ obj, **kwargs)
+ form.user = request.user
+ return form
+
+ def _etat(self, obj):
+ return obj.get_etat_display()
+ _etat.short_description = "État"
+ _etat.admin_order_field = "etat"
+
+
+class DossierStatutAdmin(StatutAdmin):
+ search_fields = ('employe__nom', 'employe__prenom', 'poste__nom', )
+ list_display = ('_poste', '_implantation', 'employe', '_etat', )
+ list_filter = ('poste__implantation', )
+ form = StatutDossierForm
+
+ def _poste(self, obj):
+ return obj.poste.nom
+
+ def _implantation(self, obj):
+ return obj.poste.implantation
+ _implantation.short_description = u"Implantation"
+ _implantation.admin_order_field = "poste__implantation"
+
+
+class PosteStatutAdmin(StatutAdmin):
+ search_fields = ('nom', )
+ list_display = ('nom', 'implantation', )
+ list_filter = ('implantation', 'etat', )
+ form = StatutPosteForm
+
+
+admin.site.register(Poste, PosteAdmin)
+admin.site.register(Dossier, DossierAdmin)
+admin.site.register(ProxyDossierStatut, DossierStatutAdmin)
+admin.site.register(ProxyPosteStatut, PosteStatutAdmin)