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 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):
150 def get_actions(self
, request
):
151 actions
= super(ImportAdmin
, self
).get_actions(request
)
152 del actions
['delete_selected']
156 class ImportDossierAdmin(ImportAdmin
):
157 search_fields
= ('employe__nom', 'employe__prenom', 'poste__nom', )
158 list_display
= ('_poste', '_implantation', '_employe', '_dae', '_etat')
159 list_filter
= ('poste__implantation', 'etat', )
160 actions
= ['importer_dans_RH', ]
162 def _employe(self
, obj
):
165 def _poste(self
, obj
):
166 rh
= obj
.poste
.rh_importation()
168 extra
= u
"<a href='%s' style='color: red;'> (déjà importé)</a>" % \
169 reverse('admin:rh_poste_change', args
=(rh
.id,))
173 return u
"%s%s" % (obj
.poste
.nom
, extra
)
174 _poste
.allow_tags
= True
176 def _implantation(self
, obj
):
177 return obj
.poste
.implantation
178 _implantation
.short_description
= u
"Implantation"
179 _implantation
.admin_order_field
= "poste__implantation"
182 url
= reverse('embauche_consulter', args
=(obj
.id, ))
183 return "<a href='%s'>voir la DAE</a>" % url
184 _dae
.allow_tags
= True
186 def importer_dans_RH(self
, request
, data
):
187 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
188 dae
= [d
for d
in Dossier
.objects
.filter(id__in
=selected
)]
191 d
.importer(dry_run
=True)
193 messages
.add_message(request
, messages
.SUCCESS
,
194 u
"%s importé dans RH" % d
)
195 url
= reverse('admin:rh_dossier_change', args
=(copie
.id, ))
197 mail_admins('DAE import', unicode(e
))
198 messages
.add_message(request
, messages
.ERROR
, u
"%s ne peut pas\
200 url
= reverse('admin:dae_dossierfinalise_changelist')
204 class ImportPosteAdmin(ImportAdmin
):
205 search_fields
= ('poste__nom', )
206 list_display
= ('nom', '_implantation', '_dae', '_etat',)
207 list_filter
= ('implantation',)
208 actions
= ['importer_dans_RH', ]
210 def _implantation(self
, obj
):
211 return obj
.implantation
212 _implantation
.short_description
= u
"Implantation"
213 _implantation
.admin_order_field
= "implantation"
216 url
= reverse('poste_consulter', args
=("dae-%s" % obj
.id, ))
217 return "<a href='%s'>voir le poste dans DAE</a>" % url
218 _dae
.allow_tags
= True
220 def importer_dans_RH(self
, request
, data
):
221 selected
= request
.POST
.getlist(admin
.ACTION_CHECKBOX_NAME
)
222 dae
= [d
for d
in Poste
.objects
.filter(id__in
=selected
)]
225 p
.importer(dry_run
=True)
227 messages
.add_message(request
, messages
.SUCCESS
,
228 u
"%s importé dans RH" % d
)
229 url
= reverse('admin:rh_poste_change', args
=(copie
.id, ))
231 mail_admins('DAE import', unicode(e
))
232 messages
.add_message(request
, messages
.ERROR
, u
"%s ne peut pas\
234 url
= reverse('admin:dae_postefinalise_changelist')
238 admin
.site
.register(Poste
, PosteAdmin
)
239 admin
.site
.register(Dossier
, DossierAdmin
)
240 admin
.site
.register(ProxyDossierStatut
, DossierStatutAdmin
)
241 admin
.site
.register(ProxyPosteStatut
, PosteStatutAdmin
)
242 admin
.site
.register(DossierFinalise
, ImportDossierAdmin
)
243 admin
.site
.register(PosteFinalise
, ImportPosteAdmin
)