diff options
Diffstat (limited to 'ishtar_common/admin.py')
| -rw-r--r-- | ishtar_common/admin.py | 77 | 
1 files changed, 72 insertions, 5 deletions
| diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index f02a70d7a..9f8d2d809 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -20,27 +20,74 @@  """  Admin description  """ +import csv -from django import forms  from django.conf import settings  from django.contrib import admin -from django.core.exceptions import ObjectDoesNotExist -from django.utils.translation import ugettext_lazy as _ +from django.http import HttpResponseRedirect +from django.shortcuts import render_to_response +from django.template import RequestContext +from django.template.defaultfilters import slugify + +from django import forms  import models + +class ImportGenericForm(forms.Form): +    _selected_action = forms.CharField(widget=forms.MultipleHiddenInput) +    csv_file = forms.FileField( +        "CSV file", help_text="Only unicode encoding is managed - convert your" +        " file first") + + +def gen_import_generic(self, request, queryset): +    form = None + +    if 'apply' in request.POST: +        form = ImportGenericForm(request.POST, request.FILES) + +        if form.is_valid(): +            csv_file = request.FILES['csv_file'] +            reader = csv.reader(csv_file) +            idx = 0 +            for row in reader: +                slug = slugify(row[0]) +                if self.model.objects.filter(txt_idx=slug).count(): +                    continue +                obj, c = self.model.objects.get_or_create( +                    label=row[0], txt_idx=slug) +                if c: +                    idx += 1 +            self.message_user(request, "Successfully added %d new items." % ( +                idx)) +            return HttpResponseRedirect(request.get_full_path()) +    if not form: +        form = ImportGenericForm( +            initial={'_selected_action': +                     request.POST.getlist(admin.ACTION_CHECKBOX_NAME)}) +    return render_to_response( +        'admin/import_from_csv.html', {'csv_form': form}, +        context_instance=RequestContext(request)) + +gen_import_generic.short_description = "Import from a CSV file" + +  class HistorizedObjectAdmin(admin.ModelAdmin):      readonly_fields = ('history_modifier',) +      def save_model(self, request, obj, form, change):          obj.history_modifier = request.user          obj.save() +  class DepartmentAdmin(admin.ModelAdmin):      list_display = ('number', 'label',)      model = models.Department  admin.site.register(models.Department, DepartmentAdmin) +  class OrganizationAdmin(HistorizedObjectAdmin):      list_display = ('name', 'organization_type')      list_filter = ("organization_type",) @@ -49,6 +96,7 @@ class OrganizationAdmin(HistorizedObjectAdmin):  admin.site.register(models.Organization, OrganizationAdmin) +  class PersonAdmin(HistorizedObjectAdmin):      list_display = ('name', 'surname', 'raw_name', 'email')      list_filter = ("person_types",) @@ -57,8 +105,9 @@ class PersonAdmin(HistorizedObjectAdmin):  admin.site.register(models.Person, PersonAdmin) +  class TownAdmin(admin.ModelAdmin): -    list_display = ['name',] +    list_display = ['name', ]      search_fields = ['name']      if settings.COUNTRY == 'fr':          list_display += ['numero_insee', 'departement', ] @@ -68,6 +117,7 @@ class TownAdmin(admin.ModelAdmin):  admin.site.register(models.Town, TownAdmin) +  class AuthorAdmin(admin.ModelAdmin):      list_display = ['person', 'author_type']      list_filter = ("author_type",) @@ -75,61 +125,78 @@ class AuthorAdmin(admin.ModelAdmin):  admin.site.register(models.Author, AuthorAdmin) +  class PersonTypeAdmin(admin.ModelAdmin):      model = models.PersonType      filter_vertical = ('groups',)  admin.site.register(models.PersonType, PersonTypeAdmin) +  class GlobalVarAdmin(admin.ModelAdmin):      list_display = ['slug', 'description', 'value']  admin.site.register(models.GlobalVar, GlobalVarAdmin) +  class GeneralTypeAdmin(admin.ModelAdmin):      list_display = ['label', 'txt_idx', 'available'] +    actions = ['import_generic'] +    import_generic = gen_import_generic -general_models = [models.OrganizationType, models.SourceType, models.AuthorType] + +general_models = [models.OrganizationType, models.SourceType, +                  models.AuthorType]  for model in general_models:      admin.site.register(model, GeneralTypeAdmin) +  class ImporterDefaultValuesInline(admin.TabularInline):      model = models.ImporterDefaultValues +  class ImporterDefaultAdmin(admin.ModelAdmin):      list_display = ('importer_type', 'target')      model = models.ImporterDefault      inlines = (ImporterDefaultValuesInline,)  admin.site.register(models.ImporterDefault, ImporterDefaultAdmin) +  class ImporterTypeAdmin(admin.ModelAdmin):      list_display = ('name', 'associated_models', 'is_template')  admin.site.register(models.ImporterType, ImporterTypeAdmin) +  class RegexpAdmin(admin.ModelAdmin):      list_display = ('name', 'description', "regexp")  admin.site.register(models.Regexp, RegexpAdmin) +  class ImporterDuplicateFieldInline(admin.TabularInline):      model = models.ImporterDuplicateField +  class ImportTargetInline(admin.TabularInline):      model = models.ImportTarget +  class ImporterColumnAdmin(admin.ModelAdmin):      list_display = ('importer_type', 'col_number', 'description', 'required')      list_filter = ('importer_type',)      inlines = (ImporterDuplicateFieldInline, ImportTargetInline)  admin.site.register(models.ImporterColumn, ImporterColumnAdmin) +  class FormaterTypeAdmin(admin.ModelAdmin):      list_display = ('formater_type', 'options')  admin.site.register(models.FormaterType, FormaterTypeAdmin) +  class ImportAdmin(admin.ModelAdmin):      list_display = ('importer_type', 'imported_file', 'user', 'state',                      'creation_date')  admin.site.register(models.Import, ImportAdmin) +  class TargetKeyAdmin(admin.ModelAdmin):      list_display = ('target', 'key', 'value', 'is_set')      list_filter = ("is_set",) | 
