コード例 #1
0
ファイル: views.py プロジェクト: gwalborn/mayan-edms
def index_setup_view(request, index_pk):
    index = get_object_or_404(Index, pk=index_pk)

    try:
        Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_INDEXING_SETUP])
    except PermissionDenied:
        AccessEntry.objects.check_access(PERMISSION_DOCUMENT_INDEXING_SETUP, request.user, index)

    object_list = index.template_root.get_descendants(include_self=True)

    context = {
        "object_list": object_list,
        "index": index,
        "object_name": _(u"index"),
        "list_object_variable_name": "node",
        "navigation_object_name": "index",
        "title": _(u"tree template nodes for index: %s") % index,
        "hide_object": True,
        "extra_columns": [
            {"name": _(u"level"), "attribute": encapsulate(lambda x: node_level(x))},
            {"name": _(u"enabled"), "attribute": encapsulate(lambda x: two_state_template(x.enabled))},
            {
                "name": _(u"has document links?"),
                "attribute": encapsulate(lambda x: two_state_template(x.link_documents)),
            },
        ],
    }

    return render_to_response("generic_list.html", context, context_instance=RequestContext(request))
コード例 #2
0
ファイル: views.py プロジェクト: euan/mayan-edms
def user_list(request):
    Permission.objects.check_permissions(request.user, [PERMISSION_USER_VIEW])

    context = {
        'object_list': get_user_model().objects.exclude(is_superuser=True).exclude(is_staff=True).order_by('username'),
        'title': _(u'users'),
        'hide_link': True,
        'extra_columns': [
            {
                'name': _(u'full name'),
                'attribute': 'get_full_name'
            },
            {
                'name': _(u'email'),
                'attribute': 'email'
            },
            {
                'name': _(u'active'),
                'attribute': encapsulate(lambda x: two_state_template(x.is_active)),
            },
            {
                'name': _(u'has usable password?'),
                'attribute': encapsulate(lambda x: two_state_template(x.has_usable_password())),
            },
        ],
        'multi_select_as_buttons': True,
    }

    return render_to_response('generic_list.html', context,
        context_instance=RequestContext(request))
コード例 #3
0
ファイル: views.py プロジェクト: Code4PuertoRico/mayan
def index_setup_view(request, index_pk):
    index = get_object_or_404(Index, pk=index_pk)

    try:
        Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_INDEXING_SETUP])
    except PermissionDenied:
        AccessEntry.objects.check_access(PERMISSION_DOCUMENT_INDEXING_SETUP, request.user, index)

    object_list = index.template_root.get_descendants(include_self=True)

    context = {
        'object_list': object_list,
        'index': index,
        'object_name': _(u'index'),
        'list_object_variable_name': 'node',
        'navigation_object_name': 'index',
        'title': _(u'tree template nodes for index: %s') % index,
        'hide_object': True,
        'extra_columns': [
            {'name': _(u'level'), 'attribute': encapsulate(lambda x: node_level(x))},
            {'name': _(u'enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))},
            {'name': _(u'has document links?'), 'attribute': encapsulate(lambda x: two_state_template(x.link_documents))},            
        ],
    }

    return render_to_response('generic_list.html', context,
        context_instance=RequestContext(request))
コード例 #4
0
ファイル: views.py プロジェクト: Budet94/lean
def user_list(request):
    Permission.objects.check_permissions(request.user, [PERMISSION_USER_VIEW])

    return object_list(
        request,
        queryset=User.objects.exclude(is_superuser=True).exclude(is_staff=True).order_by('username'),
        template_name='generic_list.html',
        extra_context={
            'title': _(u'users'),
            'hide_link': True,
            'extra_columns': [
                {
                    'name': _(u'full name'),
                    'attribute': 'get_full_name'
                },
                {
                    'name': _(u'email'),
                    'attribute': 'email'
                },
                {
                    'name': _(u'active'),
                    'attribute': encapsulate(lambda x: two_state_template(x.is_active).display_small()),
                },
                {
                    'name': _(u'has usable password?'),
                    'attribute': encapsulate(lambda x: two_state_template(x.has_usable_password()).display_small()),
                },
            ],
            'multi_select_as_buttons': True,
        },
    )
コード例 #5
0
ファイル: apps.py プロジェクト: joequant/mayan-edms
    def ready(self):
        super(UserManagementApp, self).ready()

        APIEndPoint(app=self, version_string="1")

        MetadataLookup(description=_("All the groups."), name="group", value=Group.objects.all())
        MetadataLookup(description=_("All the users."), name="users", value=get_user_model().objects.all())

        SourceColumn(source=Group, label=_("Members"), attribute="user_set.count")

        SourceColumn(source=User, label=_("Full name"), attribute="get_full_name")
        SourceColumn(source=User, label=_("Email"), attribute="email")
        SourceColumn(
            source=User, label=_("Active"), func=lambda context: two_state_template(context["object"].is_active)
        )
        SourceColumn(
            source=User,
            label=_("Has usable password?"),
            func=lambda context: two_state_template(context["object"].has_usable_password()),
        )

        menu_multi_item.bind_links(
            links=(link_user_multiple_set_password, link_user_multiple_delete), sources=("user_management:user_list",)
        )
        menu_object.bind_links(links=(link_group_edit, link_group_members, link_group_delete), sources=(Group,))
        menu_object.bind_links(
            links=(link_user_edit, link_user_set_password, link_user_groups, link_user_delete), sources=(User,)
        )
        menu_secondary.bind_links(
            links=(link_group_list, link_group_add),
            sources=(
                "user_management:group_multiple_delete",
                "user_management:group_delete",
                "user_management:group_edit",
                "user_management:group_list",
                "user_management:group_add",
                "user_management:group_members",
            ),
        )
        menu_secondary.bind_links(
            links=(link_user_list, link_user_add),
            sources=(
                User,
                "user_management:user_multiple_set_password",
                "user_management:user_multiple_delete",
                "user_management:user_list",
                "user_management:user_add",
            ),
        )
        menu_setup.bind_links(links=(link_user_setup, link_group_setup))

        registry.register(Group)
        registry.register(User)
コード例 #6
0
ファイル: views.py プロジェクト: Code4PuertoRico/mayan
def index_setup_list(request):
    context = {
        'title': _(u'indexes'),
        'hide_object': True,
        'list_object_variable_name': 'index',
        'extra_columns': [
            {'name': _(u'name'), 'attribute': 'name'},
            {'name': _(u'title'), 'attribute': 'title'},
            {'name': _(u'enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))},
        ]
    }

    queryset = Index.objects.all()

    try:
        Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_INDEXING_SETUP])
    except PermissionDenied:
        queryset = AccessEntry.objects.filter_objects_by_access(PERMISSION_DOCUMENT_INDEXING_SETUP, request.user, queryset)

    context['object_list'] = queryset

    return render_to_response('generic_list.html',
        context,
        context_instance=RequestContext(request)
    )
コード例 #7
0
def acl_class_acl_detail(request, access_object_class_gid, holder_object_gid):
    Permission.objects.check_permissions(request.user, [ACLS_CLASS_VIEW_ACL])
    try:
        actor = AccessHolder.get(gid=holder_object_gid)
        access_object_class = AccessObjectClass.get(
            gid=access_object_class_gid)
    except ObjectDoesNotExist:
        raise Http404

    permission_list = get_class_permissions_for(
        access_object_class.content_type.model_class())
    #TODO : get all globally assigned permission, new function get_permissions_for_holder (roles aware)
    subtemplates_list = [
        {
            'name': u'generic_list_subtemplate.html',
            'context': {
                'title':
                _(u'permissions available to: %(actor)s for class %(class)s' %
                  {
                      'actor': actor,
                      'class': access_object_class
                  }),
                'object_list':
                permission_list,
                'extra_columns': [
                    {
                        'name': _(u'namespace'),
                        'attribute': 'namespace'
                    },
                    {
                        'name': _(u'label'),
                        'attribute': 'label'
                    },
                    {
                        'name':
                        _(u'has permission'),
                        'attribute':
                        encapsulate(lambda x: two_state_template(
                            DefaultAccessEntry.objects.has_access(
                                x, actor.source_object, access_object_class.
                                source_object)))
                    },
                ],
                'hide_object':
                True,
            }
        },
    ]

    return render_to_response('generic_detail.html', {
        'object': access_object_class,
        'subtemplates_list': subtemplates_list,
        'multi_select_as_buttons': True,
        'multi_select_item_properties': {
            'permission_pk': lambda x: x.pk,
            'holder_gid': lambda x: actor.gid,
            'access_object_class_gid': lambda x: access_object_class.gid,
        },
    },
                              context_instance=RequestContext(request))
コード例 #8
0
ファイル: views.py プロジェクト: spacedman/mayan
def smart_link_list(request):
    check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE])

    return render_to_response('generic_list.html', {
        'title':
        _(u'smart links'),
        'object_list':
        SmartLink.objects.all(),
        'extra_columns': [
            {
                'name': _(u'dynamic title'),
                'attribute': 'dynamic_title'
            },
            {
                'name': _(u'enabled'),
                'attribute':
                encapsulate(lambda x: two_state_template(x.enabled))
            },
        ],
        'hide_link':
        True,
        'list_object_variable_name':
        'smart_link',
    },
                              context_instance=RequestContext(request))
コード例 #9
0
ファイル: views.py プロジェクト: rogeriofalcone/redirector
def url_list(request):
#    check_permissions(request.user, [PERMISSION_USER_VIEW])
    title = _(u'static link')
       
    context = {
        'template_id': u'url_list',
        'title': title,
        'extra_columns': [
            {
                'name': _(u'URL'),
                'attribute': 'url'
            },
            {
                'name': _(u'enabled'),
                'attribute': encapsulate(lambda x: two_state_template(x.enabled)),
            },
        ],
        'hide_link': True,
        'multi_select_as_buttons': True,
        'navigation_object_links': [url_edit_link],
    }

    return object_list(
        request,
        queryset=URL.objects.all(),
        template_name='generic_list.html',
        extra_context=context
    )
コード例 #10
0
ファイル: views.py プロジェクト: x3n0/mayan
def role_permissions(request, role_id):
    Permission.objects.check_permissions(
        request.user,
        [PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE])

    role = get_object_or_404(Role, pk=role_id)
    form = RoleForm_view(instance=role)

    role_permissions_list = Permission.objects.get_for_holder(role)
    subtemplates_list = [
        {
            'name': u'generic_list_subtemplate.html',
            'context': {
                'title':
                _(u'permissions'),
                'object_list':
                Permission.objects.all(),
                'extra_columns': [
                    {
                        'name': _(u'namespace'),
                        'attribute': encapsulate(lambda x: x.namespace)
                    },
                    {
                        'name': _(u'name'),
                        'attribute': encapsulate(lambda x: x.label)
                    },
                    {
                        'name':
                        _(u'has permission'),
                        'attribute':
                        encapsulate(lambda x: two_state_template(
                            x.requester_has_this(role))),
                    },
                ],
                'hide_link':
                True,
                'hide_object':
                True,
            }
        },
    ]

    return render_to_response('generic_detail.html', {
        'form': form,
        'object': role,
        'object_name': _(u'role'),
        'subtemplates_list': subtemplates_list,
        'multi_select_as_buttons': True,
        'multi_select_item_properties': {
            'permission_id':
            lambda x: x.pk,
            'requester_id':
            lambda x: role.pk,
            'requester_app_label':
            lambda x: ContentType.objects.get_for_model(role).app_label,
            'requester_model':
            lambda x: ContentType.objects.get_for_model(role).model,
        },
    },
                              context_instance=RequestContext(request))
コード例 #11
0
ファイル: views.py プロジェクト: rkpob/mayan-edms
def smart_link_condition_list(request, smart_link_pk):
    smart_link = get_object_or_404(SmartLink, pk=smart_link_pk)

    try:
        Permission.objects.check_permissions(
            request.user,
            [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT])
    except PermissionDenied:
        AccessEntry.objects.check_accesses(
            [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT],
            request.user, smart_link)

    return render_to_response('generic_list.html', {
        'title':
        _(u'conditions for smart link: %s') % smart_link,
        'object_list':
        smart_link.smartlinkcondition_set.all(),
        'extra_columns': [
            {
                'name': _(u'enabled'),
                'attribute':
                encapsulate(lambda x: two_state_template(x.enabled))
            },
        ],
        'hide_link':
        True,
        'object':
        smart_link,
        'list_object_variable_name':
        'condition',
    },
                              context_instance=RequestContext(request))
コード例 #12
0
ファイル: views.py プロジェクト: rkpob/mayan-edms
def smart_link_list(request):
    qs = SmartLink.objects.all()

    try:
        Permission.objects.check_permissions(request.user,
                                             [PERMISSION_SMART_LINK_VIEW])
    except PermissionDenied:
        qs = AccessEntry.objects.filter_objects_by_access(
            PERMISSION_SMART_LINK_VIEW, request.user, qs)

    return render_to_response('generic_list.html', {
        'title':
        _(u'smart links'),
        'object_list':
        qs,
        'extra_columns': [
            {
                'name': _(u'dynamic title'),
                'attribute': 'dynamic_title'
            },
            {
                'name': _(u'enabled'),
                'attribute':
                encapsulate(lambda x: two_state_template(x.enabled))
            },
        ],
        'hide_link':
        True,
        'list_object_variable_name':
        'smart_link',
    },
                              context_instance=RequestContext(request))
コード例 #13
0
ファイル: views.py プロジェクト: rogeriofalcone/redirector
def page_list(request):
#    check_permissions(request.user, [PERMISSION_USER_VIEW])
    context = {
        'template_id': u'crud_list',
        'title': _(u'CMS pages'),
        'extra_columns': [
            {
                'name': _(u'title'),
                'attribute': 'title'
            },            
            {
                'name': _(u'name'),
                'attribute': 'slug'
            },
            {
                'name': _(u'enabled'),
                'attribute': encapsulate(lambda x: two_state_template(x.enabled)),
            },
        ],
        'multi_select_as_buttons': True,
        'hide_object': True,
        'navigation_object_links': [page_edit_link, page_preview_link, page_render_link],
    }

    return object_list(
        request,
        queryset=Page.objects.all(),
        template_name='generic_list.html',
        extra_context=context
    )
コード例 #14
0
    def ready(self):
        super(TaskManagerApp, self).ready()

        SourceColumn(source=CeleryQueue, label=_('Label'), attribute='label')
        SourceColumn(source=CeleryQueue, label=_('Name'), attribute='name')
        SourceColumn(source=CeleryQueue,
                     label=_('Default queue?'),
                     func=lambda context: two_state_template(context['object'].
                                                             is_default_queue))
        SourceColumn(source=CeleryQueue,
                     label=_('Is transient?'),
                     func=lambda context: two_state_template(context['object'].
                                                             is_transient))
        SourceColumn(source=Task, label=_('Type'), attribute='task_type')
        SourceColumn(source=Task,
                     label=_('Start time'),
                     attribute='get_time_started')
        SourceColumn(source=Task,
                     label=_('Host'),
                     func=lambda context: context['object'].kwargs['hostname'])
        SourceColumn(source=Task,
                     label=_('Acknowledged'),
                     func=lambda context: two_state_template(context[
                         'object'].kwargs['acknowledged']))
        SourceColumn(source=Task,
                     label=_('Arguments'),
                     func=lambda context: context['object'].kwargs['args'])
        SourceColumn(source=Task,
                     label=_('Keyword arguments'),
                     func=lambda context: context['object'].kwargs['kwargs'])
        SourceColumn(
            source=Task,
            label=_('Worker process ID'),
            func=lambda context: context['object'].kwargs['worker_pid'])

        menu_object.bind_links(links=(
            link_queue_active_task_list,
            link_queue_scheduled_task_list,
            link_queue_reserved_task_list,
        ),
                               sources=(CeleryQueue, ))

        menu_secondary.bind_links(links=(link_queue_list, ),
                                  sources=(CeleryQueue, Task,
                                           'task_manager:queue_list'))

        menu_tools.bind_links(links=(link_task_manager, ))
コード例 #15
0
    def ready(self):
        super(EventsApp, self).ready()
        Action = apps.get_model(app_label='actstream', model_name='Action')
        Notification = self.get_model(model_name='Notification')
        StoredEventType = self.get_model(model_name='StoredEventType')
        User = get_user_model()

        SourceColumn(source=Action,
                     label=_('Timestamp'),
                     attribute='timestamp')
        SourceColumn(source=Action,
                     label=_('Actor'),
                     func=lambda context: event_user_link(context['object']))
        SourceColumn(source=Action,
                     label=_('Event'),
                     func=lambda context: event_type_link(context['object']))
        SourceColumn(source=Action,
                     label=_('Action object'),
                     func=lambda context: event_object_link(
                         entry=context['object'], attribute='action_object'))

        SourceColumn(source=StoredEventType,
                     label=_('Namespace'),
                     attribute='namespace')
        SourceColumn(source=StoredEventType,
                     label=_('Label'),
                     attribute='label')

        SourceColumn(source=Notification,
                     label=_('Timestamp'),
                     attribute='action.timestamp')
        SourceColumn(source=Notification,
                     label=_('Actor'),
                     attribute='action.actor')
        SourceColumn(
            source=Notification,
            label=_('Event'),
            func=lambda context: event_type_link(context['object'].action))
        SourceColumn(
            source=Notification,
            label=_('Target'),
            func=lambda context: event_object_link(context['object'].action))
        SourceColumn(source=Notification,
                     label=_('Seen'),
                     func=lambda context: two_state_template(state=context[
                         'object'].read))

        menu_main.bind_links(links=(link_user_notifications_list, ),
                             position=99)
        menu_object.bind_links(links=(link_notification_mark_read, ),
                               sources=(Notification, ))
        menu_object.bind_links(links=(link_user_events, ), sources=(User, ))
        menu_secondary.bind_links(links=(link_notification_mark_read_all, ),
                                  sources=('events:user_notifications_list', ))
        menu_tools.bind_links(links=(link_events_list, ))
        menu_user.bind_links(links=(link_event_types_subscriptions_list, ))
