Automatic Update form OCA2FC Migrator

This commit is contained in:
Flectra Community Bot 2021-04-28 16:59:57 +02:00 committed by Renzo Meister
parent e598bc2f45
commit 9c61eb1d76
33 changed files with 672 additions and 395 deletions

View File

@ -25,8 +25,6 @@ test_all_modules:
- apt-get install -y p7zip-full - apt-get install -y p7zip-full
- apt-get install -y expect-dev - apt-get install -y expect-dev
- su - flectra -c "mkdir ~/others" - su - flectra -c "mkdir ~/others"
- su - flectra -c "git clone --branch 20-fixed --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/flectra-community/reporting-engine.git ~/others/reporting-engine"
- su - flectra -c "git clone --branch 20-fixed --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/flectra-community/server-ux.git ~/others/server-ux"
- sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && dpkg-reconfigure --frontend=noninteractive locales && update-locale LANG=en_US.UTF-8 - sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && dpkg-reconfigure --frontend=noninteractive locales && update-locale LANG=en_US.UTF-8
- mkdir ${CI_PROJECT_DIR}/ci_data - mkdir ${CI_PROJECT_DIR}/ci_data
- wget -O ${CI_PROJECT_DIR}/ci_data/test_base.zip https://gitlab.com/flectra-community/devops/oca2fc/raw/master/ci_data/test_base.zip - wget -O ${CI_PROJECT_DIR}/ci_data/test_base.zip https://gitlab.com/flectra-community/devops/oca2fc/raw/master/ci_data/test_base.zip
@ -38,7 +36,7 @@ test_all_modules:
- mv ${CI_PROJECT_DIR}/ci_data/filestore /opt/flectra/.local/share/filestore/test_all - mv ${CI_PROJECT_DIR}/ci_data/filestore /opt/flectra/.local/share/filestore/test_all
- chown -R flectra.flectra /opt/flectra/.local/share/filestore/test_all - chown -R flectra.flectra /opt/flectra/.local/share/filestore/test_all
- su - flectra -c "/opt/flectra/flectra-bin - su - flectra -c "/opt/flectra/flectra-bin
--addons-path ${CI_PROJECT_DIR},~/others/reporting-engine,~/others/server-ux --addons-path ${CI_PROJECT_DIR}
--db_host psql --db_host psql
--db_port 5432 --db_port 5432
--db_user flectra --db_user flectra
@ -64,8 +62,6 @@ test_module_mis_builder_budget:
- apt-get install -y p7zip-full - apt-get install -y p7zip-full
- apt install -y expect-dev - apt install -y expect-dev
- su - flectra -c "mkdir ~/others" - su - flectra -c "mkdir ~/others"
- su - flectra -c "git clone --branch 20-fixed --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/flectra-community/reporting-engine.git ~/others/reporting-engine"
- su - flectra -c "git clone --branch 20-fixed --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/flectra-community/server-ux.git ~/others/server-ux"
- sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && dpkg-reconfigure --frontend=noninteractive locales && update-locale LANG=en_US.UTF-8 - sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && dpkg-reconfigure --frontend=noninteractive locales && update-locale LANG=en_US.UTF-8
- mkdir ${CI_PROJECT_DIR}/ci_data - mkdir ${CI_PROJECT_DIR}/ci_data
- wget -O ${CI_PROJECT_DIR}/ci_data/test_base.zip https://gitlab.com/flectra-community/devops/oca2fc/raw/master/ci_data/test_base.zip - wget -O ${CI_PROJECT_DIR}/ci_data/test_base.zip https://gitlab.com/flectra-community/devops/oca2fc/raw/master/ci_data/test_base.zip
@ -77,7 +73,7 @@ test_module_mis_builder_budget:
- mv ${CI_PROJECT_DIR}/ci_data/filestore /opt/flectra/.local/share/filestore/test_mis_builder_budget - mv ${CI_PROJECT_DIR}/ci_data/filestore /opt/flectra/.local/share/filestore/test_mis_builder_budget
- chown -R flectra.flectra /opt/flectra/.local/share/filestore/test_mis_builder_budget - chown -R flectra.flectra /opt/flectra/.local/share/filestore/test_mis_builder_budget
- su - flectra -c "/opt/flectra/flectra-bin - su - flectra -c "/opt/flectra/flectra-bin
--addons-path ${CI_PROJECT_DIR},~/others/reporting-engine,~/others/server-ux --addons-path ${CI_PROJECT_DIR}
--db_host psql --db_host psql
--db_port 5432 --db_port 5432
--db_user flectra --db_user flectra
@ -98,8 +94,6 @@ test_module_mis_builder_demo:
- apt-get install -y p7zip-full - apt-get install -y p7zip-full
- apt install -y expect-dev - apt install -y expect-dev
- su - flectra -c "mkdir ~/others" - su - flectra -c "mkdir ~/others"
- su - flectra -c "git clone --branch 20-fixed --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/flectra-community/reporting-engine.git ~/others/reporting-engine"
- su - flectra -c "git clone --branch 20-fixed --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/flectra-community/server-ux.git ~/others/server-ux"
- sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && dpkg-reconfigure --frontend=noninteractive locales && update-locale LANG=en_US.UTF-8 - sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && dpkg-reconfigure --frontend=noninteractive locales && update-locale LANG=en_US.UTF-8
- mkdir ${CI_PROJECT_DIR}/ci_data - mkdir ${CI_PROJECT_DIR}/ci_data
- wget -O ${CI_PROJECT_DIR}/ci_data/test_base.zip https://gitlab.com/flectra-community/devops/oca2fc/raw/master/ci_data/test_base.zip - wget -O ${CI_PROJECT_DIR}/ci_data/test_base.zip https://gitlab.com/flectra-community/devops/oca2fc/raw/master/ci_data/test_base.zip
@ -111,7 +105,7 @@ test_module_mis_builder_demo:
- mv ${CI_PROJECT_DIR}/ci_data/filestore /opt/flectra/.local/share/filestore/test_mis_builder_demo - mv ${CI_PROJECT_DIR}/ci_data/filestore /opt/flectra/.local/share/filestore/test_mis_builder_demo
- chown -R flectra.flectra /opt/flectra/.local/share/filestore/test_mis_builder_demo - chown -R flectra.flectra /opt/flectra/.local/share/filestore/test_mis_builder_demo
- su - flectra -c "/opt/flectra/flectra-bin - su - flectra -c "/opt/flectra/flectra-bin
--addons-path ${CI_PROJECT_DIR},~/others/reporting-engine,~/others/server-ux --addons-path ${CI_PROJECT_DIR}
--db_host psql --db_host psql
--db_port 5432 --db_port 5432
--db_user flectra --db_user flectra
@ -132,8 +126,6 @@ test_module_mis_builder:
- apt-get install -y p7zip-full - apt-get install -y p7zip-full
- apt install -y expect-dev - apt install -y expect-dev
- su - flectra -c "mkdir ~/others" - su - flectra -c "mkdir ~/others"
- su - flectra -c "git clone --branch 20-fixed --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/flectra-community/reporting-engine.git ~/others/reporting-engine"
- su - flectra -c "git clone --branch 20-fixed --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/flectra-community/server-ux.git ~/others/server-ux"
- sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && dpkg-reconfigure --frontend=noninteractive locales && update-locale LANG=en_US.UTF-8 - sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && dpkg-reconfigure --frontend=noninteractive locales && update-locale LANG=en_US.UTF-8
- mkdir ${CI_PROJECT_DIR}/ci_data - mkdir ${CI_PROJECT_DIR}/ci_data
- wget -O ${CI_PROJECT_DIR}/ci_data/test_base.zip https://gitlab.com/flectra-community/devops/oca2fc/raw/master/ci_data/test_base.zip - wget -O ${CI_PROJECT_DIR}/ci_data/test_base.zip https://gitlab.com/flectra-community/devops/oca2fc/raw/master/ci_data/test_base.zip
@ -145,7 +137,7 @@ test_module_mis_builder:
- mv ${CI_PROJECT_DIR}/ci_data/filestore /opt/flectra/.local/share/filestore/test_mis_builder - mv ${CI_PROJECT_DIR}/ci_data/filestore /opt/flectra/.local/share/filestore/test_mis_builder
- chown -R flectra.flectra /opt/flectra/.local/share/filestore/test_mis_builder - chown -R flectra.flectra /opt/flectra/.local/share/filestore/test_mis_builder
- su - flectra -c "/opt/flectra/flectra-bin - su - flectra -c "/opt/flectra/flectra-bin
--addons-path ${CI_PROJECT_DIR},~/others/reporting-engine,~/others/server-ux --addons-path ${CI_PROJECT_DIR}
--db_host psql --db_host psql
--db_port 5432 --db_port 5432
--db_user flectra --db_user flectra

View File

@ -9,8 +9,8 @@ Available addons
addon | version | summary addon | version | summary
--- | --- | --- --- | --- | ---
[mis_builder_budget](mis_builder_budget/) | 2.0.3.5.0| Create budgets for MIS reports [mis_builder_budget](mis_builder_budget/) | 2.0.3.5.1| Create budgets for MIS reports
[mis_builder_demo](mis_builder_demo/) | 2.0.3.1.2| Demo addon for MIS Builder [mis_builder_demo](mis_builder_demo/) | 2.0.3.1.3| Demo addon for MIS Builder
[mis_builder](mis_builder/) | 2.0.3.6.3| Build 'Management Information System' Reports and Dashboards [mis_builder](mis_builder/) | 2.0.3.6.6| Build 'Management Information System' Reports and Dashboards

View File

@ -14,13 +14,13 @@ MIS Builder
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3 :alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github
:target: https://github.com/OCA/mis-builder/tree/13.0/mis_builder :target: https://github.com/OCA/mis-builder/tree/14.0/mis_builder
:alt: OCA/mis-builder :alt: OCA/mis-builder
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/mis-builder-13-0/mis-builder-13-0-mis_builder :target: https://translation.odoo-community.org/projects/mis-builder-14-0/mis-builder-14-0-mis_builder
:alt: Translate me on Weblate :alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/248/13.0 :target: https://runbot.odoo-community.org/runbot/248/14.0
:alt: Try me on Runbot :alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5| |badge1| |badge2| |badge3| |badge4| |badge5|
@ -97,6 +97,36 @@ be found on GitHub.
Changelog Changelog
========= =========
14.0.3.6.6 (2021-04-23)
~~~~~~~~~~~~~~~~~~~~~~~
**Bugfixes**
- Fix drilldown action name when the account model has been customized. (`#350 <https://github.com/OCA/mis-builder/issues/350>`_)
14.0.3.6.5 (2021-04-23)
~~~~~~~~~~~~~~~~~~~~~~~
**Bugfixes**
- While duplicating a MIS report instance, comparison columns are ignored because
they would raise an error otherwise, as they keep the old source_cmpcol_from_id
and source_cmpcol_to_id from the original record. (`#343 <https://github.com/OCA/mis-builder/issues/343>`_)
14.0.3.6.4 (2021-04-06)
~~~~~~~~~~~~~~~~~~~~~~~
**Features**
- The drilldown action name displayed on the breadcrumb has been revised.
The kpi description and the account ``display_name`` are shown instead
of the kpi's technical definition. (`#304 <https://github.com/OCA/mis-builder/issues/304>`_)
- Add analytic group filters on report instance, periods and in the interactive
view. (`#320 <https://github.com/OCA/mis-builder/issues/320>`_)
13.0.3.6.3 (2020-08-28) 13.0.3.6.3 (2020-08-28)
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
@ -162,7 +192,7 @@ Migration to odoo 13.0.
``account.account`` model). To this end, the model to be used for Actuals ``account.account`` model). To this end, the model to be used for Actuals
move lines can be configured on the report template. It can be something else move lines can be configured on the report template. It can be something else
than move lines and the only constraint is that its ``account_id`` field than move lines and the only constraint is that its ``account_id`` field
as a ``code`` field. (`#149 <https://github.com/oca/mis-builder/issues/149>`_) has a ``code`` field. (`#149 <https://github.com/oca/mis-builder/issues/149>`_)
- Add ``source_aml_model_name`` field so extension modules providing - Add ``source_aml_model_name`` field so extension modules providing
alternative data sources can more easily customize their data source. (`#214 <https://github.com/oca/mis-builder/issues/214>`_) alternative data sources can more easily customize their data source. (`#214 <https://github.com/oca/mis-builder/issues/214>`_)
- Support analytic tag filters in the backend view and preview widget. - Support analytic tag filters in the backend view and preview widget.
@ -494,7 +524,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/mis-builder/issues>`_. Bugs are tracked on `GitHub Issues <https://github.com/OCA/mis-builder/issues>`_.
In case of trouble, please check there if your issue has already been reported. In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. `feedback <https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder%0Aversion:%2014.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. Do not contact contributors directly about support or help with technical issues.
@ -554,6 +584,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-sbidoul| |maintainer-sbidoul|
This module is part of the `OCA/mis-builder <https://github.com/OCA/mis-builder/tree/13.0/mis_builder>`_ project on GitHub. This module is part of the `OCA/mis-builder <https://github.com/OCA/mis-builder/tree/14.0/mis_builder>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -3,7 +3,7 @@
{ {
"name": "MIS Builder", "name": "MIS Builder",
"version": "2.0.3.6.3", "version": "2.0.3.6.6",
"category": "Reporting", "category": "Reporting",
"summary": """ "summary": """
Build 'Management Information System' Reports and Dashboards Build 'Management Information System' Reports and Dashboards
@ -28,7 +28,7 @@
"report/mis_report_instance_xlsx.xml", "report/mis_report_instance_xlsx.xml",
], ],
"qweb": ["static/src/xml/mis_report_widget.xml"], "qweb": ["static/src/xml/mis_report_widget.xml"],
"installable": False, "installable": True,
"application": True, "application": True,
"license": "AGPL-3", "license": "AGPL-3",
"development_status": "Production/Stable", "development_status": "Production/Stable",

View File

