Routeur: Ajout temporaire des modules workflow et dae en écriture
[auf_rh_dae.git] / project / rh / historique.py
CommitLineData
8e26a99b
OL
1# -*- coding: utf-8 -*-
2
3from django.core.urlresolvers import reverse
edbc9e37
OL
4from django import forms
5from django.db import models
9daa9f48
OL
6from django.db.models import Q
7from reversion.models import Revision, Version
8
edbc9e37
OL
9
10class 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')
9daa9f48 16
8e26a99b
OL
17
18def format_revisions(qs):
8e26a99b 19 results = []
3d6759a8 20
9daa9f48
OL
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
0efceb2f
OL
36 change_url = None
37 history_url = None
38 type = None
39 objet = None
3d6759a8 40
9daa9f48
OL
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,
0efceb2f 66
9daa9f48
OL
67 })
68 except Exception, e:
69 continue
8e26a99b 70
8e26a99b 71 return results
edbc9e37 72
9daa9f48
OL
73
74def get_active_revisions(limit=None):
edbc9e37 75 ids_revisions_traitees = [m.revision.id for m in
9daa9f48
OL
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)
edbc9e37
OL
87
88
89class TodoForm(forms.Form):
9daa9f48
OL
90 items = forms.MultipleChoiceField(
91 "Les items traités",
92 widget=forms.CheckboxSelectMultiple)
edbc9e37
OL
93
94 def __init__(self, *args, **kwargs):
95 self.revisions = kwargs.pop('revisions')
96 super(TodoForm, self).__init__(*args, **kwargs)
9daa9f48
OL
97 self.fields['items'].choices = \
98 [(r['id'], r['id']) for r in self.revisions]