[IMP] account_bank_statement_import_split: black, isort, prettier

This commit is contained in:
Alexey Pelykh
2021-09-23 11:51:25 +02:00
parent 255022ecb2
commit d94e9040a5
6 changed files with 304 additions and 289 deletions

View File

@@ -1,54 +1,57 @@
# Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
from dateutil.relativedelta import relativedelta, MO
from decimal import Decimal
from dateutil.relativedelta import MO, relativedelta
from odoo import api, fields, models
class AccountBankStatementImport(models.TransientModel):
_inherit = 'account.bank.statement.import'
_inherit = "account.bank.statement.import"
import_mode = fields.Selection(
selection=[
('single', 'Single statement'),
('daily', 'Daily statements'),
('weekly', 'Weekly statements'),
('monthly', 'Monthly statements'),
("single", "Single statement"),
("daily", "Daily statements"),
("weekly", "Weekly statements"),
("monthly", "Monthly statements"),
],
default='single',
default="single",
)
def _complete_stmts_vals(self, stmts_vals, journal, account_number):
stmts_vals = super()._complete_stmts_vals(
stmts_vals,
journal,
account_number
)
if not self.import_mode or self.import_mode == 'single':
stmts_vals = super()._complete_stmts_vals(stmts_vals, journal, account_number)
if not self.import_mode or self.import_mode == "single":
return stmts_vals
statements = []
for st_vals in stmts_vals:
transactions = list(sorted(
map(
lambda transaction: self._prepare_transaction(
transaction
transactions = list(
sorted(
map(
lambda transaction: self._prepare_transaction(transaction),
st_vals["transactions"],
),
st_vals['transactions']
),
key=lambda transaction: transaction['date']
))
key=lambda transaction: transaction["date"],
)
)
if not transactions:
continue
del st_vals['transactions']
del st_vals["transactions"]
balance_start = Decimal(st_vals['balance_start']) \
if 'balance_start' in st_vals else None
balance_end = Decimal(st_vals['balance_end_real']) \
if 'balance_end_real' in st_vals else None
balance_start = (
Decimal(st_vals["balance_start"])
if "balance_start" in st_vals
else None
)
balance_end = (
Decimal(st_vals["balance_end_real"])
if "balance_end_real" in st_vals
else None
)
statement_date_since = self._get_statement_date_since(
transactions[0]['date']
transactions[0]["date"]
)
while transactions:
statement_date_until = (
@@ -57,7 +60,7 @@ class AccountBankStatementImport(models.TransientModel):
last_transaction_index = None
for index, transaction in enumerate(transactions):
if transaction['date'] >= statement_date_until:
if transaction["date"] >= statement_date_until:
break
last_transaction_index = index
if last_transaction_index is None:
@@ -65,36 +68,34 @@ class AccountBankStatementImport(models.TransientModel):
statement_date_since = statement_date_until
continue
statement_transactions = \
transactions[0:last_transaction_index + 1]
transactions = transactions[last_transaction_index + 1:]
statement_transactions = transactions[0 : last_transaction_index + 1]
transactions = transactions[last_transaction_index + 1 :]
statement_values = dict(st_vals)
statement_values.update({
'name': self._get_statement_name(
journal,
statement_date_since,
statement_date_until,
),
'date': self._get_statement_date(
statement_date_since,
statement_date_until,
),
'transactions': statement_transactions,
})
statement_values.update(
{
"name": self._get_statement_name(
journal, statement_date_since, statement_date_until,
),
"date": self._get_statement_date(
statement_date_since, statement_date_until,
),
"transactions": statement_transactions,
}
)
if balance_start is not None:
statement_values.update({
'balance_start': float(balance_start),
})
statement_values.update(
{"balance_start": float(balance_start),}
)
for transaction in statement_transactions:
balance_start += Decimal(transaction['amount'])
balance_start += Decimal(transaction["amount"])
if balance_end is not None:
statement_balance_end = balance_end
for transaction in transactions:
statement_balance_end -= Decimal(transaction['amount'])
statement_values.update({
'balance_end_real': float(statement_balance_end),
})
statement_balance_end -= Decimal(transaction["amount"])
statement_values.update(
{"balance_end_real": float(statement_balance_end),}
)
statements.append(statement_values)
statement_date_since = statement_date_until
@@ -102,40 +103,30 @@ class AccountBankStatementImport(models.TransientModel):
@api.multi
def _prepare_transaction(self, transaction):
transaction.update({
'date': fields.Date.from_string(transaction['date']),
})
transaction.update(
{"date": fields.Date.from_string(transaction["date"]),}
)
return transaction
@api.multi
def _get_statement_date_since(self, date):
self.ensure_one()
if self.import_mode == 'daily':
if self.import_mode == "daily":
return date
elif self.import_mode == 'weekly':
elif self.import_mode == "weekly":
return date + relativedelta(weekday=MO(-1))
elif self.import_mode == 'monthly':
return date.replace(
day=1,
)
elif self.import_mode == "monthly":
return date.replace(day=1,)
@api.multi
def _get_statement_date_step(self):
self.ensure_one()
if self.import_mode == 'daily':
return relativedelta(
days=1,
)
elif self.import_mode == 'weekly':
return relativedelta(
weeks=1,
weekday=MO,
)
elif self.import_mode == 'monthly':
return relativedelta(
months=1,
day=1,
)
if self.import_mode == "daily":
return relativedelta(days=1,)
elif self.import_mode == "weekly":
return relativedelta(weeks=1, weekday=MO,)
elif self.import_mode == "monthly":
return relativedelta(months=1, day=1,)
@api.multi
def _get_statement_date(self, date_since, date_until):