Commit | Line | Data |
---|---|---|
8e26a99b OL |
1 | # -*- coding: utf-8 -*- |
2 | ||
3 | from django.core.urlresolvers import reverse | |
edbc9e37 OL |
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 | ||
8e26a99b OL |
15 | |
16 | def 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 | |
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 | exclude(user__isnull=True). | |
65 | exclude(id__in=ids_revisions_traitees). | |
66 | order_by('-date_created')) | |
67 | ||
68 | ||
69 | class TodoForm(forms.Form): | |
70 | items = forms.MultipleChoiceField("Les items traités", | |
71 | widget=forms.CheckboxSelectMultiple) | |
72 | ||
73 | def __init__(self, *args, **kwargs): | |
74 | self.revisions = kwargs.pop('revisions') | |
75 | super(TodoForm, self).__init__(*args, **kwargs) | |
76 | self.fields['items'].choices = [(r['id'], r['id']) for r in self.revisions] | |
77 | ||
78 |