diff options
| author | Étienne Loks <etienne.loks@proxience.com> | 2015-05-03 23:21:46 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@proxience.com> | 2015-05-03 23:21:46 +0200 | 
| commit | 0500c0a5098c2b3347ffd36faaa692e97be3b5a4 (patch) | |
| tree | 9d23175660bb6b6d1adcbcec722bf4ea88f0b818 /ishtar_common/views.py | |
| parent | 5429ff2d3639bc96dc6bbd9d45a60a490a555775 (diff) | |
| download | Ishtar-0500c0a5098c2b3347ffd36faaa692e97be3b5a4.tar.bz2 Ishtar-0500c0a5098c2b3347ffd36faaa692e97be3b5a4.zip | |
Interface: create new import, management interface
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') | 
