Add cabinets and metadata control codes
Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
@@ -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,
|
||||
|
||||
31
mayan/apps/cabinets/control_codes.py
Normal file
31
mayan/apps/cabinets/control_codes.py
Normal 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)
|
||||
40
mayan/apps/cabinets/tests/test_control_codes.py
Normal file
40
mayan/apps/cabinets/tests/test_control_codes.py
Normal 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
|
||||
)
|
||||
@@ -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={
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
34
mayan/apps/metadata/control_codes.py
Normal file
34
mayan/apps/metadata/control_codes.py
Normal 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)
|
||||
42
mayan/apps/metadata/tests/test_control_codes.py
Normal file
42
mayan/apps/metadata/tests/test_control_codes.py
Normal 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
|
||||
)
|
||||
Reference in New Issue
Block a user