Merge branch 'hotfix/another_fix_for_comparison' into dev
[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
6from reversion.models import Revision
7
8class 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
8e26a99b
OL
15
16def format_revisions(qs):
8e26a99b
OL
17 results = []
18 for rev in qs:
3d6759a8
OL
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
0efceb2f
OL
23 change_url = None
24 history_url = None
25 type = None
26 objet = None
ca108b40 27
8e26a99b 28 for v in rev.version_set.all():
3d6759a8 29
8e26a99b 30 try:
ca108b40
OL
31 klass = v.content_type.model_class()
32 id = int(v.object_id)
33 objet = klass.objects.get(id=id)
ac91a64b
OL
34 change_url = reverse('admin:%s_%s_change' %
35 (v.content_type.app_label, v.content_type.model),
ca108b40 36 args=(id, ))
ac91a64b
OL
37 history_url = reverse('admin:%s_%s_history' %
38 (v.content_type.app_label, v.content_type.model),
ca108b40 39 args=(id, ))
ac91a64b 40 type = "%s %s" % (v.content_type.app_label, v.content_type.model)
8e26a99b
OL
41 break
42 except:
0efceb2f
OL
43 continue
44
8e26a99b 45 results.append({
edbc9e37 46 'id': rev.id,
df66753e 47 'date_created': rev.date_created.strftime("%d-%m-%Y %H:%M:%S"),
45c66f19 48 'short_date_created': rev.date_created.strftime("%d-%m-%Y"),
8e26a99b
OL
49 'user': rev.user,
50 'comment': rev.comment,
3d6759a8
OL
51 'change_url': change_url,
52 'history_url': history_url,
ca108b40 53 'type': type,
8e26a99b
OL
54 'objet': objet,
55
56 })
57 return results
edbc9e37
OL
58
59def get_active_revisions():
60 ids_revisions_traitees = [m.revision.id for m in
61 ModificationTraite.objects.all()]
62 return format_revisions(
63 Revision.objects.
ae5ccc84 64 filter(version__content_type__app_label="rh").
edbc9e37
OL
65 exclude(user__isnull=True).
66 exclude(id__in=ids_revisions_traitees).
d61cd885
OL
67 order_by('-date_created').
68 distinct('id'))
edbc9e37
OL
69
70
71class 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