Browse Source

Merge pull request #196 from Tecnativa/11.0-account_bank_statement_import_paypal_improve

[IMP] account_bank_statement_import_paypal: create paypal maps
pull/156/merge
Pedro M. Baeza 6 years ago
committed by GitHub
parent
commit
a189fe2371
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 27
      account_bank_statement_import_paypal/README.rst
  2. 1
      account_bank_statement_import_paypal/__init__.py
  3. 12
      account_bank_statement_import_paypal/__manifest__.py
  4. 114
      account_bank_statement_import_paypal/data/paypal_map_data.xml
  5. 295
      account_bank_statement_import_paypal/i18n/account_bank_statement_import_paypal.pot
  6. 348
      account_bank_statement_import_paypal/i18n/es.po
  7. 3
      account_bank_statement_import_paypal/models/__init__.py
  8. 64
      account_bank_statement_import_paypal/models/account_bank_statement_import_paypal_map.py
  9. 13
      account_bank_statement_import_paypal/models/account_journal.py
  10. 22
      account_bank_statement_import_paypal/readme/CONFIGURE.rst
  11. 3
      account_bank_statement_import_paypal/readme/DESCRIPTION.rst
  12. 3
      account_bank_statement_import_paypal/security/ir.model.access.csv
  13. 55
      account_bank_statement_import_paypal/static/description/index.html
  14. 1
      account_bank_statement_import_paypal/tests/__init__.py
  15. 3
      account_bank_statement_import_paypal/tests/paypal_en.csv
  16. 54
      account_bank_statement_import_paypal/tests/test_paypal_statement_import.py
  17. 16
      account_bank_statement_import_paypal/views/account_journal_views.xml
  18. 65
      account_bank_statement_import_paypal/views/paypal_map_views.xml
  19. 2
      account_bank_statement_import_paypal/wizards/__init__.py
  20. 81
      account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py
  21. 14
      account_bank_statement_import_paypal/wizards/account_bank_statement_import_view.xml
  22. 38
      account_bank_statement_import_paypal/wizards/create_map_lines_from_file.py
  23. 29
      account_bank_statement_import_paypal/wizards/create_map_lines_from_file_views.xml

27
account_bank_statement_import_paypal/README.rst

@ -25,7 +25,8 @@ Import Paypal Bank Statements
|badge1| |badge2| |badge3| |badge4| |badge5| |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** **Table of contents**
@ -35,18 +36,18 @@ This module allows you to import the Paypal CSV files in Odoo as bank statements
Configuration 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 Usage
===== =====

1
account_bank_statement_import_paypal/__init__.py

@ -1 +1,2 @@
from . import models from . import models
from . import wizards

12
account_bank_statement_import_paypal/__manifest__.py

