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 expect-dev
- 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
- 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
@ -38,7 +36,7 @@ test_all_modules:
- 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
- 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_port 5432
--db_user flectra
@ -64,8 +62,6 @@ test_module_mis_builder_budget:
- apt-get install -y p7zip-full
- apt install -y expect-dev
- 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
- 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
@ -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
- chown -R flectra.flectra /opt/flectra/.local/share/filestore/test_mis_builder_budget
- 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_port 5432
--db_user flectra
@ -98,8 +94,6 @@ test_module_mis_builder_demo:
- apt-get install -y p7zip-full
- apt install -y expect-dev
- 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
- 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
@ -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
- chown -R flectra.flectra /opt/flectra/.local/share/filestore/test_mis_builder_demo
- 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_port 5432
--db_user flectra
@ -132,8 +126,6 @@ test_module_mis_builder:
- apt-get install -y p7zip-full
- apt install -y expect-dev
- 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
- 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
@ -145,7 +137,7 @@ test_module_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
- 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_port 5432
--db_user flectra

View File

@ -9,8 +9,8 @@ Available addons
addon | version | summary
--- | --- | ---
[mis_builder_budget](mis_builder_budget/) | 2.0.3.5.0| Create budgets for MIS reports
[mis_builder_demo](mis_builder_demo/) | 2.0.3.1.2| Demo addon for MIS Builder
[mis_builder](mis_builder/) | 2.0.3.6.3| Build 'Management Information System' Reports and Dashboards
[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.3| Demo addon for MIS Builder
[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
:alt: License: AGPL-3
.. |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
.. |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
.. |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
|badge1| |badge2| |badge3| |badge4| |badge5|
@ -97,6 +97,36 @@ be found on GitHub.
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)
~~~~~~~~~~~~~~~~~~~~~~~
@ -162,7 +192,7 @@ Migration to odoo 13.0.
``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
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
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.
@ -494,7 +524,7 @@ Bug Tracker
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.
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.
@ -554,6 +584,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|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.

View File

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

View File

@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@ -23,99 +23,131 @@ msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>AccountingNone</b>: a null value that behaves as 0 in arithmetic "
"operations."
"<b>\n"
" 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 ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>bal, crd, deb, pbal, nbal</b>: balance, debit, credit, positive balance, "
"negative balance."
"<b>\n"
" 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 ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>bal[70]</b>: variation of the balance of account 70 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>: 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."
"<b>\n"
" debp[55%][('journal_id.code', '=',\n"
" 'BNK1')]\n"
" </b>\n"
" : sum of all debits on accounts 55 and\n"
" journal BNK1 during the period."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>balp[('user_type_id', '=', "
"ref('account.data_account_type_receivable').id)][]</b>: variation of the "
"balance of all receivable accounts over the period."
"<b>AccountingNone</b>\n"
" : a null value that behaves as 0 in\n"
" arithmetic operations."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>balp[][('tax_line_id.tag_ids', '=', ref('l10n_be.tax_tag_56').id)]</b>: "
"balance of move lines related to tax grid 56."
"<b>bal, crd, deb, pbal, nbal</b>\n"
" : balance, debit, credit, positive balance,\n"
" negative balance."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
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."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>crdp[40%]</b>: sum of all credits on accounts starting with 40 during the"
" period."
msgstr ""
#. 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."
"<b>crdp[40%]</b>\n"
" : sum of all credits on accounts starting\n"
" with 40 during the period."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>debp[55%][('journal_id.code', '=', 'BNK1')]</b>: sum of all debits on "
"accounts 55 and journal BNK1 during the period."
"<b>date_from, date_to</b>\n"
" : 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>p, i, e</b>: respectively variation over the period, initial balance, "
"ending balance"
"<b>datetime, datetime, dateutil</b>\n"
" : the python modules."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
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."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"<b>sum, min, max, len, avg</b>: behave as expected, very similar to the "
"python builtins."
"<b>sum, min, max, len, avg</b>\n"
" : behave as expected, very similar to the\n"
" python builtins."
msgstr ""
#. module: mis_builder
@ -191,7 +223,8 @@ msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"Additionally following variables are available in the evaluation context:"
"Additionally following variables are available\n"
" in the evaluation context:"
msgstr ""
#. module: mis_builder
@ -239,6 +272,21 @@ msgstr ""
msgid "Analytic Account Filter"
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
#: code:addons/mis_builder/models/mis_report_instance.py:0
#, python-format
@ -525,6 +573,7 @@ msgstr ""
#. 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_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_report__display_name
#: model:ir.model.fields,field_description:mis_builder.field_mis_report_instance__display_name
@ -618,8 +667,9 @@ msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"Expressions can involve other KPI, sub KPI and query results by name (eg "
"kpi1 + kpi2, kpi2.subkpi1, query1.field1)."
"Expressions can involve other KPI, sub KPI and\n"
" query results by name (eg kpi1 + kpi2,\n"
" kpi2.subkpi1, query1.field1)."
msgstr ""
#. module: mis_builder
@ -656,6 +706,14 @@ msgid ""
"modified in the preview."
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
#: model:ir.model.fields,help:mis_builder.field_mis_report_instance_period__analytic_account_id
msgid ""
@ -765,6 +823,7 @@ msgstr ""
#. 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_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_report__id
#: model:ir.model.fields,field_description:mis_builder.field_mis_report_instance__id
@ -878,6 +937,7 @@ msgstr ""
#. 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_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_report____last_update
#: model:ir.model.fields,field_description:mis_builder.field_mis_report_instance____last_update
@ -1518,21 +1578,30 @@ msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"The <b>account selector</b> is a like expression on the account code (eg "
"70%, etc)."
"The\n"
" <b>account selector</b>\n"
" is a like expression on the account code (eg\n"
" 70%, etc)."
msgstr ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
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 ""
#. module: mis_builder
#: model_terms:ir.ui.view,arch_db:mis_builder.mis_report_view_kpi_form
msgid ""
"The following special elements are recognized in the expressions to compute accounting data:\n"
" <code>{bal|crd|deb|pbal|nbal}{pieu}[account selector][journal items domain]</code>."
"The following special elements are recognized in\n"
" 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 ""
#. module: mis_builder

View File

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

View File

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

View File

@ -284,6 +284,15 @@ class MisReportInstancePeriod(models.Model):
"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(
comodel_name="account.analytic.tag",
string="Analytic Tags",
@ -369,11 +378,8 @@ class MisReportInstancePeriod(models.Model):
if operator == "all":
if not isinstance(value, list):
value = [value]
many_ids = self.report_instance_id.resolve_2many_commands(
filter_name, value, ["id"]
)
for m in many_ids:
filters.append((filter_name, "in", [m["id"]]))
for m in value:
filters.append((filter_name, "in", [m]))
else:
filters.append((filter_name, operator, value))
return filters
@ -403,6 +409,10 @@ class MisReportInstancePeriod(models.Model):
domain.extend([("move_id.state", "=", "posted")])
if self.analytic_account_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:
domain.append(("analytic_tag_ids", "=", tag.id))
return domain
@ -459,6 +469,17 @@ class MisReportInstancePeriod(models.Model):
% 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):
"""The MIS report instance combines everything to compute
@ -539,6 +560,10 @@ class MisReportInstance(models.Model):
analytic_account_id = fields.Many2one(
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(
comodel_name="account.analytic.tag", string="Analytic Tags"
)
@ -573,8 +598,17 @@ class MisReportInstance(models.Model):
filter_descriptions.append(
_("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")
if analytic_tag_value:
# TODO 14 we need a test to cover this
analytic_tag_names = self.resolve_2many_commands(
"analytic_tag_ids", analytic_tag_value, ["name"]
)
@ -659,6 +693,11 @@ class MisReportInstance(models.Model):
"value": self.analytic_account_id.id,
"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:
context["mis_report_filters"]["analytic_tag_ids"] = {
"value": self.analytic_tag_ids.ids,
@ -847,7 +886,7 @@ class MisReportInstance(models.Model):
account_id = arg.get("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(
kpi=kpi.description,
account=account.display_name,

View File

@ -11,7 +11,7 @@ _logger = logging.getLogger(__name__)
class Report(models.Model):
_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 not res_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
# 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
)
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
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_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 !!
!! 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.
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
@ -376,46 +376,49 @@ can be added to Odoo dashboards.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#installation" id="id68">Installation</a></li>
<li><a class="reference internal" href="#usage" id="id69">Usage</a></li>
<li><a class="reference internal" href="#development" id="id70">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="#changelog" id="id72">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="#id5" id="id74">13.0.3.6.2 (2020-04-22)</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="#id9" id="id76">13.0.3.6.0 (2020-03-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="#id13" id="id78">12.0.3.5.0 (2019-10-26)</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="#id28" id="id80">12.0.3.3.0 (2019-01-26)</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="#id41" id="id82">11.0.3.2.1 (2018-05-29)</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="#id47" id="id84">11.0.3.1.2 (2018-02-04)</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="#id58" id="id86">10.0.3.0.4 (2017-10-14)</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="#id62" id="id88">10.0.3.0.2 (2017-10-01)</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="#id63" id="id90">9.0.2.0.2 (2016-09-27)</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="#id65" id="id92">9.0.2.0.0 (2016-05-24)</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="#id67" id="id94">8.0.0.2.0</a></li>
<li><a class="reference internal" href="#installation" id="id75">Installation</a></li>
<li><a class="reference internal" href="#usage" id="id76">Usage</a></li>
<li><a class="reference internal" href="#development" id="id77">Development</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="id79">Changelog</a><ul>
<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="#id3" id="id81">14.0.3.6.5 (2021-04-23)</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="#id8" id="id83">13.0.3.6.3 (2020-08-28)</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="#id14" id="id85">13.0.3.6.1 (2020-04-22)</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="#id19" id="id87">13.0.3.5.0 (2020-01-??)</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="#id28" id="id89">12.0.3.4.0 (2019-07-09)</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="#id45" id="id91">11.0.3.2.2 (2018-06-30)</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="#id50" id="id93">10.0.3.2.0 (2018-05-02)</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="#id56" id="id95">10.0.3.1.1 (2017-11-14)</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="#id67" id="id97">10.0.3.0.3 (2017-10-03)</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="#unreleased" id="id99">10.0.2.0.3 (unreleased)</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="#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>
</li>
<li><a class="reference internal" href="#bug-tracker" id="id95">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id96">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id97">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id98">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id99">Maintainers</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id105">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id106">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id107">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id108">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id109">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<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>An easy way to install it with all its dependencies is using pip:</p>
<ul class="simple">
@ -425,7 +428,7 @@ the MIS Builder application.</li>
</ul>
</div>
<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>
<ul class="simple">
<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 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
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
@ -460,15 +463,42 @@ or even on mis.report.instance.period if you want different columns to show diff
analytic accounts.</p>
</div>
<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>
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>
</div>
<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">
<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>
<ul class="simple">
<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>
</ul>
</div>
<div class="section" id="id5">
<h2><a class="toc-backref" href="#id74">13.0.3.6.2 (2020-04-22)</a></h2>
<div class="section" id="id12">
<h2><a class="toc-backref" href="#id84">13.0.3.6.2 (2020-04-22)</a></h2>
<p><strong>Bugfixes</strong></p>
<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>
</ul>
</div>
<div class="section" id="id7">
<h2><a class="toc-backref" href="#id75">13.0.3.6.1 (2020-04-22)</a></h2>
<div class="section" id="id14">
<h2><a class="toc-backref" href="#id85">13.0.3.6.1 (2020-04-22)</a></h2>
<p><strong>Bugfixes</strong></p>
<ul class="simple">
<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>
</ul>
</div>
<div class="section" id="id9">
<h2><a class="toc-backref" href="#id76">13.0.3.6.0 (2020-03-28)</a></h2>
<div class="section" id="id16">
<h2><a class="toc-backref" href="#id86">13.0.3.6.0 (2020-03-28)</a></h2>
<p><strong>Features</strong></p>
<ul class="simple">
<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>
</ul>
</div>
<div class="section" id="id12">
<h2><a class="toc-backref" href="#id77">13.0.3.5.0 (2020-01-??)</a></h2>
<div class="section" id="id19">
<h2><a class="toc-backref" href="#id87">13.0.3.5.0 (2020-01-??)</a></h2>
<p>Migration to odoo 13.0.</p>
</div>
<div class="section" id="id13">
<h2><a class="toc-backref" href="#id78">12.0.3.5.0 (2019-10-26)</a></h2>
<div class="section" id="id20">
<h2><a class="toc-backref" href="#id88">12.0.3.5.0 (2019-10-26)</a></h2>
<p><strong>Features</strong></p>
<ul class="simple">
<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
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
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
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.
@ -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>
</ul>
</div>
<div class="section" id="id21">
<h2><a class="toc-backref" href="#id79">12.0.3.4.0 (2019-07-09)</a></h2>
<div class="section" id="id28">
<h2><a class="toc-backref" href="#id89">12.0.3.4.0 (2019-07-09)</a></h2>
<p><strong>Features</strong></p>
<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>
@ -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>
</ul>
</div>
<div class="section" id="id28">
<h2><a class="toc-backref" href="#id80">12.0.3.3.0 (2019-01-26)</a></h2>
<div class="section" id="id35">
<h2><a class="toc-backref" href="#id90">12.0.3.3.0 (2019-01-26)</a></h2>
<p><strong>Features</strong></p>
<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
@ -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
filters, the underlying model must now have an <tt class="docutils literal">analytic_account_id</tt> field.</p>
</div>
<div class="section" id="id38">
<h2><a class="toc-backref" href="#id81">11.0.3.2.2 (2018-06-30)</a></h2>
<div class="section" id="id45">
<h2><a class="toc-backref" href="#id91">11.0.3.2.2 (2018-06-30)</a></h2>
<ul class="simple">
<li>[FIX] Fix bug in company_default_get call returning
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>
</ul>
</div>
<div class="section" id="id41">
<h2><a class="toc-backref" href="#id82">11.0.3.2.1 (2018-05-29)</a></h2>
<div class="section" id="id48">
<h2><a class="toc-backref" href="#id92">11.0.3.2.1 (2018-05-29)</a></h2>
<ul class="simple">
<li>[FIX] Missing comparison operator for AccountingNone
leading to errors in pbal computations
(<a class="reference external" href="https://github.com/OCA/mis-builder/issue/93">#93</a>)</li>
</ul>
</div>
<div class="section" id="id43">
<h2><a class="toc-backref" href="#id83">10.0.3.2.0 (2018-05-02)</a></h2>
<div class="section" id="id50">
<h2><a class="toc-backref" href="#id93">10.0.3.2.0 (2018-05-02)</a></h2>
<ul class="simple">
<li>[FIX] make subkpi ordering deterministic
(<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>
</ul>
</div>
<div class="section" id="id47">
<h2><a class="toc-backref" href="#id84">11.0.3.1.2 (2018-02-04)</a></h2>
<div class="section" id="id54">
<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.
(<a class="reference external" href="https://github.com/OCA/mis-builder/pull/67">#67</a>)</p>
</div>
<div class="section" id="id49">
<h2><a class="toc-backref" href="#id85">10.0.3.1.1 (2017-11-14)</a></h2>
<div class="section" id="id56">
<h2><a class="toc-backref" href="#id95">10.0.3.1.1 (2017-11-14)</a></h2>
<p>New features:</p>
<ul class="simple">
<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>
</ul>
</div>
<div class="section" id="id58">
<h2><a class="toc-backref" href="#id86">10.0.3.0.4 (2017-10-14)</a></h2>
<div class="section" id="id65">
<h2><a class="toc-backref" href="#id96">10.0.3.0.4 (2017-10-14)</a></h2>
<p>Bug fix:</p>
<ul class="simple">
<li>[FIX] issue with initial balance rounding.
<a class="reference external" href="https://github.com/OCA/mis-builder/issues/30">#30</a></li>
</ul>
</div>
<div class="section" id="id60">
<h2><a class="toc-backref" href="#id87">10.0.3.0.3 (2017-10-03)</a></h2>
<div class="section" id="id67">
<h2><a class="toc-backref" href="#id97">10.0.3.0.3 (2017-10-03)</a></h2>
<p>Bug fix:</p>
<ul class="simple">
<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>
</ul>
</div>
<div class="section" id="id62">
<h2><a class="toc-backref" href="#id88">10.0.3.0.2 (2017-10-01)</a></h2>
<div class="section" id="id69">
<h2><a class="toc-backref" href="#id98">10.0.3.0.2 (2017-10-01)</a></h2>
<p>New features:</p>
<ul class="simple">
<li>[ADD] Alternative move line source per report column.
@ -745,7 +775,7 @@ expressions were used in a KPI</li>
</ul>
</div>
<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">
<li>[IMP] more robust behaviour in presence of missing expressions</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>
</ul>
</div>
<div class="section" id="id63">
<h2><a class="toc-backref" href="#id90">9.0.2.0.2 (2016-09-27)</a></h2>
<div class="section" id="id70">
<h2><a class="toc-backref" href="#id100">9.0.2.0.2 (2016-09-27)</a></h2>
<ul class="simple">
<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>
</ul>
</div>
<div class="section" id="id64">
<h2><a class="toc-backref" href="#id91">9.0.2.0.1 (2016-05-26)</a></h2>
<div class="section" id="id71">
<h2><a class="toc-backref" href="#id101">9.0.2.0.1 (2016-05-26)</a></h2>
<ul class="simple">
<li>[IMP] remove unused argument in declare_and_compute_period()
for a cleaner API. This is a breaking API changing merged in
urgency before it is used by other modules.</li>
</ul>
</div>
<div class="section" id="id65">
<h2><a class="toc-backref" href="#id92">9.0.2.0.0 (2016-05-24)</a></h2>
<div class="section" id="id72">
<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
April 26-29, 2016. The rest (ie a major refactoring) has been done in
the weeks after.</p>
@ -820,8 +850,8 @@ flexible alternative to fiscal periods</li>
consolidation accounts have been removed</li>
</ul>
</div>
<div class="section" id="id66">
<h2><a class="toc-backref" href="#id93">8.0.1.0.0 (2016-04-27)</a></h2>
<div class="section" id="id73">
<h2><a class="toc-backref" href="#id103">8.0.1.0.0 (2016-04-27)</a></h2>
<ul class="simple">
<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>
@ -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>
</ul>
</div>
<div class="section" id="id67">
<h2><a class="toc-backref" href="#id94">8.0.0.2.0</a></h2>
<div class="section" id="id74">
<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>
</div>
</div>
<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>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/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>
</div>
<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">
<h2><a class="toc-backref" href="#id97">Authors</a></h2>
<h2><a class="toc-backref" href="#id107">Authors</a></h2>
<ul class="simple">
<li>ACSONE SA/NV</li>
</ul>
</div>
<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">
<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>
@ -895,7 +925,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
</ul>
</div>
<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>
<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
@ -903,7 +933,7 @@ mission is to support the collaborative development of Odoo features and
promote its widespread use.</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>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>
</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_label = _t("Analytic Account Filter");
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_label = _t("Analytic Tags Filter");
self.analytic_tag_ids_m2m = undefined; // Field widget
@ -174,6 +178,12 @@ flectra.define("mis_builder.widget", function (require) {
name: "filter_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) {
fields.push({
@ -226,6 +236,28 @@ flectra.define("mis_builder.widget", function (require) {
self.analytic_account_id_m2o
);
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) {
@ -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.value &&

View File

@ -125,7 +125,7 @@ class TestAEP(common.TransactionCase):
}
)
if post:
move.post()
move._post()
return move
def _do_queries(self, date_from, date_to):
@ -147,8 +147,8 @@ class TestAEP(common.TransactionCase):
return res
def test_sanity_check(self):
self.assertEquals(self.company.fiscalyear_last_day, 31)
self.assertEquals(self.company.fiscalyear_last_month, "12")
self.assertEqual(self.company.fiscalyear_last_day, 31)
self.assertEqual(self.company.fiscalyear_last_month, "12")
def test_aep_basic(self):
self.aep.done_parsing()
@ -160,9 +160,9 @@ class TestAEP(common.TransactionCase):
self.assertIs(self._eval("bali[400AR]"), AccountingNone)
self.assertIs(self._eval("bali[700IN]"), AccountingNone)
# check variation
self.assertEquals(self._eval("balp[400AR]"), 100)
self.assertEquals(self._eval("balp[][('account_id.code', '=', '400AR')]"), 100)
self.assertEquals(
self.assertEqual(self._eval("balp[400AR]"), 100)
self.assertEqual(self._eval("balp[][('account_id.code', '=', '400AR')]"), 100)
self.assertEqual(
self._eval(
"balp[]"
"[('account_id.user_type_id', '=', "
@ -170,14 +170,14 @@ class TestAEP(common.TransactionCase):
),
100,
)
self.assertEquals(
self.assertEqual(
self._eval(
"balp[('user_type_id', '=', "
" ref('account.data_account_type_receivable').id)]"
),
100,
)
self.assertEquals(
self.assertEqual(
self._eval(
"balp['&', "
" ('user_type_id', '=', "
@ -186,58 +186,58 @@ class TestAEP(common.TransactionCase):
),
100,
)
self.assertEquals(self._eval("balp[700IN]"), -100)
self.assertEqual(self._eval("balp[700IN]"), -100)
# check ending balance
self.assertEquals(self._eval("bale[400AR]"), 100)
self.assertEquals(self._eval("bale[700IN]"), -100)
self.assertEqual(self._eval("bale[400AR]"), 100)
self.assertEqual(self._eval("bale[700IN]"), -100)
# let's query for January
self._do_queries(
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)
self.assertEquals(self._eval("bali[400AR]"), 100)
self.assertEqual(self._eval("bali[400AR]"), 100)
self.assertIs(self._eval("bali[700IN]"), AccountingNone)
# check variation
self.assertEquals(self._eval("balp[400AR]"), 300)
self.assertEquals(self._eval("balp[700IN]"), -300)
self.assertEqual(self._eval("balp[400AR]"), 300)
self.assertEqual(self._eval("balp[700IN]"), -300)
# check ending balance
self.assertEquals(self._eval("bale[400AR]"), 400)
self.assertEquals(self._eval("bale[700IN]"), -300)
self.assertEqual(self._eval("bale[400AR]"), 400)
self.assertEqual(self._eval("bale[700IN]"), -300)
# let's query for March
self._do_queries(
datetime.date(self.curr_year, 3, 1), datetime.date(self.curr_year, 3, 31)
)
# initial balance is the ending balance fo January
self.assertEquals(self._eval("bali[400AR]"), 400)
self.assertEquals(self._eval("bali[700IN]"), -300)
self.assertEquals(self._eval("pbali[400AR]"), 400)
self.assertEquals(self._eval("nbali[400AR]"), 0)
self.assertEquals(self._eval("nbali[700IN]"), -300)
self.assertEquals(self._eval("pbali[700IN]"), 0)
self.assertEqual(self._eval("bali[400AR]"), 400)
self.assertEqual(self._eval("bali[700IN]"), -300)
self.assertEqual(self._eval("pbali[400AR]"), 400)
self.assertEqual(self._eval("nbali[400AR]"), 0)
self.assertEqual(self._eval("nbali[700IN]"), -300)
self.assertEqual(self._eval("pbali[700IN]"), 0)
# check variation
self.assertEquals(self._eval("balp[400AR]"), 500)
self.assertEquals(self._eval("balp[700IN]"), -500)
self.assertEquals(self._eval("nbalp[400AR]"), 0)
self.assertEquals(self._eval("pbalp[400AR]"), 500)
self.assertEquals(self._eval("nbalp[700IN]"), -500)
self.assertEquals(self._eval("pbalp[700IN]"), 0)
self.assertEqual(self._eval("balp[400AR]"), 500)
self.assertEqual(self._eval("balp[700IN]"), -500)
self.assertEqual(self._eval("nbalp[400AR]"), 0)
self.assertEqual(self._eval("pbalp[400AR]"), 500)
self.assertEqual(self._eval("nbalp[700IN]"), -500)
self.assertEqual(self._eval("pbalp[700IN]"), 0)
# check ending balance
self.assertEquals(self._eval("bale[400AR]"), 900)
self.assertEquals(self._eval("nbale[400AR]"), 0)
self.assertEquals(self._eval("pbale[400AR]"), 900)
self.assertEquals(self._eval("bale[700IN]"), -800)
self.assertEquals(self._eval("nbale[700IN]"), -800)
self.assertEquals(self._eval("pbale[700IN]"), 0)
self.assertEqual(self._eval("bale[400AR]"), 900)
self.assertEqual(self._eval("nbale[400AR]"), 0)
self.assertEqual(self._eval("pbale[400AR]"), 900)
self.assertEqual(self._eval("bale[700IN]"), -800)
self.assertEqual(self._eval("nbale[700IN]"), -800)
self.assertEqual(self._eval("pbale[700IN]"), 0)
# check some variant expressions, for coverage
self.assertEquals(self._eval("crdp[700I%]"), 500)
self.assertEquals(self._eval("debp[400A%]"), 500)
self.assertEquals(self._eval("bal_700IN"), -500)
self.assertEquals(self._eval("bals[700IN]"), -800)
self.assertEqual(self._eval("crdp[700I%]"), 500)
self.assertEqual(self._eval("debp[400A%]"), 500)
self.assertEqual(self._eval("bal_700IN"), -500)
self.assertEqual(self._eval("bals[700IN]"), -800)
# unallocated p&l from previous year
self.assertEquals(self._eval("balu[]"), -100)
self.assertEqual(self._eval("balu[]"), -100)
# 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)
)
variation = self._eval_by_account_id("balp[]")
self.assertEquals(
variation, {self.account_ar.id: 500, self.account_in.id: -500}
)
self.assertEqual(variation, {self.account_ar.id: 500, self.account_in.id: -500})
variation = self._eval_by_account_id("pbalp[]")
self.assertEquals(
self.assertEqual(
variation, {self.account_ar.id: 500, self.account_in.id: AccountingNone}
)
variation = self._eval_by_account_id("nbalp[]")
self.assertEquals(
self.assertEqual(
variation, {self.account_ar.id: AccountingNone, self.account_in.id: -500}
)
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]")
self.assertEquals(
variation, {self.account_ar.id: -500, self.account_in.id: 500}
)
self.assertEqual(variation, {self.account_ar.id: -500, self.account_in.id: 500})
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):
initial = AEP.get_balances_initial(
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)}
)
variation = AEP.get_balances_variation(
@ -280,19 +276,19 @@ class TestAEP(common.TransactionCase):
time.strftime("%Y") + "-03-31",
"posted",
)
self.assertEquals(
self.assertEqual(
variation, {self.account_ar.id: (500, 0), self.account_in.id: (0, 500)}
)
end = AEP.get_balances_end(
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)}
)
unallocated = AEP.get_unallocated_pl(
self.company, time.strftime("%Y") + "-03-15", "posted"
)
self.assertEquals(unallocated, (0, 100))
self.assertEqual(unallocated, (0, 100))
def test_float_is_zero(self):
dp = self.company.currency_id.decimal_places
@ -307,7 +303,7 @@ class TestAEP(common.TransactionCase):
initial = AEP.get_balances_initial(
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
self._create_move(
date=datetime.date(self.prev_year, 12, 1),
@ -319,19 +315,19 @@ class TestAEP(common.TransactionCase):
self.company, time.strftime("%Y") + "-01-01", "posted"
)
# epsilon initial balances is reported as empty
self.assertEquals(initial, {})
self.assertEqual(initial, {})
def test_get_account_ids_for_expr(self):
self.aep.done_parsing()
expr = "balp[700IN]"
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%]"
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
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):
self.aep.done_parsing()
@ -394,7 +390,7 @@ class TestAEP(common.TransactionCase):
self.aep.done_parsing()
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(
date=datetime.date(self.prev_year, 12, 1),
@ -407,7 +403,7 @@ class TestAEP(common.TransactionCase):
if ml.credit:
ml.write(dict(tax_ids=[(6, 0, [tax.id])]))
tax.active = False
move.post()
move._post()
# let's query for december 1st
self._do_queries(
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):
def setUp(self):
super(TestAnalyticFilters, self).setUp()
self.aag = self.env["account.analytic.group"].search([], limit=1)
def test_context_with_filters(self):
aaa = self.env["account.analytic.account"].search([], limit=1)
mri = self.env["mis.report.instance"].new()
mri.analytic_account_id = False
mri.analytic_group_id = False
assert mri._context_with_filters().get("mis_report_filters") == {}
mri.analytic_account_id = aaa
mri.analytic_group_id = self.aag
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
# in the context
@ -30,6 +37,16 @@ class TestAnalyticFilters(TransactionCase):
)
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):
# no filter, no domain
self._check_get_filter_domain_from_context({}, [])
@ -37,11 +54,18 @@ class TestAnalyticFilters(TransactionCase):
self._check_get_filter_domain_from_context(
{"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
self._check_get_filter_domain_from_context(
{"analytic_account_id": {"value": 1, "operator": "!="}},
[("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
self._check_get_filter_domain_from_context(
{"some_field": {"value": "x"}}, [("some_field", "=", "x")]
@ -53,13 +77,39 @@ class TestAnalyticFilters(TransactionCase):
{"analytic_account_id": {"value": 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
self._check_get_filter_domain_from_context(
{"analytic_account_id": {"value": 1, "operator": "all"}},
[("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
self._check_get_filter_domain_from_context(
{"analytic_tag_ids": {"value": [1, 2], "operator": "all"}},
[("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
def setUp(self):

View File

@ -13,6 +13,7 @@ class TestKpiData(SavepointCase):
_name = "mis.kpi.data.test.item"
_inherit = "mis.kpi.data"
_description = "MIS Kpi Data test item"
@classmethod
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
self.report_instance_2 = self.env["mis.report.instance"].create(
dict(
@ -364,13 +361,13 @@ class TestMisReportInstance(common.HttpCase):
vals = [c.val for c in row.iter_cells()]
if row.kpi.name == "k3":
# k3 is constant
self.assertEquals(vals, [AccountingNone, AccountingNone, 1.0])
self.assertEqual(vals, [AccountingNone, AccountingNone, 1.0])
elif row.kpi.name == "k6":
# k6 is a string kpi
self.assertEquals(vals, ["bla", "bla", "blabla"])
self.assertEqual(vals, ["bla", "bla", "blabla"])
elif row.kpi.name == "k7":
# 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):
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"))
for account_id in account_ids:
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):
r = self.env["mis.report.kpi"].name_search("k1")
@ -539,13 +536,11 @@ class TestMisReportInstance(common.HttpCase):
for row in matrix.iter_rows():
vals = [c.val for c in row.iter_cells()]
if row.kpi.name == "k1":
self.assertEquals(
vals, [AccountingNone, AccountingNone, AccountingNone]
)
self.assertEqual(vals, [AccountingNone, AccountingNone, AccountingNone])
elif row.kpi.name == "k2":
self.assertEquals(vals, [AccountingNone, AccountingNone, None])
self.assertEqual(vals, [AccountingNone, AccountingNone, None])
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):
with self.assertRaises(SubKPIUnknownTypeError):

View File

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

View File

@ -37,149 +37,145 @@ class TestRendering(common.TransactionCase):
return r
def test_render(self):
self.assertEquals(u"1", self._render(1))
self.assertEquals(u"1", self._render(1.1))
self.assertEquals(u"2", self._render(1.6))
self.assertEqual(u"1", self._render(1))
self.assertEqual(u"1", self._render(1.1))
self.assertEqual(u"2", self._render(1.6))
self.style.dp_inherit = False
self.style.dp = 2
self.assertEquals(u"1.00", self._render(1))
self.assertEquals(u"1.10", self._render(1.1))
self.assertEquals(u"1.60", self._render(1.6))
self.assertEquals(u"1.61", self._render(1.606))
self.assertEquals(u"12,345.67", self._render(12345.67))
self.assertEqual(u"1.00", self._render(1))
self.assertEqual(u"1.10", self._render(1.1))
self.assertEqual(u"1.60", self._render(1.6))
self.assertEqual(u"1.61", self._render(1.606))
self.assertEqual(u"12,345.67", self._render(12345.67))
def test_render_negative(self):
# non breaking hyphen
self.assertEquals(u"\u20111", self._render(-1))
self.assertEqual(u"\u20111", self._render(-1))
def test_render_zero(self):
self.assertEquals(u"0", self._render(0))
self.assertEquals(u"", self._render(None))
self.assertEquals(u"", self._render(AccountingNone))
self.assertEqual(u"0", self._render(0))
self.assertEqual(u"", self._render(None))
self.assertEqual(u"", self._render(AccountingNone))
def test_render_suffix(self):
self.style.suffix_inherit = False
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.divider_inherit = False
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):
self.style.prefix_inherit = False
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.divider_inherit = False
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):
self.style.divider_inherit = False
self.style.divider = "1e3"
self.style.dp_inherit = False
self.style.dp = 0
self.assertEquals(u"1", self._render(1000))
self.assertEqual(u"1", self._render(1000))
self.style.divider = "1e6"
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.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.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):
self.assertEquals(u"100\xa0%", self._render(1, TYPE_PCT))
self.assertEquals(u"50\xa0%", self._render(0.5, TYPE_PCT))
self.assertEqual(u"100\xa0%", self._render(1, TYPE_PCT))
self.assertEqual(u"50\xa0%", self._render(0.5, TYPE_PCT))
self.style.dp_inherit = False
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):
self.assertEquals(u"", self._render("", TYPE_STR))
self.assertEquals(u"", self._render(None, TYPE_STR))
self.assertEquals(u"abcdé", self._render(u"abcdé", TYPE_STR))
self.assertEqual(u"", self._render("", TYPE_STR))
self.assertEqual(u"", self._render(None, TYPE_STR))
self.assertEqual(u"abcdé", self._render(u"abcdé", TYPE_STR))
def test_compare_num_pct(self):
self.assertEquals((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.assertEquals((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.assertEquals((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.assertEquals((-1.0, u"\u2011100.0\xa0%"), self._compare_and_render(0, 50))
self.assertEquals(
(-2.0, u"\u2011200.0\xa0%"), self._compare_and_render(-50, 50)
)
self.assertEquals(
(-0.5, u"\u201150.0\xa0%"), self._compare_and_render(-75, -50)
)
self.assertEquals(
self.assertEqual((1.0, u"+100.0\xa0%"), self._compare_and_render(100, 50))
self.assertEqual((0.5, u"+50.0\xa0%"), self._compare_and_render(75, 50))
self.assertEqual((0.5, u"+50.0\xa0%"), self._compare_and_render(-25, -50))
self.assertEqual((1.0, u"+100.0\xa0%"), self._compare_and_render(0, -50))
self.assertEqual((2.0, u"+200.0\xa0%"), self._compare_and_render(50, -50))
self.assertEqual((-0.5, u"\u201150.0\xa0%"), self._compare_and_render(25, 50))
self.assertEqual((-1.0, u"\u2011100.0\xa0%"), self._compare_and_render(0, 50))
self.assertEqual((-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(
(AccountingNone, u""), self._compare_and_render(50, AccountingNone)
)
self.assertEquals((AccountingNone, u""), self._compare_and_render(50, None))
self.assertEquals((AccountingNone, u""), self._compare_and_render(50, 50))
self.assertEquals((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.assertEquals(
self.assertEqual((AccountingNone, u""), self._compare_and_render(50, None))
self.assertEqual((AccountingNone, u""), self._compare_and_render(50, 50))
self.assertEqual((0.002, u"+0.2\xa0%"), self._compare_and_render(50.1, 50))
self.assertEqual((AccountingNone, u""), self._compare_and_render(50.01, 50))
self.assertEqual(
(-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)
)
self.assertEquals(
self.assertEqual(
(AccountingNone, u""), self._compare_and_render(DataError("#ERR", "."), 1)
)
self.assertEquals(
self.assertEqual(
(AccountingNone, u""), self._compare_and_render(1, DataError("#ERR", "."))
)
def test_compare_num_diff(self):
self.assertEquals(
self.assertEqual(
(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)
)
self.style.suffix_inherit = False
self.style.suffix = u""
self.assertEquals(
self.assertEqual(
(-25, u"\u201125\xa0"),
self._compare_and_render(25, 50, TYPE_NUM, CMP_DIFF),
)
self.style.suffix = u""
self.assertEquals(
self.assertEqual(
(50.0, u"+50"),
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)
)
self.assertEquals(
self.assertEqual(
(-50.0, u"\u201150"),
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)
)
self.style.dp_inherit = False
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)
)
self.assertEquals(
self.assertEqual(
(AccountingNone, u""),
self._compare_and_render(1.001, 1.0, TYPE_NUM, CMP_DIFF),
)
def test_compare_pct(self):
self.assertEquals(
self.assertEqual(
(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)
)
@ -188,16 +184,16 @@ class TestRendering(common.TransactionCase):
result = self.style_obj.compare_and_render(
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):
self.style.color = "#FF0000"
self.style.color_inherit = False
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_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(
dict(
name="teststyle2",
@ -208,7 +204,7 @@ class TestRendering(common.TransactionCase):
)
)
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):
self.style.color_inherit = False
@ -229,7 +225,7 @@ class TestRendering(common.TransactionCase):
self.style.indent_level = 2
style_props = self.style_obj.merge([self.style])
css = self.style_obj.to_css_style(style_props)
self.assertEquals(
self.assertEqual(
css,
"font-style: italic; "
"font-weight: bold; "
@ -239,7 +235,7 @@ class TestRendering(common.TransactionCase):
"text-indent: 2em",
)
css = self.style_obj.to_css_style(style_props, no_indent=True)
self.assertEquals(
self.assertEqual(
css,
"font-style: italic; "
"font-weight: bold; "
@ -269,7 +265,7 @@ class TestRendering(common.TransactionCase):
self.style.indent_level = 2
style_props = self.style_obj.merge([self.style])
xlsx = self.style_obj.to_xlsx_style(TYPE_NUM, style_props)
self.assertEquals(
self.assertEqual(
xlsx,
{
"italic": True,
@ -282,7 +278,7 @@ class TestRendering(common.TransactionCase):
},
)
xlsx = self.style_obj.to_xlsx_style(TYPE_NUM, style_props, no_indent=True)
self.assertEquals(
self.assertEqual(
xlsx,
{
"italic": True,
@ -295,7 +291,7 @@ class TestRendering(common.TransactionCase):
)
# percent type ignore prefix and suffix
xlsx = self.style_obj.to_xlsx_style(TYPE_PCT, style_props, no_indent=True)
self.assertEquals(
self.assertEqual(
xlsx,
{
"italic": True,
@ -309,7 +305,7 @@ class TestRendering(common.TransactionCase):
# str type have no num_format style
xlsx = self.style_obj.to_xlsx_style(TYPE_STR, style_props, no_indent=True)
self.assertEquals(
self.assertEqual(
xlsx,
{
"italic": True,

View File

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

View File

@ -14,13 +14,13 @@ MIS Builder Budget
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |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
.. |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
.. |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
|badge1| |badge2| |badge3| |badge4| |badge5|
@ -85,6 +85,14 @@ be found on GitHub.
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)
~~~~~~~~~~~~~~~~~~~~~~~
@ -157,7 +165,7 @@ Bug Tracker
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.
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.
@ -198,6 +206,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|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.

View File

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

View File

@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \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_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_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"
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_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_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"
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_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_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"
msgstr ""

View File

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

View File

@ -15,7 +15,11 @@ class MisReportInstancePeriod(models.Model):
selection_add=[
(SRC_MIS_BUDGET, "MIS Budget by KPI"),
(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(
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="model_id" ref="model_mis_budget_by_account" />
<field name="domain_force">
['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
['|',('company_id','=',False),('company_id', 'in', company_ids)]
</field>
</record>
</flectra>

View File

@ -24,7 +24,7 @@
<field name="name">mis.budget.by.account.item multi company</field>
<field name="model_id" ref="model_mis_budget_by_account_item" />
<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>
</record>
</flectra>

View File

@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="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>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
@ -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>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="id17">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="#changelog" id="id19">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="#id3" id="id21">13.0.3.4.0 (2020-01-??)</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="#id6" id="id23">11.0.3.3.0 (2019-01-13)</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="#id10" id="id25">11.0.3.2.0 (2018-05-02)</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="#id14" id="id27">10.0.3.1.0 (2017-11-14)</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="#usage" id="id19">Usage</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="id21">Changelog</a><ul>
<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="id23">13.0.3.5.0 (2020-03-28)</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="id25">12.0.3.4.0 (2019-10-26)</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="id27">11.0.3.2.1 (2018-06-30)</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="id29">11.0.3.1.1 (2018-02-04)</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>
</li>
<li><a class="reference internal" href="#bug-tracker" id="id29">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id30">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id31">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id32">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id33">Maintainers</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id32">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id33">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id34">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id35">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id36">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<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
GL accounts. Currently, the two methods cannot be combined in the same budget.</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>
</div>
<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>
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>
</div>
<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">
<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>
<ul class="simple">
<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>
</ul>
</div>
<div class="section" id="id3">
<h2><a class="toc-backref" href="#id21">13.0.3.4.0 (2020-01-??)</a></h2>
<div class="section" id="id5">
<h2><a class="toc-backref" href="#id24">13.0.3.4.0 (2020-01-??)</a></h2>
<p>Migration to odoo 13.0.</p>
</div>
<div class="section" id="id4">
<h2><a class="toc-backref" href="#id22">12.0.3.4.0 (2019-10-26)</a></h2>
<div class="section" id="id6">
<h2><a class="toc-backref" href="#id25">12.0.3.4.0 (2019-10-26)</a></h2>
<p><strong>Bugfixes</strong></p>
<ul class="simple">
<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>
</ul>
</div>
<div class="section" id="id6">
<h2><a class="toc-backref" href="#id23">11.0.3.3.0 (2019-01-13)</a></h2>
<div class="section" id="id8">
<h2><a class="toc-backref" href="#id26">11.0.3.3.0 (2019-01-13)</a></h2>
<p><strong>Features</strong></p>
<ul class="simple">
<li>Support analytic filters. (<a class="reference external" href="https://github.com/oca/mis-builder/issues/15">#15</a>)</li>
</ul>
</div>
<div class="section" id="id8">
<h2><a class="toc-backref" href="#id24">11.0.3.2.1 (2018-06-30)</a></h2>
<div class="section" id="id10">
<h2><a class="toc-backref" href="#id27">11.0.3.2.1 (2018-06-30)</a></h2>
<ul class="simple">
<li>[IMP] Support analytic tags in budget items
(<a class="reference external" href="https://github.com/OCA/mis-builder/pull/100">#100</a>)</li>
</ul>
</div>
<div class="section" id="id10">
<h2><a class="toc-backref" href="#id25">11.0.3.2.0 (2018-05-02)</a></h2>
<div class="section" id="id12">
<h2><a class="toc-backref" href="#id28">11.0.3.2.0 (2018-05-02)</a></h2>
<ul class="simple">
<li>[FIX] #NAME error in out-of-order computation of non
budgetable items in budget columns
(<a class="reference external" href="https://github.com/OCA/mis-builder/pull/69">#68</a>)</li>
</ul>
</div>
<div class="section" id="id12">
<h2><a class="toc-backref" href="#id26">11.0.3.1.1 (2018-02-04)</a></h2>
<div class="section" id="id14">
<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.
(<a class="reference external" href="https://github.com/OCA/mis-builder/pull/67">#67</a>)</p>
</div>
<div class="section" id="id14">
<h2><a class="toc-backref" href="#id27">10.0.3.1.0 (2017-11-14)</a></h2>
<div class="section" id="id16">
<h2><a class="toc-backref" href="#id30">10.0.3.1.0 (2017-11-14)</a></h2>
<p>New features:</p>
<ul class="simple">
<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>
</ul>
</div>
<div class="section" id="id16">
<h2><a class="toc-backref" href="#id28">10.0.1.1.1 (2017-10-01)</a></h2>
<div class="section" id="id18">
<h2><a class="toc-backref" href="#id31">10.0.1.1.1 (2017-10-01)</a></h2>
<p>First version.</p>
</div>
</div>
<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>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/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>
</div>
<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">
<h2><a class="toc-backref" href="#id31">Authors</a></h2>
<h2><a class="toc-backref" href="#id34">Authors</a></h2>
<ul class="simple">
<li>ACSONE SA/NV</li>
</ul>
</div>
<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">
<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>
@ -526,7 +534,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
</ul>
</div>
<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>
<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
@ -534,7 +542,7 @@ mission is to support the collaborative development of Odoo features and
promote its widespread use.</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>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>
</div>
</div>

View File

@ -14,13 +14,13 @@ MIS Builder Demo
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |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
.. |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
.. |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
|badge1| |badge2| |badge3| |badge4| |badge5|
@ -109,7 +109,7 @@ Bug Tracker
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.
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.
@ -148,6 +148,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|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.

View File

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

View File

@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \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_end is null or cur.date_end > coalesce(ai.invoice_date, now())))
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
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_end is null or cur.date_end > coalesce(ai.invoice_date, now())))
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
) AS mis_committed_purchase

View File

@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="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>
<div class="admonition important">
<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>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/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>
</div>
<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>
<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>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>
</div>
</div>