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(
|
menu_facet.bind_links(
|
||||||
links=(link_document_content,), sources=(Document,)
|
links=(link_document_content,), sources=(Document,)
|
||||||
)
|
)
|
||||||
menu_facet.bind_links(
|
menu_list_facet.bind_links(
|
||||||
links=(link_document_page_content,), sources=(DocumentPage,)
|
links=(link_document_page_content,), sources=(DocumentPage,)
|
||||||
)
|
)
|
||||||
menu_list_facet.bind_links(
|
menu_list_facet.bind_links(
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ icon_document_content_download = Icon(
|
|||||||
icon_document_multiple_submit = Icon(
|
icon_document_multiple_submit = Icon(
|
||||||
driver_name='fontawesome', symbol='font'
|
driver_name='fontawesome', symbol='font'
|
||||||
)
|
)
|
||||||
|
icon_document_page_content = Icon(
|
||||||
|
driver_name='fontawesome', symbol='font'
|
||||||
|
)
|
||||||
icon_document_submit = Icon(
|
icon_document_submit = Icon(
|
||||||
driver_name='fontawesome', symbol='font'
|
driver_name='fontawesome', symbol='font'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -32,9 +32,15 @@ link_document_content_delete_multiple = Link(
|
|||||||
text=_('Delete parsed content'),
|
text=_('Delete parsed content'),
|
||||||
view='document_parsing:document_content_delete_multiple',
|
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(
|
link_document_page_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.document_parsing.icons.icon_document_content',
|
icon_class_path='mayan.apps.document_parsing.icons.icon_document_page_content',
|
||||||
permissions=(permission_content_view,), text=_('Content'),
|
permissions=(permission_content_view,), text=_('Content'),
|
||||||
view='document_parsing:document_page_content'
|
view='document_parsing:document_page_content'
|
||||||
)
|
)
|
||||||
@@ -44,12 +50,6 @@ link_document_parsing_errors_list = Link(
|
|||||||
permissions=(permission_content_view,), text=_('Parsing errors'),
|
permissions=(permission_content_view,), text=_('Parsing errors'),
|
||||||
view='document_parsing:document_parsing_error_list'
|
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(
|
link_document_submit_multiple = Link(
|
||||||
icon_class_path='mayan.apps.document_parsing.icons.icon_document_submit',
|
icon_class_path='mayan.apps.document_parsing.icons.icon_document_submit',
|
||||||
text=_('Submit for parsing'),
|
text=_('Submit for parsing'),
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ from .signals import post_document_version_parsing
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class DocumentPageContentManager(models.Manager):
|
class DocumentVersionPageContentManager(models.Manager):
|
||||||
def delete_content_for(self, document, user=None):
|
def delete_content_for(self, document, user=None):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
for document_page in document.pages.all():
|
for document_page in document.pages.all():
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ from mayan.apps.documents.models import (
|
|||||||
DocumentPage, DocumentType, DocumentVersion, DocumentVersionPage
|
DocumentPage, DocumentType, DocumentVersion, DocumentVersionPage
|
||||||
)
|
)
|
||||||
|
|
||||||
from .managers import DocumentPageContentManager, DocumentTypeSettingsManager
|
from .managers import (
|
||||||
|
DocumentVersionPageContentManager, DocumentTypeSettingsManager
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class DocumentTypeSettings(models.Model):
|
class DocumentTypeSettings(models.Model):
|
||||||
@@ -52,7 +54,7 @@ class DocumentVersionPageContent(models.Model):
|
|||||||
), verbose_name=_('Content')
|
), verbose_name=_('Content')
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = DocumentPageContentManager()
|
objects = DocumentVersionPageContentManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('Document version page content')
|
verbose_name = _('Document version page content')
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ class Document(models.Model):
|
|||||||
return (self.uuid,)
|
return (self.uuid,)
|
||||||
natural_key.dependencies = ['documents.DocumentType']
|
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)
|
logger.info('Creating new document version for document: %s', self)
|
||||||
DocumentVersion = apps.get_model(
|
DocumentVersion = apps.get_model(
|
||||||
app_label='documents', model_name='DocumentVersion'
|
app_label='documents', model_name='DocumentVersion'
|
||||||
@@ -187,7 +187,7 @@ class Document(models.Model):
|
|||||||
document_version = DocumentVersion(
|
document_version = DocumentVersion(
|
||||||
document=self, comment=comment or '', file=File(file_object)
|
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)
|
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,
|
Overloaded save method that updates the document version's checksum,
|
||||||
mimetype, and page count when created
|
mimetype, and page count when created
|
||||||
"""
|
"""
|
||||||
|
append_pages = kwargs.pop('append_pages', False)
|
||||||
user = kwargs.pop('_user', None)
|
user = kwargs.pop('_user', None)
|
||||||
new_document_version = not self.pk
|
new_document_version = not self.pk
|
||||||
|
|
||||||
@@ -293,7 +294,7 @@ class DocumentVersion(models.Model):
|
|||||||
# Only do this for new documents
|
# Only do this for new documents
|
||||||
self.update_checksum(save=False)
|
self.update_checksum(save=False)
|
||||||
self.update_mimetype(save=False)
|
self.update_mimetype(save=False)
|
||||||
self.save()
|
self.save(append_pages=append_pages, _user=user)
|
||||||
self.update_page_count(save=False)
|
self.update_page_count(save=False)
|
||||||
if setting_fix_orientation.value:
|
if setting_fix_orientation.value:
|
||||||
self.fix_orientation()
|
self.fix_orientation()
|
||||||
@@ -326,7 +327,13 @@ class DocumentVersion(models.Model):
|
|||||||
sender=Document, instance=self.document
|
sender=Document, instance=self.document
|
||||||
)
|
)
|
||||||
|
|
||||||
self.document.pages_reset(update_page_count=False)
|
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):
|
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)
|
@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(
|
SharedUploadedFile = apps.get_model(
|
||||||
app_label='common', model_name='SharedUploadedFile'
|
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
|
document=document, comment=comment or '', file=file_object
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
document_version.save(_user=user)
|
document_version.save(append_pages=append_pages, _user=user)
|
||||||
except Warning as warning:
|
except Warning as warning:
|
||||||
# New document version are blocked
|
# New document version are blocked
|
||||||
logger.info(
|
logger.info(
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ def is_document_page_disabled(context):
|
|||||||
|
|
||||||
|
|
||||||
link_document_page_ocr_content = Link(
|
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',
|
icon_class_path='mayan.apps.ocr.icons.icon_document_page_ocr_content',
|
||||||
permissions=(permission_ocr_content_view,), text=_('OCR'),
|
permissions=(permission_ocr_content_view,), text=_('OCR'),
|
||||||
view='ocr:document_page_ocr_content',
|
view='ocr:document_page_ocr_content',
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ from .signals import post_document_version_ocr
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class DocumentPageOCRContentManager(models.Manager):
|
class DocumentVesionPageOCRContentManager(models.Manager):
|
||||||
def delete_content_for(self, document, user=None):
|
def delete_content_for(self, document, user=None):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
for document_page in document.pages.all():
|
for document_page in document.pages.all():
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from mayan.apps.documents.models import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from .managers import (
|
from .managers import (
|
||||||
DocumentPageOCRContentManager, DocumentTypeSettingsManager
|
DocumentVesionPageOCRContentManager, DocumentTypeSettingsManager
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ class DocumentVersionPageOCRContent(models.Model):
|
|||||||
), verbose_name=_('Content')
|
), verbose_name=_('Content')
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = DocumentPageOCRContentManager()
|
objects = DocumentVesionPageOCRContentManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('Document version page OCR content')
|
verbose_name = _('Document version page OCR content')
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ class NewVersionForm(forms.Form):
|
|||||||
required=False,
|
required=False,
|
||||||
widget=forms.widgets.Textarea(attrs={'rows': 4}),
|
widget=forms.widgets.Textarea(attrs={'rows': 4}),
|
||||||
)
|
)
|
||||||
|
self.fields['append_pages'] = forms.BooleanField(
|
||||||
|
initial=False, label=_('Append pages?'),
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class UploadBaseForm(forms.Form):
|
class UploadBaseForm(forms.Form):
|
||||||
|
|||||||
@@ -362,7 +362,6 @@ class UploadInteractiveView(UploadBaseView):
|
|||||||
|
|
||||||
class UploadInteractiveVersionView(UploadBaseView):
|
class UploadInteractiveVersionView(UploadBaseView):
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
|
||||||
self.subtemplates_list = []
|
self.subtemplates_list = []
|
||||||
|
|
||||||
self.document = get_object_or_404(
|
self.document = get_object_or_404(
|
||||||
@@ -417,12 +416,17 @@ class UploadInteractiveVersionView(UploadBaseView):
|
|||||||
else:
|
else:
|
||||||
user_id = None
|
user_id = None
|
||||||
|
|
||||||
task_upload_new_version.apply_async(kwargs=dict(
|
task_upload_new_version.apply_async(
|
||||||
shared_uploaded_file_id=shared_uploaded_file.pk,
|
kwargs=dict(
|
||||||
document_id=self.document.pk,
|
append_pages=forms['document_form'].cleaned_data.get(
|
||||||
user_id=user_id,
|
'append_pages', False
|
||||||
comment=forms['document_form'].cleaned_data.get('comment')
|
),
|
||||||
))
|
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(
|
messages.success(
|
||||||
message=_(
|
message=_(
|
||||||
|
|||||||
Reference in New Issue
Block a user