diff options
Diffstat (limited to 'ishtar_common/admin.py')
| -rw-r--r-- | ishtar_common/admin.py | 115 | 
1 files changed, 114 insertions, 1 deletions
| diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index bc68c8ea6..1edbd0f68 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -494,6 +494,7 @@ admin_site.register(models.ImporterDefault, ImporterDefaultAdmin)  def duplicate_importertype(modeladmin, request, queryset): +    res = []      for obj in queryset.order_by('pk'):          old_pk = obj.pk          obj.pk = None @@ -533,9 +534,12 @@ def duplicate_importertype(modeladmin, request, queryset):                  tg.pk = None  # create new                  tg.column = col                  tg.save() +        res.append(unicode(obj))      messages.add_message(          request, messages.INFO, -        unicode(_(u"{} importer type(s) duplicated.")).format(queryset.count())) +        unicode(_(u"{} importer type(s) duplicated: {}.")).format( +            queryset.count(), u" ; ".join(res)) +        )      url = reverse(          'admin:%s_%s_changelist' % (              modeladmin.model._meta.app_label, @@ -562,6 +566,114 @@ class RegexpAdmin(admin.ModelAdmin):  admin_site.register(models.Regexp, RegexpAdmin) +def duplicate_importercolumn(modeladmin, request, queryset): +    res = [] +    for col in queryset.order_by('col_number'): +        old_pk = col.pk +        col.pk = None +        col.label = (col.label or u"") + u" - duplicate" +        col.label = col.label[:200] +        # get the next available col number +        col_nb = col.col_number + 1 +        while modeladmin.model.objects.filter( +                col_number=col_nb, importer_type=col.importer_type).count(): +            col_nb += 1 +        col.col_number = col_nb +        col.save()  # create new +        old_col = modeladmin.model.objects.get(pk=old_pk) +        for df in old_col.duplicate_fields.all(): +            df.pk = None  # create new +            df.column = col +            df.save() +        for tg in old_col.targets.all(): +            tg.pk = None  # create new +            tg.column = col +            tg.save() +        res.append(unicode(col)) +    messages.add_message( +        request, messages.INFO, +        unicode(_(u"{} importer column(s) duplicated: {}.")).format( +            queryset.count(), u" ; ".join(res)) +    ) +    url = reverse( +        'admin:%s_%s_changelist' % ( +            modeladmin.model._meta.app_label, +            modeladmin.model._meta.model_name) +    ) +    return HttpResponseRedirect(url) + + +duplicate_importercolumn.short_description = _(u"Duplicate") + + +def shift_right(modeladmin, request, queryset): +    for col in queryset.order_by('-col_number'): +        # get the next available col number +        col_nb = col.col_number + 1 +        while modeladmin.model.objects.filter( +                col_number=col_nb, importer_type=col.importer_type).count(): +            col_nb += 1 +        col.col_number = col_nb +        col.save() +    messages.add_message( +        request, messages.INFO, +        unicode(_(u"{} importer column(s) right-shifted.")).format( +            queryset.count()) +    ) +    url = reverse( +        'admin:%s_%s_changelist' % ( +            modeladmin.model._meta.app_label, +            modeladmin.model._meta.model_name) +    ) +    return HttpResponseRedirect(url) + + +shift_right.short_description = _(u"Shift right") + + +def shift_left(modeladmin, request, queryset): +    errors, oks = 0, 0 +    for col in queryset.order_by('col_number'): +        # get the next available col number +        if col.col_number == 1: +            errors += 1 +            continue +        col_nb = col.col_number - 1 +        error = False +        while modeladmin.model.objects.filter( +                col_number=col_nb, importer_type=col.importer_type).count(): +            col_nb -= 1 +        if col_nb <= 0: +            errors += 1 +            continue + +        col.col_number = col_nb +        col.save() +        oks += 1 +    if oks: +        messages.add_message( +            request, messages.INFO, +            unicode(_(u"{} importer column(s) left-shifted.")).format( +                oks) +        ) +    if errors: +        messages.add_message( +            request, messages.ERROR, +            unicode(_(u"{} importer column(s) not left-shifted: no " +                      u"place available.")).format( +                errors) +        ) +    url = reverse( +        'admin:%s_%s_changelist' % ( +            modeladmin.model._meta.app_label, +            modeladmin.model._meta.model_name) +    ) +    return HttpResponseRedirect(url) + + +shift_left.short_description = _(u"Shift left") + +  class ImporterDuplicateFieldInline(admin.TabularInline):      model = models.ImporterDuplicateField @@ -586,6 +698,7 @@ class ImporterColumnAdmin(admin.ModelAdmin):                      'targets_lbl', 'duplicate_fields_lbl', 'required')      list_filter = ('importer_type',)      inlines = (ImportTargetInline, ImporterDuplicateFieldInline) +    actions = [duplicate_importercolumn, shift_left, shift_right]  admin_site.register(models.ImporterColumn, ImporterColumnAdmin) | 
