diff options
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 69 |
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') |