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")) |
