summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2014-11-28 11:30:02 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2014-11-28 11:30:02 +0100
commit1cc8d6156a79d8eff8d9f6ee82797df6e464408d (patch)
treefc3cb300358ed90b4d08dac9a274bcc124dcec01 /ishtar_common/views.py
parent1094b07f381b658f8325c2723afa2e26b8909ebb (diff)
downloadIshtar-1cc8d6156a79d8eff8d9f6ee82797df6e464408d.tar.bz2
Ishtar-1cc8d6156a79d8eff8d9f6ee82797df6e464408d.zip
Merge action implementation (person and organization)
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py46
1 files changed, 45 insertions, 1 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index c27aae74b..0f234c0a1 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -40,7 +40,7 @@ from django.contrib.auth.decorators import login_required
from django.core import serializers
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse, NoReverseMatch
-from django.db.models import Q, ImageField
+from django.db.models import Q, F, ImageField
from django.http import HttpResponse, Http404
from django.shortcuts import render_to_response, redirect
from django.template import RequestContext, loader
@@ -795,6 +795,50 @@ def dashboard_main_detail(request, item_name):
return render_to_response('ishtar/dashboards/dashboard_main_detail.html',
dct, context_instance=RequestContext(request))
+from django.forms.models import model_to_dict
+
+from django.forms.models import modelformset_factory
+
+ITEM_PER_PAGE = 20
+def merge_action(model, form, key):
+ def merge(request, page=1):
+ current_url = key + '_merge'
+ if not page:
+ page = 1
+ page = int(page)
+ FormSet = modelformset_factory(model.merge_candidate.through,
+ form=form, formset=forms.MergeFormSet ,extra=0)
+ q = model.merge_candidate.through.objects
+ context = {'current_url':current_url,
+ 'current_page':page,
+ 'max_page':q.count()/ITEM_PER_PAGE}
+ if page < context["max_page"]:
+ context['next_page'] = page + 1
+ if page > 1:
+ context['previous_page'] = page - 1
+
+ item_nb = page*ITEM_PER_PAGE
+ item_nb_1 = item_nb + ITEM_PER_PAGE
+ from_key = 'from_' + key
+ to_key = 'to_' + key
+ queryset = q.all().order_by(from_key + '__name')[item_nb:item_nb_1]
+ FormSet.from_key = from_key
+ FormSet.to_key = to_key
+ if request.method == 'POST':
+ context['formset'] = FormSet(request.POST, queryset=queryset)
+ if context['formset'].is_valid():
+ context['formset'].merge()
+ return redirect(reverse(current_url, kwargs={'page':page}))
+ else:
+ context['formset'] = FormSet(queryset=queryset)
+ return render_to_response('ishtar/merge_'+key+'.html', context,
+ context_instance=RequestContext(request))
+
+ return merge
+
+person_merge = merge_action(models.Person, forms.MergePersonForm, 'person')
+organization_merge = merge_action(models.Organization, forms.MergeOrganizationForm,
+ 'organization')
class LoginRequiredMixin(object):
@method_decorator(login_required)