summaryrefslogtreecommitdiff
path: root/commorganization/admin.py
blob: 2b3c04282e01e68e962d2d050fe40418b00fa45e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
from ajax_select import make_ajax_form
from django.contrib import admin, messages
from django.contrib.auth.admin import GroupAdmin, UserAdmin
from django.contrib.auth.models import Group, User
from django import forms
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _

from commonnet.admin_site import admin_site
from commorganization import models


admin_site.register(User, UserAdmin)
admin_site.register(Group, GroupAdmin)


class AreaTypeAdmin(admin.ModelAdmin):
    model = models.AreaType
    list_display = ('name', )


admin_site.register(models.AreaType, AreaTypeAdmin)


class AreaAdmin(admin.ModelAdmin):
    model = models.Area
    list_display = ('name', 'area_type', 'reference', 'parent')
    list_filter = ('area_type',)
    search_fields = ['name', 'parent__name']


admin_site.register(models.Area, AreaAdmin)


class OrganizationTypeAdmin(admin.ModelAdmin):
    model = models.OrganizationType
    list_display = ('name', 'parent')
    list_filter = ('parent',)


admin_site.register(models.OrganizationType, OrganizationTypeAdmin)


class OrganizationAdmin(admin.ModelAdmin):
    model = models.Organization
    list_display = ('name', 'organization_type', 'area')
    list_filter = ('organization_type',)
    search_fields = ['name']
    form = make_ajax_form(model, {'area': 'area'})


admin_site.register(models.Organization, OrganizationAdmin)


class AddToCrawlForm(forms.Form):
    crawl = forms.ChoiceField(label=_("Crawl"), choices=tuple())

    def __init__(self, *args, **kwargs):
        super(AddToCrawlForm, self).__init__(*args, **kwargs)
        self.fields["crawl"].choices = [(None, "--")] + [
            (c.pk, str(c))
            for c in models.Crawl.objects.filter(status="C").all()
        ]


class TargetAdmin(admin.ModelAdmin):
    list_display = ('name', 'url', 'organization')
    model = models.Target
    list_filter = ('organization__organization_type',)
    form = make_ajax_form(model, {'organization': 'organization'})
    actions = ['add_to_crawl']

    def add_to_crawl(self, request, queryset):
        if 'apply' in request.POST:
            form = AddToCrawlForm(request.POST)
            if form.is_valid():
                crawl = None
                try:
                    crawl = models.Crawl.objects.get(
                        pk=form.cleaned_data["crawl"],
                        status="C"
                    )
                except models.Crawl.DoesNotExist:
                    pass
                if crawl:
                    nb_added = 0
                    targets = [
                        c["id"] for c in crawl.targets.values("id")
                    ]
                    for target in queryset.all():
                        if target.pk not in targets:
                            crawl.targets.add(target)
                            nb_added += 1
                    messages.add_message(
                        request, messages.INFO,
                        str(_("{} new targets added to {}")).format(
                            nb_added, str(crawl)
                        )
                    )
                    return HttpResponseRedirect(request.get_full_path())
        else:
            form = AddToCrawlForm()
        return render(
            request, 'admin/add_to_crawl.html',
            context={"form": form, "query_nb": queryset.count(),
                     "items": [v['pk'] for v in queryset.values('pk').all()]})

    add_to_crawl.short_description = _("Add to crawl")


admin_site.register(models.Target, TargetAdmin)