Browse Source

Merge pull request #355 from acsone/8.0-mv-mis_builder

[8.0][DEL] mis_builder moved to OCA/mis-builder
pull/228/merge
Stéphane Bidoul (ACSONE) 7 years ago
committed by GitHub
parent
commit
7258fe1f92
  1. 36
      mis_builder/CHANGES.rst
  2. 115
      mis_builder/README.rst
  3. 7
      mis_builder/__init__.py
  4. 42
      mis_builder/__openerp__.py
  5. 651
      mis_builder/i18n/de.po
  6. 645
      mis_builder/i18n/es_ES.po
  7. 645
      mis_builder/i18n/fr.po
  8. 645
      mis_builder/i18n/it.po
  9. 645
      mis_builder/i18n/lt.po
  10. 646
      mis_builder/i18n/nl.po
  11. 649
      mis_builder/i18n/sl.po
  12. 42
      mis_builder/migrations/8.0.0.2/pre-migration.py
  13. 6
      mis_builder/models/__init__.py
  14. 187
      mis_builder/models/accounting_none.py
  15. 366
      mis_builder/models/aep.py
  16. 129
      mis_builder/models/aggregate.py
  17. 884
      mis_builder/models/mis_builder.py
  18. 10
      mis_builder/report/__init__.py
  19. 120
      mis_builder/report/mis_builder_xls.py
  20. 50
      mis_builder/report/report_mis_report_instance.py
  21. 55
      mis_builder/report/report_mis_report_instance.xml
  22. 11
      mis_builder/security/ir.model.access.csv
  23. 13
      mis_builder/security/mis_builder_security.xml
  24. BIN
      mis_builder/static/description/ex_dashboard.png
  25. BIN
      mis_builder/static/description/ex_report.png
  26. BIN
      mis_builder/static/description/ex_report_template.png
  27. BIN
      mis_builder/static/description/icon.png
  28. 79
      mis_builder/static/description/icon.svg
  29. 75
      mis_builder/static/description/index.html
  30. 17
      mis_builder/static/src/css/custom.css
  31. BIN
      mis_builder/static/src/img/icon.png
  32. 139
      mis_builder/static/src/js/mis_builder.js
  33. 68
      mis_builder/static/src/xml/mis_widget.xml
  34. 5
      mis_builder/tests/__init__.py
  35. 2
      mis_builder/tests/mis.report.csv
  36. 2
      mis_builder/tests/mis.report.instance.csv
  37. 2
      mis_builder/tests/mis.report.instance.period.csv
  38. 2
      mis_builder/tests/mis.report.kpi.csv
  39. 2
      mis_builder/tests/mis.report.query.csv
  40. 63
      mis_builder/tests/test_mis_builder.py
  41. 222
      mis_builder/views/mis_builder.xml
  42. 5
      mis_builder/wizard/__init__.py
  43. 66
      mis_builder/wizard/mis_builder_dashboard.py
  44. 33
      mis_builder/wizard/mis_builder_dashboard.xml
  45. 46
      mis_builder_demo/README.rst
  46. 23
      mis_builder_demo/__init__.py
  47. 53
      mis_builder_demo/__openerp__.py
  48. 115
      mis_builder_demo/i18n/de.po
  49. 116
      mis_builder_demo/i18n/sl.po
  50. 3
      mis_builder_demo/mis.report.csv
  51. 3
      mis_builder_demo/mis.report.instance.csv
  52. 8
      mis_builder_demo/mis.report.instance.period.csv
  53. 10
      mis_builder_demo/mis.report.kpi.csv
  54. 3
      mis_builder_demo/mis.report.query.csv
  55. 1
      setup/mis_builder/odoo_addons/__init__.py
  56. 1
      setup/mis_builder/odoo_addons/mis_builder
  57. 6
      setup/mis_builder/setup.py
  58. 1
      setup/mis_builder_demo/odoo_addons/__init__.py
  59. 1
      setup/mis_builder_demo/odoo_addons/mis_builder_demo
  60. 6
      setup/mis_builder_demo/setup.py

36
mis_builder/CHANGES.rst

@ -1,36 +0,0 @@
Changelog
---------
.. Future (?)
.. ~~~~~~~~~~
..
.. *
8.0.1.0.0 (2016-04-27)
~~~~~~~~~~~~~~~~~~~~~~
* The copy of a MIS Report Instance now copies period.
https://github.com/OCA/account-financial-reporting/pull/181
* The copy of a MIS Report Template now copies KPIs and queries.
https://github.com/OCA/account-financial-reporting/pull/177
* Usability: the default view for MIS Report instances is now the rendered preview,
and the settings are accessible through a gear icon in the list view and
a button in the preview.
https://github.com/OCA/account-financial-reporting/pull/170
* Display blank cells instead of 0.0 when there is no data.
https://github.com/OCA/account-financial-reporting/pull/169
* Usability: better layout of the MIS Report periods settings on small screens.
https://github.com/OCA/account-financial-reporting/pull/167
* Include the download buttons inside the MIS Builder widget, and refactor
the widget to open the door to analytic filtering in the previews.
https://github.com/OCA/account-financial-reporting/pull/151
* Add KPI rendering prefixes (so you can print $ in front of the value).
https://github.com/OCA/account-financial-reporting/pull/158
* Add hooks for analytic filtering.
https://github.com/OCA/account-financial-reporting/pull/128
https://github.com/OCA/account-financial-reporting/pull/131
8.0.0.2.0
~~~~~~~~~
Pre-history. Or rather, you need to look at the git log.

115
mis_builder/README.rst

