From f709a40a277cea347f88c0728d16b1fbb03cb29c Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 5 Feb 2011 02:02:36 -0400 Subject: [PATCH] Implemented document delete view --- apps/documents/__init__.py | 7 +++--- apps/documents/models.py | 50 ++++++++++++++++++++++++++------------ apps/documents/urls.py | 2 +- apps/documents/views.py | 17 ++++++++++--- 4 files changed, 52 insertions(+), 24 deletions(-) diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 2f6771de11..0ad4669fdd 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -5,10 +5,11 @@ from common.api import register_links, register_menu from models import Document document_list = {'text':_(u'documents'), 'view':'document_list', 'famfam':'page'} -document_create = {'text':_('create document'), 'view':'document_create', 'famfam':'page_add'} -document_create_multiple = {'text':_('create multiple document'), 'view':'document_create_multiple', 'famfam':'page_add'} +document_create = {'text':_('upload a document'), 'view':'document_create', 'famfam':'page_add'} +document_create_multiple = {'text':_('upload multiple document'), 'view':'document_create_multiple', 'famfam':'page_add'} +document_delete = {'text':_('delete'), 'view':'document_delete', 'args':'object.id', 'famfam':'page_delete'} -#register_links(Document, [purchase_order_item_update, purchase_order_item_delete, jump_to_template, purchase_order_item_close, purchase_order_item_transfer]) +register_links(Document, [document_delete]) register_links(['document_list', 'document_create', 'upload_document_with_type'], [document_create, document_create_multiple], menu_name='sidebar') diff --git a/apps/documents/models.py b/apps/documents/models.py index e13e7aa304..dab18e48b6 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -76,27 +76,45 @@ class Document(models.Model): def save(self, *args, **kwargs): self.update_checksum(save=False) super(Document, self).save(*args, **kwargs) + + def delete(self, *args, **kwargs): + self.delete_fs_links() + super(Document, self).delete(*args, **kwargs) - def create_fs_links(self): + def calculate_fs_links(self): + targets = [] for metadata in self.documentmetadata_set.all(): if metadata.metadata_type.documenttypemetadatatype_set.all()[0].create_directory_link: target_directory = os.path.join(FILESERVING_PATH, slugify(metadata.metadata_type.name), slugify(metadata.value)) - try: - os.makedirs(target_directory) - except OSError as exc: - if exc.errno == errno.EEXIST: - pass - else: - return _(u'Unable to create metadata indexing directory.') + targets.append(os.path.join(target_directory, os.extsep.join([slugify(self.file_filename), slugify(self.file_extension)]))) + return targets - target_filepath = os.path.join(target_directory, os.extsep.join([slugify(self.file_filename), slugify(self.file_extension)])) - try: - os.symlink(os.path.abspath(self.file.path), target_filepath) - except OSError as exc: - if exc.errno == errno.EEXIST: - pass - else: - return _(u'Unable to create metadata indexing symbolic link.') + def create_fs_links(self): + for target in self.calculate_fs_links(): + try: + os.makedirs(os.path.dirname(target)) + except OSError as exc: + if exc.errno == errno.EEXIST: + pass + else: + return _(u'Unable to create metadata indexing directory.') + try: + os.symlink(os.path.abspath(self.file.path), target) + except OSError as exc: + if exc.errno == errno.EEXIST: + pass + else: + return _(u'Unable to create metadata indexing symbolic link.') + + def delete_fs_links(self): + for target in self.calculate_fs_links(): + try: + os.unlink(target) + except OSError as exc: + if exc.errno == errno.ENOENT: + pass + else: + return _(u'Unable to delete metadata indexing symbolic link.') available_functions_string = (_(u' Available functions: %s') % ','.join(['%s()' % name for name, function in AVAILABLE_FUNCTIONS.items()])) if AVAILABLE_FUNCTIONS else '' diff --git a/apps/documents/urls.py b/apps/documents/urls.py index edb34e1c30..09e0d6147c 100644 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -10,5 +10,5 @@ urlpatterns = patterns('documents.views', url(r'^document/type/(?P\d+)/upload/single/$', 'upload_document_with_type', {'multiple':False}, 'upload_document_with_type'), url(r'^document/type/(?P\d+)/upload/multiple/$', 'upload_document_with_type', {'multiple':True}, 'upload_multiple_documents_with_type'), url(r'^document/(?P\d+)/$', 'document_view', (), 'document_view'), - + url(r'^document/(?P\d+)/delete/$', 'document_delete', (), 'document_delete'), ) diff --git a/apps/documents/views.py b/apps/documents/views.py index c823648d43..a0e06e4868 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -8,7 +8,7 @@ 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 +from django.views.generic.create_update import create_object, delete_object from django.forms.formsets import formset_factory @@ -78,12 +78,12 @@ def upload_document_with_type(request, document_type_id, multiple=True): 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, - #'extra_columns':[{'name':_(u'qty'), 'attribute':'qty'}], }, ], @@ -116,5 +116,14 @@ def document_view(request, document_id): }, context_instance=RequestContext(request)) -#def document_edit(request, document_id): - +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'), + })