56 lines
2.1 KiB
Python
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
|