Add events for adding and removing documents to cabinets.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2017-08-25 18:20:44 -04:00
parent 7908019499
commit 1117980894
5 changed files with 78 additions and 3 deletions

View File

@@ -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)

View File

@@ -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')
)

View File

@@ -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

View File

@@ -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
)

View File

@@ -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: '