Merge remote-tracking branch 'origin/9.0' into 9.0-account-transaction-base-import

This commit is contained in:
Matthieu Dietrich
2016-04-28 14:15:40 +02:00
20 changed files with 326 additions and 291 deletions

View File

@@ -8,9 +8,12 @@ cache: pip
addons: addons:
apt: apt:
sources:
- pov-wkhtmltopdf
packages: packages:
- expect-dev # provides unbuffer utility - expect-dev # provides unbuffer utility
- python-lxml # because pip installation is slow - python-lxml # because pip installation is slow
- wkhtmltopdf
env: env:
global: global:

View File

@@ -24,6 +24,12 @@ __Version 7.0 and earlier :__
[//]: # (addons) [//]: # (addons)
Available addons
----------------
addon | version | summary
--- | --- | ---
[base_transaction_id](base_transaction_id/) | 9.0.1.0.0 | Base transaction id for financial institutes
Unported addons Unported addons
--------------- ---------------
addon | version | summary addon | version | summary
@@ -53,6 +59,5 @@ addon | version | summary
[account_statement_so_completion](account_statement_so_completion/) | 0.1 (unported) | Bank statement Sale Order completion [account_statement_so_completion](account_statement_so_completion/) | 0.1 (unported) | Bank statement Sale Order completion
[account_statement_transactionid_completion](account_statement_transactionid_completion/) | 1.0 (unported) | Bank statement completion from transaction ID [account_statement_transactionid_completion](account_statement_transactionid_completion/) | 1.0 (unported) | Bank statement completion from transaction ID
[account_statement_transactionid_import](account_statement_transactionid_import/) | 1.0 (unported) | Bank statement transactionID import [account_statement_transactionid_import](account_statement_transactionid_import/) | 1.0 (unported) | Bank statement transactionID import
[base_transaction_id](base_transaction_id/) | 8.0.1.0.0 (unported) | Base transaction id for financial institutes
[//]: # (end addons) [//]: # (end addons)

View File

@@ -0,0 +1,55 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
============================================
Base transaction id for financial institutes
============================================
Adds transaction id to invoice and sale models and views.
On Sales order, you can specify the transaction ID used
for the payment and it will be propagated to the invoice (even if made from packing).
This is mostly used for e-commerce handling.
You can then add a mapping on that SO field to save the e-commerce financial
Transaction ID into the Odoo sale order field.
The main purpose is to ease the reconciliation process and be able to find the partner
when importing the bank statement.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/bank-statement-reconcile/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.
Credits
=======
Contributors
------------
* Yannick Vaucher <yannick.vaucher@camptocamp.com>
* Joël Grand-Guillaume <joel.grandguillaume@camptocamp.com>
* Alexandre Fayolle <alexandre.fayolle@camptocamp.com>
* Guewen Baconnier <guewen.baconnier@camptocamp.com>
* Pedro Baeza <pedro.baezo@gmail.com>
* Lorenzo Battistini <lorenzo.battistini@agilebg.com>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
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.
To contribute to this module, please visit http://odoo-community.org.

View File

@@ -1,26 +1,4 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*# -*- coding: utf-8 -*-
############################################################################## # © 2012-2015 Yannick Vaucher (Camptocamp)
# # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
# Author: Yannick Vaucher (Camptocamp) from . import models
# Copyright 2012 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from . import invoice
from . import sale
from . import stock
from . import account_move
from . import account_bank_statement

View File

@@ -1,26 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*# -*- coding: utf-8 -*-
############################################################################## # © 2012 Yannick Vaucher (Camptocamp)
# # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
# Author: Yannick Vaucher (Camptocamp)
# Copyright 2012 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{'name': 'Base transaction id for financial institutes', {'name': 'Base transaction id for financial institutes',
'version': '8.0.1.0.0', 'version': '9.0.1.0.0',
'author': "Camptocamp,Odoo Community Association (OCA)", 'author': "Camptocamp,Odoo Community Association (OCA)",
'maintainer': 'Camptocamp', 'maintainer': 'Camptocamp',
'category': 'Hidden/Dependency', 'category': 'Hidden/Dependency',
@@ -30,27 +12,15 @@
'stock_account', 'stock_account',
'sale_stock', 'sale_stock',
], ],
'description': """
Adds transaction id to invoice and sale models and views.
On Sales order, you can specify the transaction ID used
for the payment and it will be propagated to the invoice
(even if made from packing).
This is mostly used for e-commerce handling.
You can then add a mapping on that SO field to save
the e-commerce financial Transaction ID into the
OpenERP sale order field.
The main purpose is to ease the reconciliation process and
be able to find the partner when importing the bank statement.
""",
'website': 'http://www.openerp.com', 'website': 'http://www.openerp.com',
'data': [ 'data': [
'invoice_view.xml', 'views/invoice.xml',
'sale_view.xml', 'views/sale.xml',
'account_move_line_view.xml', 'views/account_move_line.xml',
'views/base_transaction_id.xml', 'views/base_transaction_id.xml',
], ],
'test': [], 'test': [],
'installable': False, 'installable': True,
'images': [], 'images': [],
'auto_install': False, 'auto_install': False,
'license': 'AGPL-3', 'license': 'AGPL-3',