@ -5,14 +5,22 @@
{ {
"name": "Import Paypal Bank Statements", "name": "Import Paypal Bank Statements",
'summary': 'Import Paypal CSV files as Bank Statements in Odoo', 'summary': 'Import Paypal CSV files as Bank Statements in Odoo',
"version": "11.0.1.0.0",
"version": "11.0.2.0.0",
"category": "Accounting", "category": "Accounting",
"website": "https://github.com/OCA/bank-statement-import", "website": "https://github.com/OCA/bank-statement-import",
"author": " Akretion, Odoo Community Association (OCA)", "author": " Akretion, Odoo Community Association (OCA)",
"license": "AGPL-3", "license": "AGPL-3",
"application": False,
"installable": True, "installable": True,
"depends": [ "depends": [
"account_bank_statement_import", "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",
]
} }

114
account_bank_statement_import_paypal/data/paypal_map_data.xml

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<record id="paypal_map" model="account.bank.statement.import.paypal.map">
<field name="name">Paypal Monthly Statement</field>
</record>
<record id="paypal_map_line_date" model="account.bank.statement.import.paypal.map.line">
<field name="name">Date</field>
<field name="sequence">0</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">date</field>
<field name="date_format">%m/%d/%Y</field>
</record>
<record id="paypal_map_line_time" model="account.bank.statement.import.paypal.map.line">
<field name="name">Time</field>
<field name="sequence">1</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">time</field>
</record>
<record id="paypal_map_line_time_zone" model="account.bank.statement.import.paypal.map.line">
<field name="name">Time Zone</field>
<field name="sequence">2</field>
<field name="map_parent_id" ref="paypal_map"/>
</record>
<record id="paypal_map_line_description" model="account.bank.statement.import.paypal.map.line">
<field name="name">Description</field>
<field name="sequence">3</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">description</field>
</record>
<record id="paypal_map_line_currency" model="account.bank.statement.import.paypal.map.line">
<field name="name">Currency</field>
<field name="sequence">4</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">currency</field>
</record>
<record id="paypal_map_line_gross" model="account.bank.statement.import.paypal.map.line">
<field name="name">Gross</field>
<field name="sequence">5</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">amount</field>
</record>
<record id="paypal_map_line_fee" model="account.bank.statement.import.paypal.map.line">
<field name="name">Fee</field>
<field name="sequence">6</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">commission</field>
</record>
<record id="paypal_map_line_net" model="account.bank.statement.import.paypal.map.line">
<field name="name">Net</field>
<field name="sequence">7</field>
<field name="map_parent_id" ref="paypal_map"/>
</record>
<record id="paypal_map_line_balance" model="account.bank.statement.import.paypal.map.line">
<field name="name">Balance</field>
<field name="sequence">8</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">balance</field>
</record>
<record id="paypal_map_line_transaction" model="account.bank.statement.import.paypal.map.line">
<field name="name">Transaction ID</field>
<field name="sequence">9</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">transaction_id</field>
</record>
<record id="paypal_map_line_email" model="account.bank.statement.import.paypal.map.line">
<field name="name">From Email Address</field>
<field name="sequence">10</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">email</field>
</record>
<record id="paypal_map_line_name" model="account.bank.statement.import.paypal.map.line">
<field name="name">Name</field>
<field name="sequence">11</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">partner_name</field>
</record>
<record id="paypal_map_line_bank_name" model="account.bank.statement.import.paypal.map.line">
<field name="name">Bank Name</field>
<field name="sequence">12</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">bank_name</field>
</record>
<record id="paypal_map_line_bank_account" model="account.bank.statement.import.paypal.map.line">
<field name="name">Bank Account</field>
<field name="sequence">13</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">bank_account</field>
</record>
<record id="paypal_map_line_shipping" model="account.bank.statement.import.paypal.map.line">
<field name="name">Shipping and Handling Amount</field>
<field name="sequence">14</field>
<field name="map_parent_id" ref="paypal_map"/>
</record>
<record id="paypal_map_line_sales" model="account.bank.statement.import.paypal.map.line">
<field name="name">Sales Tax</field>
<field name="sequence">15</field>
<field name="map_parent_id" ref="paypal_map"/>
</record>
<record id="paypal_map_line_invoice" model="account.bank.statement.import.paypal.map.line">
<field name="name">Invoice ID</field>
<field name="sequence">16</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">invoice_number</field>
</record>
<record id="paypal_map_line_reference" model="account.bank.statement.import.paypal.map.line">
<field name="name">Reference Txn ID</field>
<field name="sequence">17</field>
<field name="map_parent_id" ref="paypal_map"/>
<field name="field_to_assign">origin_transaction_id</field>
</record>
</odoo>

295
account_bank_statement_import_paypal/i18n/account_bank_statement_import_paypal.pot

@ -6,6 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 11.0\n" "Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \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" "Last-Translator: <>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -13,44 +15,325 @@ msgstr ""
"Content-Transfer-Encoding: \n" "Content-Transfer-Encoding: \n"
"Plural-Forms: \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 #. module: account_bank_statement_import_paypal
#: model:ir.model,name:account_bank_statement_import_paypal.model_account_bank_statement_import #: model:ir.model,name:account_bank_statement_import_paypal.model_account_bank_statement_import
msgid "Import Bank Statement" msgid "Import Bank Statement"
msgstr "" msgstr ""
#. module: account_bank_statement_import_paypal #. 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 #, python-format
msgid "PAYPAL-COSTS" msgid "PAYPAL-COSTS"
msgstr "" msgstr ""
#. module: account_bank_statement_import_paypal #. 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 #, python-format
msgid "PayPal Import %s > %s" msgid "PayPal Import %s > %s"
msgstr "" msgstr ""
#. module: account_bank_statement_import_paypal #. 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 #, python-format
msgid "Paypal commissions" msgid "Paypal commissions"
msgstr "" msgstr ""
#. module: account_bank_statement_import_paypal #. 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 #, python-format
msgid "Value '%s' for the field '%s' on line %d, cannot be converted to float" msgid "Value '%s' for the field '%s' on line %d, cannot be converted to float"
msgstr "" msgstr ""
#. module: account_bank_statement_import_paypal #. 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 #, python-format
msgid "You must run this wizard from the journal" msgid "You must run this wizard from the journal"
msgstr "" msgstr ""
#. module: account_bank_statement_import_paypal #. 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 #, python-format
msgid "currency %s on line %d cannot be found in odoo" msgid "currency %s on line %d cannot be found in odoo"
msgstr "" 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 ""

348
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"

3
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

64
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",
)

