Add support for selectively blocking new document version uploads when checking out documents

This commit is contained in:
Roberto Rosario
2012-06-15 19:30:08 -04:00
parent cd89bbd488
commit 4322ac0a02
5 changed files with 30 additions and 4 deletions

View File

@@ -19,6 +19,7 @@ def initialize_document_checkout_extra_methods():
Document.add_to_class('check_in', lambda document: DocumentCheckout.objects.check_in_document(document))
Document.add_to_class('checkout_info', lambda document: DocumentCheckout.objects.document_checkout_info(document))
Document.add_to_class('checkout_state', lambda document: DocumentCheckout.objects.document_checkout_state(document))
Document.add_to_class('is_new_versions_allowed', lambda document: DocumentCheckout.objects.is_document_new_versions_allowed(document))
register_top_menu(name='checkouts', link=checkout_list)
register_links(Document, [checkout_info], menu_name='form_header')
@@ -37,3 +38,4 @@ initialize_document_checkout_extra_methods()
#TODO: forcefull check in
#TODO: specify checkout option check (document.allows_new_versions())
#TODO: out check in after expiration datetime
#TODO: add checkin out history

View File

@@ -96,7 +96,7 @@ class DocumentCheckoutForm(forms.ModelForm):
class Meta:
model = DocumentCheckout
exclude = ('checkout_datetime', 'user_content_type', 'user_object_id', 'block_new_version')
exclude = ('checkout_datetime', 'user_content_type', 'user_object_id')
widgets = {
'document': forms.widgets.HiddenInput(),

View File

@@ -26,10 +26,14 @@ class DocumentCheckoutManager(models.Manager):
except self.model.DoesNotExist:
raise DocumentNotCheckedOut
else:
#create_history(HISTORY_DOCUMENT_DELETED, data={'user': request.user, 'document': document})
document_checkout.delete()
def document_checkout_info(self, document):
return self.model.objects.get(document=document)
try:
return self.model.objects.get(document=document)
except self.model.DoesNotExist:
raise DocumentNotCheckedOut
def document_checkout_state(self, document):
if self.is_document_checked_out(document):
@@ -37,4 +41,8 @@ class DocumentCheckoutManager(models.Manager):
else:
return STATE_CHECKED_IN
def is_document_new_versions_allowed(self, document):
try:
return not self.document_checkout_info(document).block_new_version
except DocumentNotCheckedOut:
return True

View File

@@ -23,11 +23,12 @@ class DocumentCheckout(models.Model):
document = models.ForeignKey(Document, verbose_name=_(u'document'), unique=True)
checkout_datetime = models.DateTimeField(verbose_name=_(u'check out date and time'), blank=True, null=True)
expiration_datetime = models.DateTimeField(verbose_name=_(u'check out expiration date and time'), help_text=_(u'Amount of time to hold the document checked out in minutes.'))
block_new_version = models.BooleanField(verbose_name=_(u'block new version upload'), help_text=_(u'Do not allow new version of this document to be uploaded.'))
user_content_type = models.ForeignKey(ContentType, null=True, blank=True) # blank and null added for ease of db migration
user_object_id = models.PositiveIntegerField(null=True, blank=True)
user_object = generic.GenericForeignKey(ct_field='user_content_type', fk_field='user_object_id')
block_new_version = models.BooleanField(default=True, verbose_name=_(u'block new version upload'), help_text=_(u'Do not allow new version of this document to be uploaded.'))
#block_metadata
#block_editing
#block tag add/remove
@@ -47,6 +48,10 @@ class DocumentCheckout(models.Model):
# raise DocumentAlreadyCheckedOut
#else:
raise
else:
#create_history(HISTORY_DOCUMENT_DELETED, data={'user': request.user, 'document': document})
pass
#TODO: clean method that raises DocumentAlreadyCheckedOut

View File

@@ -15,6 +15,7 @@ from documents.permissions import (PERMISSION_DOCUMENT_CREATE,
PERMISSION_DOCUMENT_NEW_VERSION)
from documents.models import DocumentType, Document
from documents.conf.settings import THUMBNAIL_SIZE
from documents.exceptions import NewDocumentVersionNotAllowed
from metadata.api import decode_metadata_from_url, metadata_repr_as_list
from permissions.models import Permission
from common.utils import encapsulate
@@ -174,6 +175,11 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No
messages.warning(request, _(u'File was not a compressed file, uploaded as it was.'))
return HttpResponseRedirect(request.get_full_path())
except NewDocumentVersionNotAllowed:
if not document.is_new_versions_allowed():
messages.error(request, _(u'The check out options for document currently don\'t allow new version uploads.'))
else:
messages.error(request, _(u'This document currently don\'t allow new version uploads.'))
except Exception, e:
if settings.DEBUG:
raise
@@ -253,6 +259,11 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No
return HttpResponseRedirect(reverse('document_view_simple', args=[document.pk]))
else:
return HttpResponseRedirect(request.get_full_path())
except NewDocumentVersionNotAllowed:
if not document.is_new_versions_allowed:
messages.error(request, _(u'The check out options for document currently don\'t allow new version uploads.'))
else:
messages.error(request, _(u'This document currently don\'t allow new version uploads.'))
except Exception, e:
if settings.DEBUG:
raise