130 lines
4.8 KiB
Python
130 lines
4.8 KiB
Python
import datetime
|
|
import os
|
|
|
|
from django.utils.translation import ugettext as _
|
|
from django.http import HttpResponse, HttpResponseRedirect
|
|
from django.shortcuts import render_to_response, get_object_or_404, redirect
|
|
from django.template import RequestContext
|
|
from django.contrib import messages
|
|
from django.views.generic.list_detail import object_detail, object_list
|
|
from django.core.urlresolvers import reverse
|
|
from django.views.generic.create_update import create_object, delete_object
|
|
from django.forms.formsets import formset_factory
|
|
|
|
|
|
from forms import DocumentForm_view
|
|
|
|
from models import Document, DocumentMetadata, DocumentType, MetadataType
|
|
from forms import DocumentTypeSelectForm, DocumentCreateWizard, \
|
|
MetadataForm, DocumentForm
|
|
|
|
from documents.conf.settings import STAGING_DIRECTORY
|
|
|
|
def document_list(request):
|
|
return object_list(
|
|
request,
|
|
queryset=Document.objects.all(),
|
|
template_name='generic_list.html',
|
|
extra_context={
|
|
'title':_(u'documents'),
|
|
'extra_columns':[
|
|
{'name':_(u'filename'), 'attribute':'file_filename'},
|
|
{'name':_(u'extension'), 'attribute':'file_extension'},
|
|
{'name':_(u'mimetype'), 'attribute':'file_mimetype'},
|
|
{'name':_(u'added'), 'attribute':'date_added'},
|
|
],
|
|
},
|
|
)
|
|
|
|
|
|
def document_create(request, multiple=True):
|
|
MetadataFormSet = formset_factory(MetadataForm, extra=0)
|
|
wizard = DocumentCreateWizard(form_list=[DocumentTypeSelectForm, MetadataFormSet], multiple=multiple)
|
|
return wizard(request)
|
|
|
|
|
|
def upload_document_with_type(request, document_type_id, multiple=True):
|
|
document_type = get_object_or_404(DocumentType, pk=document_type_id)
|
|
if request.method == 'POST':
|
|
form = DocumentForm(request.POST, request.FILES, initial={'document_type':document_type})
|
|
if form.is_valid():
|
|
instance = form.save()
|
|
if 'new_filename' in form.cleaned_data:
|
|
if form.cleaned_data['new_filename']:
|
|
instance.file_filename = form.cleaned_data['new_filename'].filename
|
|
instance.save()
|
|
|
|
for key, value in request.GET.items():
|
|
document_metadata = DocumentMetadata(
|
|
document=instance,
|
|
metadata_type=get_object_or_404(MetadataType, pk=key),
|
|
value=value
|
|
)
|
|
document_metadata.save()
|
|
|
|
messages.success(request, _(u'Document uploaded successfully.'))
|
|
error_msg = instance.create_fs_links()
|
|
if error_msg:
|
|
messages.error(request, error_msg)
|
|
|
|
if multiple:
|
|
return HttpResponseRedirect(request.get_full_path())
|
|
else:
|
|
return HttpResponseRedirect(reverse('document_list'))
|
|
else:
|
|
form = DocumentForm(initial={'document_type':document_type})
|
|
|
|
filelist = sorted([os.path.normcase(f) for f in os.listdir(STAGING_DIRECTORY)])
|
|
|
|
return render_to_response('generic_form.html', {
|
|
'form':form,
|
|
'title':_(u'upload a local document'),
|
|
'subtemplates_dict':[
|
|
{
|
|
'name':'generic_list_subtemplate.html',
|
|
'title':_(u'files in staging'),
|
|
'object_list':filelist,
|
|
},
|
|
],
|
|
|
|
}, context_instance=RequestContext(request))
|
|
|
|
|
|
def document_view(request, document_id):
|
|
document = get_object_or_404(Document, pk=document_id)
|
|
form = DocumentForm_view(instance=document, extra_fields=[
|
|
{'label':_(u'Filename'), 'field':'file_filename'},
|
|
{'label':_(u'File extension'), 'field':'file_extension'},
|
|
{'label':_(u'File mimetype'), 'field':'file_mimetype'},
|
|
{'label':_(u'Date added'), 'field':'date_added'},
|
|
{'label':_(u'Checksum'), 'field':'checksum'},
|
|
{'label':_(u'UUID'), 'field':'uuid'}
|
|
])
|
|
|
|
return render_to_response('generic_detail.html', {
|
|
'form':form,
|
|
'object':document,
|
|
'subtemplates_dict':[
|
|
{
|
|
'name':'generic_list_subtemplate.html',
|
|
'title':_(u'metadata'),
|
|
'object_list':document.documentmetadata_set.all(),
|
|
'extra_columns':[{'name':_(u'qty'), 'attribute':'value'}],
|
|
'hide_link':True,
|
|
},
|
|
],
|
|
}, context_instance=RequestContext(request))
|
|
|
|
|
|
def document_delete(request, document_id):
|
|
document = get_object_or_404(Document, pk=document_id)
|
|
|
|
return delete_object(request, model=Document, object_id=document_id,
|
|
template_name='generic_confirm.html',
|
|
post_delete_redirect=reverse('document_list'),
|
|
extra_context={
|
|
'delete_view':True,
|
|
'object':document,
|
|
'object_name':_(u'document'),
|
|
})
|