From 84c1823fa1e962b20bcf105e912e50d6ffbedfc2 Mon Sep 17 00:00:00 2001 From: Jordi Ballester Alomar Date: Sun, 18 Dec 2022 14:29:39 +0100 Subject: [PATCH] [IMP] account_statement_import_txt_xlsx: add tests --- .../account_statement_import_sheet_parser.py | 30 +++++++----- .../fixtures/original_currency_no_header.csv | 1 + .../test_account_statement_import_txt_xlsx.py | 49 +++++++++++++++++++ 3 files changed, 69 insertions(+), 11 deletions(-) create mode 100644 account_statement_import_txt_xlsx/tests/fixtures/original_currency_no_header.csv diff --git a/account_statement_import_txt_xlsx/models/account_statement_import_sheet_parser.py b/account_statement_import_txt_xlsx/models/account_statement_import_sheet_parser.py index 19b59f8c..4d480378 100644 --- a/account_statement_import_txt_xlsx/models/account_statement_import_sheet_parser.py +++ b/account_statement_import_txt_xlsx/models/account_statement_import_sheet_parser.py @@ -102,11 +102,15 @@ class AccountStatementImportSheetParser(models.TransientModel): else: column_names_or_indexes = [mapping[column_name]] for column_name_or_index in column_names_or_indexes: + if not column_name_or_index: + continue + column_index = None if mapping.no_header: - column_index = ( - column_name_or_index and int(column_name_or_index) or None - ) - if column_index: + try: + column_index = int(column_name_or_index) + except Exception: + pass + if column_index is not None: column_indexes.append(column_index) else: if column_name_or_index: @@ -164,10 +168,12 @@ class AccountStatementImportSheetParser(models.TransientModel): ) decoded_file = data_file.decode(detected_encoding) csv_or_xlsx = reader(StringIO(decoded_file), **csv_options) - if isinstance(csv_or_xlsx, tuple): - header = [str(value) for value in csv_or_xlsx[1].row_values(0)] - else: - header = [value.strip() for value in next(csv_or_xlsx)] + header = False + if not mapping.no_header: + if isinstance(csv_or_xlsx, tuple): + header = [str(value) for value in csv_or_xlsx[1].row_values(0)] + else: + header = [value.strip() for value in next(csv_or_xlsx)] for column_name in self._get_column_names(): columns[column_name] = self._get_column_indexes( header, column_name, mapping @@ -179,10 +185,12 @@ class AccountStatementImportSheetParser(models.TransientModel): content_l = [] max_index = len(values) - 1 for index in indexes: - if isinstance(index, int) and index <= max_index: - content_l.append(values[index]) + if isinstance(index, int): + if index <= max_index: + content_l.append(values[index]) else: - content_l.append(values[index]) + if index in values: + content_l.append(values[index]) if all(isinstance(content, str) for content in content_l): return " ".join(content_l) return content_l[0] diff --git a/account_statement_import_txt_xlsx/tests/fixtures/original_currency_no_header.csv b/account_statement_import_txt_xlsx/tests/fixtures/original_currency_no_header.csv new file mode 100644 index 00000000..4e91582f --- /dev/null +++ b/account_statement_import_txt_xlsx/tests/fixtures/original_currency_no_header.csv @@ -0,0 +1 @@ +"12/15/2018","Your payment","EUR","1,525.00","-1,000.00","Azure Interior","","INV0001" diff --git a/account_statement_import_txt_xlsx/tests/test_account_statement_import_txt_xlsx.py b/account_statement_import_txt_xlsx/tests/test_account_statement_import_txt_xlsx.py index f9586125..ca8b6f11 100644 --- a/account_statement_import_txt_xlsx/tests/test_account_statement_import_txt_xlsx.py +++ b/account_statement_import_txt_xlsx/tests/test_account_statement_import_txt_xlsx.py @@ -224,6 +224,55 @@ class TestAccountBankStatementImportTxtXlsx(common.TransactionCase): self.assertEqual(line.foreign_currency_id, self.currency_eur) self.assertEqual(line.amount_currency, 1000.0) + def test_original_currency_no_header(self): + no_header_statement_map = self.AccountStatementImportSheetMapping.create( + { + "name": "Sample Statement", + "float_thousands_sep": "comma", + "float_decimal_sep": "dot", + "delimiter": "comma", + "quotechar": '"', + "timestamp_format": "%m/%d/%Y", + "no_header": True, + "timestamp_column": "0", + "amount_column": "3", + "original_currency_column": "2", + "original_amount_column": "4", + "description_column": "1,7", + "partner_name_column": "5", + "bank_account_column": "6", + } + ) + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "currency_id": self.currency_usd.id, + "suspense_account_id": self.suspense_account.id, + } + ) + data = self._data_file("fixtures/original_currency_no_header.csv", "utf-8") + wizard = self.AccountStatementImport.with_context(journal_id=journal.id).create( + { + "statement_filename": "fixtures/original_currency.csv", + "statement_file": data, + "sheet_mapping_id": no_header_statement_map.id, + } + ) + wizard.with_context( + account_statement_import_txt_xlsx_test=True + ).import_file_button() + statement = self.AccountBankStatement.search([("journal_id", "=", journal.id)]) + self.assertEqual(len(statement), 1) + self.assertEqual(len(statement.line_ids), 1) + + line = statement.line_ids + self.assertEqual(line.currency_id, self.currency_usd) + self.assertEqual(line.foreign_currency_id, self.currency_eur) + self.assertEqual(line.amount_currency, 1000.0) + self.assertEqual(line.payment_ref, "Your payment INV0001") + def test_original_currency_empty(self): journal = self.AccountJournal.create( {