summaryrefslogtreecommitdiff
path: root/archaeological_finds/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds/views.py')
-rw-r--r--archaeological_finds/views.py129
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"))