# -*- encoding: utf-8 -*-
from django import forms
-
-from django.core.urlresolvers import reverse
-from django.core.mail import mail_admins
from django.contrib import admin
-from django.contrib import messages
-from django.shortcuts import redirect
-from reversion.admin import VersionAdmin
+
from auf.django.workflow.models import WorkflowCommentaire
-from models import Poste, Dossier, DossierFinalise, PosteFinalise
-class PosteAdmin(VersionAdmin):
+from project.dae.models import Poste, Dossier, ProxyDossierStatut, \
+ ProxyPosteStatut
+
+
+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(VersionAdmin):
+class DossierAdmin(BaseAdmin):
list_display = ('_poste', '_implantation', 'employe', 'etat', )
list_filter = ('etat', )
exclude = ('etat', )
return obj.poste.implantation
-class ProxyDossierStatut(Dossier):
- class Meta:
- proxy = True
- verbose_name = "Statut du dossier"
- verbose_name_plural = "Statut des dossiers"
-
-
-class ProxyPosteStatut(Poste):
- class Meta:
- proxy = True
- verbose_name = "Statut du poste"
- verbose_name_plural = "Statut des postes"
-
-
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__
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.etat_initial, self.wf.etat_final,
+ 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(VersionAdmin):
+class StatutAdmin(BaseAdmin):
action = None
def has_delete_permission(self, request, obj=None):
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):
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', '_etat', )
+ list_display = ('nom', 'implantation', )
+ list_filter = ('implantation', 'etat', )
form = StatutPosteForm
-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 _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:
- try:
- d.importer(dry_run=True)
- copie = d.importer()
- messages.add_message(request, messages.SUCCESS, u"%s importé dans\
- RH" % d)
- url = reverse('admin:rh_dossier_change', args=(copie.id, ))
- except Exception, e:
- mail_admins('DAE import', unicode(e))
- messages.add_message(request, messages.ERROR, u"%s ne peut pas\
- être importé" % d)
- url = reverse('admin:dae_dossierfinalise_changelist')
- 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=("dae-%s" % 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:
- try:
- p.importer(dry_run=True)
- copie = p.importer()
- messages.add_message(request, messages.SUCCESS, u"%s importé dans\
- RH" % d)
- url = reverse('admin:rh_poste_change', args=(copie.id, ))
- except Exception, e:
- mail_admins('DAE import', unicode(e))
- messages.add_message(request, messages.ERROR, u"%s ne peut pas\
- être importé" % p)
- url = reverse('admin:dae_postefinalise_changelist')
- return redirect(url)
-
-
admin.site.register(Poste, PosteAdmin)
admin.site.register(Dossier, DossierAdmin)
admin.site.register(ProxyDossierStatut, DossierStatutAdmin)
admin.site.register(ProxyPosteStatut, PosteStatutAdmin)
-admin.site.register(DossierFinalise, ImportDossierAdmin)
-admin.site.register(PosteFinalise, ImportPosteAdmin)