729de410404deb76da34d3f0a2003f6b45f89e36
[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 reversion.models import Revision
7
8 class ModificationTraite(models.Model):
9 """
10 Classe utilisée pour marquer les révisions de reversion traitée par
11 les DRH.
12 """
13 revision = models.ForeignKey('reversion.Revision')
14
15
16 def format_revisions(qs):
17 results = []
18 for rev in qs:
19
20 # Dans une révision, on loop dans les versions associées, pour trouver
21 # un modèle qui dispose d'une admin (à priori, le parent) dans le cas
22 # des objets composés
23 change_url = None
24 history_url = None
25 type = None
26 objet = None
27
28 for v in rev.version_set.all():
29
30 try:
31 klass = v.content_type.model_class()
32 id = int(v.object_id)
33 objet = klass.objects.get(id=id)
34 change_url = reverse('admin:rh_%s_change' % v.content_type.model,
35 args=(id, ))
36 history_url = reverse('admin:rh_%s_history' % v.content_type.model,
37 args=(id, ))
38 type = klass._meta.verbose_name
39 break
40 except:
41 continue
42
43 results.append({
44 'id': rev.id,
45 'date_created': rev.date_created.strftime("%d-%m-%Y %H:%M:%S"),
46 'short_date_created': rev.date_created.strftime("%d-%m-%Y"),
47 'user': rev.user,
48 'comment': rev.comment,
49 'change_url': change_url,
50 'history_url': history_url,
51 'type': type,
52 'objet': objet,
53
54 })
55 return results
56
57 def get_active_revisions():
58 ids_revisions_traitees = [m.revision.id for m in
59 ModificationTraite.objects.all()]
60 return format_revisions(
61 Revision.objects.
62 exclude(user__isnull=True).
63 exclude(id__in=ids_revisions_traitees).
64 order_by('-date_created'))
65
66
67 class TodoForm(forms.Form):
68 items = forms.MultipleChoiceField("Les items traités",
69 widget=forms.CheckboxSelectMultiple)
70
71 def __init__(self, *args, **kwargs):
72 self.revisions = kwargs.pop('revisions')
73 super(TodoForm, self).__init__(*args, **kwargs)
74 self.fields['items'].choices = [(r['id'], r['id']) for r in self.revisions]
75
76