83 lines
3.3 KiB
Python
83 lines
3.3 KiB
Python
# DEPRECATION: This module is scheduled to be delete once the update to Django 1.6.X is complete
|
|
from __future__ import absolute_import
|
|
|
|
from django.core.urlresolvers import reverse
|
|
from django.http import HttpResponseRedirect
|
|
from django.utils.http import urlencode
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from common.wizard import BoundFormWizard
|
|
from documents.forms import DocumentTypeSelectForm
|
|
from metadata.forms import MetadataSelectionForm, MetadataFormSet
|
|
|
|
|
|
class DocumentCreateWizard(BoundFormWizard):
|
|
def generate_metadata_initial_values(self):
|
|
initial = []
|
|
for metadata_type in self.metadata_types:
|
|
initial.append({
|
|
'metadata_type': metadata_type,
|
|
})
|
|
|
|
for metadata_set in self.metadata_sets:
|
|
for metadata_set_item in metadata_set.metadatasetitem_set.all():
|
|
data = {
|
|
'metadata_type': metadata_set_item.metadata_type,
|
|
}
|
|
if data not in initial:
|
|
initial.append(data)
|
|
|
|
return initial
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.query_dict = {}
|
|
self.step_titles = kwargs.pop('step_titles', [
|
|
_(u'step 1 of 3: Document type'),
|
|
_(u'step 2 of 3: Metadata selection'),
|
|
_(u'step 3 of 3: Document metadata'),
|
|
])
|
|
|
|
super(DocumentCreateWizard, self).__init__(*args, **kwargs)
|
|
|
|
def render_template(self, request, form, previous_fields, step, context=None):
|
|
context = {
|
|
'step_title': self.extra_context['step_titles'][step],
|
|
'submit_label': _(u'Next step'),
|
|
'submit_icon_famfam': 'arrow_right',
|
|
}
|
|
return super(DocumentCreateWizard, self).render_template(
|
|
request, form, previous_fields, step, context
|
|
)
|
|
|
|
def parse_params(self, request, *args, **kwargs):
|
|
self.extra_context = {'step_titles': self.step_titles}
|
|
|
|
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']
|
|
self.metadata_types = form.cleaned_data['metadata_types']
|
|
initial_data = self.generate_metadata_initial_values()
|
|
self.initial = {2: initial_data}
|
|
if not initial_data:
|
|
# If there is no metadata selected, finish wizard
|
|
self.form_list = [DocumentTypeSelectForm, MetadataSelectionForm]
|
|
|
|
if isinstance(form, MetadataFormSet):
|
|
for identifier, metadata in enumerate(form.cleaned_data):
|
|
self.query_dict['metadata%s_id' % identifier] = metadata['id']
|
|
self.query_dict['metadata%s_value' % identifier] = metadata['value']
|
|
|
|
def get_template(self, step):
|
|
return 'generic_wizard.html'
|
|
|
|
def done(self, request, form_list):
|
|
if self.document_type:
|
|
self.query_dict['document_type_id'] = self.document_type.pk
|
|
|
|
url = '?'.join([reverse('upload_interactive'), urlencode(self.query_dict, doseq=True)])
|
|
return HttpResponseRedirect(url)
|