summaryrefslogtreecommitdiff
path: root/ishtar_common/admin.py
diff options
context:
space:
mode:
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
commit02f462c439c9591958036e1b57f452b8a71872da (patch)
tree281de63ea1b311fb9edb0ef274f1295f360f517b /ishtar_common/admin.py
parent27ef8ccef5532f6c4bfe9fead1193d901ed3fb5d (diff)
downloadIshtar-02f462c439c9591958036e1b57f452b8a71872da.tar.bz2
Ishtar-02f462c439c9591958036e1b57f452b8a71872da.zip
Admin - importer column: duplicate, left shift and right shift
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r--ishtar_common/admin.py115
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)