Refactor the document metadata add, edit and remove views.
This commit is contained in:
@@ -34,6 +34,7 @@ on production install to debug errors live.
|
||||
- Refactor add document to folder view to allow adding a documents to multiple folders at the same time.
|
||||
- Refactor the remove document from folder view to allow removing documents from multiple folders at the same time.
|
||||
- Refactor the document mailing views and add support for sending multiple documents via email at the same time.
|
||||
- Refactor the document metadata views and add support for adding multiple metadata types to a document at the same time.
|
||||
|
||||
Removals
|
||||
--------
|
||||
|
||||
@@ -67,6 +67,9 @@ class ExtraContextMixin(object):
|
||||
|
||||
|
||||
class MultipleInstanceActionMixin(object):
|
||||
# TODO: Deprecated, replace views using this with
|
||||
# MultipleObjectFormActionView or MultipleObjectConfirmActionView
|
||||
|
||||
model = None
|
||||
success_message = _('Operation performed on %(count)d object')
|
||||
success_message_plural = _('Operation performed on %(count)d objects')
|
||||
@@ -188,7 +191,7 @@ class ObjectActionMixin(object):
|
||||
pass
|
||||
|
||||
def view_action(self, form=None):
|
||||
count = 0
|
||||
self.action_count = 0
|
||||
|
||||
for instance in self.get_queryset():
|
||||
try:
|
||||
@@ -196,11 +199,11 @@ class ObjectActionMixin(object):
|
||||
except PermissionDenied:
|
||||
pass
|
||||
else:
|
||||
count += 1
|
||||
self.action_count += 1
|
||||
|
||||
messages.success(
|
||||
self.request,
|
||||
self.get_success_message(count=count)
|
||||
self.get_success_message(count=self.action_count)
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ from .classes import MetadataLookup
|
||||
from .models import MetadataType
|
||||
|
||||
|
||||
class MetadataForm(forms.Form):
|
||||
class DocumentMetadataForm(forms.Form):
|
||||
id = forms.CharField(label=_('ID'), widget=forms.HiddenInput)
|
||||
|
||||
name = forms.CharField(
|
||||
@@ -22,7 +22,7 @@ class MetadataForm(forms.Form):
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(MetadataForm, self).__init__(*args, **kwargs)
|
||||
super(DocumentMetadataForm, self).__init__(*args, **kwargs)
|
||||
|
||||
# Set form fields initial values
|
||||
if 'initial' in kwargs:
|
||||
@@ -104,23 +104,30 @@ class MetadataForm(forms.Form):
|
||||
return self.cleaned_data
|
||||
|
||||
|
||||
MetadataFormSet = formset_factory(MetadataForm, extra=0)
|
||||
DocumentMetadataFormSet = formset_factory(DocumentMetadataForm, extra=0)
|
||||
|
||||
|
||||
class AddMetadataForm(forms.Form):
|
||||
metadata_type = forms.ModelChoiceField(
|
||||
queryset=MetadataType.objects.all(), label=_('Metadata type')
|
||||
class DocumentAddMetadataForm(forms.Form):
|
||||
metadata_type = forms.ModelMultipleChoiceField(
|
||||
help_text=_('Metadata types to be added to the selected documents.'),
|
||||
label=_('Metadata type'), queryset=MetadataType.objects.all(),
|
||||
widget=forms.SelectMultiple(
|
||||
attrs={'class': 'select2'},
|
||||
)
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
document_type = kwargs.pop('document_type')
|
||||
super(AddMetadataForm, self).__init__(*args, **kwargs)
|
||||
self.fields['metadata_type'].queryset = MetadataType.objects.filter(
|
||||
pk__in=document_type.metadata.values_list(
|
||||
'metadata_type', flat=True
|
||||
queryset = kwargs.pop(
|
||||
'queryset', MetadataType.objects.get_for_document_type(
|
||||
document_type=document_type
|
||||
)
|
||||
)
|
||||
|
||||
super(DocumentAddMetadataForm, self).__init__(*args, **kwargs)
|
||||
|
||||
self.fields['metadata_type'].queryset = queryset
|
||||
|
||||
|
||||
class MetadataTypeForm(forms.ModelForm):
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -136,14 +143,16 @@ class MetadataTypeForm(forms.ModelForm):
|
||||
model = MetadataType
|
||||
|
||||
|
||||
class MetadataRemoveForm(MetadataForm):
|
||||
class DocumentMetadataRemoveForm(DocumentMetadataForm):
|
||||
update = forms.BooleanField(
|
||||
initial=False, label=_('Remove'), required=False
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(MetadataRemoveForm, self).__init__(*args, **kwargs)
|
||||
super(DocumentMetadataRemoveForm, self).__init__(*args, **kwargs)
|
||||
self.fields.pop('value')
|
||||
|
||||
|
||||
MetadataRemoveFormSet = formset_factory(MetadataRemoveForm, extra=0)
|
||||
DocumentMetadataRemoveFormSet = formset_factory(
|
||||
DocumentMetadataRemoveForm, extra=0
|
||||
)
|
||||
|
||||
@@ -1,6 +1,22 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models
|
||||
|
||||
|
||||
class MetadataTypeManager(models.Manager):
|
||||
def get_by_natural_key(self, name):
|
||||
return self.get(name=name)
|
||||
|
||||
def get_for_document(self, document):
|
||||
return self.filter(
|
||||
pk__in=document.metadata.values_list(
|
||||
'metadata_type', flat=True
|
||||
)
|
||||
)
|
||||
|
||||
def get_for_document_type(self, document_type):
|
||||
return self.filter(
|
||||
pk__in=document_type.metadata.values_list(
|
||||
'metadata_type', flat=True
|
||||
)
|
||||
)
|
||||
|
||||
@@ -10,37 +10,40 @@ from .api_views import (
|
||||
APIMetadataTypeView
|
||||
)
|
||||
from .views import (
|
||||
DocumentMetadataListView, MetadataTypeCreateView, MetadataTypeDeleteView,
|
||||
MetadataTypeEditView, MetadataTypeListView,
|
||||
SetupDocumentTypeMetadataOptionalView,
|
||||
SetupDocumentTypeMetadataRequiredView, metadata_add, metadata_edit,
|
||||
metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove,
|
||||
metadata_remove
|
||||
DocumentMetadataAddView, DocumentMetadataEditView,
|
||||
DocumentMetadataListView, DocumentMetadataRemoveView,
|
||||
MetadataTypeCreateView, MetadataTypeDeleteView, MetadataTypeEditView,
|
||||
MetadataTypeListView, SetupDocumentTypeMetadataOptionalView,
|
||||
SetupDocumentTypeMetadataRequiredView
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
url(
|
||||
r'^(?P<document_id>\d+)/edit/$', metadata_edit, name='metadata_edit'
|
||||
r'^(?P<pk>\d+)/edit/$', DocumentMetadataEditView.as_view(),
|
||||
name='metadata_edit'
|
||||
),
|
||||
url(
|
||||
r'^multiple/edit/$', DocumentMetadataEditView.as_view(),
|
||||
name='metadata_multiple_edit'
|
||||
),
|
||||
url(
|
||||
r'^(?P<pk>\d+)/view/$', DocumentMetadataListView.as_view(),
|
||||
name='metadata_view'
|
||||
),
|
||||
url(
|
||||
r'^multiple/edit/$', metadata_multiple_edit,
|
||||
name='metadata_multiple_edit'
|
||||
r'^(?P<pk>\d+)/add/$', DocumentMetadataAddView.as_view(),
|
||||
name='metadata_add'
|
||||
),
|
||||
url(r'^(?P<document_id>\d+)/add/$', metadata_add, name='metadata_add'),
|
||||
url(
|
||||
r'^multiple/add/$', metadata_multiple_add,
|
||||
r'^multiple/add/$', DocumentMetadataAddView.as_view(),
|
||||
name='metadata_multiple_add'
|
||||
),
|
||||
url(
|
||||
r'^(?P<document_id>\d+)/remove/$', metadata_remove,
|
||||
r'^(?P<pk>\d+)/remove/$', DocumentMetadataRemoveView.as_view(),
|
||||
name='metadata_remove'
|
||||
),
|
||||
url(
|
||||
r'^multiple/remove/$', metadata_multiple_remove,
|
||||
r'^multiple/remove/$', DocumentMetadataRemoveView.as_view(),
|
||||
name='metadata_multiple_remove'
|
||||
),
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,7 @@ from formtools.wizard.views import SessionWizardView
|
||||
|
||||
from common.mixins import ViewPermissionCheckMixin
|
||||
from documents.forms import DocumentTypeSelectForm
|
||||
from metadata.forms import MetadataFormSet
|
||||
from metadata.forms import DocumentMetadataFormSet
|
||||
from tags.forms import TagMultipleSelectionForm
|
||||
|
||||
from .literals import STEP_DOCUMENT_TYPE, STEP_METADATA, STEP_TAGS
|
||||
@@ -33,10 +33,13 @@ def has_metadata_types(wizard):
|
||||
class DocumentCreateWizard(ViewPermissionCheckMixin, SessionWizardView):
|
||||
condition_dict = {STEP_METADATA: has_metadata_types}
|
||||
extra_context = {}
|
||||
form_list = (DocumentTypeSelectForm, MetadataFormSet, TagMultipleSelectionForm)
|
||||
form_list = (
|
||||
DocumentTypeSelectForm, DocumentMetadataFormSet,
|
||||
TagMultipleSelectionForm
|
||||
)
|
||||
form_titles = {
|
||||
DocumentTypeSelectForm: _('Step 1 of 3: Select document type'),
|
||||
MetadataFormSet: _('Step 2 of 3: Enter document metadata'),
|
||||
DocumentMetadataFormSet: _('Step 2 of 3: Enter document metadata'),
|
||||
TagMultipleSelectionForm: _('Step 3 of 3: Select tags'),
|
||||
}
|
||||
template_name = 'appearance/generic_wizard.html'
|
||||
|
||||
Reference in New Issue
Block a user