[MIG] account_mass_reconcile: Migration to odoo 11
parent
934c823f76
commit
9d01cc9e77
|
@ -36,13 +36,13 @@ new mass reconcile.
|
||||||
|
|
||||||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
||||||
:alt: Try me on Runbot
|
:alt: Try me on Runbot
|
||||||
:target: https://runbot.odoo-community.org/runbot/98/10.0
|
:target: https://runbot.odoo-community.org/runbot/98/11.0
|
||||||
|
|
||||||
|
|
||||||
Bug Tracker
|
Bug Tracker
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/bank-statement-reconcile/issues>`_.
|
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-reconcile/issues>`_.
|
||||||
In case of trouble, please check there if your issue has already been reported.
|
In case of trouble, please check there if your issue has already been reported.
|
||||||
If you spotted it first, help us smashing it by providing a detailed and welcomed feedback.
|
If you spotted it first, help us smashing it by providing a detailed and welcomed feedback.
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ Contributors
|
||||||
* Vincent Renaville <vincent.renaville@camptocamp.com>
|
* Vincent Renaville <vincent.renaville@camptocamp.com>
|
||||||
* Alexandre Fayolle <alexandre.fayolle@camptocamp.com>
|
* Alexandre Fayolle <alexandre.fayolle@camptocamp.com>
|
||||||
* Joël Grand-Guillaume <joel.grandguillaume@camptocamp.com>
|
* Joël Grand-Guillaume <joel.grandguillaume@camptocamp.com>
|
||||||
* Nicolas Bessis <nicolas.bessi@camptocamp.com>
|
* Nicolas Bessi <nicolas.bessi@camptocamp.com>
|
||||||
* Pedro M.Baeza <pedro.baeza@gmail.com>
|
* Pedro M.Baeza <pedro.baeza@gmail.com>
|
||||||
* Matthieu Dietrich <matthieu.dietrich@camptocamp.com>
|
* Matthieu Dietrich <matthieu.dietrich@camptocamp.com>
|
||||||
* Leonardo Pistone <leonardo.pistone@camptocamp.com>
|
* Leonardo Pistone <leonardo.pistone@camptocamp.com>
|
||||||
|
@ -69,6 +69,7 @@ Contributors
|
||||||
* Frédéric Clémenti <frederic.clementi@camptocamp.com>
|
* Frédéric Clémenti <frederic.clementi@camptocamp.com>
|
||||||
* Damien Crier <damien.crier@camptocamp.com>
|
* Damien Crier <damien.crier@camptocamp.com>
|
||||||
* Akim Juillerat <akim.juillerat@camptocamp.com>
|
* Akim Juillerat <akim.juillerat@camptocamp.com>
|
||||||
|
* Mykhailo Panarin <m.panarin@mobilunity.com>
|
||||||
|
|
||||||
Maintainer
|
Maintainer
|
||||||
----------
|
----------
|
||||||
|
|
|
@ -1,3 +1 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
|
|
|
@ -1,23 +1,22 @@
|
||||||
# -*- coding: utf-8 -*-
|
# Copyright 2012-2016 Camptocamp SA
|
||||||
# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich)
|
# Copyright 2010 Sébastien Beau
|
||||||
# © 2010 Sébastien Beau
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "Mass Reconcile",
|
"name": "Mass Reconcile",
|
||||||
"version": "10.0.1.0.0",
|
"version": "11.0.1.0.0",
|
||||||
"depends": ["account"],
|
"depends": [
|
||||||
|
"account_invoicing",
|
||||||
|
],
|
||||||
"author": "Akretion,Camptocamp,Odoo Community Association (OCA)",
|
"author": "Akretion,Camptocamp,Odoo Community Association (OCA)",
|
||||||
"website": "http://www.akretion.com/",
|
"website": "https://github.com/OCA/account-reconcile",
|
||||||
"category": "Finance",
|
"category": "Finance",
|
||||||
"data": ["views/mass_reconcile.xml",
|
"data": [
|
||||||
"views/mass_reconcile_history_view.xml",
|
"views/mass_reconcile.xml",
|
||||||
"security/ir_rule.xml",
|
"views/mass_reconcile_history_view.xml",
|
||||||
"security/ir.model.access.csv",
|
"security/ir_rule.xml",
|
||||||
"views/res_config_view.xml",
|
"security/ir.model.access.csv",
|
||||||
],
|
"views/res_config_view.xml",
|
||||||
|
],
|
||||||
'license': 'AGPL-3',
|
'license': 'AGPL-3',
|
||||||
"auto_install": False,
|
|
||||||
'installable': True,
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,602 +0,0 @@
|
||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * account_mass_reconcile
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Odoo Server 8.0\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2015-06-12 14:08+0000\n"
|
|
||||||
"PO-Revision-Date: 2015-06-12 14:08+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_mass_reconcile
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search
|
|
||||||
msgid "7 Days"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: model:ir.actions.act_window,help:account_mass_reconcile.action_account_mass_reconcile
|
|
||||||
msgid "<p class=\"oe_view_nocontent_create\">\n"
|
|
||||||
" Click to add a reconciliation profile.\n"
|
|
||||||
" </p><p>\n"
|
|
||||||
" A reconciliation profile specifies, for one account, how\n"
|
|
||||||
" the entries should be reconciled.\n"
|
|
||||||
" You can select one or many reconciliation methods which will\n"
|
|
||||||
" be run sequentially to match the entries between them.\n"
|
|
||||||
" </p>\n"
|
|
||||||
" "
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,account:0
|
|
||||||
#: field:mass.reconcile.advanced,account_id:0
|
|
||||||
#: field:mass.reconcile.advanced.ref,account_id:0
|
|
||||||
#: field:mass.reconcile.base,account_id:0
|
|
||||||
#: field:mass.reconcile.simple,account_id:0
|
|
||||||
#: field:mass.reconcile.simple.name,account_id:0
|
|
||||||
#: field:mass.reconcile.simple.partner,account_id:0
|
|
||||||
#: field:mass.reconcile.simple.reference,account_id:0
|
|
||||||
msgid "Account"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,account_lost_id:0
|
|
||||||
#: field:mass.reconcile.advanced,account_lost_id:0
|
|
||||||
#: field:mass.reconcile.advanced.ref,account_lost_id:0
|
|
||||||
#: field:mass.reconcile.base,account_lost_id:0
|
|
||||||
#: field:mass.reconcile.options,account_lost_id:0
|
|
||||||
#: field:mass.reconcile.simple,account_lost_id:0
|
|
||||||
#: field:mass.reconcile.simple.name,account_lost_id:0
|
|
||||||
#: field:mass.reconcile.simple.partner,account_lost_id:0
|
|
||||||
#: field:mass.reconcile.simple.reference,account_lost_id:0
|
|
||||||
msgid "Account Lost"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,account_profit_id:0
|
|
||||||
#: field:mass.reconcile.advanced,account_profit_id:0
|
|
||||||
#: field:mass.reconcile.advanced.ref,account_profit_id:0
|
|
||||||
#: field:mass.reconcile.base,account_profit_id:0
|
|
||||||
#: field:mass.reconcile.options,account_profit_id:0
|
|
||||||
#: field:mass.reconcile.simple,account_profit_id:0
|
|
||||||
#: field:mass.reconcile.simple.name,account_profit_id:0
|
|
||||||
#: field:mass.reconcile.simple.partner,account_profit_id:0
|
|
||||||
#: field:mass.reconcile.simple.reference,account_profit_id:0
|
|
||||||
msgid "Account Profit"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: help:account.mass.reconcile.method,analytic_account_id:0
|
|
||||||
#: help:mass.reconcile.base,analytic_account_id:0
|
|
||||||
#: help:mass.reconcile.options,analytic_account_id:0
|
|
||||||
#: help:mass.reconcile.simple,analytic_account_id:0
|
|
||||||
#: help:mass.reconcile.simple.name,analytic_account_id:0
|
|
||||||
#: help:mass.reconcile.simple.partner,analytic_account_id:0
|
|
||||||
#: help:mass.reconcile.simple.reference,analytic_account_id:0
|
|
||||||
msgid "Analytic accountfor the write-off"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,analytic_account_id:0
|
|
||||||
#: field:mass.reconcile.base,analytic_account_id:0
|
|
||||||
#: field:mass.reconcile.options,analytic_account_id:0
|
|
||||||
#: field:mass.reconcile.simple,analytic_account_id:0
|
|
||||||
#: field:mass.reconcile.simple.name,analytic_account_id:0
|
|
||||||
#: field:mass.reconcile.simple.partner,analytic_account_id:0
|
|
||||||
#: field:mass.reconcile.simple.reference,analytic_account_id:0
|
|
||||||
msgid "Analytic_account"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree
|
|
||||||
msgid "Automatic Mass Reconcile"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search
|
|
||||||
msgid "Automatic Mass Reconcile History"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_form
|
|
||||||
#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_tree
|
|
||||||
msgid "Automatic Mass Reconcile Method"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: model:ir.model,name:account_mass_reconcile.model_res_company
|
|
||||||
msgid "Companies"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,company_id:0
|
|
||||||
#: field:account.mass.reconcile.method,company_id:0
|
|
||||||
#: field:mass.reconcile.history,company_id:0
|
|
||||||
msgid "Company"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Configuration"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,create_uid:0
|
|
||||||
#: field:account.mass.reconcile.method,create_uid:0
|
|
||||||
#: field:mass.reconcile.history,create_uid:0
|
|
||||||
#: field:mass.reconcile.simple.name,create_uid:0
|
|
||||||
#: field:mass.reconcile.simple.partner,create_uid:0
|
|
||||||
#: field:mass.reconcile.simple.reference,create_uid:0
|
|
||||||
msgid "Created by"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,create_date:0
|
|
||||||
#: field:account.mass.reconcile.method,create_date:0
|
|
||||||
#: field:mass.reconcile.history,create_date:0
|
|
||||||
#: field:mass.reconcile.simple.name,create_date:0
|
|
||||||
#: field:mass.reconcile.simple.partner,create_date:0
|
|
||||||
#: field:mass.reconcile.simple.reference,create_date:0
|
|
||||||
msgid "Created on"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search
|
|
||||||
msgid "Date"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,date_base_on:0
|
|
||||||
#: field:mass.reconcile.advanced,date_base_on:0
|
|
||||||
#: field:mass.reconcile.advanced.ref,date_base_on:0
|
|
||||||
#: field:mass.reconcile.base,date_base_on:0
|
|
||||||
#: field:mass.reconcile.options,date_base_on:0
|
|
||||||
#: field:mass.reconcile.simple,date_base_on:0
|
|
||||||
#: field:mass.reconcile.simple.name,date_base_on:0
|
|
||||||
#: field:mass.reconcile.simple.partner,date_base_on:0
|
|
||||||
#: field:mass.reconcile.simple.reference,date_base_on:0
|
|
||||||
msgid "Date of reconciliation"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: help:account.mass.reconcile,message_last_post:0
|
|
||||||
msgid "Date of the last message posted on the record."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree
|
|
||||||
msgid "Display items partially reconciled on the last run"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree
|
|
||||||
msgid "Display items reconciled on the last run"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: model:ir.actions.act_window,name:account_mass_reconcile.action_account_mass_reconcile
|
|
||||||
#: model:ir.ui.menu,name:account_mass_reconcile.menu_mass_reconcile
|
|
||||||
msgid "Mass Automatic Reconcile"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: model:ir.actions.act_window,name:account_mass_reconcile.action_mass_reconcile_history
|
|
||||||
msgid "Mass Automatic Reconcile History"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: code:addons/account_mass_reconcile/mass_reconcile.py:329
|
|
||||||
#, python-format
|
|
||||||
msgid "Error"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,filter:0
|
|
||||||
#: field:mass.reconcile.advanced,filter:0
|
|
||||||
#: field:mass.reconcile.advanced.ref,filter:0
|
|
||||||
#: field:mass.reconcile.base,filter:0
|
|
||||||
#: field:mass.reconcile.options,filter:0
|
|
||||||
#: field:mass.reconcile.simple,filter:0
|
|
||||||
#: field:mass.reconcile.simple.name,filter:0
|
|
||||||
#: field:mass.reconcile.simple.partner,filter:0
|
|
||||||
#: field:mass.reconcile.simple.reference,filter:0
|
|
||||||
msgid "Filter"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,message_follower_ids:0
|
|
||||||
msgid "Followers"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,income_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.base,income_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.options,income_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.simple,income_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.simple.name,income_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.simple.partner,income_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.simple.reference,income_exchange_account_id:0
|
|
||||||
msgid "Gain ExchangeRate Account"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Go to partial reconciled items"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree
|
|
||||||
msgid "Go to partially reconciled items"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree
|
|
||||||
msgid "Go to reconciled items"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Go to unreconciled items"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search
|
|
||||||
msgid "Group By..."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
#: field:account.mass.reconcile,history_ids:0
|
|
||||||
msgid "History"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: model:ir.actions.act_window,name:account_mass_reconcile.act_mass_reconcile_to_history
|
|
||||||
msgid "History Details"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: help:account.mass.reconcile,message_summary:0
|
|
||||||
msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:res.company,reconciliation_commit_every:0
|
|
||||||
msgid "How often to commit when performing automaticreconciliation."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,id:0
|
|
||||||
#: field:account.mass.reconcile.method,id:0
|
|
||||||
#: field:mass.reconcile.base,id:0
|
|
||||||
#: field:mass.reconcile.history,id:0
|
|
||||||
#: field:mass.reconcile.options,id:0
|
|
||||||
#: field:mass.reconcile.simple,id:0
|
|
||||||
#: field:mass.reconcile.simple.name,id:0
|
|
||||||
#: field:mass.reconcile.simple.partner,id:0
|
|
||||||
#: field:mass.reconcile.simple.reference,id:0
|
|
||||||
msgid "ID"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: help:account.mass.reconcile,message_unread:0
|
|
||||||
msgid "If checked new messages require your attention."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Information"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,message_is_follower:0
|
|
||||||
msgid "Is a Follower"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,journal_id:0
|
|
||||||
#: field:mass.reconcile.advanced,journal_id:0
|
|
||||||
#: field:mass.reconcile.advanced.ref,journal_id:0
|
|
||||||
#: field:mass.reconcile.base,journal_id:0
|
|
||||||
#: field:mass.reconcile.options,journal_id:0
|
|
||||||
#: field:mass.reconcile.simple,journal_id:0
|
|
||||||
#: field:mass.reconcile.simple.name,journal_id:0
|
|
||||||
#: field:mass.reconcile.simple.partner,journal_id:0
|
|
||||||
#: field:mass.reconcile.simple.reference,journal_id:0
|
|
||||||
msgid "Journal"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,message_last_post:0
|
|
||||||
msgid "Last Message Date"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,write_uid:0
|
|
||||||
#: field:account.mass.reconcile.method,write_uid:0
|
|
||||||
#: field:mass.reconcile.history,write_uid:0
|
|
||||||
#: field:mass.reconcile.simple.name,write_uid:0
|
|
||||||
#: field:mass.reconcile.simple.partner,write_uid:0
|
|
||||||
#: field:mass.reconcile.simple.reference,write_uid:0
|
|
||||||
msgid "Last Updated by"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,write_date:0
|
|
||||||
#: field:account.mass.reconcile.method,write_date:0
|
|
||||||
#: field:mass.reconcile.history,write_date:0
|
|
||||||
#: field:mass.reconcile.simple.name,write_date:0
|
|
||||||
#: field:mass.reconcile.simple.partner,write_date:0
|
|
||||||
#: field:mass.reconcile.simple.reference,write_date:0
|
|
||||||
msgid "Last Updated on"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: help:res.company,reconciliation_commit_every:0
|
|
||||||
msgid "Leave zero to commit only at the end of the process."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,expense_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.base,expense_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.options,expense_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.simple,expense_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.simple.name,expense_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.simple.partner,expense_exchange_account_id:0
|
|
||||||
#: field:mass.reconcile.simple.reference,expense_exchange_account_id:0
|
|
||||||
msgid "Loss ExchangeRate Account"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same name to be reconciled."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same partner to be reconciled."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same reference to be reconciled."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,message_ids:0
|
|
||||||
msgid "Messages"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: help:account.mass.reconcile,message_ids:0
|
|
||||||
msgid "Messages and communication history"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,reconcile_method:0
|
|
||||||
msgid "Method"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,name:0
|
|
||||||
msgid "Name"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.config.settings:account_mass_reconcile.view_account_config
|
|
||||||
msgid "Options"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: code:addons/account_mass_reconcile/mass_reconcile_history.py:108
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form
|
|
||||||
#: field:mass.reconcile.history,reconcile_ids:0
|
|
||||||
#: field:mass.reconcile.history,reconcile_partial_ids:0
|
|
||||||
#, python-format
|
|
||||||
msgid "Partial Reconciliations"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: code:addons/account_mass_reconcile/mass_reconcile.py:368
|
|
||||||
#, python-format
|
|
||||||
msgid "Partial reconciled items"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:mass.reconcile.history,partial_line_ids:0
|
|
||||||
msgid "Partially Reconciled Items"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Profile Information"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:mass.reconcile.history,mass_reconcile_id:0
|
|
||||||
msgid "Reconcile Profile"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:mass.reconcile.history,reconcile_line_ids:0
|
|
||||||
msgid "Reconciled Items"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.config.settings:account_mass_reconcile.view_account_config
|
|
||||||
msgid "Reconciliation"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search
|
|
||||||
msgid "Reconciliation Profile"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: code:addons/account_mass_reconcile/mass_reconcile_history.py:105
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form
|
|
||||||
#, python-format
|
|
||||||
msgid "Reconciliations"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search
|
|
||||||
msgid "Reconciliations of last 7 days"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:mass.reconcile.advanced,partner_ids:0
|
|
||||||
#: field:mass.reconcile.advanced.ref,partner_ids:0
|
|
||||||
#: field:mass.reconcile.base,partner_ids:0
|
|
||||||
#: field:mass.reconcile.simple,partner_ids:0
|
|
||||||
#: field:mass.reconcile.simple.name,partner_ids:0
|
|
||||||
#: field:mass.reconcile.simple.partner,partner_ids:0
|
|
||||||
#: field:mass.reconcile.simple.reference,partner_ids:0
|
|
||||||
msgid "Restrict on partners"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:mass.reconcile.history,date:0
|
|
||||||
msgid "Run date"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,sequence:0
|
|
||||||
msgid "Sequence"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Simple. Amount and Name"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Simple. Amount and Partner"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Simple. Amount and Reference"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree
|
|
||||||
msgid "Start Auto Reconcilation"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
|
|
||||||
msgid "Start Auto Reconciliation"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,message_summary:0
|
|
||||||
msgid "Summary"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,task_id:0
|
|
||||||
msgid "Task"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: help:account.mass.reconcile.method,sequence:0
|
|
||||||
msgid "The sequence field is used to order the reconcile method"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: code:addons/account_mass_reconcile/mass_reconcile.py:330
|
|
||||||
#, python-format
|
|
||||||
msgid "There is no history of reconciled items on the task: %s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search
|
|
||||||
msgid "Today"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search
|
|
||||||
msgid "Todays' Reconcilations"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,name:0
|
|
||||||
msgid "Type"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile,message_unread:0
|
|
||||||
msgid "Unread Messages"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: code:addons/account_mass_reconcile/mass_reconcile.py:356
|
|
||||||
#, python-format
|
|
||||||
msgid "Unreconciled items"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: field:account.mass.reconcile.method,write_off:0
|
|
||||||
#: field:mass.reconcile.advanced,write_off:0
|
|
||||||
#: field:mass.reconcile.advanced.ref,write_off:0
|
|
||||||
#: field:mass.reconcile.base,write_off:0
|
|
||||||
#: field:mass.reconcile.options,write_off:0
|
|
||||||
#: field:mass.reconcile.simple,write_off:0
|
|
||||||
#: field:mass.reconcile.simple.name,write_off:0
|
|
||||||
#: field:mass.reconcile.simple.partner,write_off:0
|
|
||||||
#: field:mass.reconcile.simple.reference,write_off:0
|
|
||||||
msgid "Write off allowed"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile
|
|
||||||
msgid "account mass reconcile"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.config.settings:account_mass_reconcile.view_account_config
|
|
||||||
msgid "eInvoicing & Payments"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile_method
|
|
||||||
msgid "reconcile method for account_mass_reconcile"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:0
|
|
||||||
msgid "Match multiple debit vs multiple credit entries. Allow partial reconciliation. The lines should have the partner, the credit entry ref. is matched vs the debit entry ref. or name."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: view:account.mass.reconcile:0
|
|
||||||
msgid "Advanced. Partner and Ref"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced
|
|
||||||
msgid "mass.reconcile.advanced"
|
|
||||||
msgstr "mass.reconcile.advanced"
|
|
||||||
|
|
||||||
#. module: account_mass_reconcile
|
|
||||||
#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced_ref
|
|
||||||
msgid "mass.reconcile.advanced.ref"
|
|
||||||
msgstr "mass.reconcile.advanced.ref"
|
|
|
@ -1,5 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from . import mass_reconcile
|
from . import mass_reconcile
|
||||||
from . import base_reconciliation
|
from . import base_reconciliation
|
||||||
from . import base_advanced_reconciliation
|
from . import base_advanced_reconciliation
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
# -*- coding: utf-8 -*-
|
# Copyright 2012-2016 Camptocamp SA
|
||||||
# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich)
|
# Copyright 2010 Sébastien Beau
|
||||||
# © 2010 Sébastien Beau
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo import models, api
|
from odoo import models
|
||||||
|
|
||||||
|
|
||||||
class MassReconcileAdvancedRef(models.TransientModel):
|
class MassReconcileAdvancedRef(models.TransientModel):
|
||||||
|
@ -11,8 +10,8 @@ class MassReconcileAdvancedRef(models.TransientModel):
|
||||||
_name = 'mass.reconcile.advanced.ref'
|
_name = 'mass.reconcile.advanced.ref'
|
||||||
_inherit = 'mass.reconcile.advanced'
|
_inherit = 'mass.reconcile.advanced'
|
||||||
|
|
||||||
@api.multi
|
@staticmethod
|
||||||
def _skip_line(self, move_line):
|
def _skip_line(move_line):
|
||||||
"""
|
"""
|
||||||
When True is returned on some conditions, the credit move line
|
When True is returned on some conditions, the credit move line
|
||||||
will be skipped for reconciliation. Can be inherited to
|
will be skipped for reconciliation. Can be inherited to
|
||||||
|
@ -20,8 +19,8 @@ class MassReconcileAdvancedRef(models.TransientModel):
|
||||||
"""
|
"""
|
||||||
return not (move_line.get('ref') and move_line.get('partner_id'))
|
return not (move_line.get('ref') and move_line.get('partner_id'))
|
||||||
|
|
||||||
@api.multi
|
@staticmethod
|
||||||
def _matchers(self, move_line):
|
def _matchers(move_line):
|
||||||
"""
|
"""
|
||||||
Return the values used as matchers to find the opposite lines
|
Return the values used as matchers to find the opposite lines
|
||||||
|
|
||||||
|
@ -61,8 +60,8 @@ class MassReconcileAdvancedRef(models.TransientModel):
|
||||||
return (('partner_id', move_line['partner_id']),
|
return (('partner_id', move_line['partner_id']),
|
||||||
('ref', move_line['ref'].lower().strip()))
|
('ref', move_line['ref'].lower().strip()))
|
||||||
|
|
||||||
@api.multi
|
@staticmethod
|
||||||
def _opposite_matchers(self, move_line):
|
def _opposite_matchers(move_line):
|
||||||
"""
|
"""
|
||||||
Return the values of the opposite line used as matchers
|
Return the values of the opposite line used as matchers
|
||||||
so the line is matched
|
so the line is matched
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
# -*- coding: utf-8 -*-
|
# Copyright 2012-2016 Camptocamp SA
|
||||||
# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich)
|
# Copyright 2010 Sébastien Beau
|
||||||
# © 2010 Sébastien Beau
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
from itertools import product
|
||||||
|
|
||||||
from odoo import models, api
|
from odoo import models, api
|
||||||
from itertools import product
|
|
||||||
from odoo.tools.translate import _
|
from odoo.tools.translate import _
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
@ -16,12 +15,11 @@ class MassReconcileAdvanced(models.AbstractModel):
|
||||||
_name = 'mass.reconcile.advanced'
|
_name = 'mass.reconcile.advanced'
|
||||||
_inherit = 'mass.reconcile.base'
|
_inherit = 'mass.reconcile.base'
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _query_debit(self):
|
def _query_debit(self):
|
||||||
"""Select all move (debit>0) as candidate. """
|
"""Select all move (debit>0) as candidate. """
|
||||||
select = self._select()
|
select = self._select_query()
|
||||||
sql_from = self._from()
|
sql_from = self._from_query()
|
||||||
where, params = self._where()
|
where, params = self._where_query()
|
||||||
where += " AND account_move_line.debit > 0 "
|
where += " AND account_move_line.debit > 0 "
|
||||||
where2, params2 = self._get_filter()
|
where2, params2 = self._get_filter()
|
||||||
query = ' '.join((select, sql_from, where, where2))
|
query = ' '.join((select, sql_from, where, where2))
|
||||||
|
@ -30,17 +28,17 @@ class MassReconcileAdvanced(models.AbstractModel):
|
||||||
|
|
||||||
def _query_credit(self):
|
def _query_credit(self):
|
||||||
"""Select all move (credit>0) as candidate. """
|
"""Select all move (credit>0) as candidate. """
|
||||||
select = self._select()
|
select = self._select_query()
|
||||||
sql_from = self._from()
|
sql_from = self._from_query()
|
||||||
where, params = self._where()
|
where, params = self._where_query()
|
||||||
where += " AND account_move_line.credit > 0 "
|
where += " AND account_move_line.credit > 0 "
|
||||||
where2, params2 = self._get_filter()
|
where2, params2 = self._get_filter()
|
||||||
query = ' '.join((select, sql_from, where, where2))
|
query = ' '.join((select, sql_from, where, where2))
|
||||||
self.env.cr.execute(query, params + params2)
|
self.env.cr.execute(query, params + params2)
|
||||||
return self.env.cr.dictfetchall()
|
return self.env.cr.dictfetchall()
|
||||||
|
|
||||||
@api.multi
|
@staticmethod
|
||||||
def _matchers(self, move_line):
|
def _matchers(move_line):
|
||||||
"""
|
"""
|
||||||
Return the values used as matchers to find the opposite lines
|
Return the values used as matchers to find the opposite lines
|
||||||
|
|
||||||
|
@ -79,8 +77,8 @@ class MassReconcileAdvanced(models.AbstractModel):
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@api.multi
|
@staticmethod
|
||||||
def _opposite_matchers(self, move_line):
|
def _opposite_matchers(move_line):
|
||||||
"""
|
"""
|
||||||
Return the values of the opposite line used as matchers
|
Return the values of the opposite line used as matchers
|
||||||
so the line is matched
|
so the line is matched
|
||||||
|
@ -136,15 +134,15 @@ class MassReconcileAdvanced(models.AbstractModel):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@staticmethod
|
@classmethod
|
||||||
def _compare_matcher_values(key, values, opposite_values):
|
def _compare_matcher_values(cls, key, values, opposite_values):
|
||||||
""" Compare every values from a matcher vs an opposite matcher
|
""" Compare every values from a matcher vs an opposite matcher
|
||||||
and return True if it matches
|
and return True if it matches
|
||||||
"""
|
"""
|
||||||
for value, ovalue in product(values, opposite_values):
|
for value, ovalue in product(values, opposite_values):
|
||||||
# we do not need to compare all values, if one matches
|
# we do not need to compare all values, if one matches
|
||||||
# we are done
|
# we are done
|
||||||
if MassReconcileAdvanced._compare_values(key, value, ovalue):
|
if cls._compare_values(key, value, ovalue):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -165,7 +163,6 @@ class MassReconcileAdvanced(models.AbstractModel):
|
||||||
return MassReconcileAdvanced._compare_matcher_values(mkey, mvalue,
|
return MassReconcileAdvanced._compare_matcher_values(mkey, mvalue,
|
||||||
omvalue)
|
omvalue)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _compare_opposite(self, move_line, opposite_move_line, matchers):
|
def _compare_opposite(self, move_line, opposite_move_line, matchers):
|
||||||
""" Iterate over the matchers of the move lines vs opposite move lines
|
""" Iterate over the matchers of the move lines vs opposite move lines
|
||||||
and if they all match, return True.
|
and if they all match, return True.
|
||||||
|
@ -191,7 +188,6 @@ class MassReconcileAdvanced(models.AbstractModel):
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _search_opposites(self, move_line, opposite_move_lines):
|
def _search_opposites(self, move_line, opposite_move_lines):
|
||||||
"""Search the opposite move lines for a move line
|
"""Search the opposite move lines for a move line
|
||||||
|
|
||||||
|
@ -210,7 +206,6 @@ class MassReconcileAdvanced(models.AbstractModel):
|
||||||
result = self._rec_auto_lines_advanced(credit_lines, debit_lines)
|
result = self._rec_auto_lines_advanced(credit_lines, debit_lines)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _skip_line(self, move_line):
|
def _skip_line(self, move_line):
|
||||||
"""
|
"""
|
||||||
When True is returned on some conditions, the credit move line
|
When True is returned on some conditions, the credit move line
|
||||||
|
|
|
@ -1,19 +1,17 @@
|
||||||
# -*- coding: utf-8 -*-
|
# Copyright 2012-2016 Camptocamp SA
|
||||||
# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich)
|
# Copyright 2010 Sébastien Beau
|
||||||
# © 2010 Sébastien Beau
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo import _, models, api, fields
|
from functools import reduce
|
||||||
from odoo.tools.safe_eval import safe_eval
|
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
|
|
||||||
|
from odoo import _, api, fields, models
|
||||||
|
from odoo.tools.safe_eval import safe_eval
|
||||||
|
|
||||||
|
|
||||||
class MassReconcileBase(models.AbstractModel):
|
class MassReconcileBase(models.AbstractModel):
|
||||||
|
|
||||||
"""Abstract Model for reconciliation methods"""
|
"""Abstract Model for reconciliation methods"""
|
||||||
|
|
||||||
_name = 'mass.reconcile.base'
|
_name = 'mass.reconcile.base'
|
||||||
|
|
||||||
_inherit = 'mass.reconcile.options'
|
_inherit = 'mass.reconcile.options'
|
||||||
|
|
||||||
account_id = fields.Many2one(
|
account_id = fields.Many2one(
|
||||||
|
@ -36,7 +34,6 @@ class MassReconcileBase(models.AbstractModel):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
return self._action_rec()
|
return self._action_rec()
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _action_rec(self):
|
def _action_rec(self):
|
||||||
""" Must be inherited to implement the reconciliation
|
""" Must be inherited to implement the reconciliation
|
||||||
|
|
||||||
|
@ -44,7 +41,8 @@ class MassReconcileBase(models.AbstractModel):
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def _base_columns(self):
|
@staticmethod
|
||||||
|
def _base_columns():
|
||||||
""" Mandatory columns for move lines queries
|
""" Mandatory columns for move lines queries
|
||||||
An extra column aliased as ``key`` should be defined
|
An extra column aliased as ``key`` should be defined
|
||||||
in each query."""
|
in each query."""
|
||||||
|
@ -58,19 +56,19 @@ class MassReconcileBase(models.AbstractModel):
|
||||||
'partner_id',
|
'partner_id',
|
||||||
'account_id',
|
'account_id',
|
||||||
'reconciled',
|
'reconciled',
|
||||||
'move_id')
|
'move_id',
|
||||||
return ["account_move_line.%s" % col for col in aml_cols]
|
)
|
||||||
|
return ["account_move_line.{}".format(col) for col in aml_cols]
|
||||||
|
|
||||||
@api.multi
|
def _select_query(self, *args, **kwargs):
|
||||||
def _select(self, *args, **kwargs):
|
|
||||||
return "SELECT %s" % ', '.join(self._base_columns())
|
return "SELECT %s" % ', '.join(self._base_columns())
|
||||||
|
|
||||||
@api.multi
|
def _from_query(self, *args, **kwargs):
|
||||||
def _from(self, *args, **kwargs):
|
|
||||||
return ("FROM account_move_line ")
|
return ("FROM account_move_line ")
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def _where(self, *args, **kwargs):
|
def _where_query(self, *args, **kwargs):
|
||||||
|
self.ensure_one()
|
||||||
where = ("WHERE account_move_line.account_id = %s "
|
where = ("WHERE account_move_line.account_id = %s "
|
||||||
"AND NOT account_move_line.reconciled")
|
"AND NOT account_move_line.reconciled")
|
||||||
# it would be great to use dict for params
|
# it would be great to use dict for params
|
||||||
|
@ -85,12 +83,13 @@ class MassReconcileBase(models.AbstractModel):
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def _get_filter(self):
|
def _get_filter(self):
|
||||||
|
self.ensure_one()
|
||||||
ml_obj = self.env['account.move.line']
|
ml_obj = self.env['account.move.line']
|
||||||
where = ''
|
where = ''
|
||||||
params = []
|
params = []
|
||||||
if self.filter:
|
if self._filter:
|
||||||
dummy, where, params = ml_obj._where_calc(
|
dummy, where, params = ml_obj._where_calc(
|
||||||
safe_eval(self.filter)).get_sql()
|
safe_eval(self._filter)).get_sql()
|
||||||
if where:
|
if where:
|
||||||
where = " AND %s" % where
|
where = " AND %s" % where
|
||||||
return where, params
|
return where, params
|
||||||
|
@ -104,7 +103,7 @@ class MassReconcileBase(models.AbstractModel):
|
||||||
lambda line, memo:
|
lambda line, memo:
|
||||||
dict((key, value + memo[key])
|
dict((key, value + memo[key])
|
||||||
for key, value
|
for key, value
|
||||||
in line.iteritems()
|
in line.items()
|
||||||
if key in keys), lines)
|
if key in keys), lines)
|
||||||
debit, credit = sums['debit'], sums['credit']
|
debit, credit = sums['debit'], sums['credit']
|
||||||
writeoff_amount = round(debit - credit, precision)
|
writeoff_amount = round(debit - credit, precision)
|
||||||
|
@ -164,7 +163,7 @@ class MassReconcileBase(models.AbstractModel):
|
||||||
line_rs.reconcile(
|
line_rs.reconcile(
|
||||||
writeoff_acc_id=writeoff_account,
|
writeoff_acc_id=writeoff_account,
|
||||||
writeoff_journal_id=self.journal_id
|
writeoff_journal_id=self.journal_id
|
||||||
)
|
)
|
||||||
return True, True
|
return True, True
|
||||||
elif allow_partial:
|
elif allow_partial:
|
||||||
# We need to give a writeoff_acc_id
|
# We need to give a writeoff_acc_id
|
||||||
|
@ -181,6 +180,6 @@ class MassReconcileBase(models.AbstractModel):
|
||||||
line_rs.reconcile(
|
line_rs.reconcile(
|
||||||
writeoff_acc_id=writeoff_account,
|
writeoff_acc_id=writeoff_account,
|
||||||
writeoff_journal_id=self.journal_id
|
writeoff_journal_id=self.journal_id
|
||||||
)
|
)
|
||||||
return True, False
|
return True, False
|
||||||
return False, False
|
return False, False
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
# -*- coding: utf-8 -*-
|
# Copyright 2012-2016 Camptocamp SA
|
||||||
# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich)
|
# Copyright 2010 Sébastien Beau
|
||||||
# © 2010 Sébastien Beau
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
import logging
|
||||||
|
|
||||||
from odoo import models, api, fields, _
|
from odoo import models, api, fields, _
|
||||||
from odoo.exceptions import Warning as UserError
|
from odoo.exceptions import Warning as UserError
|
||||||
from odoo import sql_db
|
from odoo import sql_db
|
||||||
|
|
||||||
import logging
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@ class MassReconcileOptions(models.AbstractModel):
|
||||||
This allows decoupling of the methods and the
|
This allows decoupling of the methods and the
|
||||||
wizards and allows to launch the wizards alone
|
wizards and allows to launch the wizards alone
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_name = 'mass.reconcile.options'
|
_name = 'mass.reconcile.options'
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
|
@ -30,24 +29,39 @@ class MassReconcileOptions(models.AbstractModel):
|
||||||
('actual', 'Today'),
|
('actual', 'Today'),
|
||||||
]
|
]
|
||||||
|
|
||||||
write_off = fields.Float('Write off allowed', default=0.)
|
write_off = fields.Float(
|
||||||
account_lost_id = fields.Many2one('account.account',
|
'Write off allowed',
|
||||||
string="Account Lost")
|
default=0.,
|
||||||
account_profit_id = fields.Many2one('account.account',
|
)
|
||||||
string="Account Profit")
|
account_lost_id = fields.Many2one(
|
||||||
journal_id = fields.Many2one('account.journal',
|
'account.account',
|
||||||
string="Journal")
|
string="Account Lost",
|
||||||
date_base_on = fields.Selection('_get_rec_base_date',
|
)
|
||||||
required=True,
|
account_profit_id = fields.Many2one(
|
||||||
string='Date of reconciliation',
|
'account.account',
|
||||||
default='newest')
|
string="Account Profit",
|
||||||
filter = fields.Char(string='Filter')
|
)
|
||||||
income_exchange_account_id = fields.Many2one('account.account',
|
journal_id = fields.Many2one(
|
||||||
string='Gain Exchange '
|
'account.journal',
|
||||||
'Rate Account')
|
string="Journal",
|
||||||
expense_exchange_account_id = fields.Many2one('account.account',
|
)
|
||||||
string='Loss Exchange '
|
date_base_on = fields.Selection(
|
||||||
'Rate Account')
|
'_get_rec_base_date',
|
||||||
|
required=True,
|
||||||
|
string='Date of reconciliation',
|
||||||
|
default='newest',
|
||||||
|
)
|
||||||
|
_filter = fields.Char(
|
||||||
|
string='Filter',
|
||||||
|
)
|
||||||
|
income_exchange_account_id = fields.Many2one(
|
||||||
|
'account.account',
|
||||||
|
string='Gain Exchange Rate Account',
|
||||||
|
)
|
||||||
|
expense_exchange_account_id = fields.Many2one(
|
||||||
|
'account.account',
|
||||||
|
string='Loss Exchange Rate Account',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class AccountMassReconcileMethod(models.Model):
|
class AccountMassReconcileMethod(models.Model):
|
||||||
|
@ -56,8 +70,8 @@ class AccountMassReconcileMethod(models.Model):
|
||||||
_inherit = 'mass.reconcile.options'
|
_inherit = 'mass.reconcile.options'
|
||||||
_order = 'sequence'
|
_order = 'sequence'
|
||||||
|
|
||||||
@api.model
|
@staticmethod
|
||||||
def _get_all_rec_method(self):
|
def _get_reconcilation_methods():
|
||||||
return [
|
return [
|
||||||
('mass.reconcile.simple.name', 'Simple. Amount and Name'),
|
('mass.reconcile.simple.name', 'Simple. Amount and Name'),
|
||||||
('mass.reconcile.simple.partner', 'Simple. Amount and Partner'),
|
('mass.reconcile.simple.partner', 'Simple. Amount and Partner'),
|
||||||
|
@ -67,32 +81,36 @@ class AccountMassReconcileMethod(models.Model):
|
||||||
'Advanced. Partner and Ref.'),
|
'Advanced. Partner and Ref.'),
|
||||||
]
|
]
|
||||||
|
|
||||||
@api.model
|
def _selection_name(self):
|
||||||
def _get_rec_method(self):
|
return self._get_reconcilation_methods()
|
||||||
return self._get_all_rec_method()
|
|
||||||
|
|
||||||
name = fields.Selection('_get_rec_method', string='Type', required=True)
|
name = fields.Selection(
|
||||||
sequence = fields.Integer(string='Sequence',
|
'_selection_name',
|
||||||
default=1,
|
string='Type',
|
||||||
required=True,
|
required=True,
|
||||||
help="The sequence field is used to order "
|
)
|
||||||
"the reconcile method"
|
sequence = fields.Integer(
|
||||||
)
|
string='Sequence',
|
||||||
task_id = fields.Many2one('account.mass.reconcile',
|
default=1,
|
||||||
string='Task',
|
required=True,
|
||||||
required=True,
|
help="The sequence field is used to order the reconcile method",
|
||||||
ondelete='cascade'
|
)
|
||||||
)
|
task_id = fields.Many2one(
|
||||||
company_id = fields.Many2one('res.company',
|
'account.mass.reconcile',
|
||||||
string='Company',
|
string='Task',
|
||||||
related="task_id.company_id",
|
required=True,
|
||||||
store=True,
|
ondelete='cascade',
|
||||||
readonly=True
|
)
|
||||||
)
|
company_id = fields.Many2one(
|
||||||
|
'res.company',
|
||||||
|
string='Company',
|
||||||
|
related="task_id.company_id",
|
||||||
|
store=True,
|
||||||
|
readonly=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class AccountMassReconcile(models.Model):
|
class AccountMassReconcile(models.Model):
|
||||||
|
|
||||||
_name = 'account.mass.reconcile'
|
_name = 'account.mass.reconcile'
|
||||||
_inherit = ['mail.thread']
|
_inherit = ['mail.thread']
|
||||||
_description = 'account mass reconcile'
|
_description = 'account mass reconcile'
|
||||||
|
@ -120,31 +138,42 @@ class AccountMassReconcile(models.Model):
|
||||||
)
|
)
|
||||||
rec.last_history = last_history_rs or False
|
rec.last_history = last_history_rs or False
|
||||||
|
|
||||||
name = fields.Char(string='Name', required=True)
|
name = fields.Char(
|
||||||
account = fields.Many2one('account.account',
|
string='Name',
|
||||||
string='Account',
|
required=True,
|
||||||
required=True,
|
)
|
||||||
)
|
account = fields.Many2one(
|
||||||
reconcile_method = fields.One2many('account.mass.reconcile.method',
|
'account.account',
|
||||||
'task_id',
|
string='Account',
|
||||||
string='Method'
|
required=True,
|
||||||
)
|
)
|
||||||
unreconciled_count = fields.Integer(string='Unreconciled Items',
|
reconcile_method = fields.One2many(
|
||||||
compute='_get_total_unrec'
|
'account.mass.reconcile.method',
|
||||||
)
|
'task_id',
|
||||||
history_ids = fields.One2many('mass.reconcile.history',
|
string='Method',
|
||||||
'mass_reconcile_id',
|
)
|
||||||
string='History',
|
unreconciled_count = fields.Integer(
|
||||||
readonly=True
|
string='Unreconciled Items',
|
||||||
)
|
compute='_get_total_unrec',
|
||||||
last_history = fields.Many2one('mass.reconcile.history',
|
)
|
||||||
string='Last history', readonly=True,
|
history_ids = fields.One2many(
|
||||||
compute='_last_history',
|
'mass.reconcile.history',
|
||||||
)
|
'mass_reconcile_id',
|
||||||
company_id = fields.Many2one('res.company', string='Company')
|
string='History',
|
||||||
|
readonly=True,
|
||||||
|
)
|
||||||
|
last_history = fields.Many2one(
|
||||||
|
'mass.reconcile.history',
|
||||||
|
string='Last history', readonly=True,
|
||||||
|
compute='_last_history',
|
||||||
|
)
|
||||||
|
company_id = fields.Many2one(
|
||||||
|
'res.company',
|
||||||
|
string='Company',
|
||||||
|
)
|
||||||
|
|
||||||
@api.model
|
@staticmethod
|
||||||
def _prepare_run_transient(self, rec_method):
|
def _prepare_run_transient(rec_method):
|
||||||
return {'account_id': rec_method.task_id.account.id,
|
return {'account_id': rec_method.task_id.account.id,
|
||||||
'write_off': rec_method.write_off,
|
'write_off': rec_method.write_off,
|
||||||
'account_lost_id': (rec_method.account_lost_id.id),
|
'account_lost_id': (rec_method.account_lost_id.id),
|
||||||
|
@ -155,7 +184,7 @@ class AccountMassReconcile(models.Model):
|
||||||
(rec_method.income_exchange_account_id.id),
|
(rec_method.income_exchange_account_id.id),
|
||||||
'journal_id': (rec_method.journal_id.id),
|
'journal_id': (rec_method.journal_id.id),
|
||||||
'date_base_on': rec_method.date_base_on,
|
'date_base_on': rec_method.date_base_on,
|
||||||
'filter': rec_method.filter}
|
'_filter': rec_method._filter}
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def run_reconcile(self):
|
def run_reconcile(self):
|
||||||
|
@ -216,10 +245,10 @@ class AccountMassReconcile(models.Model):
|
||||||
# the cron will just loop on this reconcile task.
|
# the cron will just loop on this reconcile task.
|
||||||
_logger.exception(
|
_logger.exception(
|
||||||
"The reconcile task %s had an exception: %s",
|
"The reconcile task %s had an exception: %s",
|
||||||
rec.name, e.message
|
rec.name, str(e)
|
||||||
)
|
)
|
||||||
message = _("There was an error during reconciliation : %s") \
|
message = _("There was an error during reconciliation : %s") \
|
||||||
% e.message
|
% str(e)
|
||||||
rec.message_post(body=message)
|
rec.message_post(body=message)
|
||||||
self.env['mass.reconcile.history'].create(
|
self.env['mass.reconcile.history'].create(
|
||||||
{
|
{
|
||||||
|
@ -235,7 +264,6 @@ class AccountMassReconcile(models.Model):
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _no_history(self):
|
def _no_history(self):
|
||||||
""" Raise an `orm.except_orm` error, supposed to
|
""" Raise an `orm.except_orm` error, supposed to
|
||||||
be called when there is no history on the reconciliation
|
be called when there is no history on the reconciliation
|
||||||
|
@ -246,8 +274,8 @@ class AccountMassReconcile(models.Model):
|
||||||
'items on the task: %s.') % self.name
|
'items on the task: %s.') % self.name
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.model
|
@staticmethod
|
||||||
def _open_move_line_list(self, move_line_ids, name):
|
def _open_move_line_list(move_line_ids, name):
|
||||||
return {
|
return {
|
||||||
'name': name,
|
'name': name,
|
||||||
'view_mode': 'tree,form',
|
'view_mode': 'tree,form',
|
||||||
|
@ -257,7 +285,7 @@ class AccountMassReconcile(models.Model):
|
||||||
'type': 'ir.actions.act_window',
|
'type': 'ir.actions.act_window',
|
||||||
'nodestroy': True,
|
'nodestroy': True,
|
||||||
'target': 'current',
|
'target': 'current',
|
||||||
'domain': unicode([('id', 'in', move_line_ids)]),
|
'domain': [('id', 'in', move_line_ids)],
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
|
@ -271,7 +299,6 @@ class AccountMassReconcile(models.Model):
|
||||||
name = _('Unreconciled items')
|
name = _('Unreconciled items')
|
||||||
return self._open_move_line_list(lines.ids or [], name)
|
return self._open_move_line_list(lines.ids or [], name)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def last_history_reconcile(self):
|
def last_history_reconcile(self):
|
||||||
""" Get the last history record for this reconciliation profile
|
""" Get the last history record for this reconciliation profile
|
||||||
and return the action which opens move lines reconciled
|
and return the action which opens move lines reconciled
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
# -*- coding: utf-8 -*-
|
# Copyright 2012-2016 Camptocamp SA
|
||||||
# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich)
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo import models, api, fields, _
|
from odoo import models, api, fields, _
|
||||||
|
@ -7,8 +6,9 @@ from odoo import models, api, fields, _
|
||||||
|
|
||||||
class MassReconcileHistory(models.Model):
|
class MassReconcileHistory(models.Model):
|
||||||
""" Store an history of the runs per profile
|
""" Store an history of the runs per profile
|
||||||
Each history stores the list of reconciliations done"""
|
|
||||||
|
|
||||||
|
Each history stores the list of reconciliations done
|
||||||
|
"""
|
||||||
_name = 'mass.reconcile.history'
|
_name = 'mass.reconcile.history'
|
||||||
_rec_name = 'mass_reconcile_id'
|
_rec_name = 'mass_reconcile_id'
|
||||||
_order = 'date DESC'
|
_order = 'date DESC'
|
||||||
|
@ -24,27 +24,31 @@ class MassReconcileHistory(models.Model):
|
||||||
mass_reconcile_id = fields.Many2one(
|
mass_reconcile_id = fields.Many2one(
|
||||||
'account.mass.reconcile',
|
'account.mass.reconcile',
|
||||||
string='Reconcile Profile',
|
string='Reconcile Profile',
|
||||||
readonly=True
|
readonly=True,
|
||||||
|
)
|
||||||
|
date = fields.Datetime(
|
||||||
|
string='Run date',
|
||||||
|
readonly=True,
|
||||||
|
required=True,
|
||||||
)
|
)
|
||||||
date = fields.Datetime(string='Run date', readonly=True, required=True)
|
|
||||||
reconcile_ids = fields.Many2many(
|
reconcile_ids = fields.Many2many(
|
||||||
comodel_name='account.full.reconcile',
|
comodel_name='account.full.reconcile',
|
||||||
relation='account_full_reconcile_history_rel',
|
relation='account_full_reconcile_history_rel',
|
||||||
string='Full Reconciliations',
|
string='Full Reconciliations',
|
||||||
readonly=True
|
readonly=True,
|
||||||
)
|
)
|
||||||
reconcile_line_ids = fields.Many2many(
|
reconcile_line_ids = fields.Many2many(
|
||||||
comodel_name='account.move.line',
|
comodel_name='account.move.line',
|
||||||
relation='account_move_line_history_rel',
|
relation='account_move_line_history_rel',
|
||||||
string='Reconciled Items',
|
string='Reconciled Items',
|
||||||
compute='_get_reconcile_line_ids'
|
compute='_get_reconcile_line_ids',
|
||||||
)
|
)
|
||||||
company_id = fields.Many2one(
|
company_id = fields.Many2one(
|
||||||
'res.company',
|
'res.company',
|
||||||
string='Company',
|
string='Company',
|
||||||
store=True,
|
store=True,
|
||||||
readonly=True,
|
readonly=True,
|
||||||
related='mass_reconcile_id.company_id'
|
related='mass_reconcile_id.company_id',
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
|
@ -66,7 +70,7 @@ class MassReconcileHistory(models.Model):
|
||||||
'type': 'ir.actions.act_window',
|
'type': 'ir.actions.act_window',
|
||||||
'nodestroy': True,
|
'nodestroy': True,
|
||||||
'target': 'current',
|
'target': 'current',
|
||||||
'domain': unicode([('id', 'in', move_line_ids)]),
|
'domain': [('id', 'in', move_line_ids)],
|
||||||
}
|
}
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
|
|
|
@ -1,18 +1,16 @@
|
||||||
# -*- coding: utf-8 -*-
|
# Copyright 2014-2016 Camptocamp SA
|
||||||
# © 2014-2016 Camptocamp SA (Leonardo Pistone, Damien Crier, Matthieu Dietrich)
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo import models, fields
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
class AccountConfigSettings(models.TransientModel):
|
class AccountConfigSettings(models.TransientModel):
|
||||||
_inherit = 'account.config.settings'
|
_inherit = 'res.config.settings'
|
||||||
|
|
||||||
reconciliation_commit_every = fields.Integer(
|
reconciliation_commit_every = fields.Integer(
|
||||||
related="company_id.reconciliation_commit_every",
|
related="company_id.reconciliation_commit_every",
|
||||||
string="How often to commit when performing automatic "
|
string="How often to commit when performing automatic reconciliation.",
|
||||||
"reconciliation.",
|
help="Leave zero to commit only at the end of the process.",
|
||||||
help="Leave zero to commit only at the end of the process."
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +18,6 @@ class Company(models.Model):
|
||||||
_inherit = "res.company"
|
_inherit = "res.company"
|
||||||
|
|
||||||
reconciliation_commit_every = fields.Integer(
|
reconciliation_commit_every = fields.Integer(
|
||||||
string="How often to commit when performing automatic "
|
string="How often to commit when performing automatic reconciliation.",
|
||||||
"reconciliation.",
|
help="Leave zero to commit only at the end of the process.",
|
||||||
help="Leave zero to commit only at the end of the process."
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# Copyright 2012-2016 Camptocamp SA
|
||||||
# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich)
|
# Copyright 2010 Sébastien Beau
|
||||||
# © 2010 Sébastien Beau
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
from odoo import models, api
|
from odoo import models, api
|
||||||
|
@ -21,7 +20,7 @@ class MassReconcileSimple(models.AbstractModel):
|
||||||
count = 0
|
count = 0
|
||||||
res = []
|
res = []
|
||||||
while (count < len(lines)):
|
while (count < len(lines)):
|
||||||
for i in xrange(count + 1, len(lines)):
|
for i in range(count + 1, len(lines)):
|
||||||
if lines[count][self._key_field] != lines[i][self._key_field]:
|
if lines[count][self._key_field] != lines[i][self._key_field]:
|
||||||
break
|
break
|
||||||
check = False
|
check = False
|
||||||
|
@ -46,22 +45,20 @@ class MassReconcileSimple(models.AbstractModel):
|
||||||
count += 1
|
count += 1
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _simple_order(self, *args, **kwargs):
|
def _simple_order(self, *args, **kwargs):
|
||||||
return "ORDER BY account_move_line.%s" % self._key_field
|
return "ORDER BY account_move_line.%s" % self._key_field
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _action_rec(self):
|
def _action_rec(self):
|
||||||
"""Match only 2 move lines, do not allow partial reconcile"""
|
"""Match only 2 move lines, do not allow partial reconcile"""
|
||||||
select = self._select()
|
select = self._select_query()
|
||||||
select += ", account_move_line.%s " % self._key_field
|
select += ", account_move_line.%s " % self._key_field
|
||||||
where, params = self._where()
|
where, params = self._where_query()
|
||||||
where += " AND account_move_line.%s IS NOT NULL " % self._key_field
|
where += " AND account_move_line.%s IS NOT NULL " % self._key_field
|
||||||
|
|
||||||
where2, params2 = self._get_filter()
|
where2, params2 = self._get_filter()
|
||||||
query = ' '.join((
|
query = ' '.join((
|
||||||
select,
|
select,
|
||||||
self._from(),
|
self._from_query(),
|
||||||
where, where2,
|
where, where2,
|
||||||
self._simple_order()))
|
self._simple_order()))
|
||||||
|
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<openerp>
|
<odoo noupdate="1">
|
||||||
<data noupdate="1">
|
|
||||||
<record id="mass_reconcile_rule" model="ir.rule">
|
|
||||||
<field name="name">Mass reconcile multi-company</field>
|
|
||||||
<field name="model_id" ref="model_account_mass_reconcile"/>
|
|
||||||
<field name="global" eval="True"/>
|
|
||||||
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="mass_reconcile_history_rule" model="ir.rule">
|
<record id="mass_reconcile_rule" model="ir.rule">
|
||||||
<field name="name">Mass reconcile history multi-company</field>
|
<field name="name">Mass reconcile multi-company</field>
|
||||||
<field name="model_id" ref="model_mass_reconcile_history"/>
|
<field name="model_id" ref="model_account_mass_reconcile"/>
|
||||||
<field name="global" eval="True"/>
|
<field name="global" eval="True"/>
|
||||||
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
|
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="mass_reconcile_method_rule" model="ir.rule">
|
<record id="mass_reconcile_history_rule" model="ir.rule">
|
||||||
<field name="name">Mass reconcile method multi-company</field>
|
<field name="name">Mass reconcile history multi-company</field>
|
||||||
<field name="model_id" ref="model_account_mass_reconcile_method"/>
|
<field name="model_id" ref="model_mass_reconcile_history"/>
|
||||||
<field name="global" eval="True"/>
|
<field name="global" eval="True"/>
|
||||||
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
|
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
|
||||||
</record>
|
</record>
|
||||||
</data>
|
|
||||||
</openerp>
|
<record id="mass_reconcile_method_rule" model="ir.rule">
|
||||||
|
<field name="name">Mass reconcile method multi-company</field>
|
||||||
|
<field name="model_id" ref="model_account_mass_reconcile_method"/>
|
||||||
|
<field name="global" eval="True"/>
|
||||||
|
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# © 2014-2016 Camptocamp SA (Damien Crier)
|
# © 2014-2016 Camptocamp SA (Damien Crier)
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# © 2014-2016 Camptocamp SA (Damien Crier)
|
# © 2014-2016 Camptocamp SA (Damien Crier)
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
@ -7,20 +6,21 @@ from odoo import tools
|
||||||
from odoo.modules import get_module_resource
|
from odoo.modules import get_module_resource
|
||||||
|
|
||||||
|
|
||||||
class TestOnChange(common.TransactionCase):
|
class TestOnChange(common.SavepointCase):
|
||||||
|
|
||||||
def setUp(self):
|
@classmethod
|
||||||
super(TestOnChange, self).setUp()
|
def setUpClass(cls):
|
||||||
tools.convert_file(self.cr, 'account',
|
super(TestOnChange, cls).setUpClass()
|
||||||
|
tools.convert_file(cls.cr, 'account',
|
||||||
get_module_resource('account', 'test',
|
get_module_resource('account', 'test',
|
||||||
'account_minimal_test.xml'),
|
'account_minimal_test.xml'),
|
||||||
{}, 'init', False, 'test')
|
{}, 'init', False, 'test')
|
||||||
acc_setting = self.env['account.config.settings']
|
acc_setting = cls.env['res.config.settings']
|
||||||
self.acc_setting_obj = acc_setting.create({})
|
cls.acc_setting_obj = acc_setting.create({})
|
||||||
self.company_obj = self.env['res.company']
|
cls.company_obj = cls.env['res.company']
|
||||||
# analytic defaults account creation
|
# analytic defaults account creation
|
||||||
self.main_company = self.env.ref('base.main_company')
|
cls.main_company = cls.env.ref('base.main_company')
|
||||||
self.sec_company = self.company_obj.create(
|
cls.sec_company = cls.company_obj.create(
|
||||||
{
|
{
|
||||||
'name': 'Second company',
|
'name': 'Second company',
|
||||||
'reconciliation_commit_every': 80
|
'reconciliation_commit_every': 80
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# © 2014-2016 Camptocamp SA (Damien Crier)
|
# © 2014-2016 Camptocamp SA (Damien Crier)
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
@ -7,45 +6,37 @@ from odoo import fields, exceptions, tools
|
||||||
from odoo.modules import get_module_resource
|
from odoo.modules import get_module_resource
|
||||||
|
|
||||||
|
|
||||||
class TestReconcile(common.TransactionCase):
|
class TestReconcile(common.SavepointCase):
|
||||||
|
|
||||||
def setUp(self):
|
@classmethod
|
||||||
super(TestReconcile, self).setUp()
|
def setUpClass(cls):
|
||||||
tools.convert_file(self.cr, 'account',
|
super(TestReconcile, cls).setUpClass()
|
||||||
|
tools.convert_file(cls.cr, 'account',
|
||||||
get_module_resource('account', 'test',
|
get_module_resource('account', 'test',
|
||||||
'account_minimal_test.xml'),
|
'account_minimal_test.xml'),
|
||||||
{}, 'init', False, 'test')
|
{}, 'init', False, 'test')
|
||||||
self.rec_history_obj = self.env['mass.reconcile.history']
|
cls.rec_history_obj = cls.env['mass.reconcile.history']
|
||||||
self.mass_rec_obj = self.env['account.mass.reconcile']
|
cls.mass_rec_obj = cls.env['account.mass.reconcile']
|
||||||
self.mass_rec_method_obj = (
|
cls.mass_rec_method_obj = (
|
||||||
self.env['account.mass.reconcile.method']
|
cls.env['account.mass.reconcile.method']
|
||||||
)
|
)
|
||||||
self.mass_rec = self.mass_rec_obj.create(
|
cls.mass_rec = cls.mass_rec_obj.create({
|
||||||
{
|
'name': 'AER2',
|
||||||
'name': 'AER2',
|
'account': cls.env.ref('account.a_salary_expense').id,
|
||||||
'account': self.ref('account.a_salary_expense'),
|
})
|
||||||
}
|
cls.mass_rec_method = cls.mass_rec_method_obj.create({
|
||||||
)
|
'name': 'mass.reconcile.simple.name',
|
||||||
self.mass_rec_method = self.mass_rec_method_obj.create(
|
'sequence': '10',
|
||||||
{
|
'task_id': cls.mass_rec.id,
|
||||||
'name': 'mass.reconcile.simple.name',
|
})
|
||||||
'sequence': '10',
|
cls.mass_rec_no_history = cls.mass_rec_obj.create({
|
||||||
'task_id': self.mass_rec.id,
|
'name': 'AER3',
|
||||||
}
|
'account': cls.env.ref('account.a_salary_expense').id,
|
||||||
)
|
})
|
||||||
self.mass_rec_no_history = self.mass_rec_obj.create(
|
cls.rec_history = cls.rec_history_obj.create({
|
||||||
{
|
'mass_reconcile_id': cls.mass_rec.id,
|
||||||
'name': 'AER3',
|
'date': fields.Datetime.now(),
|
||||||
'account': self.ref('account.a_salary_expense'),
|
})
|
||||||
|
|
||||||
}
|
|
||||||
)
|
|
||||||
self.rec_history = self.rec_history_obj.create(
|
|
||||||
{
|
|
||||||
'mass_reconcile_id': self.mass_rec.id,
|
|
||||||
'date': fields.Datetime.now(),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_last_history(self):
|
def test_last_history(self):
|
||||||
mass_rec_last_hist = self.mass_rec.last_history
|
mass_rec_last_hist = self.mass_rec.last_history
|
||||||
|
@ -61,7 +52,7 @@ class TestReconcile(common.TransactionCase):
|
||||||
|
|
||||||
def test_open_unreconcile(self):
|
def test_open_unreconcile(self):
|
||||||
res = self.mass_rec.open_unreconcile()
|
res = self.mass_rec.open_unreconcile()
|
||||||
self.assertEqual(unicode([('id', 'in', [])]), res.get('domain', []))
|
self.assertEqual([('id', 'in', [])], res.get('domain', []))
|
||||||
|
|
||||||
def test_prepare_run_transient(self):
|
def test_prepare_run_transient(self):
|
||||||
res = self.mass_rec._prepare_run_transient(self.mass_rec_method)
|
res = self.mass_rec._prepare_run_transient(self.mass_rec_method)
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# © 2014-2016 Camptocamp SA (Damien Crier)
|
# © 2014-2016 Camptocamp SA (Damien Crier)
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
@ -7,36 +6,37 @@ from odoo import fields, tools
|
||||||
from odoo.modules import get_module_resource
|
from odoo.modules import get_module_resource
|
||||||
|
|
||||||
|
|
||||||
class TestReconcileHistory(common.TransactionCase):
|
class TestReconcileHistory(common.SavepointCase):
|
||||||
|
|
||||||
def setUp(self):
|
@classmethod
|
||||||
super(TestReconcileHistory, self).setUp()
|
def setUpClass(cls):
|
||||||
tools.convert_file(self.cr, 'account',
|
super(TestReconcileHistory, cls).setUpClass()
|
||||||
|
tools.convert_file(cls.cr, 'account',
|
||||||
get_module_resource('account', 'test',
|
get_module_resource('account', 'test',
|
||||||
'account_minimal_test.xml'),
|
'account_minimal_test.xml'),
|
||||||
{}, 'init', False, 'test')
|
{}, 'init', False, 'test')
|
||||||
self.rec_history_obj = self.env['mass.reconcile.history']
|
cls.rec_history_obj = cls.env['mass.reconcile.history']
|
||||||
self.mass_rec_obj = self.env['account.mass.reconcile']
|
cls.mass_rec_obj = cls.env['account.mass.reconcile']
|
||||||
self.mass_rec = self.mass_rec_obj.create(
|
cls.mass_rec = cls.mass_rec_obj.create(
|
||||||
{
|
{
|
||||||
'name': 'AER1',
|
'name': 'AER1',
|
||||||
'account': self.ref('account.a_expense'),
|
'account': cls.env.ref('account.a_expense').id,
|
||||||
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.rec_history = self.rec_history_obj.create(
|
cls.rec_history = cls.rec_history_obj.create(
|
||||||
{
|
{
|
||||||
'mass_reconcile_id': self.mass_rec.id,
|
'mass_reconcile_id': cls.mass_rec.id,
|
||||||
'date': fields.Datetime.now(),
|
'date': fields.Datetime.now(),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_open_full_empty(self):
|
def test_open_full_empty(self):
|
||||||
res = self.rec_history._open_move_lines()
|
res = self.rec_history._open_move_lines()
|
||||||
self.assertEqual(unicode([('id', 'in', [])]), res.get(
|
self.assertEqual([('id', 'in', [])], res.get(
|
||||||
'domain', []))
|
'domain', []))
|
||||||
|
|
||||||
def test_open_full_empty_from_method(self):
|
def test_open_full_empty_from_method(self):
|
||||||
res = self.rec_history.open_reconcile()
|
res = self.rec_history.open_reconcile()
|
||||||
self.assertEqual(unicode([('id', 'in', [])]), res.get(
|
self.assertEqual([('id', 'in', [])], res.get(
|
||||||
'domain', []))
|
'domain', []))
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# © 2014-2016 Camptocamp SA (Damien Crier)
|
# © 2014-2016 Camptocamp SA (Damien Crier)
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
@ -7,40 +6,42 @@ from odoo import fields, tools
|
||||||
from odoo.modules import get_module_resource
|
from odoo.modules import get_module_resource
|
||||||
|
|
||||||
|
|
||||||
class TestScenarioReconcile(common.TransactionCase):
|
class TestScenarioReconcile(common.SavepointCase):
|
||||||
|
|
||||||
def setUp(self):
|
@classmethod
|
||||||
super(TestScenarioReconcile, self).setUp()
|
def setUpClass(cls):
|
||||||
tools.convert_file(self.cr, 'account',
|
super(TestScenarioReconcile, cls).setUpClass()
|
||||||
|
tools.convert_file(cls.cr, 'account',
|
||||||
get_module_resource('account', 'test',
|
get_module_resource('account', 'test',
|
||||||
'account_minimal_test.xml'),
|
'account_minimal_test.xml'),
|
||||||
{}, 'init', False, 'test')
|
{}, 'init', False, 'test')
|
||||||
self.rec_history_obj = self.env['mass.reconcile.history']
|
cls.rec_history_obj = cls.env['mass.reconcile.history']
|
||||||
self.mass_rec_obj = self.env['account.mass.reconcile']
|
cls.mass_rec_obj = cls.env['account.mass.reconcile']
|
||||||
self.invoice_obj = self.env['account.invoice']
|
cls.invoice_obj = cls.env['account.invoice']
|
||||||
self.bk_stmt_obj = self.env['account.bank.statement']
|
cls.bk_stmt_obj = cls.env['account.bank.statement']
|
||||||
self.bk_stmt_line_obj = self.env['account.bank.statement.line']
|
cls.bk_stmt_line_obj = cls.env['account.bank.statement.line']
|
||||||
self.acc_move_line_obj = self.env['account.move.line']
|
cls.acc_move_line_obj = cls.env['account.move.line']
|
||||||
self.mass_rec_method_obj = (
|
cls.mass_rec_method_obj = (
|
||||||
self.env['account.mass.reconcile.method']
|
cls.env['account.mass.reconcile.method']
|
||||||
)
|
)
|
||||||
self.account_fx_income_id = self.ref("account.income_fx_income")
|
cls.account_fx_income_id = cls.env.ref("account.income_fx_income").id
|
||||||
self.account_fx_expense_id = self.ref("account.income_fx_expense")
|
cls.account_fx_expense_id = cls.env.ref("account.income_fx_expense").id
|
||||||
self.acs_model = self.env['account.config.settings']
|
cls.acs_model = cls.env['res.config.settings']
|
||||||
|
|
||||||
acs_ids = self.acs_model.search(
|
acs_ids = cls.acs_model.search(
|
||||||
[('company_id', '=', self.ref("base.main_company"))]
|
[('company_id', '=', cls.env.ref("base.main_company").id)]
|
||||||
)
|
)
|
||||||
|
|
||||||
values = {'group_multi_currency': True,
|
values = {
|
||||||
'currency_id': self.ref('base.EUR')}
|
'group_multi_currency': True,
|
||||||
|
}
|
||||||
|
|
||||||
if acs_ids:
|
if acs_ids:
|
||||||
acs_ids.write(values)
|
acs_ids.write(values)
|
||||||
else:
|
else:
|
||||||
default_vals = self.acs_model.default_get([])
|
default_vals = cls.acs_model.default_get([])
|
||||||
default_vals.update(values)
|
default_vals.update(values)
|
||||||
acs_ids = self.acs_model.create(default_vals)
|
acs_ids = cls.acs_model.create(default_vals)
|
||||||
|
|
||||||
def test_scenario_reconcile(self):
|
def test_scenario_reconcile(self):
|
||||||
# create invoice
|
# create invoice
|
||||||
|
@ -80,8 +81,7 @@ class TestScenarioReconcile(common.TransactionCase):
|
||||||
'partner_id': self.ref('base.res_partner_12'),
|
'partner_id': self.ref('base.res_partner_12'),
|
||||||
'name': invoice.number,
|
'name': invoice.number,
|
||||||
'ref': invoice.number,
|
'ref': invoice.number,
|
||||||
}
|
})
|
||||||
)
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -119,9 +119,8 @@ class TestScenarioReconcile(common.TransactionCase):
|
||||||
'account': self.ref('account.a_recv'),
|
'account': self.ref('account.a_recv'),
|
||||||
'reconcile_method': [
|
'reconcile_method': [
|
||||||
(0, 0, {
|
(0, 0, {
|
||||||
'name': 'mass.reconcile.simple.partner',
|
'name': 'mass.reconcile.simple.partner',
|
||||||
}
|
})
|
||||||
)
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -155,8 +154,7 @@ class TestScenarioReconcile(common.TransactionCase):
|
||||||
'price_unit': 1000.0,
|
'price_unit': 1000.0,
|
||||||
'quantity': 1.0,
|
'quantity': 1.0,
|
||||||
'product_id': self.ref('product.product_product_3'),
|
'product_id': self.ref('product.product_product_3'),
|
||||||
}
|
})
|
||||||
)
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -179,8 +177,7 @@ class TestScenarioReconcile(common.TransactionCase):
|
||||||
'partner_id': self.ref('base.res_partner_12'),
|
'partner_id': self.ref('base.res_partner_12'),
|
||||||
'name': invoice.number,
|
'name': invoice.number,
|
||||||
'ref': invoice.number,
|
'ref': invoice.number,
|
||||||
}
|
})
|
||||||
)
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -217,9 +214,8 @@ class TestScenarioReconcile(common.TransactionCase):
|
||||||
'account': self.ref('account.a_recv'),
|
'account': self.ref('account.a_recv'),
|
||||||
'reconcile_method': [
|
'reconcile_method': [
|
||||||
(0, 0, {
|
(0, 0, {
|
||||||
'name': 'mass.reconcile.simple.partner',
|
'name': 'mass.reconcile.simple.partner',
|
||||||
}
|
})
|
||||||
)
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -141,15 +141,14 @@ The lines should have the partner, the credit entry ref. is matched vs the debit
|
||||||
|
|
||||||
<record forcecreate="True" id="ir_cron_run_reconciliations" model="ir.cron">
|
<record forcecreate="True" id="ir_cron_run_reconciliations" model="ir.cron">
|
||||||
<field name="name">Do Automatic Reconciliations</field>
|
<field name="name">Do Automatic Reconciliations</field>
|
||||||
<field eval="False" name="active"/>
|
<field name="model_id" ref="account_mass_reconcile.model_account_mass_reconcile"/>
|
||||||
|
<field name="active" eval="False"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="interval_number">3</field>
|
<field name="interval_number">3</field>
|
||||||
<field name="interval_type">hours</field>
|
<field name="interval_type">hours</field>
|
||||||
<field name="numbercall">-1</field>
|
<field name="numbercall">-1</field>
|
||||||
<field eval="False" name="doall"/>
|
<field name="doall" eval="False"/>
|
||||||
<field eval="'account.mass.reconcile'" name="model"/>
|
<field name="code">model.run_scheduler()</field>
|
||||||
<field eval="'run_scheduler'" name="function"/>
|
|
||||||
<field eval="'()'" name="args"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
|
|
|
@ -1,22 +1,30 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
|
|
||||||
<record id="view_account_config" model="ir.ui.view">
|
<record id="view_account_config" model="ir.ui.view">
|
||||||
<field name="name">account settings</field>
|
<field name="name">account settings</field>
|
||||||
<field name="model">account.config.settings</field>
|
<field name="model">res.config.settings</field>
|
||||||
<field name="inherit_id" ref="account.view_account_config_settings"/>
|
<field name="inherit_id" ref="account.res_config_settings_view_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<group name="bank_cash" position="after">
|
<xpath expr="//div[@id='invoicing_settings']" position="after">
|
||||||
<separator string="Reconciliation"/>
|
<h2>Reconciliation</h2>
|
||||||
<group>
|
<div class="row mt16 o_settings_container" id="reconciliation_settings">
|
||||||
<label for="id" string="Options"/>
|
<div class="col-xs-12 col-md-6 o_setting_box">
|
||||||
<div name="reconciliation_config">
|
<div class="o_setting_left_pane"/>
|
||||||
<div>
|
<div class="o_setting_right_pane">
|
||||||
<label for="reconciliation_commit_every"/>
|
<label string="Commit frequency"/>
|
||||||
<field name="reconciliation_commit_every" class="oe_inline"/>
|
<div class="text-muted">
|
||||||
|
How often to commit when performing automatic reconciliation.
|
||||||
|
Leave zero to commit only at the end of the process.
|
||||||
|
</div>
|
||||||
|
<div class="content-group">
|
||||||
|
<field name="reconciliation_commit_every" class="oe_inline"/>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</group>
|
</div>
|
||||||
</group>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|
Loading…
Reference in New Issue