コード例 #16
0
ファイル: views.py プロジェクト: bedros/mayan-edms
def user_list(request):
    Permission.objects.check_permissions(request.user, [PERMISSION_USER_VIEW])

    context = {
        "object_list": get_user_model().objects.exclude(is_superuser=True).exclude(is_staff=True).order_by("username"),
        "title": _("Users"),
        "hide_link": True,
        "extra_columns": [
            {"name": _("Full name"), "attribute": "get_full_name"},
            {"name": _("Email"), "attribute": "email"},
            {"name": _("Active"), "attribute": encapsulate(lambda x: two_state_template(x.is_active))},
            {
                "name": _("Has usable password?"),
                "attribute": encapsulate(lambda x: two_state_template(x.has_usable_password())),
            },
        ],
    }

    return render_to_response("main/generic_list.html", context, context_instance=RequestContext(request))
コード例 #17
0
def user_list(request):
    Permission.objects.check_permissions(request.user, [PERMISSION_USER_VIEW])

    context = {
        'object_list':
        get_user_model().objects.exclude(is_superuser=True).exclude(
            is_staff=True).order_by('username'),
        'title':
        _(u'users'),
        'hide_link':
        True,
        'extra_columns': [
            {
                'name': _(u'full name'),
                'attribute': 'get_full_name'
            },
            {
                'name': _(u'email'),
                'attribute': 'email'
            },
            {
                'name':
                _(u'active'),
                'attribute':
                encapsulate(lambda x: two_state_template(x.is_active)),
            },
            {
                'name':
                _(u'has usable password?'),
                'attribute':
                encapsulate(
                    lambda x: two_state_template(x.has_usable_password())),
            },
        ],
        'multi_select_as_buttons':
        True,
    }

    return render_to_response('generic_list.html',
                              context,
                              context_instance=RequestContext(request))
コード例 #18
0
def user_list(request):
    Permission.objects.check_permissions(request.user, [PERMISSION_USER_VIEW])

    return object_list(
        request,
        queryset=User.objects.exclude(is_superuser=True).exclude(
            is_staff=True).order_by('username'),
        template_name='generic_list.html',
        extra_context={
            'title':
            _(u'users'),
            'hide_link':
            True,
            'extra_columns': [
                {
                    'name': _(u'full name'),
                    'attribute': 'get_full_name'
                },
                {
                    'name': _(u'email'),
                    'attribute': 'email'
                },
                {
                    'name':
                    _(u'active'),
                    'attribute':
                    encapsulate(lambda x: two_state_template(x.is_active)),
                },
                {
                    'name':
                    _(u'has usable password?'),
                    'attribute':
                    encapsulate(
                        lambda x: two_state_template(x.has_usable_password())),
                },
            ],
            'multi_select_as_buttons':
            True,
        },
    )
コード例 #19
0
ファイル: views.py プロジェクト: rkpob/mayan-edms
def acl_detail_for(request, actor, obj):
    try:
        Permission.objects.check_permissions(request.user, [ACLS_VIEW_ACL])
    except PermissionDenied:
        AccessEntry.objects.check_accesses([ACLS_VIEW_ACL], actor, obj)

    permission_list = get_class_permissions_for(obj.source_object)
    # TODO : get all globally assigned permission, new function get_permissions_for_holder (roles aware)
    subtemplates_list = [
        {
            'name': u'generic_list_subtemplate.html',
            'context': {
                'title': _(u'permissions available to: %(actor)s for %(obj)s' % {
                    'actor': actor,
                    'obj': obj
                }
                ),
                'object_list': permission_list,
                'extra_columns': [
                    {'name': _(u'namespace'), 'attribute': 'namespace'},
                    {'name': _(u'label'), 'attribute': 'label'},
                    {
                        'name': _(u'has permission'),
                        'attribute': encapsulate(lambda permission: two_state_template(AccessEntry.objects.has_access(permission, actor, obj, db_only=True)))
                    },
                ],
                'hide_object': True,
            }
        },
    ]

    context = {
        'object': obj.source_object,
        'subtemplates_list': subtemplates_list,
        'multi_select_as_buttons': True,
        'multi_select_item_properties': {
            'permission_pk': lambda x: x.pk,
            'holder_gid': lambda x: actor.gid,
            'object_gid': lambda x: obj.gid,
        },
        'access_object': obj,
        'navigation_object_list': [
            {'object': 'object'},
            {'object': 'access_object'}
        ],
    }

    return render_to_response(
        'generic_detail.html',
        context,
        context_instance=RequestContext(request)
    )
コード例 #20
0
ファイル: views.py プロジェクト: Budet94/lean
def acl_detail_for(request, actor, obj):
    try:
        Permission.objects.check_permissions(request.user, [ACLS_VIEW_ACL])
    except PermissionDenied:
        AccessEntry.objects.check_accesses([ACLS_VIEW_ACL], actor, obj)

    permission_list = get_class_permissions_for(obj.source_object)
    #TODO : get all globally assigned permission, new function get_permissions_for_holder (roles aware)
    subtemplates_list = [
        {
            'name': u'generic_list_subtemplate.html',
            'context': {
                'title': _(u'permissions available to: %(actor)s for %(obj)s' % {
                    'actor': actor,
                    'obj': obj
                    }
                ),
                'object_list': permission_list,
                'extra_columns': [
                    {'name': _(u'namespace'), 'attribute': 'namespace'},
                    {'name': _(u'label'), 'attribute': 'label'},
                    {
                        'name':_(u'has permission'),
                        'attribute': encapsulate(lambda permission: two_state_template(AccessEntry.objects.has_access(permission, actor, obj, db_only=True)).display_small())
                    },
                ],
                'hide_object': True,
            }
        },
    ]

    context = {
        'object': obj.source_object,
        'subtemplates_list': subtemplates_list,
        'multi_select_as_buttons': True,
        'multi_select_item_properties': {
            'permission_pk': lambda x: x.pk,
            'holder_gid': lambda x: actor.gid,
            'object_gid': lambda x: obj.gid,
        },
        'access_object': obj,
        'navigation_object_list': [
            {'object': 'object'},
            {'object': 'access_object'}
        ],
    }

    return render_to_response(
        'generic_detail.html',
        context,
        context_instance=RequestContext(request)
    )
コード例 #21
0
ファイル: views.py プロジェクト: MechanisM/mayan
def smart_link_list(request):
    check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE])
    
    return render_to_response('generic_list.html', {
        'title': _(u'smart links'),
        'object_list': SmartLink.objects.all(),
        'extra_columns': [
            {'name': _(u'dynamic title'), 'attribute': 'dynamic_title'},
            {'name': _(u'enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))},
        ],        
        'hide_link': True,
        'list_object_variable_name': 'smart_link',

        }, context_instance=RequestContext(request))
コード例 #22
0
ファイル: views.py プロジェクト: MechanisM/mayan
def smart_link_condition_list(request, smart_link_pk):
    check_permissions(request.user, [PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_EDIT])
    
    smart_link = get_object_or_404(SmartLink, pk=smart_link_pk)
    
    return render_to_response('generic_list.html', {
        'title': _(u'conditions for smart link: %s') % smart_link,
        'object_list': smart_link.smartlinkcondition_set.all(),
        'extra_columns': [
            {'name': _(u'enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))},
        ],        
        'hide_link': True,
        'smart_link': smart_link,
        'navigation_object_name': 'smart_link',
        'list_object_variable_name': 'condition',        
        }, context_instance=RequestContext(request))
コード例 #23
0
ファイル: views.py プロジェクト: mrcrabby/mayan
def user_list(request):
    check_permissions(request.user, [PERMISSION_USER_VIEW])

    return object_list(
        request,
        queryset=User.objects.exclude(is_superuser=True).exclude(is_staff=True).order_by("username"),
        template_name="generic_list.html",
        extra_context={
            "title": _(u"users"),
            "hide_link": True,
            "extra_columns": [
                {"name": _(u"full name"), "attribute": "get_full_name"},
                {"name": _(u"email"), "attribute": "email"},
                {"name": _(u"active"), "attribute": lambda x: two_state_template(x.is_active)},
            ],
            "multi_select_as_buttons": True,
        },
    )
コード例 #24
0
ファイル: views.py プロジェクト: BangorUniversity/mayan-edms
def smart_link_condition_list(request, smart_link_pk):
    smart_link = get_object_or_404(SmartLink, pk=smart_link_pk)

    try:
        Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_EDIT])
    except PermissionDenied:
        AccessEntry.objects.check_accesses([PERMISSION_SMART_LINK_EDIT], request.user, smart_link)

    return render_to_response('main/generic_list.html', {
        'title': _('Conditions for smart link: %s') % smart_link,
        'object_list': smart_link.conditions.all(),
        'extra_columns': [
            {'name': _('Enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))},
        ],
        'hide_link': True,
        'object': smart_link,
        'list_object_variable_name': 'condition',
    }, context_instance=RequestContext(request))
コード例 #25
0
ファイル: views.py プロジェクト: Hackthings/mayan-edms
class SetupSourceListView(SingleObjectListView):
    extra_context = {
        'extra_columns': (
            {
                'name': _('Type'),
                'attribute': encapsulate(lambda entry: entry.class_fullname())
            },
            {
                'name': _('Enabled'),
                'attribute': encapsulate(
                    lambda entry: two_state_template(entry.enabled)
                )
            },
        ),
        'hide_link': True,
        'title': _('Sources'),
    }
    queryset = Source.objects.select_subclasses()
    view_permission = permission_sources_setup_view
コード例 #26
0
ファイル: views.py プロジェクト: Budet94/lean
def acl_class_acl_detail(request, access_object_class_gid, holder_object_gid):
    Permission.objects.check_permissions(request.user, [ACLS_CLASS_VIEW_ACL])
    try:
        actor = AccessHolder.get(gid=holder_object_gid)
        access_object_class = AccessObjectClass.get(gid=access_object_class_gid)
    except ObjectDoesNotExist:
        raise Http404

    permission_list = get_class_permissions_for(access_object_class.content_type.model_class())
    #TODO : get all globally assigned permission, new function get_permissions_for_holder (roles aware)
    subtemplates_list = [
        {
            'name': u'generic_list_subtemplate.html',
            'context': {
                'title': _(u'permissions available to: %(actor)s for class %(class)s' % {
                        'actor': actor,
                        'class': access_object_class
                    }
                ),
                'object_list': permission_list,
                'extra_columns': [
                    {'name': _(u'namespace'), 'attribute': 'namespace'},
                    {'name': _(u'label'), 'attribute': 'label'},
                    {
                        'name':_(u'has permission'),
                        'attribute': encapsulate(lambda x: two_state_template(DefaultAccessEntry.objects.has_access(x, actor.source_object, access_object_class.source_object)).display_small())
                    },
                ],
                'hide_object': True,
            }
        },
    ]

    return render_to_response('generic_detail.html', {
        'object': access_object_class,
        'subtemplates_list': subtemplates_list,
        'multi_select_as_buttons': True,
        'multi_select_item_properties': {
            'permission_pk': lambda x: x.pk,
            'holder_gid': lambda x: actor.gid,
            'access_object_class_gid': lambda x: access_object_class.gid,
        },
    }, context_instance=RequestContext(request))
コード例 #27
0
ファイル: views.py プロジェクト: stefanw/mayan
def index_setup_view(request, index_pk):
    index = get_object_or_404(Index, pk=index_pk)

    try:
        Permission.objects.check_permissions(
            request.user, [PERMISSION_DOCUMENT_INDEXING_SETUP])
    except PermissionDenied:
        AccessEntry.objects.check_access(PERMISSION_DOCUMENT_INDEXING_SETUP,
                                         request.user, index)

    object_list = index.template_root.get_descendants(include_self=True)

    context = {
        'object_list':
        object_list,
        'index':
        index,
        'object_name':
        _(u'index'),
        'list_object_variable_name':
        'node',
        'navigation_object_name':
        'index',
        'title':
        _(u'tree template nodes for index: %s') % index,
        'hide_object':
        True,
        'extra_columns': [
            {
                'name': _(u'level'),
                'attribute': encapsulate(lambda x: node_level(x))
            },
            {
                'name': _(u'enabled'),
                'attribute':
                encapsulate(lambda x: two_state_template(x.enabled))
            },
        ],
    }

    return render_to_response('generic_list.html',
                              context,
                              context_instance=RequestContext(request))
コード例 #28
0
ファイル: views.py プロジェクト: cccs-web/mayan-edms
def smart_link_list(request):
    qs = SmartLink.objects.all()

    try:
        Permission.objects.check_permissions(request.user, [PERMISSION_SMART_LINK_VIEW])
    except PermissionDenied:
        qs = AccessEntry.objects.filter_objects_by_access(PERMISSION_SMART_LINK_VIEW, request.user, qs)

    return render_to_response('generic_list.html', {
        'title': _(u'smart links'),
        'object_list': qs,
        'extra_columns': [
            {'name': _(u'dynamic title'), 'attribute': 'dynamic_title'},
            {'name': _(u'enabled'), 'attribute': encapsulate(lambda x: two_state_template(x.enabled))},
        ],
        'hide_link': True,
        'list_object_variable_name': 'smart_link',

    }, context_instance=RequestContext(request))
コード例 #29
0
ファイル: views.py プロジェクト: Budet94/lean
def role_permissions(request, role_id):
    Permission.objects.check_permissions(request.user, [PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE])

    role = get_object_or_404(Role, pk=role_id)
    form = RoleForm_view(instance=role)

    role_permissions_list = Permission.objects.get_for_holder(role)
    subtemplates_list = [
        {
            'name': u'generic_list_subtemplate.html',
            'context': {
                'title': _(u'permissions'),
                'object_list': Permission.objects.all(),
                'extra_columns': [
                    {'name': _(u'namespace'), 'attribute': encapsulate(lambda x: x.namespace)},
                    {'name': _(u'name'), 'attribute': encapsulate(lambda x: x.label)},
                    {
                        'name': _(u'has permission'),
                        'attribute': encapsulate(lambda x: two_state_template(x.requester_has_this(role)).display_small()),
                    },
                ],
                'hide_link': True,
                'hide_object': True,
            }
        },
    ]

    return render_to_response('generic_detail.html', {
        'form': form,
        'object': role,
        'object_name': _(u'role'),
        'subtemplates_list': subtemplates_list,
        'multi_select_as_buttons': True,
        'multi_select_item_properties': {
            'permission_id': lambda x: x.pk,
            'requester_id': lambda x: role.pk,
            'requester_app_label': lambda x: ContentType.objects.get_for_model(role).app_label,
            'requester_model': lambda x: ContentType.objects.get_for_model(role).model,
        },
    }, context_instance=RequestContext(request))
コード例 #30
0
ファイル: views.py プロジェクト: rkpob/mayan-edms
def index_setup_list(request):
    context = {
        'title':
        _(u'indexes'),
        'hide_object':
        True,
        'list_object_variable_name':
        'index',
        'extra_columns': [
            {
                'name': _(u'name'),
                'attribute': 'name'
            },
            {
                'name': _(u'title'),
                'attribute': 'title'
            },
            {
                'name': _(u'enabled'),
                'attribute':
                encapsulate(lambda x: two_state_template(x.enabled))
            },
        ]
    }

    queryset = Index.objects.all()

    try:
        Permission.objects.check_permissions(
            request.user, [PERMISSION_DOCUMENT_INDEXING_SETUP])
    except PermissionDenied:
        queryset = AccessEntry.objects.filter_objects_by_access(
            PERMISSION_DOCUMENT_INDEXING_SETUP, request.user, queryset)

    context['object_list'] = queryset

    return render_to_response('generic_list.html',
                              context,
                              context_instance=RequestContext(request))
コード例 #31
0
ファイル: views.py プロジェクト: IHLeanne/mayan
def document_type_filename_list(request, document_type_id):
    check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW])
    document_type = get_object_or_404(DocumentType, pk=document_type_id)

    context = {
        'object_list': document_type.documenttypefilename_set.all(),
        'title': _(u'filenames for document type: %s') % document_type,
        'object_name': _(u'document type'),
        'navigation_object_name': 'document_type',
        'document_type': document_type,
        'list_object_variable_name': 'filename',
        'hide_link': True,
        'extra_columns': [
            {
                'name': _(u'enabled'),
                'attribute': encapsulate(lambda x: two_state_template(x.enabled)),
            }
        ]
    }

    return render_to_response('generic_list.html', context,
        context_instance=RequestContext(request))
コード例 #32
0
ファイル: views.py プロジェクト: rogeriofalcone/redirector
def menu_list(request, parent_menu_entry_id=None):
#    check_permissions(request.user, [PERMISSION_USER_VIEW])
    if parent_menu_entry_id:
        parent_menu_entry = get_object_or_404(MenuEntry, pk=parent_menu_entry_id)
        title = _(u'menu entries for: %s') % parent_menu_entry
    else:
        parent_menu_entry = None
        title = _(u'root menu entries')
       
    context = {
        'template_id': u'menu_list',
        'title': title,
        'extra_columns': [
            {
                'name': _(u'internal name'),
                'attribute': 'slug'
            },
            {
                'name': _(u'destination'),
                'attribute': 'destination',
            },
            {
                'name': _(u'enabled'),
                'attribute': encapsulate(lambda x: two_state_template(x.enabled)),
            },
        ],
        'multi_select_as_buttons': True,
        'object': parent_menu_entry,
        'object_name': _(u'menu entry'),
        'navigation_object_links': [menu_promote_link, menu_demote_link, menu_edit_link, menu_delete_link],
    }

    return object_list(
        request,
        queryset=MenuEntry.objects.filter(parent=parent_menu_entry),
        template_name='generic_list.html',
        extra_context=context
    )
コード例 #33
0
ファイル: views.py プロジェクト: gwalborn/mayan-edms
def index_setup_list(request):
    context = {
        "title": _(u"indexes"),
        "hide_object": True,
        "list_object_variable_name": "index",
        "extra_columns": [
            {"name": _(u"name"), "attribute": "name"},
            {"name": _(u"title"), "attribute": "title"},
            {"name": _(u"enabled"), "attribute": encapsulate(lambda x: two_state_template(x.enabled))},
        ],
    }

    queryset = Index.objects.all()

    try:
        Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_INDEXING_SETUP])
    except PermissionDenied:
        queryset = AccessEntry.objects.filter_objects_by_access(
            PERMISSION_DOCUMENT_INDEXING_SETUP, request.user, queryset
        )

    context["object_list"] = queryset

    return render_to_response("generic_list.html", context, context_instance=RequestContext(request))