View File

@@ -1,61 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Author: Guewen Baconnier
# Copyright 2014 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.osv import orm
class account_bank_statement_line(orm.Model):
_inherit = 'account.bank.statement.line'
def _domain_move_lines_for_reconciliation(self, cr, uid, st_line,
excluded_ids=None, str=False,
additional_domain=None,
context=None):
_super = super(account_bank_statement_line, self)
_get_domain = _super._domain_move_lines_for_reconciliation
domain = _get_domain(cr, uid, st_line, excluded_ids=excluded_ids,
str=str, additional_domain=additional_domain,
context=context)
if not str and str != '/':
return domain
domain = domain[:]
domain.insert(-1, '|')
domain.append(('transaction_ref', 'ilike', str))
return domain
def _domain_reconciliation_proposition(self, cr, uid, st_line,
excluded_ids=None, context=None):
_super = super(account_bank_statement_line, self)
_get_domain = _super._domain_reconciliation_proposition
domain = _get_domain(cr, uid, st_line, excluded_ids=excluded_ids,
context=context)
new_domain = []
for criterion in domain:
if len(criterion) == 3:
field, op, value = criterion
if (field, op) == ('ref', '='):
new_domain += [
'|',
('transaction_ref', '=', value),
]
new_domain.append(criterion)
return new_domain

View File

@@ -1,56 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Author: Guewen Baconnier
# Copyright 2014 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.osv import orm, fields
class account_move_line(orm.Model):
_inherit = 'account.move.line'
_columns = {
'transaction_ref': fields.char('Transaction Ref.',
select=True),
}
def copy_data(self, cr, uid, id, default=None, context=None):
if default is None:
default = {}
default['transaction_ref'] = False
_super = super(account_move_line, self)
return _super.copy_data(cr, uid, id, default=default, context=context)
def prepare_move_lines_for_reconciliation_widget(self, cr, uid, lines,
target_currency=False,
target_date=False,
context=None):
_super = super(account_move_line, self)
prepare = _super.prepare_move_lines_for_reconciliation_widget
prepared_lines = []
for line in lines:
# The super method loop over the lines and returns a list of
# prepared lines. Here we'll have 1 line per call to super.
# If we called super on the whole list, we would need to
# browse again the lines, or match the 'lines' vs
# 'prepared_lines' to update the transaction_ref.
vals = prepare(cr, uid, [line], target_currency=target_currency,
target_date=target_date, context=context)[0]
vals['transaction_ref'] = line.transaction_ref
prepared_lines.append(vals)
return prepared_lines

View File

