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 | |
9daa9f48 OL |
6 | from django.db.models import Q |
7 | from reversion.models import Revision, Version | |
8 | ||
edbc9e37 OL |
9 | |
10 | class ModificationTraite(models.Model): | |
11 | """ | |
12 | Classe utilisée pour marquer les révisions de reversion traitée par | |
13 | les DRH. | |
14 | """ | |
15 | revision = models.ForeignKey('reversion.Revision') | |
9daa9f48 | 16 | |
8e26a99b OL |
17 | |
18 | def format_revisions(qs): | |
8e26a99b | 19 | results = [] |
3d6759a8 | 20 | |
9daa9f48 OL |
21 | revisions = [r for r in qs] |
22 | versions = Version.objects.select_related('revision', 'content_type').filter( | |
23 | Q(revision__in=revisions) & | |
24 | (Q(content_type__model='dossier') | Q(content_type__model='poste')) | |
25 | ).\ | |
26 | order_by('-revision__date_created') | |
27 | #for rev in qs: | |
28 | ||
29 | # Dans une révision, on loop dans les versions associées, pour trouver | |
30 | # un modèle qui dispose d'une admin (à priori, le parent) dans le cas | |
31 | # des objets composés | |
32 | #for v in rev.version_set.all(): | |
33 | for v in versions: | |
34 | if v.revision in [r['id'] for r in results]: | |
35 | continue | |
0efceb2f OL |
36 | change_url = None |
37 | history_url = None | |
38 | type = None | |
39 | objet = None | |
3d6759a8 | 40 | |
9daa9f48 OL |
41 | try: |
42 | klass = v.content_type.model_class() | |
43 | id = int(v.object_id) | |
44 | objet = klass.objects.get(id=id) | |
45 | change_url = reverse( | |
46 | 'admin:%s_%s_change' % ( | |
47 | v.content_type.app_label, v.content_type.model), | |
48 | args=(id, )) | |
49 | history_url = reverse( | |
50 | 'admin:%s_%s_history' % ( | |
51 | v.content_type.app_label, v.content_type.model), | |
52 | args=(id, )) | |
53 | type = "%s %s" % ( | |
54 | v.content_type.app_label, v.content_type.model) | |
55 | rev = v.revision | |
56 | results.append({ | |
57 | 'id': rev.id, | |
58 | 'date_created': rev.date_created.strftime("%d-%m-%Y %H:%M:%S"), | |
59 | 'short_date_created': rev.date_created.strftime("%d-%m-%Y"), | |
60 | 'user': rev.user, | |
61 | 'comment': rev.comment, | |
62 | 'change_url': change_url, | |
63 | 'history_url': history_url, | |
64 | 'type': type, | |
65 | 'objet': objet, | |
0efceb2f | 66 | |
9daa9f48 OL |
67 | }) |
68 | except Exception, e: | |
69 | continue | |
8e26a99b | 70 | |
8e26a99b | 71 | return results |
edbc9e37 | 72 | |
9daa9f48 OL |
73 | |
74 | def get_active_revisions(limit=None): | |
edbc9e37 | 75 | ids_revisions_traitees = [m.revision.id for m in |
9daa9f48 OL |
76 | ModificationTraite.objects.select_related('revision').all()] |
77 | revisions = Revision.objects.\ | |
78 | filter(version__content_type__app_label="rh").\ | |
79 | exclude(user__isnull=True).\ | |
80 | exclude(id__in=ids_revisions_traitees).\ | |
81 | order_by('-date_created').\ | |
82 | distinct('id') | |
83 | ||
84 | if limit is not None: | |
85 | revisions = revisions[:limit] | |
86 | return format_revisions(revisions) | |
edbc9e37 OL |
87 | |
88 | ||
89 | class TodoForm(forms.Form): | |
9daa9f48 OL |
90 | items = forms.MultipleChoiceField( |
91 | "Les items traités", | |
92 | widget=forms.CheckboxSelectMultiple) | |
edbc9e37 OL |
93 | |
94 | def __init__(self, *args, **kwargs): | |
95 | self.revisions = kwargs.pop('revisions') | |
96 | super(TodoForm, self).__init__(*args, **kwargs) | |
9daa9f48 OL |
97 | self.fields['items'].choices = \ |
98 | [(r['id'], r['id']) for r in self.revisions] |