Files
enterprise-addons/account_bank_statement_extract/models/account_bank_statement.py
T

69 lines
2.8 KiB
Python

from odoo import api, models, Command, _
from odoo.addons.iap.tools import iap_tools
OCR_VERSION = 100
class AccountBankStatement(models.Model):
_name = 'account.bank.statement'
_inherit = ['extract.mixin.with.words', 'account.bank.statement']
@api.depends('line_ids')
def _compute_is_in_extractable_state(self):
self.is_in_extractable_state = not self.line_ids
def _compute_journal_id(self):
if self.line_ids:
super()._compute_journal_id()
def _get_ocr_option_can_extract(self):
ocr_option = self.env.company.extract_bank_statement_digitalization_mode
return ocr_option and ocr_option != 'no_send'
def _get_ocr_module_name(self):
return 'account_bank_statement_extract'
def _get_user_infos(self):
user_infos = super()._get_user_infos()
user_infos['journal_type'] = self.journal_id.type
return user_infos
def _contact_iap_extract(self, pathinfo, params):
params['version'] = OCR_VERSION
params['account_token'] = self._get_iap_account().sudo().account_token
endpoint = self.env['ir.config_parameter'].sudo().get_param('iap_extract_endpoint', 'https://extract.api.odoo.com')
return iap_tools.iap_jsonrpc(endpoint + '/api/extract/bank_statement/1/' + pathinfo, params=params)
def _fill_document_with_results(self, ocr_results):
self.ensure_one()
balance_start_ocr = self._get_ocr_selected_value(ocr_results, 'balance_start', 0.0)
balance_end_ocr = self._get_ocr_selected_value(ocr_results, 'balance_end', 0.0)
date_ocr = self._get_ocr_selected_value(ocr_results, 'date', "")
lines_ocr = ocr_results.get('bank_statement_lines', [])
self.balance_start = balance_start_ocr
self.balance_end = balance_end_ocr
self.date = date_ocr
self._compute_name()
self.with_context(auto_statement_processing=True).line_ids = [Command.create({
'amount': line['amount'],
'date': line['date'],
'journal_id': self.journal_id.id,
'payment_ref': line['description'],
}) for line in lines_ocr]
odoobot = self.env.ref('base.partner_root')
self.message_post(
body=_("Statement and transactions have been updated using Artificial Intelligence."),
author_id=odoobot.id
)
def _message_set_main_attachment_id(self, attachments, force=False, filter_xml=True):
res = super()._message_set_main_attachment_id(attachments, force=force, filter_xml=filter_xml)
self._autosend_for_digitization()
return res
def _autosend_for_digitization(self):
if self.env.company.extract_bank_statement_digitalization_mode == 'auto_send':
self.filtered('extract_can_show_send_button')._send_batch_for_digitization()