13
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',
)

22
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.

3
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.

3
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

55
account_bank_statement_import_paypal/static/description/index.html

@ -368,41 +368,38 @@ ul.auto-toc {
!! changes will be overwritten. !! !! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/bank-statement-import/tree/11.0/account_bank_statement_import_paypal"><img alt="OCA/bank-statement-import" src="https://img.shields.io/badge/github-OCA%2Fbank--statement--import-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/bank-statement-import-11-0/bank-statement-import-11-0-account_bank_statement_import_paypal"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/174/11.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p> <p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/bank-statement-import/tree/11.0/account_bank_statement_import_paypal"><img alt="OCA/bank-statement-import" src="https://img.shields.io/badge/github-OCA%2Fbank--statement--import-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/bank-statement-import-11-0/bank-statement-import-11-0-account_bank_statement_import_paypal"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/174/11.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module allows you to import the Paypal CSV files in Odoo as bank statements.</p>
<p>This module allows you to import the Paypal CSV files in Odoo as bank
statements.</p>
<p><strong>Table of contents</strong></p> <p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents"> <div class="contents local topic" id="contents">
<ul class="simple"> <ul class="simple">
<li><a class="reference internal" href="#configuration" id="id1">Configuration</a><ul>
<li><a class="reference internal" href="#tips" id="id2">TIPS</a></li>
</ul>
</li>
<li><a class="reference internal" href="#usage" id="id3">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id4">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id5">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id6">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id7">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id8">Maintainers</a></li>
<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id7">Maintainers</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</div> </div>
<div class="section" id="configuration"> <div class="section" id="configuration">
<h1><a class="toc-backref" href="#id1">Configuration</a></h1> <h1><a class="toc-backref" href="#id1">Configuration</a></h1>
<p>In the menu Accounting &gt; Configuration &gt; Accounting &gt; 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</p>
<div class="section" id="tips">
<h2><a class="toc-backref" href="#id2">TIPS</a></h2>
<p>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</p>
</div>
<ul class="simple">
<li>Create or go to a bank journal where you want to import Paypal statement.</li>
<li>Edit that journal and set a Paypal map in <strong>Paypal Map</strong> section in <strong>Advanced
Settings</strong> tab.</li>
<li>Now you can import Paypal statements in that journal.</li>
</ul>
<p>Note: if existent Paypal Map does not fit to your file to import, you can
create another map in <strong>Invoicing &gt; Configuration &gt; Accounting &gt; Paypal
Mapping</strong>.</p>
<p>You can import headers from any Paypal file in <strong>Action &gt; Create Paypal Map
Lines</strong> and set every line with which field of statement have to match.</p>
</div> </div>
<div class="section" id="usage"> <div class="section" id="usage">
<h1><a class="toc-backref" href="#id3">Usage</a></h1>
<h1><a class="toc-backref" href="#id2">Usage</a></h1>
<p>To use this module, you need to:</p> <p>To use this module, you need to:</p>
<ol class="arabic simple"> <ol class="arabic simple">
<li>Go to Paypal and download your Bank Statement</li> <li>Go to Paypal and download your Bank Statement</li>
@ -411,7 +408,7 @@ Please help us and do a PR for adding new header ! Thanks</p>
<img alt="." src="https://raw.githubusercontent.com/OCA/bank-statement-import/11.0/account_bank_statement_import_paypal/static/description/paypal_backoffice.png" /> <img alt="." src="https://raw.githubusercontent.com/OCA/bank-statement-import/11.0/account_bank_statement_import_paypal/static/description/paypal_backoffice.png" />
</div> </div>
<div class="section" id="bug-tracker"> <div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id4">Bug Tracker</a></h1>
<h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/bank-statement-import/issues">GitHub Issues</a>. <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/bank-statement-import/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported. 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 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
<p>Do not contact contributors directly about support or help with technical issues.</p> <p>Do not contact contributors directly about support or help with technical issues.</p>
</div> </div>
<div class="section" id="credits"> <div class="section" id="credits">
<h1><a class="toc-backref" href="#id5">Credits</a></h1>
<h1><a class="toc-backref" href="#id4">Credits</a></h1>
<div class="section" id="authors"> <div class="section" id="authors">
<h2><a class="toc-backref" href="#id6">Authors</a></h2>
<h2><a class="toc-backref" href="#id5">Authors</a></h2>
<ul class="simple"> <ul class="simple">
<li>Akretion</li> <li>Akretion</li>
</ul> </ul>
</div> </div>
<div class="section" id="contributors"> <div class="section" id="contributors">
<h2><a class="toc-backref" href="#id7">Contributors</a></h2>
<h2><a class="toc-backref" href="#id6">Contributors</a></h2>
<ul class="simple"> <ul class="simple">
<li>Alexis de Lattre &lt;<a class="reference external" href="mailto:alexis.delattre&#64;akretion.com">alexis.delattre&#64;akretion.com</a>&gt;</li> <li>Alexis de Lattre &lt;<a class="reference external" href="mailto:alexis.delattre&#64;akretion.com">alexis.delattre&#64;akretion.com</a>&gt;</li>
<li>Sebastien BEAU &lt;<a class="reference external" href="mailto:sebastien.beau&#64;akretion.com">sebastien.beau&#64;akretion.com</a>&gt;</li> <li>Sebastien BEAU &lt;<a class="reference external" href="mailto:sebastien.beau&#64;akretion.com">sebastien.beau&#64;akretion.com</a>&gt;</li>
@ -438,7 +435,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
</ul> </ul>
</div> </div>
<div class="section" id="maintainers"> <div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id8">Maintainers</a></h2>
<h2><a class="toc-backref" href="#id7">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p> <p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a> <a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose <p>OCA, or the Odoo Community Association, is a nonprofit organization whose

1
account_bank_statement_import_paypal/tests/__init__.py

@ -0,0 +1 @@
from . import test_paypal_statement_import

3
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"

54
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)

