diff --git a/account_operation_rule/__init__.py b/account_operation_rule/__init__.py deleted file mode 100644 index bad9dcddcb..0000000000 --- a/account_operation_rule/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import model diff --git a/account_operation_rule/i18n/account_statement_operation_rule.pot b/account_operation_rule/i18n/account_statement_operation_rule.pot deleted file mode 100644 index 65bd7c36d4..0000000000 --- a/account_operation_rule/i18n/account_statement_operation_rule.pot +++ /dev/null @@ -1,152 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * account_operation_rule -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-16 14:46+0000\n" -"PO-Revision-Date: 2015-03-16 14:46+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_operation_rule -#: model:ir.actions.act_window,help:account_operation_rule.action_account_operation_rule -msgid "

\n" -" Click to create a statement operation rule.\n" -"

\n" -" Those can be used to automatically create a move line when reconciling\n" -" your bank statements.\n" -"

\n" -" " -msgstr "" - -#. module: account_operation_rule -#: view:account.operation.rule:account_operation_rule.view_account_operation_rule_form -msgid "And" -msgstr "" - -#. module: account_operation_rule -#: view:account.operation.rule:account_operation_rule.view_account_operation_rule_form -msgid "And the currency is one of" -msgstr "" - -#. module: account_operation_rule -#: model:ir.model,name:account_operation_rule.model_account_bank_statement_line -msgid "Bank Statement Line" -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,create_uid:0 -msgid "Created by" -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,create_date:0 -msgid "Created on" -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,currencies:0 -#: selection:account.operation.rule,rule_type:0 -msgid "Currencies" -msgstr "" - -#. module: account_operation_rule -#: help:account.operation.rule,currencies:0 -msgid "For 'Currencies' rules, you can choose for which currencies the rule will be applicable." -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,id:0 -msgid "ID" -msgstr "" - -#. module: account_operation_rule -#: help:account.operation.rule,sequence:0 -msgid "If several rules match, the first one is used." -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,write_uid:0 -msgid "Last Updated by" -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,write_date:0 -msgid "Last Updated on" -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,amount_max:0 -msgid "Max. Amount" -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,amount_min:0 -msgid "Min. Amount" -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,name:0 -msgid "Name" -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,operations:0 -msgid "Operations" -msgstr "" - -#. module: account_operation_rule -#: view:account.operation.rule:account_operation_rule.view_account_operation_rule_form -msgid "Result" -msgstr "" - -#. module: account_operation_rule -#: selection:account.operation.rule,rule_type:0 -msgid "Roundings" -msgstr "" - -#. module: account_operation_rule -#: view:account.operation.rule:account_operation_rule.view_account_operation_rule_form -msgid "Rule" -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,sequence:0 -msgid "Sequence" -msgstr "" - -#. module: account_operation_rule -#: view:account.operation.rule:account_operation_rule.view_account_operation_rule_form -msgid "Statement Operation Rule" -msgstr "" - -#. module: account_operation_rule -#: view:account.operation.rule:account_operation_rule.view_account_operation_rule_search -#: view:account.operation.rule:account_operation_rule.view_account_operation_rule_tree -#: model:ir.actions.act_window,name:account_operation_rule.action_account_operation_rule -#: model:ir.ui.menu,name:account_operation_rule.menu_action_account_operation_rule -msgid "Statement Operation Rules" -msgstr "" - -#. module: account_operation_rule -#: view:account.operation.rule:account_operation_rule.view_account_operation_rule_form -msgid "Then the following operations will be applied:" -msgstr "" - -#. module: account_operation_rule -#: field:account.operation.rule,rule_type:0 -msgid "Type" -msgstr "" - -#. module: account_operation_rule -#: view:account.operation.rule:account_operation_rule.view_account_operation_rule_form -msgid "When the balance is between" -msgstr "" - diff --git a/account_operation_rule/i18n/en.po b/account_operation_rule/i18n/en.po deleted file mode 100644 index a0c5836d85..0000000000 --- a/account_operation_rule/i18n/en.po +++ /dev/null @@ -1,182 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * account_operation_rule -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-06-30 02:44+0000\n" -"PO-Revision-Date: 2016-06-30 02:44+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_operation_rule -#: model:ir.ui.view,arch_db:account_operation_rule.view_account_operation_rule_form -msgid "And" -msgstr "And" - -#. module: account_operation_rule -#: model:ir.ui.view,arch_db:account_operation_rule.view_account_operation_rule_form -msgid "And the currency is one of" -msgstr "And the currency is one of" - -#. module: account_operation_rule -#: model:ir.model,name:account_operation_rule.model_account_bank_statement_line -msgid "Bank Statement Line" -msgstr "Bank Statement Line" - -#. module: account_operation_rule -#: model:ir.actions.act_window,help:account_operation_rule.action_account_operation_rule -msgid "Click to create a reconciliation rule." -msgstr "Click to create a reconciliation rule." - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_create_uid -msgid "Created by" -msgstr "Created by" - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_create_date -msgid "Created on" -msgstr "Created on" - -#. module: account_operation_rule -#: selection:account.operation.rule,rule_type:0 -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_currencies -msgid "Currencies" -msgstr "Currencies" - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_display_name -msgid "Display Name" -msgstr "Display Name" - -#. module: account_operation_rule -#: model:ir.model.fields,help:account_operation_rule.field_account_operation_rule_currencies -msgid "" -"For 'Currencies' rules, you can choose for which currencies the rule will be" -" applicable." -msgstr "" -"For 'Currencies' rules, you can choose for which currencies the rule will be" -" applicable." - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_id -msgid "ID" -msgstr "ID" - -#. module: account_operation_rule -#: model:ir.model.fields,help:account_operation_rule.field_account_operation_rule_sequence -msgid "If several rules match, the first one is used." -msgstr "If several rules match, the first one is used." - -#. module: account_operation_rule -#: model:ir.model,name:account_operation_rule.model_account_journal -msgid "Journal" -msgstr "Journal" - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule___last_update -msgid "Last Modified on" -msgstr "Last Modified on" - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_write_uid -msgid "Last Updated by" -msgstr "Last Updated by" - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_write_date -msgid "Last Updated on" -msgstr "Last Updated on" - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_amount_max -msgid "Max. Amount" -msgstr "Max. Amount" - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_amount_min -msgid "Min. Amount" -msgstr "Min. Amount" - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_name -msgid "Name" -msgstr "Name" - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_operations -msgid "Operations" -msgstr "Operations" - -#. module: account_operation_rule -#: model:ir.actions.act_window,name:account_operation_rule.action_account_operation_rule -#: model:ir.ui.view,arch_db:account_operation_rule.account_journal_dashboard_kanban_view -msgid "Reconciliation Rules" -msgstr "Reconciliation Rules" - -#. module: account_operation_rule -#: model:ir.ui.view,arch_db:account_operation_rule.view_account_operation_rule_form -msgid "Result" -msgstr "Result" - -#. module: account_operation_rule -#: selection:account.operation.rule,rule_type:0 -msgid "Roundings" -msgstr "Roundings" - -#. module: account_operation_rule -#: model:ir.ui.view,arch_db:account_operation_rule.view_account_operation_rule_form -msgid "Rule" -msgstr "Rule" - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_sequence -msgid "Sequence" -msgstr "Sequence" - -#. module: account_operation_rule -#: model:ir.ui.view,arch_db:account_operation_rule.view_account_operation_rule_form -msgid "Statement Operation Rule" -msgstr "Statement Operation Rule" - -#. module: account_operation_rule -#: model:ir.ui.view,arch_db:account_operation_rule.view_account_operation_rule_search -#: model:ir.ui.view,arch_db:account_operation_rule.view_account_operation_rule_tree -msgid "Statement Operation Rules" -msgstr "Statement Operation Rules" - -#. module: account_operation_rule -#: model:ir.ui.view,arch_db:account_operation_rule.view_account_operation_rule_form -msgid "Then the following operations will be applied:" -msgstr "Then the following operations will be applied:" - -#. module: account_operation_rule -#: model:ir.actions.act_window,help:account_operation_rule.action_account_operation_rule -msgid "" -"Those can be used to automatically create a move line when reconciling\n" -" your bank statements." -msgstr "" -"Those can be used to automatically create a move line when reconciling\n" -" your bank statements." - -#. module: account_operation_rule -#: model:ir.model.fields,field_description:account_operation_rule.field_account_operation_rule_rule_type -msgid "Type" -msgstr "Type" - -#. module: account_operation_rule -#: model:ir.ui.view,arch_db:account_operation_rule.view_account_operation_rule_form -msgid "When the balance is between" -msgstr "When the balance is between" - -#. module: account_operation_rule -#: model:ir.model,name:account_operation_rule.model_account_operation_rule -msgid "account.operation.rule" -msgstr "account.operation.rule" diff --git a/account_operation_rule/security/ir.model.access.csv b/account_operation_rule/security/ir.model.access.csv deleted file mode 100644 index a551798ba7..0000000000 --- a/account_operation_rule/security/ir.model.access.csv +++ /dev/null @@ -1,2 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_account_operation_rule,account.statement.operation.rule,model_account_operation_rule,account.group_account_user,1,1,1,1 diff --git a/account_operation_rule/static/src/js/account_widgets.js b/account_operation_rule/static/src/js/account_widgets.js deleted file mode 100644 index 8d7a34a781..0000000000 --- a/account_operation_rule/static/src/js/account_widgets.js +++ /dev/null @@ -1,62 +0,0 @@ -odoo.define('account_operation_rule', function (require) { - "use strict"; - - var core = require('web.core'); - var Model = require('web.Model'); - - var reconciliation = require('account.reconciliation'); - - reconciliation.bankStatementReconciliationLine.include({ - init: function(parent, context) { - this._super(parent, context); - this.preset_auto_clicked = false; - }, - - operation_rules: function () { - var self = this; - var model_operation_rule = new Model("account.operation.rule"); - model_operation_rule.call("operations_for_reconciliation", - [self.st_line.id, _.pluck(self.get("mv_lines_selected"), 'id')] - ).then(function (operations) { - _.each(operations, function (operation_id) { - var preset_btn = self.$("button.preset[data-presetid='" + operation_id + "']"); - preset_btn.trigger('click'); - - // Cannot click on add_line link for user here - // even with a when().done() - // because preset_btn click handler makes a rpc call - // via formCreateInputChanged method - // and we have to wait for response - self.preset_auto_clicked = true; - }); - }); - }, - - /** - * Click on add_line link if preset button have been clicked - * automatically. - */ - formCreateInputChanged: function(elt, val) { - var self = this; - var deferred = this._super(elt, val); - deferred.done(function() { - if (self.preset_auto_clicked) { - self.addLineBeingEdited(); - } - }); - }, - - render: function () { - var deferred = this._super(); - if (deferred) { - deferred.done(this.operation_rules()); - } - return deferred; - }, - restart: function () { - var deferred = this._super(); - deferred.done(this.operation_rules()); - return deferred; - } - }); -}); diff --git a/account_operation_rule/view/account_operation_rule.xml b/account_operation_rule/view/account_operation_rule.xml deleted file mode 100644 index f31ede732c..0000000000 --- a/account_operation_rule/view/account_operation_rule.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/account_operation_rule/README.rst b/account_reconcile_rule/README.rst similarity index 73% rename from account_operation_rule/README.rst rename to account_reconcile_rule/README.rst index 0f1a5247e5..f5167b5702 100644 --- a/account_operation_rule/README.rst +++ b/account_reconcile_rule/README.rst @@ -1,14 +1,16 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :alt: License +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: https://www.gnu.org/licenses/agpl + :alt: License: AGPL-3 -Bank Statement Operation Rules -============================== +======================= +Account Reconcile Rules +======================= This module complements the Reconciliation of the bank statements. When the bank statement matches one or more journal entry for a line and there is a remaining balance, Odoo proposes you to click on buttons that -will generate write-off entries according to pre-configured *Statement -Operation Templates*. The aim of this module is to automatically click +will generate write-off entries according to pre-configured *Reconciliation +Models*. The aim of this module is to automatically click for you on these buttons (i.e. create the write-off journal entries) when some rules are respected, rules that you can configure. @@ -29,7 +31,7 @@ Configuration ------------- As this module aims to automatize the ``Reconciliation Models``, -you first want to ensure that you have at least one operation configured. +you first want to ensure that you have at least one model configured. You can find them in ``Invoicing > Dashboard > Bank card > More > Reconciliation Models``. An example of a common operation is: @@ -74,29 +76,42 @@ configured. .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/98/9.0 + :target: https://runbot.odoo-community.org/runbot/98/11.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smash it by providing detailed and welcomed feedback. Credits ======= +Images +------ + +* Odoo Community Association: `Icon `_. + Contributors ------------ * Guewen Baconnier * Cyril Gaudin +* Akim Juillerat Maintainer ---------- -.. image:: http://odoo-community.org/logo.png +.. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association - :target: http://odoo-community.org + :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. +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. +To contribute to this module, please visit https://odoo-community.org. diff --git a/account_reconcile_rule/__init__.py b/account_reconcile_rule/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/account_reconcile_rule/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/account_operation_rule/__manifest__.py b/account_reconcile_rule/__manifest__.py similarity index 54% rename from account_operation_rule/__manifest__.py rename to account_reconcile_rule/__manifest__.py index 7a2acdff3e..3e537ccfd7 100644 --- a/account_operation_rule/__manifest__.py +++ b/account_reconcile_rule/__manifest__.py @@ -1,11 +1,10 @@ -# -*- coding: utf-8 -*- # Author: Guewen Baconnier -# © 2014-2016 Camptocamp SA +# Copyright 2014-2016 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -{'name': 'Bank Statement Operation Rules', - 'version': '9.0.1.0.0', +{'name': 'Account Reconcile Rules', + 'version': '11.0.1.0.0', 'author': 'Camptocamp, Odoo Community Association (OCA)', 'maintainer': 'Odoo Community Association (OCA)', 'license': 'AGPL-3', @@ -13,12 +12,10 @@ 'depends': [ 'account', ], - 'website': 'http://www.camptocamp.com', + 'website': 'https://github.com/OCA/account-reconcile', 'data': [ - 'view/account_operation_rule.xml', - 'view/account_operation_rule_view.xml', + 'views/account_reconcile_rule.xml', + 'views/account_reconcile_rule_view.xml', 'security/ir.model.access.csv', ], - 'installable': False, - 'auto_install': False, } diff --git a/account_operation_rule/i18n/am.po b/account_reconcile_rule/i18n/am.po similarity index 100% rename from account_operation_rule/i18n/am.po rename to account_reconcile_rule/i18n/am.po diff --git a/account_operation_rule/i18n/ca.po b/account_reconcile_rule/i18n/ca.po similarity index 100% rename from account_operation_rule/i18n/ca.po rename to account_reconcile_rule/i18n/ca.po diff --git a/account_operation_rule/i18n/de.po b/account_reconcile_rule/i18n/de.po similarity index 100% rename from account_operation_rule/i18n/de.po rename to account_reconcile_rule/i18n/de.po diff --git a/account_operation_rule/i18n/el_GR.po b/account_reconcile_rule/i18n/el_GR.po similarity index 100% rename from account_operation_rule/i18n/el_GR.po rename to account_reconcile_rule/i18n/el_GR.po diff --git a/account_operation_rule/i18n/es.po b/account_reconcile_rule/i18n/es.po similarity index 100% rename from account_operation_rule/i18n/es.po rename to account_reconcile_rule/i18n/es.po diff --git a/account_operation_rule/i18n/es_ES.po b/account_reconcile_rule/i18n/es_ES.po similarity index 100% rename from account_operation_rule/i18n/es_ES.po rename to account_reconcile_rule/i18n/es_ES.po diff --git a/account_operation_rule/i18n/fi.po b/account_reconcile_rule/i18n/fi.po similarity index 100% rename from account_operation_rule/i18n/fi.po rename to account_reconcile_rule/i18n/fi.po diff --git a/account_operation_rule/i18n/fr.po b/account_reconcile_rule/i18n/fr.po similarity index 100% rename from account_operation_rule/i18n/fr.po rename to account_reconcile_rule/i18n/fr.po diff --git a/account_operation_rule/i18n/gl.po b/account_reconcile_rule/i18n/gl.po similarity index 100% rename from account_operation_rule/i18n/gl.po rename to account_reconcile_rule/i18n/gl.po diff --git a/account_operation_rule/i18n/hr_HR.po b/account_reconcile_rule/i18n/hr_HR.po similarity index 100% rename from account_operation_rule/i18n/hr_HR.po rename to account_reconcile_rule/i18n/hr_HR.po diff --git a/account_operation_rule/i18n/it.po b/account_reconcile_rule/i18n/it.po similarity index 100% rename from account_operation_rule/i18n/it.po rename to account_reconcile_rule/i18n/it.po diff --git a/account_operation_rule/i18n/pt.po b/account_reconcile_rule/i18n/pt.po similarity index 100% rename from account_operation_rule/i18n/pt.po rename to account_reconcile_rule/i18n/pt.po diff --git a/account_operation_rule/i18n/pt_BR.po b/account_reconcile_rule/i18n/pt_BR.po similarity index 100% rename from account_operation_rule/i18n/pt_BR.po rename to account_reconcile_rule/i18n/pt_BR.po diff --git a/account_operation_rule/i18n/pt_PT.po b/account_reconcile_rule/i18n/pt_PT.po similarity index 100% rename from account_operation_rule/i18n/pt_PT.po rename to account_reconcile_rule/i18n/pt_PT.po diff --git a/account_operation_rule/i18n/sl.po b/account_reconcile_rule/i18n/sl.po similarity index 100% rename from account_operation_rule/i18n/sl.po rename to account_reconcile_rule/i18n/sl.po diff --git a/account_operation_rule/i18n/tr.po b/account_reconcile_rule/i18n/tr.po similarity index 100% rename from account_operation_rule/i18n/tr.po rename to account_reconcile_rule/i18n/tr.po diff --git a/account_operation_rule/model/__init__.py b/account_reconcile_rule/models/__init__.py similarity index 51% rename from account_operation_rule/model/__init__.py rename to account_reconcile_rule/models/__init__.py index 01f3b18d9d..ff45280931 100644 --- a/account_operation_rule/model/__init__.py +++ b/account_reconcile_rule/models/__init__.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - from . import account_journal -from . import account_operation_rule +from . import account_reconcile_rule from . import account_statement_line diff --git a/account_operation_rule/model/account_journal.py b/account_reconcile_rule/models/account_journal.py similarity index 60% rename from account_operation_rule/model/account_journal.py rename to account_reconcile_rule/models/account_journal.py index 65529b9005..f2cd8350ad 100644 --- a/account_operation_rule/model/account_journal.py +++ b/account_reconcile_rule/models/account_journal.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -# © 2016 Cyril Gaudin (Camptocamp) +# Copyright 2016 Cyril Gaudin (Camptocamp) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import api, models +from odoo import api, models class AccountJournal(models.Model): @@ -11,6 +10,6 @@ class AccountJournal(models.Model): @api.multi def open_reconciliation_rules(self): return self.env['ir.actions.act_window'].for_xml_id( - "account_operation_rule", - "action_account_operation_rule" + "account_reconcile_rule", + "action_account_reconcile_rule" ) diff --git a/account_operation_rule/model/account_operation_rule.py b/account_reconcile_rule/models/account_reconcile_rule.py similarity index 81% rename from account_operation_rule/model/account_operation_rule.py rename to account_reconcile_rule/models/account_reconcile_rule.py index 4f80deff0a..78d45a5ecd 100644 --- a/account_operation_rule/model/account_operation_rule.py +++ b/account_reconcile_rule/models/account_reconcile_rule.py @@ -1,14 +1,13 @@ -# -*- coding: utf-8 -*- # Author: Guewen Baconnier -# © 2014-2016 Camptocamp SA +# Copyright 2014-2016 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, fields, api -from openerp.addons import decimal_precision as dp +from odoo import models, fields, api +from odoo.addons import decimal_precision as dp -class AccountOperationRule(models.Model): - _name = 'account.operation.rule' +class AccountReconcileRule(models.Model): + _name = 'account.reconcile.rule' _order = 'sequence ASC, id ASC' @@ -20,8 +19,9 @@ class AccountOperationRule(models.Model): default='rounding', required=True, ) - operations = fields.Many2many( - comodel_name='account.operation.template', + reconcile_model_ids = fields.Many2many( + comodel_name='account.reconcile.model', + string='Reconciliation models', ) amount_min = fields.Float( string='Min. Amount', @@ -31,7 +31,7 @@ class AccountOperationRule(models.Model): string='Max. Amount', digits=dp.get_precision('Account'), ) - currencies = fields.Many2many( + currency_ids = fields.Many2many( comodel_name='res.currency', string='Currencies', help="For 'Currencies' rules, you can choose for which currencies " @@ -44,7 +44,7 @@ class AccountOperationRule(models.Model): @staticmethod def _between_with_bounds(low, value, high, currency): - """ Equivalent to a three way comparison: ``min <= value <= high`` + """Equivalent to a three way comparison: ``min <= value <= high`` The comparisons are done with the currency to use the correct precision. @@ -57,10 +57,8 @@ def _between_with_bounds(low, value, high, currency): @api.multi def _balance_in_range(self, balance, currency): - amount_min = self.amount_min - amount_max = self.amount_max - return self._between_with_bounds(amount_min, balance, - amount_max, currency) + return self._between_with_bounds(self.amount_min, balance, + self.amount_max, currency) @api.model def _is_multicurrency(self, statement_line): @@ -77,7 +75,7 @@ def _is_valid_balance(self, statement_line, balance): @api.multi def _is_valid_multicurrency(self, statement_line, move_lines, balance): - """ Check if the multi-currency rule can be applied + """Check if the multi-currency rule can be applied. The rule is applied if and only if: * The currency is not company's one @@ -88,7 +86,7 @@ def _is_valid_multicurrency(self, statement_line, move_lines, balance): if not self._is_multicurrency(statement_line): return False currency = statement_line.currency_for_rules() - if currency not in self.currencies: + if currency not in self.currency_ids: return False amount_currency = statement_line.amount_currency for move_line in move_lines: @@ -105,8 +103,7 @@ def _is_valid_multicurrency(self, statement_line, move_lines, balance): @api.multi def is_valid(self, statement_line, move_lines, balance): - """ Returns True if a rule applies to a group of statement_line + - move lines. + """Check if a rule applies to a group of statement_line + move lines. This is the public method where the rule is evaluated whatever its type is. When a rule returns True, it means that it is a @@ -130,8 +127,7 @@ def is_valid(self, statement_line, move_lines, balance): @api.model def find_first_rule(self, statement_line, move_lines): - """ Find the rules that apply to a statement line and - a selection of move lines. + """Find rules to apply to given statement line and move lines. :param statement_line: the line to reconcile :param move_lines: the selected move lines for reconciliation @@ -152,17 +148,18 @@ def find_first_rule(self, statement_line, move_lines): return self.browse() @api.model - @api.returns('account.operation.template') - def operations_for_reconciliation(self, statement_line_id, move_line_ids): - """ Find the rule for the current reconciliation and returns the - ``account.operation.template`` of the found rule. + @api.returns('account.reconcile.model') + def models_for_reconciliation(self, statement_line_id, move_line_ids): + """Find the reconcile models for the for given statement and move lines. - Called from the javascript reconciliation view. + Look for the first reconciliation rule to apply and return its + reconciliation models. + Called from the javascript reconciliation view. """ line_obj = self.env['account.bank.statement.line'] move_line_obj = self.env['account.move.line'] statement_line = line_obj.browse(statement_line_id) move_lines = move_line_obj.browse(move_line_ids) rules = self.find_first_rule(statement_line, move_lines) - return rules.operations + return rules.reconcile_model_ids diff --git a/account_operation_rule/model/account_statement_line.py b/account_reconcile_rule/models/account_statement_line.py similarity index 78% rename from account_operation_rule/model/account_statement_line.py rename to account_reconcile_rule/models/account_statement_line.py index 4b15caa816..56d1dada58 100644 --- a/account_operation_rule/model/account_statement_line.py +++ b/account_reconcile_rule/models/account_statement_line.py @@ -1,10 +1,9 @@ -# -*- coding: utf-8 -*- # Author: Guewen Baconnier -# © 2014-2016 Camptocamp SA +# Copyright 2014-2016 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, api +from odoo import models, api class AccountBankStatementLine(models.Model): diff --git a/account_reconcile_rule/security/ir.model.access.csv b/account_reconcile_rule/security/ir.model.access.csv new file mode 100644 index 0000000000..007b87bb33 --- /dev/null +++ b/account_reconcile_rule/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_account_reconcile_rule,account.statement.reconcile.rule,model_account_reconcile_rule,account.group_account_user,1,1,1,1 diff --git a/account_reconcile_rule/static/src/js/account_widgets.js b/account_reconcile_rule/static/src/js/account_widgets.js new file mode 100644 index 0000000000..cd0282f490 --- /dev/null +++ b/account_reconcile_rule/static/src/js/account_widgets.js @@ -0,0 +1,50 @@ +odoo.define('account_reconcile_rule', function (require) { + "use strict"; + + var core = require('web.core'); + var reconciliation_renderer = require('account.ReconciliationRenderer'); + + /** + * Automatically apply reconciliation models according to the + * reconciliation rules matching the current statement line and move + * lines being reconciled. + */ + reconciliation_renderer.LineRenderer.include({ + /** + * Get the reconciliation models to apply through RPC call and + * create the write off entries. + */ + reconciliation_rule_models: function() { + var self = this; + // Get the statement line + var line = this.model.getLine(this.handle) + // Call the models_for_reconciliation through RPC + this._rpc({ + model: 'account.reconcile.rule', + method: 'models_for_reconciliation', + args: [ + line.st_line.id, + _.pluck(line.reconciliation_proposition, 'id') + ], + }).done(function(rule_models) { + // Loop on each models and create the corresponding write off + // entries + _.each(rule_models, function (rule_model_id) { + self.trigger_up('quick_create_proposition', + {'data': rule_model_id}); + }) + }) + }, + /* + * Add the write off entries after the the line renderer is ready + */ + start: function () { + var self = this; + var deferred = this._super(); + if (deferred) { + deferred.done(this.reconciliation_rule_models()); + } + return deferred; + }, + }); +}); diff --git a/account_operation_rule/tests/__init__.py b/account_reconcile_rule/tests/__init__.py similarity index 78% rename from account_operation_rule/tests/__init__.py rename to account_reconcile_rule/tests/__init__.py index 65ba9f171e..996cc068a3 100644 --- a/account_operation_rule/tests/__init__.py +++ b/account_reconcile_rule/tests/__init__.py @@ -1,6 +1,5 @@ -# -*- coding: utf-8 -*- # Author: Guewen Baconnier -# © 2014-2016 Camptocamp SA +# Copyright 2014-2016 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import test_journal diff --git a/account_operation_rule/tests/common.py b/account_reconcile_rule/tests/common.py similarity index 77% rename from account_operation_rule/tests/common.py rename to account_reconcile_rule/tests/common.py index 8cbe1022dd..2e852a9ce6 100644 --- a/account_operation_rule/tests/common.py +++ b/account_reconcile_rule/tests/common.py @@ -1,45 +1,45 @@ -# -*- coding: utf-8 -*- # Author: Guewen Baconnier -# © 2014-2016 Camptocamp SA +# Copyright 2014-2016 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.tests.common import TransactionCase +from odoo.tests.common import SavepointCase -class AccountOperationTestCase(TransactionCase): +class AccountReconciliationModelTestCase(SavepointCase): - def setUp(self): - super(AccountOperationTestCase, self).setUp() - self.cash_journal = self.env['account.journal'].create({ + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.reconcile_model_obj = cls.env['account.reconcile.model'] + cls.rule_obj = cls.env['account.reconcile.rule'] + cls.journal_obj = cls.env['account.journal'] + cls.account_type_obj = cls.env['account.account.type'] + cls.account_obj = cls.env['account.account'] + cls.cash_journal = cls.journal_obj.create({ 'name': 'Unittest Cash journal', 'code': 'CASH', 'type': 'cash', }) - - self.sale_journal = self.env['account.journal'].create({ + cls.sale_journal = cls.journal_obj.create({ 'name': 'Unittest Customer Invoices', 'code': 'INV', 'type': 'sale', }) - - receivable_type = self.env['account.account.type'].create({ + receivable_type = cls.account_type_obj.create({ 'name': 'Receivable', 'type': 'receivable' }) - - self.account_receivable = self.env['account.account'].create({ + cls.account_receivable = cls.account_obj.create({ 'name': 'Unittest Account Receivable', 'user_type_id': receivable_type.id, 'code': 'TEST101200', 'reconcile': True, }) - - income_type = self.env['account.account.type'].create({ + income_type = cls.account_type_obj.create({ 'name': 'Unittest Income', 'type': 'other' }) - - self.account_sale = self.env['account.account'].create({ + cls.account_sale = cls.account_obj.create({ 'name': 'Unittest Account Sale', 'user_type_id': income_type.id, 'code': 'TEST200000', diff --git a/account_operation_rule/tests/test_journal.py b/account_reconcile_rule/tests/test_journal.py similarity index 66% rename from account_operation_rule/tests/test_journal.py rename to account_reconcile_rule/tests/test_journal.py index b4d93da075..75b506c55f 100644 --- a/account_operation_rule/tests/test_journal.py +++ b/account_reconcile_rule/tests/test_journal.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- -# © 2016 Cyril Gaudin (Camptocamp) +# Copyright 2016 Cyril Gaudin (Camptocamp) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp.tests.common import TransactionCase +from odoo.tests.common import TransactionCase class TestJournal(TransactionCase): @@ -11,5 +10,5 @@ def test_open_reconciliation_rules(self): # Just test that method returned the good view result = self.env['account.journal'].open_reconciliation_rules() - self.assertEqual('account.operation.rule', result['res_model']) + self.assertEqual('account.reconcile.rule', result['res_model']) self.assertEqual('form', result['view_type']) diff --git a/account_operation_rule/tests/test_rule_currency.py b/account_reconcile_rule/tests/test_rule_currency.py similarity index 65% rename from account_operation_rule/tests/test_rule_currency.py rename to account_reconcile_rule/tests/test_rule_currency.py index 7f3226ae29..bb82165c47 100644 --- a/account_operation_rule/tests/test_rule_currency.py +++ b/account_reconcile_rule/tests/test_rule_currency.py @@ -1,76 +1,78 @@ -# -*- coding: utf-8 -*- # Author: Guewen Baconnier -# © 2014-2016 Camptocamp SA +# Copyright 2014-2016 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from .common import AccountOperationTestCase +from .common import AccountReconciliationModelTestCase -class TestRuleCurrency(AccountOperationTestCase): +class TestRuleCurrency(AccountReconciliationModelTestCase): - def setUp(self): - super(TestRuleCurrency, self).setUp() - self.operation_obj = self.env['account.operation.template'] - self.rule_obj = self.env['account.operation.rule'] - self.aed = self.browse_ref('base.AED') - self.aed.active = True - self.afn = self.browse_ref('base.AFN') - self.afn.active = True - self.all = self.browse_ref('base.ALL') - self.all.active = True - self.amd = self.browse_ref('base.AMD') - self.amd.active = True - self.aoa = self.browse_ref('base.AOA') - self.aoa.active = True + @classmethod + def setUpClass(cls): + super().setUpClass() - self.operation_currency_1 = self.operation_obj.create({ + cls.aed = cls.env.ref('base.AED') + cls.aed.active = True + cls.afn = cls.env.ref('base.AFN') + cls.afn.active = True + cls.all = cls.env.ref('base.ALL') + cls.all.active = True + cls.amd = cls.env.ref('base.AMD') + cls.amd.active = True + cls.aoa = cls.env.ref('base.AOA') + cls.aoa.active = True + + cls.reconcile_model_currency_1 = cls.reconcile_model_obj.create({ 'name': 'Currency AED, AFR, ALL -1.0 to 0.0', 'label': 'Currency', - 'account_id': self.account_receivable.id, + 'account_id': cls.account_receivable.id, 'amount_type': 'percentage', 'amount': 100.0, }) - self.rule_currency_1 = self.rule_obj.create({ + cls.rule_currency_1 = cls.rule_obj.create({ 'name': 'Currency AED, AFR, ALL -1.0 to 0.0', 'rule_type': 'currency', - 'operations': [(6, 0, (self.operation_currency_1.id, ))], + 'reconcile_model_ids': [ + (6, 0, (cls.reconcile_model_currency_1.id,))], 'amount_min': -1.0, 'amount_max': 0, 'sequence': 1, - 'currencies': [(6, 0, [self.aed.id, self.afn.id, self.all.id])], + 'currency_ids': [(6, 0, [cls.aed.id, cls.afn.id, cls.all.id])], }) - self.operation_currency_2 = self.operation_obj.create({ + cls.reconcile_model_currency_2 = cls.reconcile_model_obj.create({ 'name': 'Currency AED, AFR, ALL -2.0 to -1.0', 'label': 'Currency', 'amount_type': 'percentage', 'amount': 100.0, }) - self.rule_currency_2 = self.rule_obj.create({ + cls.rule_currency_2 = cls.rule_obj.create({ 'name': 'Currency AED, AFR, ALL -2.0 to 1.0', 'rule_type': 'currency', - 'operations': [(6, 0, (self.operation_currency_2.id, ))], + 'reconcile_model_ids': [ + (6, 0, (cls.reconcile_model_currency_2.id, ))], 'amount_min': -2.0, 'amount_max': -1.0, 'sequence': 2, - 'currencies': [(6, 0, [self.aed.id, self.afn.id, self.all.id])], + 'currency_ids': [(6, 0, [cls.aed.id, cls.afn.id, cls.all.id])], }) - self.operation_currency_3 = self.operation_obj.create({ + cls.reconcile_model_currency_3 = cls.reconcile_model_obj.create({ 'name': 'Currency AMD, AOA -2.0 to 0.0', 'label': 'Currency', 'amount_type': 'percentage', 'amount': 100.0, }) - self.rule_currency_3 = self.rule_obj.create({ + cls.rule_currency_3 = cls.rule_obj.create({ 'name': 'Currency AMD, AOA -2.0 to 0.0', 'rule_type': 'currency', - 'operations': [(6, 0, (self.operation_currency_3.id, ))], + 'reconcile_model_ids': [ + (6, 0, (cls.reconcile_model_currency_3.id, ))], 'amount_min': -2, 'amount_max': 0, 'sequence': 2, - 'currencies': [(6, 0, [self.amd.id, self.aoa.id])], + 'currency_ids': [(6, 0, [cls.amd.id, cls.aoa.id])], }) def test_no_currency_match(self): @@ -80,15 +82,15 @@ def test_no_currency_match(self): -0.5, statement_line_currency=sek, move_line_currency=sek) - ops = self.rule_obj.operations_for_reconciliation(statement_line.id, - move_line.ids) + ops = self.rule_obj.models_for_reconciliation(statement_line.id, + move_line.ids) self.assertFalse(ops) def test_rounding_lines(self): """No Currencies rules on lines with company currency""" statement_line, move_line = self.prepare_statement(-0.5) - ops = self.rule_obj.operations_for_reconciliation(statement_line.id, - move_line.ids) + ops = self.rule_obj.models_for_reconciliation(statement_line.id, + move_line.ids) self.assertFalse(ops) def test_currency_rule_1(self): @@ -99,7 +101,7 @@ def test_currency_rule_1(self): move_line_currency=self.aed, amount_currency_difference=0) rule = self.rule_obj.find_first_rule(statement_line, [move_line]) - self.assertEquals(rule, self.rule_currency_1) + self.assertEqual(rule, self.rule_currency_1) def test_currency_rule_2(self): """Rule 2 is found with -2 AED""" @@ -109,7 +111,7 @@ def test_currency_rule_2(self): move_line_currency=self.aed, amount_currency_difference=0) rule = self.rule_obj.find_first_rule(statement_line, [move_line]) - self.assertEquals(rule, self.rule_currency_2) + self.assertEqual(rule, self.rule_currency_2) def test_currency_rule_3(self): """Rule 3 is found with -2 AOA""" @@ -119,7 +121,7 @@ def test_currency_rule_3(self): move_line_currency=self.aoa, amount_currency_difference=0) rule = self.rule_obj.find_first_rule(statement_line, [move_line]) - self.assertEquals(rule, self.rule_currency_3) + self.assertEqual(rule, self.rule_currency_3) def test_currency_rule_not_in_bounds(self): """No rule is found with -3 AOA""" @@ -149,4 +151,4 @@ def test_rule_amount_currency_difference_near_zero(self): move_line_currency=self.aed, amount_currency_difference=-0.001) rule = self.rule_obj.find_first_rule(statement_line, [move_line]) - self.assertEquals(rule, self.rule_currency_1) + self.assertEqual(rule, self.rule_currency_1) diff --git a/account_operation_rule/tests/test_rule_rounding.py b/account_reconcile_rule/tests/test_rule_rounding.py similarity index 70% rename from account_operation_rule/tests/test_rule_rounding.py rename to account_reconcile_rule/tests/test_rule_rounding.py index 20290eaa75..b8d44942ef 100644 --- a/account_operation_rule/tests/test_rule_rounding.py +++ b/account_reconcile_rule/tests/test_rule_rounding.py @@ -1,59 +1,60 @@ -# -*- coding: utf-8 -*- # Author: Guewen Baconnier -# © 2014-2016 Camptocamp SA +# Copyright 2014-2016 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from .common import AccountOperationTestCase +from .common import AccountReconciliationModelTestCase -class TestRuleRounding(AccountOperationTestCase): +class TestRuleRounding(AccountReconciliationModelTestCase): - def setUp(self): - super(TestRuleRounding, self).setUp() - self.operation_obj = self.env['account.operation.template'] - self.rule_obj = self.env['account.operation.rule'] - self.operation_round_1 = self.operation_obj.create({ + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.reconcile_model_round_1 = cls.reconcile_model_obj.create({ 'name': 'Rounding -1.0 to 0.0', 'label': 'Rounding', 'amount_type': 'percentage', 'amount': 100.0, }) - self.rule_round_1 = self.rule_obj.create({ + cls.rule_round_1 = cls.rule_obj.create({ 'name': 'Rounding -1.0 to 0.0', 'rule_type': 'rounding', - 'operations': [(6, 0, (self.operation_round_1.id, ))], + 'reconcile_model_ids': [ + (6, 0, (cls.reconcile_model_round_1.id, ))], 'amount_min': -1.0, 'amount_max': 0, 'sequence': 1, }) - self.operation_round_2 = self.operation_obj.create({ + cls.reconcile_model_round_2 = cls.reconcile_model_obj.create({ 'name': 'Rounding -2.0 to -1.0', 'label': 'Rounding', 'amount_type': 'percentage', 'amount': 100.0, }) - self.rule_round_2 = self.rule_obj.create({ + cls.rule_round_2 = cls.rule_obj.create({ 'name': 'Rounding -1.0 to 0.0', 'rule_type': 'rounding', - 'operations': [(6, 0, (self.operation_round_2.id, ))], + 'reconcile_model_ids': [ + (6, 0, (cls.reconcile_model_round_2.id, ))], 'amount_min': -2.0, 'amount_max': -1.0, 'sequence': 2, }) - self.operation_round_3 = self.operation_obj.create({ + cls.reconcile_model_round_3 = cls.reconcile_model_obj.create({ 'name': 'Rounding 0.0 to 2.0', 'label': 'Rounding', 'amount_type': 'percentage', 'amount': 100.0, }) - self.rule_round_3 = self.rule_obj.create({ + cls.rule_round_3 = cls.rule_obj.create({ 'name': 'Rounding 0.0 to 2.0', 'rule_type': 'rounding', - 'operations': [(6, 0, (self.operation_round_3.id, ))], + 'reconcile_model_ids': [ + (6, 0, (cls.reconcile_model_round_3.id, ))], 'amount_min': 0, 'amount_max': 2, 'sequence': 2, @@ -63,43 +64,43 @@ def test_rule_round_1(self): """-0.5 => rule round 1""" statement_line, move_line = self.prepare_statement(-0.5) rule = self.rule_obj.find_first_rule(statement_line, [move_line]) - self.assertEquals(rule, self.rule_round_1) + self.assertEqual(rule, self.rule_round_1) def test_rule_round_1_limit(self): """-1 => rule round 1""" statement_line, move_line = self.prepare_statement(-1) rule = self.rule_obj.find_first_rule(statement_line, [move_line]) - self.assertEquals(rule, self.rule_round_1) + self.assertEqual(rule, self.rule_round_1) def test_rule_round_1_near_limit(self): """-1.0001 => rule round 1""" statement_line, move_line = self.prepare_statement(-1.0001) rule = self.rule_obj.find_first_rule(statement_line, [move_line]) - self.assertEquals(rule, self.rule_round_1) + self.assertEqual(rule, self.rule_round_1) def test_rule_round_2(self): """-1.01 => rule round 2""" statement_line, move_line = self.prepare_statement(-1.01) rule = self.rule_obj.find_first_rule(statement_line, [move_line]) - self.assertEquals(rule, self.rule_round_2) + self.assertEqual(rule, self.rule_round_2) def test_rule_round_2_limit(self): """-2 => rule round 2""" statement_line, move_line = self.prepare_statement(-2) rule = self.rule_obj.find_first_rule(statement_line, [move_line]) - self.assertEquals(rule, self.rule_round_2) + self.assertEqual(rule, self.rule_round_2) def test_rule_round_3(self): """+1.5 => rule round 3""" statement_line, move_line = self.prepare_statement(1.5) rule = self.rule_obj.find_first_rule(statement_line, [move_line]) - self.assertEquals(rule, self.rule_round_3) + self.assertEqual(rule, self.rule_round_3) def test_rule_round_3_limit(self): """+2 => rule round 3""" statement_line, move_line = self.prepare_statement(2) rule = self.rule_obj.find_first_rule(statement_line, [move_line]) - self.assertEquals(rule, self.rule_round_3) + self.assertEqual(rule, self.rule_round_3) def test_rule_no_round_below(self): """-3 => no rule""" @@ -126,20 +127,20 @@ def test_rule_no_round_near_zero(self): self.assertFalse(rule) def test_operations(self): - """test operations_for_reconciliation()""" + """test models_for_reconciliation()""" statement_line, move_line = self.prepare_statement(-0.5) - ops = self.rule_obj.operations_for_reconciliation(statement_line.id, - move_line.ids) - self.assertEquals(ops, self.operation_round_1) + ops = self.rule_obj.models_for_reconciliation(statement_line.id, + move_line.ids) + self.assertEqual(ops, self.reconcile_model_round_1) def test_multicurrency_lines(self): """No rounding rules on multi-currency lines""" - currency = self.browse_ref('base.AED') + currency = self.env.ref('base.AED') statement_line, move_line = self.prepare_statement( -0.5, statement_line_currency=currency, move_line_currency=currency ) - ops = self.rule_obj.operations_for_reconciliation(statement_line.id, - move_line.ids) + ops = self.rule_obj.models_for_reconciliation(statement_line.id, + move_line.ids) self.assertFalse(ops) diff --git a/account_reconcile_rule/views/account_reconcile_rule.xml b/account_reconcile_rule/views/account_reconcile_rule.xml new file mode 100644 index 0000000000..7873ff9efe --- /dev/null +++ b/account_reconcile_rule/views/account_reconcile_rule.xml @@ -0,0 +1,8 @@ + + + + diff --git a/account_operation_rule/view/account_operation_rule_view.xml b/account_reconcile_rule/views/account_reconcile_rule_view.xml similarity index 67% rename from account_operation_rule/view/account_operation_rule_view.xml rename to account_reconcile_rule/views/account_reconcile_rule_view.xml index f749ce96da..2f51f4100c 100644 --- a/account_operation_rule/view/account_operation_rule_view.xml +++ b/account_reconcile_rule/views/account_reconcile_rule_view.xml @@ -1,9 +1,9 @@ - - account.operation.rule.form - account.operation.rule + + account.reconcile.rule.form + account.reconcile.rule
@@ -23,15 +23,15 @@ And -
@@ -39,9 +39,9 @@
- - account.operation.rule.tree - account.operation.rule + + account.reconcile.rule.tree + account.reconcile.rule @@ -49,33 +49,33 @@ - + - - account.operation.rule.search - account.operation.rule + + account.reconcile.rule.search + account.reconcile.rule - + - + Reconciliation Rules - account.operation.rule + account.reconcile.rule form tree,form - +

Click to create a reconciliation rule. @@ -92,7 +92,7 @@ account.journal - +