summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit5a1a52a3e1996793eb22955a82915966d7abb279 (patch)
treeaec5bfabfb234821dee4233421d717eaf7c576f1
parent7ff90a0ac951720a3c2d23aca7f2af6ffdf1b7e3 (diff)
downloadIshtar-5a1a52a3e1996793eb22955a82915966d7abb279.tar.bz2
Ishtar-5a1a52a3e1996793eb22955a82915966d7abb279.zip
Basket: manage deletion
-rw-r--r--archaeological_finds/urls.py7
-rw-r--r--archaeological_finds/views.py38
-rw-r--r--ishtar_common/static/js/ishtar.js12
-rw-r--r--ishtar_common/templates/ishtar/basket_list.html13
4 files changed, 60 insertions, 10 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
diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js
index 9af5cf2b0..f469fc546 100644
--- a/ishtar_common/static/js/ishtar.js
+++ b/ishtar_common/static/js/ishtar.js
@@ -23,6 +23,15 @@ beforeSend: function(xhr, settings) {
}
}});
+function manage_async_link(event){
+ event.preventDefault();
+ var url = $(this).attr('href');
+ var target = $(this).attr('data-target');
+ $.get(url, function(data) {
+ $(target).html(data);
+ });
+}
+
/* default function to prevent undefined */
function get_next_table_id(){}
function get_previous_table_id(){}
@@ -63,7 +72,8 @@ $(document).ready(function(){
}
$('#current_items select').change(function(){
$(this).attr('class', $(this).children("option:selected").attr('class'));
- })
+ });
+ $("a.async-link").click(manage_async_link);
});
$(document).on("click", '#to_bottom_arrow', function(){
diff --git a/ishtar_common/templates/ishtar/basket_list.html b/ishtar_common/templates/ishtar/basket_list.html
index 5a7af2bc6..a0a0e5d73 100644
--- a/ishtar_common/templates/ishtar/basket_list.html
+++ b/ishtar_common/templates/ishtar/basket_list.html
@@ -1,5 +1,10 @@
{% load i18n %}
-<ul>{% for item in basket.items.all %}
- <li>
- <a class="display_details" href="#" onclick="load_window('/show-find/{{item.pk}}/');">{% trans 'Details' %}</a> {{item.full_label}}</li>{% endfor %}
-</ul>
+<table>
+<tr>{% for item in basket.items.all %}
+ <td><a class="display_details" href="#" onclick="load_window('{{item_url}}/{{item.pk}}/');">{% trans 'Details' %}</a></td>
+ <td>{{item.full_label}}</td>
+ <td><a class='async-link' data-target='#basket-content' href='{{delete_url}}/{{basket.pk}}/{{item.pk}}/'>{% trans "remove" %}</a></td></tr>{% endfor %}
+</table>
+<script type='text/javascript'>
+ $("a.async-link").click(manage_async_link);
+</script>