From 6614330ee5c21d3d89ffe67cc02e66cfde249ab9 Mon Sep 17 00:00:00 2001 From: cubells Date: Fri, 11 Jan 2019 11:48:33 +0100 Subject: [PATCH] [IMP] account_bank_statement_import_paypal: create paypal maps --- .../README.rst | 27 +- .../__init__.py | 1 + .../__manifest__.py | 12 +- .../data/paypal_map_data.xml | 114 ++++++ .../account_bank_statement_import_paypal.pot | 295 ++++++++++++++- .../i18n/es.po | 348 ++++++++++++++++++ .../models/__init__.py | 3 +- ...ccount_bank_statement_import_paypal_map.py | 64 ++++ .../models/account_journal.py | 13 + .../readme/CONFIGURE.rst | 22 +- .../readme/DESCRIPTION.rst | 3 +- .../security/ir.model.access.csv | 3 + .../static/description/index.html | 55 ++- .../tests/__init__.py | 1 + .../tests/paypal_en.csv | 3 + .../tests/test_paypal_statement_import.py | 54 +++ .../views/account_journal_views.xml | 16 + .../views/paypal_map_views.xml | 65 ++++ .../wizards/__init__.py | 2 + .../account_bank_statement_import_paypal.py | 83 +++-- .../account_bank_statement_import_view.xml | 14 + .../wizards/create_map_lines_from_file.py | 38 ++ .../create_map_lines_from_file_views.xml | 29 ++ 23 files changed, 1167 insertions(+), 98 deletions(-) create mode 100644 account_bank_statement_import_paypal/data/paypal_map_data.xml create mode 100644 account_bank_statement_import_paypal/i18n/es.po create mode 100644 account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_map.py create mode 100644 account_bank_statement_import_paypal/models/account_journal.py create mode 100644 account_bank_statement_import_paypal/security/ir.model.access.csv create mode 100644 account_bank_statement_import_paypal/tests/__init__.py create mode 100644 account_bank_statement_import_paypal/tests/paypal_en.csv create mode 100644 account_bank_statement_import_paypal/tests/test_paypal_statement_import.py create mode 100644 account_bank_statement_import_paypal/views/account_journal_views.xml create mode 100644 account_bank_statement_import_paypal/views/paypal_map_views.xml create mode 100644 account_bank_statement_import_paypal/wizards/__init__.py rename account_bank_statement_import_paypal/{models => wizards}/account_bank_statement_import_paypal.py (83%) create mode 100644 account_bank_statement_import_paypal/wizards/account_bank_statement_import_view.xml create mode 100644 account_bank_statement_import_paypal/wizards/create_map_lines_from_file.py create mode 100644 account_bank_statement_import_paypal/wizards/create_map_lines_from_file_views.xml diff --git a/account_bank_statement_import_paypal/README.rst b/account_bank_statement_import_paypal/README.rst index b7558f3..0fa92e3 100644 --- a/account_bank_statement_import_paypal/README.rst +++ b/account_bank_statement_import_paypal/README.rst @@ -25,7 +25,8 @@ Import Paypal Bank Statements |badge1| |badge2| |badge3| |badge4| |badge5| -This module allows you to import the Paypal CSV files in Odoo as bank statements. +This module allows you to import the Paypal CSV files in Odoo as bank +statements. **Table of contents** @@ -35,18 +36,18 @@ This module allows you to import the Paypal CSV files in Odoo as bank statements Configuration ============= -In the menu Accounting > Configuration > Accounting > Bank Accounts, -make sure that you have your Paypal bank account with the following parameters: -* Bank Account Type: Normal Bank Account -* Account Number: the email address associated with your Paypal account -* Account Journal: the journal associated to your Paypal account - -TIPS -~~~~ -For now only French and English report are supported. -For adding new support you just need to add your header in -model/account_bank_statement_import_paypal.py in the variables HEADERS. -Please help us and do a PR for adding new header ! Thanks +* Create or go to a bank journal where you want to import Paypal statement. +* Edit that journal and set a Paypal map in **Paypal Map** section in **Advanced + Settings** tab. + +* Now you can import Paypal statements in that journal. + +Note: if existent Paypal Map does not fit to your file to import, you can +create another map in **Invoicing > Configuration > Accounting > Paypal +Mapping**. + +You can import headers from any Paypal file in **Action > Create Paypal Map +Lines** and set every line with which field of statement have to match. Usage ===== diff --git a/account_bank_statement_import_paypal/__init__.py b/account_bank_statement_import_paypal/__init__.py index 0650744..aee8895 100644 --- a/account_bank_statement_import_paypal/__init__.py +++ b/account_bank_statement_import_paypal/__init__.py @@ -1 +1,2 @@ from . import models +from . import wizards diff --git a/account_bank_statement_import_paypal/__manifest__.py b/account_bank_statement_import_paypal/__manifest__.py index ada7c9a..f4af623 100644 --- a/account_bank_statement_import_paypal/__manifest__.py +++ b/account_bank_statement_import_paypal/__manifest__.py @@ -5,14 +5,22 @@ { "name": "Import Paypal Bank Statements", 'summary': 'Import Paypal CSV files as Bank Statements in Odoo', - "version": "11.0.1.0.0", + "version": "11.0.2.0.0", "category": "Accounting", "website": "https://github.com/OCA/bank-statement-import", "author": " Akretion, Odoo Community Association (OCA)", "license": "AGPL-3", - "application": False, "installable": True, "depends": [ "account_bank_statement_import", + "sale", ], + "data": [ + "security/ir.model.access.csv", + "data/paypal_map_data.xml", + "wizards/create_map_lines_from_file_views.xml", + "wizards/account_bank_statement_import_view.xml", + "views/account_journal_views.xml", + "views/paypal_map_views.xml", + ] } diff --git a/account_bank_statement_import_paypal/data/paypal_map_data.xml b/account_bank_statement_import_paypal/data/paypal_map_data.xml new file mode 100644 index 0000000..be289c7 --- /dev/null +++ b/account_bank_statement_import_paypal/data/paypal_map_data.xml @@ -0,0 +1,114 @@ + + + + + Paypal Monthly Statement + + + + Date + 0 + + date + %m/%d/%Y + + + Time + 1 + + time + + + Time Zone + 2 + + + + Description + 3 + + description + + + Currency + 4 + + currency + + + Gross + 5 + + amount + + + Fee + 6 + + commission + + + Net + 7 + + + + Balance + 8 + + balance + + + Transaction ID + 9 + + transaction_id + + + From Email Address + 10 + + email + + + Name + 11 + + partner_name + + + Bank Name + 12 + + bank_name + + + Bank Account + 13 + + bank_account + + + Shipping and Handling Amount + 14 + + + + Sales Tax + 15 + + + + Invoice ID + 16 + + invoice_number + + + Reference Txn ID + 17 + + origin_transaction_id + + + diff --git a/account_bank_statement_import_paypal/i18n/account_bank_statement_import_paypal.pot b/account_bank_statement_import_paypal/i18n/account_bank_statement_import_paypal.pot index c5b0e90..3e24e19 100644 --- a/account_bank_statement_import_paypal/i18n/account_bank_statement_import_paypal.pot +++ b/account_bank_statement_import_paypal/i18n/account_bank_statement_import_paypal.pot @@ -6,6 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-11 10:43+0000\n" +"PO-Revision-Date: 2019-01-11 10:43+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -13,44 +15,325 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "All the Paypal map lines will be created automatically." +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Balance" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Bank Account" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Bank Name" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_data_file +msgid "Bank Statement File" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "Cancel" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "Choose a file to import..." +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "Create Lines" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.actions.act_window,name:account_bank_statement_import_paypal.action_create_paypal_map_lines +msgid "Create Paypal Map Lines" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_create_uid +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_create_uid +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_create_uid +msgid "Created by" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_create_date +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_create_date +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_create_date +msgid "Created on" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Currency" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Date" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_date_format +msgid "Date Format" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:90 +#, python-format +msgid "Date format of map file and Paypal date does not match." +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Description" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_display_name +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_display_name +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_display_name +msgid "Display Name" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "Download a bank statement from your bank and import it here." +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Fee" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_sequence +msgid "Field number" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_filename +msgid "Filename" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "From Email Address" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Gross" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_name +msgid "Header Name" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:73 +#, python-format +msgid "Headers of file to import and Paypal map lines does not match." +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_id +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_id +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_id +msgid "ID" +msgstr "" + #. module: account_bank_statement_import_paypal #: model:ir.model,name:account_bank_statement_import_paypal.model_account_bank_statement_import msgid "Import Bank Statement" msgstr "" #. module: account_bank_statement_import_paypal -#: code:addons/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal.py:220 +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "Import Paypal Map Lines" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Invoice ID" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model,name:account_bank_statement_import_paypal.model_account_journal +msgid "Journal" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map___last_update +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line___last_update +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create___last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_write_uid +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_write_uid +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_write_date +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_write_date +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_map_parent_id +msgid "Map Parent" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_map_line_ids +msgid "Map lines" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.statement_import_map_tax_form +msgid "Mapping Lines" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_name +msgid "Name" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Origin Transaction ID" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:226 #, python-format msgid "PAYPAL-COSTS" msgstr "" #. module: account_bank_statement_import_paypal -#: code:addons/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal.py:185 +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:191 #, python-format msgid "PayPal Import %s > %s" msgstr "" #. module: account_bank_statement_import_paypal -#: code:addons/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal.py:219 +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_journal_paypal_map_id +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.statement_import_map_tax_form +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.statement_import_map_tax_tree +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.view_account_journal_form_n43 +msgid "Paypal Map" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.actions.act_window,name:account_bank_statement_import_paypal.action_statement_import_paypal_mappging +#: model:ir.ui.menu,name:account_bank_statement_import_paypal.menu_statement_import_paypal_mapping +msgid "Paypal Mapping" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:225 #, python-format msgid "Paypal commissions" msgstr "" #. module: account_bank_statement_import_paypal -#: code:addons/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal.py:97 +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_id_4185 +msgid "Paypal map" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.statement_import_map_tax_line_form +msgid "Paypal mapping line" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.statement_import_map_tax_line_tree +msgid "Paypal mapping lines" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.account_bank_statement_import_view +msgid "Paypal with Template:" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "Select a Paypal bank statement file to create all the map lines from headers file." +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_field_to_assign +msgid "Statement Field to Assign" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Time" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Transaction ID" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:100 #, python-format msgid "Value '%s' for the field '%s' on line %d, cannot be converted to float" msgstr "" #. module: account_bank_statement_import_paypal -#: code:addons/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal.py:134 +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:137 #, python-format msgid "You must run this wizard from the journal" msgstr "" #. module: account_bank_statement_import_paypal -#: code:addons/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal.py:119 +#: model:ir.model,name:account_bank_statement_import_paypal.model_account_bank_statement_import_paypal_map +msgid "account.bank.statement.import.paypal.map" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model,name:account_bank_statement_import_paypal.model_account_bank_statement_import_paypal_map_line +msgid "account.bank.statement.import.paypal.map.line" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:122 #, python-format msgid "currency %s on line %d cannot be found in odoo" msgstr "" +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,date_format:0 +msgid "i.e. 12/15/2019" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,date_format:0 +msgid "i.e. 15/12/2019" +msgstr "" + +#. module: account_bank_statement_import_paypal +#: model:ir.model,name:account_bank_statement_import_paypal.model_wizard_paypal_map_create +msgid "wizard.paypal.map.create" +msgstr "" + diff --git a/account_bank_statement_import_paypal/i18n/es.po b/account_bank_statement_import_paypal/i18n/es.po new file mode 100644 index 0000000..d2c58f0 --- /dev/null +++ b/account_bank_statement_import_paypal/i18n/es.po @@ -0,0 +1,348 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_bank_statement_import_paypal +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-01-11 10:43+0000\n" +"PO-Revision-Date: 2019-01-11 11:44+0100\n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.1.1\n" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "All the Paypal map lines will be created automatically." +msgstr "Todas las lineas de la plantilla se crearán automáticamente." + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Balance" +msgstr "Saldo" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Bank Account" +msgstr "Cuenta bancaria" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Bank Name" +msgstr "Nombre del banco" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_data_file +msgid "Bank Statement File" +msgstr "Archivo de extracto bancario" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "Choose a file to import..." +msgstr "Escoja un archivo a importar..." + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "Create Lines" +msgstr "Crear líneas" + +#. module: account_bank_statement_import_paypal +#: model:ir.actions.act_window,name:account_bank_statement_import_paypal.action_create_paypal_map_lines +msgid "Create Paypal Map Lines" +msgstr "Crear las líneas de la plantilla de Paypal" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_create_uid +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_create_uid +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_create_uid +msgid "Created by" +msgstr "Creado el" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_create_date +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_create_date +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_create_date +msgid "Created on" +msgstr "Creado por" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Currency" +msgstr "Moneda" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Date" +msgstr "Fecha" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_date_format +msgid "Date Format" +msgstr "Formato de fecha" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:90 +#, python-format +msgid "Date format of map file and Paypal date does not match." +msgstr "" +"El format de fecha del archivo de plantilla y la fecha de Paypal no " +"coinciden." + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Description" +msgstr "Descripción" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_display_name +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_display_name +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "Download a bank statement from your bank and import it here." +msgstr "Descargue un extracto bancario desde su banco e impórtelo aquí." + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Fee" +msgstr "Tarifa" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_sequence +msgid "Field number" +msgstr "Nº de campo" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_filename +msgid "Filename" +msgstr "Nombre de archivo" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "From Email Address" +msgstr "Correo electrónico del remitente" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Gross" +msgstr "Bruto" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_name +msgid "Header Name" +msgstr "Nombre de la cabecera" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:73 +#, python-format +msgid "Headers of file to import and Paypal map lines does not match." +msgstr "" +"La cabecera del archivo a importar y las lineas de la plantilla de Paypal no " +"coinciden." + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_id +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_id +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_id +msgid "ID" +msgstr "ID" + +#. module: account_bank_statement_import_paypal +#: model:ir.model,name:account_bank_statement_import_paypal.model_account_bank_statement_import +msgid "Import Bank Statement" +msgstr "Importar Extracto Bancario" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "Import Paypal Map Lines" +msgstr "Importar las lineas de la plantilla de Paypal" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Invoice ID" +msgstr "Número de factura" + +#. module: account_bank_statement_import_paypal +#: model:ir.model,name:account_bank_statement_import_paypal.model_account_journal +msgid "Journal" +msgstr "Diario" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map___last_update +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line___last_update +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_write_uid +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_write_uid +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_write_date +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_write_date +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_wizard_paypal_map_create_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_map_parent_id +msgid "Map Parent" +msgstr "Plantilla padre" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_map_line_ids +msgid "Map lines" +msgstr "Líneas de la plantilla" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.statement_import_map_tax_form +msgid "Mapping Lines" +msgstr "Líneas de la plantilla" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_name +msgid "Name" +msgstr "Nombre" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Origin Transaction ID" +msgstr "Id. de transacción" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:226 +#, python-format +msgid "PAYPAL-COSTS" +msgstr "COSTES-PAYPAL" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:191 +#, python-format +msgid "PayPal Import %s > %s" +msgstr "Importación de Paypal %s > %s" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_journal_paypal_map_id +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.statement_import_map_tax_form +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.statement_import_map_tax_tree +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.view_account_journal_form_n43 +msgid "Paypal Map" +msgstr "Plantilla de Paypal" + +#. module: account_bank_statement_import_paypal +#: model:ir.actions.act_window,name:account_bank_statement_import_paypal.action_statement_import_paypal_mappging +#: model:ir.ui.menu,name:account_bank_statement_import_paypal.menu_statement_import_paypal_mapping +msgid "Paypal Mapping" +msgstr "Plantilla de Paypal" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:225 +#, python-format +msgid "Paypal commissions" +msgstr "Tarifa de Paypal" + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_id_4185 +msgid "Paypal map" +msgstr "Plantilla de Paypal" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.statement_import_map_tax_line_form +msgid "Paypal mapping line" +msgstr "Línea de plantilla de Paypal" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.statement_import_map_tax_line_tree +msgid "Paypal mapping lines" +msgstr "Líneas de plantilla de Paypal" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.account_bank_statement_import_view +msgid "Paypal with Template:" +msgstr "Paypal con la plantilla:" + +#. module: account_bank_statement_import_paypal +#: model:ir.ui.view,arch_db:account_bank_statement_import_paypal.create_paypal_map_lines_view +msgid "" +"Select a Paypal bank statement file to create all the map lines from headers " +"file." +msgstr "" +"Seleccione un archivo de extracto bancario de Paypal para crear todas las " +"lineas de la plantilla a partir de la cabecera del archivo." + +#. module: account_bank_statement_import_paypal +#: model:ir.model.fields,field_description:account_bank_statement_import_paypal.field_account_bank_statement_import_paypal_map_line_field_to_assign +msgid "Statement Field to Assign" +msgstr "Campo del extracto a asignar" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Time" +msgstr "Hora" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,field_to_assign:0 +msgid "Transaction ID" +msgstr "Id. de transacción" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:100 +#, python-format +msgid "Value '%s' for the field '%s' on line %d, cannot be converted to float" +msgstr "" +"El valor '%s' del campo '%s' en la línea %d, no se puede convertir a float" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:137 +#, python-format +msgid "You must run this wizard from the journal" +msgstr "Debe ejecutar este asistente des del diario" + +#. module: account_bank_statement_import_paypal +#: model:ir.model,name:account_bank_statement_import_paypal.model_account_bank_statement_import_paypal_map +msgid "account.bank.statement.import.paypal.map" +msgstr "account.bank.statement.import.paypal.map" + +#. module: account_bank_statement_import_paypal +#: model:ir.model,name:account_bank_statement_import_paypal.model_account_bank_statement_import_paypal_map_line +msgid "account.bank.statement.import.paypal.map.line" +msgstr "account.bank.statement.import.paypal.map.line" + +#. module: account_bank_statement_import_paypal +#: code:addons/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py:122 +#, python-format +msgid "currency %s on line %d cannot be found in odoo" +msgstr "la monea %s de la línea %d no se puede encontrar en odoo" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,date_format:0 +msgid "i.e. 12/15/2019" +msgstr "p.e. 12/15/2019" + +#. module: account_bank_statement_import_paypal +#: selection:account.bank.statement.import.paypal.map.line,date_format:0 +msgid "i.e. 15/12/2019" +msgstr "p.e. 15/12/2019" + +#. module: account_bank_statement_import_paypal +#: model:ir.model,name:account_bank_statement_import_paypal.model_wizard_paypal_map_create +msgid "wizard.paypal.map.create" +msgstr "wizard.paypal.map.create" diff --git a/account_bank_statement_import_paypal/models/__init__.py b/account_bank_statement_import_paypal/models/__init__.py index 4e11f72..4257b3b 100644 --- a/account_bank_statement_import_paypal/models/__init__.py +++ b/account_bank_statement_import_paypal/models/__init__.py @@ -1 +1,2 @@ -from . import account_bank_statement_import_paypal +from . import account_bank_statement_import_paypal_map +from . import account_journal diff --git a/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_map.py b/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_map.py new file mode 100644 index 0000000..159dfd4 --- /dev/null +++ b/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_map.py @@ -0,0 +1,64 @@ +# Copyright 2019 Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class AccountBankStatementImportPaypalMap(models.Model): + _name = 'account.bank.statement.import.paypal.map' + + name = fields.Char( + required=True, + ) + map_line_ids = fields.One2many( + comodel_name='account.bank.statement.import.paypal.map.line', + inverse_name='map_parent_id', + string="Map lines", + required=True, + copy=True, + ) + + +class AccountBankStatementImportPaypalMapLIne(models.Model): + _name = 'account.bank.statement.import.paypal.map.line' + _order = "sequence asc, id asc" + + sequence = fields.Integer( + string="Field number", + required=True, + ) + name = fields.Char( + string="Header Name", + required=True, + ) + map_parent_id = fields.Many2one( + comodel_name='account.bank.statement.import.paypal.map', + required=True, + ondelete='cascade', + ) + field_to_assign = fields.Selection( + selection=[ + ('date', 'Date'), + ('time', 'Time'), + ('description', 'Description'), + ('currency', 'Currency'), + ('amount', 'Gross'), + ('commission', 'Fee'), + ('balance', 'Balance'), + ('transaction_id', 'Transaction ID'), + ('email', 'From Email Address'), + ('partner_name', 'Name'), + ('bank_name', 'Bank Name'), + ('bank_account', 'Bank Account'), + ('invoice_number', 'Invoice ID'), + ('origin_transaction_id', 'Origin Transaction ID'), + ], + string="Statement Field to Assign", + ) + date_format = fields.Selection( + selection=[ + ('%d/%m/%Y', 'i.e. 15/12/2019'), + ('%m/%d/%Y', 'i.e. 12/15/2019'), + ], + string="Date Format", + ) diff --git a/account_bank_statement_import_paypal/models/account_journal.py b/account_bank_statement_import_paypal/models/account_journal.py new file mode 100644 index 0000000..5123a3c --- /dev/null +++ b/account_bank_statement_import_paypal/models/account_journal.py @@ -0,0 +1,13 @@ +# Copyright 2019 Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class AccountJournal(models.Model): + _inherit = "account.journal" + + paypal_map_id = fields.Many2one( + comodel_name='account.bank.statement.import.paypal.map', + string='Paypal Map', + ) diff --git a/account_bank_statement_import_paypal/readme/CONFIGURE.rst b/account_bank_statement_import_paypal/readme/CONFIGURE.rst index 0be0958..7693cae 100644 --- a/account_bank_statement_import_paypal/readme/CONFIGURE.rst +++ b/account_bank_statement_import_paypal/readme/CONFIGURE.rst @@ -1,12 +1,12 @@ -In the menu Accounting > Configuration > Accounting > Bank Accounts, -make sure that you have your Paypal bank account with the following parameters: -* Bank Account Type: Normal Bank Account -* Account Number: the email address associated with your Paypal account -* Account Journal: the journal associated to your Paypal account +* Create or go to a bank journal where you want to import Paypal statement. +* Edit that journal and set a Paypal map in **Paypal Map** section in **Advanced + Settings** tab. -TIPS -~~~~ -For now only French and English report are supported. -For adding new support you just need to add your header in -model/account_bank_statement_import_paypal.py in the variables HEADERS. -Please help us and do a PR for adding new header ! Thanks +* Now you can import Paypal statements in that journal. + +Note: if existent Paypal Map does not fit to your file to import, you can +create another map in **Invoicing > Configuration > Accounting > Paypal +Mapping**. + +You can import headers from any Paypal file in **Action > Create Paypal Map +Lines** and set every line with which field of statement have to match. diff --git a/account_bank_statement_import_paypal/readme/DESCRIPTION.rst b/account_bank_statement_import_paypal/readme/DESCRIPTION.rst index 4da61e3..492b95d 100644 --- a/account_bank_statement_import_paypal/readme/DESCRIPTION.rst +++ b/account_bank_statement_import_paypal/readme/DESCRIPTION.rst @@ -1 +1,2 @@ -This module allows you to import the Paypal CSV files in Odoo as bank statements. +This module allows you to import the Paypal CSV files in Odoo as bank +statements. diff --git a/account_bank_statement_import_paypal/security/ir.model.access.csv b/account_bank_statement_import_paypal/security/ir.model.access.csv new file mode 100644 index 0000000..db61ffb --- /dev/null +++ b/account_bank_statement_import_paypal/security/ir.model.access.csv @@ -0,0 +1,3 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +access_account_bank_statement_import_paypal_map,Paypal map manager,model_account_bank_statement_import_paypal_map,account.group_account_manager,1,1,1,1 +access_account_bank_statement_import_paypal_map_line,Paypal map line manager,model_account_bank_statement_import_paypal_map_line,account.group_account_manager,1,1,1,1 diff --git a/account_bank_statement_import_paypal/static/description/index.html b/account_bank_statement_import_paypal/static/description/index.html index 5c4b767..e3553e1 100644 --- a/account_bank_statement_import_paypal/static/description/index.html +++ b/account_bank_statement_import_paypal/static/description/index.html @@ -368,41 +368,38 @@ ul.auto-toc { !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/bank-statement-import Translate me on Weblate Try me on Runbot

