diff --git a/account_analytic_distribution/README.rst b/account_analytic_distribution/README.rst new file mode 100644 index 0000000000..dcc04f445c --- /dev/null +++ b/account_analytic_distribution/README.rst @@ -0,0 +1,99 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +============================= +Account Analytic Distribution +============================= + +Analytic accounting helps you to analyze costs and revenues in your company. +Analytic analysis allows you to answer specific business questions and +forecast possible future financial scenarios. + +In Odoo, analytic accounts are linked to general accounts but are treated +totally independently. So, you can enter various different analytic operations +that have no counterpart in the general financial accounts. + +By default, you can enter only one analytic account for each journal item and +only one analytic line it will be created. + +With this module, you can define an analytic distribution in every journal +item, so you can distribute total amount to several analytic accounts. + + +Configuration +============= + +To configure your analytic distributions go to: + +#. *Invoicing > Configuration > Settings* and activate checkbox **Analytic + accounting** in *Accounting & Finance*. +#. Now you see the menu *Invoicing > Configuration > Analytic Accounting > + Analytic Distributions* +#. Create a new analytic distribution and enter its name +#. Add some distribution rules: you must specify the analytic account and + percentage of total move line amount you want to distribute. +#. Save distribution. +#. You can set if sum of total percent of analytic accounts must be 100% or + not, if yo go to *Invoicing > Configuration > Settings* and set checkbox + **Force percent** in *Accounting & Finance*. + + +Usage +===== + +After installation, you'll see a new 'Analytic Distribution' column in +Journal Entry form (in Journal Items tab), in order to select the +analytic distribution you want when creating journal entries manually. You +can do the same in account invoice form and select your analytic distribution +in invoice lines. + +Multiple analytic lines are created when the invoice or the entries are +confirmed. + +You can continue using 'Analityc Account' field, but 'Analytic Distribution' +has precedence if defined. + + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/87/10.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 smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Pedro M. Baeza +* Rafael Blasco +* Antonio Espinosa +* Vicent Cubells + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/account_analytic_distribution/__init__.py b/account_analytic_distribution/__init__.py new file mode 100644 index 0000000000..8721dab385 --- /dev/null +++ b/account_analytic_distribution/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Antonio Espinosa - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/account_analytic_distribution/__manifest__.py b/account_analytic_distribution/__manifest__.py new file mode 100644 index 0000000000..d6148e4b91 --- /dev/null +++ b/account_analytic_distribution/__manifest__.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Antonio Espinosa - +# Copyright 2017 Vicent Cubells - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Account Analytic Distribution", + "summary": "Distribute incoming/outcoming account moves to several " + "analytic accounts", + "version": "10.0.1.0.0", + "category": "Accounting & Finance", + "website": "https://www.tecnativa.com", + "author": "Tecnativa, " + "Odoo Community Association (OCA)", + "license": "AGPL-3", + "depends": [ + "account", + ], + "data": [ + "security/ir.model.access.csv", + "views/res_config_view.xml", + "views/account_analytic_distribution_view.xml", + "views/account_move_view.xml", + "views/account_invoice_view.xml", + "views/account_move_line_view.xml", + ], + "installable": True, + "application": False, +} diff --git a/account_analytic_distribution/i18n/es.po b/account_analytic_distribution/i18n/es.po new file mode 100644 index 0000000000..e5752845f0 --- /dev/null +++ b/account_analytic_distribution/i18n/es.po @@ -0,0 +1,139 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_analytic_distribution +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-04-26 17:23+0000\n" +"PO-Revision-Date: 2017-04-26 17:23+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_analytic_distribution +#: model:ir.model.fields,field_description:account_analytic_distribution.field_account_analytic_distribution_rule_analytic_account_id +msgid "Analytic account" +msgstr "Cuenta analítica" + +#. module: account_analytic_distribution +#: sql_constraint:account.analytic.distribution.rule:0 +#: code:addons/account_analytic_distribution/models/account_analytic_distribution_rule.py:38 +#, python-format +msgid "Analytic account must be unique per distribution!" +msgstr "La cuenta analítica debe ser única por distribución!" + +#. module: account_analytic_distribution +#: model:ir.model,name:account_analytic_distribution.model_account_analytic_distribution +#: model:ir.model.fields,field_description:account_analytic_distribution.field_account_invoice_line_analytic_distribution_id +#: model:ir.model.fields,field_description:account_analytic_distribution.field_account_move_line_analytic_distribution_id +#: model:ir.ui.view,arch_db:account_analytic_distribution.account_analytic_distribution_form +#: model:ir.ui.view,arch_db:account_analytic_distribution.account_analytic_distribution_search +msgid "Analytic distribution" +msgstr "Distribución analítica" + +#. module: account_analytic_distribution +#: model:ir.model,name:account_analytic_distribution.model_account_analytic_distribution_rule +msgid "Analytic distribution rule" +msgstr "Regla de distribución analítica" + +#. module: account_analytic_distribution +#: model:ir.actions.act_window,name:account_analytic_distribution.account_analytic_distribution_action +#: model:ir.ui.menu,name:account_analytic_distribution.menu_account_analytic_distribution +#: model:ir.ui.view,arch_db:account_analytic_distribution.account_analytic_distribution_search +#: model:ir.ui.view,arch_db:account_analytic_distribution.account_analytic_distribution_tree +msgid "Analytic distributions" +msgstr "Distribuciones analíticas" + +#. module: account_analytic_distribution +#: model:ir.model.fields,field_description:account_analytic_distribution.field_account_analytic_distribution_company_id +msgid "Company" +msgstr "Compañía" + +#. module: account_analytic_distribution +#: model:ir.model.fields,field_description:account_analytic_distribution.field_account_analytic_distribution_rule_distribution_id +msgid "Distribution" +msgstr "Distribución" + +#. module: account_analytic_distribution +#: sql_constraint:account.analytic.distribution:0 +#: code:addons/account_analytic_distribution/models/account_analytic_distribution.py:35 +#, python-format +msgid "Distribution name must be unique per Company!" +msgstr "El nombre de la distribución ha de ser único por compañía!" + +#. module: account_analytic_distribution +#: model:ir.model.fields,field_description:account_analytic_distribution.field_account_analytic_distribution_rule_ids +#: model:ir.ui.view,arch_db:account_analytic_distribution.account_analytic_distribution_form +msgid "Distribution rules" +msgstr "Reglas de distribución" + +#. module: account_analytic_distribution +#: model:ir.model.fields,field_description:account_analytic_distribution.field_res_company_force_percent +msgid "Force percent" +msgstr "Forzar el porcentaje" + +#. module: account_analytic_distribution +#: model:ir.model.fields,help:account_analytic_distribution.field_res_company_force_percent +msgid "If checked, the sum of all percents of the analytic accounts in a distribution of this company must be 100%." +msgstr "Si está marcado, la suma del porcentaje de todas las cuentas analíticas de una distribución de esta compañía debe ser 100%." + +#. module: account_analytic_distribution +#: model:ir.model,name:account_analytic_distribution.model_account_invoice +msgid "Invoice" +msgstr "Factura" + +#. module: account_analytic_distribution +#: model:ir.model,name:account_analytic_distribution.model_account_invoice_line +msgid "Invoice Line" +msgstr "Linea de factura" + +#. module: account_analytic_distribution +#: model:ir.model,name:account_analytic_distribution.model_account_move_line +msgid "Journal Item" +msgstr "Apunte contable" + +#. module: account_analytic_distribution +#: model:ir.model.fields,field_description:account_analytic_distribution.field_account_analytic_distribution_name +msgid "Name" +msgstr "Nombre" + +#. module: account_analytic_distribution +#: model:ir.model.fields,field_description:account_analytic_distribution.field_account_analytic_distribution_rule_percent +msgid "Percentage" +msgstr "Porcentaje" + +#. module: account_analytic_distribution +#: sql_constraint:account.analytic.distribution.rule:0 +#: code:addons/account_analytic_distribution/models/account_analytic_distribution_rule.py:34 +#, python-format +msgid "Percentage must be positive!" +msgstr "El porcentaje ha de ser positivo!" + +#. module: account_analytic_distribution +#: sql_constraint:account.analytic.distribution.rule:0 +#: code:addons/account_analytic_distribution/models/account_analytic_distribution_rule.py:36 +#, python-format +msgid "Percentage must less or equal 100%!" +msgstr "El porcentaje ha de ser menor o iguak a 100%!" + +#. module: account_analytic_distribution +#: model:ir.ui.view,arch_db:account_analytic_distribution.account_analytic_distribution_form +msgid "Rules" +msgstr "Reglas" + +#. module: account_analytic_distribution +#: code:addons/account_analytic_distribution/models/account_analytic_distribution.py:49 +#, python-format +msgid "Rules percent doesn't sum 100%" +msgstr "El porcentaje de las reglas no suman 100%" + +#. module: account_analytic_distribution +#: model:ir.model.fields,field_description:account_analytic_distribution.field_account_analytic_distribution_rule_sequence +msgid "Sequence" +msgstr "Secuencia" + diff --git a/account_analytic_distribution/models/__init__.py b/account_analytic_distribution/models/__init__.py new file mode 100644 index 0000000000..db345ffae0 --- /dev/null +++ b/account_analytic_distribution/models/__init__.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Antonio Espinosa - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import account_analytic_distribution +from . import account_move_line +from . import account_invoice +from . import account_invoice_line +from . import res_config diff --git a/account_analytic_distribution/models/account_analytic_distribution.py b/account_analytic_distribution/models/account_analytic_distribution.py new file mode 100644 index 0000000000..d1dd3ecbb3 --- /dev/null +++ b/account_analytic_distribution/models/account_analytic_distribution.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Antonio Espinosa - +# Copyright 2017 Vicent Cubells - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class AccountAnalyticDistribution(models.Model): + _name = "account.analytic.distribution" + _description = "Analytic distribution" + _order = "name asc" + + @api.model + def _get_default_company(self): + m_company = self.env['res.company'] + return m_company._company_default_get('account.analytic.distribution') + + name = fields.Char( + string='Name', + required=True, + ) + company_id = fields.Many2one( + comodel_name='res.company', + string='Company', + required=True, + default=_get_default_company, + ) + rule_ids = fields.One2many( + string="Distribution rules", + comodel_name='account.analytic.distribution.rule', + inverse_name='distribution_id', + ) + + _sql_constraints = [ + ('name_uniq', 'unique(name, company_id)', + _('Distribution name must be unique per Company!')), + ] + + @api.multi + @api.constrains('rule_ids') + def _check_rule_ids(self): + for distribution in self: + force_percent = self.env['ir.values'].get_default( + 'account.config.settings', + 'group_force_percent', + ) + if not force_percent: + continue + total = sum(distribution.rule_ids.mapped('percent')) + if total != 100.00: + raise ValidationError(_("Rules percent doesn't sum 100%")) + + +class AccountAnalyticDistributionRule(models.Model): + _name = "account.analytic.distribution.rule" + _description = "Analytic distribution rule" + _order = "sequence asc" + + sequence = fields.Integer( + string='Sequence', + default=10, + ) + distribution_id = fields.Many2one( + string="Distribution", + required=True, + comodel_name='account.analytic.distribution', + ) + percent = fields.Float( + string="Percentage", + required=True, + ) + analytic_account_id = fields.Many2one( + string="Analytic account", + comodel_name='account.analytic.account', + ) + + _sql_constraints = [ + ('percent_positive', 'CHECK(percent > 0)', + _('Percentage must be positive!')), + ('percent_limit', 'CHECK(percent <= 100)', + _('Percentage must less or equal 100%!')), + ('analytic_uniq', 'unique(distribution_id, analytic_account_id)', + _('Analytic account must be unique per distribution!')), + ] diff --git a/account_analytic_distribution/models/account_invoice.py b/account_analytic_distribution/models/account_invoice.py new file mode 100644 index 0000000000..d4d4cfbbc7 --- /dev/null +++ b/account_analytic_distribution/models/account_invoice.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Antonio Espinosa - +# Copyright 2017 Vicent Cubells - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, models + + +class AccountInvoice(models.Model): + _inherit = 'account.invoice' + + def inv_line_characteristic_hashcode(self, invoice_line): + code = super(AccountInvoice, self).inv_line_characteristic_hashcode( + invoice_line) + hashcode = '%s-%s' % ( + code, invoice_line.get('analytic_distribution_id', 'False')) + return hashcode + + @api.model + def invoice_line_move_line_get(self): + invoice_line_model = self.env['account.invoice.line'] + res = super(AccountInvoice, self).invoice_line_move_line_get() + for move_line_dict in res: + if 'invl_id' in move_line_dict: + line = invoice_line_model.browse(move_line_dict['invl_id']) + move_line_dict['analytic_distribution_id'] = \ + line.analytic_distribution_id.id + return res + + @api.model + def line_get_convert(self, line, part): + res = super(AccountInvoice, self).line_get_convert(line, part) + res['analytic_distribution_id'] = line.get( + 'analytic_distribution_id', False) + return res diff --git a/account_analytic_distribution/models/account_invoice_line.py b/account_analytic_distribution/models/account_invoice_line.py new file mode 100644 index 0000000000..4b369060a0 --- /dev/null +++ b/account_analytic_distribution/models/account_invoice_line.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Antonio Espinosa - +# Copyright 2017 Vicent Cubells - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class AccountInvoiceLine(models.Model): + _inherit = "account.invoice.line" + + analytic_distribution_id = fields.Many2one( + comodel_name='account.analytic.distribution', + string='Analytic distribution', + ) diff --git a/account_analytic_distribution/models/account_move_line.py b/account_analytic_distribution/models/account_move_line.py new file mode 100644 index 0000000000..7995ee7e57 --- /dev/null +++ b/account_analytic_distribution/models/account_move_line.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Antonio Espinosa - +# Copyright 2017 Vicent Cubells - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class AccountMoveLine(models.Model): + _inherit = "account.move.line" + + analytic_distribution_id = fields.Many2one( + comodel_name='account.analytic.distribution', + string='Analytic distribution', + ) + + def _analytic_line_distributed_prepare(self, rule): + res = self._prepare_analytic_line() + for line_dict in res: + amount = (line_dict.get('amount') * rule.percent) / 100.0 + line_dict['amount'] = amount + line_dict['account_id'] = rule.analytic_account_id.id + return res and res[0] or False + + @api.multi + def create_analytic_lines(self): + super(AccountMoveLine, self).create_analytic_lines() + for line in self: + if line.analytic_distribution_id: + line.analytic_line_ids.unlink() + for rule in line.analytic_distribution_id.rule_ids: + values = line._analytic_line_distributed_prepare(rule) + self.env['account.analytic.line'].create(values) + return True diff --git a/account_analytic_distribution/models/res_config.py b/account_analytic_distribution/models/res_config.py new file mode 100644 index 0000000000..eeb5b8d779 --- /dev/null +++ b/account_analytic_distribution/models/res_config.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Vicent Cubells - +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class AccountConfigSettings(models.TransientModel): + _inherit = 'account.config.settings' + + group_force_percent = fields.Boolean( + string='Force percent', + default=False, + implied_group='account.group_account_manager', + help="If checked, the sum of all percents of the analytic accounts in " + "a distribution of this company must be 100%.", + ) diff --git a/account_analytic_distribution/security/ir.model.access.csv b/account_analytic_distribution/security/ir.model.access.csv new file mode 100644 index 0000000000..825e2f882d --- /dev/null +++ b/account_analytic_distribution/security/ir.model.access.csv @@ -0,0 +1,5 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_account_analytic_distribution","account.analytic.distribution","model_account_analytic_distribution","account.group_account_user",1,1,1,1 +"access_account_analytic_distribution_group_user","account.analytic.distribution","model_account_analytic_distribution","base.group_user",1,0,0,0 +"access_account_analytic_distribution_rule","account.analytic.distribution.rule","model_account_analytic_distribution_rule","account.group_account_user",1,1,1,1 +"access_account_analytic_distribution_rule_group_user","account.analytic.distribution.rule","model_account_analytic_distribution_rule","base.group_user",1,0,0,0 diff --git a/account_analytic_distribution/static/description/icon.png b/account_analytic_distribution/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/account_analytic_distribution/static/description/icon.png differ diff --git a/account_analytic_distribution/tests/__init__.py b/account_analytic_distribution/tests/__init__.py new file mode 100644 index 0000000000..986210d97e --- /dev/null +++ b/account_analytic_distribution/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 - Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import test_analytic_distribution diff --git a/account_analytic_distribution/tests/test_analytic_distribution.py b/account_analytic_distribution/tests/test_analytic_distribution.py new file mode 100644 index 0000000000..617a30d0a6 --- /dev/null +++ b/account_analytic_distribution/tests/test_analytic_distribution.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 - Tecnativa - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests import common +from odoo.exceptions import ValidationError + + +class TestAnalyticDistribution(common.SavepointCase): + @classmethod + def setUpClass(cls): + super(TestAnalyticDistribution, cls).setUpClass() + cls.account1 = cls.env['account.analytic.account'].create({ + 'name': 'Test account #1', + }) + cls.account2 = cls.env['account.analytic.account'].create({ + 'name': 'Test account #2', + }) + cls.invoice_model = cls.env['account.invoice'] + cls.distribution = cls.env['account.analytic.distribution'].create({ + 'name': 'Test distribution initial', + 'rule_ids': [ + (0, 0, { + 'sequence': 10, + 'percent': 75.00, + 'analytic_account_id': cls.account1.id, + }), + (0, 0, { + 'sequence': 20, + 'percent': 25.00, + 'analytic_account_id': cls.account2.id, + }), + ] + }) + cls.user_type = cls.env.ref('account.data_account_type_revenue') + cls.invoice = cls.invoice_model.create({ + 'partner_id': cls.env.ref('base.res_partner_12').id, + 'invoice_line_ids': [(0, 0, { + 'name': 'Product Test', + 'quantity': 1.0, + 'uom_id': cls.env.ref('product.product_uom_unit').id, + 'price_unit': 100.0, + 'account_id': cls.env['account.account'].search([ + ('user_type_id', '=', cls.user_type.id)], limit=1).id, + })] + }) + + def test_partner_invoice(self): + # Save values to compare later + count1 = len(self.account1.line_ids.ids) + count2 = len(self.account2.line_ids.ids) + amount1 = sum(self.account1.line_ids.mapped('amount')) + amount2 = sum(self.account2.line_ids.mapped('amount')) + self.invoice.invoice_line_ids[0].analytic_distribution_id = \ + self.distribution.id + self.invoice.journal_id.group_invoice_lines = True + self.invoice.action_invoice_open() + # One line by account has been created only + self.assertEqual(len(self.account1.line_ids.ids), count1 + 1) + self.assertEqual(len(self.account2.line_ids.ids), count2 + 1) + # Check amount + self.assertAlmostEqual( + self.account1.balance, amount1 + 75.0) + self.assertAlmostEqual( + self.account2.balance, amount2 + 25.0) + + def test_sum_percent_rules(self): + # Check incorrect sum of rules + # We can create an analytic distribution + self.env['account.analytic.distribution'].create({ + 'name': 'Test distribution', + 'rule_ids': [ + (0, 0, { + 'sequence': 10, + 'percent': 75.00, + 'analytic_account_id': self.account1.id, + }), + ] + }) + # Force percent for company + self.env['ir.values'].sudo().set_default( + 'account.config.settings', + 'group_force_percent', + True, + ) + self.env.user.company_id.group_force_percent = True + # Unable to create an analytic distribution + with self.assertRaises(ValidationError): + self.env['account.analytic.distribution'].create({ + 'name': 'Test distribution constraint', + 'rule_ids': [ + (0, 0, { + 'sequence': 10, + 'percent': 75.00, + 'analytic_account_id': self.account1.id, + }), + ] + }) diff --git a/account_analytic_distribution/views/account_analytic_distribution_view.xml b/account_analytic_distribution/views/account_analytic_distribution_view.xml new file mode 100644 index 0000000000..692f742540 --- /dev/null +++ b/account_analytic_distribution/views/account_analytic_distribution_view.xml @@ -0,0 +1,67 @@ + + + + + + account.analytic.distribution.form + account.analytic.distribution + +
+ + + + + + + + +
+
+ + + account.analytic.distribution.tree + account.analytic.distribution + + + + + + + + + + account.analytic.distribution.search + account.analytic.distribution + + + + + + + + + Analytic distributions + ir.actions.act_window + account.analytic.distribution + form + tree,form + + + + + +
diff --git a/account_analytic_distribution/views/account_invoice_view.xml b/account_analytic_distribution/views/account_invoice_view.xml new file mode 100644 index 0000000000..3ab4985bfe --- /dev/null +++ b/account_analytic_distribution/views/account_invoice_view.xml @@ -0,0 +1,29 @@ + + + + + + Add analytic distribution + account.invoice + + + + + + + + + + Add analytic distribution + account.invoice + + + + + + + + + diff --git a/account_analytic_distribution/views/account_move_line_view.xml b/account_analytic_distribution/views/account_move_line_view.xml new file mode 100644 index 0000000000..4ffa7cdc1e --- /dev/null +++ b/account_analytic_distribution/views/account_move_line_view.xml @@ -0,0 +1,41 @@ + + + + + + Add Analytic distribution field + account.move.line + + + + + + + + + + Add Analytic distribution in form2 + account.move.line + 2 + + + + + + + + + + Add Analytic distribution column + account.move.line + + + + + + + + + diff --git a/account_analytic_distribution/views/account_move_view.xml b/account_analytic_distribution/views/account_move_view.xml new file mode 100644 index 0000000000..4c0655c19f --- /dev/null +++ b/account_analytic_distribution/views/account_move_view.xml @@ -0,0 +1,18 @@ + + + + + + Add Analytic distribution field and column + account.move + + + + + + + + + diff --git a/account_analytic_distribution/views/res_config_view.xml b/account_analytic_distribution/views/res_config_view.xml new file mode 100644 index 0000000000..d86e36aab0 --- /dev/null +++ b/account_analytic_distribution/views/res_config_view.xml @@ -0,0 +1,16 @@ + + + + + account settings + account.config.settings + + + + + + + + +