@ -4,7 +4,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 13.0\n" "Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -23,99 +23,131 @@ msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"<b>AccountingNone</b>: a null value that behaves as 0 in arithmetic " "<b>\n"
"operations." " balp[('user_type_id', '=',\n"
" ref('account.\n"
" data_account_type_receivable').id)][]\n"
" </b>\n"
" : variation of the balance of all receivable\n"
" accounts over the period."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"<b>bal, crd, deb, pbal, nbal</b>: balance, debit, credit, positive balance, " "<b>\n"
"negative balance." " balp[][('tax_line_id.tag_ids', '=',\n"
" ref('l10n_be.tax_tag_56').id)]\n"
" </b>\n"
" : balance of move lines related to tax grid\n"
" 56."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"<b>bal[70]</b>: variation of the balance of account 70 over the period (it " "<b>\n"
"is the same as balp[70]." " debp[55%][('journal_id.code', '=',\n"
msgstr "" " 'BNK1')]\n"
" </b>\n"
#. module: mis_builder " : sum of all debits on accounts 55 and\n"
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form " journal BNK1 during the period."
msgid "<b>bale[1%]</b>: balance of accounts starting with 1 at end of period."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "<b>bali[70,60]</b>: initial balance of accounts 70 and 60."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"<b>balp[('user_type_id', '=', " "<b>AccountingNone</b>\n"
"ref('account.data_account_type_receivable').id)][]</b>: variation of the " " : a null value that behaves as 0 in\n"
"balance of all receivable accounts over the period." " arithmetic operations."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"<b>balp[][('tax_line_id.tag_ids', '=', ref('l10n_be.tax_tag_56').id)]</b>: " "<b>bal, crd, deb, pbal, nbal</b>\n"
"balance of move lines related to tax grid 56." " : balance, debit, credit, positive balance,\n"
" negative balance."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"<b>balu[]</b>: (u for unallocated) is a special expression that shows the unallocated profit/loss of previous\n" "<b>bal[70]</b>\n"
" : variation of the balance of account 70\n"
" over the period (it is the same as balp[70]."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>bale[1%]</b>\n"
" : balance of accounts starting with 1 at end\n"
" of period."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>bali[70,60]</b>\n"
" : initial balance of accounts 70 and 60."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>balu[]</b>\n"
" : (u for unallocated) is a special\n"
" expression that shows the unallocated\n"
" profit/loss of previous\n"
" fiscal years." " fiscal years."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"<b>crdp[40%]</b>: sum of all credits on accounts starting with 40 during the" "<b>crdp[40%]</b>\n"
" period." " : sum of all credits on accounts starting\n"
msgstr "" " with 40 during the period."
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "<b>date_from, date_to</b>: beginning and end date of the period."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "<b>datetime, datetime, dateutil</b>: the python modules."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"<b>debp[55%][('journal_id.code', '=', 'BNK1')]</b>: sum of all debits on " "<b>date_from, date_to</b>\n"
"accounts 55 and journal BNK1 during the period." " : beginning and end date of the period."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"<b>p, i, e</b>: respectively variation over the period, initial balance, " "<b>datetime, datetime, dateutil</b>\n"
"ending balance" " : the python modules."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"<b>pbale[55%]</b>: sum of all ending balances of accounts starting with 55 whose\n" "<b>p, i, e</b>\n"
" : respectively variation over the period,\n"
" initial balance, ending balance"
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>pbale[55%]</b>\n"
" : sum of all ending balances of accounts\n"
" starting with 55 whose\n"
" ending balance is positive." " ending balance is positive."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"<b>sum, min, max, len, avg</b>: behave as expected, very similar to the " "<b>sum, min, max, len, avg</b>\n"
"python builtins." " : behave as expected, very similar to the\n"
" python builtins."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
@ -191,7 +223,8 @@ msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"Additionally following variables are available in the evaluation context:" "Additionally following variables are available\n"
" in the evaluation context:"
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
@ -239,6 +272,21 @@ msgstr ""
msgid "Analytic Account Filter" msgid "Analytic Account Filter"
msgstr "" msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/js/mis_report_widget.js:0
#: model:ir.model.fields,field_description:mis_builder.field_mis_report_instance__analytic_group_id
#: model:ir.model.fields,field_description:mis_builder.field_mis_report_instance_period__analytic_group_id
#, python-format
msgid "Analytic Account Group"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_report_instance.py:0
#, python-format
msgid "Analytic Account Group: %s"
msgstr ""
#. module: mis_builder #. module: mis_builder
#: code:addons/mis_builder/models/mis_report_instance.py:0 #: code:addons/mis_builder/models/mis_report_instance.py:0
#, python-format #, python-format
@ -525,6 +573,7 @@ msgstr ""
#. module: mis_builder #. module: mis_builder
#: model:ir.model.fields,field_description:mis_builder.field_add_mis_report_instance_dashboard_wizard__display_name #: model:ir.model.fields,field_description:mis_builder.field_add_mis_report_instance_dashboard_wizard__display_name
#: model:ir.model.fields,field_description:mis_builder.field_ir_actions_report__display_name
#: model:ir.model.fields,field_description:mis_builder.field_mis_kpi_data__display_name #: model:ir.model.fields,field_description:mis_builder.field_mis_kpi_data__display_name
#: model:ir.model.fields,field_description:mis_builder.field_mis_report__display_name #: model:ir.model.fields,field_description:mis_builder.field_mis_report__display_name
#: model:ir.model.fields,field_description:mis_builder.field_mis_report_instance__display_name #: model:ir.model.fields,field_description:mis_builder.field_mis_report_instance__display_name
@ -618,8 +667,9 @@ msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"Expressions can involve other KPI, sub KPI and query results by name (eg " "Expressions can involve other KPI, sub KPI and\n"
"kpi1 + kpi2, kpi2.subkpi1, query1.field1)." " query results by name (eg kpi1 + kpi2,\n"
" kpi2.subkpi1, query1.field1)."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
@ -656,6 +706,14 @@ msgid ""
"modified in the preview." "modified in the preview."
msgstr "" msgstr ""
#. module: mis_builder
#: model:ir.model.fields,help:mis_builder.field_mis_report_instance_period__analytic_group_id
msgid ""
"Filter column on journal entries that match this analytic account group. "
"This filter is combined with a AND with the report-level filters and cannot "
"be modified in the preview."
msgstr ""
#. module: mis_builder #. module: mis_builder
#: model:ir.model.fields,help:mis_builder.field_mis_report_instance_period__analytic_account_id #: model:ir.model.fields,help:mis_builder.field_mis_report_instance_period__analytic_account_id
msgid "" msgid ""
@ -765,6 +823,7 @@ msgstr ""
#. module: mis_builder #. module: mis_builder
#: model:ir.model.fields,field_description:mis_builder.field_add_mis_report_instance_dashboard_wizard__id #: model:ir.model.fields,field_description:mis_builder.field_add_mis_report_instance_dashboard_wizard__id
#: model:ir.model.fields,field_description:mis_builder.field_ir_actions_report__id
#: model:ir.model.fields,field_description:mis_builder.field_mis_kpi_data__id #: model:ir.model.fields,field_description:mis_builder.field_mis_kpi_data__id
#: model:ir.model.fields,field_description:mis_builder.field_mis_report__id #: model:ir.model.fields,field_description:mis_builder.field_mis_report__id
#: model:ir.model.fields,field_description:mis_builder.field_mis_report_instance__id #: model:ir.model.fields,field_description:mis_builder.field_mis_report_instance__id
@ -878,6 +937,7 @@ msgstr ""
#. module: mis_builder #. module: mis_builder
#: model:ir.model.fields,field_description:mis_builder.field_add_mis_report_instance_dashboard_wizard____last_update #: model:ir.model.fields,field_description:mis_builder.field_add_mis_report_instance_dashboard_wizard____last_update
#: model:ir.model.fields,field_description:mis_builder.field_ir_actions_report____last_update
#: model:ir.model.fields,field_description:mis_builder.field_mis_kpi_data____last_update #: model:ir.model.fields,field_description:mis_builder.field_mis_kpi_data____last_update
#: model:ir.model.fields,field_description:mis_builder.field_mis_report____last_update #: model:ir.model.fields,field_description:mis_builder.field_mis_report____last_update
#: model:ir.model.fields,field_description:mis_builder.field_mis_report_instance____last_update #: model:ir.model.fields,field_description:mis_builder.field_mis_report_instance____last_update
@ -1518,21 +1578,30 @@ msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"The <b>account selector</b> is a like expression on the account code (eg " "The\n"
"70%, etc)." " <b>account selector</b>\n"
" is a like expression on the account code (eg\n"
" 70%, etc)."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"The <b>journal items domain</b> is an Odoo domain filter on journal items." "The\n"
" <b>journal items domain</b>\n"
" is an Odoo domain filter on journal items."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form #: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid "" msgid ""
"The following special elements are recognized in the expressions to compute accounting data:\n" "The following special elements are recognized in\n"
" <code>{bal|crd|deb|pbal|nbal}{pieu}[account selector][journal items domain]</code>." " the expressions to compute accounting data:\n"
" <code>\n"
" {bal|crd|deb|pbal|nbal}{pieu}[account\n"
" selector][journal items domain]\n"
" </code>\n"
" ."
msgstr "" msgstr ""
#. module: mis_builder #. module: mis_builder

View File

@ -1,18 +1,14 @@
# Copyright 2014 ACSONE SA/NV (<http://acsone.eu>) # Copyright 2014 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
import datetime
import re import re
import time
from collections import defaultdict from collections import defaultdict
import dateutil
from flectra import _, fields from flectra import _, fields
from flectra.exceptions import UserError from flectra.exceptions import UserError
from flectra.models import expression from flectra.models import expression
from flectra.tools.float_utils import float_is_zero from flectra.tools.float_utils import float_is_zero
from flectra.tools.safe_eval import safe_eval from flectra.tools.safe_eval import datetime, dateutil, safe_eval, time
from .accounting_none import AccountingNone from .accounting_none import AccountingNone

View File

@ -370,7 +370,7 @@ class MisReportQuery(models.Model):
name = fields.Char(size=32, required=True, string="Name") name = fields.Char(size=32, required=True, string="Name")
model_id = fields.Many2one( model_id = fields.Many2one(
"ir.model", required=True, string="Model", ondelete="restrict" "ir.model", required=True, string="Model", ondelete="cascade"
) )
field_ids = fields.Many2many( field_ids = fields.Many2many(
"ir.model.fields", required=True, string="Fields to fetch" "ir.model.fields", required=True, string="Fields to fetch"
@ -391,7 +391,7 @@ class MisReportQuery(models.Model):
comodel_name="ir.model.fields", comodel_name="ir.model.fields",
required=True, required=True,
domain=[("ttype", "in", ("date", "datetime"))], domain=[("ttype", "in", ("date", "datetime"))],
ondelete="restrict", ondelete="cascade",
) )
domain = fields.Char(string="Domain") domain = fields.Char(string="Domain")
report_id = fields.Many2one( report_id = fields.Many2one(
@ -461,6 +461,7 @@ class MisReport(models.Model):
], ],
default=_default_move_lines_source, default=_default_move_lines_source,
required=True, required=True,
ondelete="cascade",
help="A 'move line like' model, ie having at least debit, credit, " help="A 'move line like' model, ie having at least debit, credit, "
"date, account_id and company_id fields. This model is the " "date, account_id and company_id fields. This model is the "
"data source for column Actuals.", "data source for column Actuals.",

View File

