Merge pull request #207 from Tecnativa/12.0-mig-account_bank_statement_import_paypal

[MIG] account_bank_statement_import_paypal: Migration to 12.0
This commit is contained in:
Pedro M. Baeza
2019-05-23 00:01:47 +02:00
committed by GitHub
27 changed files with 2071 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
=============================
Import Paypal Bank Statements
=============================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fbank--statement--import-lightgray.png?logo=github
:target: https://github.com/OCA/bank-statement-import/tree/12.0/account_bank_statement_import_paypal
:alt: OCA/bank-statement-import
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/bank-statement-import-12-0/bank-statement-import-12-0-account_bank_statement_import_paypal
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/174/12.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
This module allows you to import the Paypal CSV files in Odoo as bank
statements.
**Table of contents**
.. contents::
:local:
Configuration
=============
* 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
=====
To use this module, you need to:
#. Go to Paypal and download your Bank Statement
.. image:: https://raw.githubusercontent.com/OCA/bank-statement-import/12.0/account_bank_statement_import_paypal/account_bank_statement_import_paypal/static/description/paypal_backoffice.png
:alt: .
.. image:: https://raw.githubusercontent.com/OCA/bank-statement-import/12.0/account_bank_statement_import_paypal/static/description/paypal_backoffice.png
:alt: .
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/bank-statement-import/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/bank-statement-import/issues/new?body=module:%20account_bank_statement_import_paypal%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Akretion
Contributors
~~~~~~~~~~~~
* Alexis de Lattre <alexis.delattre@akretion.com>
* Sebastien BEAU <sebastien.beau@akretion.com>
* Tecnativa (https://www.tecnativa.com)
* Vicent Cubells <vicent.cubells@tecnativa.com>
* Victor M.M. Torres <victor.martin@tecnativa.com>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/bank-statement-import <https://github.com/OCA/bank-statement-import/tree/12.0/account_bank_statement_import_paypal>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

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

View File

@@ -0,0 +1,26 @@
# Copyright 2014-2017 Akretion (http://www.akretion.com).
# @author Alexis de Lattre <alexis.delattre@akretion.com>
# @author Sébastien BEAU <sebastien.beau@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Import Paypal Bank Statements",
'summary': 'Import Paypal CSV files as Bank Statements in Odoo',
"version": "12.0.1.0.0",
"category": "Accounting",
"website": "https://github.com/OCA/bank-statement-import",
"author": " Akretion, Odoo Community Association (OCA)",
"license": "AGPL-3",
"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",
]
}

View File

@@ -0,0 +1,116 @@
<?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>
<field name="float_thousands_sep">comma</field>
<field name="float_decimal_sep">dot</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>

View File

@@ -0,0 +1,339 @@
# 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 10:43+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"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
#: 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/wizards/account_bank_statement_import_paypal.py:191
#, python-format
msgid "PayPal Import %s > %s"
msgstr ""
#. 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 ""
#. 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
#: 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/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
#: 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 ""

View File

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

View File

@@ -0,0 +1,2 @@
from . import account_bank_statement_import_paypal_map
from . import account_journal

View File

@@ -0,0 +1,110 @@
# Copyright 2019 Tecnativa - Vicent Cubells
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models, api
class AccountBankStatementImportPaypalMap(models.Model):
_name = 'account.bank.statement.import.paypal.map'
_description = '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,
)
float_thousands_sep = fields.Selection(
[('dot', 'dot (.)'),
('comma', 'comma (,)'),
('none', 'none'),
],
string='Thousands separator',
# forward compatibility: this was the value assumed
# before the field was added.
default='dot',
required=True
)
float_decimal_sep = fields.Selection(
[('dot', 'dot (.)'),
('comma', 'comma (,)'),
('none', 'none'),
],
string='Decimals separator',
# forward compatibility: this was the value assumed
# before the field was added.
default='comma',
required=True
)
@api.onchange('float_thousands_sep')
def onchange_thousands_separator(self):
if 'dot' == self.float_thousands_sep == self.float_decimal_sep:
self.float_decimal_sep = 'comma'
elif 'comma' == self.float_thousands_sep == self.float_decimal_sep:
self.float_decimal_sep = 'dot'
@api.onchange('float_decimal_sep')
def onchange_decimal_separator(self):
if 'dot' == self.float_thousands_sep == self.float_decimal_sep:
self.float_thousands_sep = 'comma'
elif 'comma' == self.float_thousands_sep == self.float_decimal_sep:
self.float_thousands_sep = 'dot'
def _get_separators(self):
separators = {'dot': '.',
'comma': ',',
'none': '',
}
return (separators[self.float_thousands_sep],
separators[self.float_decimal_sep])
class AccountBankStatementImportPaypalMapLine(models.Model):
_name = 'account.bank.statement.import.paypal.map.line'
_description = '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",
)

