Add cabinets and metadata control codes

Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-09-06 03:25:56 -04:00
parent 661301f057
commit 0e35cca704
8 changed files with 162 additions and 5 deletions

View File

@@ -18,6 +18,7 @@ from mayan.apps.events.permissions import permission_events_view
from mayan.apps.documents.search import document_page_search, document_search
from mayan.apps.navigation.classes import SourceColumn
from .control_codes import * # NOQA
from .dependencies import * # NOQA
from .events import (
event_cabinet_edited, event_cabinet_add_document,

View File

@@ -0,0 +1,31 @@
from __future__ import unicode_literals
from django.apps import apps
from mayan.apps.control_codes.classes import ControlCode
__all__ = ('ControlCodeCabinetDocumentAdd',)
class ControlCodeCabinetDocumentAdd(ControlCode):
arguments = ('label_path',)
label = 'Add document to cabinet'
name = 'cabinet_document_add_v1'
def execute(self, context):
Cabinet = apps.get_model(
app_label='cabinets', model_name='Cabinet'
)
document = context['document_page'].document
user = context.get('user', None)
queryset = Cabinet.objects.all()
for label in self.kwargs['label_path']:
cabinet = queryset.get(label=label)
queryset = cabinet.get_children()
cabinet.document_add(document=document, _user=user)
ControlCode.register(control_code=ControlCodeCabinetDocumentAdd)

View File

@@ -0,0 +1,40 @@
from __future__ import unicode_literals
from mayan.apps.documents.tests.base import GenericDocumentTestCase
from mayan.apps.storage.utils import fs_cleanup, mkstemp
from ..control_codes import ControlCodeCabinetDocumentAdd
from .mixins import CabinetTestMixin, CabinetViewTestMixin
class ControlCodeCabinetDocumentAddTestCase(
CabinetTestMixin, CabinetViewTestMixin,
GenericDocumentTestCase
):
auto_upload_document = False
def setUp(self):
super(ControlCodeCabinetDocumentAddTestCase, self).setUp()
self.test_document_path = mkstemp()[1]
self._create_test_cabinet()
self._create_test_cabinet_child()
def tearDown(self):
fs_cleanup(filename=self.test_document_path)
super(ControlCodeCabinetDocumentAddTestCase, self).tearDown()
def test_control_code(self):
with open(self.test_document_path, mode='wb') as file_object:
control_code = ControlCodeCabinetDocumentAdd(
label_path=(
self.test_cabinet.label, self.test_cabinet_child.label
),
)
control_code.get_image().save(file_object)
self.upload_document()
self.assertEqual(
self.test_document.cabinets.first(), self.test_cabinet_child
)

View File

@@ -14,7 +14,9 @@ from .literals import TEST_CABINET_LABEL, TEST_CABINET_LABEL_EDITED
from .mixins import CabinetTestMixin, CabinetViewTestMixin
class CabinetViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericViewTestCase):
class CabinetViewTestCase(
CabinetTestMixin, CabinetViewTestMixin, GenericViewTestCase
):
def test_cabinet_create_view_no_permission(self):
response = self._request_test_cabinet_create_view()
self.assertEqual(response.status_code, 403)
@@ -105,7 +107,9 @@ class CabinetViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericViewTes
)
class CabinetChildViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericViewTestCase):
class CabinetChildViewTestCase(
CabinetTestMixin, CabinetViewTestMixin, GenericViewTestCase
):
def setUp(self):
super(CabinetChildViewTestCase, self).setUp()
self._create_test_cabinet()
@@ -157,7 +161,9 @@ class CabinetChildViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericVi
self.assertEqual(Cabinet.objects.count(), cabinet_count - 1)
class CabinetDocumentViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericDocumentViewTestCase):
class CabinetDocumentViewTestCase(
CabinetTestMixin, CabinetViewTestMixin, GenericDocumentViewTestCase
):
def _add_document_to_cabinet(self):
return self.post(
viewname='cabinets:document_cabinet_add', kwargs={

View File

@@ -8,12 +8,14 @@ __all__ = ('ControlCodeAttributeEdit',)
class ControlCodeAttributeEdit(ControlCode):
arguments = ('name', 'value')
label = 'Change document property'
name = 'document_property_edit'
name = 'document_property_edit_v1'
def execute(self, context):
document = context['document_page'].document
user = context.get('user', None)
setattr(document, self.kwargs['name'], self.kwargs['value'])
document.save()
document.save(_user=user)
ControlCode.register(control_code=ControlCodeAttributeEdit)

View File

@@ -26,6 +26,7 @@ from mayan.apps.events.permissions import permission_events_view
from mayan.apps.navigation.classes import SourceColumn
from .classes import DocumentMetadataHelper
from .control_codes import * # NOQA
from .dependencies import * # NOQA
from .events import (
event_document_metadata_added, event_document_metadata_edited,

View File

@@ -0,0 +1,34 @@
from __future__ import unicode_literals
from django.apps import apps
from mayan.apps.control_codes.classes import ControlCode
__all__ = ('ControlCodeDocumentMetadataAdd',)
class ControlCodeDocumentMetadataAdd(ControlCode):
arguments = ('name', 'value')
label = 'Add document metadata'
name = 'document_metadata_add_v1'
def execute(self, context):
DocumentMetadata = apps.get_model(
app_label='metadata', model_name='DocumentMetadata'
)
MetadataType = apps.get_model(
app_label='metadata', model_name='MetadataType'
)
document = context['document_page'].document
user = context.get('user', None)
metadata_type = MetadataType.objects.get(name=self.kwargs['name'])
document_metadata = DocumentMetadata(
document=document, metadata_type=metadata_type,
value=self.kwargs['value']
)
document_metadata.save(_user=user)
ControlCode.register(control_code=ControlCodeDocumentMetadataAdd)

View File

@@ -0,0 +1,42 @@
from __future__ import unicode_literals
from mayan.apps.documents.tests.base import GenericDocumentTestCase
from mayan.apps.storage.utils import fs_cleanup, mkstemp
from ..control_codes import ControlCodeDocumentMetadataAdd
from .literals import TEST_DOCUMENT_METADATA_VALUE_2
from .mixins import DocumentMetadataViewTestMixin, MetadataTypeTestMixin
class ControlCodeDocumentMetadataAddTestCase(
DocumentMetadataViewTestMixin, MetadataTypeTestMixin,
GenericDocumentTestCase
):
auto_upload_document = False
def setUp(self):
super(ControlCodeDocumentMetadataAddTestCase, self).setUp()
self.test_document_path = mkstemp()[1]
self._create_test_metadata_type()
self.test_document_type.metadata.create(
metadata_type=self.test_metadata_type
)
def tearDown(self):
fs_cleanup(filename=self.test_document_path)
super(ControlCodeDocumentMetadataAddTestCase, self).tearDown()
def test_control_code(self):
with open(self.test_document_path, mode='wb') as file_object:
control_code = ControlCodeDocumentMetadataAdd(
name=self.test_metadata_type.name,
value=TEST_DOCUMENT_METADATA_VALUE_2
)
control_code.get_image().save(file_object)
self.upload_document()
self.assertEqual(
self.test_document.metadata.first().value, TEST_DOCUMENT_METADATA_VALUE_2
)