Enable smart links from the documents types side

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-04-29 01:08:52 -04:00
parent aee3645c7a
commit cfe623e093
8 changed files with 93 additions and 21 deletions

View File

@@ -200,6 +200,8 @@
* Fix smart link ACL support. * Fix smart link ACL support.
* Update JavaScript downloader to work with Python 3. * Update JavaScript downloader to work with Python 3.
* Improve speed of the NPM package hash verification. * Improve speed of the NPM package hash verification.
* Add view to enable smart links for documents types
from the document type side.
3.1.11 (2019-04-XX) 3.1.11 (2019-04-XX)
=================== ===================

View File

@@ -232,6 +232,8 @@ Other changes
* Fix smart link ACL support. * Fix smart link ACL support.
* Update JavaScript downloader to work with Python 3. * Update JavaScript downloader to work with Python 3.
* Improve speed of the NPM package hash verification. * Improve speed of the NPM package hash verification.
* Add view to enable smart links for documents types
from the document type side.
Removals Removals
-------- --------

View File

@@ -19,12 +19,13 @@ from mayan.apps.navigation.classes import SourceColumn
from .events import event_smart_link_created, event_smart_link_edited from .events import event_smart_link_created, event_smart_link_edited
from .links import ( from .links import (
link_smart_link_create, link_smart_link_condition_create, link_document_type_smart_links, link_smart_link_create,
link_smart_link_condition_delete, link_smart_link_condition_edit, link_smart_link_condition_create, link_smart_link_condition_delete,
link_smart_link_condition_list, link_smart_link_delete, link_smart_link_condition_edit, link_smart_link_condition_list,
link_smart_link_document_types, link_smart_link_edit, link_smart_link_delete, link_smart_link_document_types,
link_smart_link_instance_view, link_smart_link_instances_for_document, link_smart_link_edit, link_smart_link_instance_view,
link_smart_link_list, link_smart_link_setup link_smart_link_instances_for_document, link_smart_link_list,
link_smart_link_setup
) )
from .permissions import ( from .permissions import (
permission_smart_link_delete, permission_smart_link_edit, permission_smart_link_delete, permission_smart_link_edit,
@@ -47,6 +48,9 @@ class LinkingApp(MayanAppConfig):
Document = apps.get_model( Document = apps.get_model(
app_label='documents', model_name='Document' app_label='documents', model_name='Document'
) )
DocumentType = apps.get_model(
app_label='documents', model_name='DocumentType'
)
ResolvedSmartLink = self.get_model(model_name='ResolvedSmartLink') ResolvedSmartLink = self.get_model(model_name='ResolvedSmartLink')
SmartLink = self.get_model(model_name='SmartLink') SmartLink = self.get_model(model_name='SmartLink')
@@ -106,6 +110,9 @@ class LinkingApp(MayanAppConfig):
link_smart_link_condition_list, link_smart_link_condition_list,
), sources=(SmartLink,) ), sources=(SmartLink,)
) )
menu_list_facet.bind_links(
links=(link_document_type_smart_links,), sources=(DocumentType,)
)
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_smart_link_condition_edit, link_smart_link_condition_edit,

View File

@@ -3,6 +3,10 @@ from __future__ import absolute_import, unicode_literals
from mayan.apps.appearance.classes import Icon from mayan.apps.appearance.classes import Icon
from mayan.apps.documents.icons import icon_document_type from mayan.apps.documents.icons import icon_document_type
icon_smart_link = Icon(driver_name='fontawesome', symbol='link')
icon_document_type_smart_links = icon_smart_link
icon_smart_link_condition = Icon(driver_name='fontawesome', symbol='code') icon_smart_link_condition = Icon(driver_name='fontawesome', symbol='code')
icon_smart_link_condition_create = Icon( icon_smart_link_condition_create = Icon(
driver_name='fontawesome-dual', primary_symbol='code', driver_name='fontawesome-dual', primary_symbol='code',
@@ -25,5 +29,5 @@ icon_smart_link_edit = Icon(driver_name='fontawesome', symbol='pencil-alt')
icon_smart_link_instances_for_document = Icon( icon_smart_link_instances_for_document = Icon(
driver_name='fontawesome', symbol='link' driver_name='fontawesome', symbol='link'
) )
icon_smart_link_setup = Icon(driver_name='fontawesome', symbol='link') icon_smart_link_setup = icon_smart_link
icon_smart_link_list = Icon(driver_name='fontawesome', symbol='link') icon_smart_link_list = icon_smart_link

View File

@@ -2,18 +2,24 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from mayan.apps.documents.permissions import permission_document_view from mayan.apps.documents.permissions import (
permission_document_type_edit, permission_document_view
)
from mayan.apps.navigation.classes import Link from mayan.apps.navigation.classes import Link
#from .icons import (
# icon_smart_link_condition_create, icon_smart_link_create,
# icon_smart_link_instances_for_document, icon_smart_link_setup
#)
from .permissions import ( from .permissions import (
permission_smart_link_create, permission_smart_link_delete, permission_smart_link_create, permission_smart_link_delete,
permission_smart_link_edit, permission_smart_link_view permission_smart_link_edit, permission_smart_link_view
) )
link_document_type_smart_links = Link(
args='resolved_object.pk',
icon_class_path='mayan.apps.linking.icons.icon_document_type_smart_links',
permissions=(permission_document_type_edit,), text=_('Smart links'),
view='linking:document_type_smart_links',
)
link_smart_link_condition_create = Link( link_smart_link_condition_create = Link(
args='object.pk', args='object.pk',
icon_class_path='mayan.apps.linking.icons.icon_smart_link_condition_create', icon_class_path='mayan.apps.linking.icons.icon_smart_link_condition_create',

View File

@@ -36,7 +36,8 @@ class SmartLink(models.Model):
) )
enabled = models.BooleanField(default=True, verbose_name=_('Enabled')) enabled = models.BooleanField(default=True, verbose_name=_('Enabled'))
document_types = models.ManyToManyField( document_types = models.ManyToManyField(
to=DocumentType, verbose_name=_('Document types') related_name='smart_links', to=DocumentType,
verbose_name=_('Document types')
) )
objects = SmartLinkManager() objects = SmartLinkManager()
@@ -212,4 +213,3 @@ class SmartLinkCondition(models.Model):
) )
get_full_label.short_description = _('Full label') get_full_label.short_description = _('Full label')

