From ce39a775eee9efbdb612902da70e48d4f0b744e3 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 21 Oct 2014 19:02:31 -0400 Subject: [PATCH] Issue #88, remove metadata type selection step from interactive upload wizard Max wizard steps is now 2. Second step is skiped when document type has not associated metadata types. --- mayan/apps/metadata/__init__.py | 11 +++++++++ mayan/apps/metadata/forms.py | 18 -------------- mayan/apps/sources/wizards.py | 42 +++++++++++++-------------------- 3 files changed, 27 insertions(+), 44 deletions(-) diff --git a/mayan/apps/metadata/__init__.py b/mayan/apps/metadata/__init__.py index e146f9cfce..4398cbb897 100644 --- a/mayan/apps/metadata/__init__.py +++ b/mayan/apps/metadata/__init__.py @@ -24,6 +24,17 @@ from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_VIEW) from .urls import api_urls + +@property +def document_type_metadata(self): + try: + return self.documenttypedefaults_set.get().default_metadata + except self.documenttypedefaults_set.model.DoesNotExist: + return MetadataType.objects.none() + + +DocumentType.add_to_class('metadata', document_type_metadata) + register_links(['metadata:metadata_add', 'metadata:metadata_edit', 'metadata:metadata_remove', 'metadata:metadata_view'], [metadata_add, metadata_edit, metadata_remove], menu_name='sidebar') register_links(Document, [metadata_view], menu_name='form_header') register_links(DocumentType, [setup_document_type_metadata]) diff --git a/mayan/apps/metadata/forms.py b/mayan/apps/metadata/forms.py index 8ec6fad0e5..9c11553690 100644 --- a/mayan/apps/metadata/forms.py +++ b/mayan/apps/metadata/forms.py @@ -80,24 +80,6 @@ class MetadataRemoveForm(MetadataForm): update = forms.BooleanField(initial=False, label=_(u'Remove'), required=False) -class MetadataSelectionForm(forms.Form): - def __init__(self, *args, **kwargs): - super(MetadataSelectionForm, self).__init__(*args, **kwargs) - document_type = getattr(self, 'initial', {}).get('document_type', None) - if document_type: - try: - defaults = document_type.documenttypedefaults_set.get() - self.fields['metadata_types'].initial = defaults.default_metadata.all() - except DocumentTypeDefaults.DoesNotExist: - pass - - metadata_types = forms.ModelMultipleChoiceField( - queryset=MetadataType.objects.all(), - label=_(u'Metadata'), - required=False, - widget=ScrollableCheckboxSelectMultiple(attrs={'size': 10, 'class': 'choice_form'}) - ) - MetadataRemoveFormSet = formset_factory(MetadataRemoveForm, extra=0) diff --git a/mayan/apps/sources/wizards.py b/mayan/apps/sources/wizards.py index 59ba90b755..23541f65b3 100644 --- a/mayan/apps/sources/wizards.py +++ b/mayan/apps/sources/wizards.py @@ -9,53 +9,43 @@ from django.utils.translation import ugettext_lazy as _ from common.views import MayanPermissionCheckMixin from documents.forms import DocumentTypeSelectForm from documents.permissions import PERMISSION_DOCUMENT_CREATE -from metadata.forms import MetadataFormSet, MetadataSelectionForm +from metadata.forms import MetadataFormSet class DocumentCreateWizard(MayanPermissionCheckMixin, SessionWizardView): - form_list = [DocumentTypeSelectForm, MetadataSelectionForm, MetadataFormSet] + form_list = [DocumentTypeSelectForm, MetadataFormSet] template_name = 'main/generic_wizard.html' extra_context = {} permissions_required = [PERMISSION_DOCUMENT_CREATE] @staticmethod - def has_metadata_types(wizard): - # Skip the 3rd step if no metadata types or sets are selected + def _has_metadata_types(wizard): + # Skip the 2nd step if document type has no associated metadata try: - return wizard.get_cleaned_data_for_step('1')['metadata_types'] + return wizard.get_cleaned_data_for_step('0')['document_type'].metadata.count() except TypeError: return False - def generate_metadata_initial_values(self): - initial = [] - - for metadata_type in self.get_cleaned_data_for_step('1')['metadata_types']: - initial.append({ - 'metadata_type': metadata_type, - }) - - return initial - def __init__(self, *args, **kwargs): super(DocumentCreateWizard, self).__init__(*args, **kwargs) - self.condition_dict = {'2': DocumentCreateWizard.has_metadata_types} + self.condition_dict = {'1': DocumentCreateWizard._has_metadata_types} self.step_titles = [ - _(u'Step 1 of 3: Document type'), - _(u'Step 2 of 3: Metadata selection'), - _(u'Step 3 of 3: Document metadata'), + _(u'Step 1 of 2: Select document type'), + _(u'Step 2 of 2: Enter document metadata'), ] def get_form_initial(self, step): if step == '1': - try: - return {'document_type': self.get_cleaned_data_for_step('0')['document_type']} - except TypeError: - return {} - elif step == '2': - return self.generate_metadata_initial_values() + initial = [] + for metadata_type in self.get_cleaned_data_for_step('0')['document_type'].metadata.all(): + initial.append({ + 'metadata_type': metadata_type, + }) + + return initial return self.initial_dict.get(step, {}) def get_context_data(self, form, **kwargs): @@ -75,7 +65,7 @@ class DocumentCreateWizard(MayanPermissionCheckMixin, SessionWizardView): pass try: - for identifier, metadata in enumerate(self.get_cleaned_data_for_step('2')): + for identifier, metadata in enumerate(self.get_cleaned_data_for_step('1')): query_dict['metadata%s_id' % identifier] = metadata['id'] query_dict['metadata%s_value' % identifier] = metadata['value'] except TypeError: