summaryrefslogtreecommitdiff
path: root/addons/account
diff options
context:
space:
mode:
authorwan <wan@odoo.com>2019-08-28 09:05:29 +0000
committerqdp-odoo <qdp@odoo.com>2019-08-29 15:07:47 +0000
commit5aeec0c3dcd8aa20293167073f3f4f5cec323b74 (patch)
treee881f0c4a6e154533412d3ab5d182bab58e82b25 /addons/account
parent33354f71e16e595b8f9f2039abce82cd2e80097f (diff)
[IMP] account: Hierarchy in account type selection field
Task 2041865 We want to show a hierarchy to ease the account type selection (hack in the select widget) BALANCE SHEET ASSETS Fixed Assets Non-current Assets Current Assets Prepayments Receivable Bank and Cash LIABILITIES Equity Current Year Earnings Non-current Liabilities Current Liabilities Credit Card Payable PROFIT & LOSS Income Other Income Expenses Cost of Revenue Depreciation OTHER Off-Balance Sheet closes odoo/odoo#36170 Signed-off-by: Quentin De Paoli (qdp) <qdp@openerp.com>
Diffstat (limited to 'addons/account')
-rw-r--r--addons/account/data/data_account_type.xml1
-rw-r--r--addons/account/models/account.py3
-rw-r--r--addons/account/static/src/js/account_selection.js72
-rw-r--r--addons/account/views/account.xml1
-rw-r--r--addons/account/views/account_view.xml4
5 files changed, 78 insertions, 3 deletions
diff --git a/addons/account/data/data_account_type.xml b/addons/account/data/data_account_type.xml
index ca4676f05f0..54ab23e605f 100644
--- a/addons/account/data/data_account_type.xml
+++ b/addons/account/data/data_account_type.xml
@@ -69,6 +69,7 @@
</record>
<record model="account.account.type" id="data_unaffected_earnings">
<field name="name">Current Year Earnings</field>
+ <field name="internal_group">equity</field>
<field name="include_initial_balance" eval="True"/>
</record>
<record model="account.account.type" id="data_account_type_other_income">
diff --git a/addons/account/models/account.py b/addons/account/models/account.py
index 143ca388763..2d6ef5f10f5 100644
--- a/addons/account/models/account.py
+++ b/addons/account/models/account.py
@@ -41,7 +41,8 @@ class AccountAccountType(models.Model):
('expense', 'Expense'),
('off_balance', 'Off Balance'),
], string="Internal Group",
- help="The 'Internal Group' is used to filter accounts based on the internal group set on the account type.")
+ required=True,
+ help="The 'Internal Group' is used to filter accounts based on the internal group set on the account type.")
note = fields.Text(string='Description')
diff --git a/addons/account/static/src/js/account_selection.js b/addons/account/static/src/js/account_selection.js
new file mode 100644
index 00000000000..c000d5b6fd1
--- /dev/null
+++ b/addons/account/static/src/js/account_selection.js
@@ -0,0 +1,72 @@
+odoo.define('account.hierarchy.selection', function (require) {
+"use strict";
+
+ var core = require('web.core');
+ var relational_fields = require('web.relational_fields');
+ var _t = core._t;
+ var registry = require('web.field_registry');
+
+
+ var FieldSelection = relational_fields.FieldSelection;
+
+ var qweb = core.qweb;
+
+ var HierarchySelection = FieldSelection.extend({
+ _renderEdit: function () {
+ var self = this;
+ var prom = Promise.resolve()
+ if (!self.hierarchy_groups) {
+ prom = this._rpc({
+ model: 'account.account.type',
+ method: 'read',
+ args: [
+ _.filter(_.map(this.values, v => v[0]), v => typeof v == 'number'),
+ ['internal_group'],
+ ],
+ }).then(function(arg) {
+ self.hierarchy_groups = [
+ {
+ 'name': _('Balance Sheet'),
+ 'children': [
+ {'name': _t('Assets'), 'ids': _.map(_.filter(arg, v => v['internal_group'] == 'asset'), v => v['id'])},
+ {'name': _t('Liabilities'), 'ids': _.map(_.filter(arg, v => v['internal_group'] == 'liability' || v['internal_group'] == 'equity'), v => v['id'])},
+ ]
+ },
+ {'name': _t('Profit & Loss'), 'ids': _.map(_.filter(arg, v => v['internal_group'] == 'income' || v['internal_group'] == 'expense'), v => v['id'])},
+ {'name': _t('Other'), 'ids': _.map(_.filter(arg, v => !['asset', 'liability', 'equity', 'income', 'expense'].includes(v['internal_group'])), v => v['id'])},
+ ]
+ });
+ }
+
+ Promise.resolve(prom).then(function() {
+ self.$el.empty();
+ self._addHierarchy(self.$el, self.hierarchy_groups, 0);
+ var value = self.value;
+ if (self.field.type === 'many2one' && value) {
+ value = value.data.id;
+ }
+ self.$el.val(JSON.stringify(value));
+ });
+ },
+ _addHierarchy: function(el, group, level) {
+ var self = this;
+ _.each(group, function(item) {
+ var optgroup = $('<optgroup/>').attr(({
+ 'label': $('<div/>').html('&nbsp;&nbsp;'.repeat(3 * level) + item['name']).text(),
+ }))
+ _.each(item['ids'], function(id) {
+ var value = _.find(self.values, v => v[0] == id)
+ optgroup.append($('<option/>', {
+ value: JSON.stringify(value[0]),
+ text: value[1],
+ }));
+ })
+ el.append(optgroup)
+ if (item['children']) {
+ self._addHierarchy(el, item['children'], level + 1);
+ }
+ })
+ }
+ });
+ registry.add("account_hierarchy_selection", HierarchySelection);
+});
diff --git a/addons/account/views/account.xml b/addons/account/views/account.xml
index 2e02a3f5753..4bfc5afe7cc 100644
--- a/addons/account/views/account.xml
+++ b/addons/account/views/account.xml
@@ -30,6 +30,7 @@
<script type="text/javascript" src="/account/static/src/js/section_and_note_fields_backend.js"></script>
<script type="text/javascript" src="/account/static/src/js/tours/account.js"></script>
<script type="text/javascript" src="/account/static/src/js/bills_tree_upload.js"/>
+ <script type="text/javascript" src="/account/static/src/js/account_selection.js"/>
</xpath>
</template>
diff --git a/addons/account/views/account_view.xml b/addons/account/views/account_view.xml
index 9c72ff247b4..bf519c193c1 100644
--- a/addons/account/views/account_view.xml
+++ b/addons/account/views/account_view.xml
@@ -15,7 +15,7 @@
<group>
<field name="code" placeholder="code"/>
<field name="name"/>
- <field name="user_type_id" widget="selection"/>
+ <field name="user_type_id" widget="account_hierarchy_selection"/>
<field name="tax_ids" widget="many2many_tags" domain="[('company_id','=',company_id)]" attrs="{'invisible': [('internal_group', '=', 'off_balance')]}"/>
<field name="tag_ids" widget="many2many_tags" domain="[('applicability', '!=', 'taxes')]" context="{'default_applicability': 'accounts'}" options="{'no_create_edit': True}"/>
<field name="group_id"/>
@@ -1397,7 +1397,7 @@ action = model.setting_init_bank_account_action()
<field name="name"/>
<field name="code"/>
<newline/>
- <field name="user_type_id" widget="selection"/>
+ <field name="user_type_id" widget="account_hierarchy_selection"/>
<field name="currency_id" options="{'no_create': True}" groups="base.group_multi_currency"/>
<field name="tag_ids" domain="[('applicability', '!=', 'taxes')]" widget="many2many_tags" context="{'default_applicability': 'accounts'}"/>
<field name="reconcile"/>