diff --git a/apps/documents/wizards.py b/apps/documents/wizards.py index 8d75ce9a4d..89a59557d2 100644 --- a/apps/documents/wizards.py +++ b/apps/documents/wizards.py @@ -25,7 +25,7 @@ class DocumentCreateWizard(BoundFormWizard): } if data not in initial: initial.append(data) - + return initial def __init__(self, *args, **kwargs): @@ -36,13 +36,9 @@ class DocumentCreateWizard(BoundFormWizard): _(u'step 2 of 3: Metadata selection'), _(u'step 3 of 3: Document metadata'), ]) - self.document_type = kwargs.pop('document_type', None) super(DocumentCreateWizard, self).__init__(*args, **kwargs) - if self.document_type: - self.initial = {0: self.generate_metadata_initial_values()} - def render_template(self, request, form, previous_fields, step, context=None): context = {'step_title': self.extra_context['step_titles'][step]} return super(DocumentCreateWizard, self).render_template( @@ -55,6 +51,7 @@ class DocumentCreateWizard(BoundFormWizard): def process_step(self, request, form, step): if isinstance(form, DocumentTypeSelectForm): self.document_type = form.cleaned_data['document_type'] + self.initial = {1: {'document_type': self.document_type}} if isinstance(form, MetadataSelectionForm): self.metadata_sets = form.cleaned_data['metadata_sets'] @@ -62,7 +59,7 @@ class DocumentCreateWizard(BoundFormWizard): initial_data = self.generate_metadata_initial_values() self.initial = {2: initial_data} if not initial_data: - # If there is no metadata selected end wizard + # If there is no metadata selected, finish wizard self.form_list = [DocumentTypeSelectForm, MetadataSelectionForm] if isinstance(form, MetadataFormSet): diff --git a/apps/metadata/admin.py b/apps/metadata/admin.py index d28ea231a4..a8b940cb7c 100644 --- a/apps/metadata/admin.py +++ b/apps/metadata/admin.py @@ -1,7 +1,7 @@ from django.contrib import admin from metadata.models import MetadataType, MetadataSet, MetadataSetItem, \ - DocumentMetadata + DocumentMetadata, DocumentTypeDefaults class MetadataTypeAdmin(admin.ModelAdmin): @@ -26,5 +26,10 @@ class MetadataSetAdmin(admin.ModelAdmin): inlines = [MetadataSetItemInline] +class DocumentTypeDefaultsAdmin(admin.ModelAdmin): + filter_horizontal = ('default_metadata_sets', 'default_metadata') + + admin.site.register(MetadataType, MetadataTypeAdmin) admin.site.register(MetadataSet, MetadataSetAdmin) +admin.site.register(DocumentTypeDefaults, DocumentTypeDefaultsAdmin) diff --git a/apps/metadata/forms.py b/apps/metadata/forms.py index 7aeb810c5c..3747cd1d6c 100644 --- a/apps/metadata/forms.py +++ b/apps/metadata/forms.py @@ -4,7 +4,8 @@ from django.forms.formsets import formset_factory from metadata.conf.settings import AVAILABLE_MODELS from metadata.conf.settings import AVAILABLE_FUNCTIONS -from metadata.models import MetadataSet, MetadataType +from metadata.models import MetadataSet, MetadataType, \ + DocumentTypeDefaults class MetadataForm(forms.Form): @@ -66,6 +67,18 @@ class MetadataRemoveForm(MetadataForm): class MetadataSelectionForm(forms.Form): + def __init__(self, *args, **kwargs): + #document_type = kwargs.pop('document_type', None) + 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_sets'].initial = defaults.default_metadata_sets.all() + self.fields['metadata_types'].initial = defaults.default_metadata.all() + except DocumentTypeDefaults.DoesNotExist: + pass + metadata_sets = forms.ModelMultipleChoiceField( queryset=MetadataSet.objects.all(), label=_(u'Metadata sets'), diff --git a/apps/metadata/models.py b/apps/metadata/models.py index ccc0f66e47..f3afd83b66 100644 --- a/apps/metadata/models.py +++ b/apps/metadata/models.py @@ -1,7 +1,7 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ -from documents.models import Document +from documents.models import Document, DocumentType from metadata.conf.settings import AVAILABLE_MODELS from metadata.conf.settings import AVAILABLE_FUNCTIONS @@ -30,6 +30,9 @@ class MetadataType(models.Model): class MetadataSet(models.Model): + """ + Define a group of metadata types + """ title = models.CharField(max_length=48, verbose_name=_(u'title')) def __unicode__(self): @@ -72,3 +75,16 @@ class DocumentMetadata(models.Model): class Meta: verbose_name = _(u'document metadata') verbose_name_plural = _(u'document metadata') + + +class DocumentTypeDefaults(models.Model): + document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type')) + default_metadata_sets = models.ManyToManyField(MetadataSet, blank=True, verbose_name=_(u'default metadata sets')) + default_metadata = models.ManyToManyField(MetadataType, blank=True, verbose_name=_(u'default metadata')) + + def __unicode__(self): + return unicode(self.document_type) + + class Meta: + verbose_name = _(u'document type defaults') + verbose_name_plural = _(u'document types defaults')