@ -1,115 +0,0 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
===========
MIS Builder
===========
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
from arbitrary Odoo models. Reports can be exported to PDF, Excel and they
can be added to Odoo dashboards.
Installation
============
There is no specific installation procedure for this module.
Configuration and Usage
=======================
To configure this module, you need to:
* Go to Accounting > Configuration > Financial Reports > MIS Report Templates where
you can create report templates by defining KPI's. KPI's constitute the rows of your
reports. Such report templates are time independent.
.. figure:: static/description/ex_report_template.png
:scale: 80 %
:alt: Sample report template
* Then in Accounting > Reporting > MIS Reports you can create report instance by
binding the templates to time period, hence defining the columns of your reports.
.. figure:: static/description/ex_report.png
:alt: Sample report configuration
* From the MIS Report view, you can preview the report, add it to and Odoo dashboard,
and export it to PDF or Excel.
.. figure:: static/description/ex_dashboard.png
:alt: Sample dashboard view
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/91/8.0
For further information, please visit:
* https://www.odoo.com/forum/help-1
Developer notes
===============
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
selection. A typical use case could be to add an analytic account field on mis.report.instance,
or even on mis.report.instance.period if you want different columns to show different
analytic accounts.
Known issues / Roadmap
======================
* Add 'Fiscal Year' period type.
* Allow selecting accounts by type. This is currently possible by expressing
a query such as balp[][('account_id.user_type.code', '=', ...)]. This will work
but would be more efficient if one could write balp[user_type=...], as it would
involve much less queries to the database.
* More tests should be added. The first part is creating test data, then it will be
easier. At the minimum, We need the following test data:
* one account charts with a few normal accounts and view accounts,
* two fiscal years,
* an opening entry in the second fiscal year,
* to test multi-company consolidation, we need a second company with it's own
account chart and two fiscal years, but without opening entry; we also need
a third company which is the parent of the other two and has a consolidation
chart of account.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-financial-reporting/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
`here <https://github.com/OCA/account-financial-reporting/issues/new?body=module:%20mis_builder%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Contributors
------------
* Stéphane Bidoul <stephane.bidoul@acsone.eu>
* Laetitia Gangloff <laetitia.gangloff@acsone.eu>
* Adrien Peiffer <adrien.peiffer@acsone.eu>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.

7
mis_builder/__init__.py

@ -1,7 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import models
from . import wizard
from . import report

42
mis_builder/__openerp__.py

@ -1,42 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
'name': 'MIS Builder',
'version': '8.0.1.0.0',
'category': 'Reporting',
'summary': """
Build 'Management Information System' Reports and Dashboards
""",
'author': 'ACSONE SA/NV,'
'Odoo Community Association (OCA)',
'website': 'http://acsone.eu',
'depends': [
'account',
'report_xls', # OCA/reporting-engine
],
'data': [
'wizard/mis_builder_dashboard.xml',
'views/mis_builder.xml',
'security/ir.model.access.csv',
'security/mis_builder_security.xml',
'report/report_mis_report_instance.xml',
],
'test': [
],
'demo': [
'tests/mis.report.kpi.csv',
'tests/mis.report.query.csv',
'tests/mis.report.csv',
'tests/mis.report.instance.period.csv',
'tests/mis.report.instance.csv',
],
'qweb': [
'static/src/xml/*.xml'
],
'installable': True,
'application': True,
'auto_install': False,
'license': 'AGPL-3',
}

651
mis_builder/i18n/de.po

@ -1,651 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mis_builder
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-27 17:33+0000\n"
"PO-Revision-Date: 2017-04-27 17:33+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:290
#: code:addons/mis_builder/models/mis_builder.py:734
#, python-format
msgid "%s (copy)"
msgstr "%s (Kopie)"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:869
#, python-format
msgid "%s vs %s"
msgstr "%s vs. %s"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'accounts' is a comma-separated list of account codes, possibly containing %"
" wildcards"
msgstr ""
"'accounts' ist eine Komma-getrennte Liste von Kontoschlüsseln, die "
"möglicherweise % Wildcards enthalten"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'domain' is an optional filter on move lines (eg to filter on analytic "
"accounts or journal)"
msgstr ""
"'domain' ist ein optionaler Filter auf Buchungspositionen (z.B. Filterung "
"auf Kostenstellen oder Journal)"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bal for balance (debit - credit)"
msgstr "* sld für Saldo (Soll - Haben)"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"* bal[70]: variation of the balance of account 70 over the period (it is the"
" same as balp[70]);"
msgstr ""
"* sld[70]: Variation des Saldos aus Konto 70 zur Periode (Ist identisch mit "
"sldp[70]);"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bale[1%]: balance of accounts starting with 1 at end of period."
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bali[70,60]: initial balance of accounts 70 and 60;"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* crd for credit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* deb for debit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* e: at the end of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* i: at the beginning of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* nothing or p: variation over the period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,root_account:0
msgid "Account chart"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_add_to_dashboard_action
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Add to dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,aggregate:0
msgid "Aggregate"
msgstr ""
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Entries"
msgstr "Alle Posten"
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Posted Entries"
msgstr "Alle gebuchten Posten"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:240
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Average"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,date:0
msgid "Base date"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,css_style:0
msgid "CSS style expression"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "Cancel"
msgstr "Abbrechen"
#. module: mis_builder
#: field:mis.report.instance,company_id:0
msgid "Company"
msgstr "Unternehmen"
#. module: mis_builder
#: field:mis.report.instance.period,comparison_column_ids:0
msgid "Compare with"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,compare_method:0
msgid "Comparison Method"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_uid:0
#: field:mis.report,create_uid:0 field:mis.report.instance,create_uid:0
#: field:mis.report.instance.period,create_uid:0
#: field:mis.report.kpi,create_uid:0 field:mis.report.query,create_uid:0
msgid "Created by"
msgstr "Angelegt durch"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_date:0
#: field:mis.report,create_date:0 field:mis.report.instance,create_date:0
#: field:mis.report.instance.period,create_date:0
#: field:mis.report.kpi,create_date:0 field:mis.report.query,create_date:0
msgid "Created on"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,dashboard_id:0
msgid "Dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,date_field:0
msgid "Date field"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:566
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Day"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,default_css_style:0
msgid "Default CSS style"
msgstr ""
#. module: mis_builder
#: field:mis.report,description:0 field:mis.report.instance,description:0
#: field:mis.report.instance.period,name:0 field:mis.report.kpi,description:0
msgid "Description"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:92
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "Difference"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,display_name:0
#: field:mis.report,display_name:0 field:mis.report.instance,display_name:0
#: field:mis.report.instance.period,display_name:0
#: field:mis.report.kpi,display_name:0 field:mis.report.query,display_name:0
#: field:report.mis_builder.report_mis_report_instance,display_name:0
msgid "Display Name"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,domain:0
msgid "Domain"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,duration:0
msgid "Duration"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Examples"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:6
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Export"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,expression:0
msgid "Expression"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Expressions are of the form <field><mode>[accounts][domain]"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,normalize_factor:0
#: field:mis.report.kpi,divider:0
msgid "Factor"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,normalize_factor:0
msgid "Factor to use to normalize the period (used in comparison"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_names:0
msgid "Fetched fields name"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_ids:0
msgid "Fields to fetch"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:568
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Fiscal Period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_from:0
msgid "From"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_from:0
msgid "From period"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,id:0 field:mis.report,id:0
#: field:mis.report.instance,id:0 field:mis.report.instance.period,id:0
#: field:mis.report.kpi,id:0 field:mis.report.query,id:0
#: field:report.mis_builder.report_mis_report_instance,id:0
msgid "ID"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form field:mis.report,kpi_ids:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "KPI's"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,landscape_pdf:0
msgid "Landscape PDF"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,__last_update:0
#: field:mis.report,__last_update:0 field:mis.report.instance,__last_update:0
#: field:mis.report.instance.period,__last_update:0
#: field:mis.report.kpi,__last_update:0 field:mis.report.query,__last_update:0
#: field:report.mis_builder.report_mis_report_instance,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_uid:0
#: field:mis.report,write_uid:0 field:mis.report.instance,write_uid:0
#: field:mis.report.instance.period,write_uid:0
#: field:mis.report.kpi,write_uid:0 field:mis.report.query,write_uid:0
msgid "Last Updated by"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_date:0
#: field:mis.report,write_date:0 field:mis.report.instance,write_date:0
#: field:mis.report.instance.period,write_date:0
#: field:mis.report.kpi,write_date:0 field:mis.report.query,write_date:0
msgid "Last Updated on"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Legend (for kpi expressions)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "MIS Report"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "MIS Report Instance"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_tree
msgid "MIS Report Instances"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_result_view_form
msgid "MIS Report Result"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_view_menu
msgid "MIS Report Templates"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_instance_view_menu
#: view:mis.report:mis_builder.mis_report_view_tree
msgid "MIS Reports"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.qweb_pdf_export
msgid "MIS report instance QWEB PDF report"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.xls_export
msgid "MIS report instance XLS report"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:242
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Max"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:241
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Min"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,model_id:0
msgid "Model"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/aep.py:305
#, python-format
msgid "Modes i and e are only applicable for fiscal periods"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,name:0
#: field:mis.report,name:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,name:0 field:mis.report.kpi,name:0
#: field:mis.report.query,name:0
msgid "Name"
msgstr "Bezeichnung"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:94
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "None"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,duration:0
msgid "Number of periods"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:76
#: selection:mis.report.kpi,type:0
#, python-format
msgid "Numeric"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,offset:0
msgid "Offset"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,offset:0
msgid "Offset from current period"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:77
#: code:addons/mis_builder/models/mis_builder.py:93
#: selection:mis.report.kpi,compare_method:0 selection:mis.report.kpi,type:0
#, python-format
msgid "Percentage"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Period name should be unique by report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,type:0
msgid "Period type"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,period_ids:0
msgid "Periods"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,pivot_date:0
msgid "Pivot date"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'field' can be:"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'mode' are:"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,prefix:0
msgid "Prefix"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Preview"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:5
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Print"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
#: field:mis.report,query_ids:0
msgid "Queries"
msgstr ""
#. module: mis_builder
#: model:ir.model,name:mis_builder.model_report
#: field:mis.report.instance,report_id:0 field:mis.report.kpi,report_id:0
#: field:mis.report.query,report_id:0
msgid "Report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,report_instance_id:0
msgid "Report Instance"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance,date:0
msgid "Report base date (leave empty to use current date)"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,dp:0
msgid "Rounding"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,sequence:0 field:mis.report.kpi,sequence:0
msgid "Sequence"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:7
#, python-format
msgid "Settings"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:78
#: selection:mis.report.kpi,type:0
#, python-format
msgid "String"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,suffix:0
msgid "Suffix"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:239
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Sum"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,target_move:0
msgid "Target Moves"
msgstr ""
#. module: mis_builder
#: model:mis.report,name:mis_builder.mis_report_test
msgid "Test report"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance,name:mis_builder.mis_report_instance_test
msgid "Test-report-instance without company"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_to:0
msgid "To"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_to:0
msgid "To period"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,type:0
msgid "Type"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,valid:0
msgid "Valid"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:567
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Week"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong duration, it must be positive!"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong normalize factor, it must be positive!"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:849
#, python-format
msgid "from %s to %s"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "or"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:172
#, python-format
msgid "pp"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance.period,name:mis_builder.mis_report_instance_period_test
msgid "today"
msgstr ""
#. module: mis_builder
#: model:mis.report.kpi,description:mis_builder.mis_report_kpi_test
msgid "total test"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:82
#: selection:mis.report.kpi,divider:0
#, python-format
msgid "µ"
msgstr ""

645
mis_builder/i18n/es_ES.po

@ -1,645 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mis_builder
#
# Translators:
# Hugo Santos <hugo.santos@factorlibre.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-17 12:52+0000\n"
"PO-Revision-Date: 2017-02-17 12:52+0000\n"
"Last-Translator: Hugo Santos <hugo.santos@factorlibre.com>, 2017\n"
"Language-Team: Spanish (Spain) (https://www.transifex.com/oca/teams/23907/es_ES/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: es_ES\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:290
#: code:addons/mis_builder/models/mis_builder.py:724
#, python-format
msgid "%s (copy)"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:859
#, python-format
msgid "%s vs %s"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'accounts' is a comma-separated list of account codes, possibly containing %"
" wildcards"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'domain' is an optional filter on move lines (eg to filter on analytic "
"accounts or journal)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bal for balance (debit - credit)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"* bal[70]: variation of the balance of account 70 over the period (it is the"
" same as balp[70]);"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bale[1%]: balance of accounts starting with 1 at end of period."
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bali[70,60]: initial balance of accounts 70 and 60;"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* crd for credit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* deb for debit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* e: at the end of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* i: at the beginning of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* nothing or p: variation over the period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,root_account:0
msgid "Account chart"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_add_to_dashboard_action
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Add to dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,aggregate:0
msgid "Aggregate"
msgstr ""
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Entries"
msgstr "Todos los asientos"
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Posted Entries"
msgstr "Todos los asientos asentados"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:240
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Average"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,date:0
msgid "Base date"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,css_style:0
msgid "CSS style expression"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "Cancel"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,company_id:0
msgid "Company"
msgstr "Compañía"
#. module: mis_builder
#: field:mis.report.instance.period,comparison_column_ids:0
msgid "Compare with"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,compare_method:0
msgid "Comparison Method"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_uid:0
#: field:mis.report,create_uid:0 field:mis.report.instance,create_uid:0
#: field:mis.report.instance.period,create_uid:0
#: field:mis.report.kpi,create_uid:0 field:mis.report.query,create_uid:0
msgid "Created by"
msgstr "Creado por"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_date:0
#: field:mis.report,create_date:0 field:mis.report.instance,create_date:0
#: field:mis.report.instance.period,create_date:0
#: field:mis.report.kpi,create_date:0 field:mis.report.query,create_date:0
msgid "Created on"
msgstr "Creado el"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,dashboard_id:0
msgid "Dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,date_field:0
msgid "Date field"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:556
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Day"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,default_css_style:0
msgid "Default CSS style"
msgstr ""
#. module: mis_builder
#: field:mis.report,description:0 field:mis.report.instance,description:0
#: field:mis.report.instance.period,name:0 field:mis.report.kpi,description:0
msgid "Description"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:92
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "Difference"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,display_name:0
#: field:mis.report,display_name:0 field:mis.report.instance,display_name:0
#: field:mis.report.instance.period,display_name:0
#: field:mis.report.kpi,display_name:0 field:mis.report.query,display_name:0
#: field:report.mis_builder.report_mis_report_instance,display_name:0
msgid "Display Name"
msgstr "Nombre a mostrar"
#. module: mis_builder
#: field:mis.report.query,domain:0
msgid "Domain"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,duration:0
msgid "Duration"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Examples"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:6
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Export"
msgstr "Exportar"
#. module: mis_builder
#: field:mis.report.kpi,expression:0
msgid "Expression"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Expressions are of the form <field><mode>[accounts][domain]"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,normalize_factor:0
#: field:mis.report.kpi,divider:0
msgid "Factor"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,normalize_factor:0
msgid "Factor to use to normalize the period (used in comparison"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_names:0
msgid "Fetched fields name"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_ids:0
msgid "Fields to fetch"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:558
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Fiscal Period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_from:0
msgid "From"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_from:0
msgid "From period"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,id:0 field:mis.report,id:0
#: field:mis.report.instance,id:0 field:mis.report.instance.period,id:0
#: field:mis.report.kpi,id:0 field:mis.report.query,id:0
#: field:report.mis_builder.report_mis_report_instance,id:0
msgid "ID"
msgstr "ID"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form field:mis.report,kpi_ids:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "KPI's"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,landscape_pdf:0
msgid "Landscape PDF"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,__last_update:0
#: field:mis.report,__last_update:0 field:mis.report.instance,__last_update:0
#: field:mis.report.instance.period,__last_update:0
#: field:mis.report.kpi,__last_update:0 field:mis.report.query,__last_update:0
#: field:report.mis_builder.report_mis_report_instance,__last_update:0
msgid "Last Modified on"
msgstr "Última modificación en"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_uid:0
#: field:mis.report,write_uid:0 field:mis.report.instance,write_uid:0
#: field:mis.report.instance.period,write_uid:0
#: field:mis.report.kpi,write_uid:0 field:mis.report.query,write_uid:0
msgid "Last Updated by"
msgstr "Última actualización de"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_date:0
#: field:mis.report,write_date:0 field:mis.report.instance,write_date:0
#: field:mis.report.instance.period,write_date:0
#: field:mis.report.kpi,write_date:0 field:mis.report.query,write_date:0
msgid "Last Updated on"
msgstr "Última actualización en"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Legend (for kpi expressions)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "MIS Report"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "MIS Report Instance"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_tree
msgid "MIS Report Instances"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_result_view_form
msgid "MIS Report Result"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_view_menu
msgid "MIS Report Templates"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_instance_view_menu
#: view:mis.report:mis_builder.mis_report_view_tree
msgid "MIS Reports"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.qweb_pdf_export
msgid "MIS report instance QWEB PDF report"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.xls_export
msgid "MIS report instance XLS report"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:242
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Max"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:241
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Min"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,model_id:0
msgid "Model"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/aep.py:305
#, python-format
msgid "Modes i and e are only applicable for fiscal periods"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,name:0
#: field:mis.report,name:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,name:0 field:mis.report.kpi,name:0
#: field:mis.report.query,name:0
msgid "Name"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:94
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "None"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,duration:0
msgid "Number of periods"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:76
#: selection:mis.report.kpi,type:0
#, python-format
msgid "Numeric"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,offset:0
msgid "Offset"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,offset:0
msgid "Offset from current period"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:77
#: code:addons/mis_builder/models/mis_builder.py:93
#: selection:mis.report.kpi,compare_method:0 selection:mis.report.kpi,type:0
#, python-format
msgid "Percentage"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Period name should be unique by report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,type:0
msgid "Period type"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,period_ids:0
msgid "Periods"
msgstr "Periodos"
#. module: mis_builder
#: field:mis.report.instance,pivot_date:0
msgid "Pivot date"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'field' can be:"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'mode' are:"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,prefix:0
msgid "Prefix"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Preview"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:5
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Print"
msgstr "Imprimir"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
#: field:mis.report,query_ids:0
msgid "Queries"
msgstr ""
#. module: mis_builder
#: model:ir.model,name:mis_builder.model_report
#: field:mis.report.instance,report_id:0 field:mis.report.kpi,report_id:0
#: field:mis.report.query,report_id:0
msgid "Report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,report_instance_id:0
msgid "Report Instance"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance,date:0
msgid "Report base date (leave empty to use current date)"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,dp:0
msgid "Rounding"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,sequence:0 field:mis.report.kpi,sequence:0
msgid "Sequence"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:7
#, python-format
msgid "Settings"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:78
#: selection:mis.report.kpi,type:0
#, python-format
msgid "String"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,suffix:0
msgid "Suffix"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:239
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Sum"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,target_move:0
msgid "Target Moves"
msgstr "Movimientos de destino"
#. module: mis_builder
#: model:mis.report,name:mis_builder.mis_report_test
msgid "Test report"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance,name:mis_builder.mis_report_instance_test
msgid "Test-report-instance without company"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_to:0
msgid "To"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_to:0
msgid "To period"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,type:0
msgid "Type"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,valid:0
msgid "Valid"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:557
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Week"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong duration, it must be positive!"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong normalize factor, it must be positive!"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:839
#, python-format
msgid "from %s to %s"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "or"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:172
#, python-format
msgid "pp"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance.period,name:mis_builder.mis_report_instance_period_test
msgid "today"
msgstr ""
#. module: mis_builder
#: model:mis.report.kpi,description:mis_builder.mis_report_kpi_test
msgid "total test"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:82
#: selection:mis.report.kpi,divider:0
#, python-format
msgid "µ"
msgstr ""

645
mis_builder/i18n/fr.po

@ -1,645 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mis_builder
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-16 12:25+0000\n"
"PO-Revision-Date: 2016-12-16 12:25+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:290
#: code:addons/mis_builder/models/mis_builder.py:724
#, python-format
msgid "%s (copy)"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:859
#, python-format
msgid "%s vs %s"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'accounts' is a comma-separated list of account codes, possibly containing %"
" wildcards"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'domain' is an optional filter on move lines (eg to filter on analytic "
"accounts or journal)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bal for balance (debit - credit)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"* bal[70]: variation of the balance of account 70 over the period (it is the"
" same as balp[70]);"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bale[1%]: balance of accounts starting with 1 at end of period."
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bali[70,60]: initial balance of accounts 70 and 60;"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* crd for credit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* deb for debit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* e: at the end of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* i: at the beginning of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* nothing or p: variation over the period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,root_account:0
msgid "Account chart"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_add_to_dashboard_action
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Add to dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,aggregate:0
msgid "Aggregate"
msgstr ""
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Entries"
msgstr "Ecritures validées + brouillon"
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Posted Entries"
msgstr "Ecritures validées"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:240
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Average"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,date:0
msgid "Base date"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,css_style:0
msgid "CSS style expression"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "Cancel"
msgstr "Annuler"
#. module: mis_builder
#: field:mis.report.instance,company_id:0
msgid "Company"
msgstr "Société"
#. module: mis_builder
#: field:mis.report.instance.period,comparison_column_ids:0
msgid "Compare with"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,compare_method:0
msgid "Comparison Method"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_uid:0
#: field:mis.report,create_uid:0 field:mis.report.instance,create_uid:0
#: field:mis.report.instance.period,create_uid:0
#: field:mis.report.kpi,create_uid:0 field:mis.report.query,create_uid:0
msgid "Created by"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_date:0
#: field:mis.report,create_date:0 field:mis.report.instance,create_date:0
#: field:mis.report.instance.period,create_date:0
#: field:mis.report.kpi,create_date:0 field:mis.report.query,create_date:0
msgid "Created on"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,dashboard_id:0
msgid "Dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,date_field:0
msgid "Date field"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:556
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Day"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,default_css_style:0
msgid "Default CSS style"
msgstr ""
#. module: mis_builder
#: field:mis.report,description:0 field:mis.report.instance,description:0
#: field:mis.report.instance.period,name:0 field:mis.report.kpi,description:0
msgid "Description"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:92
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "Difference"
msgstr "Différence"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,display_name:0
#: field:mis.report,display_name:0 field:mis.report.instance,display_name:0
#: field:mis.report.instance.period,display_name:0
#: field:mis.report.kpi,display_name:0 field:mis.report.query,display_name:0
#: field:report.mis_builder.report_mis_report_instance,display_name:0
msgid "Display Name"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,domain:0
msgid "Domain"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,duration:0
msgid "Duration"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Examples"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:6
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Export"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,expression:0
msgid "Expression"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Expressions are of the form <field><mode>[accounts][domain]"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,normalize_factor:0
#: field:mis.report.kpi,divider:0
msgid "Factor"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,normalize_factor:0
msgid "Factor to use to normalize the period (used in comparison"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_names:0
msgid "Fetched fields name"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_ids:0
msgid "Fields to fetch"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:558
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Fiscal Period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_from:0
msgid "From"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_from:0
msgid "From period"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,id:0 field:mis.report,id:0
#: field:mis.report.instance,id:0 field:mis.report.instance.period,id:0
#: field:mis.report.kpi,id:0 field:mis.report.query,id:0
#: field:report.mis_builder.report_mis_report_instance,id:0
msgid "ID"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form field:mis.report,kpi_ids:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "KPI's"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,landscape_pdf:0
msgid "Landscape PDF"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,__last_update:0
#: field:mis.report,__last_update:0 field:mis.report.instance,__last_update:0
#: field:mis.report.instance.period,__last_update:0
#: field:mis.report.kpi,__last_update:0 field:mis.report.query,__last_update:0
#: field:report.mis_builder.report_mis_report_instance,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_uid:0
#: field:mis.report,write_uid:0 field:mis.report.instance,write_uid:0
#: field:mis.report.instance.period,write_uid:0
#: field:mis.report.kpi,write_uid:0 field:mis.report.query,write_uid:0
msgid "Last Updated by"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_date:0
#: field:mis.report,write_date:0 field:mis.report.instance,write_date:0
#: field:mis.report.instance.period,write_date:0
#: field:mis.report.kpi,write_date:0 field:mis.report.query,write_date:0
msgid "Last Updated on"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Legend (for kpi expressions)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "MIS Report"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "MIS Report Instance"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_tree
msgid "MIS Report Instances"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_result_view_form
msgid "MIS Report Result"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_view_menu
msgid "MIS Report Templates"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_instance_view_menu
#: view:mis.report:mis_builder.mis_report_view_tree
msgid "MIS Reports"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.qweb_pdf_export
msgid "MIS report instance QWEB PDF report"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.xls_export
msgid "MIS report instance XLS report"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:242
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Max"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:241
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Min"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,model_id:0
msgid "Model"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/aep.py:305
#, python-format
msgid "Modes i and e are only applicable for fiscal periods"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,name:0
#: field:mis.report,name:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,name:0 field:mis.report.kpi,name:0
#: field:mis.report.query,name:0
msgid "Name"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:94
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "None"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,duration:0
msgid "Number of periods"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:76
#: selection:mis.report.kpi,type:0
#, python-format
msgid "Numeric"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,offset:0
msgid "Offset"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,offset:0
msgid "Offset from current period"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:77
#: code:addons/mis_builder/models/mis_builder.py:93
#: selection:mis.report.kpi,compare_method:0 selection:mis.report.kpi,type:0
#, python-format
msgid "Percentage"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Period name should be unique by report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,type:0
msgid "Period type"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,period_ids:0
msgid "Periods"
msgstr "Périodes"
#. module: mis_builder
#: field:mis.report.instance,pivot_date:0
msgid "Pivot date"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'field' can be:"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'mode' are:"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,prefix:0
msgid "Prefix"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Preview"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:5
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Print"
msgstr "Imprimer"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
#: field:mis.report,query_ids:0
msgid "Queries"
msgstr ""
#. module: mis_builder
#: model:ir.model,name:mis_builder.model_report
#: field:mis.report.instance,report_id:0 field:mis.report.kpi,report_id:0
#: field:mis.report.query,report_id:0
msgid "Report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,report_instance_id:0
msgid "Report Instance"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance,date:0
msgid "Report base date (leave empty to use current date)"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,dp:0
msgid "Rounding"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,sequence:0 field:mis.report.kpi,sequence:0
msgid "Sequence"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:7
#, python-format
msgid "Settings"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:78
#: selection:mis.report.kpi,type:0
#, python-format
msgid "String"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,suffix:0
msgid "Suffix"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:239
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Sum"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,target_move:0
msgid "Target Moves"
msgstr "Filtre d'écritures"
#. module: mis_builder
#: model:mis.report,name:mis_builder.mis_report_test
msgid "Test report"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance,name:mis_builder.mis_report_instance_test
msgid "Test-report-instance without company"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_to:0
msgid "To"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_to:0
msgid "To period"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,type:0
msgid "Type"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,valid:0
msgid "Valid"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:557
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Week"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong duration, it must be positive!"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong normalize factor, it must be positive!"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:839
#, python-format
msgid "from %s to %s"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "or"
msgstr "ou"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:172
#, python-format
msgid "pp"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance.period,name:mis_builder.mis_report_instance_period_test
msgid "today"
msgstr ""
#. module: mis_builder
#: model:mis.report.kpi,description:mis_builder.mis_report_kpi_test
msgid "total test"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:82
#: selection:mis.report.kpi,divider:0
#, python-format
msgid "µ"
msgstr ""

645
mis_builder/i18n/it.po

@ -1,645 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mis_builder
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-16 12:25+0000\n"
"PO-Revision-Date: 2016-12-16 12:25+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:290
#: code:addons/mis_builder/models/mis_builder.py:724
#, python-format
msgid "%s (copy)"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:859
#, python-format
msgid "%s vs %s"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'accounts' is a comma-separated list of account codes, possibly containing %"
" wildcards"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'domain' is an optional filter on move lines (eg to filter on analytic "
"accounts or journal)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bal for balance (debit - credit)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"* bal[70]: variation of the balance of account 70 over the period (it is the"
" same as balp[70]);"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bale[1%]: balance of accounts starting with 1 at end of period."
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bali[70,60]: initial balance of accounts 70 and 60;"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* crd for credit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* deb for debit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* e: at the end of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* i: at the beginning of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* nothing or p: variation over the period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,root_account:0
msgid "Account chart"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_add_to_dashboard_action
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Add to dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,aggregate:0
msgid "Aggregate"
msgstr ""
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Entries"
msgstr "Tutte le Registrazioni"
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Posted Entries"
msgstr "Tutte le registrazioni Pubblicate"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:240
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Average"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,date:0
msgid "Base date"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,css_style:0
msgid "CSS style expression"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "Cancel"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,company_id:0
msgid "Company"
msgstr "Azienda"
#. module: mis_builder
#: field:mis.report.instance.period,comparison_column_ids:0
msgid "Compare with"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,compare_method:0
msgid "Comparison Method"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_uid:0
#: field:mis.report,create_uid:0 field:mis.report.instance,create_uid:0
#: field:mis.report.instance.period,create_uid:0
#: field:mis.report.kpi,create_uid:0 field:mis.report.query,create_uid:0
msgid "Created by"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_date:0
#: field:mis.report,create_date:0 field:mis.report.instance,create_date:0
#: field:mis.report.instance.period,create_date:0
#: field:mis.report.kpi,create_date:0 field:mis.report.query,create_date:0
msgid "Created on"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,dashboard_id:0
msgid "Dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,date_field:0
msgid "Date field"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:556
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Day"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,default_css_style:0
msgid "Default CSS style"
msgstr ""
#. module: mis_builder
#: field:mis.report,description:0 field:mis.report.instance,description:0
#: field:mis.report.instance.period,name:0 field:mis.report.kpi,description:0
msgid "Description"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:92
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "Difference"
msgstr "Differenze"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,display_name:0
#: field:mis.report,display_name:0 field:mis.report.instance,display_name:0
#: field:mis.report.instance.period,display_name:0
#: field:mis.report.kpi,display_name:0 field:mis.report.query,display_name:0
#: field:report.mis_builder.report_mis_report_instance,display_name:0
msgid "Display Name"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,domain:0
msgid "Domain"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,duration:0
msgid "Duration"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Examples"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:6
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Export"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,expression:0
msgid "Expression"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Expressions are of the form <field><mode>[accounts][domain]"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,normalize_factor:0
#: field:mis.report.kpi,divider:0
msgid "Factor"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,normalize_factor:0
msgid "Factor to use to normalize the period (used in comparison"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_names:0
msgid "Fetched fields name"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_ids:0
msgid "Fields to fetch"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:558
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Fiscal Period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_from:0
msgid "From"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_from:0
msgid "From period"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,id:0 field:mis.report,id:0
#: field:mis.report.instance,id:0 field:mis.report.instance.period,id:0
#: field:mis.report.kpi,id:0 field:mis.report.query,id:0
#: field:report.mis_builder.report_mis_report_instance,id:0
msgid "ID"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form field:mis.report,kpi_ids:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "KPI's"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,landscape_pdf:0
msgid "Landscape PDF"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,__last_update:0
#: field:mis.report,__last_update:0 field:mis.report.instance,__last_update:0
#: field:mis.report.instance.period,__last_update:0
#: field:mis.report.kpi,__last_update:0 field:mis.report.query,__last_update:0
#: field:report.mis_builder.report_mis_report_instance,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_uid:0
#: field:mis.report,write_uid:0 field:mis.report.instance,write_uid:0
#: field:mis.report.instance.period,write_uid:0
#: field:mis.report.kpi,write_uid:0 field:mis.report.query,write_uid:0
msgid "Last Updated by"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_date:0
#: field:mis.report,write_date:0 field:mis.report.instance,write_date:0
#: field:mis.report.instance.period,write_date:0
#: field:mis.report.kpi,write_date:0 field:mis.report.query,write_date:0
msgid "Last Updated on"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Legend (for kpi expressions)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "MIS Report"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "MIS Report Instance"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_tree
msgid "MIS Report Instances"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_result_view_form
msgid "MIS Report Result"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_view_menu
msgid "MIS Report Templates"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_instance_view_menu
#: view:mis.report:mis_builder.mis_report_view_tree
msgid "MIS Reports"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.qweb_pdf_export
msgid "MIS report instance QWEB PDF report"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.xls_export
msgid "MIS report instance XLS report"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:242
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Max"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:241
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Min"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,model_id:0
msgid "Model"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/aep.py:305
#, python-format
msgid "Modes i and e are only applicable for fiscal periods"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,name:0
#: field:mis.report,name:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,name:0 field:mis.report.kpi,name:0
#: field:mis.report.query,name:0
msgid "Name"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:94
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "None"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,duration:0
msgid "Number of periods"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:76
#: selection:mis.report.kpi,type:0
#, python-format
msgid "Numeric"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,offset:0
msgid "Offset"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,offset:0
msgid "Offset from current period"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:77
#: code:addons/mis_builder/models/mis_builder.py:93
#: selection:mis.report.kpi,compare_method:0 selection:mis.report.kpi,type:0
#, python-format
msgid "Percentage"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Period name should be unique by report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,type:0
msgid "Period type"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,period_ids:0
msgid "Periods"
msgstr "Periodi"
#. module: mis_builder
#: field:mis.report.instance,pivot_date:0
msgid "Pivot date"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'field' can be:"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'mode' are:"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,prefix:0
msgid "Prefix"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Preview"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:5
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Print"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
#: field:mis.report,query_ids:0
msgid "Queries"
msgstr ""
#. module: mis_builder
#: model:ir.model,name:mis_builder.model_report
#: field:mis.report.instance,report_id:0 field:mis.report.kpi,report_id:0
#: field:mis.report.query,report_id:0
msgid "Report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,report_instance_id:0
msgid "Report Instance"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance,date:0
msgid "Report base date (leave empty to use current date)"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,dp:0
msgid "Rounding"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,sequence:0 field:mis.report.kpi,sequence:0
msgid "Sequence"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:7
#, python-format
msgid "Settings"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:78
#: selection:mis.report.kpi,type:0
#, python-format
msgid "String"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,suffix:0
msgid "Suffix"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:239
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Sum"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,target_move:0
msgid "Target Moves"
msgstr "Registrazioni:"
#. module: mis_builder
#: model:mis.report,name:mis_builder.mis_report_test
msgid "Test report"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance,name:mis_builder.mis_report_instance_test
msgid "Test-report-instance without company"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_to:0
msgid "To"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_to:0
msgid "To period"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,type:0
msgid "Type"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,valid:0
msgid "Valid"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:557
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Week"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong duration, it must be positive!"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong normalize factor, it must be positive!"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:839
#, python-format
msgid "from %s to %s"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "or"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:172
#, python-format
msgid "pp"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance.period,name:mis_builder.mis_report_instance_period_test
msgid "today"
msgstr ""
#. module: mis_builder
#: model:mis.report.kpi,description:mis_builder.mis_report_kpi_test
msgid "total test"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:82
#: selection:mis.report.kpi,divider:0
#, python-format
msgid "µ"
msgstr ""

645
mis_builder/i18n/lt.po

@ -1,645 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mis_builder
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-16 12:25+0000\n"
"PO-Revision-Date: 2016-12-16 12:25+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"Language-Team: Lithuanian (https://www.transifex.com/oca/teams/23907/lt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: lt\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:290
#: code:addons/mis_builder/models/mis_builder.py:724
#, python-format
msgid "%s (copy)"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:859
#, python-format
msgid "%s vs %s"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'accounts' is a comma-separated list of account codes, possibly containing %"
" wildcards"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'domain' is an optional filter on move lines (eg to filter on analytic "
"accounts or journal)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bal for balance (debit - credit)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"* bal[70]: variation of the balance of account 70 over the period (it is the"
" same as balp[70]);"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bale[1%]: balance of accounts starting with 1 at end of period."
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bali[70,60]: initial balance of accounts 70 and 60;"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* crd for credit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* deb for debit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* e: at the end of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* i: at the beginning of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* nothing or p: variation over the period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,root_account:0
msgid "Account chart"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_add_to_dashboard_action
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Add to dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,aggregate:0
msgid "Aggregate"
msgstr ""
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Entries"
msgstr "Visi įrašai"
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Posted Entries"
msgstr "Visi paskelbti įrašai"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:240
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Average"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,date:0
msgid "Base date"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,css_style:0
msgid "CSS style expression"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "Cancel"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,company_id:0
msgid "Company"
msgstr "Įmonė"
#. module: mis_builder
#: field:mis.report.instance.period,comparison_column_ids:0
msgid "Compare with"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,compare_method:0
msgid "Comparison Method"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_uid:0
#: field:mis.report,create_uid:0 field:mis.report.instance,create_uid:0
#: field:mis.report.instance.period,create_uid:0
#: field:mis.report.kpi,create_uid:0 field:mis.report.query,create_uid:0
msgid "Created by"
msgstr "Sukūrė"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_date:0
#: field:mis.report,create_date:0 field:mis.report.instance,create_date:0
#: field:mis.report.instance.period,create_date:0
#: field:mis.report.kpi,create_date:0 field:mis.report.query,create_date:0
msgid "Created on"
msgstr "Sukurta"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,dashboard_id:0
msgid "Dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,date_field:0
msgid "Date field"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:556
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Day"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,default_css_style:0
msgid "Default CSS style"
msgstr ""
#. module: mis_builder
#: field:mis.report,description:0 field:mis.report.instance,description:0
#: field:mis.report.instance.period,name:0 field:mis.report.kpi,description:0
msgid "Description"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:92
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "Difference"
msgstr "Skirtumas"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,display_name:0
#: field:mis.report,display_name:0 field:mis.report.instance,display_name:0
#: field:mis.report.instance.period,display_name:0
#: field:mis.report.kpi,display_name:0 field:mis.report.query,display_name:0
#: field:report.mis_builder.report_mis_report_instance,display_name:0
msgid "Display Name"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,domain:0
msgid "Domain"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,duration:0
msgid "Duration"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Examples"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:6
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Export"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,expression:0
msgid "Expression"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Expressions are of the form <field><mode>[accounts][domain]"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,normalize_factor:0
#: field:mis.report.kpi,divider:0
msgid "Factor"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,normalize_factor:0
msgid "Factor to use to normalize the period (used in comparison"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_names:0
msgid "Fetched fields name"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_ids:0
msgid "Fields to fetch"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:558
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Fiscal Period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_from:0
msgid "From"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_from:0
msgid "From period"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,id:0 field:mis.report,id:0
#: field:mis.report.instance,id:0 field:mis.report.instance.period,id:0
#: field:mis.report.kpi,id:0 field:mis.report.query,id:0
#: field:report.mis_builder.report_mis_report_instance,id:0
msgid "ID"
msgstr "ID"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form field:mis.report,kpi_ids:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "KPI's"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,landscape_pdf:0
msgid "Landscape PDF"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,__last_update:0
#: field:mis.report,__last_update:0 field:mis.report.instance,__last_update:0
#: field:mis.report.instance.period,__last_update:0
#: field:mis.report.kpi,__last_update:0 field:mis.report.query,__last_update:0
#: field:report.mis_builder.report_mis_report_instance,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_uid:0
#: field:mis.report,write_uid:0 field:mis.report.instance,write_uid:0
#: field:mis.report.instance.period,write_uid:0
#: field:mis.report.kpi,write_uid:0 field:mis.report.query,write_uid:0
msgid "Last Updated by"
msgstr "Paskutinį kartą atnaujino"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_date:0
#: field:mis.report,write_date:0 field:mis.report.instance,write_date:0
#: field:mis.report.instance.period,write_date:0
#: field:mis.report.kpi,write_date:0 field:mis.report.query,write_date:0
msgid "Last Updated on"
msgstr "Paskutinį kartą atnaujinta"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Legend (for kpi expressions)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "MIS Report"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "MIS Report Instance"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_tree
msgid "MIS Report Instances"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_result_view_form
msgid "MIS Report Result"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_view_menu
msgid "MIS Report Templates"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_instance_view_menu
#: view:mis.report:mis_builder.mis_report_view_tree
msgid "MIS Reports"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.qweb_pdf_export
msgid "MIS report instance QWEB PDF report"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.xls_export
msgid "MIS report instance XLS report"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:242
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Max"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:241
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Min"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,model_id:0
msgid "Model"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/aep.py:305
#, python-format
msgid "Modes i and e are only applicable for fiscal periods"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,name:0
#: field:mis.report,name:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,name:0 field:mis.report.kpi,name:0
#: field:mis.report.query,name:0
msgid "Name"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:94
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "None"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,duration:0
msgid "Number of periods"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:76
#: selection:mis.report.kpi,type:0
#, python-format
msgid "Numeric"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,offset:0
msgid "Offset"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,offset:0
msgid "Offset from current period"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:77
#: code:addons/mis_builder/models/mis_builder.py:93
#: selection:mis.report.kpi,compare_method:0 selection:mis.report.kpi,type:0
#, python-format
msgid "Percentage"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Period name should be unique by report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,type:0
msgid "Period type"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,period_ids:0
msgid "Periods"
msgstr "Periodai"
#. module: mis_builder
#: field:mis.report.instance,pivot_date:0
msgid "Pivot date"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'field' can be:"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'mode' are:"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,prefix:0
msgid "Prefix"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Preview"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:5
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Print"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
#: field:mis.report,query_ids:0
msgid "Queries"
msgstr ""
#. module: mis_builder
#: model:ir.model,name:mis_builder.model_report
#: field:mis.report.instance,report_id:0 field:mis.report.kpi,report_id:0
#: field:mis.report.query,report_id:0
msgid "Report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,report_instance_id:0
msgid "Report Instance"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance,date:0
msgid "Report base date (leave empty to use current date)"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,dp:0
msgid "Rounding"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,sequence:0 field:mis.report.kpi,sequence:0
msgid "Sequence"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:7
#, python-format
msgid "Settings"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:78
#: selection:mis.report.kpi,type:0
#, python-format
msgid "String"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,suffix:0
msgid "Suffix"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:239
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Sum"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,target_move:0
msgid "Target Moves"
msgstr "Judėjimas"
#. module: mis_builder
#: model:mis.report,name:mis_builder.mis_report_test
msgid "Test report"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance,name:mis_builder.mis_report_instance_test
msgid "Test-report-instance without company"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_to:0
msgid "To"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_to:0
msgid "To period"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,type:0
msgid "Type"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,valid:0
msgid "Valid"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:557
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Week"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong duration, it must be positive!"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong normalize factor, it must be positive!"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:839
#, python-format
msgid "from %s to %s"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "or"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:172
#, python-format
msgid "pp"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance.period,name:mis_builder.mis_report_instance_period_test
msgid "today"
msgstr ""
#. module: mis_builder
#: model:mis.report.kpi,description:mis_builder.mis_report_kpi_test
msgid "total test"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:82
#: selection:mis.report.kpi,divider:0
#, python-format
msgid "µ"
msgstr ""

646
mis_builder/i18n/nl.po

@ -1,646 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mis_builder
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
# lfreeke <lfreeke@therp.nl>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-27 17:33+0000\n"
"PO-Revision-Date: 2017-04-27 17:33+0000\n"
"Last-Translator: lfreeke <lfreeke@therp.nl>, 2017\n"
"Language-Team: Dutch (https://www.transifex.com/oca/teams/23907/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:290
#: code:addons/mis_builder/models/mis_builder.py:734
#, python-format
msgid "%s (copy)"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:869
#, python-format
msgid "%s vs %s"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'accounts' is a comma-separated list of account codes, possibly containing %"
" wildcards"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'domain' is an optional filter on move lines (eg to filter on analytic "
"accounts or journal)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bal for balance (debit - credit)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"* bal[70]: variation of the balance of account 70 over the period (it is the"
" same as balp[70]);"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bale[1%]: balance of accounts starting with 1 at end of period."
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bali[70,60]: initial balance of accounts 70 and 60;"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* crd for credit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* deb for debit"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* e: at the end of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* i: at the beginning of the period"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* nothing or p: variation over the period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,root_account:0
msgid "Account chart"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_add_to_dashboard_action
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Add to dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,aggregate:0
msgid "Aggregate"
msgstr ""
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Entries"
msgstr ""
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Posted Entries"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:240
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Average"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,date:0
msgid "Base date"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,css_style:0
msgid "CSS style expression"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "Cancel"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,company_id:0
msgid "Company"
msgstr "Bedrijf"
#. module: mis_builder
#: field:mis.report.instance.period,comparison_column_ids:0
msgid "Compare with"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,compare_method:0
msgid "Comparison Method"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_uid:0
#: field:mis.report,create_uid:0 field:mis.report.instance,create_uid:0
#: field:mis.report.instance.period,create_uid:0
#: field:mis.report.kpi,create_uid:0 field:mis.report.query,create_uid:0
msgid "Created by"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_date:0
#: field:mis.report,create_date:0 field:mis.report.instance,create_date:0
#: field:mis.report.instance.period,create_date:0
#: field:mis.report.kpi,create_date:0 field:mis.report.query,create_date:0
msgid "Created on"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,dashboard_id:0
msgid "Dashboard"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,date_field:0
msgid "Date field"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:566
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Day"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,default_css_style:0
msgid "Default CSS style"
msgstr ""
#. module: mis_builder
#: field:mis.report,description:0 field:mis.report.instance,description:0
#: field:mis.report.instance.period,name:0 field:mis.report.kpi,description:0
msgid "Description"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:92
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "Difference"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,display_name:0
#: field:mis.report,display_name:0 field:mis.report.instance,display_name:0
#: field:mis.report.instance.period,display_name:0
#: field:mis.report.kpi,display_name:0 field:mis.report.query,display_name:0
#: field:report.mis_builder.report_mis_report_instance,display_name:0
msgid "Display Name"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,domain:0
msgid "Domain"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,duration:0
msgid "Duration"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Examples"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:6
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Export"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,expression:0
msgid "Expression"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Expressions are of the form <field><mode>[accounts][domain]"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,normalize_factor:0
#: field:mis.report.kpi,divider:0
msgid "Factor"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,normalize_factor:0
msgid "Factor to use to normalize the period (used in comparison"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_names:0
msgid "Fetched fields name"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,field_ids:0
msgid "Fields to fetch"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:568
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Fiscal Period"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_from:0
msgid "From"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_from:0
msgid "From period"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,id:0 field:mis.report,id:0
#: field:mis.report.instance,id:0 field:mis.report.instance.period,id:0
#: field:mis.report.kpi,id:0 field:mis.report.query,id:0
#: field:report.mis_builder.report_mis_report_instance,id:0
msgid "ID"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form field:mis.report,kpi_ids:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "KPI's"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,landscape_pdf:0
msgid "Landscape PDF"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,__last_update:0
#: field:mis.report,__last_update:0 field:mis.report.instance,__last_update:0
#: field:mis.report.instance.period,__last_update:0
#: field:mis.report.kpi,__last_update:0 field:mis.report.query,__last_update:0
#: field:report.mis_builder.report_mis_report_instance,__last_update:0
msgid "Last Modified on"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_uid:0
#: field:mis.report,write_uid:0 field:mis.report.instance,write_uid:0
#: field:mis.report.instance.period,write_uid:0
#: field:mis.report.kpi,write_uid:0 field:mis.report.query,write_uid:0
msgid "Last Updated by"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_date:0
#: field:mis.report,write_date:0 field:mis.report.instance,write_date:0
#: field:mis.report.instance.period,write_date:0
#: field:mis.report.kpi,write_date:0 field:mis.report.query,write_date:0
msgid "Last Updated on"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Legend (for kpi expressions)"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "MIS Report"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "MIS Report Instance"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_tree
msgid "MIS Report Instances"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_result_view_form
msgid "MIS Report Result"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_view_menu
msgid "MIS Report Templates"
msgstr ""
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_instance_view_menu
#: view:mis.report:mis_builder.mis_report_view_tree
msgid "MIS Reports"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.qweb_pdf_export
msgid "MIS report instance QWEB PDF report"
msgstr ""
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.xls_export
msgid "MIS report instance XLS report"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:242
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Max"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:241
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Min"
msgstr ""
#. module: mis_builder
#: field:mis.report.query,model_id:0
msgid "Model"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/aep.py:305
#, python-format
msgid "Modes i and e are only applicable for fiscal periods"
msgstr ""
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,name:0
#: field:mis.report,name:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,name:0 field:mis.report.kpi,name:0
#: field:mis.report.query,name:0
msgid "Name"
msgstr "Naam"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:94
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "None"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,duration:0
msgid "Number of periods"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:76
#: selection:mis.report.kpi,type:0
#, python-format
msgid "Numeric"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,offset:0
msgid "Offset"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance.period,offset:0
msgid "Offset from current period"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:77
#: code:addons/mis_builder/models/mis_builder.py:93
#: selection:mis.report.kpi,compare_method:0 selection:mis.report.kpi,type:0
#, python-format
msgid "Percentage"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Period name should be unique by report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,type:0
msgid "Period type"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,period_ids:0
msgid "Periods"
msgstr "Periodes"
#. module: mis_builder
#: field:mis.report.instance,pivot_date:0
msgid "Pivot date"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'field' can be:"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'mode' are:"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,prefix:0
msgid "Prefix"
msgstr ""
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Preview"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:5
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Print"
msgstr ""
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
#: field:mis.report,query_ids:0
msgid "Queries"
msgstr ""
#. module: mis_builder
#: model:ir.model,name:mis_builder.model_report
#: field:mis.report.instance,report_id:0 field:mis.report.kpi,report_id:0
#: field:mis.report.query,report_id:0
msgid "Report"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,report_instance_id:0
msgid "Report Instance"
msgstr ""
#. module: mis_builder
#: help:mis.report.instance,date:0
msgid "Report base date (leave empty to use current date)"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,dp:0
msgid "Rounding"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,sequence:0 field:mis.report.kpi,sequence:0
msgid "Sequence"
msgstr ""
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:7
#, python-format
msgid "Settings"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:78
#: selection:mis.report.kpi,type:0
#, python-format
msgid "String"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,suffix:0
msgid "Suffix"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:239
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Sum"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance,target_move:0
msgid "Target Moves"
msgstr ""
#. module: mis_builder
#: model:mis.report,name:mis_builder.mis_report_test
msgid "Test report"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance,name:mis_builder.mis_report_instance_test
msgid "Test-report-instance without company"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,date_to:0
msgid "To"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,period_to:0
msgid "To period"
msgstr ""
#. module: mis_builder
#: field:mis.report.kpi,type:0
msgid "Type"
msgstr ""
#. module: mis_builder
#: field:mis.report.instance.period,valid:0
msgid "Valid"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:567
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Week"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong duration, it must be positive!"
msgstr ""
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong normalize factor, it must be positive!"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:849
#, python-format
msgid "from %s to %s"
msgstr ""
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "or"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:172
#, python-format
msgid "pp"
msgstr ""
#. module: mis_builder
#: model:mis.report.instance.period,name:mis_builder.mis_report_instance_period_test
msgid "today"
msgstr ""
#. module: mis_builder
#: model:mis.report.kpi,description:mis_builder.mis_report_kpi_test
msgid "total test"
msgstr ""
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:82
#: selection:mis.report.kpi,divider:0
#, python-format
msgid "µ"
msgstr ""

649
mis_builder/i18n/sl.po

@ -1,649 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mis_builder
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-27 17:33+0000\n"
"PO-Revision-Date: 2017-04-27 17:33+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:290
#: code:addons/mis_builder/models/mis_builder.py:734
#, python-format
msgid "%s (copy)"
msgstr "%s (kopija)"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:869
#, python-format
msgid "%s vs %s"
msgstr "%s proti %s"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'accounts' is a comma-separated list of account codes, possibly containing %"
" wildcards"
msgstr ""
"'accounts' je seznam z vejico ločenih kontnih kod, ki lahko vsebujejo % "
"nadomestne znake"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"'domain' is an optional filter on move lines (eg to filter on analytic "
"accounts or journal)"
msgstr ""
"'domain' je opcijski filter na postavkah premikov (npr. za filtriranje na "
"analitičnih kontih ali dnevniku)"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bal for balance (debit - credit)"
msgstr "* bal za bilanco (obveznosti - terjatve)"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid ""
"* bal[70]: variation of the balance of account 70 over the period (it is the"
" same as balp[70]);"
msgstr "* bal[70]: variacija bilance konta 70 v obdobju (isto kot balp[70]);"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bale[1%]: balance of accounts starting with 1 at end of period."
msgstr "* bale[1%]: bilanca kontov ob koncu obdobja začenši z 1."
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* bali[70,60]: initial balance of accounts 70 and 60;"
msgstr "* bali[70,60]: začetna bilanca kontov 70 in 60;"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* crd for credit"
msgstr "* crd za terjatve"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* deb for debit"
msgstr "* deb za obveznosti"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* e: at the end of the period"
msgstr "* e: ob koncu obdobja"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* i: at the beginning of the period"
msgstr "* i: na začetku obdobja"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "* nothing or p: variation over the period"
msgstr "* nothing ali p: variacija v obdobju"
#. module: mis_builder
#: field:mis.report.instance,root_account:0
msgid "Account chart"
msgstr "Kontni plan"
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_add_to_dashboard_action
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Add to dashboard"
msgstr "Dodaj na nadzorno ploščo"
#. module: mis_builder
#: field:mis.report.query,aggregate:0
msgid "Aggregate"
msgstr "Skupek"
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Entries"
msgstr "Vsi vnosi"
#. module: mis_builder
#: selection:mis.report.instance,target_move:0
msgid "All Posted Entries"
msgstr "Vsi knjiženi vnosi"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:240
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Average"
msgstr "Povprečje"
#. module: mis_builder
#: field:mis.report.instance,date:0
msgid "Base date"
msgstr "Osnovni datum"
#. module: mis_builder
#: field:mis.report.kpi,css_style:0
msgid "CSS style expression"
msgstr "Izraz v CSS slogu"
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "Cancel"
msgstr "Preklic"
#. module: mis_builder
#: field:mis.report.instance,company_id:0
msgid "Company"
msgstr "Družba"
#. module: mis_builder
#: field:mis.report.instance.period,comparison_column_ids:0
msgid "Compare with"
msgstr "Primerjaj z"
#. module: mis_builder
#: field:mis.report.kpi,compare_method:0
msgid "Comparison Method"
msgstr "Primerjalna metoda"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_uid:0
#: field:mis.report,create_uid:0 field:mis.report.instance,create_uid:0
#: field:mis.report.instance.period,create_uid:0
#: field:mis.report.kpi,create_uid:0 field:mis.report.query,create_uid:0
msgid "Created by"
msgstr "Ustvaril"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,create_date:0
#: field:mis.report,create_date:0 field:mis.report.instance,create_date:0
#: field:mis.report.instance.period,create_date:0
#: field:mis.report.kpi,create_date:0 field:mis.report.query,create_date:0
msgid "Created on"
msgstr "Ustvarjeno"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,dashboard_id:0
msgid "Dashboard"
msgstr "Nadzorna plošča"
#. module: mis_builder
#: field:mis.report.query,date_field:0
msgid "Date field"
msgstr "Polje datuma"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:566
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Day"
msgstr "Dan"
#. module: mis_builder
#: field:mis.report.kpi,default_css_style:0
msgid "Default CSS style"
msgstr "Privzeti CSS slog"
#. module: mis_builder
#: field:mis.report,description:0 field:mis.report.instance,description:0
#: field:mis.report.instance.period,name:0 field:mis.report.kpi,description:0
msgid "Description"
msgstr "Opis"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:92
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "Difference"
msgstr "Razlika"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,display_name:0
#: field:mis.report,display_name:0 field:mis.report.instance,display_name:0
#: field:mis.report.instance.period,display_name:0
#: field:mis.report.kpi,display_name:0 field:mis.report.query,display_name:0
#: field:report.mis_builder.report_mis_report_instance,display_name:0
msgid "Display Name"
msgstr "Prikazni naziv"
#. module: mis_builder
#: field:mis.report.query,domain:0
msgid "Domain"
msgstr "Domena"
#. module: mis_builder
#: field:mis.report.instance.period,duration:0
msgid "Duration"
msgstr "Trajanje"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Examples"
msgstr "Primeri"
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:6
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Export"
msgstr "Izvoz"
#. module: mis_builder
#: field:mis.report.kpi,expression:0
msgid "Expression"
msgstr "Izraz"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Expressions are of the form <field><mode>[accounts][domain]"
msgstr "Izrazi obrazca <field><mode>[accounts][domain]"
#. module: mis_builder
#: field:mis.report.instance.period,normalize_factor:0
#: field:mis.report.kpi,divider:0
msgid "Factor"
msgstr "Faktor"
#. module: mis_builder
#: help:mis.report.instance.period,normalize_factor:0
msgid "Factor to use to normalize the period (used in comparison"
msgstr "Faktor za normalizacijo obdobja (uporaba pri primerjavi"
#. module: mis_builder
#: field:mis.report.query,field_names:0
msgid "Fetched fields name"
msgstr "Prenešeni nazivi polj"
#. module: mis_builder
#: field:mis.report.query,field_ids:0
msgid "Fields to fetch"
msgstr "Polja za prenos"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:568
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Fiscal Period"
msgstr "Fiskalno obdobje"
#. module: mis_builder
#: field:mis.report.instance.period,date_from:0
msgid "From"
msgstr "Od"
#. module: mis_builder
#: field:mis.report.instance.period,period_from:0
msgid "From period"
msgstr "Od obdobja"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,id:0 field:mis.report,id:0
#: field:mis.report.instance,id:0 field:mis.report.instance.period,id:0
#: field:mis.report.kpi,id:0 field:mis.report.query,id:0
#: field:report.mis_builder.report_mis_report_instance,id:0
msgid "ID"
msgstr "ID"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form field:mis.report,kpi_ids:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "KPI's"
msgstr "KPI-ji"
#. module: mis_builder
#: field:mis.report.instance,landscape_pdf:0
msgid "Landscape PDF"
msgstr "PDF ležeče"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,__last_update:0
#: field:mis.report,__last_update:0 field:mis.report.instance,__last_update:0
#: field:mis.report.instance.period,__last_update:0
#: field:mis.report.kpi,__last_update:0 field:mis.report.query,__last_update:0
#: field:report.mis_builder.report_mis_report_instance,__last_update:0
msgid "Last Modified on"
msgstr "Zadnja sprememba"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_uid:0
#: field:mis.report,write_uid:0 field:mis.report.instance,write_uid:0
#: field:mis.report.instance.period,write_uid:0
#: field:mis.report.kpi,write_uid:0 field:mis.report.query,write_uid:0
msgid "Last Updated by"
msgstr "Zadnji posodobil"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,write_date:0
#: field:mis.report,write_date:0 field:mis.report.instance,write_date:0
#: field:mis.report.instance.period,write_date:0
#: field:mis.report.kpi,write_date:0 field:mis.report.query,write_date:0
msgid "Last Updated on"
msgstr "Zadnjič posodobljeno"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Legend (for kpi expressions)"
msgstr "Legenda (za kpi izraze - ključni indikatorji uspešnosti)"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "MIS Report"
msgstr "MIS poročilo"
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "MIS Report Instance"
msgstr "Instanca MIS poročila"
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_tree
msgid "MIS Report Instances"
msgstr "Instance MIS poročila"
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_result_view_form
msgid "MIS Report Result"
msgstr "Rezultati MIS poročila"
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_view_menu
msgid "MIS Report Templates"
msgstr "Predloge MIS poročil"
#. module: mis_builder
#: model:ir.actions.act_window,name:mis_builder.mis_report_instance_view_action
#: model:ir.ui.menu,name:mis_builder.mis_report_instance_view_menu
#: view:mis.report:mis_builder.mis_report_view_tree
msgid "MIS Reports"
msgstr "MIS poročila"
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.qweb_pdf_export
msgid "MIS report instance QWEB PDF report"
msgstr "Instanca MIS poročila QWEB PDF poročilo"
#. module: mis_builder
#: model:ir.actions.report.xml,name:mis_builder.xls_export
msgid "MIS report instance XLS report"
msgstr "Instanca MIS poročila XLS poročilo"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:242
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Max"
msgstr "Maks."
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:241
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Min"
msgstr "Min."
#. module: mis_builder
#: field:mis.report.query,model_id:0
msgid "Model"
msgstr "Model"
#. module: mis_builder
#: code:addons/mis_builder/models/aep.py:305
#, python-format
msgid "Modes i and e are only applicable for fiscal periods"
msgstr "Načina i in e se aplicirata le pri fiskalnih obdobjih"
#. module: mis_builder
#: field:add.mis.report.instance.dashboard.wizard,name:0
#: field:mis.report,name:0
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,name:0 field:mis.report.kpi,name:0
#: field:mis.report.query,name:0
msgid "Name"
msgstr "Naziv"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:94
#: selection:mis.report.kpi,compare_method:0
#, python-format
msgid "None"
msgstr "Brez"
#. module: mis_builder
#: help:mis.report.instance.period,duration:0
msgid "Number of periods"
msgstr "Število obdobij"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:76
#: selection:mis.report.kpi,type:0
#, python-format
msgid "Numeric"
msgstr "Numerično"
#. module: mis_builder
#: field:mis.report.instance.period,offset:0
msgid "Offset"
msgstr "Odmik"
#. module: mis_builder
#: help:mis.report.instance.period,offset:0
msgid "Offset from current period"
msgstr "Odmik tekočega obdobja"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:77
#: code:addons/mis_builder/models/mis_builder.py:93
#: selection:mis.report.kpi,compare_method:0 selection:mis.report.kpi,type:0
#, python-format
msgid "Percentage"
msgstr "Odstotek"
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Period name should be unique by report"
msgstr "Naziv obdobja bi moral biti unikaten za vsako poročilo"
#. module: mis_builder
#: field:mis.report.instance.period,type:0
msgid "Period type"
msgstr "Tip obdobja"
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#: field:mis.report.instance,period_ids:0
msgid "Periods"
msgstr "Obdobja"
#. module: mis_builder
#: field:mis.report.instance,pivot_date:0
msgid "Pivot date"
msgstr "Pivot datum"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'field' can be:"
msgstr "Možne vrednosti za 'polje' so:"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
msgid "Possible values for 'mode' are:"
msgstr "Možne vrednosti za 'način' so:"
#. module: mis_builder
#: field:mis.report.kpi,prefix:0
msgid "Prefix"
msgstr "Predpona"
#. module: mis_builder
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
msgid "Preview"
msgstr "Predogled"
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:5
#: view:mis.report.instance:mis_builder.mis_report_instance_view_form
#, python-format
msgid "Print"
msgstr "Natisni"
#. module: mis_builder
#: view:mis.report:mis_builder.mis_report_view_form
#: field:mis.report,query_ids:0
msgid "Queries"
msgstr "Poizvedbe"
#. module: mis_builder
#: model:ir.model,name:mis_builder.model_report
#: field:mis.report.instance,report_id:0 field:mis.report.kpi,report_id:0
#: field:mis.report.query,report_id:0
msgid "Report"
msgstr "Poročilo"
#. module: mis_builder
#: field:mis.report.instance.period,report_instance_id:0
msgid "Report Instance"
msgstr "Instanca poročila"
#. module: mis_builder
#: help:mis.report.instance,date:0
msgid "Report base date (leave empty to use current date)"
msgstr "Osnovni datum poročila (pustita prazno za uporabo tekočega datuma)"
#. module: mis_builder
#: field:mis.report.kpi,dp:0
msgid "Rounding"
msgstr "Zaokroževanje"
#. module: mis_builder
#: field:mis.report.instance.period,sequence:0 field:mis.report.kpi,sequence:0
msgid "Sequence"
msgstr "Zaporedje"
#. module: mis_builder
#. openerp-web
#: code:addons/mis_builder/static/src/xml/mis_widget.xml:7
#, python-format
msgid "Settings"
msgstr "Nastavitve"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:78
#: selection:mis.report.kpi,type:0
#, python-format
msgid "String"
msgstr "Niz"
#. module: mis_builder
#: field:mis.report.kpi,suffix:0
msgid "Suffix"
msgstr "Pripona"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:239
#: selection:mis.report.query,aggregate:0
#, python-format
msgid "Sum"
msgstr "Vsota"
#. module: mis_builder
#: field:mis.report.instance,target_move:0
msgid "Target Moves"
msgstr "Ciljni premiki"
#. module: mis_builder
#: model:mis.report,name:mis_builder.mis_report_test
msgid "Test report"
msgstr "Testno poročilo"
#. module: mis_builder
#: model:mis.report.instance,name:mis_builder.mis_report_instance_test
msgid "Test-report-instance without company"
msgstr "Instanca testnega poročila brez družbe"
#. module: mis_builder
#: field:mis.report.instance.period,date_to:0
msgid "To"
msgstr "Do"
#. module: mis_builder
#: field:mis.report.instance.period,period_to:0
msgid "To period"
msgstr "Do obdobja"
#. module: mis_builder
#: field:mis.report.kpi,type:0
msgid "Type"
msgstr "Tip"
#. module: mis_builder
#: field:mis.report.instance.period,valid:0
msgid "Valid"
msgstr "Veljavno"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:567
#: selection:mis.report.instance.period,type:0
#, python-format
msgid "Week"
msgstr "Teden"
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong duration, it must be positive!"
msgstr "Napačno trajanje, biti mora pozitivno!"
#. module: mis_builder
#: sql_constraint:mis.report.instance.period:0
msgid "Wrong normalize factor, it must be positive!"
msgstr "Napačen faktor normalizacije, biti mora pozitiven!"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:849
#, python-format
msgid "from %s to %s"
msgstr "od %s do %s"
#. module: mis_builder
#: view:add.mis.report.instance.dashboard.wizard:mis_builder.mis_report_instance_add_to_dashboard_form_view
msgid "or"
msgstr "ali"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:172
#, python-format
msgid "pp"
msgstr "pp"
#. module: mis_builder
#: model:mis.report.instance.period,name:mis_builder.mis_report_instance_period_test
msgid "today"
msgstr "danes"
#. module: mis_builder
#: model:mis.report.kpi,description:mis_builder.mis_report_kpi_test
msgid "total test"
msgstr "skupaj test"
#. module: mis_builder
#: code:addons/mis_builder/models/mis_builder.py:82
#: selection:mis.report.kpi,divider:0
#, python-format
msgid "µ"
msgstr "µ"

42
mis_builder/migrations/8.0.0.2/pre-migration.py

@ -1,42 +0,0 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# mis_builder module for Odoo, Management Information System Builder
# Copyright (C) 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
#
# This file is a part of mis_builder
#
# mis_builder is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License v3 or later
# as published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# mis_builder is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License v3 or later for more details.
#
# You should have received a copy of the GNU Affero General Public License
# v3 or later along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
def migrate(cr, version):
if not version:
return
cr.execute("""
ALTER TABLE mis_report_instance
ADD COLUMN root_account INTEGER
""")
cr.execute("""
UPDATE mis_report_instance
SET root_account = (
SELECT id FROM account_account
WHERE parent_id IS NULL
AND company_id = mis_report_instance.company_id
LIMIT 1
)
""")

6
mis_builder/models/__init__.py

@ -1,6 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import mis_builder
from . import aep

187
mis_builder/models/accounting_none.py

@ -1,187 +0,0 @@
# -*- coding: utf-8 -*-
# © 2016 Thomas Binsfeld
# © 2016 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
"""
Provides the AccountingNone singleton.
AccountingNone is a null value that dissolves in basic arithmetic operations,
as illustrated in the examples below. In comparisons, AccountingNone behaves
the same as zero.
>>> 1 + 1
2
>>> 1 + AccountingNone
1
>>> AccountingNone + 1
1
>>> AccountingNone + None
AccountingNone
>>> +AccountingNone
AccountingNone
>>> -AccountingNone
AccountingNone
>>> -(AccountingNone)
AccountingNone
>>> AccountingNone - 1
-1
>>> 1 - AccountingNone
1
>>> abs(AccountingNone)
AccountingNone
>>> AccountingNone - None
AccountingNone
>>> AccountingNone / 2
0.0
>>> 2 / AccountingNone
Traceback (most recent call last):
...
ZeroDivisionError
>>> AccountingNone / AccountingNone
AccountingNone
>>> AccountingNone // 2
0.0
>>> 2 // AccountingNone
Traceback (most recent call last):
...
ZeroDivisionError
>>> AccountingNone // AccountingNone
AccountingNone
>>> AccountingNone * 2
0.0
>>> 2 * AccountingNone
0.0
>>> AccountingNone * AccountingNone
AccountingNone
>>> AccountingNone * None
AccountingNone
>>> None * AccountingNone
AccountingNone
>>> str(AccountingNone)
''
>>> bool(AccountingNone)
False
>>> AccountingNone > 0
False
>>> AccountingNone < 0
False
>>> AccountingNone < 1
True
>>> AccountingNone > 1
False
>>> 0 < AccountingNone
False
>>> 0 > AccountingNone
False
>>> 1 < AccountingNone
False
>>> 1 > AccountingNone
True
>>> AccountingNone == 0
True
>>> AccountingNone == 0.0
True
>>> AccountingNone == None
True
"""
__all__ = ['AccountingNone']
class AccountingNoneType(object):
def __add__(self, other):
if other is None:
return AccountingNone
return other
__radd__ = __add__
def __sub__(self, other):
if other is None:
return AccountingNone
return -other
def __rsub__(self, other):
if other is None:
return AccountingNone
return other
def __iadd__(self, other):
if other is None:
return AccountingNone
return other
def __isub__(self, other):
if other is None:
return AccountingNone
return -other
def __abs__(self):
return self
def __pos__(self):
return self
def __neg__(self):
return self
def __div__(self, other):
if other is AccountingNone:
return AccountingNone
return 0.0
def __rdiv__(self, other):
raise ZeroDivisionError
def __floordiv__(self, other):
if other is AccountingNone:
return AccountingNone
return 0.0
def __rfloordiv__(self, other):
raise ZeroDivisionError
def __truediv__(self, other):
if other is AccountingNone:
return AccountingNone
return 0.0
def __rtruediv__(self, other):
raise ZeroDivisionError
def __mul__(self, other):
if other is None or other is AccountingNone:
return AccountingNone
return 0.0
__rmul__ = __mul__
def __repr__(self):
return 'AccountingNone'
def __str__(self):
return ''
def __nonzero__(self):
return False
def __bool__(self):
return False
def __eq__(self, other):
return other == 0 or other is None or other is AccountingNone
def __lt__(self, other):
return 0 < other
def __gt__(self, other):
return 0 > other
AccountingNone = AccountingNoneType()
if __name__ == '__main__':
import doctest
doctest.testmod()

366
mis_builder/models/aep.py

@ -1,366 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
import re
from collections import defaultdict
from openerp.exceptions import Warning as UserError
from openerp.models import expression
from openerp.tools.safe_eval import safe_eval
from openerp.tools.translate import _
from .accounting_none import AccountingNone
MODE_VARIATION = 'p'
MODE_INITIAL = 'i'
MODE_END = 'e'
class AccountingExpressionProcessor(object):
""" Processor for accounting expressions.
Expressions of the form <field><mode>[accounts][optional move line domain]
are supported, where:
* field is bal, crd, deb
* mode is i (initial balance), e (ending balance),
p (moves over period)
* accounts is a list of accounts, possibly containing % wildcards
* an optional domain on move lines allowing filters on eg analytic
accounts or journal
Examples:
* bal[70]: variation of the balance of moves on account 70
over the period (it is the same as balp[70]);
* bali[70,60]: balance of accounts 70 and 60 at the start of period;
* bale[1%]: balance of accounts starting with 1 at end of period.
How to use:
* repeatedly invoke parse_expr() for each expression containing
accounting variables as described above; this lets the processor
group domains and modes and accounts;
* when all expressions have been parsed, invoke done_parsing()
to notify the processor that it can prepare to query (mainly
search all accounts - children, consolidation - that will need to
be queried;
* for each period, call do_queries(), then call replace_expr() for each
expression to replace accounting variables with their resulting value
for the given period.
How it works:
* by accumulating the expressions before hand, it ensures to do the
strict minimum number of queries to the database (for each period,
one query per domain and mode);
* it queries using the orm read_group which reduces to a query with
sum on debit and credit and group by on account_id (note: it seems
the orm then does one query per account to fetch the account
name...);
* additionally, one query per view/consolidation account is done to
discover the children accounts.
"""
ACC_RE = re.compile(r"(?P<field>\bbal|\bcrd|\bdeb)"
r"(?P<mode>[pise])?"
r"(?P<accounts>_[a-zA-Z0-9]+|\[.*?\])"
r"(?P<domain>\[.*?\])?")
def __init__(self, env):
self.env = env
# before done_parsing: {(domain, mode): set(account_codes)}
# after done_parsing: {(domain, mode): list(account_ids)}
self._map_account_ids = defaultdict(set)
self._account_ids_by_code = defaultdict(set)
def _load_account_codes(self, account_codes, root_account):
account_model = self.env['account.account']
# TODO: account_obj is necessary because _get_children_and_consol
# does not work in new API?
account_obj = self.env.registry('account.account')
exact_codes = set()
like_codes = set()
for account_code in account_codes:
if account_code in self._account_ids_by_code:
continue
if account_code is None:
# by convention the root account is keyed as
# None in _account_ids_by_code, so it is consistent
# with what _parse_match_object returns for an
# empty list of account codes, ie [None]
exact_codes.add(root_account.code)
elif '%' in account_code:
like_codes.add(account_code)
else:
exact_codes.add(account_code)
for account in account_model.\
search([('code', 'in', list(exact_codes)),
('parent_id', 'child_of', root_account.id)]):
if account.code == root_account.code:
code = None
else:
code = account.code
if account.type in ('view', 'consolidation'):
self._account_ids_by_code[code].update(
account_obj._get_children_and_consol(
self.env.cr, self.env.uid,
[account.id],
self.env.context))
else:
self._account_ids_by_code[code].add(account.id)
for like_code in like_codes:
for account in account_model.\
search([('code', '=like', like_code),
('parent_id', 'child_of', root_account.id)]):
if account.type in ('view', 'consolidation'):
self._account_ids_by_code[like_code].update(
account_obj._get_children_and_consol(
self.env.cr, self.env.uid,
[account.id],
self.env.context))
else:
self._account_ids_by_code[like_code].add(account.id)
def _parse_match_object(self, mo):
"""Split a match object corresponding to an accounting variable
Returns field, mode, [account codes], (domain expression).
"""
field, mode, account_codes, domain = mo.groups()
if not mode:
mode = MODE_VARIATION
elif mode == 's':
mode = MODE_END
if account_codes.startswith('_'):
account_codes = account_codes[1:]
else:
account_codes = account_codes[1:-1]
if account_codes.strip():
account_codes = [a.strip() for a in account_codes.split(',')]
else:
account_codes = [None]
domain = domain or '[]'
domain = tuple(safe_eval(domain))
return field, mode, account_codes, domain
def parse_expr(self, expr):
"""Parse an expression, extracting accounting variables.
Domains and accounts are extracted and stored in the map
so when all expressions have been parsed, we know which
account codes to query for each domain and mode.
"""
for mo in self.ACC_RE.finditer(expr):
_, mode, account_codes, domain = self._parse_match_object(mo)
key = (domain, mode)
self._map_account_ids[key].update(account_codes)
def done_parsing(self, root_account):
"""Load account codes and replace account codes by
account ids in map."""
for key, account_codes in self._map_account_ids.items():
self._load_account_codes(account_codes, root_account)
account_ids = set()
for account_code in account_codes:
account_ids.update(self._account_ids_by_code[account_code])
self._map_account_ids[key] = list(account_ids)
@classmethod
def has_account_var(cls, expr):
"""Test if an string contains an accounting variable."""
return bool(cls.ACC_RE.search(expr))
def get_aml_domain_for_expr(self, expr,
date_from, date_to,
period_from, period_to,
target_move):
""" Get a domain on account.move.line for an expression.
Prerequisite: done_parsing() must have been invoked.
Returns a domain that can be used to search on account.move.line.
"""
aml_domains = []
date_domain_by_mode = {}
for mo in self.ACC_RE.finditer(expr):
field, mode, account_codes, domain = self._parse_match_object(mo)
aml_domain = list(domain)
account_ids = set()
for account_code in account_codes:
account_ids.update(self._account_ids_by_code[account_code])
aml_domain.append(('account_id', 'in', tuple(account_ids)))
if field == 'crd':
aml_domain.append(('credit', '>', 0))
elif field == 'deb':
aml_domain.append(('debit', '>', 0))
aml_domains.append(expression.normalize_domain(aml_domain))
if mode not in date_domain_by_mode:
date_domain_by_mode[mode] = \
self.get_aml_domain_for_dates(date_from, date_to,
period_from, period_to,
mode, target_move)
return expression.OR(aml_domains) + \
expression.OR(date_domain_by_mode.values())
def _period_has_moves(self, period):
move_model = self.env['account.move']
return bool(move_model.search([('period_id', '=', period.id)],
limit=1))
def _get_previous_opening_period(self, period, company_id):
period_model = self.env['account.period']
periods = period_model.search(
[('date_start', '<=', period.date_start),
('special', '=', True),
('company_id', '=', company_id)],
order="date_start desc",
limit=1)
return periods and periods[0]
def _get_previous_normal_period(self, period, company_id):
period_model = self.env['account.period']
periods = period_model.search(
[('date_start', '<', period.date_start),
('special', '=', False),
('company_id', '=', company_id)],
order="date_start desc",
limit=1)
return periods and periods[0]
def _get_first_normal_period(self, company_id):
period_model = self.env['account.period']
periods = period_model.search(
[('special', '=', False),
('company_id', '=', company_id)],
order="date_start asc",
limit=1)
return periods and periods[0]
def _get_period_ids_between(self, period_from, period_to, company_id):
period_model = self.env['account.period']
periods = period_model.search(
[('date_start', '>=', period_from.date_start),
('date_stop', '<=', period_to.date_stop),
('special', '=', False),
('company_id', '=', company_id)])
period_ids = [p.id for p in periods]
if period_from.special:
period_ids.append(period_from.id)
return period_ids
def _get_period_company_ids(self, period_from, period_to):
period_model = self.env['account.period']
periods = period_model.search(
[('date_start', '>=', period_from.date_start),
('date_stop', '<=', period_to.date_stop),
('special', '=', False)])
return set([p.company_id.id for p in periods])
def _get_period_ids_for_mode(self, period_from, period_to, mode):
assert not period_from.special
assert not period_to.special
assert period_from.company_id == period_to.company_id
assert period_from.date_start <= period_to.date_start
period_ids = []
for company_id in self._get_period_company_ids(period_from, period_to):
if mode == MODE_VARIATION:
period_ids.extend(self._get_period_ids_between(
period_from, period_to, company_id))
else:
if mode == MODE_INITIAL:
period_to = self._get_previous_normal_period(
period_from, company_id)
# look for opening period with moves
opening_period = self._get_previous_opening_period(
period_from, company_id)
if opening_period and \
self._period_has_moves(opening_period[0]):
# found opening period with moves
if opening_period.date_start == period_from.date_start and\
mode == MODE_INITIAL:
# if the opening period has the same start date as
# period_from, then we'll find the initial balance
# in the initial period and that's it
period_ids.append(opening_period[0].id)
continue
period_from = opening_period[0]
else:
# no opening period with moves,
# use very first normal period
period_from = self._get_first_normal_period(company_id)
if period_to:
period_ids.extend(self._get_period_ids_between(
period_from, period_to, company_id))
return period_ids
def get_aml_domain_for_dates(self, date_from, date_to,
period_from, period_to,
mode,
target_move):
if period_from and period_to:
period_ids = self._get_period_ids_for_mode(
period_from, period_to, mode)
domain = [('period_id', 'in', period_ids)]
else:
if mode == MODE_VARIATION:
domain = [('date', '>=', date_from), ('date', '<=', date_to)]
else:
raise UserError(_("Modes i and e are only applicable for "
"fiscal periods"))
if target_move == 'posted':
domain.append(('move_id.state', '=', 'posted'))
return expression.normalize_domain(domain)
def do_queries(self, date_from, date_to, period_from, period_to,
target_move, additional_move_line_filter=None):
"""Query sums of debit and credit for all accounts and domains
used in expressions.
This method must be executed after done_parsing().
"""
aml_model = self.env['account.move.line']
# {(domain, mode): {account_id: (debit, credit)}}
self._data = defaultdict(dict)
domain_by_mode = {}
for key in self._map_account_ids:
domain, mode = key
if mode not in domain_by_mode:
domain_by_mode[mode] = \
self.get_aml_domain_for_dates(date_from, date_to,
period_from, period_to,
mode, target_move)
domain = list(domain) + domain_by_mode[mode]
domain.append(('account_id', 'in', self._map_account_ids[key]))
if additional_move_line_filter:
domain.extend(additional_move_line_filter)
# fetch sum of debit/credit, grouped by account_id
accs = aml_model.read_group(domain,
['debit', 'credit', 'account_id'],
['account_id'])
for acc in accs:
self._data[key][acc['account_id'][0]] = \
(acc['debit'] or 0.0, acc['credit'] or 0.0)
def replace_expr(self, expr):
"""Replace accounting variables in an expression by their amount.
Returns a new expression string.
This method must be executed after do_queries().
"""
def f(mo):
field, mode, account_codes, domain = self._parse_match_object(mo)
key = (domain, mode)
account_ids_data = self._data[key]
v = AccountingNone
for account_code in account_codes:
account_ids = self._account_ids_by_code[account_code]
for account_id in account_ids:
debit, credit = \
account_ids_data.get(account_id,
(AccountingNone, AccountingNone))
if field == 'bal':
v += debit - credit
elif field == 'deb':
v += debit
elif field == 'crd':
v += credit
return '(' + repr(v) + ')'
return self.ACC_RE.sub(f, expr)

129
mis_builder/models/aggregate.py

@ -1,129 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
def _sum(l):
""" Same as stdlib sum but returns None instead of 0
in case of empty sequence.
>>> sum([1])
1
>>> _sum([1])
1
>>> sum([1, 2])
3
>>> _sum([1, 2])
3
>>> sum([])
0
>>> _sum([])
"""
if not l:
return None
return sum(l)
def _avg(l):
""" Arithmetic mean of a sequence. Returns None in case of empty sequence.
>>> _avg([1])
1.0
>>> _avg([1, 2])
1.5
>>> _avg([])
"""
if not l:
return None
return sum(l) / float(len(l))
def _min(*args):
""" Same as stdlib min but returns None instead of exception
in case of empty sequence.
>>> min(1, 2)
1
>>> _min(1, 2)
1
>>> min([1, 2])
1
>>> _min([1, 2])
1
>>> min(1)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: 'int' object is not iterable
>>> _min(1)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: 'int' object is not iterable
>>> min([1])
1
>>> _min([1])
1
>>> min()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: min expected 1 arguments, got 0
>>> _min()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: min expected 1 arguments, got 0
>>> min([])
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: min() arg is an empty sequence
>>> _min([])
"""
if len(args) == 1 and not args[0]:
return None
return min(*args)
def _max(*args):
""" Same as stdlib max but returns None instead of exception
in case of empty sequence.
>>> max(1, 2)
2
>>> _max(1, 2)
2
>>> max([1, 2])
2
>>> _max([1, 2])
2
>>> max(1)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: 'int' object is not iterable
>>> _max(1)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: 'int' object is not iterable
>>> max([1])
1
>>> _max([1])
1
>>> max()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: max expected 1 arguments, got 0
>>> _max()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: max expected 1 arguments, got 0
>>> max([])
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: max() arg is an empty sequence
>>> _max([])
"""
if len(args) == 1 and not args[0]:
return None
return max(*args)
if __name__ == "__main__":
import doctest
doctest.testmod()

884
mis_builder/models/mis_builder.py

@ -1,884 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
import datetime
import dateutil
import logging
import re
import time
import traceback
import pytz
from openerp import api, fields, models, _
from openerp.tools.safe_eval import safe_eval
from .aep import AccountingExpressionProcessor as AEP
from .aggregate import _sum, _avg, _min, _max
from .accounting_none import AccountingNone
_logger = logging.getLogger(__name__)
class AutoStruct(object):
def __init__(self, **kwargs):
for k, v in kwargs.items():
setattr(self, k, v)
def _get_selection_label(selection, value):
for v, l in selection:
if v == value:
return l
return ''
def _utc_midnight(d, tz_name, add_day=0):
d = fields.Datetime.from_string(d) + datetime.timedelta(days=add_day)
utc_tz = pytz.timezone('UTC')
context_tz = pytz.timezone(tz_name)
local_timestamp = context_tz.localize(d, is_dst=False)
return fields.Datetime.to_string(local_timestamp.astimezone(utc_tz))
def _python_var(var_str):
return re.sub(r'\W|^(?=\d)', '_', var_str).lower()
def _is_valid_python_var(name):
return re.match("[_A-Za-z][_a-zA-Z0-9]*$", name)
class MisReportKpi(models.Model):
""" A KPI is an element (ie a line) of a MIS report.
In addition to a name and description, it has an expression
to compute it based on queries defined in the MIS report.
It also has various informations defining how to render it
(numeric or percentage or a string, a prefix, a suffix, divider) and
how to render comparison of two values of the KPI.
KPI's have a sequence and are ordered inside the MIS report.
"""
_name = 'mis.report.kpi'
name = fields.Char(size=32, required=True,
string='Name')
description = fields.Char(required=True,
string='Description',
translate=True)
expression = fields.Char(required=True,
string='Expression')
default_css_style = fields.Char(string='Default CSS style')
css_style = fields.Char(string='CSS style expression')
type = fields.Selection([('num', _('Numeric')),
('pct', _('Percentage')),
('str', _('String'))],
required=True,
string='Type',
default='num')
divider = fields.Selection([('1e-6', _('µ')),
('1e-3', _('m')),
('1', _('1')),
('1e3', _('k')),
('1e6', _('M'))],
string='Factor',
default='1')
dp = fields.Integer(string='Rounding', default=0)
prefix = fields.Char(size=16, string='Prefix')
suffix = fields.Char(size=16, string='Suffix')
compare_method = fields.Selection([('diff', _('Difference')),
('pct', _('Percentage')),
('none', _('None'))],
required=True,
string='Comparison Method',
default='pct')
sequence = fields.Integer(string='Sequence', default=100)
report_id = fields.Many2one('mis.report',
string='Report',
ondelete='cascade')
_order = 'sequence, id'
@api.one
@api.constrains('name')
def _check_name(self):
return _is_valid_python_var(self.name)
@api.onchange('name')
def _onchange_name(self):
if self.name and not _is_valid_python_var(self.name):
return {
'warning': {
'title': 'Invalid name %s' % self.name,
'message': 'The name must be a valid python identifier'
}
}
@api.onchange('description')
def _onchange_description(self):
""" construct name from description """
if self.description and not self.name:
self.name = _python_var(self.description)
@api.onchange('type')
def _onchange_type(self):
if self.type == 'num':
self.compare_method = 'pct'
self.divider = '1'
self.dp = 0
elif self.type == 'pct':
self.compare_method = 'diff'
self.divider = '1'
self.dp = 0
elif self.type == 'str':
self.compare_method = 'none'
self.divider = ''
self.dp = 0
def render(self, lang_id, value):
""" render a KPI value as a unicode string, ready for display """
assert len(self) == 1
if value is None or value is AccountingNone:
return ''
elif self.type == 'num':
return self._render_num(lang_id, value, self.divider,
self.dp, self.prefix, self.suffix)
elif self.type == 'pct':
return self._render_num(lang_id, value, 0.01,
self.dp, '', '%')
else:
return unicode(value)
def render_comparison(self, lang_id, value, base_value,
average_value, average_base_value):
""" render the comparison of two KPI values, ready for display
If the difference is 0, an empty string is returned.
"""
assert len(self) == 1
if value is None:
value = AccountingNone
if base_value is None:
base_value = AccountingNone
if self.type == 'pct':
delta = value - base_value
if delta and round(delta, self.dp) != 0:
return self._render_num(
lang_id,
delta,
0.01, self.dp, '', _('pp'),
sign='+')
elif self.type == 'num':
if value and average_value:
value = value / float(average_value)
if base_value and average_base_value:
base_value = base_value / float(average_base_value)
if self.compare_method == 'diff':
delta = value - base_value
if delta and round(delta, self.dp) != 0:
return self._render_num(
lang_id,
delta,
self.divider, self.dp, self.prefix, self.suffix,
sign='+')
elif self.compare_method == 'pct':
if base_value and round(base_value, self.dp) != 0:
delta = (value - base_value) / abs(base_value)
if delta and round(delta * 100, self.dp) != 0:
return self._render_num(
lang_id,
delta,
0.01, self.dp, '', '%',
sign='+')
return ''
def _render_num(self, lang_id, value, divider,
dp, prefix, suffix, sign='-'):
divider_label = _get_selection_label(
self._columns['divider'].selection, divider)
if divider_label == '1':
divider_label = ''
# format number following user language
value = round(value / float(divider or 1), dp) or 0
value = self.env['res.lang'].browse(lang_id).format(
'%%%s.%df' % (sign, dp),
value,
grouping=True)
value = u'%s\N{NARROW NO-BREAK SPACE}%s\N{NO-BREAK SPACE}%s%s' % \
(prefix or '', value, divider_label, suffix or '')
value = value.replace('-', u'\N{NON-BREAKING HYPHEN}')
return value
class MisReportQuery(models.Model):
""" A query to fetch arbitrary data for a MIS report.
A query works on a model and has a domain and list of fields to fetch.
At runtime, the domain is expanded with a "and" on the date/datetime field.
"""
_name = 'mis.report.query'
@api.one
@api.depends('field_ids')
def _compute_field_names(self):
field_names = [field.name for field in self.field_ids]
self.field_names = ', '.join(field_names)
name = fields.Char(size=32, required=True,
string='Name')
model_id = fields.Many2one('ir.model', required=True,
string='Model')
field_ids = fields.Many2many('ir.model.fields', required=True,
string='Fields to fetch')
field_names = fields.Char(compute='_compute_field_names',
string='Fetched fields name')
aggregate = fields.Selection([('sum', _('Sum')),
('avg', _('Average')),
('min', _('Min')),
('max', _('Max'))],
string='Aggregate')
date_field = fields.Many2one('ir.model.fields', required=True,
string='Date field',
domain=[('ttype', 'in',
('date', 'datetime'))])
domain = fields.Char(string='Domain')
report_id = fields.Many2one('mis.report', string='Report',
ondelete='cascade')
_order = 'name'
@api.one
@api.constrains('name')
def _check_name(self):
return _is_valid_python_var(self.name)
class MisReport(models.Model):
""" A MIS report template (without period information)
The MIS report holds:
* a list of explicit queries; the result of each query is
stored in a variable with same name as a query, containing as list
of data structures populated with attributes for each fields to fetch;
when queries have an aggregate method and no fields to group, it returns
a data structure with the aggregated fields
* a list of KPI to be evaluated based on the variables resulting
from the accounting data and queries (KPI expressions can references
queries and accounting expression - see AccoutingExpressionProcessor)
"""
_name = 'mis.report'
name = fields.Char(required=True,
string='Name', translate=True)
description = fields.Char(required=False,
string='Description', translate=True)
query_ids = fields.One2many('mis.report.query', 'report_id',
string='Queries',
copy=True)
kpi_ids = fields.One2many('mis.report.kpi', 'report_id',
string='KPI\'s',
copy=True)
@api.one
def copy(self, default=None):
default = dict(default or {})
default['name'] = _('%s (copy)') % self.name
return super(MisReport, self).copy(default)
# TODO: kpi name cannot be start with query name
@api.multi
def _prepare_aep(self, root_account):
self.ensure_one()
aep = AEP(self.env)
for kpi in self.kpi_ids:
aep.parse_expr(kpi.expression)
aep.done_parsing(root_account)
return aep
@api.multi
def _fetch_queries(self, date_from, date_to,
get_additional_query_filter=None):
self.ensure_one()
res = {}
for query in self.query_ids:
model = self.env[query.model_id.model]
eval_context = {
'env': self.env,
'time': time,
'datetime': datetime,
'dateutil': dateutil,
# deprecated
'uid': self.env.uid,
'context': self.env.context,
}
domain = query.domain and \
safe_eval(query.domain, eval_context) or []
if get_additional_query_filter:
domain.extend(get_additional_query_filter(query))
if query.date_field.ttype == 'date':
domain.extend([(query.date_field.name, '>=', date_from),
(query.date_field.name, '<=', date_to)])
else:
datetime_from = _utc_midnight(
date_from, self._context.get('tz', 'UTC'))
datetime_to = _utc_midnight(
date_to, self._context.get('tz', 'UTC'), add_day=1)
domain.extend([(query.date_field.name, '>=', datetime_from),
(query.date_field.name, '<', datetime_to)])
field_names = [f.name for f in query.field_ids]
all_stored = all([model._fields[f].store for f in field_names])
if not query.aggregate:
data = model.search_read(domain, field_names)
res[query.name] = [AutoStruct(**d) for d in data]
elif query.aggregate == 'sum' and all_stored:
# use read_group to sum stored fields
data = model.read_group(
domain, field_names, [])
s = AutoStruct(count=data[0]['__count'])
for field_name in field_names:
try:
v = data[0][field_name]
except KeyError:
_logger.error('field %s not found in read_group '
'for %s; not summable?',
field_name, model._name)
v = AccountingNone
setattr(s, field_name, v)
res[query.name] = s
else:
data = model.search_read(domain, field_names)
s = AutoStruct(count=len(data))
if query.aggregate == 'min':
agg = _min
elif query.aggregate == 'max':
agg = _max
elif query.aggregate == 'avg':
agg = _avg
elif query.aggregate == 'sum':
agg = _sum
for field_name in field_names:
setattr(s, field_name,
agg([d[field_name] for d in data]))
res[query.name] = s
return res
@api.multi
def _compute(self, lang_id, aep,
date_from, date_to,
period_from, period_to,
target_move,
get_additional_move_line_filter=None,
get_additional_query_filter=None,
period_id=None):
""" Evaluate a report for a given period.
It returns a dictionary keyed on kpi.name with the following values:
* val: the evaluated kpi, or None if there is no data or an error
* val_r: the rendered kpi as a string, or #ERR, #DIV
* val_c: a comment (explaining the error, typically)
* style: the css style of the kpi
(may change in the future!)
* prefix: a prefix to display in front of the rendered value
* suffix: a prefix to display after rendered value
* dp: the decimal precision of the kpi
* is_percentage: true if the kpi is of percentage type
(may change in the future!)
* expr: the kpi expression
* drilldown: true if the drilldown method of
mis.report.instance.period is going to do something
useful in this kpi
:param lang_id: id of a res.lang object
:param aep: an AccountingExpressionProcessor instance created
using _prepare_aep()
:param date_from, date_to: the starting and ending date
:param period_from, period_to: the starting and ending accounting
period (optional, if present must
match date_from, date_to)
:param target_move: all|posted
:param get_additional_move_line_filter: a bound method that takes
no arguments and returns
a domain compatible with
account.move.line
:param get_additional_query_filter: a bound method that takes a single
query argument and returns a
domain compatible with the query
underlying model
:param period_id: an optional opaque value that is returned as
query_id field in the result (may change in the
future!)
"""
self.ensure_one()
res = {}
localdict = {
'registry': self.pool,
'sum': _sum,
'min': _min,
'max': _max,
'len': len,
'avg': _avg,
'AccountingNone': AccountingNone,
}
localdict.update(self._fetch_queries(
date_from, date_to, get_additional_query_filter))
additional_move_line_filter = None
if get_additional_move_line_filter:
additional_move_line_filter = get_additional_move_line_filter()
aep.do_queries(date_from, date_to,
period_from, period_to,
target_move,
additional_move_line_filter)
compute_queue = self.kpi_ids
recompute_queue = []
while True:
for kpi in compute_queue:
try:
kpi_val_comment = kpi.name + " = " + kpi.expression
kpi_eval_expression = aep.replace_expr(kpi.expression)
kpi_val = safe_eval(kpi_eval_expression, localdict)
localdict[kpi.name] = kpi_val
except ZeroDivisionError:
kpi_val = None
kpi_val_rendered = '#DIV/0'
kpi_val_comment += '\n\n%s' % (traceback.format_exc(),)
except (NameError, ValueError):
recompute_queue.append(kpi)
kpi_val = None
kpi_val_rendered = '#ERR'
kpi_val_comment += '\n\n%s' % (traceback.format_exc(),)
except:
kpi_val = None
kpi_val_rendered = '#ERR'
kpi_val_comment += '\n\n%s' % (traceback.format_exc(),)
else:
kpi_val_rendered = kpi.render(lang_id, kpi_val)
try:
kpi_style = None
if kpi.css_style:
kpi_style = safe_eval(kpi.css_style, localdict)
except:
_logger.warning("error evaluating css stype expression %s",
kpi.css_style, exc_info=True)
kpi_style = None
drilldown = (kpi_val is not None and
AEP.has_account_var(kpi.expression))
res[kpi.name] = {
'val': None if kpi_val is AccountingNone else kpi_val,
'val_r': kpi_val_rendered,
'val_c': kpi_val_comment,
'style': kpi_style,
'prefix': kpi.prefix,
'suffix': kpi.suffix,
'dp': kpi.dp,
'is_percentage': kpi.type == 'pct',
'period_id': period_id,
'expr': kpi.expression,
'drilldown': drilldown,
}
if len(recompute_queue) == 0:
# nothing to recompute, we are done
break
if len(recompute_queue) == len(compute_queue):
# could not compute anything in this iteration
# (ie real Value errors or cyclic dependency)
# so we stop trying
break
# try again
compute_queue = recompute_queue
recompute_queue = []
return res
class MisReportInstancePeriod(models.Model):
""" A MIS report instance has the logic to compute
a report template for a given date period.
Periods have a duration (day, week, fiscal period) and
are defined as an offset relative to a pivot date.
"""
@api.one
@api.depends('report_instance_id.pivot_date', 'type', 'offset', 'duration')
def _compute_dates(self):
self.date_from = False
self.date_to = False
self.period_from = False
self.period_to = False
self.valid = False
d = fields.Date.from_string(self.report_instance_id.pivot_date)
if self.type == 'd':
date_from = d + datetime.timedelta(days=self.offset)
date_to = date_from + \
datetime.timedelta(days=self.duration - 1)
self.date_from = fields.Date.to_string(date_from)
self.date_to = fields.Date.to_string(date_to)
self.valid = True
elif self.type == 'w':
date_from = d - datetime.timedelta(d.weekday())
date_from = date_from + datetime.timedelta(days=self.offset * 7)
date_to = date_from + \
datetime.timedelta(days=(7 * self.duration) - 1)
self.date_from = fields.Date.to_string(date_from)
self.date_to = fields.Date.to_string(date_to)
self.valid = True
elif self.type == 'fp':
current_periods = self.env['account.period'].search(
[('special', '=', False),
('date_start', '<=', d),
('date_stop', '>=', d),
('company_id', '=',
self.report_instance_id.company_id.id)])
if current_periods:
all_periods = self.env['account.period'].search(
[('special', '=', False),
('company_id', '=',
self.report_instance_id.company_id.id)],
order='date_start')
all_period_ids = [p.id for p in all_periods]
p = all_period_ids.index(current_periods[0].id) + self.offset
if p >= 0 and p + self.duration <= len(all_period_ids):
periods = all_periods[p:p + self.duration]
self.date_from = periods[0].date_start
self.date_to = periods[-1].date_stop
self.period_from = periods[0]
self.period_to = periods[-1]
self.valid = True
_name = 'mis.report.instance.period'
name = fields.Char(size=32, required=True,
string='Description', translate=True)
type = fields.Selection([('d', _('Day')),
('w', _('Week')),
('fp', _('Fiscal Period')),
# ('fy', _('Fiscal Year'))
],
required=True,
string='Period type')
offset = fields.Integer(string='Offset',
help='Offset from current period',
default=-1)
duration = fields.Integer(string='Duration',
help='Number of periods',
default=1)
date_from = fields.Date(compute='_compute_dates', string="From")
date_to = fields.Date(compute='_compute_dates', string="To")
period_from = fields.Many2one(compute='_compute_dates',
comodel_name='account.period',
string="From period")
period_to = fields.Many2one(compute='_compute_dates',
comodel_name='account.period',
string="To period")
valid = fields.Boolean(compute='_compute_dates',
type='boolean',
string='Valid')
sequence = fields.Integer(string='Sequence', default=100)
report_instance_id = fields.Many2one('mis.report.instance',
string='Report Instance',
ondelete='cascade')
comparison_column_ids = fields.Many2many(
comodel_name='mis.report.instance.period',
relation='mis_report_instance_period_rel',
column1='period_id',
column2='compare_period_id',
string='Compare with')
normalize_factor = fields.Integer(
string='Factor',
help='Factor to use to normalize the period (used in comparison',
default=1)
_order = 'sequence, id'
_sql_constraints = [
('duration', 'CHECK (duration>0)',
'Wrong duration, it must be positive!'),
('normalize_factor', 'CHECK (normalize_factor>0)',
'Wrong normalize factor, it must be positive!'),
('name_unique', 'unique(name, report_instance_id)',
'Period name should be unique by report'),
]
@api.multi
def _get_additional_move_line_filter(self):
""" Prepare a filter to apply on all move lines
This filter is applied with a AND operator on all
accounting expression domains. This hook is intended
to be inherited, and is useful to implement filtering
on analytic dimensions or operational units.
Returns an Odoo domain expression (a python list)
compatible with account.move.line."""
self.ensure_one()
return []
@api.multi
def _get_additional_query_filter(self, query):
""" Prepare an additional filter to apply on the query
This filter is combined to the query domain with a AND
operator. This hook is intended
to be inherited, and is useful to implement filtering
on analytic dimensions or operational units.
Returns an Odoo domain expression (a python list)
compatible with the model of the query."""
self.ensure_one()
return []
@api.multi
def drilldown(self, expr):
self.ensure_one()
if AEP.has_account_var(expr):
aep = AEP(self.env)
aep.parse_expr(expr)
aep.done_parsing(self.report_instance_id.root_account)
domain = aep.get_aml_domain_for_expr(
expr,
self.date_from, self.date_to,
self.period_from, self.period_to,
self.report_instance_id.target_move)
domain.extend(self._get_additional_move_line_filter())
return {
'name': expr + ' - ' + self.name,
'domain': domain,
'type': 'ir.actions.act_window',
'res_model': 'account.move.line',
'views': [[False, 'list'], [False, 'form']],
'view_type': 'list',
'view_mode': 'list',
'target': 'current',
}
else:
return False
@api.multi
def _compute(self, lang_id, aep):
self.ensure_one()
return self.report_instance_id.report_id._compute(
lang_id, aep,
self.date_from, self.date_to,
self.period_from, self.period_to,
self.report_instance_id.target_move,
self._get_additional_move_line_filter,
self._get_additional_query_filter,
period_id=self.id,
)
class MisReportInstance(models.Model):
"""The MIS report instance combines everything to compute
a MIS report template for a set of periods."""
@api.one
@api.depends('date')
def _compute_pivot_date(self):
if self.date:
self.pivot_date = self.date
else:
self.pivot_date = fields.Date.context_today(self)
_name = 'mis.report.instance'
name = fields.Char(required=True,
string='Name', translate=True)
description = fields.Char(required=False,
string='Description', translate=True)
date = fields.Date(string='Base date',
help='Report base date '
'(leave empty to use current date)')
pivot_date = fields.Date(compute='_compute_pivot_date',
string="Pivot date")
report_id = fields.Many2one('mis.report',
required=True,
string='Report')
period_ids = fields.One2many('mis.report.instance.period',
'report_instance_id',
required=True,
string='Periods',
copy=True)
target_move = fields.Selection([('posted', 'All Posted Entries'),
('all', 'All Entries')],
string='Target Moves',
required=True,
default='posted')
company_id = fields.Many2one(comodel_name='res.company',
string='Company',
readonly=True,
related='root_account.company_id',
store=True)
root_account = fields.Many2one(comodel_name='account.account',
domain='[("parent_id", "=", False)]',
string="Account chart",
required=True)
landscape_pdf = fields.Boolean(string='Landscape PDF')
@api.one
def copy(self, default=None):
default = dict(default or {})
default['name'] = _('%s (copy)') % self.name
return super(MisReportInstance, self).copy(default)
def _format_date(self, lang_id, date):
# format date following user language
date_format = self.env['res.lang'].browse(lang_id).date_format
return datetime.datetime.strftime(
fields.Date.from_string(date), date_format)
@api.multi
def preview(self):
assert len(self) == 1
view_id = self.env.ref('mis_builder.'
'mis_report_instance_result_view_form')
return {
'type': 'ir.actions.act_window',
'res_model': 'mis.report.instance',
'res_id': self.id,
'view_mode': 'form',
'view_type': 'form',
'view_id': view_id.id,
'target': 'current',
}
@api.multi
def print_pdf(self):
self.ensure_one()
data = {'context': self.env.context}
return {
'name': 'MIS report instance QWEB PDF report',
'model': 'mis.report.instance',
'type': 'ir.actions.report.xml',
'report_name': 'mis_builder.report_mis_report_instance',
'report_type': 'qweb-pdf',
'context': self.env.context,
'data': data,
}
@api.multi
def export_xls(self):
self.ensure_one()
return {
'name': 'MIS report instance XLS report',
'model': 'mis.report.instance',
'type': 'ir.actions.report.xml',
'report_name': 'mis.report.instance.xls',
'report_type': 'xls',
'context': self.env.context,
}
@api.multi
def display_settings(self):
assert len(self._ids) <= 1
view_id = self.env.ref('mis_builder.mis_report_instance_view_form')
return {
'type': 'ir.actions.act_window',
'res_model': 'mis.report.instance',
'res_id': self.id if self.id else False,
'view_mode': 'form',
'view_type': 'form',
'views': [(view_id.id, 'form')],
'view_id': view_id.id,
'target': 'current',
}
@api.multi
def compute(self):
self.ensure_one()
aep = self.report_id._prepare_aep(self.root_account)
# fetch user language only once
# TODO: is this necessary?
lang = self.env.user.lang
if not lang:
lang = 'en_US'
lang_id = self.env['res.lang'].search([('code', '=', lang)]).id
# compute kpi values for each period
kpi_values_by_period_ids = {}
for period in self.period_ids:
if not period.valid:
continue
kpi_values = period._compute(lang_id, aep)
kpi_values_by_period_ids[period.id] = kpi_values
# prepare header and content
header = []
header.append({
'kpi_name': '',
'cols': []
})
content = []
rows_by_kpi_name = {}
for kpi in self.report_id.kpi_ids:
rows_by_kpi_name[kpi.name] = {
'kpi_name': kpi.description,
'cols': [],
'default_style': kpi.default_css_style
}
content.append(rows_by_kpi_name[kpi.name])
# populate header and content
for period in self.period_ids:
if not period.valid:
continue
# add the column header
if period.duration > 1 or period.type == 'w':
# from, to
if period.period_from and period.period_to:
date_from = period.period_from.name
date_to = period.period_to.name
else:
date_from = self._format_date(lang_id, period.date_from)
date_to = self._format_date(lang_id, period.date_to)
header_date = _('from %s to %s') % (date_from, date_to)
else:
# one period or one day
if period.period_from and period.period_to:
header_date = period.period_from.name
else:
header_date = self._format_date(lang_id, period.date_from)
header[0]['cols'].append(dict(name=period.name, date=header_date))
# add kpi values
kpi_values = kpi_values_by_period_ids[period.id]
for kpi_name in kpi_values:
rows_by_kpi_name[kpi_name]['cols'].append(kpi_values[kpi_name])
# add comparison columns
for compare_col in period.comparison_column_ids:
compare_kpi_values = \
kpi_values_by_period_ids.get(compare_col.id)
if compare_kpi_values:
# add the comparison column header
header[0]['cols'].append(
dict(name=_('%s vs %s') % (period.name,
compare_col.name),
date=''))
# add comparison values
for kpi in self.report_id.kpi_ids:
rows_by_kpi_name[kpi.name]['cols'].append({
'val_r': kpi.render_comparison(
lang_id,
kpi_values[kpi.name]['val'],
compare_kpi_values[kpi.name]['val'],
period.normalize_factor,
compare_col.normalize_factor)
})
return {'header': header,
'content': content}

10
mis_builder/report/__init__.py

@ -1,10 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
try:
from . import mis_builder_xls
except ImportError:
pass # this module is not installed
from . import report_mis_report_instance

120
mis_builder/report/mis_builder_xls.py

@ -1,120 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
import xlwt
from openerp.report import report_sxw
from openerp.addons.report_xls.report_xls import report_xls
import logging
_logger = logging.getLogger(__name__)
class MisBuilderXlsParser(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(MisBuilderXlsParser, self).__init__(
cr, uid, name, context=context)
self.context = context
class MisBuilderXls(report_xls):
def __init__(self, name, table, rml=False, parser=False, header=True,
store=False):
super(MisBuilderXls, self).__init__(
name, table, rml, parser, header, store)
# Cell Styles
_xs = self.xls_styles
# header
rh_cell_format = _xs['bold'] + _xs['fill'] + \
_xs['borders_all'] + _xs['right']
self.rh_cell_style = xlwt.easyxf(rh_cell_format)
self.rh_cell_style_date = xlwt.easyxf(
rh_cell_format, num_format_str=report_xls.date_format)
# lines
self.mis_rh_cell_style = xlwt.easyxf(
_xs['borders_all'] + _xs['bold'] + _xs['fill'])
def generate_xls_report(self, _p, _xs, data, objects, wb):
report_name = objects[0].name
ws = wb.add_sheet(report_name[:31])
ws.panes_frozen = True
ws.remove_splits = True
ws.portrait = 0 # Landscape
ws.fit_width_to_pages = 1
row_pos = 0
# set print header/footer
ws.header_str = self.xls_headers['standard']
ws.footer_str = self.xls_footers['standard']
# Title
c_specs = [
('report_name', 1, 0, 'text', report_name),
]
row_data = self.xls_row_template(c_specs, ['report_name'])
row_pos = self.xls_write_row(
ws, row_pos, row_data, row_style=xlwt.easyxf(_xs['xls_title']))
row_pos += 1
# get the computed result of the report
data = self.pool.get('mis.report.instance').compute(
self.cr, self.uid, objects[0].id, self.context)
# Column headers
header_name_list = ['']
col_specs_template = {'': {'header': [1, 30, 'text', ''],
'header_date': [1, 1, 'text', '']}}
for col in data['header'][0]['cols']:
col_specs_template[col['name']] = {'header': [1, 30, 'text',
col['name']],
'header_date': [1, 1, 'text',
col['date']]}
header_name_list.append(col['name'])
c_specs = map(
lambda x: self.render(x, col_specs_template, 'header'),
header_name_list)
row_data = self.xls_row_template(c_specs, [x[0] for x in c_specs])
row_pos = self.xls_write_row(
ws, row_pos, row_data, row_style=self.rh_cell_style,
set_column_size=True)
c_specs = map(lambda x: self.render(
x, col_specs_template, 'header_date'), header_name_list)
row_data = self.xls_row_template(c_specs, [x[0] for x in c_specs])
row_pos = self.xls_write_row(
ws, row_pos, row_data, row_style=self.rh_cell_style_date)
ws.set_horz_split_pos(row_pos)
ws.set_vert_split_pos(1)
for line in data['content']:
col = 0
ws.write(row_pos, col, line['kpi_name'], self.mis_rh_cell_style)
for value in line['cols']:
col += 1
num_format_str = '#'
if value.get('dp'):
num_format_str += '.'
num_format_str += '0' * int(value['dp'])
if value.get('prefix'):
num_format_str = '"%s"' % value['prefix'] + num_format_str
if value.get('suffix'):
num_format_str += ' "%s"' % value['suffix']
kpi_cell_style = xlwt.easyxf(
_xs['borders_all'] + _xs['right'],
num_format_str=num_format_str)
if value.get('val'):
val = value['val']
if value.get('is_percentage'):
val = val / 0.01
ws.write(row_pos, col, val, kpi_cell_style)
else:
ws.write(row_pos, col, value['val_r'], kpi_cell_style)
row_pos += 1
MisBuilderXls('report.mis.report.instance.xls',
'mis.report.instance',
parser=MisBuilderXlsParser)

50
mis_builder/report/report_mis_report_instance.py

@ -1,50 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
import logging
from openerp import api, models
_logger = logging.getLogger(__name__)
class ReportMisReportInstance(models.AbstractModel):
_name = 'report.mis_builder.report_mis_report_instance'
@api.multi
def render_html(self, data=None):
docs = self.env['mis.report.instance'].browse(self._ids)
docs_computed = {}
for doc in docs:
docs_computed[doc.id] = doc.compute()
docargs = {
'doc_ids': self._ids,
'doc_model': 'mis.report.instance',
'docs': docs,
'docs_computed': docs_computed,
}
return self.env['report'].\
render('mis_builder.report_mis_report_instance', docargs)
class Report(models.Model):
_inherit = "report"
@api.v7
def get_pdf(self, cr, uid, ids, report_name, html=None, data=None,
context=None):
if not ids and context.get('active_ids') and\
report_name == 'mis_builder.report_mis_report_instance':
ids = context.get('active_ids')
if ids:
report = self._get_report_from_name(cr, uid, report_name)
obj = self.pool[report.model].browse(cr, uid, ids,
context=context)[0]
context = context.copy()
if hasattr(obj, 'landscape_pdf') and obj.landscape_pdf:
context.update({'landscape': True})
return super(Report, self).get_pdf(cr, uid, ids, report_name,
html=html, data=data,
context=context)

55
mis_builder/report/report_mis_report_instance.xml

@ -1,55 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<template id="report_mis_report_instance">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="report.internal_layout">
<div class="page">
<h2 t-field="o.name"></h2>
<table class="table table-condensed">
<thead>
<tr>
<t t-foreach="docs_computed[o.id]['header']" t-as="h">
<th>
<div>
<t t-esc="h_value['kpi_name']"/>
</div>
</th>
<th t-foreach="h_value['cols']" t-as="col" class="text-center">
<div>
<t t-esc="col['name']"/>
</div>
<div>
<t t-esc="col['date']"/>
</div>
</th>
</t>
</tr>
</thead>
<tbody>
<tr t-foreach="docs_computed[o.id]['content']" t-as="c">
<td t-att-style="c_value['default_style']">
<div class="text-left">
<t t-esc="c_value['kpi_name']"/>
</div>
</td>
<t t-foreach="c_value['cols']" t-as="value">
<td t-att-style="c_value['default_style']">
<div t-att-style="value_value.get('style')" class="text-right">
<t t-esc="value_value['val_r']"/>
</div>
</td>
</t>
</tr>
</tbody>
</table>
</div>
</t>
</t>
</t>
</template>
</data>
</openerp>

11
mis_builder/security/ir.model.access.csv

@ -1,11 +0,0 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
manage_mis_report_kpi,manage_mis_report_kpi,model_mis_report_kpi,account.group_account_manager,1,1,1,1
access_mis_report_kpi,access_mis_report_kpi,model_mis_report_kpi,base.group_user,1,0,0,0
manage_mis_report_query,manage_mis_report_query,model_mis_report_query,account.group_account_manager,1,1,1,1
access_mis_report_query,access_mis_report_query,model_mis_report_query,base.group_user,1,0,0,0
manage_mis_report,manage_mis_report,model_mis_report,account.group_account_manager,1,1,1,1
access_mis_report,access_mis_report,model_mis_report,base.group_user,1,0,0,0
manage_mis_report_instance_period,manage_mis_report_instance_period,model_mis_report_instance_period,account.group_account_manager,1,1,1,1
access_mis_report_instance_period,access_mis_report_instance_period,model_mis_report_instance_period,base.group_user,1,0,0,0
manage_mis_report_instance,manage_mis_report_instance,model_mis_report_instance,account.group_account_manager,1,1,1,1
access_mis_report_instance,access_mis_report_instance,model_mis_report_instance,base.group_user,1,0,0,0

13
mis_builder/security/mis_builder_security.xml

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="0">
<record id="mis_builder_multi_company_rule" model="ir.rule">
<field name="name">Mis Builder multi company</field>
<field name="model_id" ref="model_mis_report_instance"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
</data>
</openerp>

BIN
mis_builder/static/description/ex_dashboard.png

Before

Width: 749  |  Height: 391  |  Size: 34 KiB

BIN
mis_builder/static/description/ex_report.png

Before

Width: 1111  |  Height: 560  |  Size: 81 KiB

BIN
mis_builder/static/description/ex_report_template.png

Before

Width: 1174  |  Height: 654  |  Size: 98 KiB

BIN
mis_builder/static/description/icon.png

Before

Width: 128  |  Height: 128  |  Size: 9.2 KiB

79
mis_builder/static/description/icon.svg
File diff suppressed because it is too large
View File

75
mis_builder/static/description/index.html

@ -1,75 +0,0 @@
<section id="addons-mis-builder">
<img src="https://img.shields.io/badge/licence-AGPL--3-blue.svg" alt="License: AGPL-3" />
<section id="mis-builder">
<h1>MIS Builder</h1>
<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 from arbitrary Odoo models. Reports can be exported to PDF, Excel and they can be added to Odoo dashboards.</p>
<section id="installation">
<h2>Installation</h2>
<p>There is no specific installation procedure for this module.</p>
</section>
<section id="configuration-and-usage">
<h2>Configuration and Usage</h2>
<p>To configure this module, you need to:</p>
<ul>
<li>Go to Accounting &gt; Configuration &gt; Financial Reports &gt; MIS Report Templates where you can create report templates by defining KPI's. KPI's constitute the rows of your reports. Such report templates are time independent.</li>
</ul>
<figure>
<img src="ex_report_template.png" alt="Sample report template" scale="80" />
</figure>
<ul>
<li>Then in Accounting &gt; Reporting &gt; MIS Reports you can create report instance by binding the templates to time period, hence defining the columns of your reports.</li>
</ul>
<figure>
<img src="ex_report.png" alt="Sample report configuration" />
</figure>
<ul>
<li>From the MIS Report view, you can preview the report, add it to and Odoo dashboard, and export it to PDF or Excel.</li>
</ul>
<figure>
<img src="ex_dashboard.png" alt="Sample dashboard view" />
</figure>
<p>For further information, please visit:</p>
<ul>
<li><a href="https://www.odoo.com/forum/help-1">https://www.odoo.com/forum/help-1</a></li>
</ul>
</section>
<section id="known-issues-roadmap">
<h2>Known issues / Roadmap</h2>
<ul>
<li>More tests should be added. The first part is creating test data, then it will be easier. At the minimum, We need the following test data:
<ul>
<li>one account charts with a few normal accounts and view accounts,</li>
<li>two fiscal years,</li>
<li>an opening entry in the second fiscal year,</li>
<li>to test multi-company consolidation, we need a second company with it's own account chart and two fiscal years, but without opening entry; we also need a third company which is the parent of the other two and has a consolidation chart of account.</li>
</ul>
</li>
</ul>
</section>
<section id="bug-tracker">
<h2>Bug Tracker</h2>
<p>Bugs are tracked on <a href="https://github.com/OCA/account-financial-reporting/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 feedback <a href="https://github.com/OCA/account-financial-reporting/issues/new?body=module:%20mis_builder%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">here</a>.</p>
</section>
<section id="credits">
<h2>Credits</h2>
<section id="contributors">
<h3>Contributors</h3>
<ul>
<li>Stéphane Bidoul &lt;<a href="mailto:stephane.bidoul@acsone.eu">stephane.bidoul@acsone.eu</a>&gt;</li>
<li>Laetitia Gangloff &lt;<a href="mailto:laetitia.gangloff@acsone.eu">laetitia.gangloff@acsone.eu</a>&gt;</li>
<li>Adrien Peiffer &lt;<a href="mailto:adrien.peiffer@acsone.eu">adrien.peiffer@acsone.eu</a>&gt;</li>
</ul>
</section>
<section id="maintainer">
<h3>Maintainer</h3>
<a href="https://odoo-community.org">
<img src="https://odoo-community.org/logo.png" alt="Odoo Community Association" />
</a>
<p>This module is maintained by the OCA.</p>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.</p>
<p>To contribute to this module, please visit <a href="http://odoo-community.org">http://odoo-community.org</a>.</p>
</section>
</section>
</section>
</section>

17
mis_builder/static/src/css/custom.css

@ -1,17 +0,0 @@
.openerp .mis_builder_ralign {
text-align: right;
}
.openerp .mis_builder a {
/* we don't want the link color, to respect user styles */
color: inherit;
}
.openerp .mis_builder a:hover {
/* underline links on hover to give a visual cue */
text-decoration: underline;
}
.openerp .oe_mis_builder_buttons {
padding-bottom: 10px;
}

BIN
mis_builder/static/src/img/icon.png

Before

Width: 64  |  Height: 64  |  Size: 3.4 KiB

139
mis_builder/static/src/js/mis_builder.js

@ -1,139 +0,0 @@
openerp.mis_builder = function(instance) {
instance.mis_builder.MisReport = instance.web.form.FormWidget.extend({
template: "mis_builder.MisReport",
init: function() {
this._super.apply(this, arguments);
this.mis_report_data = null;
this.mis_report_instance_id = false;
this.field_manager.on("view_content_has_changed", this, this.reload_widget);
},
reload_widget: function() {
var self = this
self.mis_report_instance_id = self.getParent().datarecord.id
if (self.mis_report_instance_id) {
self.generate_content();
} else {
self.display_settings();
}
},
start: function() {
this._super.apply(this, arguments);
var self = this;
self.mis_report_instance_id = self.getParent().datarecord.id
if (self.mis_report_instance_id) {
self.getParent().dataset.context['no_destroy'] = true;
} else {
self.display_settings();
}
},
get_context: function() {
var self = this;
context = {}
if (this.mis_report_instance_id){
context['active_ids'] = [this.mis_report_instance_id];
}
return context
},
print: function() {
var self = this
context = new instance.web.CompoundContext(self.build_context(), self.get_context()|| {})
new instance.web.Model("mis.report.instance").call(
"print_pdf",
[self.mis_report_instance_id],
{'context': context}
).then(function(result){
self.do_action(result);
});
},
export_pdf: function() {
var self = this
context = new instance.web.CompoundContext(self.build_context(), self.get_context()|| {})
new instance.web.Model("mis.report.instance").call(
"export_xls",
[self.mis_report_instance_id],
{'context': context}
).then(function(result){
self.do_action(result);
});
},
display_settings: function() {
var self = this
context = new instance.web.CompoundContext(self.build_context(), self.get_context()|| {})
new instance.web.Model("mis.report.instance").call(
"display_settings",
[self.mis_report_instance_id],
{'context': context}
).then(function(result){
self.do_action(result);
});
},
generate_content: function() {
var self = this
context = new instance.web.CompoundContext(self.build_context(), self.get_context()|| {})
new instance.web.Model("mis.report.instance").call(
"compute",
[self.mis_report_instance_id],
{'context': context}
).then(function(result){
self.mis_report_data = result;
self.renderElement();
});
},
renderElement: function() {
this._super();
var self = this;
self.$(".oe_mis_builder_print").click(_.bind(this.print, this));
self.$(".oe_mis_builder_export").click(_.bind(this.export_pdf, this));
self.$(".oe_mis_builder_settings").click(_.bind(this.display_settings, this));
var Users = new instance.web.Model('res.users');
Users.call('has_group', ['account.group_account_user']).done(function (res) {
if (res) {
self.$(".oe_mis_builder_settings").show();
}
});
},
events: {
"click a.mis_builder_drilldown": "drilldown",
},
drilldown: function(event) {
var self = this;
var drilldown = JSON.parse($(event.target).data("drilldown"));
if (drilldown) {
var period_id = JSON.parse($(event.target).data("period-id"));
var val_c = JSON.parse($(event.target).data("expr"));
context = new instance.web.CompoundContext(self.build_context(), self.get_context()|| {})
new instance.web.Model("mis.report.instance.period").call(
"drilldown",
[period_id, val_c],
{'context': context}
).then(function(result) {
if (result) {
self.do_action(result);
}
});
}
},
});
instance.web.ActionManager.include({
dialog_stop: function (reason) {
var self = this
if (self.dialog_widget && self.dialog_widget.dataset && self.dialog_widget.dataset.context) {
var context = self.dialog_widget.dataset.context
if (!context['no_destroy']) {
this._super.apply(this, arguments);
}
} else {
this._super.apply(this, arguments);
}
}
});
instance.web.form.custom_widgets.add('mis_report', 'instance.mis_builder.MisReport');
}

68
mis_builder/static/src/xml/mis_widget.xml

@ -1,68 +0,0 @@
<template>
<t t-name="mis_builder.MisReport">
<div class="oe_mis_builder_content">
<div class="oe_mis_builder_buttons oe_right">
<button class="oe_mis_builder_print"><img src="/web/static/src/img/icons/gtk-print.png"/> Print</button>
<button class="oe_mis_builder_export"><img src="/web/static/src/img/icons/gtk-go-down.png"/>Export</button>
<button style="display: none;" class="oe_mis_builder_settings"><img src="/web/static/src/img/icons/gtk-execute.png"/> Settings</button>
</div>
<table t-if="widget.mis_report_data" class="oe_list_content mis_builder">
<thead>
<tr class="oe_list_header_columns">
<t t-foreach="widget.mis_report_data.header" t-as="h">
<th class="oe_list_header_char">
<div>
<t t-esc="h_value.kpi_name"/>
</div>
</th>
<th t-foreach="h_value.cols" t-as="col" class="oe_list_header_char mis_builder_ralign">
<div>
<t t-esc="col.name"/>
</div>
<div>
<t t-esc="col.date"/>
</div>
</th>
</t>
</tr>
</thead>
<tbody>
<tr t-foreach="widget.mis_report_data.content" t-as="c">
<td t-att="{'style': c_value.default_style}">
<div>
<t t-esc="c_value.kpi_name"/>
</div>
</td>
<t t-foreach="c_value.cols" t-as="value">
<td t-att="{'style': c_value.default_style}" class="mis_builder_ralign">
<div t-att="{'style': value_value.style, 'title': value_value.val_c}">
<t t-if="value_value.drilldown">
<a href="javascript:void(0)"
class="mis_builder_drilldown"
t-att-data-drilldown="JSON.stringify(value_value.drilldown)"
t-att-data-period-id="JSON.stringify(value_value.period_id)"
t-att-data-expr="JSON.stringify(value_value.expr)"
>
<t t-esc="value_value.val_r"/>
</a>
</t>
<t t-if="!value_value.drilldown">
<t t-esc="value_value.val_r"/>
</t>
</div>
</td>
</t>
</tr>
</tbody>
<tfoot>
<tr>
<td class="oe_list_footer" />
<t t-foreach="widget.mis_report_data.header" t-as="f">
<td t-foreach="f_value.cols" class="oe_list_footer" />
</t>
</tr>
</tfoot>
</table>
</div>
</t>
</template>

5
mis_builder/tests/__init__.py

@ -1,5 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import test_mis_builder

2
mis_builder/tests/mis.report.csv

@ -1,2 +0,0 @@
"id","description","kpi_ids/id","name","query_ids/id"
"mis_report_test","","mis_report_kpi_test","Test report","mis_report_query_test"

2
mis_builder/tests/mis.report.instance.csv

@ -1,2 +0,0 @@
"id","date","description","name","period_ids/id","report_id/id","root_account/id"
"mis_report_instance_test","2014-07-31","","Test-report-instance without company","mis_report_instance_period_test","mis_report_test","account.chart0"

2
mis_builder/tests/mis.report.instance.period.csv

@ -1,2 +0,0 @@
"id","duration","name","offset","type","sequence"
"mis_report_instance_period_test","1","today","","Day",""

2
mis_builder/tests/mis.report.kpi.csv

@ -1,2 +0,0 @@
"id","compare_method","description","expression","divider","name","dp","sequence","type","suffix"
"mis_report_kpi_test","Percentage","total test","len(test)","","total_test","","1","Numeric",""

2
mis_builder/tests/mis.report.query.csv

@ -1,2 +0,0 @@
"id","date_field/id","domain","field_ids/id","model_id/id","name"
"mis_report_query_test","account.field_account_analytic_balance_date1","","account.field_account_analytic_balance_empty_acc","account.model_account_analytic_balance","test"

63
mis_builder/tests/test_mis_builder.py

@ -1,63 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
import openerp.tests.common as common
from ..models import mis_builder
class TestMisBuilder(common.TransactionCase):
def setUp(self):
super(TestMisBuilder, self).setUp()
def test_datetime_conversion(self):
date_to_convert = '2014-07-05'
date_time_convert = mis_builder._utc_midnight(
date_to_convert, 'Europe/Brussels')
self.assertEqual(date_time_convert, '2014-07-04 22:00:00',
'The converted date time convert must contains hour')
date_time_convert = mis_builder._utc_midnight(
date_to_convert, 'Europe/Brussels', add_day=1)
self.assertEqual(date_time_convert, '2014-07-05 22:00:00',
'The converted date time convert must contains hour')
date_time_convert = mis_builder._utc_midnight(
date_to_convert, 'US/Pacific')
self.assertEqual(date_time_convert, '2014-07-05 07:00:00',
'The converted date time convert must contains hour')
date_time_convert = mis_builder._utc_midnight(
date_to_convert, 'US/Pacific', add_day=1)
self.assertEqual(date_time_convert, '2014-07-06 07:00:00',
'The converted date time convert must contains hour')
def test_fetch_query(self):
# create a report on a model without company_id field :
# account.analytic.balance
data = self.registry('mis.report.instance').compute(
self.cr, self.uid,
self.ref('mis_builder.mis_report_instance_test'))
self.assertDictContainsSubset(
{'content':
[{'kpi_name': u'total test',
'default_style': False,
'cols': [{'period_id': self.ref('mis_builder.'
'mis_report_instance_'
'period_test'),
'style': None,
'prefix': False,
'suffix': False,
'expr': 'len(test)',
'val_c': 'total_test = len(test)',
'val': 0,
'val_r': u'\u202f0\xa0',
'is_percentage': False,
'dp': 0,
'drilldown': False}]
}],
'header':
[{'kpi_name': '',
'cols': [{'date': '07/31/2014',
'name': u'today'}]
}],
}, data)

222
mis_builder/views/mis_builder.xml

@ -1,222 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<template id="assets_backend" name="mis_builder" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<link rel="stylesheet" href="/mis_builder/static/src/css/custom.css"/>
<script type="text/javascript" src="/mis_builder/static/src/js/mis_builder.js"></script>
</xpath>
</template>
<record model="ir.ui.view" id="mis_report_view_tree">
<field name="name">mis.report.view.tree</field>
<field name="model">mis.report</field>
<field name="arch" type="xml">
<tree string="MIS Reports">
<field name="name"/>
<field name="description"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="mis_report_view_form">
<field name="name">mis.report.view.form</field>
<field name="model">mis.report</field>
<field name="arch" type="xml">
<form string="MIS Report" version="7.0">
<sheet>
<group col="2">
<field name="name"/>
<field name="description"/>
</group>
<group string="Queries">
<field name="query_ids" nolabel="1" colspan="2">
<tree string="Queries" editable="bottom">
<field name="name"/>
<field name="model_id"/>
<field name="field_ids" domain="[('model_id', '=', model_id)]" widget="many2many_tags"/>
<field name="field_names"/>
<field name="aggregate"/>
<field name="date_field" domain="[('model_id', '=', model_id), ('ttype', 'in', ('date', 'datetime'))]"/>
<field name="domain"/>
</tree>
</field>
</group>
<group string="KPI's">
<field name="kpi_ids" nolabel="1" colspan="2">
<tree string="KPI's" editable="bottom">
<field name="sequence" widget="handle"/>
<field name="description"/>
<field name="name"/>
<field name="expression"/>
<field name="type"/>
<field name="dp" attrs="{'invisible': [('type', '=', 'str')]}"/>
<field name="divider" attrs="{'invisible': [('type', '=', 'str')]}"/>
<field name="prefix"/>
<field name="suffix"/>
<field name="compare_method" attrs="{'invisible': [('type', '=', 'str')]}"/>
<field name="default_css_style"/>
<field name="css_style"/>
</tree>
</field>
</group>
<group col="2" string="Legend (for kpi expressions)">
<group>
<label colspan="2" string="Expressions are of the form &lt;field&gt;&lt;mode&gt;[accounts][domain]"/>
<label colspan="2" string="Possible values for 'field' can be:"/>
<group>
<label colspan="2" string="* bal for balance (debit - credit)"/>
<label colspan="2" string="* crd for credit"/>
<label colspan="2" string="* deb for debit"/>
</group>
<label colspan="2" string="Possible values for 'mode' are:"/>
<group>
<label colspan="2" string="* nothing or p: variation over the period"/>
<label colspan="2" string="* i: at the beginning of the period"/>
<label colspan="2" string="* e: at the end of the period"/>
</group>
<label colspan="2" string="'accounts' is a comma-separated list of account codes, possibly containing %% wildcards"/>
<label colspan="2" string="'domain' is an optional filter on move lines (eg to filter on analytic accounts or journal)"/>
</group>
<group>
<label colspan="2" string="Examples"/>
<group>
<label colspan="2" string="* bal[70]: variation of the balance of account 70 over the period (it is the same as balp[70]);"/>
<label colspan="2" string="* bali[70,60]: initial balance of accounts 70 and 60;"/>
<label colspan="2" string="* bale[1%%]: balance of accounts starting with 1 at end of period."/>
</group>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="mis_report_view_action">
<field name="name">MIS Report Templates</field>
<field name="view_id" ref="mis_report_view_tree"/>
<field name="res_model">mis.report</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="mis_report_view_menu" parent="account.menu_account_reports" name="MIS Report Templates" action="mis_report_view_action" sequence="21"/>
<record id="xls_export" model="ir.actions.report.xml">
<field name="name">MIS report instance XLS report</field>
<field name="model">mis.report.instance</field>
<field name="type">ir.actions.report.xml</field>
<field name="report_name">mis.report.instance.xls</field>
<field name="report_type">xls</field>
<field name="auto" eval="False"/>
</record>
<record id="qweb_pdf_export" model="ir.actions.report.xml">
<field name="name">MIS report instance QWEB PDF report</field>
<field name="model">mis.report.instance</field>
<field name="type">ir.actions.report.xml</field>
<field name="report_name">mis_builder.report_mis_report_instance</field>
<field name="report_type">qweb-pdf</field>
<field name="auto" eval="False"/>
</record>
<record model="ir.ui.view" id="mis_report_instance_result_view_form">
<field name="name">mis.report.instance.result.view.form</field>
<field name="model">mis.report.instance</field>
<field name="priority" eval="15 "/>
<field name="arch" type="xml">
<form string="MIS Report Result" version="7.0">
<widget type="mis_report"></widget>
</form>
</field>
</record>
<record model="ir.ui.view" id="mis_report_instance_view_tree">
<field name="name">mis.report.instance.view.tree</field>
<field name="model">mis.report.instance</field>
<field name="arch" type="xml">
<tree string="MIS Report Instances">
<field name="name"/>
<field name="description"/>
<field name="report_id"/>
<field name="target_move"/>
<field name="pivot_date"/>
<field name="company_id"/>
<button name="display_settings" type="object" icon="gtk-execute" />
</tree>
</field>
</record>
<record model="ir.ui.view" id="mis_report_instance_view_form">
<field name="name">mis.report.instance.view.form</field>
<field name="model">mis.report.instance</field>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<form string="MIS Report Instance" version="7.0">
<sheet>
<div class="oe_title">
<div class="oe_edit_only">
<label for="name"/>
</div>
<h1>
<field name="name" placeholder="Name"/>
</h1>
</div>
<div class="oe_right oe_button_box" name="buttons">
<button type="object" name="preview" string="Preview" icon="gtk-print-preview" />
<button type="object" name="print_pdf" string="Print" icon="gtk-print" />
<button type="object" name="export_xls" string="Export" icon="gtk-go-down" />
<button type="action" name="%(mis_report_instance_add_to_dashboard_action)d" string="Add to dashboard" icon="gtk-add" />
</div>
<group col="4">
<field name="report_id" colspan="4"/>
<field name="description"/>
<field name="landscape_pdf" />
<field name="root_account"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="target_move"/>
</group>
<group col="4" string="Periods">
<group colspan="2">
<field name="date"/>
</group>
<newline/>
<group>
<field name="period_ids" colspan="4" nolabel="1">
<tree string="KPI's" editable="bottom" colors="red:valid==False">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="type"/>
<field name="offset"/>
<field name="duration"/>
<field name="normalize_factor"/>
<field name="date_from"/>
<field name="date_to"/>
<field name="period_from"/>
<field name="period_to"/>
<field name="valid" invisible="1"/>
<field name="report_instance_id" invisible="1"/>
<field name="id" invisible="1"/>
<field name="comparison_column_ids" domain="[('report_instance_id', '=', report_instance_id), ('id', '!=', id)]" widget="many2many_tags"/>
</tree>
</field>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="mis_report_instance_view_action">
<field name="name">MIS Reports</field>
<field name="view_id" ref="mis_report_instance_view_tree"/>
<field name="res_model">mis.report.instance</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="mis_report_instance_view_menu" parent="account.menu_finance_reports" name="MIS Reports" action="mis_report_instance_view_action" sequence="101"/>
</data>
</openerp>

5
mis_builder/wizard/__init__.py

@ -1,5 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import mis_builder_dashboard

66
mis_builder/wizard/mis_builder_dashboard.py

@ -1,66 +0,0 @@
# -*- coding: utf-8 -*-
# © 2014-2015 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from openerp import api, fields, models
from lxml import etree
class AddMisReportInstanceDashboard(models.TransientModel):
_name = "add.mis.report.instance.dashboard.wizard"
name = fields.Char('Name', size=32, required=True)
dashboard_id = fields.Many2one('ir.actions.act_window',
string="Dashboard", required=True,
domain="[('res_model', '=', "
"'board.board')]")
@api.model
def default_get(self, fields):
res = {}
if self.env.context.get('active_id', False):
res = super(AddMisReportInstanceDashboard, self).default_get(
fields)
# get report instance name
res['name'] = self.env['mis.report.instance'].browse(
self.env.context['active_id']).name
return res
@api.multi
def action_add_to_dashboard(self):
assert self.env.context.get('active_id', False), \
"active_id missing in context"
# create the act_window corresponding to this report
self.env.ref('mis_builder.mis_report_instance_result_view_form')
view = self.env.ref(
'mis_builder.mis_report_instance_result_view_form')
report_result = self.env['ir.actions.act_window'].create(
{'name': 'mis.report.instance.result.view.action.%d'
% self.env.context['active_id'],
'res_model': 'mis.report.instance',
'res_id': self.env.context['active_id'],
'target': 'current',
'view_mode': 'form',
'view_id': view.id})
# add this result in the selected dashboard
last_customization = self.env['ir.ui.view.custom'].search(
[('user_id', '=', self.env.uid),
('ref_id', '=', self.dashboard_id.view_id.id)], limit=1)
arch = self.dashboard_id.view_id.arch
if last_customization:
arch = self.env['ir.ui.view.custom'].browse(
last_customization[0].id).arch
new_arch = etree.fromstring(arch)
column = new_arch.xpath("//column")[0]
column.append(etree.Element('action', {'context': str(
self.env.context),
'name': str(report_result.id),
'string': self.name,
'view_mode': 'form'}))
self.env['ir.ui.view.custom'].create(
{'user_id': self.env.uid,
'ref_id': self.dashboard_id.view_id.id,
'arch': etree.tostring(new_arch, pretty_print=True)})
return {'type': 'ir.actions.act_window_close', }

33
mis_builder/wizard/mis_builder_dashboard.xml

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="mis_report_instance_add_to_dashboard_form_view">
<field name="name">add.mis.report.instance.dashboard.wizard.view</field>
<field name="model">add.mis.report.instance.dashboard.wizard</field>
<field name="arch" type="xml">
<form string="Add to dashboard" version="7.0">
<group>
<field name="name"/>
<field name="dashboard_id"/>
</group>
<footer>
<button name="action_add_to_dashboard" string="Add to dashboard" type="object" default_focus="1" class="oe_highlight"/>
or
<button string="Cancel" class="oe_link" special="cancel"/>
</footer>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="mis_report_instance_add_to_dashboard_action">
<field name="name">Add to dashboard</field>
<field name="res_model">add.mis.report.instance.dashboard.wizard</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="mis_report_instance_add_to_dashboard_form_view"/>
<field name="target">new</field>
</record>
</data>
</openerp>

46
mis_builder_demo/README.rst

@ -1,46 +0,0 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:alt: License: AGPL-3
MIS Builder demo data
=====================
This module adds some demo data for the mis_builder module.
Installation
============
There is no specific installation procedure for this module.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-financial-reporting/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
`here <https://github.com/OCA/account-financial-reporting/issues/new?body=module:%20mis_builder%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Credits
=======
Contributors
------------
* Stéphane Bidoul <stephane.bidoul@acsone.eu>
* Laetitia Gangloff <laetitia.gangloff@acsone.eu>
* Adrien Peiffer <adrien.peiffer@acsone.eu>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.