コード例 #34
0
    def ready(self):
        super(DocumentStatesApp, self).ready()

        APIEndPoint(app=self, version_string='1')

        Document = apps.get_model(app_label='documents', model_name='Document')

        Workflow = self.get_model('Workflow')
        WorkflowInstance = self.get_model('WorkflowInstance')
        WorkflowInstanceLogEntry = self.get_model('WorkflowInstanceLogEntry')
        WorkflowState = self.get_model('WorkflowState')
        WorkflowTransition = self.get_model('WorkflowTransition')

        ModelPermission.register(
            model=Workflow, permissions=(permission_workflow_transition, ))

        ModelPermission.register(
            model=WorkflowTransition,
            permissions=(permission_workflow_transition, ))

        SourceColumn(source=Workflow,
                     label=_('Initial state'),
                     func=lambda context: context['object'].get_initial_state(
                     ) or _('None'))

        SourceColumn(source=WorkflowInstance,
                     label=_('Current state'),
                     attribute='get_current_state')
        SourceColumn(
            source=WorkflowInstance,
            label=_('User'),
            func=lambda context: getattr(
                context['object'].get_last_log_entry(), 'user', _('None')))
        SourceColumn(source=WorkflowInstance,
                     label=_('Last transition'),
                     attribute='get_last_transition')
        SourceColumn(
            source=WorkflowInstance,
            label=_('Date and time'),
            func=lambda context: getattr(
                context['object'].get_last_log_entry(), 'datetime', _('None')))
        SourceColumn(
            source=WorkflowInstance,
            label=_('Completion'),
            func=lambda context: getattr(context['object'].get_current_state(),
                                         'completion', _('None')))

        SourceColumn(source=WorkflowInstanceLogEntry,
                     label=_('Date and time'),
                     attribute='datetime')
        SourceColumn(source=WorkflowInstanceLogEntry,
                     label=_('User'),
                     attribute='user')
        SourceColumn(source=WorkflowInstanceLogEntry,
                     label=_('Transition'),
                     attribute='transition')
        SourceColumn(source=WorkflowInstanceLogEntry,
                     label=_('Comment'),
                     attribute='comment')

        SourceColumn(
            source=WorkflowState,
            label=_('Is initial state?'),
            func=lambda context: two_state_template(context['object'].initial))
        SourceColumn(source=WorkflowState,
                     label=_('Completion'),
                     attribute='completion')

        SourceColumn(source=WorkflowTransition,
                     label=_('Origin state'),
                     attribute='origin_state')
        SourceColumn(source=WorkflowTransition,
                     label=_('Destination state'),
                     attribute='destination_state')

        menu_facet.bind_links(links=(link_document_workflow_instance_list, ),
                              sources=(Document, ))
        menu_object.bind_links(links=(link_setup_workflow_states,
                                      link_setup_workflow_transitions,
                                      link_setup_workflow_document_types,
                                      link_setup_workflow_edit, link_acl_list,
                                      link_setup_workflow_delete),
                               sources=(Workflow, ))
        menu_object.bind_links(links=(link_setup_workflow_state_edit,
                                      link_setup_workflow_state_delete),
                               sources=(WorkflowState, ))
        menu_object.bind_links(links=(link_setup_workflow_transition_edit,
                                      link_acl_list,
                                      link_setup_workflow_transition_delete),
                               sources=(WorkflowTransition, ))
        menu_object.bind_links(links=(link_workflow_instance_detail,
                                      link_workflow_instance_transition),
                               sources=(WorkflowInstance, ))
        menu_secondary.bind_links(
            links=(link_setup_workflow_list, link_setup_workflow_create),
            sources=(Workflow, 'document_states:setup_workflow_create',
                     'document_states:setup_workflow_list'))
        menu_setup.bind_links(links=(link_setup_workflow_list, ))
        menu_sidebar.bind_links(links=(link_setup_workflow_state_create,
                                       link_setup_workflow_transition_create),
                                sources=(Workflow, ))

        post_save.connect(launch_workflow,
                          dispatch_uid='launch_workflow',
                          sender=Document)
コード例 #35
0
ファイル: apps.py プロジェクト: tobennanwokike/mayan-edms
    def ready(self):
        super(MetadataApp, self).ready()

        from .wizard_steps import WizardStepMetadata  # NOQA

        Document = apps.get_model(app_label='documents', model_name='Document')
        DocumentPageResult = apps.get_model(app_label='documents',
                                            model_name='DocumentPageResult')

        DocumentType = apps.get_model(app_label='documents',
                                      model_name='DocumentType')

        DocumentMetadata = self.get_model('DocumentMetadata')
        DocumentTypeMetadataType = self.get_model('DocumentTypeMetadataType')
        MetadataType = self.get_model('MetadataType')

        Document.add_to_class('metadata_value_of',
                              DocumentMetadataHelper.constructor)

        ModelAttribute(
            Document,
            'metadata',
            type_name='related',
            description=_(
                'Queryset containing a MetadataType instance reference and a '
                'value for that metadata type'))
        ModelAttribute(Document,
                       'metadata__metadata_type__name',
                       label=_('Metadata type name'),
                       type_name='query')
        ModelAttribute(Document,
                       'metadata__value',
                       label=_('Metadata type value'),
                       type_name='query')
        ModelAttribute(
            Document,
            'metadata_value_of',
            label=_('Value of a metadata'),
            description=_('Return the value of a specific document metadata'),
            type_name=['property', 'indexing'])

        ModelPermission.register(model=Document,
                                 permissions=(
                                     permission_metadata_document_add,
                                     permission_metadata_document_edit,
                                     permission_metadata_document_remove,
                                     permission_metadata_document_view,
                                 ))
        ModelPermission.register(model=MetadataType,
                                 permissions=(permission_metadata_type_delete,
                                              permission_metadata_type_edit,
                                              permission_metadata_type_view))

        SourceColumn(
            source=Document,
            label=_('Metadata'),
            func=lambda context: get_metadata_string(context['object']))

        SourceColumn(source=DocumentPageResult,
                     label=_('Metadata'),
                     func=lambda context: get_metadata_string(context['object']
                                                              .document))

        SourceColumn(source=DocumentMetadata,
                     label=_('Value'),
                     attribute='value')
        SourceColumn(source=DocumentMetadata,
                     label=_('Required'),
                     func=lambda context: two_state_template(context['object'].
                                                             is_required))

        app.conf.CELERY_QUEUES.append(
            Queue('metadata', Exchange('metadata'), routing_key='metadata'), )

        app.conf.CELERY_ROUTES.update({
            'metadata.tasks.task_remove_metadata_type': {
                'queue': 'metadata'
            },
            'metadata.tasks.task_add_required_metadata_type': {
                'queue': 'metadata'
            },
        })

        document_search.add_model_field(field='metadata__metadata_type__name',
                                        label=_('Metadata type'))
        document_search.add_model_field(field='metadata__value',
                                        label=_('Metadata value'))

        document_page_search.add_model_field(
            field='document_version__document__metadata__metadata_type__name',
            label=_('Metadata type'))
        document_page_search.add_model_field(
            field='document_version__document__metadata__value',
            label=_('Metadata value'))

        menu_facet.bind_links(links=(link_metadata_view, ),
                              sources=(Document, ))
        menu_multi_item.bind_links(links=(link_metadata_multiple_add,
                                          link_metadata_multiple_edit,
                                          link_metadata_multiple_remove),
                                   sources=(Document, ))
        menu_object.bind_links(
            links=(link_setup_document_type_metadata_types, ),
            sources=(DocumentType, ))
        menu_object.bind_links(links=(link_setup_metadata_type_edit,
                                      link_setup_metadata_type_document_types,
                                      link_setup_metadata_type_delete),
                               sources=(MetadataType, ))
        menu_secondary.bind_links(
            links=(link_setup_metadata_type_list,
                   link_setup_metadata_type_create),
            sources=(MetadataType, 'metadata:setup_metadata_type_list',
                     'metadata:setup_metadata_type_create'))
        menu_setup.bind_links(links=(link_setup_metadata_type_list, ))
        menu_sidebar.bind_links(
            links=(link_metadata_add, link_metadata_edit,
                   link_metadata_remove),
            sources=('metadata:metadata_add', 'metadata:metadata_edit',
                     'metadata:metadata_remove', 'metadata:metadata_view'))

        post_delete.connect(
            post_document_type_metadata_type_delete,
            dispatch_uid='metadata_post_document_type_metadata_type_delete',
            sender=DocumentTypeMetadataType)
        post_document_type_change.connect(
            post_document_type_change_metadata,
            dispatch_uid='metadata_post_document_type_change_metadata',
            sender=Document)
        post_save.connect(
            post_document_type_metadata_type_add,
            dispatch_uid='metadata_post_document_type_metadata_type_add',
            sender=DocumentTypeMetadataType)

        # Index updating

        post_delete.connect(
            handler_index_document,
            dispatch_uid='metadata_handler_index_document_delete',
            sender=DocumentMetadata)
        post_save.connect(handler_index_document,
                          dispatch_uid='metadata_handler_index_document_save',
                          sender=DocumentMetadata)
コード例 #36
0
ファイル: apps.py プロジェクト: leolimma/maxacali
    def ready(self):
        super(LinkingApp, self).ready()

        Document = apps.get_model(
            app_label='documents', model_name='Document'
        )

        ResolvedSmartLink = self.get_model('ResolvedSmartLink')
        SmartLink = self.get_model('SmartLink')
        SmartLinkCondition = self.get_model('SmartLinkCondition')

        ModelPermission.register(
            model=SmartLink, permissions=(
                permission_acl_edit, permission_acl_view,
                permission_smart_link_delete, permission_smart_link_edit,
                permission_smart_link_view
            )
        )

        SourceColumn(
            source=ResolvedSmartLink, label=_('Label'),
            func=lambda context: context['object'].get_dynamic_label(
                context['document']
            )
        )

        SourceColumn(
            source=SmartLink, label=_('Dynamic label'),
            attribute='dynamic_label'
        )
        SourceColumn(
            source=SmartLink, label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled)
        )

        SourceColumn(
            source=SmartLinkCondition, label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled)
        )

        menu_facet.bind_links(
            links=(link_smart_link_instances_for_document,),
            sources=(Document,)
        )
        menu_object.bind_links(
            links=(
                link_smart_link_condition_edit,
                link_smart_link_condition_delete
            ), sources=(SmartLinkCondition,)
        )
        menu_object.bind_links(
            links=(
                link_smart_link_edit, link_smart_link_document_types,
                link_smart_link_condition_list, link_acl_list,
                link_smart_link_delete
            ), sources=(SmartLink,)
        )
        menu_object.bind_links(
            links=(link_smart_link_instance_view,),
            sources=(ResolvedSmartLink,)
        )
        menu_secondary.bind_links(
            links=(link_smart_link_list, link_smart_link_create),
            sources=(
                SmartLink, 'linking:smart_link_list',
                'linking:smart_link_create'
            )
        )
        menu_setup.bind_links(links=(link_smart_link_setup,))
        menu_sidebar.bind_links(
            links=(link_smart_link_condition_create,),
            sources=(
                'linking:smart_link_condition_list',
                'linking:smart_link_condition_create',
                'linking:smart_link_condition_edit',
                'linking:smart_link_condition_delete'
            )
        )
コード例 #37
0
    def ready(self):
        super(DocumentIndexingApp, self).ready()

        APIEndPoint(app=self, version_string='1')

        Document = apps.get_model(
            app_label='documents', model_name='Document'
        )

        DocumentType = apps.get_model(
            app_label='documents', model_name='DocumentType'
        )

        DocumentIndexInstanceNode = self.get_model('DocumentIndexInstanceNode')

        Index = self.get_model('Index')
        IndexInstance = self.get_model('IndexInstance')
        IndexInstanceNode = self.get_model('IndexInstanceNode')
        IndexTemplateNode = self.get_model('IndexTemplateNode')

        ModelPermission.register(
            model=Index, permissions=(
                permission_acl_edit, permission_acl_view,
                permission_document_indexing_create,
                permission_document_indexing_delete,
                permission_document_indexing_edit,
                permission_document_indexing_view,
            )
        )

        SourceColumn(source=Index, label=_('Label'), attribute='label')
        SourceColumn(source=Index, label=_('Slug'), attribute='slug')
        SourceColumn(
            source=Index, label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled)
        )

        SourceColumn(
            source=IndexInstance, label=_('Total levels'),
            func=lambda context: context[
                'object'
            ].instance_root.get_descendants_count()
        )
        SourceColumn(
            source=IndexInstance, label=_('Total documents'),
            func=lambda context: context[
                'object'
            ].instance_root.get_descendants_document_count(
                user=context['request'].user
            )
        )
        SourceColumn(
            source=IndexInstance, label=_('Document types'),
            attribute='get_document_types_names'
        )

        SourceColumn(
            source=IndexTemplateNode, label=_('Level'),
            func=lambda context: node_level(context['object'])
        )
        SourceColumn(
            source=IndexTemplateNode, label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled)
        )
        SourceColumn(
            source=IndexTemplateNode, label=_('Has document links?'),
            func=lambda context: two_state_template(
                context['object'].link_documents
            )
        )

        SourceColumn(
            source=IndexInstanceNode, label=_('Level'),
            func=lambda context: index_instance_item_link(context['object'])
        )
        SourceColumn(
            source=IndexInstanceNode, label=_('Levels'),
            func=lambda context: context['object'].get_descendants_count()
        )
        SourceColumn(
            source=IndexInstanceNode, label=_('Documents'),
            func=lambda context: context[
                'object'
            ].get_descendants_document_count(
                user=context['request'].user
            )
        )

        SourceColumn(
            source=DocumentIndexInstanceNode, label=_('Level'),
            func=lambda context: get_instance_link(
                index_instance_node=context['object'],
            )
        )
        SourceColumn(
            source=DocumentIndexInstanceNode, label=_('Levels'),
            func=lambda context: context['object'].get_descendants_count()
        )
        SourceColumn(
            source=DocumentIndexInstanceNode, label=_('Documents'),
            func=lambda context: context[
                'object'
            ].get_descendants_document_count(
                user=context['request'].user
            )
        )

        app.conf.CELERY_QUEUES.append(
            Queue('indexing', Exchange('indexing'), routing_key='indexing'),
        )

        app.conf.CELERY_ROUTES.update(
            {
                'document_indexing.tasks.task_delete_empty': {
                    'queue': 'indexing'
                },
                'document_indexing.tasks.task_remove_document': {
                    'queue': 'indexing'
                },
                'document_indexing.tasks.task_index_document': {
                    'queue': 'indexing'
                },
                'document_indexing.tasks.task_rebuild_index': {
                    'queue': 'tools'
                },
            }
        )

        menu_facet.bind_links(
            links=(link_document_index_list,), sources=(Document,)
        )
        menu_object.bind_links(
            links=(
                link_index_setup_edit, link_index_setup_view,
                link_index_setup_document_types, link_acl_list,
                link_index_setup_delete
            ), sources=(Index,)
        )
        menu_object.bind_links(
            links=(
                link_template_node_create, link_template_node_edit,
                link_template_node_delete
            ), sources=(IndexTemplateNode,)
        )
        menu_main.bind_links(links=(link_index_main_menu,), position=98)
        menu_secondary.bind_links(
            links=(link_index_setup_list, link_index_setup_create),
            sources=(
                Index, 'indexing:index_setup_list',
                'indexing:index_setup_create'
            )
        )
        menu_setup.bind_links(links=(link_index_setup,))
        menu_tools.bind_links(links=(link_rebuild_index_instances,))

        post_delete.connect(
            handler_delete_empty, dispatch_uid='handler_delete_empty',
            sender=Document
        )
        pre_delete.connect(
            handler_remove_document, dispatch_uid='handler_remove_document',
            sender=Document
        )
        post_document_created.connect(
            handler_index_document,
            dispatch_uid='handler_index_document', sender=Document
        )
        post_initial_document_type.connect(
            create_default_document_index,
            dispatch_uid='create_default_document_index', sender=DocumentType
        )
