mirror of
https://github.com/OCA/reporting-engine.git
synced 2025-02-16 16:30:38 +02:00
Migration to 13.0
This commit is contained in:
@@ -3,12 +3,12 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"name": "Key Performance Indicator",
|
"name": "Key Performance Indicator",
|
||||||
"version": "12.0.1.0.0",
|
"version": "13.0.1.0.0",
|
||||||
"author": "Savoir-faire Linux,Odoo Community Association (OCA)",
|
"author": "Savoir-faire Linux,Odoo Community Association (OCA)",
|
||||||
"website": "http://www.savoirfairelinux.com",
|
"website": "http://www.savoirfairelinux.com",
|
||||||
"license": "AGPL-3",
|
"license": "AGPL-3",
|
||||||
"category": "Report",
|
"category": "Report",
|
||||||
"depends": ["base_external_dbsource", "web_widget_color",],
|
"depends": ["base_external_dbsource"],
|
||||||
"data": [
|
"data": [
|
||||||
"security/kpi_security.xml",
|
"security/kpi_security.xml",
|
||||||
"security/ir.model.access.csv",
|
"security/ir.model.access.csv",
|
||||||
|
|||||||
@@ -61,13 +61,13 @@ class KPI(models.Model):
|
|||||||
periodicity = fields.Integer("Periodicity", default=1)
|
periodicity = fields.Integer("Periodicity", default=1)
|
||||||
|
|
||||||
periodicity_uom = fields.Selection(
|
periodicity_uom = fields.Selection(
|
||||||
(
|
[
|
||||||
("minute", "Minute"),
|
("minute", "Minute"),
|
||||||
("hour", "Hour"),
|
("hour", "Hour"),
|
||||||
("day", "Day"),
|
("day", "Day"),
|
||||||
("week", "Week"),
|
("week", "Week"),
|
||||||
("month", "Month"),
|
("month", "Month"),
|
||||||
),
|
],
|
||||||
"Periodicity UoM",
|
"Periodicity UoM",
|
||||||
required=True,
|
required=True,
|
||||||
default="day",
|
default="day",
|
||||||
@@ -80,11 +80,11 @@ class KPI(models.Model):
|
|||||||
"Last execution", compute="_compute_display_last_kpi_value",
|
"Last execution", compute="_compute_display_last_kpi_value",
|
||||||
)
|
)
|
||||||
kpi_type = fields.Selection(
|
kpi_type = fields.Selection(
|
||||||
(
|
[
|
||||||
("python", "Python"),
|
("python", "Python"),
|
||||||
("local", "SQL - Local DB"),
|
("local", "SQL - Local DB"),
|
||||||
("external", "SQL - External DB"),
|
("external", "SQL - External DB"),
|
||||||
),
|
],
|
||||||
"KPI Computation Type",
|
"KPI Computation Type",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -105,10 +105,9 @@ class KPI(models.Model):
|
|||||||
default=True,
|
default=True,
|
||||||
)
|
)
|
||||||
company_id = fields.Many2one(
|
company_id = fields.Many2one(
|
||||||
"res.company", "Company", default=lambda self: self.env.user.company_id.id
|
"res.company", "Company", default=lambda self: self.env.company
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _compute_display_last_kpi_value(self):
|
def _compute_display_last_kpi_value(self):
|
||||||
history_obj = self.env["kpi.history"]
|
history_obj = self.env["kpi.history"]
|
||||||
for obj in self:
|
for obj in self:
|
||||||
@@ -123,7 +122,6 @@ class KPI(models.Model):
|
|||||||
obj.color = "#FFFFFF"
|
obj.color = "#FFFFFF"
|
||||||
obj.last_execution = False
|
obj.last_execution = False
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _get_kpi_value(self):
|
def _get_kpi_value(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
kpi_value = 0
|
kpi_value = 0
|
||||||
@@ -155,7 +153,6 @@ class KPI(models.Model):
|
|||||||
res.update({"kpi_id": self.id})
|
res.update({"kpi_id": self.id})
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def compute_kpi_value(self):
|
def compute_kpi_value(self):
|
||||||
for obj in self:
|
for obj in self:
|
||||||
history_vals = obj._get_kpi_value()
|
history_vals = obj._get_kpi_value()
|
||||||
@@ -163,7 +160,6 @@ class KPI(models.Model):
|
|||||||
history_obj.sudo().create(history_vals)
|
history_obj.sudo().create(history_vals)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def update_next_execution_date(self):
|
def update_next_execution_date(self):
|
||||||
for obj in self:
|
for obj in self:
|
||||||
if obj.periodicity_uom == "hour":
|
if obj.periodicity_uom == "hour":
|
||||||
|
|||||||
@@ -22,5 +22,5 @@ class KPIHistory(models.Model):
|
|||||||
value = fields.Float("Value", required=True, readonly=True)
|
value = fields.Float("Value", required=True, readonly=True)
|
||||||
color = fields.Text("Color", required=True, readonly=True, default="#FFFFFF")
|
color = fields.Text("Color", required=True, readonly=True, default="#FFFFFF")
|
||||||
company_id = fields.Many2one(
|
company_id = fields.Many2one(
|
||||||
"res.company", "Company", default=lambda self: self.env.user.company_id.id
|
"res.company", "Company", default=lambda self: self.env.company
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ class KPIThreshold(models.Model):
|
|||||||
_name = "kpi.threshold"
|
_name = "kpi.threshold"
|
||||||
_description = "KPI Threshold"
|
_description = "KPI Threshold"
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _compute_is_valid_threshold(self):
|
def _compute_is_valid_threshold(self):
|
||||||
for obj in self:
|
for obj in self:
|
||||||
# check if ranges overlap
|
# check if ranges overlap
|
||||||
@@ -54,7 +53,7 @@ class KPIThreshold(models.Model):
|
|||||||
)
|
)
|
||||||
kpi_ids = fields.One2many("kpi", "threshold_id", "KPIs")
|
kpi_ids = fields.One2many("kpi", "threshold_id", "KPIs")
|
||||||
company_id = fields.Many2one(
|
company_id = fields.Many2one(
|
||||||
"res.company", "Company", default=lambda self: self.env.user.company_id.id
|
"res.company", "Company", default=lambda self: self.env.company
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
@@ -82,7 +81,6 @@ class KPIThreshold(models.Model):
|
|||||||
range_obj1 = self.env["kpi.threshold.range"]
|
range_obj1 = self.env["kpi.threshold.range"]
|
||||||
return super(KPIThreshold, self).create(data)
|
return super(KPIThreshold, self).create(data)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def get_color(self, kpi_value):
|
def get_color(self, kpi_value):
|
||||||
color = "#FFFFFF"
|
color = "#FFFFFF"
|
||||||
for obj in self:
|
for obj in self:
|
||||||
|
|||||||
@@ -49,6 +49,15 @@ class KPIThresholdRange(models.Model):
|
|||||||
_name = "kpi.threshold.range"
|
_name = "kpi.threshold.range"
|
||||||
_description = "KPI Threshold Range"
|
_description = "KPI Threshold Range"
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _selection_value_type(self):
|
||||||
|
return [
|
||||||
|
("static", "Fixed value"),
|
||||||
|
("python", "Python Code"),
|
||||||
|
("local", "SQL - Local DB"),
|
||||||
|
("external", "SQL - External DB"),
|
||||||
|
]
|
||||||
|
|
||||||
name = fields.Char("Name", size=50, required=True)
|
name = fields.Char("Name", size=50, required=True)
|
||||||
valid = fields.Boolean(
|
valid = fields.Boolean(
|
||||||
string="Valid", required=True, compute="_compute_is_valid_range", default=True
|
string="Valid", required=True, compute="_compute_is_valid_range", default=True
|
||||||
@@ -57,14 +66,7 @@ class KPIThresholdRange(models.Model):
|
|||||||
string="Message", size=100, compute="_compute_is_valid_range"
|
string="Message", size=100, compute="_compute_is_valid_range"
|
||||||
)
|
)
|
||||||
min_type = fields.Selection(
|
min_type = fields.Selection(
|
||||||
(
|
selection="_selection_value_type", string="Min Type", required=True
|
||||||
("static", "Fixed value"),
|
|
||||||
("python", "Python Code"),
|
|
||||||
("local", "SQL - Local DB"),
|
|
||||||
("external", "SQL - Externa DB"),
|
|
||||||
),
|
|
||||||
"Min Type",
|
|
||||||
required=True,
|
|
||||||
)
|
)
|
||||||
min_value = fields.Float(string="Minimum Value", compute="_compute_min_value")
|
min_value = fields.Float(string="Minimum Value", compute="_compute_min_value")
|
||||||
min_fixed_value = fields.Float("Minimum Fixed Value")
|
min_fixed_value = fields.Float("Minimum Fixed Value")
|
||||||
@@ -74,14 +76,7 @@ class KPIThresholdRange(models.Model):
|
|||||||
"base.external.dbsource", "External DB Source Minimum",
|
"base.external.dbsource", "External DB Source Minimum",
|
||||||
)
|
)
|
||||||
max_type = fields.Selection(
|
max_type = fields.Selection(
|
||||||
(
|
selection="_selection_value_type", string="Max Type", required=True
|
||||||
("static", "Fixed value"),
|
|
||||||
("python", "Python Code"),
|
|
||||||
("local", "SQL - Local DB"),
|
|
||||||
("external", "SQL - External DB"),
|
|
||||||
),
|
|
||||||
"Max Type",
|
|
||||||
required=True,
|
|
||||||
)
|
)
|
||||||
max_value = fields.Float(string="Maximum Value", compute="_compute_max_value")
|
max_value = fields.Float(string="Maximum Value", compute="_compute_max_value")
|
||||||
max_fixed_value = fields.Float("Maximum Fixed Value")
|
max_fixed_value = fields.Float("Maximum Fixed Value")
|
||||||
@@ -101,10 +96,9 @@ class KPIThresholdRange(models.Model):
|
|||||||
"Thresholds",
|
"Thresholds",
|
||||||
)
|
)
|
||||||
company_id = fields.Many2one(
|
company_id = fields.Many2one(
|
||||||
"res.company", "Company", default=lambda self: self.env.user.company_id.id
|
"res.company", "Company", default=lambda self: self.env.company
|
||||||
)
|
)
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _compute_min_value(self):
|
def _compute_min_value(self):
|
||||||
for obj in self:
|
for obj in self:
|
||||||
value = None
|
value = None
|
||||||
@@ -134,7 +128,6 @@ class KPIThresholdRange(models.Model):
|
|||||||
obj.min_value = value
|
obj.min_value = value
|
||||||
obj.min_error = error
|
obj.min_error = error
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _compute_max_value(self):
|
def _compute_max_value(self):
|
||||||
for obj in self:
|
for obj in self:
|
||||||
value = None
|
value = None
|
||||||
@@ -164,7 +157,6 @@ class KPIThresholdRange(models.Model):
|
|||||||
obj.max_value = value
|
obj.max_value = value
|
||||||
obj.max_error = error
|
obj.max_error = error
|
||||||
|
|
||||||
@api.multi
|
|
||||||
def _compute_is_valid_range(self):
|
def _compute_is_valid_range(self):
|
||||||
for obj in self:
|
for obj in self:
|
||||||
if obj.min_error or obj.max_error:
|
if obj.min_error or obj.max_error:
|
||||||
|
|||||||
@@ -5,3 +5,6 @@
|
|||||||
* Gervais Naoussi <gervaisnaoussi@gmail.com>
|
* Gervais Naoussi <gervaisnaoussi@gmail.com>
|
||||||
* Iván Todorovich <ivan.todorovich@gmail.com>
|
* Iván Todorovich <ivan.todorovich@gmail.com>
|
||||||
* Adrià Gil <adria.gil@eficent.com>
|
* Adrià Gil <adria.gil@eficent.com>
|
||||||
|
* `Guadaltech <https://www.guadaltech.es>`_:
|
||||||
|
|
||||||
|
* Fernando La Chica <fernando.lachica@guadaltech.es>
|
||||||
|
|||||||
8
kpi/security/kpi_security.xml
Executable file → Normal file
8
kpi/security/kpi_security.xml
Executable file → Normal file
@@ -17,7 +17,7 @@
|
|||||||
<field name="global" eval="True" />
|
<field name="global" eval="True" />
|
||||||
<field
|
<field
|
||||||
name="domain_force"
|
name="domain_force"
|
||||||
>['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
>['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="ir.rule" id="kpi_threshold_range_rule">
|
<record model="ir.rule" id="kpi_threshold_range_rule">
|
||||||
<field name="name">kpi_threshold_range multi-company</field>
|
<field name="name">kpi_threshold_range multi-company</field>
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
<field name="global" eval="True" />
|
<field name="global" eval="True" />
|
||||||
<field
|
<field
|
||||||
name="domain_force"
|
name="domain_force"
|
||||||
>['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
>['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="ir.rule" id="kpi_threshold_rule">
|
<record model="ir.rule" id="kpi_threshold_rule">
|
||||||
<field name="name">kpi_threshold multi-company</field>
|
<field name="name">kpi_threshold multi-company</field>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
<field name="global" eval="True" />
|
<field name="global" eval="True" />
|
||||||
<field
|
<field
|
||||||
name="domain_force"
|
name="domain_force"
|
||||||
>['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
>['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="ir.rule" id="kpi_history_rule">
|
<record model="ir.rule" id="kpi_history_rule">
|
||||||
<field name="name">kpi_history multi-company</field>
|
<field name="name">kpi_history multi-company</field>
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<field name="global" eval="True" />
|
<field name="global" eval="True" />
|
||||||
<field
|
<field
|
||||||
name="domain_force"
|
name="domain_force"
|
||||||
>['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
>['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
|
||||||
</record>
|
</record>
|
||||||
</data>
|
</data>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -68,11 +68,11 @@ class TestKPI(TransactionCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
threshold1 = self.env["kpi.threshold"].create(
|
threshold1 = self.env["kpi.threshold"].create(
|
||||||
{"name": "Threshold1", "range_ids": [(6, 0, [range1.id, range2.id])],}
|
{"name": "Threshold1", "range_ids": [(6, 0, [range1.id, range2.id])]}
|
||||||
)
|
)
|
||||||
|
|
||||||
threshold2 = self.env["kpi.threshold"].create(
|
threshold2 = self.env["kpi.threshold"].create(
|
||||||
{"name": "Threshold1", "range_ids": [(6, 0, [range3.id, range2.id])],}
|
{"name": "Threshold1", "range_ids": [(6, 0, [range3.id, range2.id])]}
|
||||||
)
|
)
|
||||||
|
|
||||||
threshold3 = self.env["kpi.threshold"].create(
|
threshold3 = self.env["kpi.threshold"].create(
|
||||||
|
|||||||
@@ -30,7 +30,6 @@
|
|||||||
<record model="ir.actions.act_window" id="open_category_list">
|
<record model="ir.actions.act_window" id="open_category_list">
|
||||||
<field name="name">Categories</field>
|
<field name="name">Categories</field>
|
||||||
<field name="res_model">kpi.category</field>
|
<field name="res_model">kpi.category</field>
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">tree,form</field>
|
<field name="view_mode">tree,form</field>
|
||||||
<field name="view_id" ref="view_kpi_category_tree" />
|
<field name="view_id" ref="view_kpi_category_tree" />
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
@@ -106,7 +106,6 @@
|
|||||||
<record model="ir.actions.act_window" id="open_threshold_range_list">
|
<record model="ir.actions.act_window" id="open_threshold_range_list">
|
||||||
<field name="name">Ranges</field>
|
<field name="name">Ranges</field>
|
||||||
<field name="res_model">kpi.threshold.range</field>
|
<field name="res_model">kpi.threshold.range</field>
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">tree,form</field>
|
<field name="view_mode">tree,form</field>
|
||||||
<field name="view_id" ref="view_kpi_threshold_range_tree" />
|
<field name="view_id" ref="view_kpi_threshold_range_tree" />
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
@@ -56,7 +56,6 @@
|
|||||||
<record model="ir.actions.act_window" id="open_threshold_list">
|
<record model="ir.actions.act_window" id="open_threshold_list">
|
||||||
<field name="name">Thresholds</field>
|
<field name="name">Thresholds</field>
|
||||||
<field name="res_model">kpi.threshold</field>
|
<field name="res_model">kpi.threshold</field>
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">tree,form</field>
|
<field name="view_mode">tree,form</field>
|
||||||
<field name="view_id" ref="view_kpi_threshold_tree" />
|
<field name="view_id" ref="view_kpi_threshold_tree" />
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
@@ -142,7 +142,6 @@
|
|||||||
<record model="ir.actions.act_window" id="open_kpi_dashboard">
|
<record model="ir.actions.act_window" id="open_kpi_dashboard">
|
||||||
<field name="name">KPI Dashboard</field>
|
<field name="name">KPI Dashboard</field>
|
||||||
<field name="res_model">kpi</field>
|
<field name="res_model">kpi</field>
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">kanban,form</field>
|
<field name="view_mode">kanban,form</field>
|
||||||
<field name="search_view_id" ref="view_kpi_filter" />
|
<field name="search_view_id" ref="view_kpi_filter" />
|
||||||
</record>
|
</record>
|
||||||
@@ -155,7 +154,6 @@
|
|||||||
<record model="ir.actions.act_window" id="open_kpi_list">
|
<record model="ir.actions.act_window" id="open_kpi_list">
|
||||||
<field name="name">KPI Maintenance</field>
|
<field name="name">KPI Maintenance</field>
|
||||||
<field name="res_model">kpi</field>
|
<field name="res_model">kpi</field>
|
||||||
<field name="view_type">form</field>
|
|
||||||
<field name="view_mode">tree,form</field>
|
<field name="view_mode">tree,form</field>
|
||||||
<field name="search_view_id" ref="view_kpi_filter" />
|
<field name="search_view_id" ref="view_kpi_filter" />
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
server-tools
|
server-tools
|
||||||
|
server-backend
|
||||||
|
|||||||
1
setup/kpi/odoo/addons/kpi
Symbolic link
1
setup/kpi/odoo/addons/kpi
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
../../../../kpi
|
||||||
6
setup/kpi/setup.py
Normal file
6
setup/kpi/setup.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import setuptools
|
||||||
|
|
||||||
|
setuptools.setup(
|
||||||
|
setup_requires=['setuptools-odoo'],
|
||||||
|
odoo_addon=True,
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user