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:
@@ -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(
|
||||
|
||||
@@ -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'
|
||||
)
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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=_(
|
||||
|
||||
Reference in New Issue
Block a user