コード例 #38
0
ファイル: apps.py プロジェクト: tobennanwokike/mayan-edms
    def ready(self):
        super(DocumentsApp, self).ready()
        from actstream import registry

        DeletedDocument = self.get_model('DeletedDocument')
        Document = self.get_model('Document')
        DocumentPage = self.get_model('DocumentPage')
        DocumentPageResult = self.get_model('DocumentPageResult')
        DocumentType = self.get_model('DocumentType')
        DocumentTypeFilename = self.get_model('DocumentTypeFilename')
        DocumentVersion = self.get_model('DocumentVersion')
        DuplicatedDocument = self.get_model('DuplicatedDocument')

        DynamicSerializerField.add_serializer(
            klass=Document,
            serializer_class='documents.serializers.DocumentSerializer')

        MissingItem(
            label=_('Create a document type'),
            description=_(
                'Every uploaded document must be assigned a document type, '
                'it is the basic way Mayan EDMS categorizes documents.'),
            condition=lambda: not DocumentType.objects.exists(),
            view='documents:document_type_list')

        ModelAttribute(Document,
                       label=_('Label'),
                       name='label',
                       type_name='field')

        ModelAttribute(
            Document,
            description=_(
                'The MIME type of any of the versions of a document'),
            label=_('MIME type'),
            name='versions__mimetype',
            type_name='field')

        ModelEventType.register(model=DocumentType,
                                event_types=(event_document_create, ))
        ModelEventType.register(model=Document,
                                event_types=(event_document_download,
                                             event_document_properties_edit,
                                             event_document_type_change,
                                             event_document_new_version,
                                             event_document_version_revert,
                                             event_document_view))

        ModelPermission.register(model=Document,
                                 permissions=(
                                     permission_acl_edit,
                                     permission_acl_view,
                                     permission_document_delete,
                                     permission_document_download,
                                     permission_document_edit,
                                     permission_document_new_version,
                                     permission_document_print,
                                     permission_document_properties_edit,
                                     permission_document_restore,
                                     permission_document_trash,
                                     permission_document_version_revert,
                                     permission_document_version_view,
                                     permission_document_view,
                                     permission_events_view,
                                     permission_transformation_create,
                                     permission_transformation_delete,
                                     permission_transformation_edit,
                                     permission_transformation_view,
                                 ))

        ModelPermission.register(model=DocumentType,
                                 permissions=(permission_document_create,
                                              permission_document_type_delete,
                                              permission_document_type_edit,
                                              permission_document_type_view))

        ModelPermission.register_proxy(
            source=Document,
            model=DocumentType,
        )

        ModelPermission.register_inheritance(
            model=Document,
            related='document_type',
        )
        ModelPermission.register_inheritance(
            model=DocumentPage,
            related='document',
        )
        ModelPermission.register_inheritance(
            model=DocumentPageResult,
            related='document_version__document',
        )
        ModelPermission.register_inheritance(
            model=DocumentTypeFilename,
            related='document_type',
        )
        ModelPermission.register_inheritance(
            model=DocumentVersion,
            related='document',
        )

        # Document and document page thumbnail widget
        document_page_thumbnail_widget = DocumentPageThumbnailWidget()

        # Document
        SourceColumn(source=Document,
                     label=_('Thumbnail'),
                     func=lambda context: document_page_thumbnail_widget.
                     render(instance=context['object']))
        SourceColumn(source=Document, attribute='document_type')
        SourceColumn(source=Document,
                     label=_('Pages'),
                     func=lambda context: widget_document_page_number(
                         document=context['object']))

        # DocumentPage
        SourceColumn(source=DocumentPage,
                     label=_('Thumbnail'),
                     func=lambda context: document_page_thumbnail_widget.
                     render(instance=context['object']))

        SourceColumn(source=DocumentPageResult,
                     label=_('Thumbnail'),
                     func=lambda context: document_page_thumbnail_widget.
                     render(instance=context['object']))

        SourceColumn(source=DocumentPageResult,
                     label=_('Type'),
                     attribute='document_version.document.document_type')

        # DocumentType
        SourceColumn(source=DocumentType,
                     label=_('Documents'),
                     func=lambda context: context['object'].get_document_count(
                         user=context['request'].user))

        SourceColumn(
            source=DocumentTypeFilename,
            label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled))

        # DeletedDocument
        SourceColumn(source=DeletedDocument,
                     label=_('Thumbnail'),
                     func=lambda context: document_page_thumbnail_widget.
                     render(instance=context['object']))

        SourceColumn(source=DeletedDocument, attribute='document_type')
        SourceColumn(source=DeletedDocument, attribute='deleted_date_time')

        # DocumentVersion
        SourceColumn(source=DocumentVersion,
                     label=_('Thumbnail'),
                     func=lambda context: document_page_thumbnail_widget.
                     render(instance=context['object']))
        SourceColumn(source=DocumentVersion, attribute='timestamp')
        SourceColumn(source=DocumentVersion,
                     label=_('Pages'),
                     func=lambda context: widget_document_version_page_number(
                         document_version=context['object']))
        SourceColumn(source=DocumentVersion, attribute='mimetype')
        SourceColumn(source=DocumentVersion, attribute='encoding')
        SourceColumn(source=DocumentVersion, attribute='comment')

        # DuplicatedDocument
        SourceColumn(source=DuplicatedDocument,
                     label=_('Thumbnail'),
                     func=lambda context: document_page_thumbnail_widget.
                     render(instance=context['object'].document))
        SourceColumn(source=DuplicatedDocument,
                     label=_('Duplicates'),
                     func=lambda context: context['object'].documents.count())

        app.conf.CELERYBEAT_SCHEDULE.update({
            'task_check_delete_periods': {
                'task': 'documents.tasks.task_check_delete_periods',
                'schedule': timedelta(seconds=CHECK_DELETE_PERIOD_INTERVAL),
            },
            'task_check_trash_periods': {
                'task': 'documents.tasks.task_check_trash_periods',
                'schedule': timedelta(seconds=CHECK_TRASH_PERIOD_INTERVAL),
            },
            'task_delete_stubs': {
                'task': 'documents.tasks.task_delete_stubs',
                'schedule': timedelta(seconds=DELETE_STALE_STUBS_INTERVAL),
            },
        })

        app.conf.CELERY_QUEUES.extend((
            Queue('converter',
                  Exchange('converter'),
                  routing_key='converter',
                  delivery_mode=1),
            Queue('documents_periodic',
                  Exchange('documents_periodic'),
                  routing_key='documents_periodic',
                  delivery_mode=1),
            Queue('uploads', Exchange('uploads'), routing_key='uploads'),
            Queue('documents', Exchange('documents'), routing_key='documents'),
        ))

        app.conf.CELERY_ROUTES.update({
            'documents.tasks.task_check_delete_periods': {
                'queue': 'documents_periodic'
            },
            'documents.tasks.task_check_trash_periods': {
                'queue': 'documents_periodic'
            },
            'documents.tasks.task_clean_empty_duplicate_lists': {
                'queue': 'documents'
            },
            'documents.tasks.task_clear_image_cache': {
                'queue': 'tools'
            },
            'documents.tasks.task_delete_document': {
                'queue': 'documents'
            },
            'documents.tasks.task_delete_stubs': {
                'queue': 'documents_periodic'
            },
            'documents.tasks.task_generate_document_page_image': {
                'queue': 'converter'
            },
            'documents.tasks.task_scan_duplicates_all': {
                'queue': 'tools'
            },
            'documents.tasks.task_scan_duplicates_for': {
                'queue': 'uploads'
            },
            'documents.tasks.task_update_page_count': {
                'queue': 'uploads'
            },
            'documents.tasks.task_upload_new_version': {
                'queue': 'uploads'
            },
        })

        dashboard_main.add_widget(widget=widget_document_types)
        dashboard_main.add_widget(widget=widget_documents_in_trash)
        dashboard_main.add_widget(widget=widget_new_documents_this_month)
        dashboard_main.add_widget(widget=widget_pages_per_month)
        dashboard_main.add_widget(widget=widget_total_documents)

        menu_documents.bind_links(links=(link_document_list_recent,
                                         link_document_list,
                                         link_document_list_deleted,
                                         link_duplicated_document_list))

        menu_main.bind_links(links=(menu_documents, ), position=0)

        menu_setup.bind_links(links=(link_document_type_setup, ))
        menu_tools.bind_links(links=(link_clear_image_cache,
                                     link_duplicated_document_scan))

        # Document type links
        menu_object.bind_links(
            links=(link_document_type_edit, link_document_type_filename_list,
                   link_acl_list,
                   link_object_event_types_user_subcriptions_list,
                   link_document_type_delete),
            sources=(DocumentType, ))
        menu_object.bind_links(links=(link_document_type_filename_edit,
                                      link_document_type_filename_delete),
                               sources=(DocumentTypeFilename, ))
        menu_secondary.bind_links(links=(link_document_type_list,
                                         link_document_type_create),
                                  sources=(DocumentType,
                                           'documents:document_type_create',
                                           'documents:document_type_list'))
        menu_sidebar.bind_links(
            links=(link_document_type_filename_create, ),
            sources=(DocumentTypeFilename,
                     'documents:document_type_filename_list',
                     'documents:document_type_filename_create'))
        menu_sidebar.bind_links(links=(link_trash_can_empty, ),
                                sources=('documents:document_list_deleted',
                                         'documents:trash_can_empty'))

        # Document object links
        menu_object.bind_links(links=(
            link_document_edit,
            link_document_document_type_edit,
            link_document_print,
            link_document_trash,
            link_document_quick_download,
            link_document_download,
            link_document_clear_transformations,
            link_document_clone_transformations,
            link_document_update_page_count,
        ),
                               sources=(Document, ))
        menu_object.bind_links(links=(link_document_restore,
                                      link_document_delete),
                               sources=(DeletedDocument, ))

        # Document facet links
        menu_facet.bind_links(links=(
            link_document_duplicates_list,
            link_acl_list_with_icon,
        ),
                              sources=(Document, ))
        menu_facet.bind_links(links=(link_document_preview, ),
                              sources=(Document, ),
                              position=0)
        menu_facet.bind_links(links=(link_document_properties, ),
                              sources=(Document, ),
                              position=2)
        menu_facet.bind_links(links=(
            link_events_for_object,
            link_object_event_types_user_subcriptions_list_with_icon,
            link_document_version_list,
        ),
                              sources=(Document, ),
                              position=2)
        menu_facet.bind_links(links=(link_document_pages, ),
                              sources=(Document, ))

        # Document actions
        menu_object.bind_links(links=(link_document_version_revert,
                                      link_document_version_download),
                               sources=(DocumentVersion, ))
        menu_multi_item.bind_links(
            links=(link_document_multiple_clear_transformations,
                   link_document_multiple_trash,
                   link_document_multiple_download,
                   link_document_multiple_update_page_count,
                   link_document_multiple_document_type_edit),
            sources=(Document, ))
        menu_multi_item.bind_links(links=(link_document_multiple_restore,
                                          link_document_multiple_delete),
                                   sources=(DeletedDocument, ))

        # Document pages
        menu_facet.bind_links(
            links=(link_document_page_rotate_left,
                   link_document_page_rotate_right, link_document_page_zoom_in,
                   link_document_page_zoom_out, link_document_page_view_reset),
            sources=('documents:document_page_view', ))
        menu_facet.bind_links(links=(link_document_page_return,
                                     link_document_page_view),
                              sources=(DocumentPage, ))
        menu_facet.bind_links(links=(link_document_page_navigation_first,
                                     link_document_page_navigation_previous,
                                     link_document_page_navigation_next,
                                     link_document_page_navigation_last,
                                     link_transformation_list),
                              sources=(DocumentPage, ))
        menu_object.bind_links(links=(link_transformation_list, ),
                               sources=(DocumentPage, ))

        # Document versions
        menu_facet.bind_links(links=(link_document_version_return_document,
                                     link_document_version_return_list),
                              sources=(DocumentVersion, ))
        menu_facet.bind_links(links=(link_document_version_view, ),
                              sources=(DocumentVersion, ))

        post_delete.connect(
            dispatch_uid='handler_remove_empty_duplicates_lists',
            receiver=handler_remove_empty_duplicates_lists,
            sender=Document,
        )
        post_initial_setup.connect(create_default_document_type,
                                   dispatch_uid='create_default_document_type')
        post_version_upload.connect(
            handler_scan_duplicates_for,
            dispatch_uid='handler_scan_duplicates_for',
        )

        registry.register(DeletedDocument)
        registry.register(Document)
        registry.register(DocumentType)
        registry.register(DocumentVersion)
コード例 #39
0
    def ready(self):
        super(MailerApp, self).ready()

        Document = apps.get_model(app_label='documents', model_name='Document')

        LogEntry = self.get_model('LogEntry')
        UserMailer = self.get_model('UserMailer')

        MailerBackend.initialize()

        SourceColumn(source=LogEntry,
                     label=_('Date and time'),
                     attribute='datetime')
        SourceColumn(source=LogEntry, label=_('Message'), attribute='message')
        SourceColumn(source=UserMailer, label=_('Label'), attribute='label')
        SourceColumn(
            source=UserMailer,
            label=_('Default?'),
            func=lambda context: two_state_template(context['object'].default))
        SourceColumn(
            source=UserMailer,
            label=_('Enabled?'),
            func=lambda context: two_state_template(context['object'].enabled))
        SourceColumn(source=UserMailer,
                     label=_('Label'),
                     attribute='backend_label')

        ModelPermission.register(
            model=Document,
            permissions=(permission_mailing_link,
                         permission_mailing_send_document))

        ModelPermission.register(model=UserMailer,
                                 permissions=(permission_user_mailer_delete,
                                              permission_user_mailer_edit,
                                              permission_user_mailer_view,
                                              permission_user_mailer_use))

        app.conf.CELERY_QUEUES.append(
            Queue('mailing', Exchange('mailing'), routing_key='mailing'), )

        app.conf.CELERY_ROUTES.update({
            'mailer.tasks.task_send_document': {
                'queue': 'mailing'
            },
        })

        menu_multi_item.bind_links(links=(link_send_multiple_document,
                                          link_send_multiple_document_link),
                                   sources=(Document, ))

        menu_object.bind_links(links=(link_send_document_link,
                                      link_send_document),
                               sources=(Document, ))

        menu_object.bind_links(links=(
            link_user_mailer_edit,
            link_user_mailer_log_list,
            link_user_mailer_test,
            link_user_mailer_delete,
        ),
                               sources=(UserMailer, ))

        menu_secondary.bind_links(links=(
            link_user_mailer_list,
            link_user_mailer_create,
        ),
                                  sources=(UserMailer,
                                           'mailer:user_mailer_list',
                                           'mailer:user_mailer_create'))

        menu_tools.bind_links(links=(link_system_mailer_error_log, ))

        menu_setup.bind_links(links=(link_user_mailer_setup, ))
コード例 #40
0
ファイル: apps.py プロジェクト: jorik041/open-paperless
    def ready(self):
        super(UserManagementApp, self).ready()
        from actstream import registry

        Group = apps.get_model(app_label='auth', model_name='Group')
        User = get_user_model()

        APIEndPoint(app=self, version_string='1')
        DynamicSerializerField.add_serializer(
            klass=get_user_model(),
            serializer_class='user_management.serializers.UserSerializer'
        )

        MetadataLookup(
            description=_('All the groups.'), name='groups',
            value=get_groups
        )
        MetadataLookup(
            description=_('All the users.'), name='users',
            value=get_users
        )

        SourceColumn(
            source=Group, label=_('Members'), attribute='user_set.count'
        )

        SourceColumn(
            source=User, label=_('Full name'), attribute='get_full_name'
        )
        SourceColumn(
            source=User, label=_('Email'), attribute='email'
        )
        SourceColumn(
            source=User, label=_('Active'),
            func=lambda context: two_state_template(
                context['object'].is_active
            )
        )
        SourceColumn(
            source=User, label=_('Has usable password?'),
            func=lambda context: two_state_template(
                context['object'].has_usable_password()
            )
        )

        menu_multi_item.bind_links(
            links=(link_user_multiple_set_password, link_user_multiple_delete),
            sources=('user_management:user_list',)
        )
        menu_object.bind_links(
            links=(link_group_edit, link_group_members, link_group_delete),
            sources=(Group,)
        )
        menu_object.bind_links(
            links=(
                link_user_edit, link_user_set_password, link_user_groups,
                link_user_delete
            ), sources=(User,)
        )
        menu_secondary.bind_links(
            links=(link_group_list, link_group_add), sources=(
                'user_management:group_multiple_delete',
                'user_management:group_delete', 'user_management:group_edit',
                'user_management:group_list', 'user_management:group_add',
                'user_management:group_members'
            )
        )
        menu_secondary.bind_links(
            links=(link_user_list, link_user_add), sources=(
                User, 'user_management:user_multiple_set_password',
                'user_management:user_multiple_delete',
                'user_management:user_list', 'user_management:user_add'
            )
        )
        menu_setup.bind_links(links=(link_user_setup, link_group_setup))

        registry.register(Group)
        registry.register(User)
