diff options
Diffstat (limited to 'archaeological_finds/views.py')
| -rw-r--r-- | archaeological_finds/views.py | 129 | 
1 files changed, 106 insertions, 23 deletions
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index 6c6d9fff9..c340639c5 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -1,6 +1,6 @@  #!/usr/bin/env python  # -*- coding: utf-8 -*- -# Copyright (C) 2010-2016  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2010-2018  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet>  # This program is free software: you can redistribute it and/or modify  # it under the terms of the GNU Affero General Public License as @@ -21,7 +21,7 @@ import json  from django.core.urlresolvers import reverse  from django.db.models import Q -from django.http import HttpResponseRedirect, HttpResponse +from django.http import HttpResponseRedirect, HttpResponse, Http404  from django.shortcuts import redirect  from django.utils.translation import ugettext_lazy as _  from django.views.generic import TemplateView @@ -35,7 +35,7 @@ from forms import *  from ishtar_common.forms import FinalForm  from ishtar_common.models import IshtarUser, get_current_profile  from ishtar_common.views import get_autocomplete_generic, IshtarMixin, \ -    LoginRequiredMixin +    LoginRequiredMixin, QAItemEditForm, QAItemForm  from ishtar_common.views_item import display_item, get_item, show_item, \      revert_item, get_autocomplete_item  from wizards import * @@ -113,6 +113,36 @@ show_findbasket = show_item(models.FindBasket, 'findbasket')  display_findbasket = display_item(models.FindBasket,                                    show_url='show-find/basket-') +get_find_basket = get_item( +    models.FindBasket, 'get_findbasket', 'findbasket', +) + +basket_search_wizard = FindBasketSearch.as_view( +    [('selec-find_basket_search', FindBasketFormSelection)], +    label=_(u"Basket search"), +    url_name='find_basket_search', +) + +basket_modify_wizard = FindBasketEditWizard.as_view( +    [ +        ('selec-find_basket_modification', FindBasketFormSelection), +        ('basket-find_basket_modification', FindBasketForm), +        ('final-find_basket_modification', FinalForm) +     ], +    label=_(u"Basket modify"), +    url_name='find_basket_modification', +) + + +def find_basket_modify(request, pk): +    basket_modify_wizard(request) +    key = 'selec-find_basket_modification' +    FindBasketEditWizard.session_set_value( +        request, key, 'pk', pk, reset=True) +    return redirect( +        reverse('find_basket_modification', +                kwargs={'step': 'basket-find_basket_modification'})) +  def check_preservation_module(self):      return get_current_profile().preservation @@ -234,6 +264,16 @@ class NewFindBasketView(IshtarMixin, LoginRequiredMixin, CreateView):          return HttpResponseRedirect(self.get_success_url()) +class OwnBasket(object): +    def get_basket(self, user, pk): +        try: +            return models.FindBasket.objects.filter( +                Q(user=user) | Q(shared_with=user) +            ).get(pk=pk) +        except models.FindBasket.DoesNotExist: +            raise PermissionDenied + +  class SelectBasketForManagement(IshtarMixin, LoginRequiredMixin, FormView):      template_name = 'ishtar/form.html'      form_class = SelectFindBasketForm @@ -255,7 +295,8 @@ class SelectBasketForManagement(IshtarMixin, LoginRequiredMixin, FormView):              form.cleaned_data['basket'])) -class SelectItemsInBasket(IshtarMixin, LoginRequiredMixin, TemplateView): +class SelectItemsInBasket(OwnBasket, IshtarMixin, LoginRequiredMixin, +                          TemplateView):      template_name = 'ishtar/manage_basket.html'      page_name = _(u"Manage basket") @@ -263,11 +304,9 @@ class SelectItemsInBasket(IshtarMixin, LoginRequiredMixin, TemplateView):          context = super(SelectItemsInBasket, self).get_context_data(              *args, **kwargs)          self.user = IshtarUser.objects.get(pk=self.request.user.pk) -        try: -            self.basket = models.FindBasket.objects.get( -                pk=self.kwargs['pk'], user=self.user) -        except models.FindBasket.DoesNotExist: -            raise PermissionDenied +        self.basket = self.get_basket( +            user=self.user, pk=self.kwargs['pk'] +        )          context['basket'] = self.basket          if get_current_profile().warehouse:              context['form'] = MultipleFindFormSelectionWarehouseModule() @@ -296,18 +335,17 @@ class FindBasketAddItemView(IshtarMixin, LoginRequiredMixin, FormView):          return HttpResponseRedirect(self.get_success_url(basket)) -class FindBasketListView(IshtarMixin, LoginRequiredMixin, TemplateView): +class FindBasketListView(OwnBasket, IshtarMixin, LoginRequiredMixin, +                         TemplateView):      template_name = 'ishtar/basket_list.html'      def get_context_data(self, *args, **kwargs):          context = super(FindBasketListView, self).get_context_data(              *args, **kwargs)          self.user = IshtarUser.objects.get(pk=self.request.user.pk) -        try: -            self.basket = models.FindBasket.objects.get( -                pk=self.kwargs['pk'], user=self.user) -        except models.FindBasket.DoesNotExist: -            raise PermissionDenied +        self.basket = self.get_basket( +            user=self.user, pk=self.kwargs['pk'] +        )          context['basket'] = self.basket          context['item_url'] = '/'.join(              reverse(models.Find.SHOW_URL, args=[1]).split('/')[:-1]) @@ -316,7 +354,8 @@ class FindBasketListView(IshtarMixin, LoginRequiredMixin, TemplateView):          return context -class FindBasketDeleteItemView(IshtarMixin, LoginRequiredMixin, TemplateView): +class FindBasketDeleteItemView(OwnBasket, IshtarMixin, LoginRequiredMixin, +                               TemplateView):      template_name = 'ishtar/simple_form.html'      def get_success_url(self, basket): @@ -330,14 +369,13 @@ class FindBasketDeleteItemView(IshtarMixin, LoginRequiredMixin, TemplateView):                  pk=self.kwargs['find_pk'])          except models.Find.DoesNotExist:              raise PermissionDenied -        try: -            basket = models.FindBasket.objects.get( -                pk=self.kwargs['basket'], user=ishtaruser) -        except models.FindBasket.DoesNotExist: -            raise PermissionDenied + +        basket = self.get_basket( +            user=ishtaruser, pk=self.kwargs['basket'] +        )          if not user.is_superuser and \ -                not ishtaruser.has_right('change_find') and \ -                not (ishtaruser.has_right('change_own_find') +                not ishtaruser.has_right('view_find') and \ +                not (ishtaruser.has_right('view_own_find')                       and find.is_own(user)):              raise PermissionDenied          basket.items.remove(find) @@ -594,3 +632,48 @@ def reset_wizards(request):               'treatmentfle_admacttreatmentfle_deletion'),      ):          wizard_class.session_reset(request, url_name) + + +class QAFindForm(QAItemEditForm): +    model = models.Find +    form_class = QAFindFormMulti + + +class QAFindBasketFormView(QAItemForm): +    template_name = 'ishtar/forms/qa_find_basket.html' +    model = models.Find +    form_class = QAFindBasketForm +    page_name = _(u"Basket") +    modal_size = "small" + +    def get_quick_action(self): +        return models.Find.QUICK_ACTIONS[1] + +    def get_form_kwargs(self): +        kwargs = super(QAFindBasketFormView, self).get_form_kwargs() +        kwargs['user'] = self.request.user +        return kwargs + +    def form_valid(self, form): +        form.save(self.items) +        return HttpResponseRedirect(reverse("success")) + + +class QAFindTreatmentFormView(QAItemForm): +    template_name = 'ishtar/forms/qa_find_treatment.html' +    model = models.Find +    form_class = QAFindTreatmentForm +    page_name = _(u"Packaging") + +    def get_quick_action(self): +        return models.Find.QUICK_ACTIONS[2] + +    def get_form_kwargs(self): +        kwargs = super(QAFindTreatmentFormView, self).get_form_kwargs() +        kwargs['user'] = self.request.user +        kwargs['prefix'] = "qa-packaging" +        return kwargs + +    def form_valid(self, form): +        form.save(self.items, self.request.user) +        return HttpResponseRedirect(reverse("success"))  | 