@@ -0,0 +1,69 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_transaction_id
#
# Translators:
# Rudolf Schnapka <rs@techno-flex.de>, 2015
msgid ""
msgstr ""
"Project-Id-Version: bank-statement-reconcile (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-14 09:25+0000\n"
"PO-Revision-Date: 2015-11-25 08:30+0000\n"
"Last-Translator: Rudolf Schnapka <rs@techno-flex.de>\n"
"Language-Team: German (http://www.transifex.com/oca/OCA-bank-statement-reconcile-8-0/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_transaction_id
#: model:ir.model,name:base_transaction_id.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Kontoauszugzeile"
#. module: base_transaction_id
#: model:ir.model,name:base_transaction_id.model_account_invoice
msgid "Invoice"
msgstr "Rechnung"
#. module: base_transaction_id
#: model:ir.model,name:base_transaction_id.model_account_move_line
msgid "Journal Items"
msgstr "Journalposten"
#. module: base_transaction_id
#: model:ir.model,name:base_transaction_id.model_stock_picking
msgid "Picking List"
msgstr "Kommissionierschein"
#. module: base_transaction_id
#: view:account.move.line:base_transaction_id.view_move_line_form
msgid "Reconciliation"
msgstr "Ausgleich"
#. module: base_transaction_id
#: model:ir.model,name:base_transaction_id.model_sale_order
msgid "Sales Order"
msgstr "Verkaufsauftrag"
#. module: base_transaction_id
#: field:account.invoice,transaction_id:0 field:sale.order,transaction_id:0
msgid "Transaction ID"
msgstr "Transaktionskennung"
#. module: base_transaction_id
#: help:account.invoice,transaction_id:0
msgid "Transaction ID from the financial institute"
msgstr "Transaktionskennung des Kreditinstituts"
#. module: base_transaction_id
#: field:account.move.line,transaction_ref:0
msgid "Transaction Ref."
msgstr "Transaktionsreferenz"
#. module: base_transaction_id
#: help:sale.order,transaction_id:0
msgid "Transaction id from the financial institute"
msgstr "Transaktionskennung des Kreditinstituts"

View File

