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:
@@ -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
|
||||||
|
)
|
||||||
|
|||||||
@@ -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'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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()
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user