View File

@@ -8,11 +8,12 @@ from .api_views import (
APISmartLinkConditionListView, APISmartLinkConditionView APISmartLinkConditionListView, APISmartLinkConditionView
) )
from .views import ( from .views import (
DocumentSmartLinkListView, ResolvedSmartLinkView, DocumentSmartLinkListView, DocumentTypeSmartLinksView,
SetupSmartLinkDocumentTypesView, SmartLinkConditionListView, ResolvedSmartLinkView, SetupSmartLinkDocumentTypesView,
SmartLinkConditionCreateView, SmartLinkConditionEditView, SmartLinkConditionListView, SmartLinkConditionCreateView,
SmartLinkConditionDeleteView, SmartLinkCreateView, SmartLinkDeleteView, SmartLinkConditionEditView, SmartLinkConditionDeleteView,
SmartLinkEditView, SmartLinkListView SmartLinkCreateView, SmartLinkDeleteView, SmartLinkEditView,
SmartLinkListView
) )
urlpatterns = [ urlpatterns = [
@@ -25,7 +26,11 @@ urlpatterns = [
regex=r'^document/(?P<document_pk>\d+)/(?P<smart_link_pk>\d+)/$', regex=r'^document/(?P<document_pk>\d+)/(?P<smart_link_pk>\d+)/$',
view=ResolvedSmartLinkView.as_view(), name='smart_link_instance_view' view=ResolvedSmartLinkView.as_view(), name='smart_link_instance_view'
), ),
url(
regex=r'^document_types/(?P<pk>\d+)/smart_links/$',
view=DocumentTypeSmartLinksView.as_view(),
name='document_type_smart_links'
),
url( url(
regex=r'^setup/list/$', view=SmartLinkListView.as_view(), regex=r'^setup/list/$', view=SmartLinkListView.as_view(),
name='smart_link_list' name='smart_link_list'

View File

@@ -14,12 +14,14 @@ from mayan.apps.common.generics import (
AddRemoveView, SingleObjectCreateView, SingleObjectDeleteView, AddRemoveView, SingleObjectCreateView, SingleObjectDeleteView,
SingleObjectEditView, SingleObjectListView SingleObjectEditView, SingleObjectListView
) )
from mayan.apps.documents.events import event_document_type_edited
from mayan.apps.documents.models import Document, DocumentType from mayan.apps.documents.models import Document, DocumentType
from mayan.apps.documents.permissions import ( from mayan.apps.documents.permissions import (
permission_document_type_edit, permission_document_view permission_document_type_edit, permission_document_view
) )
from mayan.apps.documents.views import DocumentListView from mayan.apps.documents.views import DocumentListView
from .events import event_smart_link_edited
from .forms import SmartLinkConditionForm, SmartLinkForm from .forms import SmartLinkConditionForm, SmartLinkForm
from .icons import icon_smart_link_setup, icon_smart_link_condition from .icons import icon_smart_link_setup, icon_smart_link_condition
from .links import link_smart_link_create, link_smart_link_condition_create from .links import link_smart_link_create, link_smart_link_condition_create
@@ -32,6 +34,50 @@ from .permissions import (
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class DocumentTypeSmartLinksView(AddRemoveView):
main_object_method_add = 'smart_link_add'
main_object_method_remove = 'smart_link_remove'
main_object_permission = permission_document_type_edit
main_object_model = DocumentType
main_object_pk_url_kwarg = 'pk'
secondary_object_model = SmartLink
secondary_object_permission = permission_smart_link_edit
list_available_title = _('Available smart links')
list_added_title = _('Smart links enabled')
related_field = 'smart_links'
def action_add(self, queryset, _user):
event_document_type_edited.commit(
actor=_user, target=self.main_object
)
for obj in queryset:
self.main_object.smart_links.add(obj)
event_smart_link_edited.commit(
actor=_user, action_object=self.main_object, target=obj
)
def action_remove(self, queryset, _user):
event_document_type_edited.commit(
actor=_user, target=self.main_object
)
for obj in queryset:
self.main_object.smart_links.remove(obj)
event_smart_link_edited.commit(
actor=_user, action_object=self.main_object, target=obj
)
def get_actions_extra_kwargs(self):
return {'_user': self.request.user}
def get_extra_context(self):
return {
'object': self.main_object,
'title': _(
'Smart links to enable for document type: %s'
) % self.main_object,
}
class ResolvedSmartLinkView(DocumentListView): class ResolvedSmartLinkView(DocumentListView):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
self.document = get_object_or_404( self.document = get_object_or_404(