diff options
Diffstat (limited to 'archaeological_finds/views.py')
-rw-r--r-- | archaeological_finds/views.py | 201 |
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([ |