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.py201
1 files changed, 176 insertions, 25 deletions
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py
index afe6715a8..8bae9785c 100644
--- a/archaeological_finds/views.py
+++ b/archaeological_finds/views.py
@@ -17,17 +17,23 @@
# See the file COPYING for details.
+from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse
+from django.http import HttpResponseRedirect
from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _
+from django.views.generic import TemplateView
+from django.views.generic.edit import CreateView, FormView
from ishtar_common.forms import FinalForm
from ishtar_common.forms_common import SourceForm, AuthorFormset, \
SourceDeletionForm
-from archaeological_context_records.forms import RecordFormSelection
+from ishtar_common.models import IshtarUser
+from archaeological_context_records.forms \
+ import RecordFormSelection as RecordFormSelectionTable
from ishtar_common.views import get_item, show_item, revert_item, \
- get_autocomplete_generic
+ get_autocomplete_generic, IshtarMixin, LoginRequiredMixin
from ishtar_common.wizards import SearchWizard
from wizards import *
@@ -57,6 +63,7 @@ find_extra_keys = {
'base_finds__find__description':
'base_finds__find__description__icontains',
'base_finds__batch': 'base_finds__batch',
+ 'basket': 'basket',
'image': 'image__isnull'}
get_find = get_item(
@@ -90,8 +97,10 @@ get_findsource = get_item(
show_find = show_item(models.Find, 'find')
revert_find = revert_item(models.Find)
+show_findbasket = show_item(models.FindBasket, 'findbasket')
+
find_creation_wizard = FindWizard.as_view([
- ('selecrecord-find_creation', RecordFormSelection),
+ ('selecrecord-find_creation', RecordFormSelectionTable),
('find-find_creation', FindForm),
('dating-find_creation', DatingFormSet),
('final-find_creation', FinalForm)],
@@ -105,6 +114,7 @@ find_search_wizard = SearchWizard.as_view([
find_modification_wizard = FindModificationWizard.as_view([
('selec-find_modification', FindFormSelection),
+ ('selecrecord-find_modification', RecordFormSelection),
('find-find_modification', FindForm),
('dating-find_modification', DatingFormSet),
('final-find_modification', FinalForm)],
@@ -143,6 +153,15 @@ find_source_modification_wizard = FindSourceWizard.as_view([
label=_(u"Find: source modification"),
url_name='find_source_modification',)
+
+def find_source_modify(request, pk):
+ find_source_modification_wizard(request)
+ FindSourceWizard.session_set_value(
+ request, 'selec-find_source_modification', 'pk', pk, reset=True)
+ return redirect(reverse(
+ 'find_source_modification',
+ kwargs={'step': 'source-find_source_modification'}))
+
find_source_deletion_wizard = FindSourceDeletionWizard.as_view([
('selec-find_source_deletion', FindSourceFormSelection),
('final-find_source_deletion', SourceDeletionForm)],
@@ -155,37 +174,169 @@ autocomplete_preservationtype = get_autocomplete_generic(
models.PreservationType)
autocomplete_integritytype = get_autocomplete_generic(models.IntegrityType)
-"""
+
+class NewFindBasketView(IshtarMixin, LoginRequiredMixin, CreateView):
+ template_name = 'ishtar/form.html'
+ model = models.FindBasket
+ form_class = NewFindBasketForm
+ page_name = _(u"New basket")
+
+ def get_form_kwargs(self):
+ kwargs = super(NewFindBasketView, self).get_form_kwargs()
+ kwargs['user'] = IshtarUser.objects.get(pk=self.request.user.pk)
+ return kwargs
+
+ def get_success_url(self):
+ return reverse('select_itemsinbasket',
+ kwargs={'pk': self.object.pk})
+
+ def form_valid(self, form):
+ self.object = form.save()
+ return HttpResponseRedirect(self.get_success_url())
+
+
+class SelectBasketForManagement(IshtarMixin, LoginRequiredMixin, FormView):
+ template_name = 'ishtar/form.html'
+ form_class = SelectFindBasketForm
+ page_name = _(u"Manage items in basket")
+
+ def get_form_kwargs(self):
+ kwargs = super(SelectBasketForManagement, self).get_form_kwargs()
+ kwargs['user'] = IshtarUser.objects.get(pk=self.request.user.pk)
+ if 'pk' in self.kwargs:
+ kwargs['initial'].update({'basket': self.kwargs['pk']})
+ return kwargs
+
+ def get_success_url(self, basket):
+ return reverse('select_itemsinbasket',
+ kwargs={'pk': basket})
+
+ def form_valid(self, form):
+ return HttpResponseRedirect(self.get_success_url(
+ form.cleaned_data['basket']))
+
+
+class SelectItemsInBasket(IshtarMixin, LoginRequiredMixin, TemplateView):
+ template_name = 'ishtar/manage_basket.html'
+ page_name = _(u"Manage basket")
+
+ def get_context_data(self, *args, **kwargs):
+ 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
+ context['basket'] = self.basket
+ context['form'] = MultipleFindFormSelection()
+ context['add_url'] = reverse('add_iteminbasket')
+ context['list_url'] = reverse('list_iteminbasket',
+ kwargs={'pk': self.basket.pk})
+ return context
+
+ def form_valid(self, form):
+ return HttpResponseRedirect(self.get_success_url())
+
+
+class FindBasketAddItemView(IshtarMixin, LoginRequiredMixin, FormView):
+ template_name = 'ishtar/simple_form.html'
+ form_class = FindBasketAddItemForm
+
+ def get_success_url(self, basket):
+ return reverse('list_iteminbasket', kwargs={'pk': basket.pk})
+
+ def form_valid(self, form):
+ user = IshtarUser.objects.get(pk=self.request.user.pk)
+ # rights are checked on the form
+ basket = form.save(user)
+ return HttpResponseRedirect(self.get_success_url(basket))
+
+
+class FindBasketListView(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
+ context['basket'] = self.basket
+ context['item_url'] = '/'.join(
+ reverse(models.Find.SHOW_URL, args=[1]).split('/')[:-1])
+ context['delete_url'] = '/'.join(
+ reverse('delete_iteminbasket', args=[1, 1]).split('/')[:-3])
+ return context
+
+
+class FindBasketDeleteItemView(IshtarMixin, LoginRequiredMixin, TemplateView):
+ template_name = 'ishtar/simple_form.html'
+
+ def get_success_url(self, basket):
+ return reverse('list_iteminbasket', kwargs={'pk': basket.pk})
+
+ def get(self, *args, **kwargs):
+ user = self.request.user
+ ishtaruser = IshtarUser.objects.get(pk=self.request.user.pk)
+ try:
+ find = models.Find.objects.get(
+ 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
+ if not user.is_superuser and \
+ not ishtaruser.has_right('change_find') and \
+ not (ishtaruser.has_right('change_own_find')
+ and find.is_own(user)):
+ raise PermissionDenied
+ basket.items.remove(find)
+ return HttpResponseRedirect(self.get_success_url(basket))
+
+
+class DeleteFindBasketView(IshtarMixin, LoginRequiredMixin, FormView):
+ template_name = 'ishtar/form_delete.html'
+ form_class = DeleteFindBasketForm
+ success_url = '/'
+ page_name = _(u"Delete basket")
+
+ def get_form_kwargs(self):
+ kwargs = super(DeleteFindBasketView, self).get_form_kwargs()
+ kwargs['user'] = IshtarUser.objects.get(pk=self.request.user.pk)
+ return kwargs
+
+ def form_valid(self, form):
+ form.save()
+ return HttpResponseRedirect(self.get_success_url())
+
treatment_creation_wizard = TreatmentWizard.as_view([
('basetreatment-treatment_creation', BaseTreatmentForm),
('selecfind-treatment_creation', UpstreamFindFormSelection),
- ('multiselecfinds-treatment_creation', FindMultipleFormSelection),
- ('container-treatment_creation', ContainerForm),
('resultfind-treatment_creation', ResultFindForm),
('resultfinds-treatment_creation', ResultFindFormSet),
('final-treatment_creation', FinalForm)],
condition_dict={
- 'selecfind-treatment_creation':
- check_treatment('basetreatment-treatment_creation',
- 'treatment_type', not_type_list=['physical_grouping',
- 'packaging']),
- 'multiselecfinds-treatment_creation':
- check_treatment('basetreatment-treatment_creation',
- 'treatment_type', ['physical_grouping',
- 'packaging']),
- 'resultfinds-treatment_creation':
- check_treatment('basetreatment-treatment_creation',
- 'treatment_type', ['split']),
- 'resultfind-treatment_creation':
- check_treatment('basetreatment-treatment_creation',
- 'treatment_type', not_type_list=['split']),
- 'container-treatment_creation':
- check_treatment('basetreatment-treatment_creation',
- 'treatment_type', ['packaging']),
- },
+ 'selecfind-treatment_creation':
+ check_not_exist('basetreatment-treatment_creation',
+ 'basket'),
+ 'resultfinds-treatment_creation':
+ check_type_field('basetreatment-treatment_creation',
+ 'treatment_type', models.TreatmentType,
+ 'downstream_is_many'),
+ 'resultfind-treatment_creation':
+ check_type_field('basetreatment-treatment_creation',
+ 'treatment_type', models.TreatmentType,
+ 'upstream_is_many')},
label=_(u"New treatment"),
url_name='treatment_creation',)
-"""
"""
treatment_source_creation_wizard = TreatmentSourceWizard.as_view([