Finish conversion of the documents app to support organizations.
This commit is contained in:
@@ -103,7 +103,7 @@ class APIDocumentDownloadView(generics.RetrieveAPIView):
|
||||
'GET': (permission_document_download,)
|
||||
}
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = Document.objects.all()
|
||||
queryset = Document.on_organization.all()
|
||||
|
||||
def get_serializer_class(self):
|
||||
return None
|
||||
@@ -127,7 +127,7 @@ class APIDocumentListView(generics.ListCreateAPIView):
|
||||
mayan_object_permissions = {'GET': (permission_document_view,)}
|
||||
mayan_view_permissions = {'POST': (permission_document_create,)}
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = Document.objects.all()
|
||||
queryset = Document.on_organization.all()
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.request.method == 'GET':
|
||||
@@ -162,7 +162,7 @@ class APIDocumentVersionDownloadView(generics.RetrieveAPIView):
|
||||
'GET': (permission_document_download,)
|
||||
}
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentVersion.objects.all()
|
||||
queryset = DocumentVersion.on_organization.all()
|
||||
|
||||
def get_serializer_class(self):
|
||||
return None
|
||||
@@ -189,7 +189,7 @@ class APIDocumentView(generics.RetrieveUpdateDestroyAPIView):
|
||||
'DELETE': (permission_document_trash,)
|
||||
}
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = Document.objects.all()
|
||||
queryset = Document.on_organization.all()
|
||||
serializer_class = DocumentSerializer
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
@@ -233,7 +233,7 @@ class APIDocumentPageImageView(generics.RetrieveAPIView):
|
||||
}
|
||||
mayan_permission_attribute_check = 'document'
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentPage.objects.all()
|
||||
queryset = DocumentPage.on_organization.all()
|
||||
serializer_class = DocumentPageImageSerializer
|
||||
|
||||
|
||||
@@ -249,7 +249,7 @@ class APIDocumentPageView(generics.RetrieveUpdateAPIView):
|
||||
}
|
||||
mayan_permission_attribute_check = 'document'
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentPage.objects.all()
|
||||
queryset = DocumentPage.on_organization.all()
|
||||
serializer_class = DocumentPageSerializer
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
@@ -279,7 +279,7 @@ class APIDocumentTypeListView(generics.ListCreateAPIView):
|
||||
mayan_object_permissions = {'GET': (permission_document_type_view,)}
|
||||
mayan_view_permissions = {'POST': (permission_document_type_create,)}
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentType.objects.all()
|
||||
queryset = DocumentType.on_organization.all()
|
||||
serializer_class = DocumentTypeSerializer
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
@@ -309,7 +309,7 @@ class APIDocumentTypeView(generics.RetrieveUpdateDestroyAPIView):
|
||||
'DELETE': (permission_document_type_delete,)
|
||||
}
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentType.objects.all()
|
||||
queryset = DocumentType.on_organization.all()
|
||||
serializer_class = DocumentTypeSerializer
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
@@ -435,7 +435,7 @@ class APIDocumentVersionView(generics.RetrieveUpdateAPIView):
|
||||
}
|
||||
mayan_permission_attribute_check = 'document'
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentVersion.objects.all()
|
||||
queryset = DocumentVersion.on_organization.all()
|
||||
serializer_class = DocumentVersionSerializer
|
||||
|
||||
def patch(self, *args, **kwargs):
|
||||
@@ -463,7 +463,7 @@ class APIDocumentVersionRevertView(generics.GenericAPIView):
|
||||
}
|
||||
mayan_permission_attribute_check = 'document'
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentVersion.objects.all()
|
||||
queryset = DocumentVersion.on_organization.all()
|
||||
serializer_class = DocumentVersionRevertSerializer
|
||||
|
||||
def post(self, *args, **kwargs):
|
||||
|
||||
@@ -99,7 +99,7 @@ class DocumentsApp(MayanAppConfig):
|
||||
description=_(
|
||||
'Every uploaded document must be assigned a document type, '
|
||||
'it is the basic way Mayan EDMS categorizes documents.'
|
||||
), condition=lambda: not DocumentType.objects.exists(),
|
||||
), condition=lambda: not DocumentType.on_organization.exists(),
|
||||
view='documents:document_type_list'
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ def create_default_document_type(sender, **kwargs):
|
||||
app_label='documents', model_name='DocumentType'
|
||||
)
|
||||
|
||||
if not DocumentType.objects.count():
|
||||
if not DocumentType.on_organization.count():
|
||||
document_type = DocumentType.objects.create(
|
||||
label=DEFAULT_DOCUMENT_TYPE_LABEL
|
||||
)
|
||||
|
||||
@@ -132,6 +132,28 @@ class OrganizationDocumentVersionManager(models.Manager):
|
||||
)
|
||||
|
||||
|
||||
class OrganizationDocumentTypeFilenameManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
DocumentType = apps.get_model('documents', 'DocumentType')
|
||||
|
||||
return super(
|
||||
OrganizationDocumentTypeFilenameManager, self
|
||||
).get_queryset().filter(
|
||||
document_type__in=DocumentType.on_organization.all()
|
||||
)
|
||||
|
||||
|
||||
class OrganizationDocumentPage(models.Manager):
|
||||
def get_queryset(self):
|
||||
DocumentType = apps.get_model('documents', 'DocumentType')
|
||||
|
||||
return super(
|
||||
OrganizationDocumentPage, self
|
||||
).get_queryset().filter(
|
||||
document_version__document__document_type__in=DocumentType.on_organization.all()
|
||||
)
|
||||
|
||||
|
||||
class RecentDocumentManager(models.Manager):
|
||||
def add_document_for_user(self, user, document):
|
||||
if user.is_authenticated():
|
||||
@@ -155,7 +177,7 @@ class RecentDocumentManager(models.Manager):
|
||||
recentdocument__user=user,
|
||||
).order_by('-recentdocument__datetime_accessed')
|
||||
else:
|
||||
return document_model.objects.none()
|
||||
return Document.objects.none()
|
||||
|
||||
|
||||
class TrashedDocumentManager(models.Manager):
|
||||
@@ -164,6 +186,15 @@ class TrashedDocumentManager(models.Manager):
|
||||
|
||||
return super(
|
||||
TrashedDocumentManager, self
|
||||
).get_queryset().filter(in_trash=True)
|
||||
|
||||
|
||||
class OrganizationTrashedDocumentManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
DocumentType = apps.get_model('documents', 'DocumentType')
|
||||
|
||||
return super(
|
||||
OrganizationTrashedDocumentManager, self
|
||||
).get_queryset().filter(in_trash=True).filter(
|
||||
document_type__in=DocumentType.on_organization.all()
|
||||
)
|
||||
|
||||
@@ -38,6 +38,8 @@ from .literals import DEFAULT_DELETE_PERIOD, DEFAULT_DELETE_TIME_UNIT
|
||||
from .managers import (
|
||||
DocumentManager, DocumentTypeManager, NewVersionBlockManager,
|
||||
OrganizationDocumentManager, OrganizationDocumentVersionManager,
|
||||
OrganizationTrashedDocumentManager,
|
||||
OrganizationDocumentTypeFilenameManager, OrganizationDocumentPage,
|
||||
RecentDocumentManager, TrashedDocumentManager
|
||||
)
|
||||
from .permissions import permission_document_view
|
||||
@@ -339,6 +341,7 @@ class Document(models.Model):
|
||||
|
||||
class TrashedDocument(Document):
|
||||
objects = TrashedDocumentManager()
|
||||
on_organization = OrganizationTrashedDocumentManager()
|
||||
|
||||
class Meta:
|
||||
proxy = True
|
||||
@@ -643,6 +646,9 @@ class DocumentTypeFilename(models.Model):
|
||||
)
|
||||
enabled = models.BooleanField(default=True, verbose_name=_('Enabled'))
|
||||
|
||||
objects = models.Manager()
|
||||
on_organization = OrganizationDocumentTypeFilenameManager()
|
||||
|
||||
class Meta:
|
||||
ordering = ('filename',)
|
||||
unique_together = ('document_type', 'filename')
|
||||
@@ -667,6 +673,9 @@ class DocumentPage(models.Model):
|
||||
verbose_name=_('Page number')
|
||||
)
|
||||
|
||||
objects = models.Manager()
|
||||
on_organization = OrganizationDocumentPage()
|
||||
|
||||
def __str__(self):
|
||||
return _(
|
||||
'Page %(page_num)d out of %(total_pages)d of %(document)s'
|
||||
|
||||
@@ -130,7 +130,7 @@ class NewDocumentSerializer(serializers.ModelSerializer):
|
||||
file = serializers.FileField(write_only=True)
|
||||
|
||||
def save(self, _user):
|
||||
document = Document.objects.create(
|
||||
document = Document.on_organization.create(
|
||||
description=self.validated_data.get('description', ''),
|
||||
document_type=self.validated_data['document_type'],
|
||||
label=self.validated_data.get(
|
||||
|
||||
@@ -62,7 +62,7 @@ def task_get_document_page_image(document_page_id, *args, **kwargs):
|
||||
app_label='documents', model_name='DocumentPage'
|
||||
)
|
||||
|
||||
document_page = DocumentPage.objects.get(pk=document_page_id)
|
||||
document_page = DocumentPage.on_organization.get(pk=document_page_id)
|
||||
return document_page.get_image(*args, **kwargs)
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ def task_update_page_count(self, version_id):
|
||||
app_label='documents', model_name='DocumentVersion'
|
||||
)
|
||||
|
||||
document_version = DocumentVersion.objects.get(pk=version_id)
|
||||
document_version = DocumentVersion.on_organization.get(pk=version_id)
|
||||
try:
|
||||
document_version.update_page_count()
|
||||
except OperationalError as exception:
|
||||
@@ -95,12 +95,12 @@ def task_upload_new_document(self, document_type_id, shared_uploaded_file_id, de
|
||||
)
|
||||
|
||||
try:
|
||||
document_type = DocumentType.objects.get(pk=document_type_id)
|
||||
document_type = DocumentType.on_organization.get(pk=document_type_id)
|
||||
shared_file = SharedUploadedFile.objects.get(
|
||||
pk=shared_uploaded_file_id
|
||||
)
|
||||
if user_id:
|
||||
user = get_user_model().objects.get(pk=user_id)
|
||||
user = get_user_model().on_organization.get(pk=user_id)
|
||||
else:
|
||||
user = None
|
||||
|
||||
@@ -149,12 +149,12 @@ def task_upload_new_version(self, document_id, shared_uploaded_file_id, user_id,
|
||||
)
|
||||
|
||||
try:
|
||||
document = Document.objects.get(pk=document_id)
|
||||
document = Document.on_organization.get(pk=document_id)
|
||||
shared_file = SharedUploadedFile.objects.get(
|
||||
pk=shared_uploaded_file_id
|
||||
)
|
||||
if user_id:
|
||||
user = get_user_model().objects.get(pk=user_id)
|
||||
user = get_user_model().on_organization.get(pk=user_id)
|
||||
else:
|
||||
user = None
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ class DocumentTypeAPITestCase(APITestCase):
|
||||
def setUp(self):
|
||||
create_default_organization()
|
||||
|
||||
self.admin_user = get_user_model().create_superuser(
|
||||
self.admin_user = get_user_model().objects.create_superuser(
|
||||
username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL,
|
||||
password=TEST_ADMIN_PASSWORD
|
||||
)
|
||||
@@ -58,7 +58,8 @@ class DocumentTypeAPITestCase(APITestCase):
|
||||
|
||||
self.assertEqual(DocumentType.on_organization.all().count(), 1)
|
||||
self.assertEqual(
|
||||
DocumentType.objects.all().first().label, TEST_DOCUMENT_TYPE
|
||||
DocumentType.on_organization.all().first().label,
|
||||
TEST_DOCUMENT_TYPE
|
||||
)
|
||||
|
||||
def test_document_type_edit_via_put(self):
|
||||
|
||||
@@ -49,7 +49,7 @@ class DocumentsLinksTestCase(GenericDocumentViewTestCase):
|
||||
|
||||
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||
|
||||
acl = AccessControlList.objects.create(
|
||||
acl = AccessControlList.on_organization.create(
|
||||
content_object=self.document, role=self.role
|
||||
)
|
||||
acl.permissions.add(
|
||||
@@ -81,7 +81,7 @@ class DocumentsLinksTestCase(GenericDocumentViewTestCase):
|
||||
def test_document_version_download_link_with_permission(self):
|
||||
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||
|
||||
acl = AccessControlList.objects.create(
|
||||
acl = AccessControlList.on_organization.create(
|
||||
content_object=self.document, role=self.role
|
||||
)
|
||||
acl.permissions.add(permission_document_download.stored_permission)
|
||||
|
||||
@@ -64,12 +64,12 @@ class DocumentTestCase(TestCase):
|
||||
|
||||
# Trash the document
|
||||
self.document.delete()
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
|
||||
# Restore the document
|
||||
self.document.restore()
|
||||
self.assertEqual(TrashedDocument.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 0)
|
||||
self.assertEqual(Document.on_organization.count(), 1)
|
||||
|
||||
def test_trashing_documents(self):
|
||||
@@ -77,12 +77,12 @@ class DocumentTestCase(TestCase):
|
||||
|
||||
# Trash the document
|
||||
self.document.delete()
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
|
||||
# Delete the document
|
||||
self.document.delete()
|
||||
self.assertEqual(TrashedDocument.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 0)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
|
||||
def test_auto_trashing(self):
|
||||
@@ -101,12 +101,12 @@ class DocumentTestCase(TestCase):
|
||||
time.sleep(2)
|
||||
|
||||
self.assertEqual(Document.on_organization.count(), 1)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 0)
|
||||
|
||||
DocumentType.objects.check_trash_periods()
|
||||
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
|
||||
def test_auto_delete(self):
|
||||
"""
|
||||
@@ -120,12 +120,12 @@ class DocumentTestCase(TestCase):
|
||||
self.document_type.save()
|
||||
|
||||
self.assertEqual(Document.on_organization.count(), 1)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 0)
|
||||
|
||||
self.document.delete()
|
||||
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
|
||||
# Needed by MySQL as milliseconds value is not store in timestamp
|
||||
# field
|
||||
@@ -134,7 +134,7 @@ class DocumentTestCase(TestCase):
|
||||
DocumentType.objects.check_delete_periods()
|
||||
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 0)
|
||||
|
||||
|
||||
@override_settings(OCR_AUTO_OCR=False)
|
||||
@@ -259,7 +259,7 @@ class DocumentManagerTestCase(TestCase):
|
||||
|
||||
Document.objects.delete_stubs()
|
||||
|
||||
self.assertEqual(Document.objects.count(), 1)
|
||||
self.assertEqual(Document.on_organization.count(), 1)
|
||||
|
||||
document_stub.date_added = document_stub.date_added - timedelta(
|
||||
seconds=STUB_EXPIRATION_INTERVAL + 1
|
||||
@@ -268,7 +268,7 @@ class DocumentManagerTestCase(TestCase):
|
||||
|
||||
Document.objects.delete_stubs()
|
||||
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
|
||||
|
||||
@override_settings(OCR_AUTO_OCR=False)
|
||||
|
||||
@@ -49,7 +49,7 @@ class DocumentOrganizationViewTestCase(OrganizationViewTestCase):
|
||||
|
||||
def test_document_document_type_change_view(self):
|
||||
with self.settings(ORGANIZATION_ID=self.organization_b.pk):
|
||||
document_type = DocumentType.objects.create(
|
||||
document_type = DocumentType.on_organization.create(
|
||||
label=TEST_DOCUMENT_TYPE_2_LABEL
|
||||
)
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ from .literals import (
|
||||
class GenericDocumentViewTestCase(GenericViewTestCase):
|
||||
def setUp(self):
|
||||
super(GenericDocumentViewTestCase, self).setUp()
|
||||
self.document_type = DocumentType.objects.create(
|
||||
self.document_type = DocumentType.on_organization.create(
|
||||
label=TEST_DOCUMENT_TYPE
|
||||
)
|
||||
|
||||
@@ -111,7 +111,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.document.document_type, self.document_type
|
||||
)
|
||||
|
||||
document_type = DocumentType.objects.create(
|
||||
document_type = DocumentType.on_organization.create(
|
||||
label=TEST_DOCUMENT_TYPE_2_LABEL
|
||||
)
|
||||
|
||||
@@ -124,7 +124,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
self.assertEqual(
|
||||
Document.objects.get(pk=self.document.pk).document_type,
|
||||
Document.on_organization.get(pk=self.document.pk).document_type,
|
||||
self.document_type
|
||||
)
|
||||
|
||||
@@ -137,7 +137,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.document.document_type, self.document_type
|
||||
)
|
||||
|
||||
document_type = DocumentType.objects.create(
|
||||
document_type = DocumentType.on_organization.create(
|
||||
label=TEST_DOCUMENT_TYPE_2_LABEL
|
||||
)
|
||||
|
||||
@@ -156,7 +156,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.assertContains(response, text='success', status_code=200)
|
||||
|
||||
self.assertEqual(
|
||||
Document.objects.get(pk=self.document.pk).document_type,
|
||||
Document.on_organization.get(pk=self.document.pk).document_type,
|
||||
document_type
|
||||
)
|
||||
|
||||
@@ -166,10 +166,10 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
Document.objects.first().document_type, self.document_type
|
||||
Document.on_organization.first().document_type, self.document_type
|
||||
)
|
||||
|
||||
document_type = DocumentType.objects.create(
|
||||
document_type = DocumentType.on_organization.create(
|
||||
label=TEST_DOCUMENT_TYPE_2_LABEL
|
||||
)
|
||||
|
||||
@@ -184,7 +184,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
self.assertEqual(
|
||||
Document.objects.first().document_type, self.document_type
|
||||
Document.on_organization.first().document_type, self.document_type
|
||||
)
|
||||
|
||||
def test_document_multiple_document_type_change_view_with_permission(self):
|
||||
@@ -193,10 +193,10 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
Document.objects.first().document_type, self.document_type
|
||||
Document.on_organization.first().document_type, self.document_type
|
||||
)
|
||||
|
||||
document_type = DocumentType.objects.create(
|
||||
document_type = DocumentType.on_organization.create(
|
||||
label=TEST_DOCUMENT_TYPE_2_LABEL
|
||||
)
|
||||
|
||||
@@ -218,7 +218,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
self.assertEqual(
|
||||
Document.objects.first().document_type, document_type
|
||||
Document.on_organization.first().document_type, document_type
|
||||
)
|
||||
|
||||
def test_document_download_user_view(self):
|
||||
@@ -226,7 +226,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
|
||||
)
|
||||
|
||||
self.assertEqual(Document.objects.count(), 1)
|
||||
self.assertEqual(Document.on_organization.count(), 1)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_download', args=(self.document.pk,)
|
||||
@@ -258,7 +258,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
|
||||
)
|
||||
|
||||
self.assertEqual(Document.objects.count(), 1)
|
||||
self.assertEqual(Document.on_organization.count(), 1)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_multiple_download',
|
||||
@@ -292,7 +292,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
|
||||
)
|
||||
|
||||
self.assertEqual(Document.objects.count(), 1)
|
||||
self.assertEqual(Document.on_organization.count(), 1)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_version_download', args=(
|
||||
@@ -482,20 +482,20 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
def test_trash_can_empty_view_no_permissions(self):
|
||||
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||
self.document.delete()
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
|
||||
response = self.post('documents:trash_can_empty')
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
|
||||
def test_trash_can_empty_view_with_permission(self):
|
||||
self.login(
|
||||
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
|
||||
)
|
||||
self.document.delete()
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
|
||||
self.role.permissions.add(
|
||||
permission_empty_trash.stored_permission
|
||||
@@ -505,8 +505,8 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.assertContains(
|
||||
response, text='emptied successfully', status_code=200
|
||||
)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 0)
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 0)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
|
||||
def test_document_version_revert_no_permission(self):
|
||||
first_version = self.document.latest_version
|
||||
@@ -556,7 +556,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
|
||||
|
||||
self.document_type.delete()
|
||||
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_type_create',
|
||||
@@ -569,7 +569,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
self.assertEqual(DocumentType.objects.count(), 0)
|
||||
self.assertEqual(DocumentType.on_organization.count(), 0)
|
||||
|
||||
def test_document_type_create_view_with_permission(self):
|
||||
self.login(
|
||||
@@ -578,7 +578,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
|
||||
|
||||
self.document_type.delete()
|
||||
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
|
||||
self.role.permissions.add(
|
||||
permission_document_type_create.stored_permission
|
||||
@@ -598,9 +598,9 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
|
||||
|
||||
self.assertContains(response, text='successfully', status_code=200)
|
||||
|
||||
self.assertEqual(DocumentType.objects.count(), 1)
|
||||
self.assertEqual(DocumentType.on_organization.count(), 1)
|
||||
self.assertEqual(
|
||||
DocumentType.objects.first().label, TEST_DOCUMENT_TYPE
|
||||
DocumentType.on_organization.first().label, TEST_DOCUMENT_TYPE
|
||||
)
|
||||
|
||||
def test_document_type_delete_view_no_permission(self):
|
||||
@@ -614,7 +614,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(DocumentType.objects.count(), 1)
|
||||
self.assertEqual(DocumentType.on_organization.count(), 1)
|
||||
|
||||
def test_document_type_delete_view_with_permission(self):
|
||||
self.login(
|
||||
@@ -634,7 +634,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
self.assertContains(response, 'successfully', status_code=200)
|
||||
self.assertEqual(DocumentType.objects.count(), 0)
|
||||
self.assertEqual(DocumentType.on_organization.count(), 0)
|
||||
|
||||
def test_document_type_edit_view_no_permission(self):
|
||||
self.login(
|
||||
@@ -654,7 +654,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.assertEqual(response.status_code, 403)
|
||||
|
||||
self.assertEqual(
|
||||
DocumentType.objects.get(pk=self.document_type.pk).label,
|
||||
DocumentType.on_organization.get(pk=self.document_type.pk).label,
|
||||
TEST_DOCUMENT_TYPE
|
||||
)
|
||||
|
||||
@@ -683,7 +683,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
|
||||
self.assertContains(response, 'successfully', status_code=200)
|
||||
|
||||
self.assertEqual(
|
||||
DocumentType.objects.get(pk=self.document_type.pk).label,
|
||||
DocumentType.on_organization.get(pk=self.document_type.pk).label,
|
||||
TEST_DOCUMENT_TYPE_EDITED_LABEL
|
||||
)
|
||||
|
||||
@@ -730,21 +730,21 @@ class TrashedDocumentTestCase(GenericDocumentViewTestCase):
|
||||
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
|
||||
)
|
||||
self.document.delete()
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_restore', args=(self.document.pk,)
|
||||
)
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
|
||||
def test_document_restore_view_with_permission(self):
|
||||
self.login(
|
||||
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
|
||||
)
|
||||
self.document.delete()
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
self.role.permissions.add(
|
||||
permission_document_restore.stored_permission
|
||||
)
|
||||
@@ -753,8 +753,8 @@ class TrashedDocumentTestCase(GenericDocumentViewTestCase):
|
||||
follow=True
|
||||
)
|
||||
self.assertContains(response, text='restored', status_code=200)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 0)
|
||||
self.assertEqual(Document.objects.count(), 1)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 0)
|
||||
self.assertEqual(Document.on_organization.count(), 1)
|
||||
|
||||
def test_document_trash_no_permissions(self):
|
||||
self.login(
|
||||
@@ -766,8 +766,8 @@ class TrashedDocumentTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 0)
|
||||
self.assertEqual(Document.objects.count(), 1)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 0)
|
||||
self.assertEqual(Document.on_organization.count(), 1)
|
||||
|
||||
def test_document_trash_with_permissions(self):
|
||||
self.login(
|
||||
@@ -784,8 +784,8 @@ class TrashedDocumentTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
self.assertContains(response, text='success', status_code=200)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
|
||||
def test_document_delete_no_permissions(self):
|
||||
self.login(
|
||||
@@ -793,15 +793,15 @@ class TrashedDocumentTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
self.document.delete()
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
|
||||
response = self.post(
|
||||
'documents:document_delete', args=(self.document.pk,),
|
||||
)
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
|
||||
def test_document_delete_with_permissions(self):
|
||||
self.login(
|
||||
@@ -809,8 +809,8 @@ class TrashedDocumentTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
self.document.delete()
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 1)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 1)
|
||||
|
||||
self.role.permissions.add(
|
||||
permission_document_delete.stored_permission
|
||||
@@ -822,8 +822,8 @@ class TrashedDocumentTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
self.assertContains(response, text='success', status_code=200)
|
||||
self.assertEqual(TrashedDocument.objects.count(), 0)
|
||||
self.assertEqual(Document.objects.count(), 0)
|
||||
self.assertEqual(TrashedDocument.on_organization.count(), 0)
|
||||
self.assertEqual(Document.on_organization.count(), 0)
|
||||
|
||||
def test_deleted_document_list_view_no_permissions(self):
|
||||
self.document.delete()
|
||||
|
||||
@@ -162,10 +162,12 @@ class DocumentRestoreManyView(MultipleInstanceActionMixin, DocumentRestoreView):
|
||||
extra_context = {
|
||||
'title': _('Restore the selected documents?')
|
||||
}
|
||||
model = TrashedDocument
|
||||
success_message = '%(count)d document restored.'
|
||||
success_message_plural = '%(count)d documents restored.'
|
||||
|
||||
def get_queryset(self):
|
||||
return TrashedDocument.on_organization.all()
|
||||
|
||||
|
||||
class DocumentPageListView(SingleObjectListView):
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
@@ -614,7 +616,7 @@ class EmptyTrashCanView(ConfirmView):
|
||||
view_permission = permission_empty_trash
|
||||
|
||||
def view_action(self):
|
||||
for deleted_document in TrashedDocument.objects.all():
|
||||
for deleted_document in TrashedDocument.on_organization.all():
|
||||
deleted_document.delete()
|
||||
|
||||
messages.success(self.request, _('Trash emptied successfully'))
|
||||
@@ -649,7 +651,7 @@ class TrashedDocumentListView(DocumentListView):
|
||||
permission_document_view, self.request.user, queryset
|
||||
)
|
||||
|
||||
return TrashedDocument.objects.filter(
|
||||
return TrashedDocument.on_organization.filter(
|
||||
pk__in=queryset.values_list('pk', flat=True)
|
||||
)
|
||||
|
||||
@@ -660,8 +662,11 @@ class TrashedDocumentDeleteView(ConfirmView):
|
||||
}
|
||||
|
||||
def object_action(self, instance):
|
||||
# Special case, we need to check the original document for the delete
|
||||
# permission. Don't use .on_organization manager as it filters
|
||||
# trashed documents and we don't want that.
|
||||
source_document = get_object_or_404(
|
||||
Document.on_organization, pk=instance.pk
|
||||
Document, pk=instance.pk
|
||||
)
|
||||
|
||||
try:
|
||||
@@ -676,7 +681,9 @@ class TrashedDocumentDeleteView(ConfirmView):
|
||||
instance.delete()
|
||||
|
||||
def view_action(self):
|
||||
instance = get_object_or_404(TrashedDocument, pk=self.kwargs['pk'])
|
||||
instance = get_object_or_404(
|
||||
TrashedDocument.on_organization, pk=self.kwargs['pk']
|
||||
)
|
||||
self.object_action(instance=instance)
|
||||
messages.success(
|
||||
self.request, _('Document: %(document)s deleted.') % {
|
||||
@@ -689,10 +696,12 @@ class TrashedDocumentDeleteManyView(MultipleInstanceActionMixin, TrashedDocument
|
||||
extra_context = {
|
||||
'title': _('Delete the selected documents?')
|
||||
}
|
||||
model = TrashedDocument
|
||||
success_message = '%(count)d document deleted.'
|
||||
success_message_plural = '%(count)d documents deleted.'
|
||||
|
||||
def get_queryset(self):
|
||||
return TrashedDocument.on_organization.all()
|
||||
|
||||
|
||||
def document_document_type_edit(request, document_id=None, document_id_list=None):
|
||||
post_action_redirect = None
|
||||
@@ -847,11 +856,12 @@ def document_download(request, document_id=None, document_id_list=None, document
|
||||
)
|
||||
)
|
||||
|
||||
# TODO: check organization
|
||||
if document_version_pk:
|
||||
queryset = DocumentVersion.objects.filter(pk=document_version_pk)
|
||||
queryset = DocumentVersion.on_organization.filter(
|
||||
pk=document_version_pk
|
||||
)
|
||||
else:
|
||||
queryset = DocumentVersion.objects.filter(
|
||||
queryset = DocumentVersion.on_organization.filter(
|
||||
pk__in=[document.latest_version.pk for document in documents]
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user