コード例 #41
0
ファイル: apps.py プロジェクト: Hackthings/mayan-edms
    def ready(self):
        super(MetadataApp, self).ready()

        Document = apps.get_model(app_label='documents', model_name='Document')
        DocumentPageResult = apps.get_model(app_label='documents',
                                            model_name='DocumentPageResult')

        DocumentType = apps.get_model(app_label='documents',
                                      model_name='DocumentType')

        DocumentMetadata = self.get_model('DocumentMetadata')
        DocumentTypeMetadataType = self.get_model('DocumentTypeMetadataType')
        MetadataType = self.get_model('MetadataType')

        APIEndPoint(app=self, version_string='2')

        Document.add_to_class('metadata_value_of',
                              DocumentMetadataHelper.constructor)

        Filter(label=_('Documents missing required metadata'),
               slug='documents-no-required-metadata',
               filter_kwargs=[{
                   'document_type__metadata__required': True,
               }, {
                   'metadata__value__isnull': True
               }, {
                   'is_stub': False
               }],
               model=Document,
               object_permission=permission_document_view,
               hide_links=True)

        Filter(label=_('Documents missing optional metadata'),
               slug='documents-no-optional-metadata',
               filter_kwargs=[{
                   'document_type__metadata__required': False,
               }, {
                   'metadata__value__isnull': True
               }, {
                   'is_stub': False
               }],
               model=Document,
               object_permission=permission_document_view,
               hide_links=True)

        ModelAttribute(
            Document,
            'metadata',
            type_name='related',
            description=_(
                'Queryset containing a MetadataType instance reference and a '
                'value for that metadata type'))
        ModelAttribute(Document,
                       'metadata__metadata_type__name',
                       label=_('Metadata type name'),
                       type_name='query')
        ModelAttribute(Document,
                       'metadata__value',
                       label=_('Metadata type value'),
                       type_name='query')
        ModelAttribute(
            Document,
            'metadata_value_of',
            label=_('Value of a metadata'),
            description=_('Return the value of a specific document metadata'),
            type_name=['property', 'indexing'])

        ModelPermission.register(model=Document,
                                 permissions=(
                                     permission_metadata_document_add,
                                     permission_metadata_document_edit,
                                     permission_metadata_document_remove,
                                     permission_metadata_document_view,
                                 ))

        SourceColumn(
            source=Document,
            label=_('Metadata'),
            func=lambda context: get_metadata_string(context['object']))

        SourceColumn(source=DocumentPageResult,
                     label=_('Metadata'),
                     func=lambda context: get_metadata_string(context['object']
                                                              .document))

        SourceColumn(source=DocumentMetadata,
                     label=_('Value'),
                     attribute='value')
        SourceColumn(source=DocumentMetadata,
                     label=_('Required'),
                     func=lambda context: two_state_template(context['object'].
                                                             is_required))

        app.conf.CELERY_QUEUES.append(
            Queue('metadata', Exchange('metadata'), routing_key='metadata'), )

        app.conf.CELERY_ROUTES.update({
            'metadata.tasks.task_remove_metadata_type': {
                'queue': 'metadata'
            },
            'metadata.tasks.task_add_required_metadata_type': {
                'queue': 'metadata'
            },
        })

        document_search.add_model_field(field='metadata__metadata_type__name',
                                        label=_('Metadata type'))
        document_search.add_model_field(field='metadata__value',
                                        label=_('Metadata value'))

        document_page_search.add_model_field(
            field='document_version__document__metadata__metadata_type__name',
            label=_('Metadata type'))
        document_page_search.add_model_field(
            field='document_version__document__metadata__value',
            label=_('Metadata value'))

        menu_facet.bind_links(links=(link_metadata_view, ),
                              sources=(Document, ))
        menu_multi_item.bind_links(links=(link_metadata_multiple_add,
                                          link_metadata_multiple_edit,
                                          link_metadata_multiple_remove),
                                   sources=(Document, ))
        menu_object.bind_links(
            links=(link_setup_document_type_metadata,
                   link_setup_document_type_metadata_required),
            sources=(DocumentType, ))
        menu_object.bind_links(links=(link_setup_metadata_type_edit,
                                      link_setup_metadata_type_delete),
                               sources=(MetadataType, ))
        menu_secondary.bind_links(
            links=(link_setup_metadata_type_list,
                   link_setup_metadata_type_create),
            sources=(MetadataType, 'metadata:setup_metadata_type_list',
                     'metadata:setup_metadata_type_create'))
        menu_setup.bind_links(links=(link_setup_metadata_type_list, ))
        menu_sidebar.bind_links(
            links=(link_metadata_add, link_metadata_edit,
                   link_metadata_remove),
            sources=('metadata:metadata_add', 'metadata:metadata_edit',
                     'metadata:metadata_remove', 'metadata:metadata_view'))

        post_delete.connect(
            post_document_type_metadata_type_delete,
            dispatch_uid='post_document_type_metadata_type_delete',
            sender=DocumentTypeMetadataType)
        post_document_type_change.connect(
            post_post_document_type_change_metadata,
            dispatch_uid='post_post_document_type_change_metadata',
            sender=Document)
        post_save.connect(post_document_type_metadata_type_add,
                          dispatch_uid='post_document_type_metadata_type_add',
                          sender=DocumentTypeMetadataType)
コード例 #42
0
ファイル: apps.py プロジェクト: jorik041/open-paperless
    def ready(self):
        super(LinkingApp, self).ready()

        APIEndPoint(app=self, version_string='1')

        Document = apps.get_model(
            app_label='documents', model_name='Document'
        )

        ResolvedSmartLink = self.get_model('ResolvedSmartLink')
        SmartLink = self.get_model('SmartLink')
        SmartLinkCondition = self.get_model('SmartLinkCondition')

        ModelPermission.register(
            model=SmartLink, permissions=(
                permission_acl_edit, permission_acl_view,
                permission_smart_link_delete, permission_smart_link_edit,
                permission_smart_link_view
            )
        )

        SourceColumn(
            source=ResolvedSmartLink, label=_('Label'),
            func=lambda context: context['object'].get_dynamic_label(
                context['document']
            )
        )

        SourceColumn(
            source=SmartLink, label=_('Dynamic label'),
            attribute='dynamic_label'
        )
        SourceColumn(
            source=SmartLink, label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled)
        )

        SourceColumn(
            source=SmartLinkCondition, label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled)
        )

        menu_facet.bind_links(
            links=(link_smart_link_instances_for_document,),
            sources=(Document,)
        )
        menu_object.bind_links(
            links=(
                link_smart_link_condition_edit,
                link_smart_link_condition_delete
            ), sources=(SmartLinkCondition,)
        )
        menu_object.bind_links(
            links=(
                link_smart_link_edit, link_smart_link_document_types,
                link_smart_link_condition_list, link_acl_list,
                link_smart_link_delete
            ), sources=(SmartLink,)
        )
        menu_object.bind_links(
            links=(link_smart_link_instance_view,),
            sources=(ResolvedSmartLink,)
        )
        menu_secondary.bind_links(
            links=(link_smart_link_list, link_smart_link_create),
            sources=(
                SmartLink, 'linking:smart_link_list',
                'linking:smart_link_create'
            )
        )
        menu_setup.bind_links(links=(link_smart_link_setup,))
        menu_sidebar.bind_links(
            links=(link_smart_link_condition_create,),
            sources=(
                'linking:smart_link_condition_list',
                'linking:smart_link_condition_create',
                'linking:smart_link_condition_edit',
                'linking:smart_link_condition_delete'
            )
        )
コード例 #43
0
ファイル: apps.py プロジェクト: jorik041/open-paperless
    def ready(self):
        super(DocumentStatesApp, self).ready()

        APIEndPoint(app=self, version_string='1')

        Action = apps.get_model(
            app_label='actstream', model_name='Action'
        )
        Document = apps.get_model(
            app_label='documents', model_name='Document'
        )
        ErrorLogEntry = apps.get_model(
            app_label='common', model_name='ErrorLogEntry'
        )

        Workflow = self.get_model('Workflow')
        WorkflowInstance = self.get_model('WorkflowInstance')
        WorkflowInstanceLogEntry = self.get_model('WorkflowInstanceLogEntry')
        WorkflowRuntimeProxy = self.get_model('WorkflowRuntimeProxy')
        WorkflowState = self.get_model('WorkflowState')
        WorkflowStateAction = self.get_model('WorkflowStateAction')
        WorkflowStateRuntimeProxy = self.get_model('WorkflowStateRuntimeProxy')
        WorkflowTransition = self.get_model('WorkflowTransition')
        WorkflowTransitionTriggerEvent = self.get_model(
            'WorkflowTransitionTriggerEvent'
        )

        Document.add_to_class(
            'workflow', DocumentStateHelper.constructor
        )

        ErrorLogEntry.objects.register(model=WorkflowStateAction)

        WorkflowAction.initialize()

        ModelAttribute(
            Document, 'workflow.< workflow internal name >.get_current_state',
            label=_('Current state of a workflow'), description=_(
                'Return the current state of the selected workflow'
            ), type_name=['property', 'indexing']
        )
        ModelAttribute(
            Document,
            'workflow.< workflow internal name >.get_current_state.completion',
            label=_('Current state of a workflow'), description=_(
                'Return the completion value of the current state of the '
                'selected workflow'
            ), type_name=['property', 'indexing']
        )

        ModelPermission.register(
            model=Workflow, permissions=(
                permission_error_log_view, permission_workflow_delete,
                permission_workflow_edit, permission_workflow_transition,
                permission_workflow_view,
            )
        )

        ModelPermission.register_inheritance(
            model=WorkflowInstance, related='workflow',
        )
        ModelPermission.register_inheritance(
            model=WorkflowInstanceLogEntry,
            related='workflow_instance__workflow',
        )
        ModelPermission.register(
            model=WorkflowTransition,
            permissions=(permission_workflow_transition,)
        )

        ModelPermission.register_inheritance(
            model=WorkflowState, related='workflow',
        )
        ModelPermission.register_inheritance(
            model=WorkflowStateAction, related='state__workflow',
        )
        ModelPermission.register_inheritance(
            model=WorkflowTransition, related='workflow',
        )
        ModelPermission.register_inheritance(
            model=WorkflowTransitionTriggerEvent,
            related='transition__workflow',
        )

        SourceColumn(
            source=Workflow, label=_('Label'), attribute='label'
        )
        SourceColumn(
            source=Workflow, label=_('Internal name'),
            attribute='internal_name'
        )
        SourceColumn(
            source=Workflow, label=_('Initial state'),
            func=lambda context: context['object'].get_initial_state() or _('None')
        )

        SourceColumn(
            source=WorkflowInstance, label=_('Current state'),
            attribute='get_current_state'
        )
        SourceColumn(
            source=WorkflowInstance, label=_('User'),
            func=lambda context: getattr(
                context['object'].get_last_log_entry(), 'user', _('None')
            )
        )
        SourceColumn(
            source=WorkflowInstance, label=_('Last transition'),
            attribute='get_last_transition'
        )
        SourceColumn(
            source=WorkflowInstance, label=_('Date and time'),
            func=lambda context: getattr(
                context['object'].get_last_log_entry(), 'datetime', _('None')
            )
        )
        SourceColumn(
            source=WorkflowInstance, label=_('Completion'),
            func=lambda context: getattr(
                context['object'].get_current_state(), 'completion', _('None')
            )
        )

        SourceColumn(
            source=WorkflowInstanceLogEntry, label=_('Date and time'),
            attribute='datetime'
        )
        SourceColumn(
            source=WorkflowInstanceLogEntry, label=_('User'), attribute='user'
        )
        SourceColumn(
            source=WorkflowInstanceLogEntry, label=_('Transition'),
            attribute='transition'
        )
        SourceColumn(
            source=WorkflowInstanceLogEntry, label=_('Comment'),
            attribute='comment'
        )

        SourceColumn(
            source=WorkflowState, label=_('Is initial state?'),
            func=lambda context: two_state_template(context['object'].initial)
        )
        SourceColumn(
            source=WorkflowState, label=_('Completion'), attribute='completion'
        )

        SourceColumn(
            source=WorkflowStateAction, label=_('Label'), attribute='label'
        )
        SourceColumn(
            source=WorkflowStateAction, label=_('Enabled?'),
            func=lambda context: two_state_template(context['object'].enabled)
        )
        SourceColumn(
            source=WorkflowStateAction, label=_('When?'),
            attribute='get_when_display'
        )
        SourceColumn(
            source=WorkflowStateAction, label=_('Action type'),
            attribute='get_class_label'
        )

        SourceColumn(
            source=WorkflowTransition, label=_('Origin state'),
            attribute='origin_state'
        )
        SourceColumn(
            source=WorkflowTransition, label=_('Destination state'),
            attribute='destination_state'
        )
        SourceColumn(
            source=WorkflowTransition, label=_('Triggers'),
            func=lambda context: widget_transition_events(
                transition=context['object']
            )
        )

        app.conf.CELERY_QUEUES.extend(
            (
                Queue(
                    'document_states', Exchange('document_states'),
                    routing_key='document_states'
                ),
            )
        )

        app.conf.CELERY_ROUTES.update(
            {
                'document_states.tasks.task_launch_all_workflows': {
                    'queue': 'document_states'
                },
            }
        )

        menu_facet.bind_links(
            links=(link_document_workflow_instance_list,), sources=(Document,)
        )
        menu_main.bind_links(links=(link_workflow_list,), position=10)
        menu_object.bind_links(
            links=(
                link_setup_workflow_states, link_setup_workflow_transitions,
                link_setup_workflow_document_types, link_setup_workflow_edit,
                link_acl_list, link_workflow_preview,
                link_setup_workflow_delete
            ), sources=(Workflow,)
        )
        menu_object.bind_links(
            links=(
                link_setup_workflow_state_edit,
                link_setup_workflow_state_action_list,
                link_setup_workflow_state_delete
            ), sources=(WorkflowState,)
        )
        menu_object.bind_links(
            links=(
                link_setup_workflow_transition_edit,
                link_workflow_instance_transition_events, link_acl_list,
                link_setup_workflow_transition_delete
            ), sources=(WorkflowTransition,)
        )
        menu_object.bind_links(
            links=(
                link_workflow_instance_detail,
                link_workflow_instance_transition
            ), sources=(WorkflowInstance,)
        )
        menu_object.bind_links(
            links=(
                link_workflow_document_list, link_workflow_state_list,
            ), sources=(WorkflowRuntimeProxy,)
        )
        menu_object.bind_links(
            links=(
                link_workflow_state_document_list,
            ), sources=(WorkflowStateRuntimeProxy,)
        )
        menu_object.bind_links(
            links=(
                link_setup_workflow_state_action_edit,
                link_object_error_list,
                link_setup_workflow_state_action_delete,
            ), sources=(WorkflowStateAction,)
        )

        menu_secondary.bind_links(
            links=(link_setup_workflow_list, link_setup_workflow_create),
            sources=(
                Workflow, 'document_states:setup_workflow_create',
                'document_states:setup_workflow_list'
            )
        )
        menu_secondary.bind_links(
            links=(link_workflow_list,),
            sources=(
                WorkflowRuntimeProxy,
            )
        )
        menu_secondary.bind_links(
            links=(link_setup_workflow_state_action_selection,),
            sources=(
                WorkflowState,
            )
        )
        menu_setup.bind_links(links=(link_setup_workflow_list,))
        menu_sidebar.bind_links(
            links=(
                link_setup_workflow_state_create,
                link_setup_workflow_transition_create
            ), sources=(Workflow,)
        )
        menu_tools.bind_links(links=(link_tool_launch_all_workflows,))

        post_save.connect(
            launch_workflow, dispatch_uid='launch_workflow', sender=Document
        )

        # Index updating

        post_save.connect(
            handler_index_document,
            dispatch_uid='handler_index_document_save',
            sender=WorkflowInstanceLogEntry
        )
        post_save.connect(
            handler_trigger_transition,
            dispatch_uid='document_states_handler_trigger_transition',
            sender=Action
        )
コード例 #44
0
    def ready(self):
        super(UserManagementApp, self).ready()
        from actstream import registry

        Group = apps.get_model(app_label='auth', model_name='Group')
        User = get_user_model()

        DynamicSerializerField.add_serializer(
            klass=get_user_model(),
            serializer_class='user_management.serializers.UserSerializer')

        MetadataLookup(description=_('All the groups.'),
                       name='groups',
                       value=get_groups)
        MetadataLookup(description=_('All the users.'),
                       name='users',
                       value=get_users)
        ModelPermission.register(model=Group,
                                 permissions=(
                                     permission_acl_edit,
                                     permission_acl_view,
                                     permission_group_delete,
                                     permission_group_edit,
                                     permission_group_view,
                                 ))
        ModelPermission.register(
            model=User,
            permissions=(permission_acl_edit, permission_acl_view,
                         permission_user_delete, permission_user_edit,
                         permission_user_view))
        SourceColumn(source=Group,
                     label=_('Users'),
                     attribute='user_set.count')

        SourceColumn(source=User,
                     label=_('Full name'),
                     attribute='get_full_name')
        SourceColumn(source=User, label=_('Email'), attribute='email')
        SourceColumn(source=User,
                     label=_('Active'),
                     func=lambda context: two_state_template(context['object'].
                                                             is_active))
        SourceColumn(source=User,
                     label=_('Has usable password?'),
                     func=lambda context: two_state_template(context[
                         'object'].has_usable_password()))

        menu_multi_item.bind_links(links=(link_user_multiple_set_password,
                                          link_user_multiple_delete),
                                   sources=('user_management:user_list', ))
        menu_object.bind_links(links=(
            link_group_edit,
            link_group_members,
        ),
                               sources=(Group, ))
        menu_object.bind_links(links=(
            link_acl_list,
            link_group_delete,
        ),
                               position=99,
                               sources=(Group, ))
        menu_object.bind_links(links=(link_user_edit, link_user_set_password,
                                      link_user_groups, link_acl_list,
                                      link_user_delete),
                               sources=(User, ))
        menu_secondary.bind_links(
            links=(link_group_list, link_group_add),
            sources=('user_management:group_multiple_delete',
                     'user_management:group_list', 'user_management:group_add',
                     Group))
        menu_secondary.bind_links(
            links=(link_user_list, link_user_add),
            sources=(User, 'user_management:user_multiple_set_password',
                     'user_management:user_multiple_delete',
                     'user_management:user_list', 'user_management:user_add'))
        menu_setup.bind_links(links=(link_user_setup, link_group_setup))

        registry.register(Group)
        registry.register(User)