16
account_bank_statement_import_paypal/views/account_journal_views.xml

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_account_journal_form_n43" model="ir.ui.view">
<field name="model">account.journal</field>
<field name="inherit_id" ref="account.view_account_journal_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='advanced_settings']/group" position="inside">
<group string="Paypal Map" attrs="{'invisible': [('type','!=','bank')]}">
<field name="paypal_map_id"/>
</group>
</xpath>
</field>
</record>
</odoo>

65
account_bank_statement_import_paypal/views/paypal_map_views.xml

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="statement_import_map_tax_tree" model="ir.ui.view">
<field name="model">account.bank.statement.import.paypal.map</field>
<field name="arch" type="xml">
<tree string="Paypal Map">
<field name="name"/>
</tree>
</field>
</record>
<record id="statement_import_map_tax_form" model="ir.ui.view">
<field name="model">account.bank.statement.import.paypal.map</field>
<field name="arch" type="xml">
<form string="Paypal Map">
<group>
<field name="name"/>
</group>
<separator string="Mapping Lines"/>
<field name="map_line_ids"/>
</form>
</field>
</record>
<record id="statement_import_map_tax_line_tree" model="ir.ui.view">
<field name="model">account.bank.statement.import.paypal.map.line</field>
<field name="arch" type="xml">
<tree string="Paypal mapping lines" editable="bottom">
<field name="sequence"/>
<field name="name"/>
<field name="field_to_assign"/>
<field name="date_format" attrs="{'readonly':[('field_to_assign','!=','date')], 'required':[('field_to_assign','=','date')]}"/>
</tree>
</field>
</record>
<record id="statement_import_map_tax_line_form" model="ir.ui.view">
<field name="model">account.bank.statement.import.paypal.map.line</field>
<field name="arch" type="xml">
<form string="Paypal mapping line">
<group>
<group>
<field name="name"/>
<field name="sequence"/>
<field name="field_to_assign"/>
</group>
</group>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="action_statement_import_paypal_mappging">
<field name="name">Paypal Mapping</field>
<field name="res_model">account.bank.statement.import.paypal.map</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="menu_statement_import_paypal_mapping"
parent="account.account_account_menu"
action="action_statement_import_paypal_mappging"
name="Paypal Mapping"/>
</odoo>

