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 | |
8e26a99b | 27 | for v in rev.version_set.all(): |
3d6759a8 | 28 | |
8e26a99b | 29 | try: |
3d6759a8 OL |
30 | change_url = reverse('admin:rh_%s_change' % v.content_type.model, |
31 | args=(v.object.id, )) | |
32 | history_url = reverse('admin:rh_%s_history' % v.content_type.model, | |
8e26a99b OL |
33 | args=(v.object.id, )) |
34 | type = v.content_type | |
35 | objet = v.object | |
36 | break | |
37 | except: | |
0efceb2f OL |
38 | continue |
39 | ||
8e26a99b | 40 | results.append({ |
edbc9e37 | 41 | 'id': rev.id, |
df66753e | 42 | 'date_created': rev.date_created.strftime("%d-%m-%Y %H:%M:%S"), |
45c66f19 | 43 | 'short_date_created': rev.date_created.strftime("%d-%m-%Y"), |
8e26a99b OL |
44 | 'user': rev.user, |
45 | 'comment': rev.comment, | |
3d6759a8 OL |
46 | 'change_url': change_url, |
47 | 'history_url': history_url, | |
45c66f19 | 48 | 'type': unicode(type).capitalize(), |
8e26a99b OL |
49 | 'objet': objet, |
50 | ||
51 | }) | |
52 | return results | |
edbc9e37 OL |
53 | |
54 | def get_active_revisions(): | |
55 | ids_revisions_traitees = [m.revision.id for m in | |
56 | ModificationTraite.objects.all()] | |
57 | return format_revisions( | |
58 | Revision.objects. | |
59 | exclude(user__isnull=True). | |
60 | exclude(id__in=ids_revisions_traitees). | |
61 | order_by('-date_created')) | |
62 | ||
63 | ||
64 | class TodoForm(forms.Form): | |
65 | items = forms.MultipleChoiceField("Les items traités", | |
66 | widget=forms.CheckboxSelectMultiple) | |
67 | ||
68 | def __init__(self, *args, **kwargs): | |
69 | self.revisions = kwargs.pop('revisions') | |
70 | super(TodoForm, self).__init__(*args, **kwargs) | |
71 | self.fields['items'].choices = [(r['id'], r['id']) for r in self.revisions] | |
72 | ||
73 |