-

This module allows you to import the Paypal CSV files in Odoo as bank statements.

+

This module allows you to import the Paypal CSV files in Odoo as bank +statements.

Table of contents

Configuration

-

In the menu Accounting > Configuration > Accounting > Bank Accounts, -make sure that you have your Paypal bank account with the following parameters: -* Bank Account Type: Normal Bank Account -* Account Number: the email address associated with your Paypal account -* Account Journal: the journal associated to your Paypal account

-
-

TIPS

-

For now only French and English report are supported. -For adding new support you just need to add your header in -model/account_bank_statement_import_paypal.py in the variables HEADERS. -Please help us and do a PR for adding new header ! Thanks

-
+ +

Note: if existent Paypal Map does not fit to your file to import, you can +create another map in Invoicing > Configuration > Accounting > Paypal +Mapping.

+

You can import headers from any Paypal file in Action > Create Paypal Map +Lines and set every line with which field of statement have to match.

-

Usage

+

Usage

To use this module, you need to:

  1. Go to Paypal and download your Bank Statement
  2. @@ -411,7 +408,7 @@ Please help us and do a PR for adding new header ! Thanks

    .
-

Bug Tracker

+

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 @@ -419,15 +416,15 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Akretion
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose diff --git a/account_bank_statement_import_paypal/tests/__init__.py b/account_bank_statement_import_paypal/tests/__init__.py new file mode 100644 index 0000000..8160886 --- /dev/null +++ b/account_bank_statement_import_paypal/tests/__init__.py @@ -0,0 +1 @@ +from . import test_paypal_statement_import diff --git a/account_bank_statement_import_paypal/tests/paypal_en.csv b/account_bank_statement_import_paypal/tests/paypal_en.csv new file mode 100644 index 0000000..f3ef282 --- /dev/null +++ b/account_bank_statement_import_paypal/tests/paypal_en.csv @@ -0,0 +1,3 @@ +"Date","Time","Time Zone","Description","Currency","Gross","Fee ","Net","Balance","Transaction ID","From Email Address","Name","Bank Name","Bank Account","Shipping and Handling Amount","Sales Tax","Invoice ID","Reference Txn ID" +"12/15/2018","20:07:53","CET","Your best supplier","USD","-33,50","-2,3","-31,2","-31,2","53820712527632627","","John Doe","Bank of America","123456789","0","0","INV25","23" +"12/15/2018","22:07:53","CET","Your payment","USD","525","0","525","493,80","34731322767782103","","Agrolait","","","0","0","INV/2019/0003","24" diff --git a/account_bank_statement_import_paypal/tests/test_paypal_statement_import.py b/account_bank_statement_import_paypal/tests/test_paypal_statement_import.py new file mode 100644 index 0000000..7b24197 --- /dev/null +++ b/account_bank_statement_import_paypal/tests/test_paypal_statement_import.py @@ -0,0 +1,54 @@ +# Copyright 2019 Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import os +import base64 +from odoo.tests import common + + +class TestPaypalFile(common.SavepointCase): + @classmethod + def setUpClass(cls): + super(TestPaypalFile, cls).setUpClass() + + cls.map = cls.env['account.bank.statement.import.paypal.map'].create({ + 'name': 'Paypal Map Test', + }) + cls.journal = cls.env['account.journal'].create({ + 'name': 'Paypal Bank', + 'type': 'bank', + 'code': 'PYPAL', + }) + + def _do_import(self, file_name): + file_name = os.path.join(os.path.dirname(__file__), file_name) + return open(file_name).read() + + def test_import_header(self): + file = self._do_import('paypal_en.csv') + file = base64.b64encode(file.encode("utf-8")) + wizard = self.env['wizard.paypal.map.create'].with_context({ + 'journal_id': self.journal.id, + 'active_ids': [self.map.id], + }).create({'data_file': file}) + wizard.create_map_lines() + self.assertEqual(len(self.map.map_line_ids.ids), 18) + + def test_import_paypal_file(self): + # Current statements before to run the wizard + old_statements = self.env['account.bank.statement'].search([]) + # This journal is for Paypal statements + map = self.env.ref('account_bank_statement_import_paypal.paypal_map') + self.journal.paypal_map_id = map.id + file = self._do_import('paypal_en.csv') + file = base64.b64encode(file.encode("utf-8")) + wizard = self.env['account.bank.statement.import'].with_context({ + 'journal_id': self.journal.id, + }).create({'data_file': file}) + wizard.import_file() + staments_now = self.env['account.bank.statement'].search([]) + statement = staments_now - old_statements + self.assertEqual(len(statement.line_ids), 3) + self.assertEqual(len(statement.mapped('line_ids').filtered( + lambda x: x.partner_id and x.account_id)), 1) + self.assertAlmostEqual(sum(statement.mapped('line_ids.amount')), 489.2) diff --git a/account_bank_statement_import_paypal/views/account_journal_views.xml b/account_bank_statement_import_paypal/views/account_journal_views.xml new file mode 100644 index 0000000..3e565b7 --- /dev/null +++ b/account_bank_statement_import_paypal/views/account_journal_views.xml @@ -0,0 +1,16 @@ + + + + + account.journal + + + + + + + + + + + diff --git a/account_bank_statement_import_paypal/views/paypal_map_views.xml b/account_bank_statement_import_paypal/views/paypal_map_views.xml new file mode 100644 index 0000000..c3a40ba --- /dev/null +++ b/account_bank_statement_import_paypal/views/paypal_map_views.xml @@ -0,0 +1,65 @@ + + + + + account.bank.statement.import.paypal.map + + + + + + + + + account.bank.statement.import.paypal.map + +

