diff --git a/account_bank_statement_import_paypal/README.rst b/account_bank_statement_import_paypal/README.rst
index 45816291..211434b5 100644
--- a/account_bank_statement_import_paypal/README.rst
+++ b/account_bank_statement_import_paypal/README.rst
@@ -14,13 +14,13 @@ PayPal CSV Format Bank Statements Import
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fbank--statement--import-lightgray.png?logo=github
- :target: https://github.com/OCA/bank-statement-import/tree/12.0/account_bank_statement_import_paypal
+ :target: https://github.com/OCA/bank-statement-import/tree/13.0/account_bank_statement_import_paypal
:alt: OCA/bank-statement-import
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/bank-statement-import-12-0/bank-statement-import-12-0-account_bank_statement_import_paypal
+ :target: https://translation.odoo-community.org/projects/bank-statement-import-13-0/bank-statement-import-13-0-account_bank_statement_import_paypal
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/174/12.0
+ :target: https://runbot.odoo-community.org/runbot/174/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -46,8 +46,8 @@ Usage
To import statements from PayPal via Statement report:
-#. Go to `PayPal `__
-#. Open *Reports > Statements* and select *Monthly* or *Custom*
+#. Go to `PayPal `__
+#. Open *Statements* and select *Monthly* or *Custom*
#. Select date range of interest and click *Request* under *CSV* column
#. Wait for statement report to be generated
#. Download it and save to a file
@@ -55,8 +55,8 @@ To import statements from PayPal via Statement report:
To import statements from PayPal via Activity report:
-#. Go to `PayPal `__
-#. Open *Reports > Activity download*
+#. Go to `PayPal `__
+#. Open *Activity download*
#. Set *Transaction type* to *Balance affecting*
#. Set *Format* to *CSV*
#. Select date range of interest and click *Create report*
@@ -81,7 +81,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -103,6 +103,7 @@ Contributors
* Vicent Cubells
* Victor M.M. Torres
+ * Carlos Roca
* Alexey Pelykh
@@ -119,6 +120,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/bank-statement-import `_ project on GitHub.
+This module is part of the `OCA/bank-statement-import `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/account_bank_statement_import_paypal/__manifest__.py b/account_bank_statement_import_paypal/__manifest__.py
index 450f8dc8..e43b7352 100644
--- a/account_bank_statement_import_paypal/__manifest__.py
+++ b/account_bank_statement_import_paypal/__manifest__.py
@@ -6,7 +6,7 @@
{
"name": "PayPal CSV Format Bank Statements Import",
"summary": "Import PayPal CSV files as Bank Statements in Odoo",
- "version": "12.0.2.2.1",
+ "version": "13.0.1.0.0",
"category": "Accounting",
"website": "https://github.com/OCA/bank-statement-import",
"author": "Akretion, " "Brainbean Apps, " "Odoo Community Association (OCA)",
diff --git a/account_bank_statement_import_paypal/migrations/12.0.2.0.0/post-migration.py b/account_bank_statement_import_paypal/migrations/12.0.2.0.0/post-migration.py
deleted file mode 100644
index 06b08f5c..00000000
--- a/account_bank_statement_import_paypal/migrations/12.0.2.0.0/post-migration.py
+++ /dev/null
@@ -1,103 +0,0 @@
-# Copyright 2020 Brainbean Apps (https://brainbeanapps.com)
-# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
-
-from openupgradelib import openupgrade
-
-
-@openupgrade.migrate()
-def migrate(env, version):
- openupgrade.logged_query(
- env.cr,
- """
-WITH _mappings AS (
- SELECT
- m.id,
- l.field_to_assign,
- l.name,
- l.date_format
- FROM
- account_bank_statement_import_paypal_map AS m
- RIGHT OUTER JOIN (
- SELECT
- *,
- ROW_NUMBER() OVER (
- PARTITION BY map_parent_id, field_to_assign
- ORDER BY id ASC
- ) AS row_number
- FROM account_bank_statement_import_paypal_map_line
- WHERE field_to_assign IS NOT NULL
- ) AS l ON m.id = l.map_parent_id AND l.row_number = 1
-)
-
-INSERT INTO account_bank_statement_import_paypal_mapping (
- name,
- float_thousands_sep,
- float_decimal_sep,
- date_format,
- time_format,
- date_column,
- time_column,
- tz_column,
- name_column,
- currency_column,
- gross_column,
- fee_column,
- balance_column,
- transaction_id_column,
- description_column,
- from_email_address_column,
- invoice_id_column,
- bank_name_column,
- bank_account_column
-)
-SELECT
- m.name,
- m.float_thousands_sep,
- m.float_decimal_sep,
- COALESCE(_date.date_format, '%m/%d/%Y') AS date_format,
- '%H:%M:%S' AS time_format,
- COALESCE(_date.name, 'Date') AS date_column,
- COALESCE(_time.name, 'Time') AS time_column,
- 'Time Zone' AS tz_column,
- COALESCE(_name.name, 'Name') AS name_column,
- COALESCE(_currency.name, 'Currency') AS currency_column,
- COALESCE(_gross.name, 'Gross') AS gross_column,
- COALESCE(_fee.name, 'Fee') AS fee_column,
- COALESCE(_balance.name, 'Balance') AS balance_column,
- COALESCE(_tid.name, 'Transaction ID') AS transaction_id_column,
- COALESCE(_description.name, 'Description') AS description_column,
- COALESCE(_from_email.name, 'From Email Address')
- AS from_email_address_column,
- COALESCE(_invoice.name, 'Invoice ID') AS invoice_id_column,
- COALESCE(_bank_name.name, 'Bank Name') AS bank_name_column,
- COALESCE(_bank_acc.name, 'Bank Account') AS bank_account_column
-FROM
- account_bank_statement_import_paypal_map AS m
-LEFT JOIN _mappings AS _date
- ON m.id = _date.id AND _date.field_to_assign = 'date'
-LEFT JOIN _mappings AS _time
- ON m.id = _time.id AND _time.field_to_assign = 'time'
-LEFT JOIN _mappings AS _name
- ON m.id = _name.id AND _name.field_to_assign = 'partner_name'
-LEFT JOIN _mappings AS _currency
- ON m.id = _currency.id AND _currency.field_to_assign = 'currency'
-LEFT JOIN _mappings AS _gross
- ON m.id = _gross.id AND _gross.field_to_assign = 'amount'
-LEFT JOIN _mappings AS _fee
- ON m.id = _fee.id AND _fee.field_to_assign = 'commission'
-LEFT JOIN _mappings AS _balance
- ON m.id = _balance.id AND _balance.field_to_assign = 'balance'
-LEFT JOIN _mappings AS _tid
- ON m.id = _tid.id AND _tid.field_to_assign = 'transaction_id'
-LEFT JOIN _mappings AS _description
- ON m.id = _description.id AND _description.field_to_assign = 'description'
-LEFT JOIN _mappings AS _from_email
- ON m.id = _from_email.id AND _from_email.field_to_assign = 'email'
-LEFT JOIN _mappings AS _invoice
- ON m.id = _invoice.id AND _invoice.field_to_assign = 'invoice_number'
-LEFT JOIN _mappings AS _bank_name
- ON m.id = _bank_name.id AND _bank_name.field_to_assign = 'bank_name'
-LEFT JOIN _mappings AS _bank_acc
- ON m.id = _bank_acc.id AND _bank_acc.field_to_assign = 'bank_account';
- """,
- )
diff --git a/account_bank_statement_import_paypal/models/account_bank_statement_import.py b/account_bank_statement_import_paypal/models/account_bank_statement_import.py
index d41d1da8..148d395e 100644
--- a/account_bank_statement_import_paypal/models/account_bank_statement_import.py
+++ b/account_bank_statement_import_paypal/models/account_bank_statement_import.py
@@ -5,7 +5,7 @@
import logging
-from odoo import api, fields, models
+from odoo import fields, models
_logger = logging.getLogger(__name__)
@@ -18,12 +18,13 @@ class AccountBankStatementImport(models.TransientModel):
comodel_name="account.bank.statement.import.paypal.mapping",
)
- @api.multi
def _parse_file(self, data_file):
self.ensure_one()
try:
Parser = self.env["account.bank.statement.import.paypal.parser"]
- return Parser.parse(self.paypal_mapping_id, data_file, self.filename)
+ return Parser.parse(
+ self.paypal_mapping_id, data_file, self.attachment_ids[:1].name
+ )
except Exception:
if self.env.context.get("account_bank_statement_import_paypal_test"):
raise
diff --git a/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_mapping.py b/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_mapping.py
index 431cf58f..6da1bb38 100644
--- a/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_mapping.py
+++ b/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_mapping.py
@@ -59,7 +59,6 @@ class AccountBankStatementImportPayPalMapping(models.Model):
elif "comma" == self.float_thousands_sep == self.float_decimal_sep:
self.float_thousands_sep = "dot"
- @api.multi
def _get_float_separators(self):
self.ensure_one()
separators = {
diff --git a/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_parser.py b/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_parser.py
index 8226e525..5731c97f 100644
--- a/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_parser.py
+++ b/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_parser.py
@@ -70,136 +70,107 @@ class AccountBankStatementImportPayPalParser(models.TransientModel):
],
)
+ def _data_dict_constructor(self, mapping, header):
+ list_of_content = [
+ "date_column",
+ "time_column",
+ "tz_column",
+ "name_column",
+ "currency_column",
+ "gross_column",
+ "fee_column",
+ "balance_column",
+ "transaction_id_column",
+ "description_column",
+ "type_column",
+ "from_email_address_column",
+ "to_email_address_column",
+ "invoice_id_column",
+ "subject_column",
+ "note_column",
+ "bank_name_column",
+ "bank_account_column",
+ ]
+ data_dict = {}
+ for key in list_of_content:
+ try:
+ data_dict[key] = header.index(getattr(mapping, key))
+ except ValueError:
+ data_dict[key] = None
+ return data_dict
+
def _parse_lines(self, mapping, data_file, currency_code):
data = StringIO(data_file.decode("utf-8-sig"))
csv_data = reader(data)
header = list(next(csv_data))
- date_column = header.index(mapping.date_column)
- time_column = header.index(mapping.time_column)
- tz_column = header.index(mapping.tz_column)
- name_column = header.index(mapping.name_column)
- currency_column = header.index(mapping.currency_column)
- gross_column = header.index(mapping.gross_column)
- fee_column = header.index(mapping.fee_column)
- balance_column = header.index(mapping.balance_column)
- transaction_id_column = header.index(mapping.transaction_id_column)
- try:
- description_column = header.index(mapping.description_column)
- except ValueError:
- description_column = None
- try:
- type_column = header.index(mapping.type_column)
- except ValueError:
- type_column = None
- try:
- from_email_address_column = header.index(mapping.from_email_address_column)
- except ValueError:
- from_email_address_column = None
- try:
- to_email_address_column = header.index(mapping.to_email_address_column)
- except ValueError:
- to_email_address_column = None
- try:
- invoice_id_column = header.index(mapping.invoice_id_column)
- except ValueError:
- invoice_id_column = None
- try:
- subject_column = header.index(mapping.subject_column)
- except ValueError:
- subject_column = None
- try:
- note_column = header.index(mapping.note_column)
- except ValueError:
- note_column = None
- try:
- bank_name_column = header.index(mapping.bank_name_column)
- except ValueError:
- bank_name_column = None
- try:
- bank_account_column = header.index(mapping.bank_account_column)
- except ValueError:
- bank_account_column = None
+ data_dict = self._data_dict_constructor(mapping, header)
+ return self._calculate_lines(csv_data, data_dict, mapping, currency_code)
+
+ def _calculate_lines(self, csv_data, data_dict, mapping, currency_code):
lines = []
for row in csv_data:
row = list(row)
- date_value = row[date_column]
- time_value = row[time_column]
- tz_value = row[tz_column]
- name_value = row[name_column]
- currency_value = row[currency_column]
- gross_value = row[gross_column]
- fee_value = row[fee_column]
- balance_value = row[balance_column]
- transaction_id_value = row[transaction_id_column]
- description_value = (
- row[description_column] if description_column is not None else None
- )
- type_value = row[type_column] if type_column is not None else None
- from_email_address_value = (
- row[from_email_address_column]
- if from_email_address_column is not None
- else None
- )
- to_email_address_value = (
- row[to_email_address_column]
- if to_email_address_column is not None
- else None
- )
- invoice_id_value = (
- row[invoice_id_column] if invoice_id_column is not None else None
- )
- subject_value = row[subject_column] if subject_column is not None else None
- note_value = row[note_column] if note_column is not None else None
- bank_name_value = (
- row[bank_name_column] if bank_name_column is not None else None
- )
- bank_account_value = (
- row[bank_account_column] if bank_account_column is not None else None
- )
-
- if currency_value != currency_code:
+ dict_values = {}
+ for key in data_dict:
+ dict_values[key] = (
+ row[data_dict.get(key)] if data_dict.get(key) is not None else None
+ )
+ if dict_values.get("currency_column") != currency_code:
continue
- date = datetime.strptime(date_value, mapping.date_format).date()
- time = datetime.strptime(time_value, mapping.time_format).time()
+ date = datetime.strptime(
+ dict_values.get("date_column"), mapping.date_format
+ ).date()
+ time = datetime.strptime(
+ dict_values.get("time_column"), mapping.time_format
+ ).time()
timestamp = datetime.combine(date, time)
- tz_value = self._normalize_tz(tz_value)
+ tz_value = self._normalize_tz(dict_values.get("tz_column"))
tz = timezone(tz_value)
timestamp = timestamp.replace(tzinfo=tz)
timestamp = timestamp.astimezone(utc).replace(tzinfo=None)
- gross_amount = self._parse_decimal(gross_value, mapping)
- fee_amount = self._parse_decimal(fee_value, mapping)
- balance_amount = self._parse_decimal(balance_value, mapping)
+ gross_amount = self._parse_decimal(dict_values.get("gross_column"), mapping)
+ fee_amount = self._parse_decimal(dict_values.get("fee_column"), mapping)
+ balance_amount = self._parse_decimal(
+ dict_values.get("balance_column"), mapping
+ )
bank = (
- "{} - {}".format(bank_name_value, bank_account_value)
- if bank_name_value and bank_account_value
+ "{} - {}".format(
+ dict_values.get("bank_name_column"),
+ dict_values.get("bank_account_column"),
+ )
+ if dict_values.get("bank_name_column")
+ and dict_values.get("bank_account_column")
else None
)
- if to_email_address_column is None:
- payer_email = from_email_address_value
+ if data_dict.get("to_email_address_column") is None:
+ payer_email = dict_values.get("from_email_address_column")
else:
payer_email = (
- to_email_address_value
+ dict_values.get("to_email_address_column")
if gross_amount < 0.0
- else from_email_address_value
+ else dict_values.get("from_email_address_column")
)
lines.append(
{
- "transaction_id": transaction_id_value,
- "invoice": invoice_id_value,
- "description": description_value or type_value,
- "details": subject_value or note_value or bank,
+ "transaction_id": dict_values.get("transaction_id_column"),
+ "invoice": dict_values.get("invoice_id_column"),
+ "description": dict_values.get("description_column")
+ or dict_values.get("type_column"),
+ "details": dict_values.get("subject_column")
+ or dict_values.get("note_column")
+ or bank,
"timestamp": timestamp,
"gross_amount": gross_amount,
"fee_amount": fee_amount,
"balance_amount": balance_amount,
- "payer_name": name_value,
+ "payer_name": dict_values.get("name_column"),
"payer_email": payer_email,
- "partner_bank_name": bank_name_value,
- "partner_bank_account": bank_account_value,
+ "partner_bank_name": dict_values.get("bank_name_column"),
+ "partner_bank_account": dict_values.get("bank_account_column"),
}
)
return lines
diff --git a/account_bank_statement_import_paypal/readme/CONTRIBUTORS.rst b/account_bank_statement_import_paypal/readme/CONTRIBUTORS.rst
index c85a59ac..9a72e9eb 100644
--- a/account_bank_statement_import_paypal/readme/CONTRIBUTORS.rst
+++ b/account_bank_statement_import_paypal/readme/CONTRIBUTORS.rst
@@ -4,5 +4,6 @@
* Vicent Cubells
* Victor M.M. Torres
+ * Carlos Roca
* Alexey Pelykh
diff --git a/account_bank_statement_import_paypal/readme/USAGE.rst b/account_bank_statement_import_paypal/readme/USAGE.rst
index 0e2851c2..e33079a6 100644
--- a/account_bank_statement_import_paypal/readme/USAGE.rst
+++ b/account_bank_statement_import_paypal/readme/USAGE.rst
@@ -1,7 +1,7 @@
To import statements from PayPal via Statement report:
-#. Go to `PayPal `__
-#. Open *Reports > Statements* and select *Monthly* or *Custom*
+#. Go to `PayPal `__
+#. Open *Statements* and select *Monthly* or *Custom*
#. Select date range of interest and click *Request* under *CSV* column
#. Wait for statement report to be generated
#. Download it and save to a file
@@ -9,8 +9,8 @@ To import statements from PayPal via Statement report:
To import statements from PayPal via Activity report:
-#. Go to `PayPal `__
-#. Open *Reports > Activity download*
+#. Go to `PayPal `__
+#. Open *Activity download*
#. Set *Transaction type* to *Balance affecting*
#. Set *Format* to *CSV*
#. Select date range of interest and click *Create report*
diff --git a/account_bank_statement_import_paypal/static/description/index.html b/account_bank_statement_import_paypal/static/description/index.html
index b782159f..a3179d9c 100644
--- a/account_bank_statement_import_paypal/static/description/index.html
+++ b/account_bank_statement_import_paypal/static/description/index.html
@@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module allows you to import the PayPal CSV files in Odoo as bank
statements.
Table of contents
@@ -400,8 +400,8 @@ statements.
To import statements from PayPal via Statement report:
-- Go to PayPal
-- Open Reports > Statements and select Monthly or Custom
+- Go to PayPal
+- Open Statements and select Monthly or Custom
- Select date range of interest and click Request under CSV column
- Wait for statement report to be generated
- Download it and save to a file
@@ -409,8 +409,8 @@ statements.
To import statements from PayPal via Activity report:
-- Go to PayPal
-- Open Reports > Activity download
+- Go to PayPal
+- Open Activity download
- Set Transaction type to Balance affecting
- Set Format to CSV
- Select date range of interest and click Create report
@@ -436,7 +436,7 @@ statements.
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
diff --git a/account_bank_statement_import_paypal/tests/test_account_bank_statement_import_paypal.py b/account_bank_statement_import_paypal/tests/test_account_bank_statement_import_paypal.py
index 5d4e4601..d5da15ae 100644
--- a/account_bank_statement_import_paypal/tests/test_account_bank_statement_import_paypal.py
+++ b/account_bank_statement_import_paypal/tests/test_account_bank_statement_import_paypal.py
@@ -53,8 +53,16 @@ class TestAccountBankStatementImportPayPal(common.TransactionCase):
{"journal_id": journal.id}
).create(
{
- "filename": "fixtures/statement_en.csv",
- "data_file": self._data_file("fixtures/statement_en.csv"),
+ "attachment_ids": [
+ (
+ 0,
+ 0,
+ {
+ "name": "fixtures/statement_en.csv",
+ "datas": self._data_file("fixtures/statement_en.csv"),
+ },
+ )
+ ],
"paypal_mapping_id": self.paypal_statement_map_en.id,
}
)
@@ -81,8 +89,16 @@ class TestAccountBankStatementImportPayPal(common.TransactionCase):
{"journal_id": journal.id}
).create(
{
- "filename": "fixtures/statement_en.csv",
- "data_file": self._data_file("fixtures/statement_en.csv"),
+ "attachment_ids": [
+ (
+ 0,
+ 0,
+ {
+ "name": "fixtures/statement_en.csv",
+ "datas": self._data_file("fixtures/statement_en.csv"),
+ },
+ )
+ ],
"paypal_mapping_id": self.paypal_statement_map_en.id,
}
)
@@ -109,8 +125,16 @@ class TestAccountBankStatementImportPayPal(common.TransactionCase):
{"journal_id": journal.id}
).create(
{
- "filename": "fixtures/statement_es.csv",
- "data_file": self._data_file("fixtures/statement_es.csv"),
+ "attachment_ids": [
+ (
+ 0,
+ 0,
+ {
+ "name": "fixtures/statement_es.csv",
+ "datas": self._data_file("fixtures/statement_es.csv"),
+ },
+ )
+ ],
"paypal_mapping_id": self.paypal_statement_map_es.id,
}
)
@@ -137,8 +161,16 @@ class TestAccountBankStatementImportPayPal(common.TransactionCase):
{"journal_id": journal.id}
).create(
{
- "filename": "fixtures/activity_en.csv",
- "data_file": self._data_file("fixtures/activity_en.csv"),
+ "attachment_ids": [
+ (
+ 0,
+ 0,
+ {
+ "name": "fixtures/activity_en.csv",
+ "datas": self._data_file("fixtures/activity_en.csv"),
+ },
+ )
+ ],
"paypal_mapping_id": self.paypal_activity_map_en.id,
}
)
@@ -165,8 +197,16 @@ class TestAccountBankStatementImportPayPal(common.TransactionCase):
{"journal_id": journal.id}
).create(
{
- "filename": "fixtures/empty_activity.csv",
- "data_file": self._data_file("fixtures/empty_activity.csv"),
+ "attachment_ids": [
+ (
+ 0,
+ 0,
+ {
+ "name": "fixtures/empty_activity.csv",
+ "datas": self._data_file("fixtures/empty_activity.csv"),
+ },
+ )
+ ],
"paypal_mapping_id": self.paypal_activity_map_en.id,
}
)
diff --git a/account_bank_statement_import_paypal/views/account_bank_statement_import_paypal_mapping.xml b/account_bank_statement_import_paypal/views/account_bank_statement_import_paypal_mapping.xml
index 38c4f758..14ceae1f 100644
--- a/account_bank_statement_import_paypal/views/account_bank_statement_import_paypal_mapping.xml
+++ b/account_bank_statement_import_paypal/views/account_bank_statement_import_paypal_mapping.xml
@@ -66,7 +66,6 @@
>
PayPal Report Mappings
account.bank.statement.import.paypal.mapping
- form
tree,form
diff --git a/setup/account_bank_statement_import_paypal/odoo/addons/account_bank_statement_import_paypal b/setup/account_bank_statement_import_paypal/odoo/addons/account_bank_statement_import_paypal
new file mode 120000
index 00000000..e7cb2385
--- /dev/null
+++ b/setup/account_bank_statement_import_paypal/odoo/addons/account_bank_statement_import_paypal
@@ -0,0 +1 @@
+../../../../account_bank_statement_import_paypal
\ No newline at end of file
diff --git a/setup/account_bank_statement_import_paypal/setup.py b/setup/account_bank_statement_import_paypal/setup.py
new file mode 100644
index 00000000..28c57bb6
--- /dev/null
+++ b/setup/account_bank_statement_import_paypal/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)