[IMP] account_statement_import_online: add option to enable or disable statement creation.

Starting from Odoo 16, bank statements are optional. This commit introduces the option to create statements automatically or skip their creation.
This commit is contained in:
Carlos Lopez
2024-12-30 10:26:13 -05:00
parent e383389681
commit 44cf0c5349
3 changed files with 31 additions and 3 deletions

View File

@@ -26,6 +26,10 @@ class OnlineBankStatementProvider(models.Model):
company_id = fields.Many2one(related="journal_id.company_id", store=True)
active = fields.Boolean(default=True)
create_statement = fields.Boolean(
default=True,
help="Create statements for the downloaded transactions automatically or not.",
)
name = fields.Char(compute="_compute_name", store=True)
journal_id = fields.Many2one(
comodel_name="account.journal",
@@ -76,11 +80,12 @@ class OnlineBankStatementProvider(models.Model):
)
statement_creation_mode = fields.Selection(
selection=[
("daily", "Daily statements"),
("weekly", "Weekly statements"),
("monthly", "Monthly statements"),
("daily", "Day"),
("weekly", "Week"),
("monthly", "Month"),
],
default="daily",
string="Transactions interval to obtain",
required=True,
)
api_base = fields.Char()
@@ -298,6 +303,8 @@ class OnlineBankStatementProvider(models.Model):
"""Final creation of statement if new, else write."""
AccountBankStatement = self.env["account.bank.statement"]
is_scheduled = self.env.context.get("scheduled")
if not self.create_statement:
return self._online_create_statement_lines(statement_values)
if is_scheduled:
AccountBankStatement = AccountBankStatement.with_context(
tracking_disable=True,
@@ -319,6 +326,17 @@ class OnlineBankStatementProvider(models.Model):
statement.write(statement_values)
return statement
def _online_create_statement_lines(self, statement_values):
AccountBankStatementLine = self.env["account.bank.statement.line"]
is_scheduled = self.env.context.get("scheduled")
if is_scheduled:
AccountBankStatementLine = AccountBankStatementLine.with_context(
tracking_disable=True,
)
lines = [line[2] for line in statement_values.get("line_ids", [])]
AccountBankStatementLine.create(lines)
return self.env["account.bank.statement"] # Return empty statement
def _get_statement_filtered_lines(
self,
unfiltered_lines,

View File

@@ -385,6 +385,15 @@ class TestAccountBankAccountStatementImportOnline(common.TransactionCase):
self.assertEqual(statements[1].balance_end, 200)
self.assertEqual(len(statements[1].line_ids), 1)
def test_dont_create_statement(self):
self.provider.statement_creation_mode = "monthly"
self.provider.create_statement = False
date_since = datetime(2024, 12, 1)
date_until = datetime(2024, 12, 31, 23, 59, 59)
self.provider.with_context(step={"days": 1})._pull(date_since, date_until)
self._getExpectedStatements(0)
self._getExpectedLines(31)
def test_unlink_provider(self):
"""Unlink provider should clear fields on journal."""
self.provider.unlink()

View File

@@ -83,6 +83,7 @@
</group>
<group name="configuration" string="Configuration">
<field name="statement_creation_mode" />
<field name="create_statement" />
<field name="tz" />
</group>
</group>