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
13 from rh
.decorators
import in_drh_or_admin
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 ProxyPosteStatut(Poste
):
41 verbose_name
= "Statut du poste"
42 verbose_name_plural
= "Statut des postes"
45 class StatutForm(forms
.ModelForm
):
46 commentaire
= forms
.CharField(label
="Commentaire",
47 widget
=forms
.widgets
.Textarea())
49 def __init__(self
, *args
, **kwargs
):
50 super(StatutForm
, self
).__init__(*args
, **kwargs
)
51 # On retire le controle check des états pour faire ce qu'on veut
52 self
._meta
.model
.__setattr__
= object.__setattr__
54 # on prépare le commentaire
55 self
.wf
= WorkflowCommentaire()
56 self
.wf
.etat_initial
= self
.instance
.etat
57 self
.wf
.owner_id
= self
.user
.id
59 def save(self
, *args
, **kwargs
):
60 # Le dossier se voit attribuée un commentaire WF verbeux
61 obj
= super(StatutForm
, self
).save(*args
, **kwargs
)
62 self
.wf
.content_object
= obj
63 self
.wf
.etat_final
= obj
.etat
64 commentaire
= u
"%s => %s : %s" % (
65 self
.wf
.get_etat_label(self
.wf
.etat_initial
),
66 self
.wf
.get_etat_label(self
.wf
.etat_final
),
67 self
.data
['commentaire'])
68 self
.wf
.texte
= commentaire
73 class StatutDossierForm(StatutForm
):
76 model
= ProxyDossierStatut
80 class StatutPosteForm(StatutForm
):
83 model
= ProxyPosteStatut
87 class StatutAdmin(VersionAdmin
):
90 def has_delete_permission(self
, request
, obj
=None):
93 def has_add_permission(self
, request
):
96 def has_change_permission(self
, request
, obj
=None):
97 return request
.user
.is_superuser
99 def get_form(self
, request
, obj
=None, **kwargs
):
100 form
= super(StatutAdmin
, self
).get_form(request
,
102 form
.user
= request
.user
105 def _etat(self
, obj
):
106 return obj
.get_etat_display()
107 _etat
.short_description
= "État"
108 _etat
.admin_order_field
= "etat"
110 class DossierStatutAdmin(StatutAdmin
):
111 search_fields
= ('employe__nom', 'employe__prenom', 'poste__nom', )
112 list_display
= ('_poste', '_implantation', 'employe', '_etat', )
113 list_filter
= ('poste__implantation', )
114 form
= StatutDossierForm
116 def _poste(self
, obj
):
119 def _implantation(self
, obj
):
120 return obj
.poste
.implantation
121 _implantation
.short_description
= u
"Implantation"
122 _implantation
.admin_order_field
= "poste__implantation"
124 class PosteStatutAdmin(StatutAdmin
):
125 search_fields
= ('nom', )
126 list_display
= ('nom', 'implantation', )
127 list_filter
= ('implantation', 'etat', )
128 form
= StatutPosteForm
131 class ImportAdmin(admin
.ModelAdmin
,):
133 def _etat(self
, obj
):
134 return obj
.get_etat_display()
135 _etat
.short_description
= u
"État"
136 _etat
.admin_order_field
= "etat"
138 def has_delete_permission(self
, request
, obj
=None):
141 def has_add_permission(self
, request
):
144 def has_change_permission(self
, request
, obj
=None):
145 return in_drh_or_admin(request
.user
)
147 def get_actions(self
, request
):
148 actions
= super(ImportAdmin
, self
).get_actions(request
)
149 del actions
['delete_selected']
153 class ImportDossierAdmin(ImportAdmin
):
154 search_fields
= ('employe__nom', 'employe__prenom', 'poste__nom', )
155 list_display
= ('_poste', '_implantation', '_employe', '_dae', '_etat')
156 list_filter
= ('poste__implantation', 'etat', )
157 actions
= ['importer_dans_RH', ]
159 def _employe(self
, obj
):
162 def _poste(self
, obj
):
163 rh
= obj
.poste
.rh_importation()
165 extra
= u
"<a href='%s' style='color: red;'> (déjà importé)</a>" % \
166 reverse('admin:rh_poste_change', args
=(rh
.id,))
170 return u
"%s%s" % (obj
.poste
.nom
, extra
)
171 _poste
.allow_tags
= True
173 def _implantation(self
, obj
):
174 return obj
.poste
.implantation
175 _implantation
.short_description
= u
"Implantation"
176 _implantation
.admin_order_field
= "poste__implantation"
179 url
= reverse('embauche_consulter', args
=(obj
.id, ))
180 return "<a href='%s'>voir la DAE</a>" % url
181 _dae
.allow_tags
= True
183 def importer_dans_RH(self
, request
, data
):
184 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
185 if len(selected
) > 1:
186 messages
.add_message(request
, messages
.ERROR
,
187 u
"Un seul dossier ne peut être importé à la fois")
188 url
= reverse('admin:dae_dossierfinalise_changelist')
191 dae
= [d
for d
in Dossier
.objects
.filter(id__in
=selected
)]
194 d
.importer(dry_run
=True)
196 messages
.add_message(request
, messages
.SUCCESS
,
197 u
"%s importé dans RH" % d
)
198 url
= reverse('admin:rh_dossier_change', args
=(copie
.id, ))
200 mail_admins('DAE import', unicode(e
))
201 messages
.add_message(request
, messages
.ERROR
, u
"%s ne peut pas\
203 url
= reverse('admin:dae_dossierfinalise_changelist')
207 class ImportPosteAdmin(ImportAdmin
):
208 search_fields
= ('poste__nom', )
209 list_display
= ('nom', '_implantation', '_dae', '_etat',)
210 list_filter
= ('implantation',)
211 actions
= ['importer_dans_RH', ]
213 def _implantation(self
, obj
):
214 return obj
.implantation
215 _implantation
.short_description
= u
"Implantation"
216 _implantation
.admin_order_field
= "implantation"
219 url
= reverse('poste_consulter', args
=("dae-%s" % obj
.id, ))
220 return "<a href='%s'>voir le poste dans DAE</a>" % url
221 _dae
.allow_tags
= True
223 def importer_dans_RH(self
, request
, data
):
224 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
225 if len(selected
) > 1:
226 messages
.add_message(request
, messages
.ERROR
,
227 u
"Un seul poste ne peut être importé à la fois")
228 url
= reverse('admin:dae_postefinalise_changelist')
230 dae
= [d
for d
in Poste
.objects
.filter(id__in
=selected
)]
233 p
.importer(dry_run
=True)
235 messages
.add_message(request
, messages
.SUCCESS
,
236 u
"%s importé dans RH" % d
)
237 url
= reverse('admin:rh_poste_change', args
=(copie
.id, ))
239 mail_admins('DAE import', unicode(e
))
240 messages
.add_message(request
, messages
.ERROR
, u
"%s ne peut pas\
242 url
= reverse('admin:dae_postefinalise_changelist')
246 admin
.site
.register(Poste
, PosteAdmin
)
247 admin
.site
.register(Dossier
, DossierAdmin
)
248 admin
.site
.register(ProxyDossierStatut
, DossierStatutAdmin
)
249 admin
.site
.register(ProxyPosteStatut
, PosteStatutAdmin
)
250 admin
.site
.register(DossierFinalise
, ImportDossierAdmin
)
251 admin
.site
.register(PosteFinalise
, ImportPosteAdmin
)