Add field to store when a document was deleted.

This commit is contained in:
Roberto Rosario
2015-07-03 21:00:18 -04:00
parent 7e8e124d09
commit ab53270942
4 changed files with 85 additions and 50 deletions

View File

@@ -97,6 +97,7 @@ class DocumentsApp(MayanAppConfig):
SourceColumn(source=Document, label=_('Thumbnail'), attribute=encapsulate(lambda document: document_thumbnail(document, gallery_name='documents:document_list', title=getattr(document, 'label', None), size=setting_thumbnail_size.value)))
SourceColumn(source=Document, label=_('Type'), attribute='document_type')
SourceColumn(source=DeletedDocument, label=_('Type'), attribute='document_type')
SourceColumn(source=DeletedDocument, label=_('Date time deleted'), attribute='deleted_date_time')
menu_front_page.bind_links(links=[link_document_list_recent, link_document_list, link_document_list_deleted])
menu_setup.bind_links(links=[link_document_type_setup])

View File

@@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import datetime
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('documents', '0009_document_in_trash'),
]
operations = [
migrations.CreateModel(
name='DeletedDocument',
fields=[
],
options={
'proxy': True,
},
bases=('documents.document',),
),
migrations.AddField(
model_name='document',
name='deleted_date_time',
field=models.DateTimeField(default=datetime.datetime(2015, 7, 4, 0, 54, 7, 910642, tzinfo=utc), verbose_name='Date and time deleted', blank=True),
preserve_default=False,
),
]

View File

@@ -10,6 +10,7 @@ from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.db import models, transaction
from django.utils.encoding import python_2_unicode_compatible
from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _
from common.settings import setting_temporary_directory
@@ -81,6 +82,7 @@ class Document(models.Model):
date_added = models.DateTimeField(verbose_name=_('Added'), auto_now_add=True)
language = models.CharField(choices=setting_language_choices.value, default=setting_language.value, max_length=8, verbose_name=_('Language'))
in_trash = models.BooleanField(default=False, editable=False, verbose_name=_('In trash?'))
deleted_date_time = models.DateTimeField(blank=True, editable=True, verbose_name=_('Date and time deleted'))
objects = DocumentManager()
passthrough = PassthroughManager()
@@ -127,6 +129,7 @@ class Document(models.Model):
def delete(self, *args, **kwargs):
if not self.in_trash and kwargs.get('to_trash', True):
self.in_trash = True
self.deleted_date_time = now()
self.save()
else:
for version in self.versions.all():

View File

@@ -98,34 +98,29 @@ class DeletedDocumentListView(DocumentListView):
return DeletedDocument.objects.filter(pk__in=queryset.values_list('pk', flat=True))
class DocumentPageListView(ParentChildListView):
object_permission = permission_document_view
parent_queryset = Document.objects.all()
def get_queryset(self):
return self.get_object().pages.all()
def get_context_data(self, **kwargs):
context = super(DocumentPageListView, self).get_context_data(**kwargs)
context.update(
{
'title': _('Pages for document: %s') % self.get_object(),
}
)
return context
class RecentDocumentListView(DocumentListView):
class DeletedDocumentDeleteView(ConfirmView):
extra_context = {
'hide_links': True,
'recent_count': setting_recent_count.value, # TODO: used for something?
'title': _('Recent documents'),
'title': _('Delete the selected document?')
}
def get_document_queryset(self):
return RecentDocument.objects.get_for_user(self.request.user)
def object_action(self, request, instance):
source_document = get_object_or_404(Document.passthrough, pk=instance.pk)
try:
Permission.check_permissions(request.user, [permission_document_delete])
except PermissionDenied:
AccessControlList.objects.check_access(permission_document_delete, request.user, source_document)
instance.delete()
messages.success(request, _('Document: %(document)s deleted.') % {
'document': instance}
)
def post(self, request, *args, **kwargs):
document = get_object_or_404(DeletedDocument, pk=self.kwargs['pk'])
self.object_action(request=request, instance=document)
return HttpResponseRedirect(self.get_success_url())
class DocumentRestoreView(ConfirmView):
@@ -153,6 +148,13 @@ class DocumentRestoreView(ConfirmView):
return HttpResponseRedirect(self.get_success_url())
class DocumentManyDeleteView(MultipleInstanceActionMixin, DeletedDocumentDeleteView):
extra_context = {
'title': _('Delete the selected documents?')
}
model = DeletedDocument
class DocumentManyRestoreView(MultipleInstanceActionMixin, DocumentRestoreView):
extra_context = {
'title': _('Restore the selected documents?')
@@ -160,36 +162,23 @@ class DocumentManyRestoreView(MultipleInstanceActionMixin, DocumentRestoreView):
model = DeletedDocument
class DeletedDocumentDeleteView(ConfirmView):
extra_context = {
'title': _('Delete the selected document?')
}
class DocumentPageListView(ParentChildListView):
object_permission = permission_document_view
parent_queryset = Document.objects.all()
def object_action(self, request, instance):
source_document = get_object_or_404(Document.passthrough, pk=instance.pk)
def get_queryset(self):
return self.get_object().pages.all()
try:
Permission.check_permissions(request.user, [permission_document_delete])
except PermissionDenied:
AccessControlList.objects.check_access(permission_document_delete, request.user, source_document)
def get_context_data(self, **kwargs):
context = super(DocumentPageListView, self).get_context_data(**kwargs)
instance.delete()
messages.success(request, _('Document: %(document)s deleted.') % {
'document': instance}
context.update(
{
'title': _('Pages for document: %s') % self.get_object(),
}
)
def post(self, request, *args, **kwargs):
document = get_object_or_404(DeletedDocument, pk=self.kwargs['pk'])
self.object_action(request=request, instance=document)
return HttpResponseRedirect(self.get_success_url())
class DocumentManyDeleteView(MultipleInstanceActionMixin, DeletedDocumentDeleteView):
extra_context = {
'title': _('Delete the selected documents?')
}
model = DeletedDocument
return context
class EmptyTrashCanView(ConfirmView):
@@ -208,6 +197,17 @@ class EmptyTrashCanView(ConfirmView):
return HttpResponseRedirect(self.get_success_url())
class RecentDocumentListView(DocumentListView):
extra_context = {
'hide_links': True,
'recent_count': setting_recent_count.value, # TODO: used for something?
'title': _('Recent documents'),
}
def get_document_queryset(self):
return RecentDocument.objects.get_for_user(self.request.user)
def document_properties(request, document_id):
document = get_object_or_404(Document, pk=document_id)