23
mis_builder_demo/__init__.py

@ -1,23 +0,0 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# mis_builder module for OpenERP, Management Information System Builder
# Copyright (C) 2014 ACSONE SA/NV (<http://acsone.eu>)
#
# This file is a part of mis_builder
#
# mis_builder is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License v3 or later
# as published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# mis_builder is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License v3 or later for more details.
#
# You should have received a copy of the GNU Affero General Public License
# v3 or later along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

53
mis_builder_demo/__openerp__.py

@ -1,53 +0,0 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# mis_builder module for OpenERP, Management Information System Builder
# Copyright (C) 2014 ACSONE SA/NV (<http://acsone.eu>)
#
# This file is a part of mis_builder
#
# mis_builder is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License v3 or later
# as published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# mis_builder is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License v3 or later for more details.
#
# You should have received a copy of the GNU Affero General Public License
# v3 or later along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': 'MIS Builder demo data',
'version': '8.0.1.0.0',
'category': 'Reporting',
'summary': """
Demo data for the mis_builder module
""",
'author': 'ACSONE SA/NV,'
'Odoo Community Association (OCA)',
'website': 'http://acsone.eu',
'depends': [
'account_accountant',
'mis_builder',
'crm'
],
'data': [
],
'demo': [
'mis.report.kpi.csv',
'mis.report.query.csv',
'mis.report.csv',
'mis.report.instance.period.csv',
'mis.report.instance.csv',
],
'installable': True,
'application': False,
'auto_install': False,
'license': 'AGPL-3',
}

