[RFR] Don't unzip xlsx files

This commit is contained in:
Stefan Rijnhart
2017-02-28 11:04:17 +01:00
parent 37bd21da20
commit 287f87a997
3 changed files with 21 additions and 11 deletions

View File

@@ -53,6 +53,7 @@ class AccountBankStatementImport(models.TransientModel):
'Bank Statement File', required=True,
help='Get you bank statements in electronic format from your bank '
'and select them here.')
filename = fields.Char()
@api.multi
def import_file(self):
@@ -62,7 +63,8 @@ class AccountBankStatementImport(models.TransientModel):
data_file = base64.b64decode(self.data_file)
# pylint: disable=protected-access
statement_ids, notifications = self.with_context(
active_id=self.id # pylint: disable=no-member
active_id=self.id, # pylint: disable=no-member
filename=self.filename
)._import_file(data_file)
# dispatch to reconciliation interface
action = self.env.ref(
@@ -77,6 +79,20 @@ class AccountBankStatementImport(models.TransientModel):
'type': 'ir.actions.client',
}
@api.model
def unzip(self, data_file):
filename = self.env.context.get('filename')
if filename and filename.lower().endswith('.xlsx'):
return [data_file]
try:
with ZipFile(StringIO(data_file), 'r') as archive:
return [
archive.read(name) for name in archive.namelist()
if not name.endswith('/')
]
except BadZipfile:
return [data_file]
@api.model
def _parse_all_files(self, data_file):
"""Parse one file or multiple files from zip-file.
@@ -84,15 +100,7 @@ class AccountBankStatementImport(models.TransientModel):
Return array of statements for further processing.
"""
statements = []
files = [data_file]
try:
with ZipFile(StringIO(data_file), 'r') as archive:
files = [
archive.read(filename) for filename in archive.namelist()
if not filename.endswith('/')
]
except BadZipfile:
pass
files = self.unzip(data_file)
# Parse the file(s)
for import_file in files:
# The appropriate implementation module(s) returns the statements.

View File

@@ -95,6 +95,7 @@ class TestStatementFile(TransactionCase):
bank_statement_id = import_model.create(
dict(
data_file=statement_file,
filename=file_name,
)
)
bank_statement_id.import_file()

View File

@@ -8,7 +8,8 @@
<field name="priority">1</field>
<field name="arch" type="xml">
<form string="Import Bank Statements">
<field name="data_file"/>
<field name="data_file" filename="filename"/>
<field name="filename" invisible="1"/>
<field name="hide_journal_field" invisible="1"/>
<label for="journal_id"/>
<field name="journal_id"