Add support for appending pages

Add version upload form checkbox.
Add the append_pages keyword argument.

Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-10-10 02:40:25 -04:00
parent 03379ab8ec
commit ff03ea07ca
13 changed files with 48 additions and 28 deletions

View File

@@ -148,7 +148,7 @@ class DocumentParsingApp(MayanAppConfig):
menu_facet.bind_links(
links=(link_document_content,), sources=(Document,)
)
menu_facet.bind_links(
menu_list_facet.bind_links(
links=(link_document_page_content,), sources=(DocumentPage,)
)
menu_list_facet.bind_links(

View File

@@ -17,6 +17,9 @@ icon_document_content_download = Icon(
icon_document_multiple_submit = Icon(
driver_name='fontawesome', symbol='font'
)
icon_document_page_content = Icon(
driver_name='fontawesome', symbol='font'
)
icon_document_submit = Icon(
driver_name='fontawesome', symbol='font'
)

View File

@@ -32,9 +32,15 @@ link_document_content_delete_multiple = Link(
text=_('Delete parsed content'),
view='document_parsing:document_content_delete_multiple',
)
link_document_content_download = Link(
args='resolved_object.id',
icon_class_path='mayan.apps.document_parsing.icons.icon_document_content_download',
permissions=(permission_content_view,), text=_('Download content'),
view='document_parsing:document_content_download'
)
link_document_page_content = Link(
args='resolved_object.id', conditional_disable=is_document_page_disabled,
icon_class_path='mayan.apps.document_parsing.icons.icon_document_content',
icon_class_path='mayan.apps.document_parsing.icons.icon_document_page_content',
permissions=(permission_content_view,), text=_('Content'),
view='document_parsing:document_page_content'
)
@@ -44,12 +50,6 @@ link_document_parsing_errors_list = Link(
permissions=(permission_content_view,), text=_('Parsing errors'),
view='document_parsing:document_parsing_error_list'
)
link_document_content_download = Link(
args='resolved_object.id',
icon_class_path='mayan.apps.document_parsing.icons.icon_document_content_download',
permissions=(permission_content_view,), text=_('Download content'),
view='document_parsing:document_content_download'
)
link_document_submit_multiple = Link(
icon_class_path='mayan.apps.document_parsing.icons.icon_document_submit',
text=_('Submit for parsing'),

View File

@@ -18,7 +18,7 @@ from .signals import post_document_version_parsing
logger = logging.getLogger(__name__)
class DocumentPageContentManager(models.Manager):
class DocumentVersionPageContentManager(models.Manager):
def delete_content_for(self, document, user=None):
with transaction.atomic():
for document_page in document.pages.all():

View File

@@ -8,7 +8,9 @@ from mayan.apps.documents.models import (
DocumentPage, DocumentType, DocumentVersion, DocumentVersionPage
)
from .managers import DocumentPageContentManager, DocumentTypeSettingsManager
from .managers import (
DocumentVersionPageContentManager, DocumentTypeSettingsManager
)
class DocumentTypeSettings(models.Model):
@@ -52,7 +54,7 @@ class DocumentVersionPageContent(models.Model):
), verbose_name=_('Content')
)
objects = DocumentPageContentManager()
objects = DocumentVersionPageContentManager()
class Meta:
verbose_name = _('Document version page content')

View File

@@ -178,7 +178,7 @@ class Document(models.Model):
return (self.uuid,)
natural_key.dependencies = ['documents.DocumentType']
def new_version(self, file_object, comment=None, _user=None):
def new_version(self, file_object, append_pages=False, comment=None, _user=None):
logger.info('Creating new document version for document: %s', self)
DocumentVersion = apps.get_model(
app_label='documents', model_name='DocumentVersion'
@@ -187,7 +187,7 @@ class Document(models.Model):
document_version = DocumentVersion(
document=self, comment=comment or '', file=File(file_object)
)
document_version.save(_user=_user)
document_version.save(append_pages=append_pages, _user=_user)
logger.info('New document version queued for document: %s', self)

View File

@@ -274,6 +274,7 @@ class DocumentVersion(models.Model):
Overloaded save method that updates the document version's checksum,
mimetype, and page count when created
"""
append_pages = kwargs.pop('append_pages', False)
user = kwargs.pop('_user', None)
new_document_version = not self.pk
@@ -293,7 +294,7 @@ class DocumentVersion(models.Model):
# Only do this for new documents
self.update_checksum(save=False)
self.update_mimetype(save=False)
self.save()
self.save(append_pages=append_pages, _user=user)
self.update_page_count(save=False)
if setting_fix_orientation.value:
self.fix_orientation()
@@ -326,6 +327,12 @@ class DocumentVersion(models.Model):
sender=Document, instance=self.document
)
if append_pages:
for version_page in self.pages.all():
self.document.pages.create(
content_object = version_page
)
else:
self.document.pages_reset(update_page_count=False)
def save_to_file(self, file_object):

View File

@@ -158,7 +158,7 @@ def task_update_page_count(self, version_id):
@app.task(bind=True, default_retry_delay=UPLOAD_NEW_VERSION_RETRY_DELAY, ignore_result=True)
def task_upload_new_version(self, document_id, shared_uploaded_file_id, user_id, comment=None):
def task_upload_new_version(self, document_id, shared_uploaded_file_id, user_id, append_pages=False, comment=None):
SharedUploadedFile = apps.get_model(
app_label='common', model_name='SharedUploadedFile'
)
@@ -193,7 +193,7 @@ def task_upload_new_version(self, document_id, shared_uploaded_file_id, user_id,
document=document, comment=comment or '', file=file_object
)
try:
document_version.save(_user=user)
document_version.save(append_pages=append_pages, _user=user)
except Warning as warning:
# New document version are blocked
logger.info(

View File

@@ -15,7 +15,7 @@ def is_document_page_disabled(context):
link_document_page_ocr_content = Link(
args='resolved_object.id',# conditional_disable=is_document_page_disabled,
args='resolved_object.id', conditional_disable=is_document_page_disabled,
icon_class_path='mayan.apps.ocr.icons.icon_document_page_ocr_content',
permissions=(permission_ocr_content_view,), text=_('OCR'),
view='ocr:document_page_ocr_content',

View File

@@ -22,7 +22,7 @@ from .signals import post_document_version_ocr
logger = logging.getLogger(__name__)
class DocumentPageOCRContentManager(models.Manager):
class DocumentVesionPageOCRContentManager(models.Manager):
def delete_content_for(self, document, user=None):
with transaction.atomic():
for document_page in document.pages.all():

View File

@@ -9,7 +9,7 @@ from mayan.apps.documents.models import (
)
from .managers import (
DocumentPageOCRContentManager, DocumentTypeSettingsManager
DocumentVesionPageOCRContentManager, DocumentTypeSettingsManager
)
@@ -52,7 +52,7 @@ class DocumentVersionPageOCRContent(models.Model):
), verbose_name=_('Content')
)
objects = DocumentPageOCRContentManager()
objects = DocumentVesionPageOCRContentManager()
class Meta:
verbose_name = _('Document version page OCR content')

View File

@@ -31,6 +31,10 @@ class NewVersionForm(forms.Form):
required=False,
widget=forms.widgets.Textarea(attrs={'rows': 4}),
)
self.fields['append_pages'] = forms.BooleanField(
initial=False, label=_('Append pages?'),
required=False,
)
class UploadBaseForm(forms.Form):

View File

@@ -362,7 +362,6 @@ class UploadInteractiveView(UploadBaseView):
class UploadInteractiveVersionView(UploadBaseView):
def dispatch(self, request, *args, **kwargs):
self.subtemplates_list = []
self.document = get_object_or_404(
@@ -417,12 +416,17 @@ class UploadInteractiveVersionView(UploadBaseView):
else:
user_id = None
task_upload_new_version.apply_async(kwargs=dict(
task_upload_new_version.apply_async(
kwargs=dict(
append_pages=forms['document_form'].cleaned_data.get(
'append_pages', False
),
shared_uploaded_file_id=shared_uploaded_file.pk,
document_id=self.document.pk,
user_id=user_id,
comment=forms['document_form'].cleaned_data.get('comment')
))
)
)
messages.success(
message=_(