diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-05-22 16:08:55 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-05-22 16:08:55 +0200 |
commit | 29e3e7daa64e573b7481db4c0c15f1c2bc8730d6 (patch) | |
tree | aec5bfabfb234821dee4233421d717eaf7c576f1 /archaeological_finds | |
parent | 0e93e02daa16c704e43ec19d5b4028e7a93968a5 (diff) | |
download | Ishtar-29e3e7daa64e573b7481db4c0c15f1c2bc8730d6.tar.bz2 Ishtar-29e3e7daa64e573b7481db4c0c15f1c2bc8730d6.zip |
Basket: manage deletion
Diffstat (limited to 'archaeological_finds')
-rw-r--r-- | archaeological_finds/urls.py | 7 | ||||
-rw-r--r-- | archaeological_finds/views.py | 38 |
2 files changed, 40 insertions, 5 deletions
diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py index 4629a38a5..deaaaff18 100644 --- a/archaeological_finds/urls.py +++ b/archaeological_finds/urls.py @@ -63,7 +63,7 @@ urlpatterns = patterns( views.NewFindBasketView.as_view()), name='new_findbasket'), url(r'^find_basket_modification_add/$', check_rights(['change_find', 'change_own_find'])( - views.SelectBasketForAdd.as_view()), + views.SelectBasketForManagement.as_view()), name='select_findbasketforadd'), url(r'^find_basket_modification_add/(?P<pk>[0-9]+)?/$', check_rights(['change_find', 'change_own_find'])( @@ -73,6 +73,11 @@ urlpatterns = patterns( check_rights(['change_find', 'change_own_find'])( views.FindBasketAddItemView.as_view()), name='add_iteminbasket'), + url(r'^find_basket_modification_delete_item/(?P<basket>[0-9]+)?' + r'/(?P<find_pk>[0-9]+)?/$', + check_rights(['change_find', 'change_own_find'])( + views.FindBasketDeleteItemView.as_view()), + name='delete_iteminbasket'), url(r'^find_basket_list/(?P<pk>[0-9]+)?/$', check_rights(['change_find', 'change_own_find'])( views.FindBasketListView.as_view()), diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index a43ebaa12..851245201 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -182,13 +182,13 @@ class NewFindBasketView(IshtarMixin, LoginRequiredMixin, CreateView): return HttpResponseRedirect(self.get_success_url()) -class SelectBasketForAdd(IshtarMixin, LoginRequiredMixin, FormView): +class SelectBasketForManagement(IshtarMixin, LoginRequiredMixin, FormView): template_name = 'ishtar/form.html' form_class = SelectFindBasketForm - page_name = _(u"Add items to basket") + page_name = _(u"Manage items in basket") def get_form_kwargs(self): - kwargs = super(SelectBasketForAdd, self).get_form_kwargs() + 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']}) @@ -255,10 +255,40 @@ class FindBasketListView(IshtarMixin, LoginRequiredMixin, TemplateView): raise PermissionDenied context['basket'] = self.basket context['item_url'] = '/'.join( - reverse(models.Find.SHOW_URL, args=[1]).split('/')[:-2]) + 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 |