Skip step 1 of create document wizard if only one document type exists

This commit is contained in:
Roberto Rosario
2011-02-10 23:04:33 -04:00
parent 8df0747ec2
commit d4f685cd17
4 changed files with 51 additions and 24 deletions

View File

@@ -6,6 +6,7 @@ from django.http import HttpResponseRedirect
from django.utils.http import urlencode from django.utils.http import urlencode
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.forms.formsets import formset_factory
from staging import StagingFile from staging import StagingFile
@@ -18,6 +19,8 @@ from models import Document, DocumentType, DocumentTypeMetadataType
from documents.conf.settings import AVAILABLE_FUNCTIONS from documents.conf.settings import AVAILABLE_FUNCTIONS
from documents.conf.settings import AVAILABLE_MODELS from documents.conf.settings import AVAILABLE_MODELS
class ImageWidget(forms.widgets.Widget): class ImageWidget(forms.widgets.Widget):
def render(self, name, value, attrs=None): def render(self, name, value, attrs=None):
output = [] output = []
@@ -139,39 +142,48 @@ class MetadataForm(forms.Form):
class DocumentCreateWizard(BoundFormWizard): class DocumentCreateWizard(BoundFormWizard):
def _generate_metadata_initial_values(self):
initial=[]
for item in DocumentTypeMetadataType.objects.filter(document_type=self.document_type):
initial.append({
'metadata_type':item.metadata_type,
'document_type':self.document_type,
})
return initial
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.multiple = kwargs.pop('multiple', True) self.multiple = kwargs.pop('multiple', True)
self.step_titles = kwargs.pop('step_titles', [
_(u'step 1 of 2: Document type'),
_(u'step 2 of 2: Document metadata'),
])
self.document_type = kwargs.pop('document_type', None)
super(DocumentCreateWizard, self).__init__(*args, **kwargs) 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): def render_template(self, request, form, previous_fields, step, context=None):
context = {'step_title':self.extra_context['step_titles'][step]} context = {'step_title':self.extra_context['step_titles'][step]}
return super(DocumentCreateWizard, self).render_template(request, form, previous_fields, step, context) return super(DocumentCreateWizard, self).render_template(request, form, previous_fields, step, context)
def parse_params(self, request, *args, **kwargs): def parse_params(self, request, *args, **kwargs):
self.extra_context={'step_titles':[ self.extra_context={'step_titles':self.step_titles}
_(u'step 1 of 2: Document type'),
_(u'step 2 of 2: Document metadata'),
]}
def process_step(self, request, form, step): def process_step(self, request, form, step):
if step == 0: #if step == 0:
if isinstance(form, DocumentTypeSelectForm):
self.document_type = form.cleaned_data['document_type'] self.document_type = form.cleaned_data['document_type']
self.initial = {1:self._generate_metadata_initial_values()}
initial=[] #if step == 1:
for item in DocumentTypeMetadataType.objects.filter(document_type=self.document_type): if isinstance(form, MetadataFormSet):
initial.append({
'metadata_type':item.metadata_type,
'document_type':self.document_type,
})
self.initial = {1:initial}
if step == 1:
self.urldata = [] self.urldata = []
for id, metadata in enumerate(form.cleaned_data): for id, metadata in enumerate(form.cleaned_data):
if metadata['value']: if metadata['value']:
self.urldata.append(('metadata%s_id' % id,metadata['id'])) self.urldata.append(('metadata%s_id' % id,metadata['id']))
self.urldata.append(('metadata%s_value' % id,metadata['value'])) self.urldata.append(('metadata%s_value' % id,metadata['value']))
def get_template(self, step): def get_template(self, step):
return 'generic_wizard.html' return 'generic_wizard.html'
@@ -184,3 +196,6 @@ class DocumentCreateWizard(BoundFormWizard):
url = reverse(view, args=[self.document_type.id]) url = reverse(view, args=[self.document_type.id])
return HttpResponseRedirect('%s?%s' % (url, urlencode(self.urldata))) return HttpResponseRedirect('%s?%s' % (url, urlencode(self.urldata)))
MetadataFormSet = formset_factory(MetadataForm, extra=0)

View File