View File

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

View File

@@ -0,0 +1,12 @@
* 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.

View File

@@ -0,0 +1,6 @@
* Alexis de Lattre <alexis.delattre@akretion.com>
* Sebastien BEAU <sebastien.beau@akretion.com>
* Tecnativa (https://www.tecnativa.com)
* Vicent Cubells <vicent.cubells@tecnativa.com>
* Victor M.M. Torres <victor.martin@tecnativa.com>

View File

@@ -0,0 +1,2 @@
This module allows you to import the Paypal CSV files in Odoo as bank
statements.

View File

@@ -0,0 +1,8 @@
To use this module, you need to:
#. Go to Paypal and download your Bank Statement
.. image:: account_bank_statement_import_paypal/static/description/paypal_backoffice.png
:alt: .
.. image:: static/description/paypal_backoffice.png
:alt: .

View File

@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 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
3 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -0,0 +1,451 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.14: http://docutils.sourceforge.net/" />
<title>Import Paypal Bank Statements</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="import-paypal-bank-statements">
<h1 class="title">Import Paypal Bank Statements</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! 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/12.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-12-0/bank-statement-import-12-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/12.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><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<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>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
<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 class="section" id="usage">
<h1><a class="toc-backref" href="#id2">Usage</a></h1>
<p>To use this module, you need to:</p>
<ol class="arabic simple">
<li>Go to Paypal and download your Bank Statement</li>
</ol>
<img alt="." src="https://raw.githubusercontent.com/OCA/bank-statement-import/12.0/account_bank_statement_import_paypal/account_bank_statement_import_paypal/static/description/paypal_backoffice.png" />
<img alt="." src="https://raw.githubusercontent.com/OCA/bank-statement-import/12.0/account_bank_statement_import_paypal/static/description/paypal_backoffice.png" />
</div>
<div class="section" id="bug-tracker">
<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>.
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
<a class="reference external" href="https://github.com/OCA/bank-statement-import/issues/new?body=module:%20account_bank_statement_import_paypal%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id5">Authors</a></h2>
<ul class="simple">
<li>Akretion</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id6">Contributors</a></h2>
<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>Sebastien BEAU &lt;<a class="reference external" href="mailto:sebastien.beau&#64;akretion.com">sebastien.beau&#64;akretion.com</a>&gt;</li>
<li>Tecnativa (<a class="reference external" href="https://www.tecnativa.com">https://www.tecnativa.com</a>)<ul>
<li>Vicent Cubells &lt;<a class="reference external" href="mailto:vicent.cubells&#64;tecnativa.com">vicent.cubells&#64;tecnativa.com</a>&gt;</li>
<li>Victor M.M. Torres &lt;<a class="reference external" href="mailto:victor.martin&#64;tecnativa.com">victor.martin&#64;tecnativa.com</a>&gt;</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id7">Maintainers</a></h2>
<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>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/bank-statement-import/tree/12.0/account_bank_statement_import_paypal">OCA/bank-statement-import</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

View File

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

View File

@@ -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","1,525.00","0","1,525.00","1,493.80","34731322767782103","","Agrolait","","","0","0","INV/2019/0003","24"
1 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
2 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
3 12/15/2018 22:07:53 CET Your payment USD 1,525.00 0 1,525.00 1,493.80 34731322767782103 Agrolait 0 0 INV/2019/0003 24

View File

@@ -0,0 +1,58 @@
# 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
paypal_map = self.env.ref(
'account_bank_statement_import_paypal.paypal_map'
)
self.journal.paypal_map_id = paypal_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')), 1489.2
)

View File

@@ -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>

View File

@@ -0,0 +1,67 @@
<?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"/>
<field name="float_thousands_sep"/>
<field name="float_decimal_sep"/>
</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>

View File

@@ -0,0 +1,2 @@
from . import create_map_lines_from_file
from . import account_bank_statement_import_paypal

View File

@@ -0,0 +1,297 @@
# Copyright 2014-2017 Akretion (http://www.akretion.com).
# @author Alexis de Lattre <alexis.delattre@akretion.com>
# @author Sébastien BEAU <sebastien.beau@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
from datetime import datetime
from odoo import _, api, fields, models
from odoo.exceptions import UserError
import re
from io import StringIO
_logger = logging.getLogger(__name__)
try:
import csv
except (ImportError, IOError) as err:
_logger.debug(err)
# Paypal header depend of the country the order are the same but the
# value are translated. You can add you header here
HEADERS = [
# French
'"Date","Heure","Fuseau horaire","Description","Devise","Avant commission"'
',"Commission","Net","Solde","Numéro de transaction","Adresse email de '
'l\'expéditeur","Nom","Nom de la banque","Compte bancaire","Montant des '
'frais de livraison et de traitement","TVA","Identifiant de facture",'
'"Numéro de la transaction de référence"',
# English
'"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"',
]
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'
@api.model
def _get_paypal_str_data(self, data_file):
if not isinstance(data_file, str):
data_file = data_file.decode(self._get_paypal_encoding())
return data_file.strip()
@api.model
def _paypal_convert_amount(self, amount_str):
if self.paypal_map_id:
thousands, decimal = self.paypal_map_id._get_separators()
else:
thousands, decimal = ',', '.'
valstr = re.sub(r'[^\d%s%s.-]' % (thousands, decimal), '', amount_str)
valstrdot = valstr.replace(thousands, '')
valstrdot = valstrdot.replace(decimal, '.')
return float(valstrdot)
@api.model
def _check_paypal(self, data_file):
data_file = self._get_paypal_str_data(data_file)
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):
rline = dict()
for item in range(len(line)):
paypal_map = self.mapped('paypal_map_id.map_line_ids')[item]
value = line[item]
if not paypal_map.field_to_assign:
continue
if paypal_map.date_format:
try:
value = fields.Date.to_string(
datetime.strptime(value, paypal_map.date_format))
except Exception:
raise UserError(
_("Date format of map file and Paypal date does "
"not match."))
rline[paypal_map.field_to_assign] = value
for field in ['commission', 'amount', 'balance']:
_logger.debug('Trying to convert %s to float' % rline[field])
try:
rline[field] = self._paypal_convert_amount(rline[field])
except Exception:
raise UserError(
_("Value '%s' for the field '%s' on line %d, "
"cannot be converted to float")
% (rline[field], field, idx))
return rline
def _parse_paypal_file(self, data_file):
data_file = self._get_paypal_str_data(data_file)
f = StringIO(data_file)
f.seek(0)
raw_lines = []
reader = csv.reader(f)
next(reader) # Drop header
for idx, line in enumerate(reader):
_logger.debug("Line %d: %s" % (idx, line))
raw_lines.append(self._convert_paypal_line_to_dict(idx, line))
return raw_lines
def _prepare_paypal_currency_vals(self, cline):
currencies = self.env['res.currency'].search(
[('name', '=', cline['currency'])])
if not currencies:
raise UserError(
_('currency %s on line %d cannot be found in odoo')
% (cline['currency'], cline['idx']))
return {
'amount_currency': cline['amount'],
'currency_id': currencies.id,
'currency': cline['currency'],
'partner_name': cline['partner_name'],
'description': cline['description'],
'email': cline['email'],
'transaction_id': cline['transaction_id'],
}
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'))
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 = []
for line in raw_lines:
if line['currency'] != currency.name:
currency_change_lines[line['transaction_id']] = line
else:
real_transactions.append(line)
for line in real_transactions:
# Check if the current transaction is linked with a
# transaction of currency change if yes merge the transaction
# as for odoo it's only one line
cline = currency_change_lines.get(line['origin_transaction_id'])
if cline:
# we update the current line with currency information
vals = self._prepare_paypal_currency_vals(cline)
line.update(vals)
return real_transactions
def _prepare_paypal_statement_line(self, fline):
if fline['bank_name']:
name = '|'.join([
fline['description'],
fline['bank_name'],
fline['bank_account']
])
else:
name = '|'.join([
fline['description'],
fline['partner_name'],
fline['email'],
fline['invoice_number'],
])
return {
'date': fline['date'],
'name': name,
'ref': fline['transaction_id'],
'unique_import_id':
fline['transaction_id'] + fline['date'] + fline['time'],
'amount': fline['amount'],
'bank_account_id': False,
'currency_id': fline.get('currency_id'),
'amount_currency': fline.get('amount_currency'),
}
def _prepare_paypal_statement(self, lines):
return {
'name':
_('PayPal Import %s > %s')
% (lines[0]['date'], lines[-1]['date']),
'date': lines[-1]['date'],
'balance_start':
lines[0]['balance'] -
lines[0]['amount'] -
lines[0]['commission'],
'balance_end_real': lines[-1]['balance'],
}
@api.model
def _parse_file(self, data_file):
""" Import a file in Paypal CSV format """
paypal = self._check_paypal(data_file)
if not paypal:
return super(AccountBankStatementImport, self)._parse_file(
data_file)
raw_lines = self._parse_paypal_file(data_file)
final_lines = self._post_process_statement_line(raw_lines)
vals_bank_statement = self._prepare_paypal_statement(final_lines)
transactions = []
commission_total = 0
for fline in final_lines:
commission_total += fline['commission']
vals_line = self._prepare_paypal_statement_line(fline)
_logger.debug("vals_line = %s" % vals_line)
transactions.append(vals_line)
if commission_total:
commission_line = {
'date': vals_bank_statement['date'],
'name': _('Paypal commissions'),
'ref': _('PAYPAL-COSTS'),
'amount': commission_total,
'unique_import_id': False,
}
transactions.append(commission_line)
vals_bank_statement['transactions'] = transactions
return None, None, [vals_bank_statement]
@api.model
def _get_paypal_partner(self, description, partner_name,
partner_email, invoice_number):
if invoice_number:
# In most case e-commerce case invoice_number
# will contain the sale order number
sale = self.env['sale.order'].search([
('name', '=', invoice_number)])
if sale and len(sale) == 1:
return sale.partner_id.commercial_partner_id
invoice = self.env['account.invoice'].search([
('number', '=', invoice_number)])
if invoice and len(invoice) == 1:
return invoice.partner_id.commercial_partner_id
if partner_email:
partner = self.env['res.partner'].search([
('email', '=', partner_email),
('parent_id', '=', False)])
if partner and len(partner) == 1:
return partner.commercial_partner_id
if partner_name:
partner = self.env['res.partner'].search([
('name', '=ilike', partner_name)])
if partner and len(partner) == 1:
return partner.commercial_partner_id
return None
@api.model
def _complete_paypal_statement_line(self, line):
_logger.debug('Process line %s', line['name'])
info = line['name'].split('|')
if len(info) == 4:
partner = self._get_paypal_partner(*info)
if partner:
return {
'partner_id': partner.id,
'account_id': partner.property_account_receivable_id.id,
}
return None
@api.model
def _complete_stmts_vals(self, stmts_vals, journal_id, account_number):
""" Match the partner from paypal information """
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

View File

@@ -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>

View File

@@ -0,0 +1,39 @@
# 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'
_description = '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

View File

@@ -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>