@ -284,6 +284,15 @@ class MisReportInstancePeriod(models.Model):
"and cannot be modified in the preview." "and cannot be modified in the preview."
), ),
) )
analytic_group_id = fields.Many2one(
comodel_name="account.analytic.group",
string="Analytic Account Group",
help=(
"Filter column on journal entries that match this analytic account "
"group. This filter is combined with a AND with the report-level "
"filters and cannot be modified in the preview."
),
)
analytic_tag_ids = fields.Many2many( analytic_tag_ids = fields.Many2many(
comodel_name="account.analytic.tag", comodel_name="account.analytic.tag",
string="Analytic Tags", string="Analytic Tags",
@ -369,11 +378,8 @@ class MisReportInstancePeriod(models.Model):
if operator == "all": if operator == "all":
if not isinstance(value, list): if not isinstance(value, list):
value = [value] value = [value]
many_ids = self.report_instance_id.resolve_2many_commands( for m in value:
filter_name, value, ["id"] filters.append((filter_name, "in", [m]))
)
for m in many_ids:
filters.append((filter_name, "in", [m["id"]]))
else: else:
filters.append((filter_name, operator, value)) filters.append((filter_name, operator, value))
return filters return filters
@ -403,6 +409,10 @@ class MisReportInstancePeriod(models.Model):
domain.extend([("move_id.state", "=", "posted")]) domain.extend([("move_id.state", "=", "posted")])
if self.analytic_account_id: if self.analytic_account_id:
domain.append(("analytic_account_id", "=", self.analytic_account_id.id)) domain.append(("analytic_account_id", "=", self.analytic_account_id.id))
if self.analytic_group_id:
domain.append(
("analytic_account_id.group_id", "=", self.analytic_group_id.id)
)
for tag in self.analytic_tag_ids: for tag in self.analytic_tag_ids:
domain.append(("analytic_tag_ids", "=", tag.id)) domain.append(("analytic_tag_ids", "=", tag.id))
return domain return domain
@ -459,6 +469,17 @@ class MisReportInstancePeriod(models.Model):
% rec.name % rec.name
) )
def copy_data(self, default=None):
if self.source == SRC_CMPCOL:
# While duplicating a MIS report instance, comparison columns are
# ignored because they would raise an error, as they keep the old
# `source_cmpcol_from_id` and `source_cmpcol_to_id` from the
# original record.
return [
False,
]
return super().copy_data(default=default)
class MisReportInstance(models.Model): class MisReportInstance(models.Model):
"""The MIS report instance combines everything to compute """The MIS report instance combines everything to compute
@ -539,6 +560,10 @@ class MisReportInstance(models.Model):
analytic_account_id = fields.Many2one( analytic_account_id = fields.Many2one(
comodel_name="account.analytic.account", string="Analytic Account" comodel_name="account.analytic.account", string="Analytic Account"
) )
analytic_group_id = fields.Many2one(
comodel_name="account.analytic.group",
string="Analytic Account Group",
)
analytic_tag_ids = fields.Many2many( analytic_tag_ids = fields.Many2many(
comodel_name="account.analytic.tag", string="Analytic Tags" comodel_name="account.analytic.tag", string="Analytic Tags"
) )
@ -573,8 +598,17 @@ class MisReportInstance(models.Model):
filter_descriptions.append( filter_descriptions.append(
_("Analytic Account: %s") % analytic_account.display_name _("Analytic Account: %s") % analytic_account.display_name
) )
analytic_group_id = filters.get("analytic_account_id.group_id", {}).get("value")
if analytic_group_id:
analytic_group = self.env["account.analytic.group"].browse(
analytic_group_id
)
filter_descriptions.append(
_("Analytic Account Group: %s") % analytic_group.display_name
)
analytic_tag_value = filters.get("analytic_tag_ids", {}).get("value") analytic_tag_value = filters.get("analytic_tag_ids", {}).get("value")
if analytic_tag_value: if analytic_tag_value:
# TODO 14 we need a test to cover this
analytic_tag_names = self.resolve_2many_commands( analytic_tag_names = self.resolve_2many_commands(
"analytic_tag_ids", analytic_tag_value, ["name"] "analytic_tag_ids", analytic_tag_value, ["name"]
) )
@ -659,6 +693,11 @@ class MisReportInstance(models.Model):
"value": self.analytic_account_id.id, "value": self.analytic_account_id.id,
"operator": "=", "operator": "=",
} }
if self.analytic_group_id:
context["mis_report_filters"]["analytic_account_id.group_id"] = {
"value": self.analytic_group_id.id,
"operator": "=",
}
if self.analytic_tag_ids: if self.analytic_tag_ids:
context["mis_report_filters"]["analytic_tag_ids"] = { context["mis_report_filters"]["analytic_tag_ids"] = {
"value": self.analytic_tag_ids.ids, "value": self.analytic_tag_ids.ids,
@ -847,7 +886,7 @@ class MisReportInstance(models.Model):
account_id = arg.get("account_id") account_id = arg.get("account_id")
if account_id: if account_id:
account = self.env["account.account"].browse(account_id) account = self.env[self.report_id.account_model].browse(account_id)
return "{kpi} - {account} - {period}".format( return "{kpi} - {account} - {period}".format(
kpi=kpi.description, kpi=kpi.description,
account=account.display_name, account=account.display_name,

View File

@ -11,7 +11,7 @@ _logger = logging.getLogger(__name__)
class Report(models.Model): class Report(models.Model):
_inherit = "ir.actions.report" _inherit = "ir.actions.report"
def render_qweb_pdf(self, res_ids=None, data=None): def _render_qweb_pdf(self, res_ids=None, data=None):
if self.report_name == "mis_builder.report_mis_report_instance": if self.report_name == "mis_builder.report_mis_report_instance":
if not res_ids: if not res_ids:
res_ids = self.env.context.get("active_ids") res_ids = self.env.context.get("active_ids")
@ -22,7 +22,7 @@ class Report(models.Model):
) )
# data=None, because it was there only to force Flectra # data=None, because it was there only to force Flectra
# to propagate context # to propagate context
return super(Report, self.with_context(context)).render_qweb_pdf( return super(Report, self.with_context(context))._render_qweb_pdf(
res_ids, data=None res_ids, data=None
) )
return super(Report, self).render_qweb_pdf(res_ids, data) return super(Report, self)._render_qweb_pdf(res_ids, data)

View File

@ -19,3 +19,4 @@ manage_mis_report_subreport,access_mis_report_subreport,model_mis_report_subrepo
access_mis_report_subreport,access_mis_report_subreport,model_mis_report_subreport,base.group_user,1,0,0,0 access_mis_report_subreport,access_mis_report_subreport,model_mis_report_subreport,base.group_user,1,0,0,0
manage_mis_report_style,access_mis_report_style,model_mis_report_style,account.group_account_manager,1,1,1,1 manage_mis_report_style,access_mis_report_style,model_mis_report_style,account.group_account_manager,1,1,1,1
access_mis_report_style,access_mis_report_style,model_mis_report_style,base.group_user,1,0,0,0 access_mis_report_style,access_mis_report_style,model_mis_report_style,base.group_user,1,0,0,0
access_add_to_dashboard_wizard,access_add_to_dashboard_wizard,model_add_mis_report_instance_dashboard_wizard,base.group_user,1,1,1,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
19 access_mis_report_subreport access_mis_report_subreport model_mis_report_subreport base.group_user 1 0 0 0
20 manage_mis_report_style access_mis_report_style model_mis_report_style account.group_account_manager 1 1 1 1
21 access_mis_report_style access_mis_report_style model_mis_report_style base.group_user 1 0 0 0
22 access_add_to_dashboard_wizard access_add_to_dashboard_wizard model_add_mis_report_instance_dashboard_wizard base.group_user 1 1 1 0

View File

@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !! !! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !! !! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.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/mis-builder/tree/13.0/mis_builder"><img alt="OCA/mis-builder" src="https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/mis-builder-13-0/mis-builder-13-0-mis_builder"><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/248/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p> <p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.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/mis-builder/tree/14.0/mis_builder"><img alt="OCA/mis-builder" src="https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/mis-builder-14-0/mis-builder-14-0-mis_builder"><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/248/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module allows you to build Management Information Systems dashboards. <p>This module allows you to build Management Information Systems dashboards.
Such style of reports presents KPI in rows and time periods in columns. Such style of reports presents KPI in rows and time periods in columns.
Reports mainly fetch data from account moves, but can also combine data coming Reports mainly fetch data from account moves, but can also combine data coming
@ -376,46 +376,49 @@ can be added to Odoo dashboards.</p>
<p><strong>Table of contents</strong></p> <p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents"> <div class="contents local topic" id="contents">
<ul class="simple"> <ul class="simple">
<li><a class="reference internal" href="#installation" id="id68">Installation</a></li> <li><a class="reference internal" href="#installation" id="id75">Installation</a></li>
<li><a class="reference internal" href="#usage" id="id69">Usage</a></li> <li><a class="reference internal" href="#usage" id="id76">Usage</a></li>
<li><a class="reference internal" href="#development" id="id70">Development</a></li> <li><a class="reference internal" href="#development" id="id77">Development</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="id71">Known issues / Roadmap</a></li> <li><a class="reference internal" href="#known-issues-roadmap" id="id78">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#changelog" id="id72">Changelog</a><ul> <li><a class="reference internal" href="#changelog" id="id79">Changelog</a><ul>
<li><a class="reference internal" href="#id1" id="id73">13.0.3.6.3 (2020-08-28)</a></li> <li><a class="reference internal" href="#id1" id="id80">14.0.3.6.6 (2021-04-23)</a></li>
<li><a class="reference internal" href="#id5" id="id74">13.0.3.6.2 (2020-04-22)</a></li> <li><a class="reference internal" href="#id3" id="id81">14.0.3.6.5 (2021-04-23)</a></li>
<li><a class="reference internal" href="#id7" id="id75">13.0.3.6.1 (2020-04-22)</a></li> <li><a class="reference internal" href="#id5" id="id82">14.0.3.6.4 (2021-04-06)</a></li>
<li><a class="reference internal" href="#id9" id="id76">13.0.3.6.0 (2020-03-28)</a></li> <li><a class="reference internal" href="#id8" id="id83">13.0.3.6.3 (2020-08-28)</a></li>
<li><a class="reference internal" href="#id12" id="id77">13.0.3.5.0 (2020-01-??)</a></li> <li><a class="reference internal" href="#id12" id="id84">13.0.3.6.2 (2020-04-22)</a></li>
<li><a class="reference internal" href="#id13" id="id78">12.0.3.5.0 (2019-10-26)</a></li> <li><a class="reference internal" href="#id14" id="id85">13.0.3.6.1 (2020-04-22)</a></li>
<li><a class="reference internal" href="#id21" id="id79">12.0.3.4.0 (2019-07-09)</a></li> <li><a class="reference internal" href="#id16" id="id86">13.0.3.6.0 (2020-03-28)</a></li>
<li><a class="reference internal" href="#id28" id="id80">12.0.3.3.0 (2019-01-26)</a></li> <li><a class="reference internal" href="#id19" id="id87">13.0.3.5.0 (2020-01-??)</a></li>
<li><a class="reference internal" href="#id38" id="id81">11.0.3.2.2 (2018-06-30)</a></li> <li><a class="reference internal" href="#id20" id="id88">12.0.3.5.0 (2019-10-26)</a></li>
<li><a class="reference internal" href="#id41" id="id82">11.0.3.2.1 (2018-05-29)</a></li> <li><a class="reference internal" href="#id28" id="id89">12.0.3.4.0 (2019-07-09)</a></li>
<li><a class="reference internal" href="#id43" id="id83">10.0.3.2.0 (2018-05-02)</a></li> <li><a class="reference internal" href="#id35" id="id90">12.0.3.3.0 (2019-01-26)</a></li>
<li><a class="reference internal" href="#id47" id="id84">11.0.3.1.2 (2018-02-04)</a></li> <li><a class="reference internal" href="#id45" id="id91">11.0.3.2.2 (2018-06-30)</a></li>
<li><a class="reference internal" href="#id49" id="id85">10.0.3.1.1 (2017-11-14)</a></li> <li><a class="reference internal" href="#id48" id="id92">11.0.3.2.1 (2018-05-29)</a></li>
<li><a class="reference internal" href="#id58" id="id86">10.0.3.0.4 (2017-10-14)</a></li> <li><a class="reference internal" href="#id50" id="id93">10.0.3.2.0 (2018-05-02)</a></li>
<li><a class="reference internal" href="#id60" id="id87">10.0.3.0.3 (2017-10-03)</a></li> <li><a class="reference internal" href="#id54" id="id94">11.0.3.1.2 (2018-02-04)</a></li>
<li><a class="reference internal" href="#id62" id="id88">10.0.3.0.2 (2017-10-01)</a></li> <li><a class="reference internal" href="#id56" id="id95">10.0.3.1.1 (2017-11-14)</a></li>
<li><a class="reference internal" href="#unreleased" id="id89">10.0.2.0.3 (unreleased)</a></li> <li><a class="reference internal" href="#id65" id="id96">10.0.3.0.4 (2017-10-14)</a></li>
<li><a class="reference internal" href="#id63" id="id90">9.0.2.0.2 (2016-09-27)</a></li> <li><a class="reference internal" href="#id67" id="id97">10.0.3.0.3 (2017-10-03)</a></li>
<li><a class="reference internal" href="#id64" id="id91">9.0.2.0.1 (2016-05-26)</a></li> <li><a class="reference internal" href="#id69" id="id98">10.0.3.0.2 (2017-10-01)</a></li>
<li><a class="reference internal" href="#id65" id="id92">9.0.2.0.0 (2016-05-24)</a></li> <li><a class="reference internal" href="#unreleased" id="id99">10.0.2.0.3 (unreleased)</a></li>
<li><a class="reference internal" href="#id66" id="id93">8.0.1.0.0 (2016-04-27)</a></li> <li><a class="reference internal" href="#id70" id="id100">9.0.2.0.2 (2016-09-27)</a></li>
<li><a class="reference internal" href="#id67" id="id94">8.0.0.2.0</a></li> <li><a class="reference internal" href="#id71" id="id101">9.0.2.0.1 (2016-05-26)</a></li>
<li><a class="reference internal" href="#id72" id="id102">9.0.2.0.0 (2016-05-24)</a></li>
<li><a class="reference internal" href="#id73" id="id103">8.0.1.0.0 (2016-04-27)</a></li>
<li><a class="reference internal" href="#id74" id="id104">8.0.0.2.0</a></li>
</ul> </ul>
</li> </li>
<li><a class="reference internal" href="#bug-tracker" id="id95">Bug Tracker</a></li> <li><a class="reference internal" href="#bug-tracker" id="id105">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id96">Credits</a><ul> <li><a class="reference internal" href="#credits" id="id106">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id97">Authors</a></li> <li><a class="reference internal" href="#authors" id="id107">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id98">Contributors</a></li> <li><a class="reference internal" href="#contributors" id="id108">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id99">Maintainers</a></li> <li><a class="reference internal" href="#maintainers" id="id109">Maintainers</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</div> </div>
<div class="section" id="installation"> <div class="section" id="installation">
<h1><a class="toc-backref" href="#id68">Installation</a></h1> <h1><a class="toc-backref" href="#id75">Installation</a></h1>
<p>Your preferred way to install addons will work with MIS Builder.</p> <p>Your preferred way to install addons will work with MIS Builder.</p>
<p>An easy way to install it with all its dependencies is using pip:</p> <p>An easy way to install it with all its dependencies is using pip:</p>
<ul class="simple"> <ul class="simple">
@ -425,7 +428,7 @@ the MIS Builder application.</li>
</ul> </ul>
</div> </div>
<div class="section" id="usage"> <div class="section" id="usage">
<h1><a class="toc-backref" href="#id69">Usage</a></h1> <h1><a class="toc-backref" href="#id76">Usage</a></h1>
<p>To configure this module, you need to:</p> <p>To configure this module, you need to:</p>
<ul class="simple"> <ul class="simple">
<li>Go to Accounting &gt; Configuration &gt; MIS Reporting &gt; MIS Report Templates where <li>Go to Accounting &gt; Configuration &gt; MIS Reporting &gt; MIS Report Templates where
@ -451,7 +454,7 @@ and export it to PDF or Excel.</li>
</div> </div>
</div> </div>
<div class="section" id="development"> <div class="section" id="development">
<h1><a class="toc-backref" href="#id70">Development</a></h1> <h1><a class="toc-backref" href="#id77">Development</a></h1>
<p>A typical extension is to provide a mechanism to filter reports on analytic dimensions <p>A typical extension is to provide a mechanism to filter reports on analytic dimensions
or operational units. To implement this, you can override _get_additional_move_line_filter or operational units. To implement this, you can override _get_additional_move_line_filter
and _get_additional_filter to further filter move lines or queries based on a user and _get_additional_filter to further filter move lines or queries based on a user
@ -460,15 +463,42 @@ or even on mis.report.instance.period if you want different columns to show diff
analytic accounts.</p> analytic accounts.</p>
</div> </div>
<div class="section" id="known-issues-roadmap"> <div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#id71">Known issues / Roadmap</a></h1> <h1><a class="toc-backref" href="#id78">Known issues / Roadmap</a></h1>
<p>The mis_builder <a class="reference external" href="https://github.com/OCA/mis-builder/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement">roadmap</a> <p>The mis_builder <a class="reference external" href="https://github.com/OCA/mis-builder/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement">roadmap</a>
and <a class="reference external" href="https://github.com/OCA/mis-builder/issues?q=is%3Aopen+is%3Aissue+label%3Abug">known issues</a> can and <a class="reference external" href="https://github.com/OCA/mis-builder/issues?q=is%3Aopen+is%3Aissue+label%3Abug">known issues</a> can
be found on GitHub.</p> be found on GitHub.</p>
</div> </div>
<div class="section" id="changelog"> <div class="section" id="changelog">
<h1><a class="toc-backref" href="#id72">Changelog</a></h1> <h1><a class="toc-backref" href="#id79">Changelog</a></h1>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><a class="toc-backref" href="#id73">13.0.3.6.3 (2020-08-28)</a></h2> <h2><a class="toc-backref" href="#id80">14.0.3.6.6 (2021-04-23)</a></h2>
<p><strong>Bugfixes</strong></p>
<ul class="simple">
<li>Fix drilldown action name when the account model has been customized. (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/350">#350</a>)</li>
</ul>
</div>
<div class="section" id="id3">
<h2><a class="toc-backref" href="#id81">14.0.3.6.5 (2021-04-23)</a></h2>
<p><strong>Bugfixes</strong></p>
<ul class="simple">
<li>While duplicating a MIS report instance, comparison columns are ignored because
they would raise an error otherwise, as they keep the old source_cmpcol_from_id
and source_cmpcol_to_id from the original record. (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/343">#343</a>)</li>
</ul>
</div>
<div class="section" id="id5">
<h2><a class="toc-backref" href="#id82">14.0.3.6.4 (2021-04-06)</a></h2>
<p><strong>Features</strong></p>
<ul class="simple">
<li>The drilldown action name displayed on the breadcrumb has been revised.
The kpi description and the account <tt class="docutils literal">display_name</tt> are shown instead
of the kpis technical definition. (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/304">#304</a>)</li>
<li>Add analytic group filters on report instance, periods and in the interactive
view. (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/320">#320</a>)</li>
</ul>
</div>
<div class="section" id="id8">
<h2><a class="toc-backref" href="#id83">13.0.3.6.3 (2020-08-28)</a></h2>
<p><strong>Bugfixes</strong></p> <p><strong>Bugfixes</strong></p>
<ul class="simple"> <ul class="simple">
<li>Having a “Compare columns” added on a KPI with an associated style using a <li>Having a “Compare columns” added on a KPI with an associated style using a
@ -480,23 +510,23 @@ when exporting to XLSX. (<a class="reference external" href="https://github.com/
<li><a class="reference external" href="https://github.com/OCA/mis-builder/issues/280">#280</a>, <a class="reference external" href="https://github.com/OCA/mis-builder/issues/296">#296</a></li> <li><a class="reference external" href="https://github.com/OCA/mis-builder/issues/280">#280</a>, <a class="reference external" href="https://github.com/OCA/mis-builder/issues/296">#296</a></li>
</ul> </ul>
</div> </div>
<div class="section" id="id5"> <div class="section" id="id12">
<h2><a class="toc-backref" href="#id74">13.0.3.6.2 (2020-04-22)</a></h2> <h2><a class="toc-backref" href="#id84">13.0.3.6.2 (2020-04-22)</a></h2>
<p><strong>Bugfixes</strong></p> <p><strong>Bugfixes</strong></p>
<ul class="simple"> <ul class="simple">
<li>The “Settings” button is now displayed for users with the “Show full accounting features” right when previewing a report. (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/281">#281</a>)</li> <li>The “Settings” button is now displayed for users with the “Show full accounting features” right when previewing a report. (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/281">#281</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id7"> <div class="section" id="id14">
<h2><a class="toc-backref" href="#id75">13.0.3.6.1 (2020-04-22)</a></h2> <h2><a class="toc-backref" href="#id85">13.0.3.6.1 (2020-04-22)</a></h2>
<p><strong>Bugfixes</strong></p> <p><strong>Bugfixes</strong></p>
<ul class="simple"> <ul class="simple">
<li>Fix <tt class="docutils literal">TypeError: 'module' object is not iterable</tt> when using <li>Fix <tt class="docutils literal">TypeError: 'module' object is not iterable</tt> when using
budgets by account. (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/276">#276</a>)</li> budgets by account. (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/276">#276</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id9"> <div class="section" id="id16">
<h2><a class="toc-backref" href="#id76">13.0.3.6.0 (2020-03-28)</a></h2> <h2><a class="toc-backref" href="#id86">13.0.3.6.0 (2020-03-28)</a></h2>
<p><strong>Features</strong></p> <p><strong>Features</strong></p>
<ul class="simple"> <ul class="simple">
<li>Add column-level filters on analytic account and analytic tags. <li>Add column-level filters on analytic account and analytic tags.
@ -511,12 +541,12 @@ Sheet” to create new KPIs for the ratios (e.g. balance_sheet.current_assets
balance_sheet.total_assets). (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/155">#155</a>)</li> balance_sheet.total_assets). (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/155">#155</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id12"> <div class="section" id="id19">
<h2><a class="toc-backref" href="#id77">13.0.3.5.0 (2020-01-??)</a></h2> <h2><a class="toc-backref" href="#id87">13.0.3.5.0 (2020-01-??)</a></h2>
<p>Migration to odoo 13.0.</p> <p>Migration to odoo 13.0.</p>
</div> </div>
<div class="section" id="id13"> <div class="section" id="id20">
<h2><a class="toc-backref" href="#id78">12.0.3.5.0 (2019-10-26)</a></h2> <h2><a class="toc-backref" href="#id88">12.0.3.5.0 (2019-10-26)</a></h2>
<p><strong>Features</strong></p> <p><strong>Features</strong></p>
<ul class="simple"> <ul class="simple">
<li>The <tt class="docutils literal">account_id</tt> field of the model selected in Move lines source <li>The <tt class="docutils literal">account_id</tt> field of the model selected in Move lines source
@ -525,7 +555,7 @@ relationship with any model that has a <tt class="docutils literal">code</tt> fi
<tt class="docutils literal">account.account</tt> model). To this end, the model to be used for Actuals <tt class="docutils literal">account.account</tt> model). To this end, the model to be used for Actuals
move lines can be configured on the report template. It can be something else move lines can be configured on the report template. It can be something else
than move lines and the only constraint is that its <tt class="docutils literal">account_id</tt> field than move lines and the only constraint is that its <tt class="docutils literal">account_id</tt> field
as a <tt class="docutils literal">code</tt> field. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/149">#149</a>)</li> has a <tt class="docutils literal">code</tt> field. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/149">#149</a>)</li>
<li>Add <tt class="docutils literal">source_aml_model_name</tt> field so extension modules providing <li>Add <tt class="docutils literal">source_aml_model_name</tt> field so extension modules providing
alternative data sources can more easily customize their data source. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/214">#214</a>)</li> alternative data sources can more easily customize their data source. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/214">#214</a>)</li>
<li>Support analytic tag filters in the backend view and preview widget. <li>Support analytic tag filters in the backend view and preview widget.
@ -546,8 +576,8 @@ style. (<a class="reference external" href="https://github.com/oca/mis-builder/i
<li>In Excel export, keep the percentage point suffix (pp) instead of replacing it with %. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/220">#220</a>)</li> <li>In Excel export, keep the percentage point suffix (pp) instead of replacing it with %. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/220">#220</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id21"> <div class="section" id="id28">
<h2><a class="toc-backref" href="#id79">12.0.3.4.0 (2019-07-09)</a></h2> <h2><a class="toc-backref" href="#id89">12.0.3.4.0 (2019-07-09)</a></h2>
<p><strong>Features</strong></p> <p><strong>Features</strong></p>
<ul class="simple"> <ul class="simple">
<li>New year-to-date mode for defining periods. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/165">#165</a>)</li> <li>New year-to-date mode for defining periods. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/165">#165</a>)</li>
@ -565,8 +595,8 @@ non-multi expressions yield tuples of incorrect lenght. (<a class="reference ext
<li>Fix rendering of percentage types in Excel export. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/192">#192</a>)</li> <li>Fix rendering of percentage types in Excel export. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/192">#192</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id28"> <div class="section" id="id35">
<h2><a class="toc-backref" href="#id80">12.0.3.3.0 (2019-01-26)</a></h2> <h2><a class="toc-backref" href="#id90">12.0.3.3.0 (2019-01-26)</a></h2>
<p><strong>Features</strong></p> <p><strong>Features</strong></p>
<p><em>Dynamic analytic filters in report preview are not yet available in 11, <p><em>Dynamic analytic filters in report preview are not yet available in 11,
this requires an update to the JS widget that proved difficult to implement this requires an update to the JS widget that proved difficult to implement
@ -606,8 +636,8 @@ is checked, as for all other syle elements. (<cite>#121 &lt;https://github.com/O
<p>If you use <tt class="docutils literal">Actuals (alternative)</tt> data source in combination with analytic <p>If you use <tt class="docutils literal">Actuals (alternative)</tt> data source in combination with analytic
filters, the underlying model must now have an <tt class="docutils literal">analytic_account_id</tt> field.</p> filters, the underlying model must now have an <tt class="docutils literal">analytic_account_id</tt> field.</p>
</div> </div>
<div class="section" id="id38"> <div class="section" id="id45">
<h2><a class="toc-backref" href="#id81">11.0.3.2.2 (2018-06-30)</a></h2> <h2><a class="toc-backref" href="#id91">11.0.3.2.2 (2018-06-30)</a></h2>
<ul class="simple"> <ul class="simple">
<li>[FIX] Fix bug in company_default_get call returning <li>[FIX] Fix bug in company_default_get call returning
id instead of recordset id instead of recordset
@ -618,16 +648,16 @@ need to be displayed).
(<a class="reference external" href="https://github.com/OCA/mis-builder/issues/46">#46</a>)</li> (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/46">#46</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id41"> <div class="section" id="id48">
<h2><a class="toc-backref" href="#id82">11.0.3.2.1 (2018-05-29)</a></h2> <h2><a class="toc-backref" href="#id92">11.0.3.2.1 (2018-05-29)</a></h2>
<ul class="simple"> <ul class="simple">
<li>[FIX] Missing comparison operator for AccountingNone <li>[FIX] Missing comparison operator for AccountingNone
leading to errors in pbal computations leading to errors in pbal computations
(<a class="reference external" href="https://github.com/OCA/mis-builder/issue/93">#93</a>)</li> (<a class="reference external" href="https://github.com/OCA/mis-builder/issue/93">#93</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id43"> <div class="section" id="id50">
<h2><a class="toc-backref" href="#id83">10.0.3.2.0 (2018-05-02)</a></h2> <h2><a class="toc-backref" href="#id93">10.0.3.2.0 (2018-05-02)</a></h2>
<ul class="simple"> <ul class="simple">
<li>[FIX] make subkpi ordering deterministic <li>[FIX] make subkpi ordering deterministic
(<a class="reference external" href="https://github.com/OCA/mis-builder/issues/71">#71</a>)</li> (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/71">#71</a>)</li>
@ -641,13 +671,13 @@ resp positive balances)
(<a class="reference external" href="https://github.com/OCA/mis-builder/issues/86">#86</a>)</li> (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/86">#86</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id47"> <div class="section" id="id54">
<h2><a class="toc-backref" href="#id84">11.0.3.1.2 (2018-02-04)</a></h2> <h2><a class="toc-backref" href="#id94">11.0.3.1.2 (2018-02-04)</a></h2>
<p>Migration to Odoo 11. No new feature. <p>Migration to Odoo 11. No new feature.
(<a class="reference external" href="https://github.com/OCA/mis-builder/pull/67">#67</a>)</p> (<a class="reference external" href="https://github.com/OCA/mis-builder/pull/67">#67</a>)</p>
</div> </div>
<div class="section" id="id49"> <div class="section" id="id56">
<h2><a class="toc-backref" href="#id85">10.0.3.1.1 (2017-11-14)</a></h2> <h2><a class="toc-backref" href="#id95">10.0.3.1.1 (2017-11-14)</a></h2>
<p>New features:</p> <p>New features:</p>
<ul class="simple"> <ul class="simple">
<li>[ADD] month and year relative periods, easier to use than <li>[ADD] month and year relative periods, easier to use than
@ -684,24 +714,24 @@ created (not yet saved) report instances.
<li>Alternative move line data sources must have a company_id field.</li> <li>Alternative move line data sources must have a company_id field.</li>
</ul> </ul>
</div> </div>
<div class="section" id="id58"> <div class="section" id="id65">
<h2><a class="toc-backref" href="#id86">10.0.3.0.4 (2017-10-14)</a></h2> <h2><a class="toc-backref" href="#id96">10.0.3.0.4 (2017-10-14)</a></h2>
<p>Bug fix:</p> <p>Bug fix:</p>
<ul class="simple"> <ul class="simple">
<li>[FIX] issue with initial balance rounding. <li>[FIX] issue with initial balance rounding.
<a class="reference external" href="https://github.com/OCA/mis-builder/issues/30">#30</a></li> <a class="reference external" href="https://github.com/OCA/mis-builder/issues/30">#30</a></li>
</ul> </ul>
</div> </div>
<div class="section" id="id60"> <div class="section" id="id67">
<h2><a class="toc-backref" href="#id87">10.0.3.0.3 (2017-10-03)</a></h2> <h2><a class="toc-backref" href="#id97">10.0.3.0.3 (2017-10-03)</a></h2>
<p>Bug fix:</p> <p>Bug fix:</p>
<ul class="simple"> <ul class="simple">
<li>[FIX] fix error saving KPI on newly created reports. <li>[FIX] fix error saving KPI on newly created reports.
<a class="reference external" href="https://github.com/OCA/mis-builder/issues/18">#18</a></li> <a class="reference external" href="https://github.com/OCA/mis-builder/issues/18">#18</a></li>
</ul> </ul>
</div> </div>
<div class="section" id="id62"> <div class="section" id="id69">
<h2><a class="toc-backref" href="#id88">10.0.3.0.2 (2017-10-01)</a></h2> <h2><a class="toc-backref" href="#id98">10.0.3.0.2 (2017-10-01)</a></h2>
<p>New features:</p> <p>New features:</p>
<ul class="simple"> <ul class="simple">
<li>[ADD] Alternative move line source per report column. <li>[ADD] Alternative move line source per report column.
@ -745,7 +775,7 @@ expressions were used in a KPI</li>
</ul> </ul>
</div> </div>
<div class="section" id="unreleased"> <div class="section" id="unreleased">
<h2><a class="toc-backref" href="#id89">10.0.2.0.3 (unreleased)</a></h2> <h2><a class="toc-backref" href="#id99">10.0.2.0.3 (unreleased)</a></h2>
<ul class="simple"> <ul class="simple">
<li>[IMP] more robust behaviour in presence of missing expressions</li> <li>[IMP] more robust behaviour in presence of missing expressions</li>
<li>[FIX] indent style</li> <li>[FIX] indent style</li>
@ -757,23 +787,23 @@ reports with no objects</li>
<li>[IMP] provide full access to mis builder style for group Adviser.</li> <li>[IMP] provide full access to mis builder style for group Adviser.</li>
</ul> </ul>
</div> </div>
<div class="section" id="id63"> <div class="section" id="id70">
<h2><a class="toc-backref" href="#id90">9.0.2.0.2 (2016-09-27)</a></h2> <h2><a class="toc-backref" href="#id100">9.0.2.0.2 (2016-09-27)</a></h2>
<ul class="simple"> <ul class="simple">
<li>[IMP] Add refresh button in mis report preview.</li> <li>[IMP] Add refresh button in mis report preview.</li>
<li>[IMP] Widget code changes to allow to add fields in the widget more easily.</li> <li>[IMP] Widget code changes to allow to add fields in the widget more easily.</li>
</ul> </ul>
</div> </div>
<div class="section" id="id64"> <div class="section" id="id71">
<h2><a class="toc-backref" href="#id91">9.0.2.0.1 (2016-05-26)</a></h2> <h2><a class="toc-backref" href="#id101">9.0.2.0.1 (2016-05-26)</a></h2>
<ul class="simple"> <ul class="simple">
<li>[IMP] remove unused argument in declare_and_compute_period() <li>[IMP] remove unused argument in declare_and_compute_period()
for a cleaner API. This is a breaking API changing merged in for a cleaner API. This is a breaking API changing merged in
urgency before it is used by other modules.</li> urgency before it is used by other modules.</li>
</ul> </ul>
</div> </div>
<div class="section" id="id65"> <div class="section" id="id72">
<h2><a class="toc-backref" href="#id92">9.0.2.0.0 (2016-05-24)</a></h2> <h2><a class="toc-backref" href="#id102">9.0.2.0.0 (2016-05-24)</a></h2>
<p>Part of the work for this release has been done at the Sorrento sprint <p>Part of the work for this release has been done at the Sorrento sprint
April 26-29, 2016. The rest (ie a major refactoring) has been done in April 26-29, 2016. The rest (ie a major refactoring) has been done in
the weeks after.</p> the weeks after.</p>
@ -820,8 +850,8 @@ flexible alternative to fiscal periods</li>
consolidation accounts have been removed</li> consolidation accounts have been removed</li>
</ul> </ul>
</div> </div>
<div class="section" id="id66"> <div class="section" id="id73">
<h2><a class="toc-backref" href="#id93">8.0.1.0.0 (2016-04-27)</a></h2> <h2><a class="toc-backref" href="#id103">8.0.1.0.0 (2016-04-27)</a></h2>
<ul class="simple"> <ul class="simple">
<li>The copy of a MIS Report Instance now copies period. <li>The copy of a MIS Report Instance now copies period.
<a class="reference external" href="https://github.com/OCA/account-financial-reporting/pull/181">https://github.com/OCA/account-financial-reporting/pull/181</a></li> <a class="reference external" href="https://github.com/OCA/account-financial-reporting/pull/181">https://github.com/OCA/account-financial-reporting/pull/181</a></li>
@ -845,29 +875,29 @@ the widget to open the door to analytic filtering in the previews.
<a class="reference external" href="https://github.com/OCA/account-financial-reporting/pull/131">https://github.com/OCA/account-financial-reporting/pull/131</a></li> <a class="reference external" href="https://github.com/OCA/account-financial-reporting/pull/131">https://github.com/OCA/account-financial-reporting/pull/131</a></li>
</ul> </ul>
</div> </div>
<div class="section" id="id67"> <div class="section" id="id74">
<h2><a class="toc-backref" href="#id94">8.0.0.2.0</a></h2> <h2><a class="toc-backref" href="#id104">8.0.0.2.0</a></h2>
<p>Pre-history. Or rather, you need to look at the git log.</p> <p>Pre-history. Or rather, you need to look at the git log.</p>
</div> </div>
</div> </div>
<div class="section" id="bug-tracker"> <div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id95">Bug Tracker</a></h1> <h1><a class="toc-backref" href="#id105">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/mis-builder/issues">GitHub Issues</a>. <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/mis-builder/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported. In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p> <a class="reference external" href="https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder%0Aversion:%2014.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> <p>Do not contact contributors directly about support or help with technical issues.</p>
</div> </div>
<div class="section" id="credits"> <div class="section" id="credits">
<h1><a class="toc-backref" href="#id96">Credits</a></h1> <h1><a class="toc-backref" href="#id106">Credits</a></h1>
<div class="section" id="authors"> <div class="section" id="authors">
<h2><a class="toc-backref" href="#id97">Authors</a></h2> <h2><a class="toc-backref" href="#id107">Authors</a></h2>
<ul class="simple"> <ul class="simple">
<li>ACSONE SA/NV</li> <li>ACSONE SA/NV</li>
</ul> </ul>
</div> </div>
<div class="section" id="contributors"> <div class="section" id="contributors">
<h2><a class="toc-backref" href="#id98">Contributors</a></h2> <h2><a class="toc-backref" href="#id108">Contributors</a></h2>
<ul class="simple"> <ul class="simple">
<li>Stéphane Bidoul &lt;<a class="reference external" href="mailto:stephane.bidoul&#64;acsone.eu">stephane.bidoul&#64;acsone.eu</a>&gt;</li> <li>Stéphane Bidoul &lt;<a class="reference external" href="mailto:stephane.bidoul&#64;acsone.eu">stephane.bidoul&#64;acsone.eu</a>&gt;</li>
<li>Laetitia Gangloff &lt;<a class="reference external" href="mailto:laetitia.gangloff&#64;acsone.eu">laetitia.gangloff&#64;acsone.eu</a>&gt;</li> <li>Laetitia Gangloff &lt;<a class="reference external" href="mailto:laetitia.gangloff&#64;acsone.eu">laetitia.gangloff&#64;acsone.eu</a>&gt;</li>
@ -895,7 +925,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
</ul> </ul>
</div> </div>
<div class="section" id="maintainers"> <div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id99">Maintainers</a></h2> <h2><a class="toc-backref" href="#id109">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p> <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> <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 <p>OCA, or the Odoo Community Association, is a nonprofit organization whose
@ -903,7 +933,7 @@ mission is to support the collaborative development of Odoo features and
promote its widespread use.</p> promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p> <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external" href="https://github.com/sbidoul"><img alt="sbidoul" src="https://github.com/sbidoul.png?size=40px" /></a></p> <p><a class="reference external" href="https://github.com/sbidoul"><img alt="sbidoul" src="https://github.com/sbidoul.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/mis-builder/tree/13.0/mis_builder">OCA/mis-builder</a> project on GitHub.</p> <p>This module is part of the <a class="reference external" href="https://github.com/OCA/mis-builder/tree/14.0/mis_builder">OCA/mis-builder</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> <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> </div>

View File

@ -34,6 +34,10 @@ flectra.define("mis_builder.widget", function (require) {
self.analytic_account_id_domain = []; // TODO unused for now self.analytic_account_id_domain = []; // TODO unused for now
self.analytic_account_id_label = _t("Analytic Account Filter"); self.analytic_account_id_label = _t("Analytic Account Filter");
self.analytic_account_id_m2o = undefined; // Field widget self.analytic_account_id_m2o = undefined; // Field widget
self.analytic_group_id_domain = []; // TODO unused for now
self.analytic_group_filter_name = "analytic_account_id.group_id";
self.analytic_group_id_label = _t("Analytic Account Group");
self.analytic_group_id_m2o = undefined; // Field widget
self.analytic_tag_ids_domain = []; // TODO unused for now self.analytic_tag_ids_domain = []; // TODO unused for now
self.analytic_tag_ids_label = _t("Analytic Tags Filter"); self.analytic_tag_ids_label = _t("Analytic Tags Filter");
self.analytic_tag_ids_m2m = undefined; // Field widget self.analytic_tag_ids_m2m = undefined; // Field widget
@ -174,6 +178,12 @@ flectra.define("mis_builder.widget", function (require) {
name: "filter_analytic_account_id", name: "filter_analytic_account_id",
value: self._getFilterValue("analytic_account_id"), value: self._getFilterValue("analytic_account_id"),
}); });
fields.push({
relation: "account.analytic.group",
type: "many2one",
name: "filter_analytic_account_id.group_id",
value: self._getFilterValue("analytic_account_id.group_id"),
});
} }
if (self.has_group_analytic_tags) { if (self.has_group_analytic_tags) {
fields.push({ fields.push({
@ -226,6 +236,28 @@ flectra.define("mis_builder.widget", function (require) {
self.analytic_account_id_m2o self.analytic_account_id_m2o
); );
self.analytic_account_id_m2o.appendTo(self.getMisBuilderFilterBox()); self.analytic_account_id_m2o.appendTo(self.getMisBuilderFilterBox());
self.analytic_group_id_m2o = new relational_fields.FieldMany2One(
self,
"filter_analytic_account_id.group_id",
record,
{
mode: "edit",
attrs: {
placeholder: self.analytic_group_id_label,
options: {
no_create: "True",
no_open: "True",
},
},
}
);
self._registerWidget(
record.id,
self.analytic_group_id_m2o.name,
self.analytic_group_id_m2o
);
self.analytic_group_id_m2o.appendTo(self.getMisBuilderFilterBox());
} }
if (self.has_group_analytic_tags) { if (self.has_group_analytic_tags) {
@ -319,6 +351,18 @@ flectra.define("mis_builder.widget", function (require) {
} }
} }
if (self.analytic_group_id_m2o !== undefined) {
if (self.analytic_group_id_m2o.value) {
self._setFilterValue(
self.analytic_group_filter_name,
self.analytic_group_id_m2o.value.res_id,
"="
);
} else {
self._setFilterValue(self.analytic_group_filter_name, undefined);
}
}
if (self.analytic_tag_ids_m2m !== undefined) { if (self.analytic_tag_ids_m2m !== undefined) {
if ( if (
self.analytic_tag_ids_m2m.value && self.analytic_tag_ids_m2m.value &&

View File

@ -125,7 +125,7 @@ class TestAEP(common.TransactionCase):
} }
) )
if post: if post:
move.post() move._post()
return move return move
def _do_queries(self, date_from, date_to): def _do_queries(self, date_from, date_to):
@ -147,8 +147,8 @@ class TestAEP(common.TransactionCase):
return res return res
def test_sanity_check(self): def test_sanity_check(self):
self.assertEquals(self.company.fiscalyear_last_day, 31) self.assertEqual(self.company.fiscalyear_last_day, 31)
self.assertEquals(self.company.fiscalyear_last_month, "12") self.assertEqual(self.company.fiscalyear_last_month, "12")
def test_aep_basic(self): def test_aep_basic(self):
self.aep.done_parsing() self.aep.done_parsing()
@ -160,9 +160,9 @@ class TestAEP(common.TransactionCase):
self.assertIs(self._eval("bali[400AR]"), AccountingNone) self.assertIs(self._eval("bali[400AR]"), AccountingNone)
self.assertIs(self._eval("bali[700IN]"), AccountingNone) self.assertIs(self._eval("bali[700IN]"), AccountingNone)
# check variation # check variation
self.assertEquals(self._eval("balp[400AR]"), 100) self.assertEqual(self._eval("balp[400AR]"), 100)
self.assertEquals(self._eval("balp[][('account_id.code', '=', '400AR')]"), 100) self.assertEqual(self._eval("balp[][('account_id.code', '=', '400AR')]"), 100)
self.assertEquals( self.assertEqual(
self._eval( self._eval(
"balp[]" "balp[]"
"[('account_id.user_type_id', '=', " "[('account_id.user_type_id', '=', "
@ -170,14 +170,14 @@ class TestAEP(common.TransactionCase):
), ),
100, 100,
) )
self.assertEquals( self.assertEqual(
self._eval( self._eval(
"balp[('user_type_id', '=', " "balp[('user_type_id', '=', "
" ref('account.data_account_type_receivable').id)]" " ref('account.data_account_type_receivable').id)]"
), ),
100, 100,
) )
self.assertEquals( self.assertEqual(
self._eval( self._eval(
"balp['&', " "balp['&', "
" ('user_type_id', '=', " " ('user_type_id', '=', "
@ -186,58 +186,58 @@ class TestAEP(common.TransactionCase):
), ),
100, 100,
) )
self.assertEquals(self._eval("balp[700IN]"), -100) self.assertEqual(self._eval("balp[700IN]"), -100)
# check ending balance # check ending balance
self.assertEquals(self._eval("bale[400AR]"), 100) self.assertEqual(self._eval("bale[400AR]"), 100)
self.assertEquals(self._eval("bale[700IN]"), -100) self.assertEqual(self._eval("bale[700IN]"), -100)
# let's query for January # let's query for January
self._do_queries( self._do_queries(
datetime.date(self.curr_year, 1, 1), datetime.date(self.curr_year, 1, 31) datetime.date(self.curr_year, 1, 1), datetime.date(self.curr_year, 1, 31)
) )
# initial balance is None for income account (it's not carried over) # initial balance is None for income account (it's not carried over)
self.assertEquals(self._eval("bali[400AR]"), 100) self.assertEqual(self._eval("bali[400AR]"), 100)
self.assertIs(self._eval("bali[700IN]"), AccountingNone) self.assertIs(self._eval("bali[700IN]"), AccountingNone)
# check variation # check variation
self.assertEquals(self._eval("balp[400AR]"), 300) self.assertEqual(self._eval("balp[400AR]"), 300)
self.assertEquals(self._eval("balp[700IN]"), -300) self.assertEqual(self._eval("balp[700IN]"), -300)
# check ending balance # check ending balance
self.assertEquals(self._eval("bale[400AR]"), 400) self.assertEqual(self._eval("bale[400AR]"), 400)
self.assertEquals(self._eval("bale[700IN]"), -300) self.assertEqual(self._eval("bale[700IN]"), -300)
# let's query for March # let's query for March
self._do_queries( self._do_queries(
datetime.date(self.curr_year, 3, 1), datetime.date(self.curr_year, 3, 31) datetime.date(self.curr_year, 3, 1), datetime.date(self.curr_year, 3, 31)
) )
# initial balance is the ending balance fo January # initial balance is the ending balance fo January
self.assertEquals(self._eval("bali[400AR]"), 400) self.assertEqual(self._eval("bali[400AR]"), 400)
self.assertEquals(self._eval("bali[700IN]"), -300) self.assertEqual(self._eval("bali[700IN]"), -300)
self.assertEquals(self._eval("pbali[400AR]"), 400) self.assertEqual(self._eval("pbali[400AR]"), 400)
self.assertEquals(self._eval("nbali[400AR]"), 0) self.assertEqual(self._eval("nbali[400AR]"), 0)
self.assertEquals(self._eval("nbali[700IN]"), -300) self.assertEqual(self._eval("nbali[700IN]"), -300)
self.assertEquals(self._eval("pbali[700IN]"), 0) self.assertEqual(self._eval("pbali[700IN]"), 0)
# check variation # check variation
self.assertEquals(self._eval("balp[400AR]"), 500) self.assertEqual(self._eval("balp[400AR]"), 500)
self.assertEquals(self._eval("balp[700IN]"), -500) self.assertEqual(self._eval("balp[700IN]"), -500)
self.assertEquals(self._eval("nbalp[400AR]"), 0) self.assertEqual(self._eval("nbalp[400AR]"), 0)
self.assertEquals(self._eval("pbalp[400AR]"), 500) self.assertEqual(self._eval("pbalp[400AR]"), 500)
self.assertEquals(self._eval("nbalp[700IN]"), -500) self.assertEqual(self._eval("nbalp[700IN]"), -500)
self.assertEquals(self._eval("pbalp[700IN]"), 0) self.assertEqual(self._eval("pbalp[700IN]"), 0)
# check ending balance # check ending balance
self.assertEquals(self._eval("bale[400AR]"), 900) self.assertEqual(self._eval("bale[400AR]"), 900)
self.assertEquals(self._eval("nbale[400AR]"), 0) self.assertEqual(self._eval("nbale[400AR]"), 0)
self.assertEquals(self._eval("pbale[400AR]"), 900) self.assertEqual(self._eval("pbale[400AR]"), 900)
self.assertEquals(self._eval("bale[700IN]"), -800) self.assertEqual(self._eval("bale[700IN]"), -800)
self.assertEquals(self._eval("nbale[700IN]"), -800) self.assertEqual(self._eval("nbale[700IN]"), -800)
self.assertEquals(self._eval("pbale[700IN]"), 0) self.assertEqual(self._eval("pbale[700IN]"), 0)
# check some variant expressions, for coverage # check some variant expressions, for coverage
self.assertEquals(self._eval("crdp[700I%]"), 500) self.assertEqual(self._eval("crdp[700I%]"), 500)
self.assertEquals(self._eval("debp[400A%]"), 500) self.assertEqual(self._eval("debp[400A%]"), 500)
self.assertEquals(self._eval("bal_700IN"), -500) self.assertEqual(self._eval("bal_700IN"), -500)
self.assertEquals(self._eval("bals[700IN]"), -800) self.assertEqual(self._eval("bals[700IN]"), -800)
# unallocated p&l from previous year # unallocated p&l from previous year
self.assertEquals(self._eval("balu[]"), -100) self.assertEqual(self._eval("balu[]"), -100)
# TODO allocate profits, and then... # TODO allocate profits, and then...
@ -247,31 +247,27 @@ class TestAEP(common.TransactionCase):
datetime.date(self.curr_year, 3, 1), datetime.date(self.curr_year, 3, 31) datetime.date(self.curr_year, 3, 1), datetime.date(self.curr_year, 3, 31)
) )
variation = self._eval_by_account_id("balp[]") variation = self._eval_by_account_id("balp[]")
self.assertEquals( self.assertEqual(variation, {self.account_ar.id: 500, self.account_in.id: -500})
variation, {self.account_ar.id: 500, self.account_in.id: -500}
)
variation = self._eval_by_account_id("pbalp[]") variation = self._eval_by_account_id("pbalp[]")
self.assertEquals( self.assertEqual(
variation, {self.account_ar.id: 500, self.account_in.id: AccountingNone} variation, {self.account_ar.id: 500, self.account_in.id: AccountingNone}
) )
variation = self._eval_by_account_id("nbalp[]") variation = self._eval_by_account_id("nbalp[]")
self.assertEquals( self.assertEqual(
variation, {self.account_ar.id: AccountingNone, self.account_in.id: -500} variation, {self.account_ar.id: AccountingNone, self.account_in.id: -500}
) )
variation = self._eval_by_account_id("balp[700IN]") variation = self._eval_by_account_id("balp[700IN]")
self.assertEquals(variation, {self.account_in.id: -500}) self.assertEqual(variation, {self.account_in.id: -500})
variation = self._eval_by_account_id("crdp[700IN] - debp[400AR]") variation = self._eval_by_account_id("crdp[700IN] - debp[400AR]")
self.assertEquals( self.assertEqual(variation, {self.account_ar.id: -500, self.account_in.id: 500})
variation, {self.account_ar.id: -500, self.account_in.id: 500}
)
end = self._eval_by_account_id("bale[]") end = self._eval_by_account_id("bale[]")
self.assertEquals(end, {self.account_ar.id: 900, self.account_in.id: -800}) self.assertEqual(end, {self.account_ar.id: 900, self.account_in.id: -800})
def test_aep_convenience_methods(self): def test_aep_convenience_methods(self):
initial = AEP.get_balances_initial( initial = AEP.get_balances_initial(
self.company, time.strftime("%Y") + "-03-01", "posted" self.company, time.strftime("%Y") + "-03-01", "posted"
) )
self.assertEquals( self.assertEqual(
initial, {self.account_ar.id: (400, 0), self.account_in.id: (0, 300)} initial, {self.account_ar.id: (400, 0), self.account_in.id: (0, 300)}
) )
variation = AEP.get_balances_variation( variation = AEP.get_balances_variation(
@ -280,19 +276,19 @@ class TestAEP(common.TransactionCase):
time.strftime("%Y") + "-03-31", time.strftime("%Y") + "-03-31",
"posted", "posted",
) )
self.assertEquals( self.assertEqual(
variation, {self.account_ar.id: (500, 0), self.account_in.id: (0, 500)} variation, {self.account_ar.id: (500, 0), self.account_in.id: (0, 500)}
) )
end = AEP.get_balances_end( end = AEP.get_balances_end(
self.company, time.strftime("%Y") + "-03-31", "posted" self.company, time.strftime("%Y") + "-03-31", "posted"
) )
self.assertEquals( self.assertEqual(
end, {self.account_ar.id: (900, 0), self.account_in.id: (0, 800)} end, {self.account_ar.id: (900, 0), self.account_in.id: (0, 800)}
) )
unallocated = AEP.get_unallocated_pl( unallocated = AEP.get_unallocated_pl(
self.company, time.strftime("%Y") + "-03-15", "posted" self.company, time.strftime("%Y") + "-03-15", "posted"
) )
self.assertEquals(unallocated, (0, 100)) self.assertEqual(unallocated, (0, 100))
def test_float_is_zero(self): def test_float_is_zero(self):
dp = self.company.currency_id.decimal_places dp = self.company.currency_id.decimal_places
@ -307,7 +303,7 @@ class TestAEP(common.TransactionCase):
initial = AEP.get_balances_initial( initial = AEP.get_balances_initial(
self.company, time.strftime("%Y") + "-01-01", "posted" self.company, time.strftime("%Y") + "-01-01", "posted"
) )
self.assertEquals(initial, {self.account_ar.id: (100.00, 100.01)}) self.assertEqual(initial, {self.account_ar.id: (100.00, 100.01)})
# make initial balance at Jan 1st equal to 0.001 # make initial balance at Jan 1st equal to 0.001
self._create_move( self._create_move(
date=datetime.date(self.prev_year, 12, 1), date=datetime.date(self.prev_year, 12, 1),
@ -319,19 +315,19 @@ class TestAEP(common.TransactionCase):
self.company, time.strftime("%Y") + "-01-01", "posted" self.company, time.strftime("%Y") + "-01-01", "posted"
) )
# epsilon initial balances is reported as empty # epsilon initial balances is reported as empty
self.assertEquals(initial, {}) self.assertEqual(initial, {})
def test_get_account_ids_for_expr(self): def test_get_account_ids_for_expr(self):
self.aep.done_parsing() self.aep.done_parsing()
expr = "balp[700IN]" expr = "balp[700IN]"
account_ids = self.aep.get_account_ids_for_expr(expr) account_ids = self.aep.get_account_ids_for_expr(expr)
self.assertEquals(account_ids, {self.account_in.id}) self.assertEqual(account_ids, {self.account_in.id})
expr = "balp[700%]" expr = "balp[700%]"
account_ids = self.aep.get_account_ids_for_expr(expr) account_ids = self.aep.get_account_ids_for_expr(expr)
self.assertEquals(account_ids, {self.account_in.id}) self.assertEqual(account_ids, {self.account_in.id})
expr = "bali[400%], bale[700%]" # subkpis combined expression expr = "bali[400%], bale[700%]" # subkpis combined expression
account_ids = self.aep.get_account_ids_for_expr(expr) account_ids = self.aep.get_account_ids_for_expr(expr)
self.assertEquals(account_ids, {self.account_in.id, self.account_ar.id}) self.assertEqual(account_ids, {self.account_in.id, self.account_ar.id})
def test_get_aml_domain_for_expr(self): def test_get_aml_domain_for_expr(self):
self.aep.done_parsing() self.aep.done_parsing()
@ -394,7 +390,7 @@ class TestAEP(common.TransactionCase):
self.aep.done_parsing() self.aep.done_parsing()
tax = self.env["account.tax"].create( tax = self.env["account.tax"].create(
dict(name="test tax", active=True, amount=0) dict(name="test tax", active=True, amount=0, company_id=self.company.id)
) )
move = self._create_move( move = self._create_move(
date=datetime.date(self.prev_year, 12, 1), date=datetime.date(self.prev_year, 12, 1),
@ -407,7 +403,7 @@ class TestAEP(common.TransactionCase):
if ml.credit: if ml.credit:
ml.write(dict(tax_ids=[(6, 0, [tax.id])])) ml.write(dict(tax_ids=[(6, 0, [tax.id])]))
tax.active = False tax.active = False
move.post() move._post()
# let's query for december 1st # let's query for december 1st
self._do_queries( self._do_queries(
datetime.date(self.prev_year, 12, 1), datetime.date(self.prev_year, 12, 1) datetime.date(self.prev_year, 12, 1), datetime.date(self.prev_year, 12, 1)

View File

@ -5,14 +5,21 @@ from flectra.tests.common import TransactionCase
class TestAnalyticFilters(TransactionCase): class TestAnalyticFilters(TransactionCase):
def setUp(self):
super(TestAnalyticFilters, self).setUp()
self.aag = self.env["account.analytic.group"].search([], limit=1)
def test_context_with_filters(self): def test_context_with_filters(self):
aaa = self.env["account.analytic.account"].search([], limit=1) aaa = self.env["account.analytic.account"].search([], limit=1)
mri = self.env["mis.report.instance"].new() mri = self.env["mis.report.instance"].new()
mri.analytic_account_id = False mri.analytic_account_id = False
mri.analytic_group_id = False
assert mri._context_with_filters().get("mis_report_filters") == {} assert mri._context_with_filters().get("mis_report_filters") == {}
mri.analytic_account_id = aaa mri.analytic_account_id = aaa
mri.analytic_group_id = self.aag
assert mri._context_with_filters().get("mis_report_filters") == { assert mri._context_with_filters().get("mis_report_filters") == {
"analytic_account_id": {"value": aaa.id, "operator": "="} "analytic_account_id": {"value": aaa.id, "operator": "="},
"analytic_account_id.group_id": {"value": self.aag.id, "operator": "="},
} }
# test _context_with_filters does nothing is a filter is already # test _context_with_filters does nothing is a filter is already
# in the context # in the context
@ -30,6 +37,16 @@ class TestAnalyticFilters(TransactionCase):
) )
assert domain == expected_domain assert domain == expected_domain
def _check_get_filter_descriptions_from_context(
self, mis_report_filters, expected_domain
):
filter_descriptions = (
self.env["mis.report.instance"]
.with_context(mis_report_filters=mis_report_filters)
.get_filter_descriptions_from_context()
)
assert filter_descriptions == expected_domain
def test_get_filter_domain_from_context_1(self): def test_get_filter_domain_from_context_1(self):
# no filter, no domain # no filter, no domain
self._check_get_filter_domain_from_context({}, []) self._check_get_filter_domain_from_context({}, [])
@ -37,11 +54,18 @@ class TestAnalyticFilters(TransactionCase):
self._check_get_filter_domain_from_context( self._check_get_filter_domain_from_context(
{"analytic_account_id": {"value": 1}}, [("analytic_account_id", "=", 1)] {"analytic_account_id": {"value": 1}}, [("analytic_account_id", "=", 1)]
) )
self._check_get_filter_domain_from_context(
{"analytic_group_id": {"value": 1}}, [("analytic_group_id", "=", 1)]
)
# custom operator # custom operator
self._check_get_filter_domain_from_context( self._check_get_filter_domain_from_context(
{"analytic_account_id": {"value": 1, "operator": "!="}}, {"analytic_account_id": {"value": 1, "operator": "!="}},
[("analytic_account_id", "!=", 1)], [("analytic_account_id", "!=", 1)],
) )
self._check_get_filter_domain_from_context(
{"analytic_group_id": {"value": 1, "operator": "!="}},
[("analytic_group_id", "!=", 1)],
)
# any field name works # any field name works
self._check_get_filter_domain_from_context( self._check_get_filter_domain_from_context(
{"some_field": {"value": "x"}}, [("some_field", "=", "x")] {"some_field": {"value": "x"}}, [("some_field", "=", "x")]
@ -53,13 +77,39 @@ class TestAnalyticFilters(TransactionCase):
{"analytic_account_id": {"value": False}}, {"analytic_account_id": {"value": False}},
[("analytic_account_id", "=", False)], [("analytic_account_id", "=", False)],
) )
self._check_get_filter_domain_from_context(
{"analytic_group_id": {"value": False}},
[("analytic_group_id", "=", False)],
)
# Filter from analytic account filter widget # Filter from analytic account filter widget
self._check_get_filter_domain_from_context( self._check_get_filter_domain_from_context(
{"analytic_account_id": {"value": 1, "operator": "all"}}, {"analytic_account_id": {"value": 1, "operator": "all"}},
[("analytic_account_id", "in", [1])], [("analytic_account_id", "in", [1])],
) )
# Filter from analytic group filter widget
self._check_get_filter_domain_from_context(
{"analytic_group_id": {"value": 1, "operator": "all"}},
[("analytic_group_id", "in", [1])],
)
# Filter from analytic tags filter widget # Filter from analytic tags filter widget
self._check_get_filter_domain_from_context( self._check_get_filter_domain_from_context(
{"analytic_tag_ids": {"value": [1, 2], "operator": "all"}}, {"analytic_tag_ids": {"value": [1, 2], "operator": "all"}},
[("analytic_tag_ids", "in", [1]), ("analytic_tag_ids", "in", [2])], [("analytic_tag_ids", "in", [1]), ("analytic_tag_ids", "in", [2])],
) )
def test_get_filter_descriptions_from_context_1(self):
self._check_get_filter_descriptions_from_context(
{"analytic_account_id.group_id": {"value": self.aag.id}},
["Analytic Account Group: %s" % self.aag.display_name],
)
def test_get_additional_move_line_filter_with_analytic_group(self):
instance_period = self.env["mis.report.instance.period"].new(
{
"analytic_group_id": self.aag.id,
}
)
domain = instance_period._get_additional_move_line_filter()
assert domain == [("analytic_account_id.group_id", "=", self.aag.id)]

View File

@ -32,7 +32,7 @@ class TestMisReportInstanceDataSources(common.TransactionCase):
], ],
} }
) )
move.post() move._post()
return move return move
def setUp(self): def setUp(self):

View File

@ -13,6 +13,7 @@ class TestKpiData(SavepointCase):
_name = "mis.kpi.data.test.item" _name = "mis.kpi.data.test.item"
_inherit = "mis.kpi.data" _inherit = "mis.kpi.data"
_description = "MIS Kpi Data test item"
@classmethod @classmethod
def setUpClass(cls): def setUpClass(cls):

View File

@ -314,9 +314,6 @@ class TestMisReportInstance(common.HttpCase):
], ],
) )
) )
self.report_instance.period_ids[1].comparison_column_ids = [
(4, self.report_instance.period_ids[0].id, None)
]
# same for report 2 # same for report 2
self.report_instance_2 = self.env["mis.report.instance"].create( self.report_instance_2 = self.env["mis.report.instance"].create(
dict( dict(
@ -364,13 +361,13 @@ class TestMisReportInstance(common.HttpCase):
vals = [c.val for c in row.iter_cells()] vals = [c.val for c in row.iter_cells()]
if row.kpi.name == "k3": if row.kpi.name == "k3":
# k3 is constant # k3 is constant
self.assertEquals(vals, [AccountingNone, AccountingNone, 1.0]) self.assertEqual(vals, [AccountingNone, AccountingNone, 1.0])
elif row.kpi.name == "k6": elif row.kpi.name == "k6":
# k6 is a string kpi # k6 is a string kpi
self.assertEquals(vals, ["bla", "bla", "blabla"]) self.assertEqual(vals, ["bla", "bla", "blabla"])
elif row.kpi.name == "k7": elif row.kpi.name == "k7":
# k7 references k3 via subkpi names # k7 references k3 via subkpi names
self.assertEquals(vals, [AccountingNone, AccountingNone, 1.0]) self.assertEqual(vals, [AccountingNone, AccountingNone, 1.0])
def test_multi_company_compute(self): def test_multi_company_compute(self):
self.report_instance.write( self.report_instance.write(
@ -474,7 +471,7 @@ class TestMisReportInstance(common.HttpCase):
res = self.report.get_kpis_by_account_id(self.env.ref("base.main_company")) res = self.report.get_kpis_by_account_id(self.env.ref("base.main_company"))
for account_id in account_ids: for account_id in account_ids:
self.assertTrue(account_id in res) self.assertTrue(account_id in res)
self.assertEquals(res[account_id], kpi200) self.assertEqual(res[account_id], kpi200)
def test_kpi_name_get_name_search(self): def test_kpi_name_get_name_search(self):
r = self.env["mis.report.kpi"].name_search("k1") r = self.env["mis.report.kpi"].name_search("k1")
@ -539,13 +536,11 @@ class TestMisReportInstance(common.HttpCase):
for row in matrix.iter_rows(): for row in matrix.iter_rows():
vals = [c.val for c in row.iter_cells()] vals = [c.val for c in row.iter_cells()]
if row.kpi.name == "k1": if row.kpi.name == "k1":
self.assertEquals( self.assertEqual(vals, [AccountingNone, AccountingNone, AccountingNone])
vals, [AccountingNone, AccountingNone, AccountingNone]
)
elif row.kpi.name == "k2": elif row.kpi.name == "k2":
self.assertEquals(vals, [AccountingNone, AccountingNone, None]) self.assertEqual(vals, [AccountingNone, AccountingNone, None])
elif row.kpi.name == "k4": elif row.kpi.name == "k4":
self.assertEquals(vals, [AccountingNone, AccountingNone, 1.0]) self.assertEqual(vals, [AccountingNone, AccountingNone, 1.0])
def test_raise_when_unknown_kpi_value_type(self): def test_raise_when_unknown_kpi_value_type(self):
with self.assertRaises(SubKPIUnknownTypeError): with self.assertRaises(SubKPIUnknownTypeError):

View File

@ -115,7 +115,7 @@ class TestMultiCompanyAEP(common.TransactionCase):
], ],
} }
) )
move.post() move._post()
return move return move
def _do_queries(self, companies, currency, date_from, date_to): def _do_queries(self, companies, currency, date_from, date_to):

View File

@ -37,149 +37,145 @@ class TestRendering(common.TransactionCase):
return r return r
def test_render(self): def test_render(self):
self.assertEquals(u"1", self._render(1)) self.assertEqual(u"1", self._render(1))
self.assertEquals(u"1", self._render(1.1)) self.assertEqual(u"1", self._render(1.1))
self.assertEquals(u"2", self._render(1.6)) self.assertEqual(u"2", self._render(1.6))
self.style.dp_inherit = False self.style.dp_inherit = False
self.style.dp = 2 self.style.dp = 2
self.assertEquals(u"1.00", self._render(1)) self.assertEqual(u"1.00", self._render(1))
self.assertEquals(u"1.10", self._render(1.1)) self.assertEqual(u"1.10", self._render(1.1))
self.assertEquals(u"1.60", self._render(1.6)) self.assertEqual(u"1.60", self._render(1.6))
self.assertEquals(u"1.61", self._render(1.606)) self.assertEqual(u"1.61", self._render(1.606))
self.assertEquals(u"12,345.67", self._render(12345.67)) self.assertEqual(u"12,345.67", self._render(12345.67))
def test_render_negative(self): def test_render_negative(self):
# non breaking hyphen # non breaking hyphen
self.assertEquals(u"\u20111", self._render(-1)) self.assertEqual(u"\u20111", self._render(-1))
def test_render_zero(self): def test_render_zero(self):
self.assertEquals(u"0", self._render(0)) self.assertEqual(u"0", self._render(0))
self.assertEquals(u"", self._render(None)) self.assertEqual(u"", self._render(None))
self.assertEquals(u"", self._render(AccountingNone)) self.assertEqual(u"", self._render(AccountingNone))
def test_render_suffix(self): def test_render_suffix(self):
self.style.suffix_inherit = False self.style.suffix_inherit = False
self.style.suffix = u"" self.style.suffix = u""
self.assertEquals(u"1\xa0", self._render(1)) self.assertEqual(u"1\xa0", self._render(1))
self.style.suffix = u"k€" self.style.suffix = u"k€"
self.style.divider_inherit = False self.style.divider_inherit = False
self.style.divider = "1e3" self.style.divider = "1e3"
self.assertEquals(u"1\xa0k€", self._render(1000)) self.assertEqual(u"1\xa0k€", self._render(1000))
def test_render_prefix(self): def test_render_prefix(self):
self.style.prefix_inherit = False self.style.prefix_inherit = False
self.style.prefix = u"$" self.style.prefix = u"$"
self.assertEquals(u"$\xa01", self._render(1)) self.assertEqual(u"$\xa01", self._render(1))
self.style.prefix = u"k$" self.style.prefix = u"k$"
self.style.divider_inherit = False self.style.divider_inherit = False
self.style.divider = "1e3" self.style.divider = "1e3"
self.assertEquals(u"k$\xa01", self._render(1000)) self.assertEqual(u"k$\xa01", self._render(1000))
def test_render_divider(self): def test_render_divider(self):
self.style.divider_inherit = False self.style.divider_inherit = False
self.style.divider = "1e3" self.style.divider = "1e3"
self.style.dp_inherit = False self.style.dp_inherit = False
self.style.dp = 0 self.style.dp = 0
self.assertEquals(u"1", self._render(1000)) self.assertEqual(u"1", self._render(1000))
self.style.divider = "1e6" self.style.divider = "1e6"
self.style.dp = 3 self.style.dp = 3
self.assertEquals(u"0.001", self._render(1000)) self.assertEqual(u"0.001", self._render(1000))
self.style.divider = "1e-3" self.style.divider = "1e-3"
self.style.dp = 0 self.style.dp = 0
self.assertEquals(u"1,000", self._render(1)) self.assertEqual(u"1,000", self._render(1))
self.style.divider = "1e-6" self.style.divider = "1e-6"
self.style.dp = 0 self.style.dp = 0
self.assertEquals(u"1,000,000", self._render(1)) self.assertEqual(u"1,000,000", self._render(1))
def test_render_pct(self): def test_render_pct(self):
self.assertEquals(u"100\xa0%", self._render(1, TYPE_PCT)) self.assertEqual(u"100\xa0%", self._render(1, TYPE_PCT))
self.assertEquals(u"50\xa0%", self._render(0.5, TYPE_PCT)) self.assertEqual(u"50\xa0%", self._render(0.5, TYPE_PCT))
self.style.dp_inherit = False self.style.dp_inherit = False
self.style.dp = 2 self.style.dp = 2
self.assertEquals(u"51.23\xa0%", self._render(0.5123, TYPE_PCT)) self.assertEqual(u"51.23\xa0%", self._render(0.5123, TYPE_PCT))
def test_render_string(self): def test_render_string(self):
self.assertEquals(u"", self._render("", TYPE_STR)) self.assertEqual(u"", self._render("", TYPE_STR))
self.assertEquals(u"", self._render(None, TYPE_STR)) self.assertEqual(u"", self._render(None, TYPE_STR))
self.assertEquals(u"abcdé", self._render(u"abcdé", TYPE_STR)) self.assertEqual(u"abcdé", self._render(u"abcdé", TYPE_STR))
def test_compare_num_pct(self): def test_compare_num_pct(self):
self.assertEquals((1.0, u"+100.0\xa0%"), self._compare_and_render(100, 50)) self.assertEqual((1.0, u"+100.0\xa0%"), self._compare_and_render(100, 50))
self.assertEquals((0.5, u"+50.0\xa0%"), self._compare_and_render(75, 50)) self.assertEqual((0.5, u"+50.0\xa0%"), self._compare_and_render(75, 50))
self.assertEquals((0.5, u"+50.0\xa0%"), self._compare_and_render(-25, -50)) self.assertEqual((0.5, u"+50.0\xa0%"), self._compare_and_render(-25, -50))
self.assertEquals((1.0, u"+100.0\xa0%"), self._compare_and_render(0, -50)) self.assertEqual((1.0, u"+100.0\xa0%"), self._compare_and_render(0, -50))
self.assertEquals((2.0, u"+200.0\xa0%"), self._compare_and_render(50, -50)) self.assertEqual((2.0, u"+200.0\xa0%"), self._compare_and_render(50, -50))
self.assertEquals((-0.5, u"\u201150.0\xa0%"), self._compare_and_render(25, 50)) self.assertEqual((-0.5, u"\u201150.0\xa0%"), self._compare_and_render(25, 50))
self.assertEquals((-1.0, u"\u2011100.0\xa0%"), self._compare_and_render(0, 50)) self.assertEqual((-1.0, u"\u2011100.0\xa0%"), self._compare_and_render(0, 50))
self.assertEquals( self.assertEqual((-2.0, u"\u2011200.0\xa0%"), self._compare_and_render(-50, 50))
(-2.0, u"\u2011200.0\xa0%"), self._compare_and_render(-50, 50) self.assertEqual((-0.5, u"\u201150.0\xa0%"), self._compare_and_render(-75, -50))
) self.assertEqual(
self.assertEquals(
(-0.5, u"\u201150.0\xa0%"), self._compare_and_render(-75, -50)
)
self.assertEquals(
(AccountingNone, u""), self._compare_and_render(50, AccountingNone) (AccountingNone, u""), self._compare_and_render(50, AccountingNone)
) )
self.assertEquals((AccountingNone, u""), self._compare_and_render(50, None)) self.assertEqual((AccountingNone, u""), self._compare_and_render(50, None))
self.assertEquals((AccountingNone, u""), self._compare_and_render(50, 50)) self.assertEqual((AccountingNone, u""), self._compare_and_render(50, 50))
self.assertEquals((0.002, u"+0.2\xa0%"), self._compare_and_render(50.1, 50)) self.assertEqual((0.002, u"+0.2\xa0%"), self._compare_and_render(50.1, 50))
self.assertEquals((AccountingNone, u""), self._compare_and_render(50.01, 50)) self.assertEqual((AccountingNone, u""), self._compare_and_render(50.01, 50))
self.assertEquals( self.assertEqual(
(-1.0, u"\u2011100.0\xa0%"), self._compare_and_render(AccountingNone, 50) (-1.0, u"\u2011100.0\xa0%"), self._compare_and_render(AccountingNone, 50)
) )
self.assertEquals( self.assertEqual(
(-1.0, u"\u2011100.0\xa0%"), self._compare_and_render(None, 50) (-1.0, u"\u2011100.0\xa0%"), self._compare_and_render(None, 50)
) )
self.assertEquals( self.assertEqual(
(AccountingNone, u""), self._compare_and_render(DataError("#ERR", "."), 1) (AccountingNone, u""), self._compare_and_render(DataError("#ERR", "."), 1)
) )
self.assertEquals( self.assertEqual(
(AccountingNone, u""), self._compare_and_render(1, DataError("#ERR", ".")) (AccountingNone, u""), self._compare_and_render(1, DataError("#ERR", "."))
) )
def test_compare_num_diff(self): def test_compare_num_diff(self):
self.assertEquals( self.assertEqual(
(25, u"+25"), self._compare_and_render(75, 50, TYPE_NUM, CMP_DIFF) (25, u"+25"), self._compare_and_render(75, 50, TYPE_NUM, CMP_DIFF)
) )
self.assertEquals( self.assertEqual(
(-25, u"\u201125"), self._compare_and_render(25, 50, TYPE_NUM, CMP_DIFF) (-25, u"\u201125"), self._compare_and_render(25, 50, TYPE_NUM, CMP_DIFF)
) )
self.style.suffix_inherit = False self.style.suffix_inherit = False
self.style.suffix = u"" self.style.suffix = u""
self.assertEquals( self.assertEqual(
(-25, u"\u201125\xa0"), (-25, u"\u201125\xa0"),
self._compare_and_render(25, 50, TYPE_NUM, CMP_DIFF), self._compare_and_render(25, 50, TYPE_NUM, CMP_DIFF),
) )
self.style.suffix = u"" self.style.suffix = u""
self.assertEquals( self.assertEqual(
(50.0, u"+50"), (50.0, u"+50"),
self._compare_and_render(50, AccountingNone, TYPE_NUM, CMP_DIFF), self._compare_and_render(50, AccountingNone, TYPE_NUM, CMP_DIFF),
) )
self.assertEquals( self.assertEqual(
(50.0, u"+50"), self._compare_and_render(50, None, TYPE_NUM, CMP_DIFF) (50.0, u"+50"), self._compare_and_render(50, None, TYPE_NUM, CMP_DIFF)
) )
self.assertEquals( self.assertEqual(
(-50.0, u"\u201150"), (-50.0, u"\u201150"),
self._compare_and_render(AccountingNone, 50, TYPE_NUM, CMP_DIFF), self._compare_and_render(AccountingNone, 50, TYPE_NUM, CMP_DIFF),
) )
self.assertEquals( self.assertEqual(
(-50.0, u"\u201150"), self._compare_and_render(None, 50, TYPE_NUM, CMP_DIFF) (-50.0, u"\u201150"), self._compare_and_render(None, 50, TYPE_NUM, CMP_DIFF)
) )
self.style.dp_inherit = False self.style.dp_inherit = False
self.style.dp = 2 self.style.dp = 2
self.assertEquals( self.assertEqual(
(0.1, u"+0.10"), self._compare_and_render(1.1, 1.0, TYPE_NUM, CMP_DIFF) (0.1, u"+0.10"), self._compare_and_render(1.1, 1.0, TYPE_NUM, CMP_DIFF)
) )
self.assertEquals( self.assertEqual(
(AccountingNone, u""), (AccountingNone, u""),
self._compare_and_render(1.001, 1.0, TYPE_NUM, CMP_DIFF), self._compare_and_render(1.001, 1.0, TYPE_NUM, CMP_DIFF),
) )
def test_compare_pct(self): def test_compare_pct(self):
self.assertEquals( self.assertEqual(
(0.25, u"+25\xa0pp"), self._compare_and_render(0.75, 0.50, TYPE_PCT) (0.25, u"+25\xa0pp"), self._compare_and_render(0.75, 0.50, TYPE_PCT)
) )
self.assertEquals( self.assertEqual(
(AccountingNone, u""), self._compare_and_render(0.751, 0.750, TYPE_PCT) (AccountingNone, u""), self._compare_and_render(0.751, 0.750, TYPE_PCT)
) )
@ -188,16 +184,16 @@ class TestRendering(common.TransactionCase):
result = self.style_obj.compare_and_render( result = self.style_obj.compare_and_render(
self.lang, style_props, TYPE_PCT, CMP_DIFF, 0.75, 0.50 self.lang, style_props, TYPE_PCT, CMP_DIFF, 0.75, 0.50
) )
self.assertEquals(result[3], TYPE_NUM) self.assertEqual(result[3], TYPE_NUM)
def test_merge(self): def test_merge(self):
self.style.color = "#FF0000" self.style.color = "#FF0000"
self.style.color_inherit = False self.style.color_inherit = False
style_props = self.style_obj.merge([self.style]) style_props = self.style_obj.merge([self.style])
self.assertEquals(style_props, {"color": "#FF0000"}) self.assertEqual(style_props, {"color": "#FF0000"})
style_dict = {"color": "#00FF00", "dp": 0} style_dict = {"color": "#00FF00", "dp": 0}
style_props = self.style_obj.merge([self.style, style_dict]) style_props = self.style_obj.merge([self.style, style_dict])
self.assertEquals(style_props, {"color": "#00FF00", "dp": 0}) self.assertEqual(style_props, {"color": "#00FF00", "dp": 0})
style2 = self.style_obj.create( style2 = self.style_obj.create(
dict( dict(
name="teststyle2", name="teststyle2",
@ -208,7 +204,7 @@ class TestRendering(common.TransactionCase):
) )
) )
style_props = self.style_obj.merge([self.style, style_dict, style2]) style_props = self.style_obj.merge([self.style, style_dict, style2])
self.assertEquals(style_props, {"color": "#00FF00", "dp": 1}) self.assertEqual(style_props, {"color": "#00FF00", "dp": 1})
def test_css(self): def test_css(self):
self.style.color_inherit = False self.style.color_inherit = False
@ -229,7 +225,7 @@ class TestRendering(common.TransactionCase):
self.style.indent_level = 2 self.style.indent_level = 2
style_props = self.style_obj.merge([self.style]) style_props = self.style_obj.merge([self.style])
css = self.style_obj.to_css_style(style_props) css = self.style_obj.to_css_style(style_props)
self.assertEquals( self.assertEqual(
css, css,
"font-style: italic; " "font-style: italic; "
"font-weight: bold; " "font-weight: bold; "
@ -239,7 +235,7 @@ class TestRendering(common.TransactionCase):
"text-indent: 2em", "text-indent: 2em",
) )
css = self.style_obj.to_css_style(style_props, no_indent=True) css = self.style_obj.to_css_style(style_props, no_indent=True)
self.assertEquals( self.assertEqual(
css, css,
"font-style: italic; " "font-style: italic; "
"font-weight: bold; " "font-weight: bold; "
@ -269,7 +265,7 @@ class TestRendering(common.TransactionCase):
self.style.indent_level = 2 self.style.indent_level = 2
style_props = self.style_obj.merge([self.style]) style_props = self.style_obj.merge([self.style])
xlsx = self.style_obj.to_xlsx_style(TYPE_NUM, style_props) xlsx = self.style_obj.to_xlsx_style(TYPE_NUM, style_props)
self.assertEquals( self.assertEqual(
xlsx, xlsx,
{ {
"italic": True, "italic": True,
@ -282,7 +278,7 @@ class TestRendering(common.TransactionCase):
}, },
) )
xlsx = self.style_obj.to_xlsx_style(TYPE_NUM, style_props, no_indent=True) xlsx = self.style_obj.to_xlsx_style(TYPE_NUM, style_props, no_indent=True)
self.assertEquals( self.assertEqual(
xlsx, xlsx,
{ {
"italic": True, "italic": True,
@ -295,7 +291,7 @@ class TestRendering(common.TransactionCase):
) )
# percent type ignore prefix and suffix # percent type ignore prefix and suffix
xlsx = self.style_obj.to_xlsx_style(TYPE_PCT, style_props, no_indent=True) xlsx = self.style_obj.to_xlsx_style(TYPE_PCT, style_props, no_indent=True)
self.assertEquals( self.assertEqual(
xlsx, xlsx,
{ {
"italic": True, "italic": True,
@ -309,7 +305,7 @@ class TestRendering(common.TransactionCase):
# str type have no num_format style # str type have no num_format style
xlsx = self.style_obj.to_xlsx_style(TYPE_STR, style_props, no_indent=True) xlsx = self.style_obj.to_xlsx_style(TYPE_STR, style_props, no_indent=True)
self.assertEquals( self.assertEqual(
xlsx, xlsx,
{ {
"italic": True, "italic": True,

View File

@ -179,6 +179,10 @@
name="analytic_account_id" name="analytic_account_id"
groups="analytic.group_analytic_accounting" groups="analytic.group_analytic_accounting"
/> />
<field
name="analytic_group_id"
groups="analytic.group_analytic_accounting"
/>
<field <field
name="analytic_tag_ids" name="analytic_tag_ids"
groups="analytic.group_analytic_tags" groups="analytic.group_analytic_tags"
@ -394,6 +398,7 @@
</group> </group>
<group string="Filters"> <group string="Filters">
<field name="analytic_account_id" /> <field name="analytic_account_id" />
<field name="analytic_group_id" />
<field name="analytic_tag_ids" widget="many2many_tags" /> <field name="analytic_tag_ids" widget="many2many_tags" />
</group> </group>
</form> </form>

View File

@ -14,13 +14,13 @@ MIS Builder Budget
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3 :alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github
:target: https://github.com/OCA/mis-builder/tree/13.0/mis_builder_budget :target: https://github.com/OCA/mis-builder/tree/14.0/mis_builder_budget
:alt: OCA/mis-builder :alt: OCA/mis-builder
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/mis-builder-13-0/mis-builder-13-0-mis_builder_budget :target: https://translation.odoo-community.org/projects/mis-builder-14-0/mis-builder-14-0-mis_builder_budget
:alt: Translate me on Weblate :alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/248/13.0 :target: https://runbot.odoo-community.org/runbot/248/14.0
:alt: Try me on Runbot :alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5| |badge1| |badge2| |badge3| |badge4| |badge5|
@ -85,6 +85,14 @@ be found on GitHub.
Changelog Changelog
========= =========
14.0.3.5.1 (2021-04-06)
~~~~~~~~~~~~~~~~~~~~~~~
**Bugfixes**
- Fix incorrect budget by account multi company security rules. (`#347 <https://github.com/OCA/mis-builder/issues/347>`_)
13.0.3.5.0 (2020-03-28) 13.0.3.5.0 (2020-03-28)
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~
@ -157,7 +165,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/mis-builder/issues>`_. Bugs are tracked on `GitHub Issues <https://github.com/OCA/mis-builder/issues>`_.
In case of trouble, please check there if your issue has already been reported. In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder_budget%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. `feedback <https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder_budget%0Aversion:%2014.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. Do not contact contributors directly about support or help with technical issues.
@ -198,6 +206,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-sbidoul| |maintainer-sbidoul|
This module is part of the `OCA/mis-builder <https://github.com/OCA/mis-builder/tree/13.0/mis_builder_budget>`_ project on GitHub. This module is part of the `OCA/mis-builder <https://github.com/OCA/mis-builder/tree/14.0/mis_builder_budget>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -5,7 +5,7 @@
"name": "MIS Builder Budget", "name": "MIS Builder Budget",
"summary": """ "summary": """
Create budgets for MIS reports""", Create budgets for MIS reports""",
"version": "2.0.3.5.0", "version": "2.0.3.5.1",
"license": "AGPL-3", "license": "AGPL-3",
"author": "ACSONE SA/NV, " "Odoo Community Association (OCA)", "author": "ACSONE SA/NV, " "Odoo Community Association (OCA)",
"website": "https://gitlab.com/flectra-community/mis-builder", "website": "https://gitlab.com/flectra-community/mis-builder",
@ -22,7 +22,7 @@
"security/mis_budget_by_account.xml", "security/mis_budget_by_account.xml",
"views/mis_budget_by_account.xml", "views/mis_budget_by_account.xml",
], ],
"installable": False, "installable": True,
"development_status": "Production/Stable", "development_status": "Production/Stable",
"maintainers": ["sbidoul"], "maintainers": ["sbidoul"],
} }

View File

@ -4,7 +4,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 13.0\n" "Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -225,6 +225,10 @@ msgstr ""
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_by_account_item__display_name #: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_by_account_item__display_name
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item__display_name #: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item__display_name
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item_abstract__display_name #: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item_abstract__display_name
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_instance__display_name
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_instance_period__display_name
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_kpi__display_name
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_kpi_expression__display_name
msgid "Display Name" msgid "Display Name"
msgstr "" msgstr ""
@ -279,6 +283,10 @@ msgstr ""
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_by_account_item__id #: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_by_account_item__id
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item__id #: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item__id
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item_abstract__id #: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item_abstract__id
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_instance__id
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_instance_period__id
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_kpi__id
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_kpi_expression__id
msgid "ID" msgid "ID"
msgstr "" msgstr ""
@ -332,6 +340,10 @@ msgstr ""
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_by_account_item____last_update #: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_by_account_item____last_update
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item____last_update #: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item____last_update
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item_abstract____last_update #: model:ir.model.fields,field_description:mis_builder_budget.field_mis_budget_item_abstract____last_update
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_instance____last_update
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_instance_period____last_update
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_kpi____last_update
#: model:ir.model.fields,field_description:mis_builder_budget.field_mis_report_kpi_expression____last_update
msgid "Last Modified on" msgid "Last Modified on"
msgstr "" msgstr ""

View File

@ -10,16 +10,16 @@ class MisBudgetAbstract(models.AbstractModel):
_description = "MIS Budget (Abstract Base Class)" _description = "MIS Budget (Abstract Base Class)"
_inherit = ["mail.thread"] _inherit = ["mail.thread"]
name = fields.Char(required=True, track_visibility="onchange") name = fields.Char(required=True, tracking=True)
description = fields.Char(track_visibility="onchange") description = fields.Char(tracking=True)
date_range_id = fields.Many2one(comodel_name="date.range", string="Date range") date_range_id = fields.Many2one(comodel_name="date.range", string="Date range")
date_from = fields.Date(required=True, string="From", track_visibility="onchange") date_from = fields.Date(required=True, string="From", tracking=True)
date_to = fields.Date(required=True, string="To", track_visibility="onchange") date_to = fields.Date(required=True, string="To", tracking=True)
state = fields.Selection( state = fields.Selection(
[("draft", "Draft"), ("confirmed", "Confirmed"), ("cancelled", "Cancelled")], [("draft", "Draft"), ("confirmed", "Confirmed"), ("cancelled", "Cancelled")],
required=True, required=True,
default="draft", default="draft",
track_visibility="onchange", tracking=True,
) )
company_id = fields.Many2one( company_id = fields.Many2one(
comodel_name="res.company", comodel_name="res.company",

View File

@ -15,7 +15,11 @@ class MisReportInstancePeriod(models.Model):
selection_add=[ selection_add=[
(SRC_MIS_BUDGET, "MIS Budget by KPI"), (SRC_MIS_BUDGET, "MIS Budget by KPI"),
(SRC_MIS_BUDGET_BY_ACCOUNT, "MIS Budget by Account"), (SRC_MIS_BUDGET_BY_ACCOUNT, "MIS Budget by Account"),
] ],
ondelete={
SRC_MIS_BUDGET: "cascade",
SRC_MIS_BUDGET_BY_ACCOUNT: "cascade",
},
) )
source_mis_budget_id = fields.Many2one( source_mis_budget_id = fields.Many2one(
comodel_name="mis.budget", string="Budget by KPI" comodel_name="mis.budget", string="Budget by KPI"

View File

@ -24,7 +24,7 @@
<field name="name">mis.budget.by.account multi company</field> <field name="name">mis.budget.by.account multi company</field>
<field name="model_id" ref="model_mis_budget_by_account" /> <field name="model_id" ref="model_mis_budget_by_account" />
<field name="domain_force"> <field name="domain_force">
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] ['|',('company_id','=',False),('company_id', 'in', company_ids)]
</field> </field>
</record> </record>
</flectra> </flectra>

View File

@ -24,7 +24,7 @@
<field name="name">mis.budget.by.account.item multi company</field> <field name="name">mis.budget.by.account.item multi company</field>
<field name="model_id" ref="model_mis_budget_by_account_item" /> <field name="model_id" ref="model_mis_budget_by_account_item" />
<field name="domain_force"> <field name="domain_force">
['|',('budget_id.company_id','=',False),('budget_id.company_id','child_of',[user.company_id.id])] ['|',('budget_id.company_id','=',False),('budget_id.company_id','in',company_ids)]
</field> </field>
</record> </record>
</flectra> </flectra>

View File

@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !! !! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !! !! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.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/mis-builder/tree/13.0/mis_builder_budget"><img alt="OCA/mis-builder" src="https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/mis-builder-13-0/mis-builder-13-0-mis_builder_budget"><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/248/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p> <p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.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/mis-builder/tree/14.0/mis_builder_budget"><img alt="OCA/mis-builder" src="https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/mis-builder-14-0/mis-builder-14-0-mis_builder_budget"><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/248/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>Create budgets for MIS reports.</p> <p>Create budgets for MIS reports.</p>
<p>This module lets you create budgets for any MIS report. Several budgets can be <p>This module lets you create budgets for any MIS report. Several budgets can be
created for a given report template (ie one budget per year). Budget figures created for a given report template (ie one budget per year). Budget figures
@ -377,31 +377,32 @@ show the budgeted values for each KPI, adjusted for the period of the column.</p
<p><strong>Table of contents</strong></p> <p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents"> <div class="contents local topic" id="contents">
<ul class="simple"> <ul class="simple">
<li><a class="reference internal" href="#usage" id="id17">Usage</a></li> <li><a class="reference internal" href="#usage" id="id19">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="id18">Known issues / Roadmap</a></li> <li><a class="reference internal" href="#known-issues-roadmap" id="id20">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#changelog" id="id19">Changelog</a><ul> <li><a class="reference internal" href="#changelog" id="id21">Changelog</a><ul>
<li><a class="reference internal" href="#id1" id="id20">13.0.3.5.0 (2020-03-28)</a></li> <li><a class="reference internal" href="#id1" id="id22">14.0.3.5.1 (2021-04-06)</a></li>
<li><a class="reference internal" href="#id3" id="id21">13.0.3.4.0 (2020-01-??)</a></li> <li><a class="reference internal" href="#id3" id="id23">13.0.3.5.0 (2020-03-28)</a></li>
<li><a class="reference internal" href="#id4" id="id22">12.0.3.4.0 (2019-10-26)</a></li> <li><a class="reference internal" href="#id5" id="id24">13.0.3.4.0 (2020-01-??)</a></li>
<li><a class="reference internal" href="#id6" id="id23">11.0.3.3.0 (2019-01-13)</a></li> <li><a class="reference internal" href="#id6" id="id25">12.0.3.4.0 (2019-10-26)</a></li>
<li><a class="reference internal" href="#id8" id="id24">11.0.3.2.1 (2018-06-30)</a></li> <li><a class="reference internal" href="#id8" id="id26">11.0.3.3.0 (2019-01-13)</a></li>
<li><a class="reference internal" href="#id10" id="id25">11.0.3.2.0 (2018-05-02)</a></li> <li><a class="reference internal" href="#id10" id="id27">11.0.3.2.1 (2018-06-30)</a></li>
<li><a class="reference internal" href="#id12" id="id26">11.0.3.1.1 (2018-02-04)</a></li> <li><a class="reference internal" href="#id12" id="id28">11.0.3.2.0 (2018-05-02)</a></li>
<li><a class="reference internal" href="#id14" id="id27">10.0.3.1.0 (2017-11-14)</a></li> <li><a class="reference internal" href="#id14" id="id29">11.0.3.1.1 (2018-02-04)</a></li>
<li><a class="reference internal" href="#id16" id="id28">10.0.1.1.1 (2017-10-01)</a></li> <li><a class="reference internal" href="#id16" id="id30">10.0.3.1.0 (2017-11-14)</a></li>
<li><a class="reference internal" href="#id18" id="id31">10.0.1.1.1 (2017-10-01)</a></li>
</ul> </ul>
</li> </li>
<li><a class="reference internal" href="#bug-tracker" id="id29">Bug Tracker</a></li> <li><a class="reference internal" href="#bug-tracker" id="id32">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id30">Credits</a><ul> <li><a class="reference internal" href="#credits" id="id33">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id31">Authors</a></li> <li><a class="reference internal" href="#authors" id="id34">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id32">Contributors</a></li> <li><a class="reference internal" href="#contributors" id="id35">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id33">Maintainers</a></li> <li><a class="reference internal" href="#maintainers" id="id36">Maintainers</a></li>
</ul> </ul>
</li> </li>
</ul> </ul>
</div> </div>
<div class="section" id="usage"> <div class="section" id="usage">
<h1><a class="toc-backref" href="#id17">Usage</a></h1> <h1><a class="toc-backref" href="#id19">Usage</a></h1>
<p>There are two ways to use this module: create budgets by KPI or budgets by <p>There are two ways to use this module: create budgets by KPI or budgets by
GL accounts. Currently, the two methods cannot be combined in the same budget.</p> GL accounts. Currently, the two methods cannot be combined in the same budget.</p>
<p><strong>Budget by KPIs</strong></p> <p><strong>Budget by KPIs</strong></p>
@ -430,15 +431,22 @@ to the reporting period when displayed. Columns can be compared by adding a
column of type “comparison” or “sum”.</p> column of type “comparison” or “sum”.</p>
</div> </div>
<div class="section" id="known-issues-roadmap"> <div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#id18">Known issues / Roadmap</a></h1> <h1><a class="toc-backref" href="#id20">Known issues / Roadmap</a></h1>
<p>The mis_builder <a class="reference external" href="https://github.com/OCA/mis-builder/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement">roadmap</a> <p>The mis_builder <a class="reference external" href="https://github.com/OCA/mis-builder/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement">roadmap</a>
and <a class="reference external" href="https://github.com/OCA/mis-builder/issues?q=is%3Aopen+is%3Aissue+label%3Abug">known issues</a> can and <a class="reference external" href="https://github.com/OCA/mis-builder/issues?q=is%3Aopen+is%3Aissue+label%3Abug">known issues</a> can
be found on GitHub.</p> be found on GitHub.</p>
</div> </div>
<div class="section" id="changelog"> <div class="section" id="changelog">
<h1><a class="toc-backref" href="#id19">Changelog</a></h1> <h1><a class="toc-backref" href="#id21">Changelog</a></h1>
<div class="section" id="id1"> <div class="section" id="id1">
<h2><a class="toc-backref" href="#id20">13.0.3.5.0 (2020-03-28)</a></h2> <h2><a class="toc-backref" href="#id22">14.0.3.5.1 (2021-04-06)</a></h2>
<p><strong>Bugfixes</strong></p>
<ul class="simple">
<li>Fix incorrect budget by account multi company security rules. (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/347">#347</a>)</li>
</ul>
</div>
<div class="section" id="id3">
<h2><a class="toc-backref" href="#id23">13.0.3.5.0 (2020-03-28)</a></h2>
<p><strong>Features</strong></p> <p><strong>Features</strong></p>
<ul class="simple"> <ul class="simple">
<li>Budget by GL account: allow budgeting by GL account in addition to the <li>Budget by GL account: allow budgeting by GL account in addition to the
@ -447,12 +455,12 @@ date, and when reporting a pro-rata temporis adjustment is made to match
the reporting period. (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/259">#259</a>)</li> the reporting period. (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/259">#259</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id3"> <div class="section" id="id5">
<h2><a class="toc-backref" href="#id21">13.0.3.4.0 (2020-01-??)</a></h2> <h2><a class="toc-backref" href="#id24">13.0.3.4.0 (2020-01-??)</a></h2>
<p>Migration to odoo 13.0.</p> <p>Migration to odoo 13.0.</p>
</div> </div>
<div class="section" id="id4"> <div class="section" id="id6">
<h2><a class="toc-backref" href="#id22">12.0.3.4.0 (2019-10-26)</a></h2> <h2><a class="toc-backref" href="#id25">12.0.3.4.0 (2019-10-26)</a></h2>
<p><strong>Bugfixes</strong></p> <p><strong>Bugfixes</strong></p>
<ul class="simple"> <ul class="simple">
<li>Consider analytic tags too when detecting overlapping budget items. <li>Consider analytic tags too when detecting overlapping budget items.
@ -460,64 +468,64 @@ Previously only analytic account was considered, and this overlap detection
mechanism was overlooked when analytic tags were added to budget items. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/241">#241</a>)</li> mechanism was overlooked when analytic tags were added to budget items. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/241">#241</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id6"> <div class="section" id="id8">
<h2><a class="toc-backref" href="#id23">11.0.3.3.0 (2019-01-13)</a></h2> <h2><a class="toc-backref" href="#id26">11.0.3.3.0 (2019-01-13)</a></h2>
<p><strong>Features</strong></p> <p><strong>Features</strong></p>
<ul class="simple"> <ul class="simple">
<li>Support analytic filters. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/15">#15</a>)</li> <li>Support analytic filters. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/15">#15</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id8"> <div class="section" id="id10">
<h2><a class="toc-backref" href="#id24">11.0.3.2.1 (2018-06-30)</a></h2> <h2><a class="toc-backref" href="#id27">11.0.3.2.1 (2018-06-30)</a></h2>
<ul class="simple"> <ul class="simple">
<li>[IMP] Support analytic tags in budget items <li>[IMP] Support analytic tags in budget items
(<a class="reference external" href="https://github.com/OCA/mis-builder/pull/100">#100</a>)</li> (<a class="reference external" href="https://github.com/OCA/mis-builder/pull/100">#100</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id10"> <div class="section" id="id12">
<h2><a class="toc-backref" href="#id25">11.0.3.2.0 (2018-05-02)</a></h2> <h2><a class="toc-backref" href="#id28">11.0.3.2.0 (2018-05-02)</a></h2>
<ul class="simple"> <ul class="simple">
<li>[FIX] #NAME error in out-of-order computation of non <li>[FIX] #NAME error in out-of-order computation of non
budgetable items in budget columns budgetable items in budget columns
(<a class="reference external" href="https://github.com/OCA/mis-builder/pull/69">#68</a>)</li> (<a class="reference external" href="https://github.com/OCA/mis-builder/pull/69">#68</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id12"> <div class="section" id="id14">
<h2><a class="toc-backref" href="#id26">11.0.3.1.1 (2018-02-04)</a></h2> <h2><a class="toc-backref" href="#id29">11.0.3.1.1 (2018-02-04)</a></h2>
<p>Migration to Odoo 11. No new feature. <p>Migration to Odoo 11. No new feature.
(<a class="reference external" href="https://github.com/OCA/mis-builder/pull/67">#67</a>)</p> (<a class="reference external" href="https://github.com/OCA/mis-builder/pull/67">#67</a>)</p>
</div> </div>
<div class="section" id="id14"> <div class="section" id="id16">
<h2><a class="toc-backref" href="#id27">10.0.3.1.0 (2017-11-14)</a></h2> <h2><a class="toc-backref" href="#id30">10.0.3.1.0 (2017-11-14)</a></h2>
<p>New features:</p> <p>New features:</p>
<ul class="simple"> <ul class="simple">
<li>[ADD] multi-company record rule for MIS Budgets <li>[ADD] multi-company record rule for MIS Budgets
(<a class="reference external" href="https://github.com/OCA/mis-builder/issues/27">#27</a>)</li> (<a class="reference external" href="https://github.com/OCA/mis-builder/issues/27">#27</a>)</li>
</ul> </ul>
</div> </div>
<div class="section" id="id16"> <div class="section" id="id18">
<h2><a class="toc-backref" href="#id28">10.0.1.1.1 (2017-10-01)</a></h2> <h2><a class="toc-backref" href="#id31">10.0.1.1.1 (2017-10-01)</a></h2>
<p>First version.</p> <p>First version.</p>
</div> </div>
</div> </div>
<div class="section" id="bug-tracker"> <div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id29">Bug Tracker</a></h1> <h1><a class="toc-backref" href="#id32">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/mis-builder/issues">GitHub Issues</a>. <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/mis-builder/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported. In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder_budget%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p> <a class="reference external" href="https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder_budget%0Aversion:%2014.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> <p>Do not contact contributors directly about support or help with technical issues.</p>
</div> </div>
<div class="section" id="credits"> <div class="section" id="credits">
<h1><a class="toc-backref" href="#id30">Credits</a></h1> <h1><a class="toc-backref" href="#id33">Credits</a></h1>
<div class="section" id="authors"> <div class="section" id="authors">
<h2><a class="toc-backref" href="#id31">Authors</a></h2> <h2><a class="toc-backref" href="#id34">Authors</a></h2>
<ul class="simple"> <ul class="simple">
<li>ACSONE SA/NV</li> <li>ACSONE SA/NV</li>
</ul> </ul>
</div> </div>
<div class="section" id="contributors"> <div class="section" id="contributors">
<h2><a class="toc-backref" href="#id32">Contributors</a></h2> <h2><a class="toc-backref" href="#id35">Contributors</a></h2>
<ul class="simple"> <ul class="simple">
<li>Stéphane Bidoul &lt;<a class="reference external" href="mailto:stephane.bidoul&#64;acsone.eu">stephane.bidoul&#64;acsone.eu</a>&gt;</li> <li>Stéphane Bidoul &lt;<a class="reference external" href="mailto:stephane.bidoul&#64;acsone.eu">stephane.bidoul&#64;acsone.eu</a>&gt;</li>
<li>Adrien Peiffer &lt;<a class="reference external" href="mailto:adrien.peiffer&#64;acsone.eu">adrien.peiffer&#64;acsone.eu</a>&gt;</li> <li>Adrien Peiffer &lt;<a class="reference external" href="mailto:adrien.peiffer&#64;acsone.eu">adrien.peiffer&#64;acsone.eu</a>&gt;</li>
@ -526,7 +534,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
</ul> </ul>
</div> </div>
<div class="section" id="maintainers"> <div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id33">Maintainers</a></h2> <h2><a class="toc-backref" href="#id36">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p> <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> <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 <p>OCA, or the Odoo Community Association, is a nonprofit organization whose
@ -534,7 +542,7 @@ mission is to support the collaborative development of Odoo features and
promote its widespread use.</p> promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p> <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external" href="https://github.com/sbidoul"><img alt="sbidoul" src="https://github.com/sbidoul.png?size=40px" /></a></p> <p><a class="reference external" href="https://github.com/sbidoul"><img alt="sbidoul" src="https://github.com/sbidoul.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/mis-builder/tree/13.0/mis_builder_budget">OCA/mis-builder</a> project on GitHub.</p> <p>This module is part of the <a class="reference external" href="https://github.com/OCA/mis-builder/tree/14.0/mis_builder_budget">OCA/mis-builder</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> <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> </div>

View File

@ -14,13 +14,13 @@ MIS Builder Demo
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3 :alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github
:target: https://github.com/OCA/mis-builder/tree/13.0/mis_builder_demo :target: https://github.com/OCA/mis-builder/tree/14.0/mis_builder_demo
:alt: OCA/mis-builder :alt: OCA/mis-builder
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/mis-builder-13-0/mis-builder-13-0-mis_builder_demo :target: https://translation.odoo-community.org/projects/mis-builder-14-0/mis-builder-14-0-mis_builder_demo
:alt: Translate me on Weblate :alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/248/13.0 :target: https://runbot.odoo-community.org/runbot/248/14.0
:alt: Try me on Runbot :alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5| |badge1| |badge2| |badge3| |badge4| |badge5|
@ -109,7 +109,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/OCA/mis-builder/issues>`_. Bugs are tracked on `GitHub Issues <https://github.com/OCA/mis-builder/issues>`_.
In case of trouble, please check there if your issue has already been reported. In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder_demo%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. `feedback <https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder_demo%0Aversion:%2014.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. Do not contact contributors directly about support or help with technical issues.
@ -148,6 +148,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-sbidoul| |maintainer-sbidoul|
This module is part of the `OCA/mis-builder <https://github.com/OCA/mis-builder/tree/13.0/mis_builder_demo>`_ project on GitHub. This module is part of the `OCA/mis-builder <https://github.com/OCA/mis-builder/tree/14.0/mis_builder_demo>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -5,7 +5,7 @@
"name": "MIS Builder Demo", "name": "MIS Builder Demo",
"summary": """ "summary": """
Demo addon for MIS Builder""", Demo addon for MIS Builder""",
"version": "2.0.3.1.2", "version": "2.0.3.1.3",
"license": "AGPL-3", "license": "AGPL-3",
"author": "ACSONE SA/NV, " "Odoo Community Association (OCA)", "author": "ACSONE SA/NV, " "Odoo Community Association (OCA)",
"website": "https://gitlab.com/flectra-community/mis-builder", "website": "https://gitlab.com/flectra-community/mis-builder",
@ -18,7 +18,7 @@
"data/mis_budget.xml", "data/mis_budget.xml",
"data/mis_report_instance.xml", "data/mis_report_instance.xml",
], ],
"installable": False, "installable": True,
"maintainers": ["sbidoul"], "maintainers": ["sbidoul"],
"development_status": "Alpha", "development_status": "Alpha",
} }

View File

@ -4,7 +4,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 13.0\n" "Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"

View File

@ -81,7 +81,7 @@ CREATE OR REPLACE VIEW mis_committed_purchase AS (
cur.date_start <= coalesce(ai.invoice_date, now()) and cur.date_start <= coalesce(ai.invoice_date, now()) and
(cur.date_end is null or cur.date_end > coalesce(ai.invoice_date, now()))) (cur.date_end is null or cur.date_end > coalesce(ai.invoice_date, now())))
WHERE ai.state = 'draft' WHERE ai.state = 'draft'
AND ai.type IN ('in_invoice', 'out_refund') AND ai.move_type IN ('in_invoice', 'out_refund')
AND NOT ail.exclude_from_invoice_tab AND NOT ail.exclude_from_invoice_tab
UNION ALL UNION ALL
@ -111,7 +111,7 @@ CREATE OR REPLACE VIEW mis_committed_purchase AS (
cur.date_start <= coalesce(ai.invoice_date, now()) and cur.date_start <= coalesce(ai.invoice_date, now()) and
(cur.date_end is null or cur.date_end > coalesce(ai.invoice_date, now()))) (cur.date_end is null or cur.date_end > coalesce(ai.invoice_date, now())))
WHERE ai.state = 'draft' WHERE ai.state = 'draft'
AND ai.type IN ('out_invoice', 'in_refund') AND ai.move_type IN ('out_invoice', 'in_refund')
AND NOT ail.exclude_from_invoice_tab AND NOT ail.exclude_from_invoice_tab
) AS mis_committed_purchase ) AS mis_committed_purchase

View File

@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !! !! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !! !! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Alpha" src="https://img.shields.io/badge/maturity-Alpha-red.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/mis-builder/tree/13.0/mis_builder_demo"><img alt="OCA/mis-builder" src="https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/mis-builder-13-0/mis-builder-13-0-mis_builder_demo"><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/248/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p> <p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Alpha" src="https://img.shields.io/badge/maturity-Alpha-red.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/mis-builder/tree/14.0/mis_builder_demo"><img alt="OCA/mis-builder" src="https://img.shields.io/badge/github-OCA%2Fmis--builder-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/mis-builder-14-0/mis-builder-14-0-mis_builder_demo"><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/248/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>Demo addon for MIS Builder.</p> <p>Demo addon for MIS Builder.</p>
<div class="admonition important"> <div class="admonition important">
<p class="first admonition-title">Important</p> <p class="first admonition-title">Important</p>
@ -459,7 +459,7 @@ any compatibility guarantees. (<a class="reference external" href="https://githu
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/mis-builder/issues">GitHub Issues</a>. <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/mis-builder/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported. In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder_demo%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p> <a class="reference external" href="https://github.com/OCA/mis-builder/issues/new?body=module:%20mis_builder_demo%0Aversion:%2014.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> <p>Do not contact contributors directly about support or help with technical issues.</p>
</div> </div>
<div class="section" id="credits"> <div class="section" id="credits">
@ -486,7 +486,7 @@ mission is to support the collaborative development of Odoo features and
promote its widespread use.</p> promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p> <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external" href="https://github.com/sbidoul"><img alt="sbidoul" src="https://github.com/sbidoul.png?size=40px" /></a></p> <p><a class="reference external" href="https://github.com/sbidoul"><img alt="sbidoul" src="https://github.com/sbidoul.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/mis-builder/tree/13.0/mis_builder_demo">OCA/mis-builder</a> project on GitHub.</p> <p>This module is part of the <a class="reference external" href="https://github.com/OCA/mis-builder/tree/14.0/mis_builder_demo">OCA/mis-builder</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> <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> </div>