115
mis_builder_demo/i18n/de.po

@ -1,115 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mis_builder_demo
#
# Translators:
# Rudolf Schnapka <rs@techno-flex.de>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-13 23:18+0000\n"
"PO-Revision-Date: 2017-01-13 23:18+0000\n"
"Last-Translator: Rudolf Schnapka <rs@techno-flex.de>, 2017\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_phonecall_kpi_4
msgid "Average duration converted phone call"
msgstr "Durchschnittsdauer umgesetzter Anrufe"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_phonecall_kpi_2
msgid "Average duration phone call"
msgstr "Durchschnittstelefonatdauer"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_kpi_1
msgid "CA"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_kpi_2
msgid "CAHT invoice"
msgstr "HVAC-Rechnung"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_kpi_3
msgid "Cost"
msgstr "Kosten"
#. module: mis_builder_demo
#: model:mis.report,name:mis_builder_demo.mis_report
msgid "Demo margin report"
msgstr "Demo Margenbericht"
#. module: mis_builder_demo
#: model:mis.report,name:mis_builder_demo.mis_report_phonecall
msgid "Demo phonecall report"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_kpi_5
msgid "Margin"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_kpi_4
msgid "Profit"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.instance,name:mis_builder_demo.mis_report_phonecall_instance
msgid "Test phonecall report instance"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.instance,name:mis_builder_demo.mis_report_instance
msgid "Test-margin-report-instance"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_phonecall_kpi_3
msgid "Total converted phone call"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_phonecall_kpi_1
msgid "Total phone call"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_period_4
msgid "last period"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_period_3
msgid "last week"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_phonecall_instance_period_3
msgid "previous period"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_phonecall_instance_period_2
msgid "this period"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_period_1
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_phonecall_instance_period_1
msgid "today"
msgstr ""
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_period_2
msgid "yesterday"
msgstr ""

