Fix for odette
[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:%s_%s_change' %
35 (v.content_type.app_label, v.content_type.model),
36 args=(id, ))
37 history_url = reverse('admin:%s_%s_history' %
38 (v.content_type.app_label, v.content_type.model),
39 args=(id, ))
40 type = "%s %s" % (v.content_type.app_label, v.content_type.model)
41 break
42 except:
43 continue
44
45 results.append({
46 'id': rev.id,
47 'date_created': rev.date_created.strftime("%d-%m-%Y %H:%M:%S"),
48 'short_date_created': rev.date_created.strftime("%d-%m-%Y"),
49 'user': rev.user,
50 'comment': rev.comment,
51 'change_url': change_url,
52 'history_url': history_url,
53 'type': type,
54 'objet': objet,
55
56 })
57 return results
58
59 def get_active_revisions():
60 ids_revisions_traitees = [m.revision.id for m in
61 ModificationTraite.objects.all()]
62 return format_revisions(
63 Revision.objects.
64 filter(version__content_type__app_label="rh").
65 exclude(user__isnull=True).
66 exclude(id__in=ids_revisions_traitees).
67 order_by('-date_created').
68 distinct('id'))
69
70
71 class TodoForm(forms.Form):
72 items = forms.MultipleChoiceField("Les items traités",
73 widget=forms.CheckboxSelectMultiple)
74
75 def __init__(self, *args, **kwargs):
76 self.revisions = kwargs.pop('revisions')
77 super(TodoForm, self).__init__(*args, **kwargs)
78 self.fields['items'].choices = [(r['id'], r['id']) for r in self.revisions]
79
80