2
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

81
account_bank_statement_import_paypal/models/account_bank_statement_import_paypal.py → account_bank_statement_import_paypal/wizards/account_bank_statement_import_paypal.py

@ -37,6 +37,12 @@ HEADERS = [
class AccountBankStatementImport(models.TransientModel): class AccountBankStatementImport(models.TransientModel):
_inherit = 'account.bank.statement.import' _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 @api.model
def _get_paypal_encoding(self): def _get_paypal_encoding(self):
return 'utf-8-sig' return 'utf-8-sig'
@ -47,11 +53,6 @@ class AccountBankStatementImport(models.TransientModel):
data_file = data_file.decode(self._get_paypal_encoding()) data_file = data_file.decode(self._get_paypal_encoding())
return data_file.strip() 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 @api.model
def _paypal_convert_amount(self, amount_str): def _paypal_convert_amount(self, amount_str):
""" This method is designed to be inherited """ """ This method is designed to be inherited """
@ -63,31 +64,33 @@ class AccountBankStatementImport(models.TransientModel):
@api.model @api.model
def _check_paypal(self, data_file): def _check_paypal(self, data_file):
data_file = self._get_paypal_str_data(data_file) data_file = self._get_paypal_str_data(data_file)
for header in HEADERS:
if data_file.strip().startswith(header):
return True
if not self.paypal_map_id:
return False 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): 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']: for field in ['commission', 'amount', 'balance']:
_logger.debug('Trying to convert %s to float' % rline[field]) _logger.debug('Trying to convert %s to float' % rline[field])
try: try:
@ -128,11 +131,14 @@ class AccountBankStatementImport(models.TransientModel):
'transaction_id': cline['transaction_id'], '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') journal_id = self.env.context.get('journal_id')
if not journal_id: if not journal_id:
raise UserError(_('You must run this wizard from the journal')) 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 = journal.currency_id or journal.company_id.currency_id
currency_change_lines = {} currency_change_lines = {}
real_transactions = [] real_transactions = []
@ -265,17 +271,24 @@ class AccountBankStatementImport(models.TransientModel):
if partner: if partner:
return { return {
'partner_id': partner.id, 'partner_id': partner.id,
'account_id': partner.property_account_receivable.id,
'account_id': partner.property_account_receivable_id.id,
} }
return None return None
@api.model @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 """ """ 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) vals = self._complete_paypal_statement_line(line)
if vals: if vals:
line.update(vals) line.update(vals)
return stmts_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

14
account_bank_statement_import_paypal/wizards/account_bank_statement_import_view.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="account_bank_statement_import_view" model="ir.ui.view">
<field name="model">account.bank.statement.import</field>
<field name="inherit_id" ref="account_bank_statement_import.account_bank_statement_import_view"/>
<field name="arch" type="xml">
<xpath expr="//ul[@id='statement_format']" position="inside">
<li>Paypal with Template: <field name="paypal_map_id"/></li>
</xpath>
</field>
</record>
</odoo>

38
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

29
account_bank_statement_import_paypal/wizards/create_map_lines_from_file_views.xml

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="create_paypal_map_lines_view" model="ir.ui.view">
<field name="name">Create Paypal Map Lines</field>
<field name="model">wizard.paypal.map.create</field>
<field name="arch" type="xml">
<form string="Import Paypal Map Lines">
<h2>Select a Paypal bank statement file to create all the map lines from headers file.</h2>
<p>Download a bank statement from your bank and import it here.</p>
<p>All the Paypal map lines will be created automatically.</p>
<field name="data_file" filename="filename" placeholder="Choose a file to import..."/>
<field name="filename" invisible="1"/>
<footer>
<button name="create_map_lines" string="Create Lines" type="object" class="btn-primary" />
<button string="Cancel" class="btn-default" special="cancel"/>
</footer>
</form>
</field>
</record>
<act_window name="Create Paypal Map Lines"
res_model="wizard.paypal.map.create"
src_model="account.bank.statement.import.paypal.map"
view_mode="form"
target="new"
key2="client_action_multi"
id="action_create_paypal_map_lines"/>
</odoo>
Loading…
Cancel
Save