mirror of
https://github.com/OCA/bank-statement-import.git
synced 2025-01-20 12:37:43 +02:00
@@ -39,22 +39,22 @@ class AccountStatementImportSheetParser(models.TransientModel):
|
|||||||
_description = "Bank Statement Import Sheet Parser"
|
_description = "Bank Statement Import Sheet Parser"
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def parse_header(self, data_file, encoding, csv_options, header_lines_skip_count=0):
|
def parse_header(self, csv_or_xlsx, mapping):
|
||||||
try:
|
if mapping.no_header:
|
||||||
workbook = xlrd.open_workbook(
|
return []
|
||||||
file_contents=data_file,
|
header_line = mapping.header_lines_skip_count
|
||||||
encoding_override=encoding if encoding else None,
|
# prevent negative indexes
|
||||||
)
|
if header_line > 0:
|
||||||
sheet = workbook.sheet_by_index(0)
|
header_line -= 1
|
||||||
values = sheet.row_values(header_lines_skip_count - 1)
|
if isinstance(csv_or_xlsx, tuple):
|
||||||
return [str(value) for value in values]
|
header = [
|
||||||
except xlrd.XLRDError:
|
str(value).strip() for value in csv_or_xlsx[1].row_values(header_line)
|
||||||
_logger.error("Pass this method")
|
]
|
||||||
|
else:
|
||||||
data = StringIO(data_file.decode(encoding or "utf-8"))
|
[next(csv_or_xlsx) for _i in range(header_line)]
|
||||||
csv_data = reader(data, **csv_options)
|
header = [value.strip() for value in next(csv_or_xlsx)]
|
||||||
csv_data_lst = list(csv_data)
|
if mapping.offset_column:
|
||||||
header = [value.strip() for value in csv_data_lst[header_lines_skip_count - 1]]
|
header = header[mapping.offset_column :]
|
||||||
return header
|
return header
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
@@ -177,19 +177,7 @@ class AccountStatementImportSheetParser(models.TransientModel):
|
|||||||
) from None
|
) from None
|
||||||
decoded_file = data_file.decode(detected_encoding)
|
decoded_file = data_file.decode(detected_encoding)
|
||||||
csv_or_xlsx = reader(StringIO(decoded_file), **csv_options)
|
csv_or_xlsx = reader(StringIO(decoded_file), **csv_options)
|
||||||
header = False
|
header = self.parse_header(csv_or_xlsx, mapping)
|
||||||
if not mapping.no_header:
|
|
||||||
header_line = mapping.header_lines_skip_count - 1
|
|
||||||
if isinstance(csv_or_xlsx, tuple):
|
|
||||||
header = [
|
|
||||||
str(value).strip()
|
|
||||||
for value in csv_or_xlsx[1].row_values(header_line)
|
|
||||||
]
|
|
||||||
else:
|
|
||||||
[next(csv_or_xlsx) for _i in range(header_line)]
|
|
||||||
header = [value.strip() for value in next(csv_or_xlsx)]
|
|
||||||
if mapping.offset_column:
|
|
||||||
header = header[mapping.offset_column :]
|
|
||||||
|
|
||||||
# NOTE no seria necesario debit_column y credit_column ya que tenemos los
|
# NOTE no seria necesario debit_column y credit_column ya que tenemos los
|
||||||
# respectivos campos related
|
# respectivos campos related
|
||||||
|
|||||||
@@ -44,6 +44,7 @@
|
|||||||
<div
|
<div
|
||||||
class="alert alert-warning"
|
class="alert alert-warning"
|
||||||
role="alert"
|
role="alert"
|
||||||
|
colspan="2"
|
||||||
attrs="{'invisible': [('no_header', '=', False)]}"
|
attrs="{'invisible': [('no_header', '=', False)]}"
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
|
|||||||
Reference in New Issue
Block a user