コード例 #45
0
register_setup(group_setup)

register_model_list_columns(User, [
    {
        'name': _(u'full name'),
        'attribute': 'get_full_name'
    },
    {
        'name': _(u'email'),
        'attribute': 'email'
    },
    {
        'name':
        _(u'active'),
        'attribute':
        encapsulate(lambda x: two_state_template(x.is_active).display_small()),
    },
    {
        'name':
        _(u'has usable password?'),
        'attribute':
        encapsulate(lambda x: two_state_template(x.has_usable_password()).
                    display_small()),
    },
])

register_model_list_columns(Group, [
    {
        'name': _(u'members'),
        'attribute': 'user_set.count'
    },
コード例 #46
0
ファイル: __init__.py プロジェクト: Code4PuertoRico/rua
    link_agency_edit, link_agency_delete, link_position_add, link_position_delete,
    link_position_edit, link_position_list, link_department_add, link_department_delete,
    link_department_edit, link_department_list)
from .models import Agency, AgencyPosition, AgencyDepartment

Link.bind_links([Agency], [link_agency_edit, link_agency_delete, link_position_list, link_department_list])
Link.bind_links([Agency, 'agency_list', 'agency_add'], [link_agency_list, link_agency_add], menu_name=u'secondary_menu')

Link.bind_links([AgencyPosition, 'position_add', 'position_list'], [link_position_add], menu_name=u'sidebar')
Link.bind_links([AgencyPosition], [link_position_edit, link_position_delete])

Link.bind_links([AgencyDepartment, 'department_add', 'department_list'], [link_department_add], menu_name=u'sidebar')
Link.bind_links([AgencyDepartment], [link_department_edit, link_department_delete])

register_top_menu('agencies_menu', link=link_agencies_menu, position=2)

register_model_list_columns(AgencyDepartment, [
    {
        'name': _(u'main department?'),
        'attribute': encapsulate(lambda x: two_state_template(x.main_department).display_small())
    },
    {
        'name': _(u'creation date'),
        'attribute': 'start_date',
    },
    {
        'name': _(u'date disbanding'),
        'attribute': 'end_date',
    },
])
コード例 #47
0
ファイル: apps.py プロジェクト: leolimma/maxacali
    def ready(self):
        super(DocumentIndexingApp, self).ready()

        Document = apps.get_model(app_label='documents', model_name='Document')

        DocumentType = apps.get_model(app_label='documents',
                                      model_name='DocumentType')

        DocumentMetadata = apps.get_model(app_label='metadata',
                                          model_name='DocumentMetadata')

        DocumentIndexInstanceNode = self.get_model('DocumentIndexInstanceNode')

        Index = self.get_model('Index')
        IndexInstance = self.get_model('IndexInstance')
        IndexInstanceNode = self.get_model('IndexInstanceNode')
        IndexTemplateNode = self.get_model('IndexTemplateNode')

        APIEndPoint(app=self, version_string='1')

        ModelPermission.register(model=Index,
                                 permissions=(
                                     permission_acl_edit,
                                     permission_acl_view,
                                     permission_document_indexing_create,
                                     permission_document_indexing_delete,
                                     permission_document_indexing_edit,
                                     permission_document_indexing_view,
                                 ))

        Package(label='Django MPTT',
                license_text='''
Django MPTT
-----------

Copyright (c) 2007, Jonathan Buchanan

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
        ''')

        Package(label='djangorestframework-recursive',
                license_text='''
Copyright (c) 2015, Warren Jin <*****@*****.**>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
        ''')

        SourceColumn(source=Index, label=_('Label'), attribute='label')
        SourceColumn(source=Index, label=_('Slug'), attribute='slug')
        SourceColumn(
            source=Index,
            label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled))

        SourceColumn(source=IndexInstance,
                     label=_('Items'),
                     func=lambda context: context['object'].get_item_count(
                         user=context['request'].user))
        SourceColumn(source=IndexInstance,
                     label=_('Document types'),
                     attribute='get_document_types_names')

        SourceColumn(source=IndexTemplateNode,
                     label=_('Level'),
                     func=lambda context: node_level(context['object']))
        SourceColumn(
            source=IndexTemplateNode,
            label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled))
        SourceColumn(source=IndexTemplateNode,
                     label=_('Has document links?'),
                     func=lambda context: two_state_template(context['object'].
                                                             link_documents))

        SourceColumn(
            source=IndexInstanceNode,
            label=_('Node'),
            func=lambda context: index_instance_item_link(context['object']))
        SourceColumn(source=IndexInstanceNode,
                     label=_('Items'),
                     func=lambda context: context['object'].get_item_count(
                         user=context['request'].user))

        SourceColumn(source=DocumentIndexInstanceNode,
                     label=_('Node'),
                     func=lambda context: get_instance_link(
                         index_instance_node=context['object'], ))
        SourceColumn(source=DocumentIndexInstanceNode,
                     label=_('Items'),
                     func=lambda context: context['object'].get_item_count(
                         user=context['request'].user))

        app.conf.CELERY_QUEUES.append(
            Queue('indexing', Exchange('indexing'), routing_key='indexing'), )

        app.conf.CELERY_ROUTES.update({
            'document_indexing.tasks.task_delete_empty_index_nodes': {
                'queue': 'indexing'
            },
            'document_indexing.tasks.task_index_document': {
                'queue': 'indexing'
            },
            'document_indexing.tasks.task_do_rebuild_all_indexes': {
                'queue': 'tools'
            },
        })

        menu_facet.bind_links(links=(link_document_index_list, ),
                              sources=(Document, ))
        menu_object.bind_links(links=(link_index_setup_edit,
                                      link_index_setup_view,
                                      link_index_setup_document_types,
                                      link_acl_list, link_index_setup_delete),
                               sources=(Index, ))
        menu_object.bind_links(links=(link_template_node_create,
                                      link_template_node_edit,
                                      link_template_node_delete),
                               sources=(IndexTemplateNode, ))
        menu_main.bind_links(links=(link_index_main_menu, ))
        menu_secondary.bind_links(links=(link_index_setup_list,
                                         link_index_setup_create),
                                  sources=(Index, 'indexing:index_setup_list',
                                           'indexing:index_setup_create'))
        menu_setup.bind_links(links=(link_index_setup, ))
        menu_tools.bind_links(links=(link_rebuild_index_instances, ))

        post_delete.connect(document_index_delete,
                            dispatch_uid='document_index_delete',
                            sender=Document)
        post_delete.connect(document_metadata_index_post_delete,
                            dispatch_uid='document_metadata_index_post_delete',
                            sender=DocumentMetadata)
        post_document_created.connect(
            document_created_index_update,
            dispatch_uid='document_created_index_update',
            sender=Document)
        post_initial_document_type.connect(
            create_default_document_index,
            dispatch_uid='create_default_document_index',
            sender=DocumentType)
        post_save.connect(document_metadata_index_update,
                          dispatch_uid='document_metadata_index_update',
                          sender=DocumentMetadata)
コード例 #48
0
ファイル: __init__.py プロジェクト: cericoda/rua
    "user_add",
    "user_delete",
    "user_multiple_delete",
    "user_set_password",
    "user_multiple_set_password",
    "group_list",
    "group_edit",
    "group_add",
    "group_delete",
    "group_multiple_delete",
    "group_members",
]

register_setup(user_setup)
register_setup(group_setup)

register_model_list_columns(
    User,
    [
        {"name": _(u"full name"), "attribute": "get_full_name"},
        {"name": _(u"email"), "attribute": "email"},
        {"name": _(u"active"), "attribute": encapsulate(lambda x: two_state_template(x.is_active).display_small())},
        {
            "name": _(u"has usable password?"),
            "attribute": encapsulate(lambda x: two_state_template(x.has_usable_password()).display_small()),
        },
    ],
)

register_model_list_columns(Group, [{"name": _(u"members"), "attribute": "user_set.count"}])
コード例 #49
0
Link.bind_links([AgencyPosition, 'position_add', 'position_list'],
                [link_position_add],
                menu_name=u'sidebar')
Link.bind_links([AgencyPosition], [link_position_edit, link_position_delete])

Link.bind_links([AgencyDepartment, 'department_add', 'department_list'],
                [link_department_add],
                menu_name=u'sidebar')
Link.bind_links([AgencyDepartment],
                [link_department_edit, link_department_delete])

register_top_menu('agencies_menu', link=link_agencies_menu, position=2)

register_model_list_columns(AgencyDepartment, [
    {
        'name':
        _(u'main department?'),
        'attribute':
        encapsulate(
            lambda x: two_state_template(x.main_department).display_small())
    },
    {
        'name': _(u'creation date'),
        'attribute': 'start_date',
    },
    {
        'name': _(u'date disbanding'),
        'attribute': 'end_date',
    },
])
コード例 #50
0
ファイル: apps.py プロジェクト: tobennanwokike/mayan-edms
    def ready(self):
        super(DocumentStatesApp, self).ready()

        Action = apps.get_model(app_label='actstream', model_name='Action')
        Document = apps.get_model(app_label='documents', model_name='Document')
        ErrorLogEntry = apps.get_model(app_label='common',
                                       model_name='ErrorLogEntry')

        Workflow = self.get_model('Workflow')
        WorkflowInstance = self.get_model('WorkflowInstance')
        WorkflowInstanceLogEntry = self.get_model('WorkflowInstanceLogEntry')
        WorkflowRuntimeProxy = self.get_model('WorkflowRuntimeProxy')
        WorkflowState = self.get_model('WorkflowState')
        WorkflowStateAction = self.get_model('WorkflowStateAction')
        WorkflowStateRuntimeProxy = self.get_model('WorkflowStateRuntimeProxy')
        WorkflowTransition = self.get_model('WorkflowTransition')
        WorkflowTransitionTriggerEvent = self.get_model(
            'WorkflowTransitionTriggerEvent')

        Document.add_to_class('workflow', DocumentStateHelper.constructor)

        ErrorLogEntry.objects.register(model=WorkflowStateAction)

        WorkflowAction.initialize()

        ModelAttribute(
            Document,
            'workflow.< workflow internal name >.get_current_state',
            label=_('Current state of a workflow'),
            description=_('Return the current state of the selected workflow'),
            type_name=['property', 'indexing'])
        ModelAttribute(
            Document,
            'workflow.< workflow internal name >.get_current_state.completion',
            label=_('Current state of a workflow'),
            description=_(
                'Return the completion value of the current state of the '
                'selected workflow'),
            type_name=['property', 'indexing'])

        ModelPermission.register(model=Document,
                                 permissions=(permission_workflow_view, ))
        ModelPermission.register(model=Workflow,
                                 permissions=(
                                     permission_error_log_view,
                                     permission_workflow_delete,
                                     permission_workflow_edit,
                                     permission_workflow_transition,
                                     permission_workflow_view,
                                 ))

        ModelPermission.register_inheritance(
            model=WorkflowInstance,
            related='workflow',
        )
        ModelPermission.register_inheritance(
            model=WorkflowInstanceLogEntry,
            related='workflow_instance__workflow',
        )
        ModelPermission.register(
            model=WorkflowTransition,
            permissions=(permission_workflow_transition, ))

        ModelPermission.register_inheritance(
            model=WorkflowState,
            related='workflow',
        )
        ModelPermission.register_inheritance(
            model=WorkflowStateAction,
            related='state__workflow',
        )
        ModelPermission.register_inheritance(
            model=WorkflowTransition,
            related='workflow',
        )
        ModelPermission.register_inheritance(
            model=WorkflowTransitionTriggerEvent,
            related='transition__workflow',
        )

        SourceColumn(source=Workflow, label=_('Label'), attribute='label')
        SourceColumn(source=Workflow,
                     label=_('Internal name'),
                     attribute='internal_name')
        SourceColumn(source=Workflow,
                     label=_('Initial state'),
                     func=lambda context: context['object'].get_initial_state(
                     ) or _('None'))

        SourceColumn(source=WorkflowInstance,
                     label=_('Current state'),
                     attribute='get_current_state')
        SourceColumn(
            source=WorkflowInstance,
            label=_('User'),
            func=lambda context: getattr(
                context['object'].get_last_log_entry(), 'user', _('None')))
        SourceColumn(source=WorkflowInstance,
                     label=_('Last transition'),
                     attribute='get_last_transition')
        SourceColumn(
            source=WorkflowInstance,
            label=_('Date and time'),
            func=lambda context: getattr(
                context['object'].get_last_log_entry(), 'datetime', _('None')))
        SourceColumn(
            source=WorkflowInstance,
            label=_('Completion'),
            func=lambda context: getattr(context['object'].get_current_state(),
                                         'completion', _('None')))

        SourceColumn(source=WorkflowInstanceLogEntry,
                     label=_('Date and time'),
                     attribute='datetime')
        SourceColumn(source=WorkflowInstanceLogEntry,
                     label=_('User'),
                     attribute='user')
        SourceColumn(source=WorkflowInstanceLogEntry,
                     label=_('Transition'),
                     attribute='transition')
        SourceColumn(source=WorkflowInstanceLogEntry,
                     label=_('Comment'),
                     attribute='comment')

        SourceColumn(
            source=WorkflowState,
            label=_('Is initial state?'),
            func=lambda context: two_state_template(context['object'].initial))
        SourceColumn(source=WorkflowState,
                     label=_('Completion'),
                     attribute='completion')

        SourceColumn(source=WorkflowStateAction,
                     label=_('Label'),
                     attribute='label')
        SourceColumn(
            source=WorkflowStateAction,
            label=_('Enabled?'),
            func=lambda context: two_state_template(context['object'].enabled))
        SourceColumn(source=WorkflowStateAction,
                     label=_('When?'),
                     attribute='get_when_display')
        SourceColumn(source=WorkflowStateAction,
                     label=_('Action type'),
                     attribute='get_class_label')

        SourceColumn(source=WorkflowTransition,
                     label=_('Origin state'),
                     attribute='origin_state')
        SourceColumn(source=WorkflowTransition,
                     label=_('Destination state'),
                     attribute='destination_state')
        SourceColumn(source=WorkflowTransition,
                     label=_('Triggers'),
                     func=lambda context: widget_transition_events(
                         transition=context['object']))

        app.conf.CELERY_QUEUES.extend((Queue('document_states',
                                             Exchange('document_states'),
                                             routing_key='document_states'), ))

        app.conf.CELERY_ROUTES.update({
            'document_states.tasks.task_launch_all_workflows': {
                'queue': 'document_states'
            },
        })

        menu_facet.bind_links(links=(link_document_workflow_instance_list, ),
                              sources=(Document, ))
        menu_main.bind_links(links=(link_workflow_list, ), position=10)
        menu_object.bind_links(
            links=(link_setup_workflow_states, link_setup_workflow_transitions,
                   link_setup_workflow_document_types,
                   link_setup_workflow_edit, link_acl_list,
                   link_workflow_preview, link_setup_workflow_delete),
            sources=(Workflow, ))
        menu_object.bind_links(links=(link_setup_workflow_state_edit,
                                      link_setup_workflow_state_action_list,
                                      link_setup_workflow_state_delete),
                               sources=(WorkflowState, ))
        menu_object.bind_links(links=(link_setup_workflow_transition_edit,
                                      link_workflow_instance_transition_events,
                                      link_acl_list,
                                      link_setup_workflow_transition_delete),
                               sources=(WorkflowTransition, ))
        menu_object.bind_links(links=(link_workflow_instance_detail,
                                      link_workflow_instance_transition),
                               sources=(WorkflowInstance, ))
        menu_object.bind_links(links=(
            link_workflow_document_list,
            link_workflow_state_list,
        ),
                               sources=(WorkflowRuntimeProxy, ))
        menu_object.bind_links(links=(link_workflow_state_document_list, ),
                               sources=(WorkflowStateRuntimeProxy, ))
        menu_object.bind_links(links=(
            link_setup_workflow_state_action_edit,
            link_object_error_list,
            link_setup_workflow_state_action_delete,
        ),
                               sources=(WorkflowStateAction, ))

        menu_secondary.bind_links(
            links=(link_setup_workflow_list, link_setup_workflow_create),
            sources=(Workflow, 'document_states:setup_workflow_create',
                     'document_states:setup_workflow_list'))
        menu_secondary.bind_links(links=(link_workflow_list, ),
                                  sources=(WorkflowRuntimeProxy, ))
        menu_secondary.bind_links(
            links=(link_setup_workflow_state_action_selection, ),
            sources=(WorkflowState, ))
        menu_setup.bind_links(links=(link_setup_workflow_list, ))
        menu_sidebar.bind_links(links=(link_setup_workflow_state_create,
                                       link_setup_workflow_transition_create),
                                sources=(Workflow, ))
        menu_tools.bind_links(links=(link_tool_launch_all_workflows, ))

        post_save.connect(launch_workflow,
                          dispatch_uid='launch_workflow',
                          sender=Document)

        # Index updating

        post_save.connect(handler_index_document,
                          dispatch_uid='handler_index_document_save',
                          sender=WorkflowInstanceLogEntry)
        post_save.connect(
            handler_trigger_transition,
            dispatch_uid='document_states_handler_trigger_transition',
            sender=Action)
