Files

56 lines
2.1 KiB
Python

from odoo import models, Command, _
from odoo.exceptions import UserError
class AccountJournal(models.Model):
_inherit = 'account.journal'
def _is_attachment_ocrizable(self, attachment):
""" Checks if the attachment is in OCRizable formats such as PDF and images."""
return (attachment.raw or b'').strip().startswith(b'%PDF') or attachment.mimetype in ['image/png', 'image/jpeg']
def _check_attachments_ocrizable(self, attachments):
all_attachments_ocrizable = True
any_attachments_ocrizable = False
for attachment in attachments:
if self._is_attachment_ocrizable(attachment):
any_attachments_ocrizable = True
else:
all_attachments_ocrizable = False
if not all_attachments_ocrizable and any_attachments_ocrizable:
break
return all_attachments_ocrizable, any_attachments_ocrizable
def _get_bank_statements_available_import_formats(self):
result = super()._get_bank_statements_available_import_formats()
result.extend(['PDF', 'JPEG', 'PNG'])
return result
def _import_bank_statement(self, attachments):
all_attachments_ocrizable, any_attachments_ocrizable = self._check_attachments_ocrizable(attachments)
if any_attachments_ocrizable and not all_attachments_ocrizable:
return UserError(_("Mixing PDF/Image files with other file types is not allowed."))
elif not all_attachments_ocrizable:
return super()._import_bank_statement(attachments)
statements = self.env['account.bank.statement'].create([
{
'journal_id': self.id,
'attachment_ids': [Command.set(attachment.ids)],
'message_main_attachment_id': attachment.id,
}
for attachment in attachments
])
statements._send_batch_for_digitization()
action = statements._get_records_action()
if len(statements) > 1:
action.update({
'name': _("Generated Bank Statements")
})
return action