Routeur: Ajout temporaire des modules workflow et dae en écriture
[auf_rh_dae.git] / project / rh / historique.py
1 # -*- coding: utf-8 -*-
2
3 from django.core.urlresolvers import reverse
4 from django import forms
5 from django.db import models
6 from django.db.models import Q
7 from reversion.models import Revision, Version
8
9
10 class ModificationTraite(models.Model):
11 """
12 Classe utilisée pour marquer les révisions de reversion traitée par
13 les DRH.
14 """
15 revision = models.ForeignKey('reversion.Revision')
16
17
18 def format_revisions(qs):
19 results = []
20
21 revisions = [r for r in qs]
22 versions = Version.objects.select_related('revision', 'content_type').filter(
23 Q(revision__in=revisions) &
24 (Q(content_type__model='dossier') | Q(content_type__model='poste'))
25 ).\
26 order_by('-revision__date_created')
27 #for rev in qs:
28
29 # Dans une révision, on loop dans les versions associées, pour trouver
30 # un modèle qui dispose d'une admin (à priori, le parent) dans le cas
31 # des objets composés
32 #for v in rev.version_set.all():
33 for v in versions:
34 if v.revision in [r['id'] for r in results]:
35 continue
36 change_url = None
37 history_url = None
38 type = None
39 objet = None
40
41 try:
42 klass = v.content_type.model_class()
43 id = int(v.object_id)
44 objet = klass.objects.get(id=id)
45 change_url = reverse(
46 'admin:%s_%s_change' % (
47 v.content_type.app_label, v.content_type.model),
48 args=(id, ))
49 history_url = reverse(
50 'admin:%s_%s_history' % (
51 v.content_type.app_label, v.content_type.model),
52 args=(id, ))
53 type = "%s %s" % (
54 v.content_type.app_label, v.content_type.model)
55 rev = v.revision
56 results.append({
57 'id': rev.id,
58 'date_created': rev.date_created.strftime("%d-%m-%Y %H:%M:%S"),
59 'short_date_created': rev.date_created.strftime("%d-%m-%Y"),
60 'user': rev.user,
61 'comment': rev.comment,
62 'change_url': change_url,
63 'history_url': history_url,
64 'type': type,
65 'objet': objet,
66
67 })
68 except Exception, e:
69 continue
70
71 return results
72
73
74 def get_active_revisions(limit=None):
75 ids_revisions_traitees = [m.revision.id for m in
76 ModificationTraite.objects.select_related('revision').all()]
77 revisions = Revision.objects.\
78 filter(version__content_type__app_label="rh").\
79 exclude(user__isnull=True).\
80 exclude(id__in=ids_revisions_traitees).\
81 order_by('-date_created').\
82 distinct('id')
83
84 if limit is not None:
85 revisions = revisions[:limit]
86 return format_revisions(revisions)
87
88
89 class TodoForm(forms.Form):
90 items = forms.MultipleChoiceField(
91 "Les items traités",
92 widget=forms.CheckboxSelectMultiple)
93
94 def __init__(self, *args, **kwargs):
95 self.revisions = kwargs.pop('revisions')
96 super(TodoForm, self).__init__(*args, **kwargs)
97 self.fields['items'].choices = \
98 [(r['id'], r['id']) for r in self.revisions]