コード例 #51
0
ファイル: apps.py プロジェクト: jorik041/open-paperless
    def ready(self):
        super(MailerApp, self).ready()

        Document = apps.get_model(
            app_label='documents', model_name='Document'
        )

        LogEntry = self.get_model('LogEntry')
        UserMailer = self.get_model('UserMailer')

        MailerBackend.initialize()

        SourceColumn(
            source=LogEntry, label=_('Date and time'), attribute='datetime'
        )
        SourceColumn(
            source=LogEntry, label=_('Message'), attribute='message'
        )
        SourceColumn(
            source=UserMailer, label=_('Label'), attribute='label'
        )
        SourceColumn(
            source=UserMailer, label=_('Default?'),
            func=lambda context: two_state_template(
                context['object'].default
            )
        )
        SourceColumn(
            source=UserMailer, label=_('Enabled?'),
            func=lambda context: two_state_template(
                context['object'].enabled
            )
        )
        SourceColumn(
            source=UserMailer, label=_('Label'), attribute='backend_label'
        )

        ModelPermission.register(
            model=Document, permissions=(
                permission_mailing_link, permission_mailing_send_document
            )
        )

        ModelPermission.register(
            model=UserMailer, permissions=(
                permission_acl_edit, permission_acl_view,
                permission_user_mailer_delete, permission_user_mailer_edit,
                permission_user_mailer_view, permission_user_mailer_use
            )
        )

        app.conf.CELERY_QUEUES.append(
            Queue('mailing', Exchange('mailing'), routing_key='mailing'),
        )

        app.conf.CELERY_ROUTES.update(
            {
                'mailer.tasks.task_send_document': {
                    'queue': 'mailing'
                },
            }
        )

        menu_multi_item.bind_links(
            links=(
                link_send_multiple_document, link_send_multiple_document_link
            ), sources=(Document,)
        )

        menu_object.bind_links(
            links=(
                link_send_document_link, link_send_document
            ), sources=(Document,)
        )

        menu_object.bind_links(
            links=(
                link_user_mailer_edit, link_user_mailer_log_list,
                link_user_mailer_test, link_acl_list, link_user_mailer_delete,
            ), sources=(UserMailer,)
        )

        menu_secondary.bind_links(
            links=(
                link_user_mailer_list, link_user_mailer_create,
            ), sources=(
                UserMailer, 'mailer:user_mailer_list',
                'mailer:user_mailer_create'
            )
        )

        menu_tools.bind_links(links=(link_system_mailer_error_log,))

        menu_setup.bind_links(links=(link_user_mailer_setup,))
コード例 #52
0
ファイル: apps.py プロジェクト: e6/mayan-edms
    def ready(self):
        super(DocumentIndexingApp, self).ready()

        APIEndPoint(app=self, version_string='1')

        Package(label='Django MPTT', license_text='''
Django MPTT
-----------

Copyright (c) 2007, Jonathan Buchanan

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
        ''')

        Package(label='djangorestframework-recursive', license_text='''
Copyright (c) 2015, Warren Jin <*****@*****.**>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
        ''')

        SourceColumn(source=Index, label=_('Label'), attribute='label')
        SourceColumn(source=Index, label=_('Slug'), attribute='slug')
        SourceColumn(
            source=Index, label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled)
        )

        SourceColumn(
            source=IndexInstance, label=_('Items'),
            func=lambda context: context['object'].get_items_count(
                user=context['request'].user
            )
        )
        SourceColumn(
            source=IndexInstance, label=_('Document types'),
            attribute='get_document_types_names'
        )

        SourceColumn(
            source=IndexTemplateNode, label=_('Level'),
            func=lambda context: node_level(context['object'])
        )
        SourceColumn(
            source=IndexTemplateNode, label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled)
        )
        SourceColumn(
            source=IndexTemplateNode, label=_('Has document links?'),
            func=lambda context: two_state_template(
                context['object'].link_documents
            )
        )

        SourceColumn(
            source=IndexInstanceNode, label=_('Node'),
            func=lambda context: index_instance_item_link(context['object'])
        )
        SourceColumn(
            source=IndexInstanceNode, label=_('Items'),
            func=lambda context: context['object'].get_item_count(
                user=context['request'].user
            )
        )

        SourceColumn(
            source=DocumentIndexInstanceNode, label=_('Node'),
            func=lambda context: get_breadcrumbs(
                index_instance_node=context['object'], single_link=True,
            )
        )
        SourceColumn(
            source=DocumentIndexInstanceNode, label=_('Items'),
            func=lambda context: context['object'].get_item_count(
                user=context['request'].user
            )
        )

        app.conf.CELERY_QUEUES.append(
            Queue('indexing', Exchange('indexing'), routing_key='indexing'),
        )

        app.conf.CELERY_ROUTES.update(
            {
                'document_indexing.tasks.task_delete_empty_index_nodes': {
                    'queue': 'indexing'
                },
                'document_indexing.tasks.task_index_document': {
                    'queue': 'indexing'
                },
                'document_indexing.tasks.task_do_rebuild_all_indexes': {
                    'queue': 'tools'
                },
            }
        )

        menu_facet.bind_links(
            links=(link_document_index_list,), sources=(Document,)
        )
        menu_object.bind_links(
            links=(
                link_index_setup_edit, link_index_setup_view,
                link_index_setup_document_types, link_index_setup_delete
            ), sources=(Index,)
        )
        menu_object.bind_links(
            links=(
                link_template_node_create, link_template_node_edit,
                link_template_node_delete
            ), sources=(IndexTemplateNode,)
        )
        menu_main.bind_links(links=(link_index_main_menu,))
        menu_secondary.bind_links(
            links=(link_index_setup_list, link_index_setup_create),
            sources=(
                Index, 'indexing:index_setup_list',
                'indexing:index_setup_create'
            )
        )
        menu_setup.bind_links(links=(link_index_setup,))
        menu_tools.bind_links(links=(link_rebuild_index_instances,))

        post_delete.connect(
            document_index_delete, dispatch_uid='document_index_delete',
            sender=Document
        )
        post_delete.connect(
            document_metadata_index_post_delete,
            dispatch_uid='document_metadata_index_post_delete',
            sender=DocumentMetadata
        )
        post_document_created.connect(
            document_created_index_update,
            dispatch_uid='document_created_index_update', sender=Document
        )
        post_save.connect(
            document_metadata_index_update,
            dispatch_uid='document_metadata_index_update',
            sender=DocumentMetadata
        )
コード例 #53
0
ファイル: apps.py プロジェクト: jorik041/open-paperless
    def ready(self):
        super(MetadataApp, self).ready()

        Document = apps.get_model(
            app_label='documents', model_name='Document'
        )
        DocumentPageResult = apps.get_model(
            app_label='documents', model_name='DocumentPageResult'
        )

        DocumentType = apps.get_model(
            app_label='documents', model_name='DocumentType'
        )

        DocumentMetadata = self.get_model('DocumentMetadata')
        DocumentTypeMetadataType = self.get_model('DocumentTypeMetadataType')
        MetadataType = self.get_model('MetadataType')

        APIEndPoint(app=self, version_string='2')

        Document.add_to_class(
            'metadata_value_of', DocumentMetadataHelper.constructor
        )

        Filter(
            label=_('Documents missing required metadata'),
            slug='documents-no-required-metadata',
            filter_kwargs=[
                {
                    'document_type__metadata__required': True,
                },
                {
                    'metadata__value__isnull': True
                },
                {
                    'is_stub': False
                }
            ], model=Document, object_permission=permission_document_view,
            hide_links=True
        )

        Filter(
            label=_('Documents missing optional metadata'),
            slug='documents-no-optional-metadata',
            filter_kwargs=[
                {
                    'document_type__metadata__required': False,
                },
                {
                    'metadata__value__isnull': True
                },
                {
                    'is_stub': False
                }
            ], model=Document, object_permission=permission_document_view,
            hide_links=True
        )

        ModelAttribute(
            Document, 'metadata', type_name='related',
            description=_(
                'Queryset containing a MetadataType instance reference and a '
                'value for that metadata type'
            )
        )
        ModelAttribute(
            Document, 'metadata__metadata_type__name',
            label=_('Metadata type name'), type_name='query'
        )
        ModelAttribute(
            Document, 'metadata__value', label=_('Metadata type value'),
            type_name='query'
        )
        ModelAttribute(
            Document, 'metadata_value_of', label=_('Value of a metadata'),
            description=_(
                'Return the value of a specific document metadata'
            ),
            type_name=['property', 'indexing']
        )

        ModelPermission.register(
            model=Document, permissions=(
                permission_metadata_document_add,
                permission_metadata_document_edit,
                permission_metadata_document_remove,
                permission_metadata_document_view,
            )
        )

        SourceColumn(
            source=Document, label=_('Metadata'),
            func=lambda context: get_metadata_string(context['object'])
        )

        SourceColumn(
            source=DocumentPageResult, label=_('Metadata'),
            func=lambda context: get_metadata_string(
                context['object'].document
            )
        )

        SourceColumn(
            source=DocumentMetadata, label=_('Value'),
            attribute='value'
        )
        SourceColumn(
            source=DocumentMetadata, label=_('Required'),
            func=lambda context: two_state_template(
                context['object'].is_required
            )
        )

        app.conf.CELERY_QUEUES.append(
            Queue('metadata', Exchange('metadata'), routing_key='metadata'),
        )

        app.conf.CELERY_ROUTES.update(
            {
                'metadata.tasks.task_remove_metadata_type': {
                    'queue': 'metadata'
                },
                'metadata.tasks.task_add_required_metadata_type': {
                    'queue': 'metadata'
                },
            }
        )

        document_search.add_model_field(
            field='metadata__metadata_type__name', label=_('Metadata type')
        )
        document_search.add_model_field(
            field='metadata__value', label=_('Metadata value')
        )

        document_page_search.add_model_field(
            field='document_version__document__metadata__metadata_type__name',
            label=_('Metadata type')
        )
        document_page_search.add_model_field(
            field='document_version__document__metadata__value',
            label=_('Metadata value')
        )

        menu_facet.bind_links(links=(link_metadata_view,), sources=(Document,))
        menu_multi_item.bind_links(
            links=(
                link_metadata_multiple_add, link_metadata_multiple_edit,
                link_metadata_multiple_remove
            ), sources=(Document,)
        )
        menu_object.bind_links(
            links=(
                link_setup_document_type_metadata_types,
            ), sources=(DocumentType,)
        )
        menu_object.bind_links(
            links=(
                link_setup_metadata_type_edit,
                link_setup_metadata_type_document_types,
                link_setup_metadata_type_delete
            ), sources=(MetadataType,)
        )
        menu_secondary.bind_links(
            links=(
                link_setup_metadata_type_list,
                link_setup_metadata_type_create
            ), sources=(
                MetadataType, 'metadata:setup_metadata_type_list',
                'metadata:setup_metadata_type_create'
            )
        )
        menu_setup.bind_links(links=(link_setup_metadata_type_list,))
        menu_sidebar.bind_links(
            links=(
                link_metadata_add, link_metadata_edit, link_metadata_remove
            ), sources=(
                'metadata:metadata_add', 'metadata:metadata_edit',
                'metadata:metadata_remove', 'metadata:metadata_view'
            )
        )

        post_delete.connect(
            post_document_type_metadata_type_delete,
            dispatch_uid='metadata_post_document_type_metadata_type_delete',
            sender=DocumentTypeMetadataType
        )
        post_document_type_change.connect(
            post_document_type_change_metadata,
            dispatch_uid='metadata_post_document_type_change_metadata',
            sender=Document
        )
        post_save.connect(
            post_document_type_metadata_type_add,
            dispatch_uid='metadata_post_document_type_metadata_type_add',
            sender=DocumentTypeMetadataType
        )

        # Index updating

        post_delete.connect(
            handler_index_document,
            dispatch_uid='metadata_handler_index_document_delete',
            sender=DocumentMetadata
        )
        post_save.connect(
            handler_index_document,
            dispatch_uid='metadata_handler_index_document_save',
            sender=DocumentMetadata
        )
コード例 #54
0
ファイル: apps.py プロジェクト: leolimma/maxacali
    def ready(self):
        super(DocumentsApp, self).ready()

        APIEndPoint(app=self, version_string='1')

        DeletedDocument = self.get_model('DeletedDocument')
        Document = self.get_model('Document')
        DocumentPage = self.get_model('DocumentPage')
        DocumentType = self.get_model('DocumentType')
        DocumentTypeFilename = self.get_model('DocumentTypeFilename')
        DocumentVersion = self.get_model('DocumentVersion')

        MissingItem(
            label=_('Create a document type'),
            description=_(
                'Every uploaded document must be assigned a document type, '
                'it is the basic way Mayan EDMS categorizes documents.'
            ), condition=lambda: not DocumentType.objects.exists(),
            view='documents:document_type_list'
        )

        ModelAttribute(
            Document, label=_('Label'), name='label', type_name='field'
        )

        ModelAttribute(
            Document,
            description=_('The MIME type of any of the versions of a document'),
            label=_('MIME type'), name='versions__mimetype', type_name='field'
        )

        ModelPermission.register(
            model=Document, permissions=(
                permission_acl_edit, permission_acl_view,
                permission_document_delete, permission_document_download,
                permission_document_edit, permission_document_new_version,
                permission_document_print, permission_document_properties_edit,
                permission_document_restore, permission_document_trash,
                permission_document_version_revert, permission_document_view,
                permission_events_view, permission_transformation_create,
                permission_transformation_delete,
                permission_transformation_edit, permission_transformation_view,
            )
        )

        ModelPermission.register(
            model=DocumentType, permissions=(permission_document_create,)
        )

        ModelPermission.register_proxy(
            source=Document, model=DocumentType,
        )

        ModelPermission.register_inheritance(
            model=Document, related='document_type',
        )

        ModelPermission.register_inheritance(
            model=DocumentVersion, related='document',
        )

        ModelPermission.register_inheritance(
            model=DocumentPage, related='document',
        )

        SourceColumn(
            source=Document, label=_('Thumbnail'),
            func=lambda context: document_thumbnail(
                context['object'], gallery_name='documents:document_list',
                size=setting_thumbnail_size.value,
                title=getattr(context['object'], 'label', None),
            )
        )
        SourceColumn(
            source=Document, label=_('Type'), attribute='document_type'
        )

        SourceColumn(
            source=DocumentType, label=_('Documents'),
            func=lambda context: context['object'].get_document_count(
                user=context['request'].user
            )
        )

        SourceColumn(
            source=DocumentTypeFilename, label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled)
        )

        SourceColumn(
            source=DeletedDocument, label=_('Thumbnail'),
            func=lambda context: document_thumbnail(
                context['object'],
                gallery_name='documents:delete_document_list',
                size=setting_thumbnail_size.value,
                title=getattr(context['object'], 'label', None),
                disable_title_link=True
            )
        )
        SourceColumn(
            source=DeletedDocument, label=_('Type'), attribute='document_type'
        )
        SourceColumn(
            source=DeletedDocument, label=_('Date time trashed'),
            attribute='deleted_date_time'
        )

        SourceColumn(
            source=DocumentVersion, label=_('Time and date'),
            attribute='timestamp'
        )
        SourceColumn(
            source=DocumentVersion, label=_('MIME type'),
            attribute='mimetype'
        )
        SourceColumn(
            source=DocumentVersion, label=_('Encoding'),
            attribute='encoding'
        )
        SourceColumn(
            source=DocumentVersion, label=_('Comment'),
            attribute='comment'
        )

        app.conf.CELERYBEAT_SCHEDULE.update(
            {
                'task_check_delete_periods': {
                    'task': 'documents.tasks.task_check_delete_periods',
                    'schedule': timedelta(
                        seconds=CHECK_DELETE_PERIOD_INTERVAL
                    ),
                },
                'task_check_trash_periods': {
                    'task': 'documents.tasks.task_check_trash_periods',
                    'schedule': timedelta(seconds=CHECK_TRASH_PERIOD_INTERVAL),
                },
                'task_delete_stubs': {
                    'task': 'documents.tasks.task_delete_stubs',
                    'schedule': timedelta(seconds=DELETE_STALE_STUBS_INTERVAL),
                },
            }
        )

        app.conf.CELERY_QUEUES.extend(
            (
                Queue(
                    'converter', Exchange('converter'),
                    routing_key='converter', delivery_mode=1
                ),
                Queue(
                    'documents_periodic', Exchange('documents_periodic'),
                    routing_key='documents_periodic', delivery_mode=1
                ),
                Queue('uploads', Exchange('uploads'), routing_key='uploads'),
            )
        )

        app.conf.CELERY_ROUTES.update(
            {
                'documents.tasks.task_check_delete_periods': {
                    'queue': 'documents_periodic'
                },
                'documents.tasks.task_check_trash_periods': {
                    'queue': 'documents_periodic'
                },
                'documents.tasks.task_delete_stubs': {
                    'queue': 'documents_periodic'
                },
                'documents.tasks.task_clear_image_cache': {
                    'queue': 'tools'
                },
                'documents.tasks.task_get_document_page_image': {
                    'queue': 'converter'
                },
                'documents.tasks.task_update_page_count': {
                    'queue': 'uploads'
                },
                'documents.tasks.task_upload_new_version': {
                    'queue': 'uploads'
                },
            }
        )

        menu_front_page.bind_links(
            links=(
                link_document_list_recent, link_document_list,
                link_document_list_deleted
            )
        )
        menu_setup.bind_links(links=(link_document_type_setup,))
        menu_tools.bind_links(links=(link_clear_image_cache,))

        # Document type links
        menu_object.bind_links(
            links=(
                link_document_type_edit, link_document_type_filename_list,
                link_acl_list, link_document_type_delete
            ), sources=(DocumentType,)
        )
        menu_object.bind_links(
            links=(
                link_document_type_filename_edit,
                link_document_type_filename_delete
            ), sources=(DocumentTypeFilename,)
        )
        menu_secondary.bind_links(
            links=(link_document_type_list, link_document_type_create),
            sources=(
                DocumentType, 'documents:document_type_create',
                'documents:document_type_list'
            )
        )
        menu_sidebar.bind_links(
            links=(link_document_type_filename_create,),
            sources=(
                DocumentTypeFilename, 'documents:document_type_filename_list',
                'documents:document_type_filename_create'
            )
        )
        menu_sidebar.bind_links(
            links=(link_trash_can_empty,),
            sources=(
                'documents:document_list_deleted', 'documents:trash_can_empty'
            )
        )

        # Document object links
        menu_object.bind_links(
            links=(
                link_document_edit, link_document_document_type_edit,
                link_document_print, link_document_trash,
                link_document_download, link_document_clear_transformations,
                link_document_update_page_count
            ), sources=(Document,)
        )
        menu_object.bind_links(
            links=(link_document_restore, link_document_delete),
            sources=(DeletedDocument,)
        )

        # Document facet links
        menu_facet.bind_links(links=(link_acl_list,), sources=(Document,))
        menu_facet.bind_links(
            links=(link_document_preview,), sources=(Document,), position=0
        )
        menu_facet.bind_links(
            links=(link_document_properties,), sources=(Document,), position=2
        )
        menu_facet.bind_links(
            links=(link_events_for_object, link_document_version_list,),
            sources=(Document,), position=2
        )
        menu_facet.bind_links(links=(link_document_pages,), sources=(Document,))

        # Document actions
        menu_object.bind_links(
            links=(
                link_document_version_revert, link_document_version_download
            ),
            sources=(DocumentVersion,)
        )
        menu_multi_item.bind_links(
            links=(
                link_document_multiple_clear_transformations,
                link_document_multiple_trash, link_document_multiple_download,
                link_document_multiple_update_page_count,
                link_document_multiple_document_type_edit
            ), sources=(Document,)
        )
        menu_multi_item.bind_links(
            links=(
                link_document_multiple_restore, link_document_multiple_delete
            ), sources=(DeletedDocument,)
        )

        # Document pages
        menu_facet.bind_links(
            links=(
                link_document_page_rotate_left,
                link_document_page_rotate_right, link_document_page_zoom_in,
                link_document_page_zoom_out, link_document_page_view_reset
            ), sources=('documents:document_page_view',)
        )
        menu_facet.bind_links(
            links=(link_document_page_return, link_document_page_view),
            sources=(DocumentPage,)
        )
        menu_facet.bind_links(
            links=(
                link_document_page_navigation_first,
                link_document_page_navigation_previous,
                link_document_page_navigation_next,
                link_document_page_navigation_last, link_transformation_list
            ), sources=(DocumentPage,)
        )
        menu_object.bind_links(
            links=(link_transformation_list,), sources=(DocumentPage,)
        )

        namespace = StatisticNamespace(slug='documents', label=_('Documents'))
        namespace.add_statistic(
            slug='new-documents-per-month',
            label=_('New documents per month'),
            func=new_documents_per_month,
            renderer=CharJSLine,
            minute='0'
        )
        namespace.add_statistic(
            slug='new-document-versions-per-month',
            label=_('New document versions per month'),
            func=new_document_versions_per_month,
            renderer=CharJSLine,
            minute='0'
        )
        namespace.add_statistic(
            slug='new-document-pages-per-month',
            label=_('New document pages per month'),
            func=new_document_pages_per_month,
            renderer=CharJSLine,
            minute='0'
        )
        namespace.add_statistic(
            slug='total-documents-at-each-month',
            label=_('Total documents at each month'),
            func=total_document_per_month,
            renderer=CharJSLine,
            minute='0'
        )
        namespace.add_statistic(
            slug='total-document-versions-at-each-month',
            label=_('Total document versions at each month'),
            func=total_document_version_per_month,
            renderer=CharJSLine,
            minute='0'
        )
        namespace.add_statistic(
            slug='total-document-pages-at-each-month',
            label=_('Total document pages at each month'),
            func=total_document_page_per_month,
            renderer=CharJSLine,
            minute='0'
        )

        post_initial_setup.connect(
            create_default_document_type,
            dispatch_uid='create_default_document_type'
        )

        registry.register(DeletedDocument)
        registry.register(Document)
