1 # -*- encoding: utf-8 -*-
3 from django
import forms
5 from django
.core
.urlresolvers
import reverse
6 from django
.core
.mail
import mail_admins
7 from django
.contrib
import admin
8 from django
.contrib
import messages
9 from django
.shortcuts
import redirect
10 from reversion
.admin
import VersionAdmin
11 from auf
.django
.workflow
.models
import WorkflowCommentaire
12 from models
import Poste
, Dossier
, DossierFinalise
, PosteFinalise
15 class PosteAdmin(VersionAdmin
):
16 list_display
= ('nom', 'implantation', 'etat', )
19 class DossierAdmin(VersionAdmin
):
20 list_display
= ('_poste', '_implantation', 'employe', 'etat', )
21 list_filter
= ('etat', )
24 def _poste(self
, obj
):
27 def _implantation(self
, obj
):
28 return obj
.poste
.implantation
31 class ProxyDossierStatut(Dossier
):
34 verbose_name
= "Statut du dossier"
35 verbose_name_plural
= "Statut des dossiers"
38 class StatutDossierForm(forms
.ModelForm
):
39 commentaire
= forms
.CharField(label
="Commentaire",
40 widget
=forms
.widgets
.Textarea())
43 model
= ProxyDossierStatut
46 def __init__(self
, *args
, **kwargs
):
47 super(StatutDossierForm
, self
).__init__(*args
, **kwargs
)
48 # On retire le controle check des états pour faire ce qu'on veut
49 self
._meta
.model
.__setattr__
= object.__setattr__
51 # on prépare le commentaire
52 self
.wf
= WorkflowCommentaire()
53 self
.wf
.etat_initial
= self
.instance
.etat
54 self
.wf
.owner_id
= self
.user
.id
56 def save(self
, *args
, **kwargs
):
57 # Le dossier se voit attribuée un commentaire WF verbeux
58 obj
= super(StatutDossierForm
, self
).save(*args
, **kwargs
)
59 self
.wf
.content_object
= obj
60 self
.wf
.etat_final
= obj
.etat
61 commentaire
= u
"%s => %s : %s" % (self
.wf
.etat_initial
,
63 self
.data
['commentaire'])
64 self
.wf
.texte
= commentaire
69 class DossierStatutAdmin(VersionAdmin
):
70 search_fields
= ('employe__nom', 'employe__prenom', 'poste__nom', )
71 list_display
= ('_poste', '_implantation', 'employe', '_etat', )
72 form
= StatutDossierForm
75 def _poste(self
, obj
):
78 def _implantation(self
, obj
):
79 return obj
.poste
.implantation
82 return obj
.get_etat_display()
84 def has_delete_permission(self
, request
, obj
=None):
87 def has_add_permission(self
, request
):
90 def has_change_permission(self
, request
, obj
=None):
91 return request
.user
.is_superuser
93 def get_form(self
, request
, obj
=None, **kwargs
):
94 form
= super(DossierStatutAdmin
, self
).get_form(request
,
96 form
.user
= request
.user
100 class ImportAdmin(admin
.ModelAdmin
,):
102 def has_delete_permission(self
, request
, obj
=None):
105 def has_add_permission(self
, request
):
108 def has_change_permission(self
, request
, obj
=None):
114 def get_actions(self
, request
):
115 actions
= super(ImportAdmin
, self
).get_actions(request
)
116 del actions
['delete_selected']
120 class ImportDossierAdmin(ImportAdmin
):
121 list_display
= ('_poste', '_employe', '_dae', )
122 actions
= ['importer_dans_RH', ]
124 def _employe(self
, obj
):
127 def _poste(self
, obj
):
128 rh
= obj
.poste
.rh_importation()
130 extra
= u
"<a href='%s' style='color: red;'> (déjà importé)</a>" % \
131 reverse('admin:rh_poste_change', args
=(rh
.id,))
135 return u
"%s%s" % (obj
.poste
.nom
, extra
)
136 _poste
.allow_tags
= True
138 def _implantation(self
, obj
):
139 return obj
.poste
.implantation
142 url
= reverse('embauche_consulter', args
=(obj
.id, ))
143 return "<a href='%s'>voir la DAE</a>" % url
144 _dae
.allow_tags
= True
146 def importer_dans_RH(self
, request
, data
):
147 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
148 dae
= [d
for d
in Dossier
.objects
.filter(id__in
=selected
)]
151 d
.importer(dry_run
=True)
153 messages
.add_message(request
, messages
.SUCCESS
,
154 u
"%s importé dans RH" % d
)
155 url
= reverse('admin:rh_dossier_change', args
=(copie
.id, ))
157 mail_admins('DAE import', unicode(e
))
158 messages
.add_message(request
, messages
.ERROR
, u
"%s ne peut pas\
160 url
= reverse('admin:dae_dossierfinalise_changelist')
164 class ImportPosteAdmin(ImportAdmin
):
165 list_display
= ('nom', '_implantation', '_dae', )
166 actions
= ['importer_dans_RH', ]
168 def _implantation(self
, obj
):
169 return obj
.implantation
172 url
= reverse('poste_consulter', args
=(obj
.id, ))
173 return "<a href='%s'>voir le poste dans DAE</a>" % url
174 _dae
.allow_tags
= True
176 def importer_dans_RH(self
, request
, data
):
177 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
178 dae
= [d
for d
in Poste
.objects
.filter(id__in
=selected
)]
181 p
.importer(dry_run
=True)
183 messages
.add_message(request
, messages
.SUCCESS
,
184 u
"%s importé dans RH" % d
)
185 url
= reverse('admin:rh_poste_change', args
=(copie
.id, ))
187 mail_admins('DAE import', unicode(e
))
188 messages
.add_message(request
, messages
.ERROR
, u
"%s ne peut pas\
190 url
= reverse('admin:dae_postefinalise_changelist')
193 admin
.site
.register(Poste
, PosteAdmin
)
194 admin
.site
.register(Dossier
, DossierAdmin
)
195 admin
.site
.register(ProxyDossierStatut
, DossierStatutAdmin
)
196 admin
.site
.register(DossierFinalise
, ImportDossierAdmin
)
197 admin
.site
.register(PosteFinalise
, ImportPosteAdmin
)