diff --git a/mayan/apps/cabinets/apps.py b/mayan/apps/cabinets/apps.py index cc609b40b4..5a45775ed3 100644 --- a/mayan/apps/cabinets/apps.py +++ b/mayan/apps/cabinets/apps.py @@ -37,6 +37,7 @@ class CabinetsApp(MayanAppConfig): def ready(self): super(CabinetsApp, self).ready() + from actstream import registry Document = apps.get_model( app_label='documents', model_name='Document' @@ -126,3 +127,5 @@ class CabinetsApp(MayanAppConfig): 'cabinets:document_cabinet_remove' ) ) + + registry.register(Cabinet) diff --git a/mayan/apps/cabinets/events.py b/mayan/apps/cabinets/events.py new file mode 100644 index 0000000000..63ed2fb8fd --- /dev/null +++ b/mayan/apps/cabinets/events.py @@ -0,0 +1,14 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from events.classes import Event + +event_cabinets_add_document = Event( + name='cabinets_add_document', + label=_('Document added to cabinet') +) +event_cabinets_remove_document = Event( + name='cabinets_remove_document', + label=_('Document removed from cabinet') +) diff --git a/mayan/apps/cabinets/models.py b/mayan/apps/cabinets/models.py index 20d5162a03..d2d54598e6 100644 --- a/mayan/apps/cabinets/models.py +++ b/mayan/apps/cabinets/models.py @@ -13,6 +13,7 @@ from acls.models import AccessControlList from documents.models import Document from documents.permissions import permission_document_view +from .events import event_cabinets_add_document, event_cabinets_remove_document from .search import cabinet_search # NOQA @@ -39,6 +40,12 @@ class Cabinet(MPTTModel): def __str__(self): return self.get_full_path() + def add_document(self, document, user=None): + self.documents.add(document) + event_cabinets_add_document.commit( + action_object=self, actor=user, target=document + ) + def get_absolute_url(self): return reverse('cabinets:cabinet_view', args=(self.pk,)) @@ -57,6 +64,12 @@ class Cabinet(MPTTModel): return ' / '.join(result) + def remove_document(self, document, user=None): + self.documents.remove(document) + event_cabinets_remove_document.commit( + action_object=self, actor=user, target=document + ) + def validate_unique(self, exclude=None): # Explicit validation of uniqueness of parent+label as the provided # unique_together check in Meta is not working for all 100% cases diff --git a/mayan/apps/cabinets/tests/test_events.py b/mayan/apps/cabinets/tests/test_events.py new file mode 100644 index 0000000000..ff4cc0523e --- /dev/null +++ b/mayan/apps/cabinets/tests/test_events.py @@ -0,0 +1,42 @@ +from __future__ import unicode_literals + +from actstream.models import Action + +from documents.tests.test_models import GenericDocumentTestCase + +from ..events import ( + event_cabinets_add_document, event_cabinets_remove_document +) +from ..models import Cabinet + +from .literals import TEST_CABINET_LABEL + + +class CabinetsEventsTestCase(GenericDocumentTestCase): + def setUp(self): + super(CabinetsEventsTestCase, self).setUp() + self._create_cabinet() + + def _create_cabinet(self): + self.cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL) + + def test_document_cabinet_add_event(self): + Action.objects.all().delete() + self.cabinet.add_document(document=self.document) + + self.assertEqual(Action.objects.last().target, self.document) + self.assertEqual( + Action.objects.last().verb, + event_cabinets_add_document.name + ) + + def test_document_cabinet_remove_event(self): + self.cabinet.add_document(document=self.document) + Action.objects.all().delete() + self.cabinet.remove_document(document=self.document) + + self.assertEqual(Action.objects.first().target, self.document) + self.assertEqual( + Action.objects.first().verb, + event_cabinets_remove_document.name + ) diff --git a/mayan/apps/cabinets/views.py b/mayan/apps/cabinets/views.py index bd879cb041..6b418ca7ac 100644 --- a/mayan/apps/cabinets/views.py +++ b/mayan/apps/cabinets/views.py @@ -25,7 +25,6 @@ from .permissions import ( ) from .widgets import jstree_data - logger = logging.getLogger(__name__) @@ -257,7 +256,9 @@ class DocumentAddToCabinetView(MultipleObjectFormActionView): } ) else: - cabinet.documents.add(instance) + cabinet.add_document( + document=instance, user=self.request.user + ) messages.success( self.request, _( 'Document: %(document)s added to cabinet: ' @@ -343,7 +344,9 @@ class DocumentRemoveFromCabinetView(MultipleObjectFormActionView): } ) else: - cabinet.documents.remove(instance) + cabinet.remove_document( + document=instance, user=self.request.user + ) messages.success( self.request, _( 'Document: %(document)s removed from cabinet: '