116
mis_builder_demo/i18n/sl.po

@ -1,116 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * mis_builder_demo
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
# Matjaž Mozetič <m.mozetic@matmoz.si>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-30 23:14+0000\n"
"PO-Revision-Date: 2016-12-30 23:14+0000\n"
"Last-Translator: Matjaž Mozetič <m.mozetic@matmoz.si>, 2017\n"
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_phonecall_kpi_4
msgid "Average duration converted phone call"
msgstr "Povprečno trajanje pretvorjenega telefonskega klica"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_phonecall_kpi_2
msgid "Average duration phone call"
msgstr "Povprečno trajanje telefonskega klica"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_kpi_1
msgid "CA"
msgstr "CA"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_kpi_2
msgid "CAHT invoice"
msgstr "CAHT račun"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_kpi_3
msgid "Cost"
msgstr "Strošek"
#. module: mis_builder_demo
#: model:mis.report,name:mis_builder_demo.mis_report
msgid "Demo margin report"
msgstr "Demonstracijsko poročilo o marži"
#. module: mis_builder_demo
#: model:mis.report,name:mis_builder_demo.mis_report_phonecall
msgid "Demo phonecall report"
msgstr "Demonstracijsko poročilo o telefonskih klicih"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_kpi_5
msgid "Margin"
msgstr "Marža"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_kpi_4
msgid "Profit"
msgstr "Dobiček"
#. module: mis_builder_demo
#: model:mis.report.instance,name:mis_builder_demo.mis_report_phonecall_instance
msgid "Test phonecall report instance"
msgstr "Testna instanca poročila o telefonskem klicu"
#. module: mis_builder_demo
#: model:mis.report.instance,name:mis_builder_demo.mis_report_instance
msgid "Test-margin-report-instance"
msgstr "Test-margin-report-instance"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_phonecall_kpi_3
msgid "Total converted phone call"
msgstr "Skupaj pretvorjeni telefonski klic"
#. module: mis_builder_demo
#: model:mis.report.kpi,description:mis_builder_demo.mis_report_phonecall_kpi_1
msgid "Total phone call"
msgstr "Skupaj telefonski klic"
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_period_4
msgid "last period"
msgstr "zadnje obdobje"
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_period_3
msgid "last week"
msgstr "zadnji teden"
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_phonecall_instance_period_3
msgid "previous period"
msgstr "prejšnje obdobje"
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_phonecall_instance_period_2
msgid "this period"
msgstr "to obdobje"
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_period_1
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_phonecall_instance_period_1
msgid "today"
msgstr "danes"
#. module: mis_builder_demo
#: model:mis.report.instance.period,name:mis_builder_demo.mis_report_instance_period_2
msgid "yesterday"
msgstr "včeraj"

