[ADD] account_move_line_drilldown

This commit is contained in:
Stefan Rijnhart
2021-06-27 17:08:11 +02:00
parent 64f071ee8c
commit 36e7f1b89d
19 changed files with 885 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
======================
Journal Item Drilldown
======================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--financial--tools-lightgray.png?logo=github
:target: https://github.com/OCA/account-financial-tools/tree/12.0/account_move_line_drilldown
:alt: OCA/account-financial-tools
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/account-financial-tools-12-0/account-financial-tools-12-0-account_move_line_drilldown
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/92/12.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
This module allows the Billing Manager to navigate the amounts in the chart
of accounts across the first two levels of the account group hierarchy plus
the account level.
**Table of contents**
.. contents::
:local:
Installation
============
To allow the user to browse through the first two levels of the chart of account
codes, this module adds two dedicated columns to the journal item table to
store top level, and the top - 1 level of the account group hierarchy that the
journal item belongs to. The columns are populated automatically during the
installation of the module. The installation will take about 2 minutes for every
million move lines in your database.
Configuration
=============
In order to enable the pseudohierachy that this module exposes in its move
line pivot view, you need to configure the account group on all accounts in
your chart of accounts.
Usage
=====
Go to Invoicing -> Reporting -> Management -> Journal Item Drilldown to browse
journal items across the first two levels of the account group hierarchy plus
the account level.
By default, you will get a pivot view with the three levels expanded:
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/12.0/account_move_line_drilldown/static/description/drilldown_pivot.png
:scale: 80 %
:alt: journal Item Drilldown pivot view
The three levels are: the top level of the account.group hierarchy,
the top - 1 level of the account.group hierarchy, and the account
itself. You can easily collapse a level by deselecting them in the `Group By`
dropdown in the search bar.
You can also browse the journal items by switching to the tree view and click
through the grouping levels in that view.
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/12.0/account_move_line_drilldown/static/description/drilldown_tree.png
:scale: 80 %
:alt: journal Item Drilldown tree view
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-financial-tools/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 <https://github.com/OCA/account-financial-tools/issues/new?body=module:%20account_move_line_drilldown%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Opener B.V.
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
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.
This module is part of the `OCA/account-financial-tools <https://github.com/OCA/account-financial-tools/tree/12.0/account_move_line_drilldown>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1,2 @@
from .hooks import post_init_hook, pre_init_hook
from . import models

View File

@@ -0,0 +1,21 @@
# Copyright 2021 Opener B.V. <stefan@opener.amsterdam>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Journal Item Drilldown",
"version": "12.0.1.0.0",
"category": "Accounting",
"license": "AGPL-3",
"summary": "Group journal items by the first 2 account group levels",
"author": "Opener B.V., Odoo Community Association (OCA)",
"website": "https://github.com/OCA/account-financial-tools",
"depends": [
"account",
],
"data": [
"views/account_move_line_view.xml",
],
"post_init_hook": "post_init_hook",
"pre_init_hook": "pre_init_hook",
"installable": True,
}

View File

@@ -0,0 +1,26 @@
# Copyright 2021 Opener B.V. <stefan@opener.amsterdam>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, SUPERUSER_ID
def pre_init_hook(cr):
"""Prevent the compute method from kicking in.
Population of the columns is triggered in the post_init_hook
"""
cr.execute(
"""
alter table account_account
add column if not exists root_group_id INTEGER,
add column if not exists sub_group_id INTEGER;
alter table account_move_line
add column if not exists account_root_group_id INTEGER,
add column if not exists account_sub_group_id INTEGER;
""")
def post_init_hook(cr, registry):
"""Populate the columns created in the pre-init-hook
"""
env = api.Environment(cr, SUPERUSER_ID, {})
env["account.group"]._account_groups_compute()

View File

@@ -0,0 +1,3 @@
from . import account_account
from . import account_group
from . import account_move_line

View File

@@ -0,0 +1,28 @@
# Copyright 2021 Opener B.V. <stefan@opener.amsterdam>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
class AccountAccount(models.Model):
_inherit = "account.account"
root_group_id = fields.Many2one(
comodel_name="account.group", string="Root Group",
compute="_compute_account_groups", index=True, store=True)
sub_group_id = fields.Many2one(
comodel_name="account.group", string="Sub Group",
compute="_compute_account_groups", index=True, store=True)
@api.depends("group_id")
def _compute_account_groups(self):
"""Provide the root and sub group for each account"""
if not self.ids:
return
for account in self:
sub_group = self.env["account.group"]
root_group = account.group_id
while root_group.parent_id:
sub_group = root_group
root_group = sub_group.parent_id
account.root_group_id = root_group
account.sub_group_id = sub_group

View File

@@ -0,0 +1,79 @@
# Copyright 2021 Opener B.V. <stefan@opener.amsterdam>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import logging
from odoo import models
class AccountGroup(models.Model):
_inherit = "account.group"
def _parent_store_update(self):
"""Propagated the updated parent structure to accounts and move lines
"""
res = super()._parent_store_update()
if self:
self._account_groups_compute()
return res
def _account_groups_compute(self):
"""Set root and sub groups on accounts and move lines.
Can be called on a recordset of account.group or with an empty `self`
to apply on all accounts with a group_id set.
Only rewrite the move lines of the updated accounts, and take care
not to select accounts that already have the current values set.
"""
self.env.cr.execute(
"""
WITH vals AS (
SELECT aa.id,
CAST(split_part(ag.parent_path, '/', 1) AS INTEGER)
as root_group_id,
CASE
WHEN length(split_part(parent_path, '/', 2)) > 0
THEN CAST(split_part(parent_path, '/', 2) AS INTEGER)
ELSE NULL END AS sub_group_id
FROM account_account aa
JOIN account_group ag ON ag.id = aa.group_id
""" + (" WHERE ag.id IN %s " if self.ids else "") +
"""
)
UPDATE account_account aa
SET root_group_id = vals.root_group_id,
sub_group_id = vals.sub_group_id
FROM vals
WHERE aa.id = vals.id
AND (
COALESCE(aa.root_group_id, 0) !=
COALESCE(vals.root_group_id, 0)
OR
COALESCE(aa.sub_group_id, 0) !=
COALESCE(vals.sub_group_id, 0)
)
RETURNING aa.id;
""",
(tuple(self.ids),) if self.ids else ())
account_ids = [account_id for account_id, in self.env.cr.fetchall()]
if not account_ids:
return
logging.getLogger(__name__).debug(
"Recomputing the root and sub groups of all move lines of %s "
"account(s).", len(account_ids))
self.env.cr.execute(
"""
UPDATE account_move_line aml
SET account_root_group_id = aa.root_group_id,
account_sub_group_id = aa.sub_group_id
FROM account_account aa
WHERE aml.account_id = aa.id
AND aa.id IN %s
""", (tuple(account_ids),))
self.env.cache.invalidate([
(self.env["account.account"]._fields['root_group_id'], None),
(self.env["account.account"]._fields['sub_group_id'], None),
(self.env["account.move.line"]._fields['account_root_group_id'],
None),
(self.env["account.move.line"]._fields['account_sub_group_id'],
None),
])

View File

@@ -0,0 +1,16 @@
# Copyright 2021 Opener B.V. <stefan@opener.amsterdam>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class AccountMoveLine(models.Model):
_inherit = "account.move.line"
account_root_group_id = fields.Many2one(
comodel_name="account.group", string="Account Root Group",
related="account_id.root_group_id",
index=True, readonly=True, store=True)
account_sub_group_id = fields.Many2one(
comodel_name="account.group", string="Account Sub Group",
related="account_id.sub_group_id",
index=True, readonly=True, store=True)

View File

@@ -0,0 +1,3 @@
In order to enable the pseudohierachy that this module exposes in its move
line pivot view, you need to configure the account group on all accounts in
your chart of accounts.

View File

@@ -0,0 +1 @@
* Stefan Rijnhart <stefan@opener.amsterdam>

View File

@@ -0,0 +1,3 @@
This module allows the Billing Manager to navigate the amounts in the chart
of accounts across the first two levels of the account group hierarchy plus
the account level.

View File

@@ -0,0 +1,6 @@
To allow the user to browse through the first two levels of the chart of account
codes, this module adds two dedicated columns to the journal item table to
store top level, and the top - 1 level of the account group hierarchy that the
journal item belongs to. The columns are populated automatically during the
installation of the module. The installation will take about 2 minutes for every
million move lines in your database.

View File

@@ -0,0 +1,21 @@
Go to Invoicing -> Reporting -> Management -> Journal Item Drilldown to browse
journal items across the first two levels of the account group hierarchy plus
the account level.
By default, you will get a pivot view with the three levels expanded:
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/12.0/account_move_line_drilldown/static/description/drilldown_pivot.png
:scale: 80 %
:alt: journal Item Drilldown pivot view
The three levels are: the top level of the account.group hierarchy,
the top - 1 level of the account.group hierarchy, and the account
itself. You can easily collapse a level by deselecting them in the `Group By`
dropdown in the search bar.
You can also browse the journal items by switching to the tree view and click
through the grouping levels in that view.
.. figure:: https://raw.githubusercontent.com/OCA/account-financial-tools/12.0/account_move_line_drilldown/static/description/drilldown_tree.png
:scale: 80 %
:alt: journal Item Drilldown tree view

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

View File

@@ -0,0 +1,455 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: http://docutils.sourceforge.net/" />
<title>Journal Item Drilldown</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="journal-item-drilldown">
<h1 class="title">Journal Item Drilldown</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/account-financial-tools/tree/12.0/account_move_line_drilldown"><img alt="OCA/account-financial-tools" src="https://img.shields.io/badge/github-OCA%2Faccount--financial--tools-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/account-financial-tools-12-0/account-financial-tools-12-0-account_move_line_drilldown"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/92/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module allows the Billing Manager to navigate the amounts in the chart
of accounts across the first two levels of the account group hierarchy plus
the account level.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#installation" id="id1">Installation</a></li>
<li><a class="reference internal" href="#configuration" id="id2">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="id3">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id4">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id5">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id6">Authors</a></li>
<li><a class="reference internal" href="#maintainers" id="id7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="installation">
<h1><a class="toc-backref" href="#id1">Installation</a></h1>
<p>To allow the user to browse through the first two levels of the chart of account
codes, this module adds two dedicated columns to the journal item table to
store top level, and the top - 1 level of the account group hierarchy that the
journal item belongs to. The columns are populated automatically during the
installation of the module. The installation will take about 2 minutes for every
million move lines in your database.</p>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id2">Configuration</a></h1>
<p>In order to enable the pseudohierachy that this module exposes in its move
line pivot view, you need to configure the account group on all accounts in
your chart of accounts.</p>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id3">Usage</a></h1>
<p>Go to Invoicing -&gt; Reporting -&gt; Management -&gt; Journal Item Drilldown to browse
journal items across the first two levels of the account group hierarchy plus
the account level.</p>
<p>By default, you will get a pivot view with the three levels expanded:</p>
<blockquote>
<div class="figure">
<img alt="journal Item Drilldown pivot view" src="https://raw.githubusercontent.com/OCA/account-financial-tools/12.0/account_move_line_drilldown/static/description/drilldown_pivot.png" />
</div>
</blockquote>
<p>The three levels are: the top level of the account.group hierarchy,
the top - 1 level of the account.group hierarchy, and the account
itself. You can easily collapse a level by deselecting them in the <cite>Group By</cite>
dropdown in the search bar.</p>
<p>You can also browse the journal items by switching to the tree view and click
through the grouping levels in that view.</p>
<blockquote>
<div class="figure">
<img alt="journal Item Drilldown tree view" src="https://raw.githubusercontent.com/OCA/account-financial-tools/12.0/account_move_line_drilldown/static/description/drilldown_tree.png" />
</div>
</blockquote>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id4">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-financial-tools/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/account-financial-tools/issues/new?body=module:%20account_move_line_drilldown%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id5">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id6">Authors</a></h2>
<ul class="simple">
<li>Opener B.V.</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id7">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-financial-tools/tree/12.0/account_move_line_drilldown">OCA/account-financial-tools</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1 @@
from . import test_account_move_line_drilldown

View File

@@ -0,0 +1,78 @@
# Copyright 2021 Opener B.V. <stefan@opener.amsterdam>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo.tests.common import SavepointCase, tagged
@tagged('post_install', '-at_install')
class TestAccountMoveLineDrilldown(SavepointCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.journal = cls.env["account.journal"].search(
[("company_id", "=", cls.env.user.company_id.id)], limit=1)
cls.accounts = cls.env["account.account"].search(
[("company_id", "=", cls.env.user.company_id.id)], limit=3)
cls.group1 = cls.env["account.group"].create({
"name": "1",
"code_prefix": "1",
})
cls.group12 = cls.env["account.group"].create({
"name": "12",
"code_prefix": "12",
"parent_id": cls.group1.id,
})
cls.group123 = cls.env["account.group"].create({
"name": "123",
"code_prefix": "123",
"parent_id": cls.group12.id,
})
cls.group124 = cls.env["account.group"].create({
"name": "124",
"code_prefix": "124",
"parent_id": cls.group12.id,
})
cls.group15 = cls.env["account.group"].create({
"name": "15",
"code_prefix": "15",
"parent_id": cls.group1.id,
})
cls.group156 = cls.env["account.group"].create({
"name": "156",
"code_prefix": "156",
"parent_id": cls.group15.id,
})
def test_account_move_line_drilldown(self):
"""Fields from this module are computed as expected"""
move = self.env['account.move'].create({
'journal_id': self.journal.id,
'line_ids': [
(0, 0, {'debit': 100.0, 'account_id': self.accounts[0].id}),
(0, 0, {'credit': 100.0, 'account_id': self.accounts[1].id}),
],
})
move_line = move.line_ids[0]
account = move_line.account_id
account.group_id = self.group123
self.assertEqual(move_line.account_root_group_id, self.group1)
self.assertEqual(move_line.account_sub_group_id, self.group12)
account.group_id = self.group12
self.assertEqual(move_line.account_root_group_id, self.group1)
self.assertEqual(move_line.account_sub_group_id, self.group12)
account.group_id = self.group1
self.assertEqual(move_line.account_root_group_id, self.group1)
self.assertFalse(move_line.account_sub_group_id)
account.group_id = self.group156
self.assertEqual(move_line.account_root_group_id, self.group1)
self.assertEqual(move_line.account_sub_group_id, self.group15)
self.group156.parent_id = self.group123
self.assertEqual(move_line.account_root_group_id, self.group1)
self.assertEqual(move_line.account_sub_group_id, self.group12)
self.group156.parent_id = False
self.assertEqual(move_line.account_root_group_id, self.group156)
self.assertFalse(move_line.account_sub_group_id)

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_account_move_line_filter" model="ir.ui.view">
<field name="inherit_id" ref="account.view_account_move_line_filter"/>
<field name="model">account.move.line</field>
<field name="arch" type="xml">
<filter name="account" position="before">
<filter name="group_by_account_root_group_id" string="Account Root Group"
context="{'group_by': 'account_root_group_id'}"/>
<filter name="group_by_account_sub_group_id" string="Account Sub Group"
context="{'group_by': 'account_sub_group_id'}"/>
</filter>
</field>
</record>
<record id="account_move_line_drilldown_action" model="ir.actions.act_window">
<field name="name">Journal Item Drilldown</field>
<field name="res_model">account.move.line</field>
<field name="view_mode">pivot,tree,form</field>
<field name="context">{
"search_default_group_by_account_root_group_id": 1,
"search_default_group_by_account_sub_group_id": 1,
"search_default_account": 1,
}</field>
</record>
<menuitem action="account_move_line_drilldown_action"
id="account_move_line_drilldown_menu"
parent="account.menu_finance_entries_accounting_entries"
sequence="11" groups="account.group_account_manager"
/>
</odoo>