Add field to store when a document was deleted.
This commit is contained in:
@@ -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])
|
||||
|
||||
31
mayan/apps/documents/migrations/0010_auto_20150704_0054.py
Normal file
31
mayan/apps/documents/migrations/0010_auto_20150704_0054.py
Normal 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,
|
||||
),
|
||||
]
|
||||
@@ -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():
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user