From 495ac8d196473003064ae24f3999ceaaa4cb90cf Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 31 Jan 2019 05:57:44 -0400 Subject: [PATCH] Object action mixin Add post_object_action_url property to redirect the view after all items in the queryset have been processed. Add the exception instance in the error message context. Signed-off-by: Roberto Rosario --- mayan/apps/common/mixins.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/mayan/apps/common/mixins.py b/mayan/apps/common/mixins.py index e0a1144919..5eaa001d2b 100644 --- a/mayan/apps/common/mixins.py +++ b/mayan/apps/common/mixins.py @@ -304,9 +304,13 @@ class ObjectActionMixin(object): Mixin that performs an user action to a queryset """ error_message = 'Unable to perform operation on object %(instance)s.' + post_object_action_url = None success_message = 'Operation performed on %(count)d object.' success_message_plural = 'Operation performed on %(count)d objects.' + def get_post_object_action_url(self): + return self.post_object_action_url + def get_success_message(self, count): return ungettext( singular=self.success_message, @@ -322,25 +326,28 @@ class ObjectActionMixin(object): def view_action(self, form=None): self.action_count = 0 + self.action_id_list = [] for instance in self.get_object_list(): try: self.object_action(form=form, instance=instance) - except PermissionDenied: - pass - except ActionError: + except Exception as exception: messages.error( - request=self.request, - message=self.error_message % {'instance': instance} + message=self.error_message % { + 'exception': exception, 'instance': instance + }, request=self.request ) else: self.action_count += 1 + self.action_id_list.append(instance.pk) messages.success( - request=self.request, - message=self.get_success_message(count=self.action_count) + message=self.get_success_message(count=self.action_count), + request=self.request ) + self.success_url = self.get_post_object_action_url() + class ObjectNameMixin(object): def get_object_name(self, context=None):