@@ -0,0 +1,68 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_transaction_id
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: bank-statement-reconcile (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-10-14 09:25+0000\n"
"PO-Revision-Date: 2015-07-22 06:46+0000\n"
"Last-Translator: <>\n"
"Language-Team: Italian (http://www.transifex.com/oca/OCA-bank-statement-reconcile-8-0/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_transaction_id
#: model:ir.model,name:base_transaction_id.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Linea estratto conto"
#. module: base_transaction_id
#: model:ir.model,name:base_transaction_id.model_account_invoice
msgid "Invoice"
msgstr ""
#. module: base_transaction_id
#: model:ir.model,name:base_transaction_id.model_account_move_line
msgid "Journal Items"
msgstr ""
#. module: base_transaction_id
#: model:ir.model,name:base_transaction_id.model_stock_picking
msgid "Picking List"
msgstr ""
#. module: base_transaction_id
#: view:account.move.line:base_transaction_id.view_move_line_form
msgid "Reconciliation"
msgstr ""
#. module: base_transaction_id
#: model:ir.model,name:base_transaction_id.model_sale_order
msgid "Sales Order"
msgstr ""
#. module: base_transaction_id
#: field:account.invoice,transaction_id:0 field:sale.order,transaction_id:0
msgid "Transaction ID"
msgstr ""
#. module: base_transaction_id
#: help:account.invoice,transaction_id:0
msgid "Transaction ID from the financial institute"
msgstr ""
#. module: base_transaction_id
#: field:account.move.line,transaction_ref:0
msgid "Transaction Ref."
msgstr ""
#. module: base_transaction_id
#: help:sale.order,transaction_id:0
msgid "Transaction id from the financial institute"
msgstr ""

View File

@@ -0,0 +1,7 @@
# -*- coding: utf-8 -*# -*- coding: utf-8 -*-
# © 2012-2015 Yannick Vaucher (Camptocamp)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import invoice
from . import sale
from . import account_move
from . import account_bank_statement_line

View File

@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# © 2016 Yannick Vaucher (Camptocamp)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from openerp import api, models
class AccountBankStatementLine(models.Model):
_inherit = 'account.bank.statement.line'
@api.multi
def get_reconciliation_proposition(self, excluded_ids=None):
""" Look for transaction_ref to give them as proposition move line """
if self.name:
# If the transaction has no partner, look for match in payable and
# receivable account anyway
overlook_partner = not self.partner_id
domain = [('transaction_ref', 'ilike', self.name)]
match_recs = self.get_move_lines_for_reconciliation(
excluded_ids=excluded_ids, limit=2, additional_domain=domain,
overlook_partner=overlook_partner)
if match_recs and len(match_recs) == 1:
return match_recs
_super = super(AccountBankStatementLine, self)
return _super.get_reconciliation_proposition(excluded_ids=excluded_ids)

View File

@@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
# © 2014 Guewen Baconnier (Camptocamp)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from openerp import models, fields, api
from openerp.osv import expression
class AccountMoveLine(models.Model):
_inherit = 'account.move.line'
transaction_ref = fields.Char(
'Transaction Ref.',
index=True,
copy=False
)
@api.multi
def prepare_move_lines_for_reconciliation_widget(self,
target_currency=False,
target_date=False):
prepared_lines = []
for line in self:
_super = super(AccountMoveLine, line)
# The super method loop over the lines and returns a list of
# prepared lines. Here we'll have 1 line per call to super.
# If we called super on the whole list, we would need to
# browse again the lines, or match the 'lines' vs
# 'prepared_lines' to update the transaction_ref.
vals = _super.prepare_move_lines_for_reconciliation_widget(
target_currency=target_currency,
target_date=target_date)[0]
vals['transaction_ref'] = line.transaction_ref
prepared_lines.append(vals)
return prepared_lines
@api.model
def domain_move_lines_for_reconciliation(self, excluded_ids=None,
str=False):
""" Add transaction_ref in search of move lines"""
_super = super(AccountMoveLine, self)
_get_domain = _super.domain_move_lines_for_reconciliation
domain = _get_domain(excluded_ids=excluded_ids, str=str)
if not str and str != '/':
return domain
domain_trans_ref = [('transaction_ref', 'ilike', str)]
return expression.OR([domain, domain_trans_ref])

View File

@@ -1,24 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
############################################################################## # © 2011-2012 Nicolas Bessi (Camptocamp)
# # © 2012-2015 Yannick Vaucher (Camptocamp)
# Author: Nicolas Bessi # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
# Copyright 2011-2012 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import models, fields, api from openerp import models, fields, api

View File

@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# © 2011-2012 Nicolas Bessi (Camptocamp)
# © 2012-2015 Yannick Vaucher (Camptocamp)
from openerp import models, fields, api
class SaleOrder(models.Model):
_inherit = 'sale.order'
transaction_id = fields.Char(
'Transaction ID',
required=False,
copy=False,
help="Transaction id from the financial institute"
)
@api.multi
def _prepare_invoice(self):
""" Propagate the transaction_id from the sale order to the invoice """
invoice_vals = super(SaleOrder, self)._prepare_invoice()
invoice_vals['transaction_id'] = self.transaction_id
return invoice_vals

View File

@@ -1,48 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Author: Nicolas Bessi
# Copyright 2011-2012 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.osv import orm, fields
class SaleOrder(orm.Model):
_inherit = 'sale.order'
_columns = {
'transaction_id': fields.char(
'Transaction ID',
required=False,
help="Transaction id from the financial institute"),
}
def copy_data(self, cr, uid, id, default=None, context=None):
if default is None:
default = {}
default['transaction_id'] = False
_super = super(SaleOrder, self)
return _super.copy_data(cr, uid, id, default=default, context=context)
def _prepare_invoice(self, cr, uid, order, lines, context=None):
""" Propagate the transaction_id from the sale order to the invoice """
_super = super(SaleOrder, self)
invoice_vals = _super._prepare_invoice(cr, uid, order, lines,
context=context)
invoice_vals['transaction_id'] = order.transaction_id
return invoice_vals

View File

@@ -1,11 +1,14 @@
openerp.base_transaction_id = function (instance) { odoo.define('base_transaction_id.base_transaction_id', function (require) {
instance.web.account.bankStatementReconciliationLine.include({ var AccountReconciliation = require('account.reconciliation');
decorateMoveLine: function(line, currency_id) {
this._super(line, currency_id); AccountReconciliation.bankStatementReconciliation.include({
decorateMoveLine: function(line) {
this._super(line);
if (line.transaction_ref) { if (line.transaction_ref) {
line.q_label += ' (' + line.transaction_ref + ')'; line.q_label += ' (' + line.transaction_ref + ')';
} }
}, },
}); });
};
});

View File

@@ -1,34 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Author: Nicolas Bessi
# Copyright 2011-2012 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp.osv import orm
class StockPicking(orm.Model):
_inherit = "stock.picking"
def _create_invoice_from_picking(self, cr, uid, picking, vals,
context=None):
""" Propagate the transaction ID from sale to invoice """
vals['transaction_id'] = picking.sale_id.transaction_id
_super = super(StockPicking, self)
return _super._create_invoice_from_picking(cr, uid, picking, vals,
context=context)

View File

@@ -6,9 +6,9 @@
<field name="model">account.move.line</field> <field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_form"/> <field name="inherit_id" ref="account.view_move_line_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<group string="Reconciliation" position="inside"> <xpath expr="//field[@name='reconciled']/.." position="after">
<field name="transaction_ref"/> <field name="transaction_ref"/>
</group> </xpath>
</field> </field>
</record> </record>
</data> </data>