mirror of
https://github.com/OCA/bank-statement-import.git
synced 2025-01-20 12:37:43 +02:00
[MIG] account_bank_statement_import_online: Backport to 11.0
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
{
|
||||
'name': 'Online Bank Statements',
|
||||
'version': '12.0.1.4.1',
|
||||
'version': '11.0.1.0.0',
|
||||
'author':
|
||||
'Brainbean Apps, '
|
||||
'Dataplug, '
|
||||
|
||||
@@ -12,6 +12,9 @@ _logger = logging.getLogger(__name__)
|
||||
class AccountJournal(models.Model):
|
||||
_inherit = 'account.journal'
|
||||
|
||||
bank_statements_source = fields.Selection(
|
||||
selection_add=[('online', 'Online (OCA)')],
|
||||
)
|
||||
online_bank_statement_provider = fields.Selection(
|
||||
selection=lambda self: self.env[
|
||||
'account.journal'
|
||||
@@ -24,11 +27,6 @@ class AccountJournal(models.Model):
|
||||
copy=False,
|
||||
)
|
||||
|
||||
def __get_bank_statements_available_sources(self):
|
||||
result = super().__get_bank_statements_available_sources()
|
||||
result.append(('online', _('Online (OCA)')))
|
||||
return result
|
||||
|
||||
@api.model
|
||||
def _selection_online_bank_statement_provider(self):
|
||||
return self.env[
|
||||
@@ -70,7 +68,7 @@ class AccountJournal(models.Model):
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
rec = super().create(vals)
|
||||
rec = super(AccountJournal, self).create(vals)
|
||||
if 'bank_statements_source' in vals \
|
||||
or 'online_bank_statement_provider' in vals:
|
||||
rec._update_online_bank_statement_provider_id()
|
||||
@@ -78,7 +76,7 @@ class AccountJournal(models.Model):
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
res = super().write(vals)
|
||||
res = super(AccountJournal, self).write(vals)
|
||||
if 'bank_statements_source' in vals \
|
||||
or 'online_bank_statement_provider' in vals:
|
||||
self._update_online_bank_statement_provider_id()
|
||||
|
||||
@@ -11,8 +11,8 @@ from pytz import timezone, utc
|
||||
from sys import exc_info
|
||||
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.addons.base.models.res_bank import sanitize_account_number
|
||||
from odoo.addons.base.models.res_partner import _tz_get
|
||||
from odoo.addons.base.res.res_bank import sanitize_account_number
|
||||
from odoo.addons.base.res.res_partner import _tz_get
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -24,6 +24,7 @@ class OnlineBankStatementProvider(models.Model):
|
||||
|
||||
company_id = fields.Many2one(
|
||||
related='journal_id.company_id',
|
||||
readonly=True,
|
||||
store=True,
|
||||
)
|
||||
active = fields.Boolean()
|
||||
@@ -43,9 +44,11 @@ class OnlineBankStatementProvider(models.Model):
|
||||
)
|
||||
currency_id = fields.Many2one(
|
||||
related='journal_id.currency_id',
|
||||
readonly=True,
|
||||
)
|
||||
account_number = fields.Char(
|
||||
related='journal_id.bank_account_id.sanitized_acc_number'
|
||||
related='journal_id.bank_account_id.sanitized_acc_number',
|
||||
readonly=True,
|
||||
)
|
||||
tz = fields.Selection(
|
||||
selection=_tz_get,
|
||||
@@ -220,15 +223,17 @@ class OnlineBankStatementProvider(models.Model):
|
||||
statement = AccountBankStatement.search([
|
||||
('journal_id', '=', provider.journal_id.id),
|
||||
('state', '=', 'open'),
|
||||
('date', '=', statement_date),
|
||||
('date', '=', fields.Date.to_string(statement_date)),
|
||||
], limit=1)
|
||||
if not statement:
|
||||
statement_values.update({
|
||||
'name': provider.journal_id.sequence_id.with_context(
|
||||
ir_sequence_date=statement_date,
|
||||
ir_sequence_date=fields.Date.to_string(
|
||||
statement_date
|
||||
),
|
||||
).next_by_id(),
|
||||
'journal_id': provider.journal_id.id,
|
||||
'date': statement_date,
|
||||
'date': fields.Date.to_string(statement_date),
|
||||
})
|
||||
statement = AccountBankStatement.with_context(
|
||||
journal_id=provider.journal_id.id,
|
||||
@@ -269,7 +274,7 @@ class OnlineBankStatementProvider(models.Model):
|
||||
|
||||
date = date.replace(tzinfo=utc)
|
||||
date = date.astimezone(provider_tz).replace(tzinfo=None)
|
||||
line_values['date'] = date
|
||||
line_values['date'] = fields.Datetime.to_string(date)
|
||||
|
||||
unique_import_id = line_values.get('unique_import_id')
|
||||
if unique_import_id:
|
||||
@@ -315,7 +320,8 @@ class OnlineBankStatementProvider(models.Model):
|
||||
def _schedule_next_run(self):
|
||||
self.ensure_one()
|
||||
self.last_successful_run = self.next_run
|
||||
self.next_run += self._get_next_run_period()
|
||||
self.next_run = fields.Datetime.from_string(self.next_run) \
|
||||
+ self._get_next_run_period()
|
||||
|
||||
@api.multi
|
||||
def _get_statement_date_since(self, date):
|
||||
@@ -413,12 +419,13 @@ class OnlineBankStatementProvider(models.Model):
|
||||
providers.mapped('journal_id.name')
|
||||
))
|
||||
for provider in providers.with_context({'scheduled': True}):
|
||||
date_since = (
|
||||
next_run = fields.Datetime.from_string(provider.next_run)
|
||||
date_since = fields.Datetime.from_string(
|
||||
provider.last_successful_run
|
||||
) if provider.last_successful_run else (
|
||||
provider.next_run - provider._get_next_run_period()
|
||||
next_run - provider._get_next_run_period()
|
||||
)
|
||||
date_until = provider.next_run
|
||||
date_until = next_run
|
||||
provider._pull(date_since, date_until)
|
||||
|
||||
_logger.info('Scheduled pull of online bank statements complete.')
|
||||
|
||||
@@ -17,10 +17,11 @@ class OnlineBankStatementProviderDummy(models.Model):
|
||||
def _obtain_statement_data(self, date_since, date_until):
|
||||
self.ensure_one()
|
||||
if self.service != 'dummy':
|
||||
return super()._obtain_statement_data(
|
||||
date_since,
|
||||
date_until,
|
||||
) # pragma: no cover
|
||||
return super(OnlineBankStatementProviderDummy, self) \
|
||||
._obtain_statement_data(
|
||||
date_since,
|
||||
date_until,
|
||||
) # pragma: no cover
|
||||
|
||||
if self.env.context.get('crash', False):
|
||||
exception = self.env.context.get(
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Copyright 2019-2020 Dataplug (https://dataplug.io)
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from datetime import date, datetime
|
||||
from datetime import datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from psycopg2 import IntegrityError
|
||||
from urllib.error import HTTPError
|
||||
@@ -15,9 +15,9 @@ from odoo import fields
|
||||
class TestAccountBankAccountStatementImportOnline(common.TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
super(TestAccountBankAccountStatementImportOnline, self).setUp()
|
||||
|
||||
self.now = fields.Datetime.now()
|
||||
self.now = fields.Datetime.from_string(fields.Datetime.now())
|
||||
self.AccountJournal = self.env['account.journal']
|
||||
self.OnlineBankStatementProvider = self.env[
|
||||
'online.bank.statement.provider'
|
||||
@@ -34,10 +34,8 @@ class TestAccountBankAccountStatementImportOnline(common.TransactionCase):
|
||||
'type': 'bank',
|
||||
'code': 'BANK',
|
||||
})
|
||||
with common.Form(journal) as journal_form:
|
||||
journal_form.bank_statements_source = 'online'
|
||||
journal_form.online_bank_statement_provider = 'dummy'
|
||||
journal_form.save()
|
||||
journal.bank_statements_source = 'online'
|
||||
journal.online_bank_statement_provider = 'dummy'
|
||||
|
||||
with self.assertRaises(IntegrityError), mute_logger('odoo.sql_db'):
|
||||
journal.online_bank_statement_provider_id.unlink()
|
||||
@@ -48,10 +46,8 @@ class TestAccountBankAccountStatementImportOnline(common.TransactionCase):
|
||||
'type': 'bank',
|
||||
'code': 'BANK',
|
||||
})
|
||||
with common.Form(journal) as journal_form:
|
||||
journal_form.bank_statements_source = 'online'
|
||||
journal_form.online_bank_statement_provider = 'dummy'
|
||||
journal_form.save()
|
||||
journal.bank_statements_source = 'online'
|
||||
journal.online_bank_statement_provider = 'dummy'
|
||||
|
||||
self.assertTrue(journal.online_bank_statement_provider_id)
|
||||
journal.unlink()
|
||||
@@ -63,16 +59,12 @@ class TestAccountBankAccountStatementImportOnline(common.TransactionCase):
|
||||
'type': 'bank',
|
||||
'code': 'BANK',
|
||||
})
|
||||
with common.Form(journal) as journal_form:
|
||||
journal_form.bank_statements_source = 'online'
|
||||
journal_form.online_bank_statement_provider = 'dummy'
|
||||
journal_form.save()
|
||||
journal.bank_statements_source = 'online'
|
||||
journal.online_bank_statement_provider = 'dummy'
|
||||
|
||||
self.assertTrue(journal.online_bank_statement_provider_id)
|
||||
|
||||
with common.Form(journal) as journal_form:
|
||||
journal_form.bank_statements_source = 'undefined'
|
||||
journal_form.save()
|
||||
journal.bank_statements_source = 'undefined'
|
||||
|
||||
self.assertFalse(journal.online_bank_statement_provider_id)
|
||||
self.assertFalse(self.OnlineBankStatementProvider.search([]))
|
||||
@@ -512,10 +504,10 @@ class TestAccountBankAccountStatementImportOnline(common.TransactionCase):
|
||||
|
||||
lines = statement.mapped('line_ids').sorted()
|
||||
self.assertEqual(len(lines), 4)
|
||||
self.assertEqual(lines[0].date, date(2020, 4, 17))
|
||||
self.assertEqual(lines[1].date, date(2020, 4, 17))
|
||||
self.assertEqual(lines[2].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[3].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[0].date, '2020-04-17')
|
||||
self.assertEqual(lines[1].date, '2020-04-17')
|
||||
self.assertEqual(lines[2].date, '2020-04-18')
|
||||
self.assertEqual(lines[3].date, '2020-04-18')
|
||||
|
||||
def test_tz_non_utc(self):
|
||||
journal = self.AccountJournal.create({
|
||||
@@ -544,10 +536,10 @@ class TestAccountBankAccountStatementImportOnline(common.TransactionCase):
|
||||
|
||||
lines = statement.mapped('line_ids').sorted()
|
||||
self.assertEqual(len(lines), 4)
|
||||
self.assertEqual(lines[0].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[1].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[2].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[3].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[0].date, '2020-04-18')
|
||||
self.assertEqual(lines[1].date, '2020-04-18')
|
||||
self.assertEqual(lines[2].date, '2020-04-18')
|
||||
self.assertEqual(lines[3].date, '2020-04-18')
|
||||
|
||||
def test_other_tz_to_utc(self):
|
||||
journal = self.AccountJournal.create({
|
||||
@@ -577,10 +569,10 @@ class TestAccountBankAccountStatementImportOnline(common.TransactionCase):
|
||||
|
||||
lines = statement.mapped('line_ids').sorted()
|
||||
self.assertEqual(len(lines), 4)
|
||||
self.assertEqual(lines[0].date, date(2020, 4, 17))
|
||||
self.assertEqual(lines[1].date, date(2020, 4, 17))
|
||||
self.assertEqual(lines[2].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[3].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[0].date, '2020-04-17')
|
||||
self.assertEqual(lines[1].date, '2020-04-17')
|
||||
self.assertEqual(lines[2].date, '2020-04-18')
|
||||
self.assertEqual(lines[3].date, '2020-04-18')
|
||||
|
||||
def test_timestamp_date_only(self):
|
||||
journal = self.AccountJournal.create({
|
||||
@@ -608,10 +600,10 @@ class TestAccountBankAccountStatementImportOnline(common.TransactionCase):
|
||||
|
||||
lines = statement.line_ids
|
||||
self.assertEqual(len(lines), 4)
|
||||
self.assertEqual(lines[0].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[1].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[2].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[3].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[0].date, '2020-04-18')
|
||||
self.assertEqual(lines[1].date, '2020-04-18')
|
||||
self.assertEqual(lines[2].date, '2020-04-18')
|
||||
self.assertEqual(lines[3].date, '2020-04-18')
|
||||
|
||||
def test_timestamp_date_only(self):
|
||||
journal = self.AccountJournal.create({
|
||||
@@ -639,7 +631,7 @@ class TestAccountBankAccountStatementImportOnline(common.TransactionCase):
|
||||
|
||||
lines = statement.line_ids
|
||||
self.assertEqual(len(lines), 4)
|
||||
self.assertEqual(lines[0].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[1].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[2].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[3].date, date(2020, 4, 18))
|
||||
self.assertEqual(lines[0].date, '2020-04-18')
|
||||
self.assertEqual(lines[1].date, '2020-04-18')
|
||||
self.assertEqual(lines[2].date, '2020-04-18')
|
||||
self.assertEqual(lines[3].date, '2020-04-18')
|
||||
|
||||
@@ -101,14 +101,11 @@
|
||||
<field name="model">account.journal</field>
|
||||
<field name="inherit_id" ref="account_bank_statement_import.journal_dashboard_view_inherit"/>
|
||||
<field name="arch" type="xml">
|
||||
<div name="bank_statement_create_button" position="attributes">
|
||||
<attribute name="t-if">dashboard.bank_statements_source != 'online_sync' and dashboard.bank_statements_source != 'online'</attribute>
|
||||
</div>
|
||||
<xpath expr="//a[@name='create_bank_statement']" position="attributes">
|
||||
<attribute name="t-if">dashboard.bank_statements_source != 'online_sync' and dashboard.bank_statements_source != 'online'</attribute>
|
||||
<xpath expr="//div[@name='bank_cash_commands']//a[@name='create_bank_statement']" position="attributes">
|
||||
<attribute name="t-if">dashboard.bank_statements_source == 'file_import'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//a[@name='import_statement']" position="attributes">
|
||||
<attribute name="t-if">dashboard.bank_statements_source != 'online_sync' and dashboard.bank_statements_source != 'online'</attribute>
|
||||
<xpath expr="//div[@name='bank_cash_commands']/..//a[@name='import_statement']" position="attributes">
|
||||
<attribute name="t-if">dashboard.bank_statements_source == 'file_import'</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -33,7 +33,7 @@ class OnlineBankStatementPullWizard(models.TransientModel):
|
||||
self.with_context(
|
||||
active_test=False,
|
||||
).provider_ids._pull(
|
||||
self.date_since,
|
||||
self.date_until
|
||||
fields.Datetime.from_string(self.date_since),
|
||||
fields.Datetime.from_string(self.date_until)
|
||||
)
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
Reference in New Issue
Block a user