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 list_filter
= ('etat', )
104 def _etat(self
, obj
):
105 return obj
.get_etat_display()
108 def has_delete_permission(self
, request
, obj
=None):
111 def has_add_permission(self
, request
):
114 def has_change_permission(self
, request
, obj
=None):
120 def get_actions(self
, request
):
121 actions
= super(ImportAdmin
, self
).get_actions(request
)
122 del actions
['delete_selected']
126 class ImportDossierAdmin(ImportAdmin
):
127 list_display
= ('_poste', '_employe', '_dae', '_etat',)
128 actions
= ['importer_dans_RH', ]
130 def _employe(self
, obj
):
133 def _poste(self
, obj
):
134 rh
= obj
.poste
.rh_importation()
136 extra
= u
"<a href='%s' style='color: red;'> (déjà importé)</a>" % \
137 reverse('admin:rh_poste_change', args
=(rh
.id,))
141 return u
"%s%s" % (obj
.poste
.nom
, extra
)
142 _poste
.allow_tags
= True
144 def _implantation(self
, obj
):
145 return obj
.poste
.implantation
148 url
= reverse('embauche_consulter', args
=(obj
.id, ))
149 return "<a href='%s'>voir la DAE</a>" % url
150 _dae
.allow_tags
= True
152 def importer_dans_RH(self
, request
, data
):
153 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
154 dae
= [d
for d
in Dossier
.objects
.filter(id__in
=selected
)]
157 d
.importer(dry_run
=True)
159 messages
.add_message(request
, messages
.SUCCESS
,
160 u
"%s importé dans RH" % d
)
161 url
= reverse('admin:rh_dossier_change', args
=(copie
.id, ))
163 mail_admins('DAE import', unicode(e
))
164 messages
.add_message(request
, messages
.ERROR
, u
"%s ne peut pas\
166 url
= reverse('admin:dae_dossierfinalise_changelist')
170 class ImportPosteAdmin(ImportAdmin
):
171 list_display
= ('nom', '_implantation', '_dae', )
172 actions
= ['importer_dans_RH', ]
174 def _implantation(self
, obj
):
175 return obj
.implantation
178 url
= reverse('poste_consulter', args
=("dae-%s" % obj
.id, ))
179 return "<a href='%s'>voir le poste dans DAE</a>" % url
180 _dae
.allow_tags
= True
182 def importer_dans_RH(self
, request
, data
):
183 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
184 dae
= [d
for d
in Poste
.objects
.filter(id__in
=selected
)]
187 p
.importer(dry_run
=True)
189 messages
.add_message(request
, messages
.SUCCESS
,
190 u
"%s importé dans RH" % d
)
191 url
= reverse('admin:rh_poste_change', args
=(copie
.id, ))
193 mail_admins('DAE import', unicode(e
))
194 messages
.add_message(request
, messages
.ERROR
, u
"%s ne peut pas\
196 url
= reverse('admin:dae_postefinalise_changelist')
199 admin
.site
.register(Poste
, PosteAdmin
)
200 admin
.site
.register(Dossier
, DossierAdmin
)
201 admin
.site
.register(ProxyDossierStatut
, DossierStatutAdmin
)
202 admin
.site
.register(DossierFinalise
, ImportDossierAdmin
)
203 admin
.site
.register(PosteFinalise
, ImportPosteAdmin
)