コード例 #55
0
ファイル: apps.py プロジェクト: jorik041/open-paperless
    def ready(self):
        super(DocumentsApp, self).ready()
        from actstream import registry

        APIEndPoint(app=self, version_string='1')

        DeletedDocument = self.get_model('DeletedDocument')
        Document = self.get_model('Document')
        DocumentPage = self.get_model('DocumentPage')
        DocumentPageResult = self.get_model('DocumentPageResult')
        DocumentType = self.get_model('DocumentType')
        DocumentTypeFilename = self.get_model('DocumentTypeFilename')
        DocumentVersion = self.get_model('DocumentVersion')
        DuplicatedDocument = self.get_model('DuplicatedDocument')

        Collection(
            label=_('Recent documents'), link=link_document_list_recent,
            order=1
        )
        Collection(
            label=_('Document types'), model=DocumentType,
            icon='fa fa-book'
        )
        Collection(
            label=_('All documents'), link=link_document_list, order=99
        )
        Collection(
            label=_('Trash'), link=link_document_list_deleted, order=100
        )

        DynamicSerializerField.add_serializer(
            klass=Document,
            serializer_class='documents.serializers.DocumentSerializer'
        )

        MissingItem(
            label=_('Create a document type'),
            description=_(
                'Every uploaded document must be assigned a document type, '
                'it is the basic way Mayan EDMS categorizes documents.'
            ), condition=lambda: not DocumentType.objects.exists(),
            view='documents:document_type_list'
        )

        ModelAttribute(
            Document, label=_('Label'), name='label', type_name='field'
        )

        ModelAttribute(
            Document,
            description=_('The MIME type of any of the versions of a document'),
            label=_('MIME type'), name='versions__mimetype', type_name='field'
        )

        ModelPermission.register(
            model=Document, permissions=(
                permission_acl_edit, permission_acl_view,
                permission_document_delete, permission_document_download,
                permission_document_edit, permission_document_new_version,
                permission_document_print, permission_document_properties_edit,
                permission_document_restore, permission_document_trash,
                permission_document_version_revert,
                permission_document_version_view, permission_document_view,
                permission_events_view, permission_transformation_create,
                permission_transformation_delete,
                permission_transformation_edit, permission_transformation_view,
            )
        )

        ModelPermission.register(
            model=DocumentType, permissions=(
                permission_document_create, permission_document_type_delete,
                permission_document_type_edit, permission_document_type_view
            )
        )

        ModelPermission.register_proxy(
            source=Document, model=DocumentType,
        )

        ModelPermission.register_inheritance(
            model=Document, related='document_type',
        )
        ModelPermission.register_inheritance(
            model=DocumentPage, related='document',
        )
        ModelPermission.register_inheritance(
            model=DocumentTypeFilename, related='document_type',
        )
        ModelPermission.register_inheritance(
            model=DocumentVersion, related='document',
        )

        # Document and document page thumbnail widget
        document_page_thumbnail_widget = DocumentPageThumbnailWidget()
        document_thumbnail_widget = DocumentThumbnailWidget()
        document_version_thumbnail_widget = DocumentVersionThumbnailWidget()

        # Document
        SourceColumn(
            source=Document, label=_('Thumbnail'),
            func=lambda context: document_thumbnail_widget.render(
                instance=context['object']
            )
        )
        SourceColumn(
            source=Document, label=_('Type'), attribute='document_type'
        )

        # DocumentPage
        SourceColumn(
            source=DocumentPage, label=_('Thumbnail'),
            func=lambda context: document_page_thumbnail_widget.render(
                instance=context['object']
            )
        )

        SourceColumn(
            source=DocumentPageResult, label=_('Thumbnail'),
            func=lambda context: document_page_thumbnail_widget.render(
                instance=context['object']
            )
        )

        SourceColumn(
            source=DocumentPageResult, label=_('Type'),
            attribute='document_version.document.document_type'
        )

        # DocumentType
        SourceColumn(
            source=DocumentType, label=_('Documents'),
            func=lambda context: context['object'].get_document_count(
                user=context['request'].user
            )
        )

        SourceColumn(
            source=DocumentTypeFilename, label=_('Enabled'),
            func=lambda context: two_state_template(context['object'].enabled)
        )

        # DeletedDocument
        SourceColumn(
            source=DeletedDocument, label=_('Thumbnail'),
            func=lambda context: document_thumbnail_widget.render(
                instance=context['object']
            )
        )

        SourceColumn(
            source=DeletedDocument, label=_('Type'), attribute='document_type'
        )
        SourceColumn(
            source=DeletedDocument, label=_('Date time trashed'),
            attribute='deleted_date_time'
        )

        # DocumentVersion
        SourceColumn(
            source=DocumentVersion, label=_('Time and date'),
            attribute='timestamp'
        )
        SourceColumn(
            source=DocumentVersion, label=_('MIME type'),
            attribute='mimetype'
        )
        SourceColumn(
            source=DocumentVersion, label=_('Encoding'),
            attribute='encoding'
        )
        SourceColumn(
            source=DocumentVersion, label=_('Comment'),
            attribute='comment'
        )
        SourceColumn(
            source=DocumentVersion, label=_('Thumbnail'),
            func=lambda context: document_version_thumbnail_widget.render(
                instance=context['object']
            )
        )

        # DuplicatedDocument
        SourceColumn(
            source=DuplicatedDocument, label=_('Thumbnail'),
            func=lambda context: document_thumbnail_widget.render(
                instance=context['object'].document
            )
        )
        SourceColumn(
            source=DuplicatedDocument, label=_('Duplicates'),
            func=lambda context: context['object'].documents.count()
        )

        app.conf.CELERYBEAT_SCHEDULE.update(
            {
                'task_check_delete_periods': {
                    'task': 'documents.tasks.task_check_delete_periods',
                    'schedule': timedelta(
                        seconds=CHECK_DELETE_PERIOD_INTERVAL
                    ),
                },
                'task_check_trash_periods': {
                    'task': 'documents.tasks.task_check_trash_periods',
                    'schedule': timedelta(seconds=CHECK_TRASH_PERIOD_INTERVAL),
                },
                'task_delete_stubs': {
                    'task': 'documents.tasks.task_delete_stubs',
                    'schedule': timedelta(seconds=DELETE_STALE_STUBS_INTERVAL),
                },
            }
        )

        app.conf.CELERY_QUEUES.extend(
            (
                Queue(
                    'converter', Exchange('converter'),
                    routing_key='converter', delivery_mode=1
                ),
                Queue(
                    'documents_periodic', Exchange('documents_periodic'),
                    routing_key='documents_periodic', delivery_mode=1
                ),
                Queue('uploads', Exchange('uploads'), routing_key='uploads'),
                Queue(
                    'documents', Exchange('documents'), routing_key='documents'
                ),
            )
        )

        app.conf.CELERY_ROUTES.update(
            {
                'documents.tasks.task_check_delete_periods': {
                    'queue': 'documents_periodic'
                },
                'documents.tasks.task_check_trash_periods': {
                    'queue': 'documents_periodic'
                },
                'documents.tasks.task_delete_stubs': {
                    'queue': 'documents_periodic'
                },
                'documents.tasks.task_clear_image_cache': {
                    'queue': 'tools'
                },
                'documents.tasks.task_generate_document_page_image': {
                    'queue': 'converter'
                },
                'documents.tasks.task_update_page_count': {
                    'queue': 'uploads'
                },
                'documents.tasks.task_upload_new_version': {
                    'queue': 'uploads'
                },
                'documents.tasks.task_scan_duplicates_all': {
                    'queue': 'tools'
                },
                'documents.tasks.task_scan_duplicates_for': {
                    'queue': 'uploads'
                },
                'documents.tasks.task_delete_document': {
                    'queue': 'documents'
                },
            }
        )

        dashboard_main.add_widget(widget=widget_document_types)
        dashboard_main.add_widget(widget=widget_documents_in_trash)
        dashboard_main.add_widget(widget=widget_new_documents_this_month)
        dashboard_main.add_widget(widget=widget_pages_per_month)
        dashboard_main.add_widget(widget=widget_total_documents)

        menu_documents.bind_links(
            links=(
                link_document_list_recent, link_document_list,
                link_document_list_deleted, link_duplicated_document_list
            )
        )

        menu_main.bind_links(links=(menu_documents,), position=0)

        menu_setup.bind_links(links=(link_document_type_setup,))
        menu_tools.bind_links(
            links=(link_clear_image_cache, link_duplicated_document_scan)
        )

        # Document type links
        menu_object.bind_links(
            links=(
                link_document_type_edit, link_document_type_filename_list,
                link_acl_list, link_document_type_delete
            ), sources=(DocumentType,)
        )
        menu_object.bind_links(
            links=(
                link_document_type_filename_edit,
                link_document_type_filename_delete
            ), sources=(DocumentTypeFilename,)
        )
        menu_secondary.bind_links(
            links=(link_document_type_list, link_document_type_create),
            sources=(
                DocumentType, 'documents:document_type_create',
                'documents:document_type_list'
            )
        )
        menu_sidebar.bind_links(
            links=(link_document_type_filename_create,),
            sources=(
                DocumentTypeFilename, 'documents:document_type_filename_list',
                'documents:document_type_filename_create'
            )
        )
        menu_sidebar.bind_links(
            links=(link_trash_can_empty,),
            sources=(
                'documents:document_list_deleted', 'documents:trash_can_empty'
            )
        )

        # Document object links
        menu_object.bind_links(
            links=(
                link_document_edit, link_document_document_type_edit,
                link_document_print, link_document_trash,
                link_document_download, link_document_clear_transformations,
                link_document_clone_transformations,
                link_document_update_page_count,
            ), sources=(Document,)
        )
        menu_object.bind_links(
            links=(link_document_restore, link_document_delete),
            sources=(DeletedDocument,)
        )

        # Document facet links
        menu_facet.bind_links(
            links=(link_document_duplicates_list, link_acl_list_with_icon,),
            sources=(Document,)
        )
        menu_facet.bind_links(
            links=(link_document_preview,), sources=(Document,), position=0
        )
        menu_facet.bind_links(
            links=(link_document_properties,), sources=(Document,), position=2
        )
        menu_facet.bind_links(
            links=(link_events_for_object, link_document_version_list,),
            sources=(Document,), position=2
        )
        menu_facet.bind_links(links=(link_document_pages,), sources=(Document,))

        # Document actions
        menu_object.bind_links(
            links=(
                link_document_version_revert, link_document_version_download
            ),
            sources=(DocumentVersion,)
        )
        menu_multi_item.bind_links(
            links=(
                link_document_multiple_clear_transformations,
                link_document_multiple_trash, link_document_multiple_download,
                link_document_multiple_update_page_count,
                link_document_multiple_document_type_edit
            ), sources=(Document,)
        )
        menu_multi_item.bind_links(
            links=(
                link_document_multiple_restore, link_document_multiple_delete
            ), sources=(DeletedDocument,)
        )

        # Document pages
        menu_facet.bind_links(
            links=(
                link_document_page_rotate_left,
                link_document_page_rotate_right, link_document_page_zoom_in,
                link_document_page_zoom_out, link_document_page_view_reset
            ), sources=('documents:document_page_view',)
        )
        menu_facet.bind_links(
            links=(link_document_page_return, link_document_page_view),
            sources=(DocumentPage,)
        )
        menu_facet.bind_links(
            links=(
                link_document_page_navigation_first,
                link_document_page_navigation_previous,
                link_document_page_navigation_next,
                link_document_page_navigation_last, link_transformation_list
            ), sources=(DocumentPage,)
        )
        menu_object.bind_links(
            links=(link_transformation_list,), sources=(DocumentPage,)
        )

        # Document versions
        menu_facet.bind_links(
            links=(
                link_document_version_return_document,
                link_document_version_return_list
            ), sources=(DocumentVersion,)
        )
        menu_facet.bind_links(
            links=(link_document_version_view,), sources=(DocumentVersion,)
        )

        namespace = StatisticNamespace(slug='documents', label=_('Documents'))
        namespace.add_statistic(
            slug='new-documents-per-month',
            label=_('New documents per month'),
            func=new_documents_per_month,
            renderer=CharJSLine,
            minute='0'
        )
        namespace.add_statistic(
            slug='new-document-versions-per-month',
            label=_('New document versions per month'),
            func=new_document_versions_per_month,
            renderer=CharJSLine,
            minute='0'
        )
        namespace.add_statistic(
            slug='new-document-pages-per-month',
            label=_('New document pages per month'),
            func=new_document_pages_per_month,
            renderer=CharJSLine,
            minute='0'
        )
        namespace.add_statistic(
            slug='total-documents-at-each-month',
            label=_('Total documents at each month'),
            func=total_document_per_month,
            renderer=CharJSLine,
            minute='0'
        )
        namespace.add_statistic(
            slug='total-document-versions-at-each-month',
            label=_('Total document versions at each month'),
            func=total_document_version_per_month,
            renderer=CharJSLine,
            minute='0'
        )
        namespace.add_statistic(
            slug='total-document-pages-at-each-month',
            label=_('Total document pages at each month'),
            func=total_document_page_per_month,
            renderer=CharJSLine,
            minute='0'
        )

        post_initial_setup.connect(
            create_default_document_type,
            dispatch_uid='create_default_document_type'
        )
        post_version_upload.connect(
            handler_scan_duplicates_for,
            dispatch_uid='handler_scan_duplicates_for',
        )

        registry.register(DeletedDocument)
        registry.register(Document)
        registry.register(DocumentType)
        registry.register(DocumentVersion)