diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-05-21 16:53:25 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-06-12 08:44:34 +0200 |
commit | ab1a29984cb388b193b249ddeac2e8c8e7c2c495 (patch) | |
tree | 281de63ea1b311fb9edb0ef274f1295f360f517b /ishtar_common/admin.py | |
parent | 8f9adce4b69ba913204c45e6a977dc9a18e0a060 (diff) | |
download | Ishtar-ab1a29984cb388b193b249ddeac2e8c8e7c2c495.tar.bz2 Ishtar-ab1a29984cb388b193b249ddeac2e8c8e7c2c495.zip |
Admin - importer column: duplicate, left shift and right shift
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) |