diff --git a/mgmtsystem_kpi/__init__.py b/mgmtsystem_kpi/__init__.py new file mode 100755 index 000000000..60cf071a7 --- /dev/null +++ b/mgmtsystem_kpi/__init__.py @@ -0,0 +1,3 @@ +# -*- encoding: utf-8 -*- + +from . import mgmtsystem_kpi diff --git a/mgmtsystem_kpi/__openerp__.py b/mgmtsystem_kpi/__openerp__.py new file mode 100755 index 000000000..db029fb89 --- /dev/null +++ b/mgmtsystem_kpi/__openerp__.py @@ -0,0 +1,70 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2012 Savoir-faire Linux (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program 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 for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +{ + "name": "Key Performance Indicator", + "version": "1.1", + "author": "Savoir-faire Linux,Odoo Community Association (OCA)", + "website": "http://www.savoirfairelinux.com", + "license": "AGPL-3", + "category": "Management System", + "complexity": "normal", + "description": """\ +This module provides the basis for creating key performance indicators, +including static and dynamic thresholds (SQL query or Python code), +on local and remote data sources. + +The module also provides the mecanism to update KPIs automatically. +A scheduler is executed every hour and updates the KPI values, based +on the periodicity of each KPI. KPI computation can also be done +manually. + +A threshold is a list of ranges and a range is: + * a name (like Good, Warning, Bad) + * a minimum value (fixed, sql query or python code) + * a maximum value (fixed, sql query or python code) + * color (RGB code like #00FF00 for green, #FFA500 for orange, + #FF0000 for red) + +This module depends on: + * base_external_dbsource (available in lp:openobject-extension) + * web_color (available in lp:web-addons) + """, + "depends": [ + 'mgmtsystem', + 'base_external_dbsource', + 'web_color', + ], + "data": [ + 'security/ir.model.access.csv', + 'security/mgmtsystem_kpi_security.xml', + 'mgmtsystem_kpi_view.xml', + ], + "images": [ + "images/kpi_definition.png", + "images/kpi_computation.png", + "images/kpi_threshold.png", + "images/kpi_range.png", + ], + "demo": [], + "test": [], + 'installable': False, +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/mgmtsystem_kpi/i18n/fr.po b/mgmtsystem_kpi/i18n/fr.po new file mode 100644 index 000000000..ea5bc122e --- /dev/null +++ b/mgmtsystem_kpi/i18n/fr.po @@ -0,0 +1,364 @@ +# French translation for openerp-mgmtsystem +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openerp-mgmtsystem package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-mgmtsystem\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-04-03 18:36+0000\n" +"PO-Revision-Date: 2013-05-14 01:00+0000\n" +"Last-Translator: Maxime Chambreuil (http://www.savoirfairelinux.com) " +"\n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-04-24 06:29+0000\n" +"X-Generator: Launchpad (build 16985)\n" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,category_id:0 +#: view:mgmtsystem.kpi.category:0 +msgid "Category" +msgstr "Catégorie" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "KPI Computation" +msgstr "Calcul de ICP" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi.threshold.range,color:0 +msgid "RGB code with #" +msgstr "Code RVB incluant le #" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.history:0 +msgid "KPI History" +msgstr "Historique de l'ICP" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi,kpi_code:0 +msgid "" +"SQL code must return the result as 'value' (i.e. 'SELECT 5 AS value')." +msgstr "" +"Le code SQL doit retourner le résultat comme une \"value\" (ex: \"SELECT 5 " +"AS value\")." + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,kpi_type:0 +msgid "KPI Computation Type" +msgstr "Type de calcul de l'ICP" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_kpi_list +#: view:mgmtsystem.kpi:0 +msgid "Key Performance Indicators" +msgstr "Indicateurs Clé de Performance" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Group By..." +msgstr "Regrouper par..." + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold,valid:0 +#: field:mgmtsystem.kpi.threshold.range,valid:0 +msgid "Valid" +msgstr "Valide" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "SQL - Local DB" +msgstr "SQL - Base locale" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_category +msgid "KPI Category" +msgstr "Catégorie ICP" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,periodicity_uom:0 +msgid "Periodicity UoM" +msgstr "UdM de la périodicité" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Type" +msgstr "Type" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,name:0 +#: field:mgmtsystem.kpi.category,name:0 +#: field:mgmtsystem.kpi.history,name:0 +#: field:mgmtsystem.kpi.threshold,name:0 +#: field:mgmtsystem.kpi.threshold.range,name:0 +msgid "Name" +msgstr "Nom" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Week" +msgstr "Semaine" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,description:0 +#: field:mgmtsystem.kpi.category,description:0 +msgid "Description" +msgstr "Description" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +msgid "Python" +msgstr "Python" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,max_code:0 +msgid "Maximum Computation Code" +msgstr "Code de calcul du maximum" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Min Type" +msgstr "Type du minimum" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_threshold_range_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_range +#: view:mgmtsystem.kpi.threshold:0 +#: field:mgmtsystem.kpi.threshold,range_ids:0 +#: view:mgmtsystem.kpi.threshold.range:0 +msgid "Ranges" +msgstr "Intervalles" + +#. module: mgmtsystem_kpi +#: code:addons/mgmtsystem_kpi/mgmtsystem_kpi.py:218 +#, python-format +msgid "2 of your ranges are overlapping!" +msgstr "2 périodes se chevauchent!" + +#. module: mgmtsystem_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_dbsource +msgid "Data Sources" +msgstr "Sources de données" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,max_type:0 +msgid "Max Type" +msgstr "Type du maximum" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "" +"Only active KPIs are computed by the scheduler based on the periodicity " +"configuration." +msgstr "" +"Seuls les ICPs actifs sont calculés par l'ordonnanceur en fonction de la " +"configuration de la périodicité." + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,active:0 +msgid "Active" +msgstr "Actif" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_threshold +msgid "KPI Threshold" +msgstr "Seuil de l'ICP" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Day" +msgstr "Jour" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Fixed value" +msgstr "Valeur fixe" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_threshold_range +msgid "KPI Threshold Range" +msgstr "Intervalle du seuil de l'ICP" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,min_code:0 +msgid "Minimum Computation Code" +msgstr "Code de calcul du minimum" + +#. module: mgmtsystem_kpi +#: code:addons/mgmtsystem_kpi/mgmtsystem_kpi.py:218 +#, python-format +msgid "Please make sure your ranges do not overlap!" +msgstr "Assurez-vous que vos intervalles ne se chevauchent pas !" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,kpi_code:0 +msgid "KPI Code" +msgstr "Code ICP" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Hour" +msgstr "Heure" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.history,date:0 +msgid "Execution Date" +msgstr "Date d'exécution" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,max_fixed_value:0 +#: field:mgmtsystem.kpi.threshold.range,max_value:0 +msgid "Maximum" +msgstr "Maximum" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Compute KPI Now" +msgstr "Calculez l'ICP maintenant" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "SQL - Externa DB" +msgstr "SQL - BD externe" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_history +msgid "History of the KPI" +msgstr "Historique de l'ICP" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,next_execution_date:0 +msgid "Next execution date" +msgstr "Prochaine date d'exécution" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,dbsource_id:0 +#: field:mgmtsystem.kpi.threshold.range,max_dbsource_id:0 +#: field:mgmtsystem.kpi.threshold.range,min_dbsource_id:0 +msgid "External DB Source" +msgstr "Source de données externe" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi,active:0 +msgid "" +"Only active KPIs will be updated by the scheduler based on the periodicity " +"configuration." +msgstr "" +"Seuls les ICPs actif seront mis à jour par l'ordonnanceur en fonction de la " +"configuration de la périodicité." + +#. module: mgmtsystem_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi.history,kpi_id:0 +msgid "KPI" +msgstr "ICP" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,history_ids:0 +msgid "History" +msgstr "Historique" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,periodicity:0 +msgid "Periodicity" +msgstr "Fréquence" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.history,color:0 +#: field:mgmtsystem.kpi.threshold.range,color:0 +msgid "Color" +msgstr "Couleur" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +msgid "SQL - External DB" +msgstr "SQL - BD externe" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Python Code" +msgstr "Code Python" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +msgid "Range" +msgstr "Intervalle" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Month" +msgstr "Mois" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,value:0 +#: field:mgmtsystem.kpi.history,value:0 +msgid "Value" +msgstr "Valeur" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,min_fixed_value:0 +#: field:mgmtsystem.kpi.threshold.range,min_value:0 +msgid "Minimum" +msgstr "Minimum" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_category_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_category +#: view:mgmtsystem.kpi.category:0 +msgid "Categories" +msgstr "Catégories" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Computation" +msgstr "Calcul" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,threshold_id:0 +#: view:mgmtsystem.kpi.threshold:0 +msgid "Threshold" +msgstr "Seuil" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold:0 +#: field:mgmtsystem.kpi.threshold,kpi_ids:0 +msgid "KPIs" +msgstr "ICPs" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold,invalid_message:0 +#: field:mgmtsystem.kpi.threshold.range,invalid_message:0 +msgid "Message" +msgstr "Message" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_threshold_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_threshold +#: view:mgmtsystem.kpi.threshold:0 +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,threshold_ids:0 +msgid "Thresholds" +msgstr "Seuils" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Key Performance Indicator" +msgstr "Indicateur Clé de Performance" diff --git a/mgmtsystem_kpi/i18n/mgmtsystem_kpi.pot b/mgmtsystem_kpi/i18n/mgmtsystem_kpi.pot new file mode 100644 index 000000000..563f66915 --- /dev/null +++ b/mgmtsystem_kpi/i18n/mgmtsystem_kpi.pot @@ -0,0 +1,351 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * mgmtsystem_kpi +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-04-03 18:36+0000\n" +"PO-Revision-Date: 2013-04-03 18:36+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,category_id:0 +#: view:mgmtsystem.kpi.category:0 +msgid "Category" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "KPI Computation" +msgstr "" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi.threshold.range,color:0 +msgid "RGB code with #" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.history:0 +msgid "KPI History" +msgstr "" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi,kpi_code:0 +msgid "SQL code must return the result as 'value' (i.e. 'SELECT 5 AS value')." +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,kpi_type:0 +msgid "KPI Computation Type" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_kpi_list +#: view:mgmtsystem.kpi:0 +msgid "Key Performance Indicators" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Group By..." +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold,valid:0 +#: field:mgmtsystem.kpi.threshold.range,valid:0 +msgid "Valid" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "SQL - Local DB" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_category +msgid "KPI Category" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,periodicity_uom:0 +msgid "Periodicity UoM" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Type" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,name:0 +#: field:mgmtsystem.kpi.category,name:0 +#: field:mgmtsystem.kpi.history,name:0 +#: field:mgmtsystem.kpi.threshold,name:0 +#: field:mgmtsystem.kpi.threshold.range,name:0 +msgid "Name" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Week" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,description:0 +#: field:mgmtsystem.kpi.category,description:0 +msgid "Description" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +msgid "Python" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,max_code:0 +msgid "Maximum Computation Code" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Min Type" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_threshold_range_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_range +#: view:mgmtsystem.kpi.threshold:0 +#: field:mgmtsystem.kpi.threshold,range_ids:0 +#: view:mgmtsystem.kpi.threshold.range:0 +msgid "Ranges" +msgstr "" + +#. module: mgmtsystem_kpi +#: code:addons/mgmtsystem_kpi/mgmtsystem_kpi.py:218 +#, python-format +msgid "2 of your ranges are overlapping!" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_dbsource +msgid "Data Sources" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,max_type:0 +msgid "Max Type" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Only active KPIs are computed by the scheduler based on the periodicity configuration." +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,active:0 +msgid "Active" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_threshold +msgid "KPI Threshold" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Day" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Fixed value" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_threshold_range +msgid "KPI Threshold Range" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,min_code:0 +msgid "Minimum Computation Code" +msgstr "" + +#. module: mgmtsystem_kpi +#: code:addons/mgmtsystem_kpi/mgmtsystem_kpi.py:218 +#, python-format +msgid "Please make sure your ranges do not overlap!" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,kpi_code:0 +msgid "KPI Code" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Hour" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.history,date:0 +msgid "Execution Date" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,max_fixed_value:0 +#: field:mgmtsystem.kpi.threshold.range,max_value:0 +msgid "Maximum" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Compute KPI Now" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "SQL - Externa DB" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_history +msgid "History of the KPI" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,next_execution_date:0 +msgid "Next execution date" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,dbsource_id:0 +#: field:mgmtsystem.kpi.threshold.range,max_dbsource_id:0 +#: field:mgmtsystem.kpi.threshold.range,min_dbsource_id:0 +msgid "External DB Source" +msgstr "" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi,active:0 +msgid "Only active KPIs will be updated by the scheduler based on the periodicity configuration." +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi.history,kpi_id:0 +msgid "KPI" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,history_ids:0 +msgid "History" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,periodicity:0 +msgid "Periodicity" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.history,color:0 +#: field:mgmtsystem.kpi.threshold.range,color:0 +msgid "Color" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +msgid "SQL - External DB" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Python Code" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +msgid "Range" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Month" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,value:0 +#: field:mgmtsystem.kpi.history,value:0 +msgid "Value" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,min_fixed_value:0 +#: field:mgmtsystem.kpi.threshold.range,min_value:0 +msgid "Minimum" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_category_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_category +#: view:mgmtsystem.kpi.category:0 +msgid "Categories" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Computation" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,threshold_id:0 +#: view:mgmtsystem.kpi.threshold:0 +msgid "Threshold" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold:0 +#: field:mgmtsystem.kpi.threshold,kpi_ids:0 +msgid "KPIs" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold,invalid_message:0 +#: field:mgmtsystem.kpi.threshold.range,invalid_message:0 +msgid "Message" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_threshold_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_threshold +#: view:mgmtsystem.kpi.threshold:0 +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,threshold_ids:0 +msgid "Thresholds" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Key Performance Indicator" +msgstr "" + diff --git a/mgmtsystem_kpi/i18n/nb.po b/mgmtsystem_kpi/i18n/nb.po new file mode 100644 index 000000000..b0673c4f0 --- /dev/null +++ b/mgmtsystem_kpi/i18n/nb.po @@ -0,0 +1,363 @@ +# Norwegian Bokmal translation for openerp-mgmtsystem +# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 +# This file is distributed under the same license as the openerp-mgmtsystem package. +# FIRST AUTHOR , 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-mgmtsystem\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-04-03 18:36+0000\n" +"PO-Revision-Date: 2014-01-22 17:33+0000\n" +"Last-Translator: Torvald Baade Bringsvor \n" +"Language-Team: Norwegian Bokmal \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-04-24 06:30+0000\n" +"X-Generator: Launchpad (build 16985)\n" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,category_id:0 +#: view:mgmtsystem.kpi.category:0 +msgid "Category" +msgstr "Kategori" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "KPI Computation" +msgstr "KPI beregning" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi.threshold.range,color:0 +msgid "RGB code with #" +msgstr "RGB kode med tall" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.history:0 +msgid "KPI History" +msgstr "KPI Historikk" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi,kpi_code:0 +msgid "" +"SQL code must return the result as 'value' (i.e. 'SELECT 5 AS value')." +msgstr "" +"SQL kode må returnere resultatet som 'verdi' (for eksempel 'SELECT S AS " +"verdi')." + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,kpi_type:0 +msgid "KPI Computation Type" +msgstr "KPI Beregningstype" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_kpi_list +#: view:mgmtsystem.kpi:0 +msgid "Key Performance Indicators" +msgstr "Nøkkeltall for ytelse (KPI)" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Group By..." +msgstr "Grupper etter ..." + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold,valid:0 +#: field:mgmtsystem.kpi.threshold.range,valid:0 +msgid "Valid" +msgstr "Gyldig" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "SQL - Local DB" +msgstr "SQL - lokal database" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_category +msgid "KPI Category" +msgstr "KPI Kategori" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,periodicity_uom:0 +msgid "Periodicity UoM" +msgstr "Periodisitet måleenhet (UoM)" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Type" +msgstr "Type" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,name:0 +#: field:mgmtsystem.kpi.category,name:0 +#: field:mgmtsystem.kpi.history,name:0 +#: field:mgmtsystem.kpi.threshold,name:0 +#: field:mgmtsystem.kpi.threshold.range,name:0 +msgid "Name" +msgstr "Navn" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Week" +msgstr "Uke" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,description:0 +#: field:mgmtsystem.kpi.category,description:0 +msgid "Description" +msgstr "Beskrivelse" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +msgid "Python" +msgstr "Python" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,max_code:0 +msgid "Maximum Computation Code" +msgstr "Maksimal beregningskode" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Min Type" +msgstr "Min type" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_threshold_range_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_range +#: view:mgmtsystem.kpi.threshold:0 +#: field:mgmtsystem.kpi.threshold,range_ids:0 +#: view:mgmtsystem.kpi.threshold.range:0 +msgid "Ranges" +msgstr "Områder" + +#. module: mgmtsystem_kpi +#: code:addons/mgmtsystem_kpi/mgmtsystem_kpi.py:218 +#, python-format +msgid "2 of your ranges are overlapping!" +msgstr "to av dine områder overlapper" + +#. module: mgmtsystem_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_dbsource +msgid "Data Sources" +msgstr "Datakilder" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,max_type:0 +msgid "Max Type" +msgstr "Maks type" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "" +"Only active KPIs are computed by the scheduler based on the periodicity " +"configuration." +msgstr "" +"Kun aktive KPIer blir beregnet periodisk (av scheduler) basert på " +"konfigurert periode." + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,active:0 +msgid "Active" +msgstr "Aktiv" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_threshold +msgid "KPI Threshold" +msgstr "KPI nivå" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Day" +msgstr "Dag" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Fixed value" +msgstr "Fast verdi" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_threshold_range +msgid "KPI Threshold Range" +msgstr "KPI Nivåområde" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,min_code:0 +msgid "Minimum Computation Code" +msgstr "Minimal beregningskode" + +#. module: mgmtsystem_kpi +#: code:addons/mgmtsystem_kpi/mgmtsystem_kpi.py:218 +#, python-format +msgid "Please make sure your ranges do not overlap!" +msgstr "Vennligst vær sikker på at områdene ikke overlapper!" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,kpi_code:0 +msgid "KPI Code" +msgstr "KPI kode" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Hour" +msgstr "Time" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.history,date:0 +msgid "Execution Date" +msgstr "Gjennomførings dato" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,max_fixed_value:0 +#: field:mgmtsystem.kpi.threshold.range,max_value:0 +msgid "Maximum" +msgstr "Maksimum" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Compute KPI Now" +msgstr "Beregn KPI Nå" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "SQL - Externa DB" +msgstr "SQL - Ekstern database" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_history +msgid "History of the KPI" +msgstr "Historisk KPI" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,next_execution_date:0 +msgid "Next execution date" +msgstr "Neste eksekveringsdato" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,dbsource_id:0 +#: field:mgmtsystem.kpi.threshold.range,max_dbsource_id:0 +#: field:mgmtsystem.kpi.threshold.range,min_dbsource_id:0 +msgid "External DB Source" +msgstr "Ekstern databasekilde" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi,active:0 +msgid "" +"Only active KPIs will be updated by the scheduler based on the periodicity " +"configuration." +msgstr "" +"Kun aktive KPIer blir oppdatert periodisk (av scheduler) basert på " +"konfigurert periode." + +#. module: mgmtsystem_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi.history,kpi_id:0 +msgid "KPI" +msgstr "KPI" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,history_ids:0 +msgid "History" +msgstr "Historikk" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,periodicity:0 +msgid "Periodicity" +msgstr "Periodisitet" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.history,color:0 +#: field:mgmtsystem.kpi.threshold.range,color:0 +msgid "Color" +msgstr "Farge" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +msgid "SQL - External DB" +msgstr "SQL - Ekstern database" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Python Code" +msgstr "Python kode" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +msgid "Range" +msgstr "Intervall" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Month" +msgstr "Måned" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,value:0 +#: field:mgmtsystem.kpi.history,value:0 +msgid "Value" +msgstr "Verdi" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,min_fixed_value:0 +#: field:mgmtsystem.kpi.threshold.range,min_value:0 +msgid "Minimum" +msgstr "Minimum" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_category_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_category +#: view:mgmtsystem.kpi.category:0 +msgid "Categories" +msgstr "Kategorier" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Computation" +msgstr "Beregning" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,threshold_id:0 +#: view:mgmtsystem.kpi.threshold:0 +msgid "Threshold" +msgstr "Terskel" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold:0 +#: field:mgmtsystem.kpi.threshold,kpi_ids:0 +msgid "KPIs" +msgstr "KPIer" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold,invalid_message:0 +#: field:mgmtsystem.kpi.threshold.range,invalid_message:0 +msgid "Message" +msgstr "Melding" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_threshold_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_threshold +#: view:mgmtsystem.kpi.threshold:0 +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,threshold_ids:0 +msgid "Thresholds" +msgstr "Terskler" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Key Performance Indicator" +msgstr "Nøkkelindikator for ytelse (KPI)" diff --git a/mgmtsystem_kpi/i18n/pt_BR.po b/mgmtsystem_kpi/i18n/pt_BR.po new file mode 100644 index 000000000..bdd86e6fe --- /dev/null +++ b/mgmtsystem_kpi/i18n/pt_BR.po @@ -0,0 +1,363 @@ +# French translation for openerp-mgmtsystem +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openerp-mgmtsystem package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-mgmtsystem\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-04-03 18:36+0000\n" +"PO-Revision-Date: 2013-07-18 15:14+0000\n" +"Last-Translator: Claudio de Araujo Santos \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-04-24 06:30+0000\n" +"X-Generator: Launchpad (build 16985)\n" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,category_id:0 +#: view:mgmtsystem.kpi.category:0 +msgid "Category" +msgstr "Categoria" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "KPI Computation" +msgstr "Cálculo de ICD" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi.threshold.range,color:0 +msgid "RGB code with #" +msgstr "Código RGB com #" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.history:0 +msgid "KPI History" +msgstr "Historico ICD" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi,kpi_code:0 +msgid "" +"SQL code must return the result as 'value' (i.e. 'SELECT 5 AS value')." +msgstr "" +"Código SQL deve retornar o resultado como \"valor\" (ou seja, 'SELECT 5 AS " +"value')." + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,kpi_type:0 +msgid "KPI Computation Type" +msgstr "Tipo cálculo ICD" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_kpi_list +#: view:mgmtsystem.kpi:0 +msgid "Key Performance Indicators" +msgstr "Indicadores Chave de Desempenho" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Group By..." +msgstr "Agrupar Por..." + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold,valid:0 +#: field:mgmtsystem.kpi.threshold.range,valid:0 +msgid "Valid" +msgstr "Válido" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "SQL - Local DB" +msgstr "SQL - DB local" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_category +msgid "KPI Category" +msgstr "Categoria ICD" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,periodicity_uom:0 +msgid "Periodicity UoM" +msgstr "UoM periodicidade" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Type" +msgstr "Tipo" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,name:0 +#: field:mgmtsystem.kpi.category,name:0 +#: field:mgmtsystem.kpi.history,name:0 +#: field:mgmtsystem.kpi.threshold,name:0 +#: field:mgmtsystem.kpi.threshold.range,name:0 +msgid "Name" +msgstr "Nome" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Week" +msgstr "Semana" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,description:0 +#: field:mgmtsystem.kpi.category,description:0 +msgid "Description" +msgstr "Descrição" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +msgid "Python" +msgstr "Python" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,max_code:0 +msgid "Maximum Computation Code" +msgstr "Código máximo do cálculo" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Min Type" +msgstr "Tipo minimo" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_threshold_range_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_range +#: view:mgmtsystem.kpi.threshold:0 +#: field:mgmtsystem.kpi.threshold,range_ids:0 +#: view:mgmtsystem.kpi.threshold.range:0 +msgid "Ranges" +msgstr "Intervalos" + +#. module: mgmtsystem_kpi +#: code:addons/mgmtsystem_kpi/mgmtsystem_kpi.py:218 +#, python-format +msgid "2 of your ranges are overlapping!" +msgstr "2 de suas faixas são sobrepostas!" + +#. module: mgmtsystem_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_dbsource +msgid "Data Sources" +msgstr "Fonte de dados" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,max_type:0 +msgid "Max Type" +msgstr "Tipo máximo" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "" +"Only active KPIs are computed by the scheduler based on the periodicity " +"configuration." +msgstr "" +"Só os ICDs ativos são calculados pelo planificador baseado na configuração " +"de periodicidade." + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,active:0 +msgid "Active" +msgstr "Ativo" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_threshold +msgid "KPI Threshold" +msgstr "Limiar ICD" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Day" +msgstr "Dia" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Fixed value" +msgstr "Valor fixo" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_threshold_range +msgid "KPI Threshold Range" +msgstr "Faixa limiar do ICD" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,min_code:0 +msgid "Minimum Computation Code" +msgstr "Código minimo de cálculo" + +#. module: mgmtsystem_kpi +#: code:addons/mgmtsystem_kpi/mgmtsystem_kpi.py:218 +#, python-format +msgid "Please make sure your ranges do not overlap!" +msgstr "Por favor, certifique-se seus intervalos não se sobrepõem!" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,kpi_code:0 +msgid "KPI Code" +msgstr "Código ICD" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Hour" +msgstr "Hora" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.history,date:0 +msgid "Execution Date" +msgstr "Data de Execução" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,max_fixed_value:0 +#: field:mgmtsystem.kpi.threshold.range,max_value:0 +msgid "Maximum" +msgstr "Máximo" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Compute KPI Now" +msgstr "Cálcule o ICD agora" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "SQL - Externa DB" +msgstr "SQL - DB Externo" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_history +msgid "History of the KPI" +msgstr "História do ICD" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,next_execution_date:0 +msgid "Next execution date" +msgstr "Próxima data de execução" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,dbsource_id:0 +#: field:mgmtsystem.kpi.threshold.range,max_dbsource_id:0 +#: field:mgmtsystem.kpi.threshold.range,min_dbsource_id:0 +msgid "External DB Source" +msgstr "Fonte Externa de Dados" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi,active:0 +msgid "" +"Only active KPIs will be updated by the scheduler based on the periodicity " +"configuration." +msgstr "" +"Somente os ICDs ativos serão atualizados pelo programador com base na " +"configuração periodicidade." + +#. module: mgmtsystem_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi.history,kpi_id:0 +msgid "KPI" +msgstr "IDC" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,history_ids:0 +msgid "History" +msgstr "Histórico" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,periodicity:0 +msgid "Periodicity" +msgstr "Periodicidade" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.history,color:0 +#: field:mgmtsystem.kpi.threshold.range,color:0 +msgid "Color" +msgstr "Cor" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +msgid "SQL - External DB" +msgstr "SQL - DB externo" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Python Code" +msgstr "Código Python" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +msgid "Range" +msgstr "Intervalo" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Month" +msgstr "Mês" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,value:0 +#: field:mgmtsystem.kpi.history,value:0 +msgid "Value" +msgstr "Valor" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,min_fixed_value:0 +#: field:mgmtsystem.kpi.threshold.range,min_value:0 +msgid "Minimum" +msgstr "Mínimo" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_category_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_category +#: view:mgmtsystem.kpi.category:0 +msgid "Categories" +msgstr "Categorias" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Computation" +msgstr "Calcular" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,threshold_id:0 +#: view:mgmtsystem.kpi.threshold:0 +msgid "Threshold" +msgstr "Limiar" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold:0 +#: field:mgmtsystem.kpi.threshold,kpi_ids:0 +msgid "KPIs" +msgstr "ICDs" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold,invalid_message:0 +#: field:mgmtsystem.kpi.threshold.range,invalid_message:0 +msgid "Message" +msgstr "Mensagem" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_threshold_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_threshold +#: view:mgmtsystem.kpi.threshold:0 +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,threshold_ids:0 +msgid "Thresholds" +msgstr "Limites" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Key Performance Indicator" +msgstr "Indicador Chave Desempenho" diff --git a/mgmtsystem_kpi/i18n/vi.po b/mgmtsystem_kpi/i18n/vi.po new file mode 100644 index 000000000..36e8bba11 --- /dev/null +++ b/mgmtsystem_kpi/i18n/vi.po @@ -0,0 +1,357 @@ +# Vietnamese translation for openerp-mgmtsystem +# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 +# This file is distributed under the same license as the openerp-mgmtsystem package. +# FIRST AUTHOR , 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-mgmtsystem\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-04-03 18:36+0000\n" +"PO-Revision-Date: 2014-03-05 03:04+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-04-24 06:30+0000\n" +"X-Generator: Launchpad (build 16985)\n" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,category_id:0 +#: view:mgmtsystem.kpi.category:0 +msgid "Category" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "KPI Computation" +msgstr "" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi.threshold.range,color:0 +msgid "RGB code with #" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.history:0 +msgid "KPI History" +msgstr "" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi,kpi_code:0 +msgid "" +"SQL code must return the result as 'value' (i.e. 'SELECT 5 AS value')." +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,kpi_type:0 +msgid "KPI Computation Type" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_kpi_list +#: view:mgmtsystem.kpi:0 +msgid "Key Performance Indicators" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Group By..." +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold,valid:0 +#: field:mgmtsystem.kpi.threshold.range,valid:0 +msgid "Valid" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "SQL - Local DB" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_category +msgid "KPI Category" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,periodicity_uom:0 +msgid "Periodicity UoM" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Type" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,name:0 +#: field:mgmtsystem.kpi.category,name:0 +#: field:mgmtsystem.kpi.history,name:0 +#: field:mgmtsystem.kpi.threshold,name:0 +#: field:mgmtsystem.kpi.threshold.range,name:0 +msgid "Name" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Week" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,description:0 +#: field:mgmtsystem.kpi.category,description:0 +msgid "Description" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +msgid "Python" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,max_code:0 +msgid "Maximum Computation Code" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Min Type" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_threshold_range_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_range +#: view:mgmtsystem.kpi.threshold:0 +#: field:mgmtsystem.kpi.threshold,range_ids:0 +#: view:mgmtsystem.kpi.threshold.range:0 +msgid "Ranges" +msgstr "" + +#. module: mgmtsystem_kpi +#: code:addons/mgmtsystem_kpi/mgmtsystem_kpi.py:218 +#, python-format +msgid "2 of your ranges are overlapping!" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_dbsource +msgid "Data Sources" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,max_type:0 +msgid "Max Type" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "" +"Only active KPIs are computed by the scheduler based on the periodicity " +"configuration." +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,active:0 +msgid "Active" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_threshold +msgid "KPI Threshold" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Day" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Fixed value" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_threshold_range +msgid "KPI Threshold Range" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold.range,min_code:0 +msgid "Minimum Computation Code" +msgstr "" + +#. module: mgmtsystem_kpi +#: code:addons/mgmtsystem_kpi/mgmtsystem_kpi.py:218 +#, python-format +msgid "Please make sure your ranges do not overlap!" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,kpi_code:0 +msgid "KPI Code" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Hour" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.history,date:0 +msgid "Execution Date" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,max_fixed_value:0 +#: field:mgmtsystem.kpi.threshold.range,max_value:0 +msgid "Maximum" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Compute KPI Now" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "SQL - Externa DB" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi_history +msgid "History of the KPI" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,next_execution_date:0 +msgid "Next execution date" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,dbsource_id:0 +#: field:mgmtsystem.kpi.threshold.range,max_dbsource_id:0 +#: field:mgmtsystem.kpi.threshold.range,min_dbsource_id:0 +msgid "External DB Source" +msgstr "" + +#. module: mgmtsystem_kpi +#: help:mgmtsystem.kpi,active:0 +msgid "" +"Only active KPIs will be updated by the scheduler based on the periodicity " +"configuration." +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi.history,kpi_id:0 +msgid "KPI" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +#: field:mgmtsystem.kpi,history_ids:0 +msgid "History" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,periodicity:0 +msgid "Periodicity" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.history,color:0 +#: field:mgmtsystem.kpi.threshold.range,color:0 +msgid "Color" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,kpi_type:0 +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +msgid "SQL - External DB" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi.threshold.range,max_type:0 +#: selection:mgmtsystem.kpi.threshold.range,min_type:0 +msgid "Python Code" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +msgid "Range" +msgstr "" + +#. module: mgmtsystem_kpi +#: selection:mgmtsystem.kpi,periodicity_uom:0 +msgid "Month" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,value:0 +#: field:mgmtsystem.kpi.history,value:0 +msgid "Value" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,min_fixed_value:0 +#: field:mgmtsystem.kpi.threshold.range,min_value:0 +msgid "Minimum" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_category_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_category +#: view:mgmtsystem.kpi.category:0 +msgid "Categories" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Computation" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi,threshold_id:0 +#: view:mgmtsystem.kpi.threshold:0 +msgid "Threshold" +msgstr "" + +#. module: mgmtsystem_kpi +#: view:mgmtsystem.kpi.threshold:0 +#: field:mgmtsystem.kpi.threshold,kpi_ids:0 +msgid "KPIs" +msgstr "" + +#. module: mgmtsystem_kpi +#: field:mgmtsystem.kpi.threshold,invalid_message:0 +#: field:mgmtsystem.kpi.threshold.range,invalid_message:0 +msgid "Message" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.actions.act_window,name:mgmtsystem_kpi.open_mgmtsystem_threshold_list +#: model:ir.ui.menu,name:mgmtsystem_kpi.menu_mgmtsystem_configuration_kpi_threshold +#: view:mgmtsystem.kpi.threshold:0 +#: view:mgmtsystem.kpi.threshold.range:0 +#: field:mgmtsystem.kpi.threshold.range,threshold_ids:0 +msgid "Thresholds" +msgstr "" + +#. module: mgmtsystem_kpi +#: model:ir.model,name:mgmtsystem_kpi.model_mgmtsystem_kpi +#: view:mgmtsystem.kpi:0 +msgid "Key Performance Indicator" +msgstr "" diff --git a/mgmtsystem_kpi/images/kpi_computation.png b/mgmtsystem_kpi/images/kpi_computation.png new file mode 100644 index 000000000..63adf135f Binary files /dev/null and b/mgmtsystem_kpi/images/kpi_computation.png differ diff --git a/mgmtsystem_kpi/images/kpi_definition.png b/mgmtsystem_kpi/images/kpi_definition.png new file mode 100644 index 000000000..f8e301677 Binary files /dev/null and b/mgmtsystem_kpi/images/kpi_definition.png differ diff --git a/mgmtsystem_kpi/images/kpi_range.png b/mgmtsystem_kpi/images/kpi_range.png new file mode 100644 index 000000000..50b84a3e4 Binary files /dev/null and b/mgmtsystem_kpi/images/kpi_range.png differ diff --git a/mgmtsystem_kpi/images/kpi_threshold.png b/mgmtsystem_kpi/images/kpi_threshold.png new file mode 100644 index 000000000..623bc7254 Binary files /dev/null and b/mgmtsystem_kpi/images/kpi_threshold.png differ diff --git a/mgmtsystem_kpi/mgmtsystem_kpi.py b/mgmtsystem_kpi/mgmtsystem_kpi.py new file mode 100755 index 000000000..4ec342ab3 --- /dev/null +++ b/mgmtsystem_kpi/mgmtsystem_kpi.py @@ -0,0 +1,531 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2012 Savoir-faire Linux (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program 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 for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from datetime import datetime, timedelta +from openerp.osv import fields, orm +from openerp.tools.translate import _ +from openerp.tools import ( + DEFAULT_SERVER_DATETIME_FORMAT as DATETIME_FORMAT, +) +import time +import re +import logging +_logger = logging.getLogger(__name__) + + +def is_one_value(result): + # check if sql query returns only one value + if type(result) is dict and 'value' in result.dictfetchone(): + return True + elif type(result) is list and 'value' in result[0]: + return True + else: + return False + + +RE_SELECT_QUERY = re.compile('.*(' + '|'.join(( + 'INSERT', + 'UPDATE', + 'DELETE', + 'CREATE', + 'ALTER', + 'DROP', + 'GRANT', + 'REVOKE', + 'INDEX', +)) + ')') + + +def is_select_query(query): + """Check if sql query is a SELECT statement""" + return not RE_SELECT_QUERY.match(query.upper()) + + +class mgmtsystem_kpi_category(orm.Model): + """ + KPI Category + """ + _name = "mgmtsystem.kpi.category" + _description = "KPI Category" + _columns = { + 'name': fields.char('Name', size=50, required=True), + 'description': fields.text('Description') + } + + +class mgmtsystem_kpi_threshold_range(orm.Model): + """ + KPI Threshold Range + """ + _name = "mgmtsystem.kpi.threshold.range" + _description = "KPI Threshold Range" + + def compute_min_value(self, cr, uid, ids, field_name, arg, context=None): + if context is None: + context = {} + result = {} + for obj in self.browse(cr, uid, ids): + value = None + if obj.min_type == 'local' and is_select_query(obj.min_code): + cr.execute(obj.min_code) + dic = cr.dictfetchall() + if is_one_value(dic): + value = dic[0]['value'] + elif (obj.min_type == 'external' + and obj.min_dbsource_id.id + and is_select_query(obj.min_code)): + dbsrc_obj = obj.min_dbsource_id + res = dbsrc_obj.execute(obj.min_code) + if is_one_value(res): + value = res[0]['value'] + elif obj.min_type == 'python': + value = eval(obj.min_code) + else: + value = obj.min_fixed_value + result[obj.id] = value + return result + + def compute_max_value(self, cr, uid, ids, field_name, arg, context=None): + if context is None: + context = {} + result = {} + for obj in self.browse(cr, uid, ids, context): + value = None + if obj.max_type == 'local' and is_select_query(obj.max_code): + cr.execute(obj.max_code) + dic = cr.dictfetchall() + if is_one_value(dic): + value = dic[0]['value'] + elif obj.max_type == 'python': + value = eval(obj.max_code) + elif (obj.max_type == 'external' + and obj.max_dbsource_id.id + and is_select_query(obj.max_code)): + dbsrc_obj = obj.max_dbsource_id + res = dbsrc_obj.execute(obj.max_code) + if is_one_value(res): + value = res[0]['value'] + else: + value = obj.max_fixed_value + result[obj.id] = value + return result + + def _is_valid_range(self, cr, uid, ids, field_name, arg, context=None): + if context is None: + context = {} + result = {} + for obj in self.browse(cr, uid, ids, context): + if obj.max_value < obj.min_value: + result[obj.id] = False + else: + result[obj.id] = True + return result + + def _generate_invalid_message( + self, cr, uid, ids, field_name, arg, context=None): + if context is None: + context = {} + result = {} + for obj in self.browse(cr, uid, ids, context): + if obj.valid: + result[obj.id] = "" + else: + result[obj.id] = ("Minimum value is greater than the maximum " + "value! Please adjust them.") + return result + + _columns = { + 'name': fields.char('Name', size=50, required=True), + 'valid': fields.function( + _is_valid_range, + string='Valid', + type='boolean', + required=True, + ), + 'invalid_message': fields.function( + _generate_invalid_message, + string='Message', + type='char', + size=100, + ), + 'min_type': fields.selection(( + ('static', 'Fixed value'), + ('python', 'Python Code'), + ('local', 'SQL - Local DB'), + ('external', 'SQL - Externa DB'), + ), 'Min Type', required=True), + 'min_value': fields.function( + compute_min_value, + string='Minimum', + type='float', + ), + 'min_fixed_value': fields.float('Minimum'), + 'min_code': fields.text('Minimum Computation Code'), + 'min_dbsource_id': fields.many2one( + 'base.external.dbsource', + 'External DB Source', + ), + 'max_type': fields.selection(( + ('static', 'Fixed value'), + ('python', 'Python Code'), + ('local', 'SQL - Local DB'), + ('external', 'SQL - External DB'), + ), 'Max Type', required=True), + 'max_value': fields.function( + compute_max_value, + string='Maximum', + type='float', + ), + 'max_fixed_value': fields.float('Maximum'), + 'max_code': fields.text('Maximum Computation Code'), + 'max_dbsource_id': fields.many2one( + 'base.external.dbsource', + 'External DB Source', + ), + 'color': fields.char( + 'Color', + help='RGB code with #', + size=7, + required=True, + ), + 'threshold_ids': fields.many2many( + 'mgmtsystem.kpi.threshold', + 'mgmtsystem_kpi_threshold_range_rel', + 'range_id', + 'threshold_id', + 'Thresholds', + ), + 'company_id': fields.many2one('res.company', 'Company') + } + + _defaults = { + 'company_id': ( + lambda self, cr, uid, c: + self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id), + 'valid': True, + } + + +class mgmtsystem_kpi_threshold(orm.Model): + """ + KPI Threshold + """ + _name = "mgmtsystem.kpi.threshold" + _description = "KPI Threshold" + + def _is_valid_threshold(self, cr, uid, ids, field_name, arg, context=None): + if context is None: + context = {} + result = {} + for obj in self.browse(cr, uid, ids, context): + # check if ranges overlap + # TODO: This code can be done better + for range1 in obj.range_ids: + for range2 in obj.range_ids: + if (range1.valid and range2.valid + and range1.min_value < range2.min_value): + result[obj.id] = range1.max_value <= range2.min_value + return result + + def _generate_invalid_message( + self, cr, uid, ids, field_name, arg, context=None): + if context is None: + context = {} + result = {} + for obj in self.browse(cr, uid, ids, context): + if obj.valid: + result[obj.id] = "" + else: + result[obj.id] = ("2 of your ranges are overlapping! Please " + "make sure your ranges do not overlap.") + return result + + _columns = { + 'name': fields.char('Name', size=50, required=True), + 'range_ids': fields.many2many( + 'mgmtsystem.kpi.threshold.range', + 'mgmtsystem_kpi_threshold_range_rel', + 'threshold_id', + 'range_id', + 'Ranges' + ), + 'valid': fields.function( + _is_valid_threshold, + string='Valid', + type='boolean', + required=True, + ), + 'invalid_message': fields.function( + _generate_invalid_message, + string='Message', + type='char', + size=100, + ), + 'kpi_ids': fields.one2many('mgmtsystem.kpi', 'threshold_id', 'KPIs'), + 'company_id': fields.many2one('res.company', 'Company') + } + + _defaults = { + 'company_id': ( + lambda self, cr, uid, c: + self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id), + 'valid': True, + } + + def create(self, cr, uid, data, context=None): + if context is None: + context = {} + + # check if ranges overlap + # TODO: This code can be done better + range_obj1 = self.pool.get('mgmtsystem.kpi.threshold.range') + range_obj2 = self.pool.get('mgmtsystem.kpi.threshold.range') + for range1 in data['range_ids'][0][2]: + range_obj1 = range_obj1.browse(cr, uid, range1, context) + for range2 in data['range_ids'][0][2]: + range_obj2 = range_obj2.browse(cr, uid, range2, context) + if (range_obj1.valid and range_obj2.valid + and range_obj1.min_value < range_obj2.min_value): + if range_obj1.max_value > range_obj2.min_value: + raise orm.except_orm( + _("2 of your ranges are overlapping!"), + _("Please make sure your ranges do not overlap!") + ) + range_obj2 = self.pool.get('mgmtsystem.kpi.threshold.range') + range_obj1 = self.pool.get('mgmtsystem.kpi.threshold.range') + return super(mgmtsystem_kpi_threshold, self).create( + cr, uid, data, context + ) + + def get_color(self, cr, uid, ids, kpi_value, context=None): + if context is None: + context = {} + + color = '#FFFFFF' + for obj in self.browse(cr, uid, ids, context): + for range_obj in obj.range_ids: + if (range_obj.min_value <= kpi_value <= range_obj.max_value + and range_obj.valid): + color = range_obj.color + return color + + +class mgmtsystem_kpi_history(orm.Model): + """ + History of the KPI + """ + _name = "mgmtsystem.kpi.history" + _description = "History of the KPI" + + _columns = { + 'name': fields.char('Name', size=150, required=True), + 'kpi_id': fields.many2one('mgmtsystem.kpi', 'KPI', required=True), + 'date': fields.datetime( + 'Execution Date', + required=True, + readonly=True, + ), + 'value': fields.float('Value', required=True, readonly=True), + 'color': fields.text('Color', required=True, readonly=True), + 'company_id': fields.many2one('res.company', 'Company') + } + + _defaults = { + 'company_id': ( + lambda self, cr, uid, c: + self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id), + 'name': lambda *a: time.strftime('%d %B %Y'), + 'date': lambda *a: time.strftime(DATETIME_FORMAT), + 'color': '#FFFFFF', + } + + _order = "date desc" + + +class mgmtsystem_kpi(orm.Model): + """ + Key Performance Indicators + """ + _name = "mgmtsystem.kpi" + _description = "Key Performance Indicator" + + def _display_last_kpi_value( + self, cr, uid, ids, field_name, arg, context=None): + if context is None: + context = {} + + result = {} + for obj in self.browse(cr, uid, ids): + if obj.history_ids: + result[obj.id] = obj.history_ids[0].value + else: + result[obj.id] = 0 + + return result + + def compute_kpi_value(self, cr, uid, ids, context=None): + if context is None: + context = {} + for obj in self.browse(cr, uid, ids): + kpi_value = 0 + if obj.kpi_type == 'local' and is_select_query(obj.kpi_code): + cr.execute(obj.kpi_code) + dic = cr.dictfetchall() + if is_one_value(dic): + kpi_value = dic[0]['value'] + elif (obj.kpi_type == 'external' + and obj.dbsource_id.id + and is_select_query(obj.kpi_code)): + dbsrc_obj = obj.dbsource_id + res = dbsrc_obj.execute(obj.kpi_code) + if is_one_value(res): + kpi_value = res[0]['value'] + elif obj.kpi_type == 'python': + kpi_value = eval(obj.kpi_code) + + threshold_obj = obj.threshold_id + values = { + 'kpi_id': obj.id, + 'value': kpi_value, + 'color': threshold_obj.get_color(kpi_value), + } + + history_obj = self.pool.get('mgmtsystem.kpi.history') + history_id = history_obj.create(cr, uid, values, context=context) + obj.history_ids.append(history_id) + + return True + + def update_next_execution_date(self, cr, uid, ids, context=None): + if context is None: + context = {} + + for obj in self.browse(cr, uid, ids): + if obj.periodicity_uom == 'hour': + delta = timedelta(hours=obj.periodicity) + elif obj.periodicity_uom == 'day': + delta = timedelta(days=obj.periodicity) + elif obj.periodicity_uom == 'week': + delta = timedelta(weeks=obj.periodicity) + elif obj.periodicity_uom == 'month': + delta = timedelta(months=obj.periodicity) + else: + delta = timedelta() + new_date = datetime.now() + delta + + values = { + 'next_execution_date': new_date.strftime(DATETIME_FORMAT), + } + + obj.write(values) + + return True + + # Method called by the scheduler + def update_kpi_value(self, cr, uid, ids=None, context=None): + if context is None: + context = {} + if not ids: + filters = [ + '&', + '|', + ('active', '=', True), + ('next_execution_date', '<=', + datetime.now().strftime(DATETIME_FORMAT)), + ('next_execution_date', '=', False), + ] + if 'filters' in context: + filters.extend(context['filters']) + ids = self.search(cr, uid, filters, context=context) + res = None + + try: + res = self.compute_kpi_value(cr, uid, ids, context=context) + self.update_next_execution_date(cr, uid, ids, context=context) + except Exception: + _logger.exception("Failed updating KPI values") + + return res + + _columns = { + 'name': fields.char('Name', size=50, required=True), + 'description': fields.text('Description'), + 'category_id': fields.many2one( + 'mgmtsystem.kpi.category', + 'Category', + required=True, + ), + 'threshold_id': fields.many2one( + 'mgmtsystem.kpi.threshold', + 'Threshold', + required=True, + ), + 'periodicity': fields.integer('Periodicity'), + 'periodicity_uom': fields.selection(( + ('hour', 'Hour'), + ('day', 'Day'), + ('week', 'Week'), + ('month', 'Month') + ), 'Periodicity UoM', required=True), + 'next_execution_date': fields.datetime( + 'Next execution date', + readonly=True, + ), + 'value': fields.function( + _display_last_kpi_value, + string='Value', + type='float', + ), + 'kpi_type': fields.selection(( + ('python', 'Python'), + ('local', 'SQL - Local DB'), + ('external', 'SQL - External DB') + ), 'KPI Computation Type'), + 'dbsource_id': fields.many2one( + 'base.external.dbsource', + 'External DB Source', + ), + 'kpi_code': fields.text( + 'KPI Code', + help=("SQL code must return the result as 'value' " + "(i.e. 'SELECT 5 AS value')."), + ), + 'history_ids': fields.one2many( + 'mgmtsystem.kpi.history', + 'kpi_id', + 'History', + ), + 'active': fields.boolean( + 'Active', + help=("Only active KPIs will be updated by the scheduler based on" + " the periodicity configuration."), + ), + 'company_id': fields.many2one('res.company', 'Company') + } + + _defaults = { + 'company_id': ( + lambda self, cr, uid, c: + self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id), + 'active': True, + 'periodicity': 1, + 'periodicity_uom': 'day', + } diff --git a/mgmtsystem_kpi/mgmtsystem_kpi_view.xml b/mgmtsystem_kpi/mgmtsystem_kpi_view.xml new file mode 100644 index 000000000..7953fd3f8 --- /dev/null +++ b/mgmtsystem_kpi/mgmtsystem_kpi_view.xml @@ -0,0 +1,300 @@ + + + + + + + + mgmtsystem.kpi.tree + mgmtsystem.kpi + + + + + + + + + + + + + mgmtsystem.kpi.filter + mgmtsystem.kpi + + + + + + + + + + + + + + + + + + + + mgmtsystem.kpi.form + mgmtsystem.kpi + +
+ + + + + + +