@@ -8,7 +8,7 @@ from django.contrib import messages
from django.views.generic.list_detail import object_detail, object_list from django.views.generic.list_detail import object_detail, object_list
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.views.generic.create_update import create_object, delete_object, update_object from django.views.generic.create_update import create_object, delete_object, update_object
from django.forms.formsets import formset_factory #from django.forms.formsets import formset_factory
from django.core.files.base import File from django.core.files.base import File
from django.conf import settings from django.conf import settings
from django.utils.http import urlencode from django.utils.http import urlencode
@@ -23,7 +23,8 @@ from utils import from_descriptor_to_tempfile
from models import Document, DocumentMetadata, DocumentType, MetadataType from models import Document, DocumentMetadata, DocumentType, MetadataType
from forms import DocumentTypeSelectForm, DocumentCreateWizard, \ from forms import DocumentTypeSelectForm, DocumentCreateWizard, \
MetadataForm, DocumentForm, DocumentForm_edit, DocumentForm_view, \ MetadataForm, DocumentForm, DocumentForm_edit, DocumentForm_view, \
StagingDocumentForm, DocumentTypeMetadataType, DocumentPreviewForm StagingDocumentForm, DocumentTypeMetadataType, DocumentPreviewForm, \
MetadataFormSet
from staging import StagingFile from staging import StagingFile
@@ -45,8 +46,16 @@ def document_list(request):
) )
def document_create(request, multiple=True): def document_create(request, multiple=True):
MetadataFormSet = formset_factory(MetadataForm, extra=0) if DocumentType.objects.all().count() == 1:
wizard = DocumentCreateWizard(form_list=[DocumentTypeSelectForm, MetadataFormSet], multiple=multiple) wizard = DocumentCreateWizard(
document_type=DocumentType.objects.all()[0],
form_list=[MetadataFormSet], multiple=multiple,
step_titles = [
_(u'document metadata'),
])
else:
wizard = DocumentCreateWizard(form_list=[DocumentTypeSelectForm, MetadataFormSet], multiple=multiple)
return wizard(request) return wizard(request)
def document_create_sibling(request, document_id, multiple=True): def document_create_sibling(request, document_id, multiple=True):
@@ -329,7 +338,6 @@ def document_edit(request, document_id):
def document_edit_metadata(request, document_id): def document_edit_metadata(request, document_id):
document = get_object_or_404(Document, pk=document_id) document = get_object_or_404(Document, pk=document_id)
MetadataFormSet = formset_factory(MetadataForm, extra=0)
initial=[] initial=[]
for item in DocumentTypeMetadataType.objects.filter(document_type=document.document_type): for item in DocumentTypeMetadataType.objects.filter(document_type=document.document_type):

View File

@@ -1,3 +1,4 @@
* Added python-magic for smarter MIME type detection (https://github.com/ahupp/python-magic) * Added python-magic for smarter MIME type detection (https://github.com/ahupp/python-magic).
* Added a new Document model field: file_mime_encoding * Added a new Document model field: file_mime_encoding.
* Show only document metadata in document list view * Show only document metadata in document list view.
* If one document type exists, the create document wizard skips the first step.

View File

@@ -23,11 +23,11 @@
* Cache thumbnails and preview by document hash not by uuid - DONE * Cache thumbnails and preview by document hash not by uuid - DONE
* Show document metadata in document list - DONE * Show document metadata in document list - DONE
* Add css grids - DONE * Add css grids - DONE
* If theres only one document type on db skip step 1 of wizard - DONE
* Document list filtering by metadata * Document list filtering by metadata
* Filterform date filtering widget * Filterform date filtering widget
* Validate GET data before saving file * Validate GET data before saving file
* Check duplicated files using checksum * Check duplicated files using checksum
* If theres only one document type on db skip step 1 of wizard
* Show last 5 recent metadata setups for easy switch * Show last 5 recent metadata setups for easy switch
* Change to model signals * Change to model signals
* Allow document type to be changed in document edit view * Allow document type to be changed in document edit view
@@ -53,5 +53,8 @@
* Divide navigation links search by object and by view * Divide navigation links search by object and by view
* Add show_summary method to model to display as results of a search * Add show_summary method to model to display as results of a search
* Add unpaper to pre OCR document cleanup * Add unpaper to pre OCR document cleanup
* Support distributed OCR queues (RabbitMQ & Celery?)
* DXF viewer - http://code.google.com/p/dxf-reader/source/browse/#svn%2Ftrunk * DXF viewer - http://code.google.com/p/dxf-reader/source/browse/#svn%2Ftrunk
* Group documents by metadata * Group documents by metadata
* Support spreadsheets, wordprocessing docs using openoffice in server mode
* WebDAV support