3
mis_builder_demo/mis.report.csv

@ -1,3 +0,0 @@
"id","description","kpi_ids/id","name","query_ids/id"
"mis_report","","mis_report_kpi_1,mis_report_kpi_2,mis_report_kpi_3,mis_report_kpi_4,mis_report_kpi_5","Demo margin report","mis_report_query"
"mis_report_phonecall","","mis_report_phonecall_kpi_1,mis_report_phonecall_kpi_2,mis_report_phonecall_kpi_3,mis_report_phonecall_kpi_4","Demo phonecall report","mis_report_phonecall_query"

3
mis_builder_demo/mis.report.instance.csv

@ -1,3 +0,0 @@
id,date,description,name,period_ids/id,report_id/id,root_account/id
mis_report_instance,,,Test-margin-report-instance,"mis_report_instance_period_1,mis_report_instance_period_2,mis_report_instance_period_3,mis_report_instance_period_4",mis_report,account.chart0
mis_report_phonecall_instance,,,Test phonecall report instance,"mis_report_phonecall_instance_period_1,mis_report_phonecall_instance_period_2,mis_report_phonecall_instance_period_3",mis_report_phonecall,account.chart0

8
mis_builder_demo/mis.report.instance.period.csv

@ -1,8 +0,0 @@
id,duration,name,offset,type,sequence
mis_report_instance_period_1,1,today,0,Day,1
mis_report_instance_period_2,1,yesterday,-1,Day,2
mis_report_instance_period_3,1,last week,-1,Week,3
mis_report_instance_period_4,1,last period,-1,Fiscal Period,4
mis_report_phonecall_instance_period_1,1,today,0,Day,1
mis_report_phonecall_instance_period_2,1,this period,0,Fiscal Period,2
mis_report_phonecall_instance_period_3,1,previous period,-1,Fiscal Period,3

