[MIG] account_bank_statement_import_online: Backport to 11.0

This commit is contained in:
Alexey Pelykh
2020-04-25 08:15:54 +02:00
parent 07fc79e7be
commit 95f7427a89
7 changed files with 65 additions and 70 deletions

View File

@@ -4,7 +4,7 @@
{
'name': 'Online Bank Statements',
'version': '12.0.1.4.1',
'version': '11.0.1.0.0',
'author':
'Brainbean Apps, '
'Dataplug, '

View File

@@ -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()

View File

@@ -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.')

View File

@@ -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(

View File

@@ -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')

View File

@@ -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>

View File

@@ -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'}