summaryrefslogtreecommitdiff
path: root/ishtar_common/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r--ishtar_common/views.py69
1 files changed, 64 insertions, 5 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 6f18f8daa..3c2aa8b3c 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -38,11 +38,14 @@ from django.core import serializers
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse, NoReverseMatch
from django.db.models import Q, F, ImageField
-from django.http import HttpResponse, Http404
+from django.forms.models import model_to_dict, modelformset_factory
+from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.shortcuts import render_to_response, redirect
from django.template import RequestContext, loader
from django.utils.decorators import method_decorator
from django.utils.translation import ugettext, ugettext_lazy as _
+from django.views.generic import ListView
+from django.views.generic.edit import CreateView
from xhtml2odt import xhtml2odt
@@ -787,10 +790,6 @@ 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):
@@ -832,6 +831,13 @@ person_merge = merge_action(models.Person, forms.MergePersonForm, 'person')
organization_merge = merge_action(models.Organization, forms.MergeOrganizationForm,
'organization')
+class IshtarMixin(object):
+ page_name = u""
+ def get_context_data(self, **kwargs):
+ context = super(IshtarMixin, self).get_context_data(**kwargs)
+ context['page_name'] = self.page_name
+ return context
+
class LoginRequiredMixin(object):
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
@@ -856,3 +862,56 @@ class GlobalVarEdit(AdminLoginRequiredMixin, ModelFormSetView):
extra = 1
can_delete = True
fields = ['slug', 'value', 'description']
+
+class NewImportView(IshtarMixin, LoginRequiredMixin, CreateView):
+ template_name = 'ishtar/form.html'
+ model = models.Import
+ form_class = forms.NewImportForm
+ page_name = _(u"New import")
+
+ def get_success_url(self):
+ return reverse('current_imports')
+
+ def form_valid(self, form):
+ user = models.IshtarUser.objects.get(pk=self.request.user.pk)
+ self.object = form.save(user=user)
+ return HttpResponseRedirect(self.get_success_url())
+
+class ImportListView(IshtarMixin, LoginRequiredMixin, ListView):
+ template_name = 'ishtar/import_list.html'
+ model = models.Import
+ page_name = _(u"Current imports")
+ current_url = 'current_imports'
+
+ def get_queryset(self):
+ user = models.IshtarUser.objects.get(pk=self.request.user.pk)
+ return self.model.objects.filter(user=user).exclude(state='F'
+ ).order_by('-creation_date')
+
+ def post(self, request, *args, **kwargs):
+ for field in request.POST:
+ if not field.startswith('import-action-') or \
+ not request.POST[field]:
+ continue
+ # prevent forged forms
+ try:
+ imprt = models.Import.objects.get(pk=int(field.split('-')[-1]))
+ except (models.Import.DoesNotExist, ValueError):
+ continue
+ # user can only edit his own imports
+ user = models.IshtarUser.objects.get(pk=self.request.user.pk)
+ if imprt.user != user:
+ continue
+ action = request.POST[field]
+ if action == 'D':
+ imprt.delete()
+ elif action == 'A':
+ imprt.initialize()
+ return HttpResponseRedirect(reverse(self.current_url))
+
+class ImportOldListView(ImportListView):
+ current_url = 'old_imports'
+ def get_queryset(self):
+ user = models.IshtarUser.objects.get(pk=self.request.user.pk)
+ return self.model.objects.filter(user=user, state='F'
+ ).order_by('-creation_date')