Add keyword arguments to checkouts app

Add keyword arguments to calls and view parameters. Add missing icons.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-01-02 14:19:32 -04:00
parent 3e53ce0c43
commit 92e615ce4c
14 changed files with 134 additions and 83 deletions
+7 -5
View File
@@ -14,7 +14,7 @@ from .permissions import permission_document_checkout_detail_view
class DashboardWidgetTotalCheckouts(DashboardWidgetNumeric): class DashboardWidgetTotalCheckouts(DashboardWidgetNumeric):
icon_class = icon_dashboard_checkouts icon_class = icon_dashboard_checkouts
label = _('Checkedout documents') label = _('Checkedout documents')
link = reverse_lazy('checkouts:checkout_list') link = reverse_lazy(viewname='checkouts:checkout_list')
def render(self, request): def render(self, request):
AccessControlList = apps.get_model( AccessControlList = apps.get_model(
@@ -25,12 +25,14 @@ class DashboardWidgetTotalCheckouts(DashboardWidgetNumeric):
) )
queryset = AccessControlList.objects.filter_by_access( queryset = AccessControlList.objects.filter_by_access(
permission=permission_document_checkout_detail_view, permission=permission_document_checkout_detail_view,
queryset=DocumentCheckout.objects.checked_out_documents(),
user=request.user, user=request.user,
queryset=DocumentCheckout.objects.checked_out_documents()
) )
queryset = AccessControlList.objects.filter_by_access( queryset = AccessControlList.objects.filter_by_access(
permission=permission_document_view, user=request.user, permission=permission_document_view, queryset=queryset,
queryset=queryset user=request.user
) )
self.count = queryset.count() self.count = queryset.count()
return super(DashboardWidgetTotalCheckouts, self).render(request) return super(DashboardWidgetTotalCheckouts, self).render(
request=request
)
+7 -7
View File
@@ -4,19 +4,19 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.events import EventTypeNamespace from mayan.apps.events import EventTypeNamespace
namespace = EventTypeNamespace(name='checkouts', label=_('Checkouts')) namespace = EventTypeNamespace(label=_('Checkouts'), name='checkouts')
event_document_auto_check_in = namespace.add_event_type( event_document_auto_check_in = namespace.add_event_type(
name='document_auto_check_in', label=_('Document automatically checked in'),
label=_('Document automatically checked in') name='document_auto_check_in'
) )
event_document_check_in = namespace.add_event_type( event_document_check_in = namespace.add_event_type(
name='document_check_in', label=_('Document checked in') label=_('Document checked in'), name='document_check_in'
) )
event_document_check_out = namespace.add_event_type( event_document_check_out = namespace.add_event_type(
name='document_check_out', label=_('Document checked out') label=_('Document checked out'), name='document_check_out'
) )
event_document_forceful_check_in = namespace.add_event_type( event_document_forceful_check_in = namespace.add_event_type(
name='document_forceful_check_in', label=_('Document forcefully checked in'),
label=_('Document forcefully checked in') name='document_forceful_check_in'
) )
+1 -1
View File
@@ -13,6 +13,6 @@ def handler_check_new_version_creation(sender, instance, **kwargs):
app_label='checkouts', model_name='NewVersionBlock' app_label='checkouts', model_name='NewVersionBlock'
) )
if NewVersionBlock.objects.is_blocked(instance.document) and not instance.pk: if NewVersionBlock.objects.is_blocked(document=instance.document) and not instance.pk:
# Block only new versions (no pk), not existing version being updated. # Block only new versions (no pk), not existing version being updated.
raise NewDocumentVersionNotAllowed raise NewDocumentVersionNotAllowed
+8
View File
@@ -2,6 +2,14 @@ from __future__ import absolute_import, unicode_literals
from mayan.apps.appearance.classes import Icon from mayan.apps.appearance.classes import Icon
icon_checkin_document = Icon(
driver_name='fontawesome-dual', primary_symbol='shopping-cart',
secondary_symbol='minus'
)
icon_checkout_document = Icon(
driver_name='fontawesome-dual', primary_symbol='shopping-cart',
secondary_symbol='plus'
)
icon_checkout_info = Icon(driver_name='fontawesome', symbol='shopping-cart') icon_checkout_info = Icon(driver_name='fontawesome', symbol='shopping-cart')
icon_dashboard_checkouts = Icon( icon_dashboard_checkouts = Icon(
driver_name='fontawesome', symbol='shopping-cart' driver_name='fontawesome', symbol='shopping-cart'
+8 -4
View File
@@ -4,7 +4,9 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.navigation import Link from mayan.apps.navigation import Link
from .icons import icon_checkout_info from .icons import (
icon_checkin_document, icon_checkout_document, icon_checkout_info
)
from .permissions import ( from .permissions import (
permission_document_checkin, permission_document_checkin_override, permission_document_checkin, permission_document_checkin_override,
permission_document_checkout permission_document_checkout
@@ -33,11 +35,13 @@ link_checkout_list = Link(
) )
link_checkout_document = Link( link_checkout_document = Link(
args='object.pk', condition=is_not_checked_out, args='object.pk', condition=is_not_checked_out,
permissions=(permission_document_checkout,), icon_class=icon_checkout_document,
text=_('Check out document'), view='checkouts:checkout_document', permissions=(permission_document_checkout,), text=_('Check out document'),
view='checkouts:checkout_document',
) )
link_checkin_document = Link( link_checkin_document = Link(
args='object.pk', condition=is_checked_out, permissions=( args='object.pk', condition=is_checked_out,
icon_class=icon_checkin_document, permissions=(
permission_document_checkin, permission_document_checkin_override permission_document_checkin, permission_document_checkin_override
), text=_('Check in document'), view='checkouts:checkin_document', ), text=_('Check in document'), view='checkouts:checkin_document',
+5 -5
View File
@@ -21,7 +21,7 @@ logger = logging.getLogger(__name__)
class DocumentCheckoutManager(models.Manager): class DocumentCheckoutManager(models.Manager):
def are_document_new_versions_allowed(self, document, user=None): def are_document_new_versions_allowed(self, document, user=None):
try: try:
checkout_info = self.document_checkout_info(document) checkout_info = self.document_checkout_info(document=document)
except DocumentNotCheckedOut: except DocumentNotCheckedOut:
return True return True
else: else:
@@ -34,7 +34,7 @@ class DocumentCheckoutManager(models.Manager):
raise DocumentNotCheckedOut raise DocumentNotCheckedOut
else: else:
if user: if user:
if self.get_document_checkout_info(document).user != user: if self.get_document_checkout_info(document=document).user != user:
event_document_forceful_check_in.commit( event_document_forceful_check_in.commit(
actor=user, target=document actor=user, target=document
) )
@@ -51,8 +51,8 @@ class DocumentCheckoutManager(models.Manager):
def checkout_document(self, document, expiration_datetime, user, block_new_version=True): def checkout_document(self, document, expiration_datetime, user, block_new_version=True):
return self.create( return self.create(
document=document, expiration_datetime=expiration_datetime, block_new_version=block_new_version, document=document,
user=user, block_new_version=block_new_version expiration_datetime=expiration_datetime, user=user
) )
def checked_out_documents(self): def checked_out_documents(self):
@@ -80,7 +80,7 @@ class DocumentCheckoutManager(models.Manager):
raise DocumentNotCheckedOut raise DocumentNotCheckedOut
def get_document_checkout_state(self, document): def get_document_checkout_state(self, document):
if self.is_document_checked_out(document): if self.is_document_checked_out(document=document):
return STATE_CHECKED_OUT return STATE_CHECKED_OUT
else: else:
return STATE_CHECKED_IN return STATE_CHECKED_IN
+3 -1
View File
@@ -73,7 +73,9 @@ class DocumentCheckout(models.Model):
super(DocumentCheckout, self).delete(*args, **kwargs) super(DocumentCheckout, self).delete(*args, **kwargs)
def get_absolute_url(self): def get_absolute_url(self):
return reverse('checkout:checkout_info', args=(self.document.pk,)) return reverse(
viewname='checkout:checkout_info', kwargs={'pk': self.document.pk}
)
def natural_key(self): def natural_key(self):
return self.document.natural_key() return self.document.natural_key()
+4 -4
View File
@@ -7,14 +7,14 @@ from mayan.apps.permissions import PermissionNamespace
namespace = PermissionNamespace(label=_('Document checkout'), name='checkouts') namespace = PermissionNamespace(label=_('Document checkout'), name='checkouts')
permission_document_checkin = namespace.add_permission( permission_document_checkin = namespace.add_permission(
name='checkin_document', label=_('Check in documents') label=_('Check in documents'), name='checkin_document'
) )
permission_document_checkin_override = namespace.add_permission( permission_document_checkin_override = namespace.add_permission(
name='checkin_document_override', label=_('Forcefully check in documents') label=_('Forcefully check in documents'), name='checkin_document_override'
) )
permission_document_checkout = namespace.add_permission( permission_document_checkout = namespace.add_permission(
name='checkout_document', label=_('Check out documents') label=_('Check out documents'), name='checkout_document'
) )
permission_document_checkout_detail_view = namespace.add_permission( permission_document_checkout_detail_view = namespace.add_permission(
name='checkout_detail_view', label=_('Check out details view') label=_('Check out details view'), name='checkout_detail_view'
) )
+3 -3
View File
@@ -5,9 +5,9 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.task_manager.classes import CeleryQueue from mayan.apps.task_manager.classes import CeleryQueue
queue_checkouts_periodic = CeleryQueue( queue_checkouts_periodic = CeleryQueue(
name='checkouts_periodic', label=_('Checkouts periodic'), transient=True label=_('Checkouts periodic'), name='checkouts_periodic', transient=True
) )
queue_checkouts_periodic.add_task_type( queue_checkouts_periodic.add_task_type(
name='mayan.apps.task_check_expired_check_outs', label=_('Check expired checkouts'),
label=_('Check expired checkouts') name='mayan.apps.task_check_expired_check_outs'
) )
+1 -1
View File
@@ -43,7 +43,7 @@ class NewDocumentCheckoutSerializer(serializers.ModelSerializer):
AccessControlList.objects.check_access( AccessControlList.objects.check_access(
permissions=permission_document_checkout, permissions=permission_document_checkout,
user=self.context['request'].user, obj=document obj=document, user=self.context['request'].user
) )
validated_data['document'] = document validated_data['document'] = document
+19 -11
View File
@@ -25,7 +25,7 @@ class CheckoutsAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_checkedout_document_view(self): def _request_checkedout_document_view(self):
return self.get( return self.get(
viewname='rest_api:checkedout-document-view', viewname='rest_api:checkedout-document-view',
args=(self.checkout.pk,) kwargs={'document_pk': self.checkout.pk}
) )
def _checkout_document(self): def _checkout_document(self):
@@ -44,7 +44,8 @@ class CheckoutsAPITestCase(DocumentTestMixin, BaseAPITestCase):
def test_checkedout_document_view_with_checkout_access(self): def test_checkedout_document_view_with_checkout_access(self):
self._checkout_document() self._checkout_document()
self.grant_access( self.grant_access(
permission=permission_document_checkout_detail_view, obj=self.document obj=self.document,
permission=permission_document_checkout_detail_view
) )
response = self._request_checkedout_document_view() response = self._request_checkedout_document_view()
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
@@ -52,7 +53,7 @@ class CheckoutsAPITestCase(DocumentTestMixin, BaseAPITestCase):
def test_checkedout_document_view_with_document_access(self): def test_checkedout_document_view_with_document_access(self):
self._checkout_document() self._checkout_document()
self.grant_access( self.grant_access(
permission=permission_document_view, obj=self.document obj=self.document, permission=permission_document_view
) )
response = self._request_checkedout_document_view() response = self._request_checkedout_document_view()
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
@@ -60,14 +61,17 @@ class CheckoutsAPITestCase(DocumentTestMixin, BaseAPITestCase):
def test_checkedout_document_view_with_access(self): def test_checkedout_document_view_with_access(self):
self._checkout_document() self._checkout_document()
self.grant_access( self.grant_access(
permission=permission_document_view, obj=self.document obj=self.document, permission=permission_document_view
) )
self.grant_access( self.grant_access(
permission=permission_document_checkout_detail_view, obj=self.document obj=self.document,
permission=permission_document_checkout_detail_view
) )
response = self._request_checkedout_document_view() response = self._request_checkedout_document_view()
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['document']['uuid'], force_text(self.document.uuid)) self.assertEqual(
response.data['document']['uuid'], force_text(self.document.uuid)
)
def _request_document_checkout_view(self): def _request_document_checkout_view(self):
return self.post( return self.post(
@@ -83,7 +87,9 @@ class CheckoutsAPITestCase(DocumentTestMixin, BaseAPITestCase):
self.assertEqual(DocumentCheckout.objects.count(), 0) self.assertEqual(DocumentCheckout.objects.count(), 0)
def test_document_checkout_with_access(self): def test_document_checkout_with_access(self):
self.grant_access(permission=permission_document_checkout, obj=self.document) self.grant_access(
obj=self.document, permission=permission_document_checkout
)
response = self._request_document_checkout_view() response = self._request_document_checkout_view()
self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual( self.assertEqual(
@@ -102,7 +108,7 @@ class CheckoutsAPITestCase(DocumentTestMixin, BaseAPITestCase):
def test_checkout_list_view_with_document_access(self): def test_checkout_list_view_with_document_access(self):
self._checkout_document() self._checkout_document()
self.grant_access( self.grant_access(
permission=permission_document_view, obj=self.document obj=self.document, permission=permission_document_view
) )
response = self._request_checkout_list_view() response = self._request_checkout_list_view()
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
@@ -111,7 +117,8 @@ class CheckoutsAPITestCase(DocumentTestMixin, BaseAPITestCase):
def test_checkout_list_view_with_checkout_access(self): def test_checkout_list_view_with_checkout_access(self):
self._checkout_document() self._checkout_document()
self.grant_access( self.grant_access(
permission=permission_document_checkout_detail_view, obj=self.document obj=self.document,
permission=permission_document_checkout_detail_view
) )
response = self._request_checkout_list_view() response = self._request_checkout_list_view()
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
@@ -120,10 +127,11 @@ class CheckoutsAPITestCase(DocumentTestMixin, BaseAPITestCase):
def test_checkout_list_view_with_access(self): def test_checkout_list_view_with_access(self):
self._checkout_document() self._checkout_document()
self.grant_access( self.grant_access(
permission=permission_document_view, obj=self.document obj=self.document, permission=permission_document_view
) )
self.grant_access( self.grant_access(
permission=permission_document_checkout_detail_view, obj=self.document obj=self.document,
permission=permission_document_checkout_detail_view
) )
response = self._request_checkout_list_view() response = self._request_checkout_list_view()
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
+14 -6
View File
@@ -23,7 +23,8 @@ from ..permissions import (
class DocumentCheckoutViewTestCase(GenericDocumentViewTestCase): class DocumentCheckoutViewTestCase(GenericDocumentViewTestCase):
def _request_document_check_in_view(self): def _request_document_check_in_view(self):
return self.post( return self.post(
viewname='checkouts:checkin_document', args=(self.document.pk,), viewname='checkouts:checkin_document',
kwargs={'document_pk': self.document.pk}
) )
def test_checkin_document_view_no_permission(self): def test_checkin_document_view_no_permission(self):
@@ -72,7 +73,8 @@ class DocumentCheckoutViewTestCase(GenericDocumentViewTestCase):
def _request_document_checkout_view(self): def _request_document_checkout_view(self):
return self.post( return self.post(
viewname='checkouts:checkout_document', args=(self.document.pk,), viewname='checkouts:checkout_document',
kwargs={'document_pk': self.document.pk},
data={ data={
'expiration_datetime_0': 2, 'expiration_datetime_0': 2,
'expiration_datetime_1': TIME_DELTA_UNIT_DAYS, 'expiration_datetime_1': TIME_DELTA_UNIT_DAYS,
@@ -125,7 +127,8 @@ class DocumentCheckoutViewTestCase(GenericDocumentViewTestCase):
self.assertTrue(self.document.is_checked_out()) self.assertTrue(self.document.is_checked_out())
response = self.post( response = self.post(
'sources:upload_version', args=(self.document.pk,), viewname='sources:upload_version',
kwargs={'document_pk': self.document.pk},
follow=True follow=True
) )
@@ -135,7 +138,8 @@ class DocumentCheckoutViewTestCase(GenericDocumentViewTestCase):
) )
response = self.get( response = self.get(
'documents:document_version_list', args=(self.document.pk,), viewname='documents:document_version_list',
kwargs={'document_pk': self.document.pk},
follow=True follow=True
) )
@@ -176,7 +180,9 @@ class DocumentCheckoutViewTestCase(GenericDocumentViewTestCase):
) )
response = self.post( response = self.post(
'checkouts:checkin_document', args=(self.document.pk,), follow=True viewname='checkouts:checkin_document',
kwargs={'document_pk': self.document.pk},
follow=True
) )
self.assertContains( self.assertContains(
@@ -212,7 +218,9 @@ class DocumentCheckoutViewTestCase(GenericDocumentViewTestCase):
permission_document_checkout_detail_view.stored_permission permission_document_checkout_detail_view.stored_permission
) )
response = self.post( response = self.post(
'checkouts:checkin_document', args=(self.document.pk,), follow=True viewname='checkouts:checkin_document',
kwargs={'document_pk': self.document.pk},
follow=True
) )
self.assertContains( self.assertContains(
+15 -11
View File
@@ -9,28 +9,32 @@ from .views import (
) )
urlpatterns = [ urlpatterns = [
url(r'^list/$', CheckoutListView.as_view(), name='checkout_list'),
url( url(
r'^(?P<pk>\d+)/check/out/$', CheckoutDocumentView.as_view(), regex=r'^documents/$', name='checkout_list',
name='checkout_document' view=CheckoutListView.as_view()
), ),
url( url(
r'^(?P<pk>\d+)/check/in/$', DocumentCheckinView.as_view(), regex=r'^documents/(?P<document_pk>\d+)/check/out/$',
name='checkin_document' name='checkout_document', view=CheckoutDocumentView.as_view()
), ),
url( url(
r'^(?P<pk>\d+)/check/info/$', CheckoutDetailView.as_view(), regex=r'^documents/(?P<document_pk>\d+)/check/in/$',
name='checkout_info' name='checkin_document', view=DocumentCheckinView.as_view()
),
url(
regex=r'^documents/(?P<document_pk>\d+)/check/info/$',
name='checkout_info', view=CheckoutDetailView.as_view()
), ),
] ]
api_urls = [ api_urls = [
url( url(
r'^checkouts/$', APICheckedoutDocumentListView.as_view(), regex=r'^checkouts/$', name='checkout-document-list',
name='checkout-document-list' view=APICheckedoutDocumentListView.as_view()
), ),
url( url(
r'^checkouts/(?P<pk>[0-9]+)/checkout_info/$', APICheckedoutDocumentView.as_view(), regex=r'^checkouts/(?P<document_pk>[0-9]+)/checkout_info/$',
name='checkedout-document-view' name='checkedout-document-view',
view=APICheckedoutDocumentView.as_view()
), ),
] ]
+39 -24
View File
@@ -28,11 +28,13 @@ class CheckoutDocumentView(SingleObjectCreateView):
form_class = DocumentCheckoutForm form_class = DocumentCheckoutForm
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
self.document = get_object_or_404(klass=Document, pk=self.kwargs['pk']) self.document = get_object_or_404(
klass=Document, pk=self.kwargs['document_pk']
)
AccessControlList.objects.check_access( AccessControlList.objects.check_access(
permissions=permission_document_checkout, user=request.user, obj=self.document, permissions=permission_document_checkout,
obj=self.document user=request.user
) )
return super( return super(
@@ -46,19 +48,24 @@ class CheckoutDocumentView(SingleObjectCreateView):
instance.document = self.document instance.document = self.document
instance.save() instance.save()
except DocumentAlreadyCheckedOut: except DocumentAlreadyCheckedOut:
messages.error(self.request, _('Document already checked out.')) messages.error(
request=self.request,
message=_('Document already checked out.')
)
except Exception as exception: except Exception as exception:
messages.error( messages.error(
self.request, request=self.request,
_('Error trying to check out document; %s') % exception message=_('Error trying to check out document; %s') % exception
) )
else: else:
messages.success( messages.success(
self.request, request=self.request,
_('Document "%s" checked out successfully.') % self.document message=_(
'Document "%s" checked out successfully.'
) % self.document
) )
return HttpResponseRedirect(self.get_success_url()) return HttpResponseRedirect(redirect_to=self.get_success_url())
def get_extra_context(self): def get_extra_context(self):
return { return {
@@ -67,15 +74,18 @@ class CheckoutDocumentView(SingleObjectCreateView):
} }
def get_post_action_redirect(self): def get_post_action_redirect(self):
return reverse('checkouts:checkout_info', args=(self.document.pk,)) return reverse(
viewname='checkouts:checkout_info',
kwargs={'document_pk': self.document.pk}
)
class CheckoutListView(DocumentListView): class CheckoutListView(DocumentListView):
def get_document_queryset(self): def get_document_queryset(self):
return AccessControlList.objects.filter_by_access( return AccessControlList.objects.filter_by_access(
permission=permission_document_checkout_detail_view, permission=permission_document_checkout_detail_view,
user=self.request.user, queryset=DocumentCheckout.objects.checked_out_documents(),
queryset=DocumentCheckout.objects.checked_out_documents() user=self.request.user
) )
def get_extra_context(self): def get_extra_context(self):
@@ -129,7 +139,7 @@ class CheckoutDetailView(SingleObjectDetailView):
} }
def get_object(self): def get_object(self):
return get_object_or_404(klass=Document, pk=self.kwargs['pk']) return get_object_or_404(klass=Document, pk=self.kwargs['document_pk'])
class DocumentCheckinView(ConfirmView): class DocumentCheckinView(ConfirmView):
@@ -151,38 +161,43 @@ class DocumentCheckinView(ConfirmView):
return context return context
def get_object(self): def get_object(self):
return get_object_or_404(klass=Document, pk=self.kwargs['pk']) return get_object_or_404(klass=Document, pk=self.kwargs['document_pk'])
def get_post_action_redirect(self): def get_post_action_redirect(self):
return reverse('checkouts:checkout_info', args=(self.get_object().pk,)) return reverse(
viewname='checkouts:checkout_info',
kwargs={'document_pk': self.get_object().pk}
)
def view_action(self): def view_action(self):
document = self.get_object() document = self.get_object()
if document.get_checkout_info().user == self.request.user: if document.get_checkout_info().user == self.request.user:
AccessControlList.objects.check_access( AccessControlList.objects.check_access(
permissions=permission_document_checkin, obj=document, permissions=permission_document_checkin,
user=self.request.user, obj=document user=self.request.user
) )
else: else:
AccessControlList.objects.check_access( AccessControlList.objects.check_access(
permissions=permission_document_checkin_override, obj=document, permissions=permission_document_checkin_override,
user=self.request.user, obj=document user=self.request.user
) )
try: try:
document.check_in(user=self.request.user) document.check_in(user=self.request.user)
except DocumentNotCheckedOut: except DocumentNotCheckedOut:
messages.error( messages.error(
self.request, _('Document has not been checked out.') request=self.request, message=_(
'Document has not been checked out.'
)
) )
except Exception as exception: except Exception as exception:
messages.error( messages.error(
self.request, request=self.request,
_('Error trying to check in document; %s') % exception message=_('Error trying to check in document; %s') % exception
) )
else: else:
messages.success( messages.success(
self.request, request=self.request,
_('Document "%s" checked in successfully.') % document message=_('Document "%s" checked in successfully.') % document
) )