+ + + + + + + + + + + account.bank.statement.import.paypal.map.line + + + + + + + + + + + + account.bank.statement.import.paypal.map.line + +
+ + + + + + + +
+
+
+ + + Paypal Mapping + account.bank.statement.import.paypal.map + form + tree,form + + + + + diff --git a/account_bank_statement_import_paypal/wizards/__init__.py b/account_bank_statement_import_paypal/wizards/__init__.py new file mode 100644 index 0000000..006d24c --- /dev/null +++ b/account_bank_statement_import_paypal/wizards/__init__.py @@ -0,0 +1,2 @@ +from . import create_map_lines_from_file +from . import account_bank_statement_import_paypal diff --git a/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal.py b/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py similarity index 83% rename from account_bank_statement_import_paypal/models/account_bank_statement_import_paypal.py rename to account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py index e15d15f..be82f8c 100644 --- a/account_bank_statement_import_paypal/models/account_bank_statement_import_paypal.py +++ b/account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py @@ -37,6 +37,12 @@ HEADERS = [ class AccountBankStatementImport(models.TransientModel): _inherit = 'account.bank.statement.import' + paypal_map_id = fields.Many2one( + comodel_name='account.bank.statement.import.paypal.map', + string='Paypal map', + readonly=True, + ) + @api.model def _get_paypal_encoding(self): return 'utf-8-sig' @@ -47,11 +53,6 @@ class AccountBankStatementImport(models.TransientModel): data_file = data_file.decode(self._get_paypal_encoding()) return data_file.strip() - @api.model - def _get_paypal_date_format(self): - """ This method is designed to be inherited """ - return '%d/%m/%Y' - @api.model def _paypal_convert_amount(self, amount_str): """ This method is designed to be inherited """ @@ -63,31 +64,33 @@ class AccountBankStatementImport(models.TransientModel): @api.model def _check_paypal(self, data_file): data_file = self._get_paypal_str_data(data_file) - for header in HEADERS: - if data_file.strip().startswith(header): - return True - return False + if not self.paypal_map_id: + return False + headers = self.mapped('paypal_map_id.map_line_ids.name') + file_headers = data_file.split('\n', 1)[0] + if any(item not in file_headers for item in headers): + raise UserError( + _("Headers of file to import and Paypal map lines does not " + "match.")) + return True def _convert_paypal_line_to_dict(self, idx, line): - date_dt = datetime.strptime(line[0], self._get_paypal_date_format()) - rline = { - 'date': fields.Date.to_string(date_dt), - 'time': line[1], - 'description': line[3], - 'currency': line[4], - 'amount': line[5], - 'commission': line[6], - 'balance': line[8], - 'transaction_id': line[9], - 'email': line[10], - 'partner_name': line[11], - # This two field are useful for bank transfer - 'bank_name': line[12], - 'bank_account': line[13], - 'invoice_number': line[16], - 'origin_transaction_id': line[17], - 'idx': idx, - } + rline = dict() + for item in range(len(line)): + map = self.mapped('paypal_map_id.map_line_ids')[item] + value = line[item] + if not map.field_to_assign: + continue + if map.date_format: + try: + value = fields.Date.to_string( + datetime.strptime(value, map.date_format)) + except Exception: + raise UserError( + _("Date format of map file and Paypal date does " + "not match.")) + rline[map.field_to_assign] = value + for field in ['commission', 'amount', 'balance']: _logger.debug('Trying to convert %s to float' % rline[field]) try: @@ -128,11 +131,14 @@ class AccountBankStatementImport(models.TransientModel): 'transaction_id': cline['transaction_id'], } - def _post_process_statement_line(self, raw_lines): + def _get_journal(self): journal_id = self.env.context.get('journal_id') if not journal_id: raise UserError(_('You must run this wizard from the journal')) - journal = self.env['account.journal'].browse(journal_id) + return self.env['account.journal'].browse(journal_id) + + def _post_process_statement_line(self, raw_lines): + journal = self._get_journal() currency = journal.currency_id or journal.company_id.currency_id currency_change_lines = {} real_transactions = [] @@ -265,17 +271,24 @@ class AccountBankStatementImport(models.TransientModel): if partner: return { 'partner_id': partner.id, - 'account_id': partner.property_account_receivable.id, + 'account_id': partner.property_account_receivable_id.id, } return None @api.model - def _complete_statement(self, stmts_vals, journal_id, account_number): + def _complete_stmts_vals(self, stmts_vals, journal_id, account_number): """ Match the partner from paypal information """ - stmts_vals = super(AccountBankStatementImport, self).\ - _complete_statement(stmts_vals, journal_id, account_number) - for line in stmts_vals['transactions']: + stmts_vals = super(AccountBankStatementImport, self). \ + _complete_stmts_vals(stmts_vals, journal_id, account_number) + for line in stmts_vals[0]['transactions']: vals = self._complete_paypal_statement_line(line) if vals: line.update(vals) return stmts_vals + + @api.model + def default_get(self, fields): + res = super(AccountBankStatementImport, self).default_get(fields) + journal = self._get_journal() + res['paypal_map_id'] = journal.paypal_map_id.id + return res diff --git a/account_bank_statement_import_paypal/wizards/account_bank_statement_import_view.xml b/account_bank_statement_import_paypal/wizards/account_bank_statement_import_view.xml new file mode 100644 index 0000000..ecb7364 --- /dev/null +++ b/account_bank_statement_import_paypal/wizards/account_bank_statement_import_view.xml @@ -0,0 +1,14 @@ + + + + + account.bank.statement.import + + + +
  • Paypal with Template:
  • +
    +
    +
    + +
    diff --git a/account_bank_statement_import_paypal/wizards/create_map_lines_from_file.py b/account_bank_statement_import_paypal/wizards/create_map_lines_from_file.py new file mode 100644 index 0000000..139ae53 --- /dev/null +++ b/account_bank_statement_import_paypal/wizards/create_map_lines_from_file.py @@ -0,0 +1,38 @@ +# Copyright 2019 Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import csv +import base64 +from odoo import api, fields, models +from io import StringIO + + +class WizardPaypalMapCreate(models.TransientModel): + _name = 'wizard.paypal.map.create' + + data_file = fields.Binary( + string='Bank Statement File', + required=True, + ) + filename = fields.Char() + + @api.multi + def create_map_lines(self): + statement_obj = self.env['account.bank.statement.import.paypal.map'] + data_file = base64.b64decode(self.data_file) + if not isinstance(data_file, str): + data_file = data_file.decode('utf-8-sig').strip() + file = StringIO(data_file) + file.seek(0) + reader = csv.reader(file) + headers = [] + for row in reader: + headers = row + break + lines = [] + for idx, title in enumerate(headers): + lines.append((0, 0, {'sequence': idx, 'name': title})) + if lines: + for statement in statement_obj.browse( + self.env.context.get('active_ids')): + statement.map_line_ids = lines diff --git a/account_bank_statement_import_paypal/wizards/create_map_lines_from_file_views.xml b/account_bank_statement_import_paypal/wizards/create_map_lines_from_file_views.xml new file mode 100644 index 0000000..c61136d --- /dev/null +++ b/account_bank_statement_import_paypal/wizards/create_map_lines_from_file_views.xml @@ -0,0 +1,29 @@ + + + + + Create Paypal Map Lines + wizard.paypal.map.create + +
    +

    Select a Paypal bank statement file to create all the map lines from headers file.

    +

    Download a bank statement from your bank and import it here.

    +

    All the Paypal map lines will be created automatically.

    + + +
    +
    + +
    +
    + + +