10
mis_builder_demo/mis.report.kpi.csv

@ -1,10 +0,0 @@
id,compare_method,description,expression,divider,name,dp,sequence,type,suffix
mis_report_kpi_1,Percentage,CA,-bal[X2001],,ca,,1,Numeric,€
mis_report_kpi_2,Percentage,CAHT invoice,sum([s.amount_untaxed for s in inv]),,total_invoice,,2,Numeric,€
mis_report_kpi_3,Percentage,Cost,bal[X2110],,cost,,3,Numeric,€
mis_report_kpi_4,Percentage,Profit,ca - cost,,profit,,4,Numeric,€
mis_report_kpi_5,Difference,Margin,profit/ca,,margin,,5,Percentage,%
mis_report_phonecall_kpi_1,Percentage,Total phone call,len(phone),,total_phone_call,,1,Numeric,
mis_report_phonecall_kpi_2,Percentage,Average duration phone call,sum([p.duration for p in phone])/total_phone_call,,average_duration_phone_call,2,2,Numeric,
mis_report_phonecall_kpi_3,Percentage,Total converted phone call,sum([p.opportunity_id and 1 or 0 for p in phone]),,phone_call_convert,,3,Numeric,
mis_report_phonecall_kpi_4,Percentage,Average duration converted phone call,sum([p.opportunity_id and p.duration or 0 for p in phone]),,average_convert_duration_phone_c,2,4,Numeric,

3
mis_builder_demo/mis.report.query.csv

@ -1,3 +0,0 @@
"id","date_field/id","domain","field_ids/id","model_id/id","name"
"mis_report_query","account.field_account_invoice_date_invoice","","account.field_account_invoice_amount_untaxed","account.model_account_invoice","inv"
"mis_report_phonecall_query","crm.field_crm_phonecall_date","","crm.field_crm_phonecall_duration,crm.field_crm_phonecall_opportunity_id","crm.model_crm_phonecall","phone"

1
setup/mis_builder/odoo_addons/__init__.py

@ -1 +0,0 @@
__import__('pkg_resources').declare_namespace(__name__)

1
setup/mis_builder/odoo_addons/mis_builder

@ -1 +0,0 @@
../../../mis_builder

6
setup/mis_builder/setup.py

@ -1,6 +0,0 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)

1
setup/mis_builder_demo/odoo_addons/__init__.py

@ -1 +0,0 @@
__import__('pkg_resources').declare_namespace(__name__)

1
setup/mis_builder_demo/odoo_addons/mis_builder_demo

@ -1 +0,0 @@
../../../mis_builder_demo

6
setup/mis_builder_demo/setup.py

@ -1,6 +0,0 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
Loading…
Cancel
Save