Odoo con bokeh
Veremos como sacar un gráfco de bokeh en Odoo 12
En una instalación estandar de Odoo 12 hay que instalar:
pip3 install bokeh
pip3 install selenium
sudo apt-get install firefox-geckodriver
Creamos una carpeta llamada wizards y dentro creamos un fichero llamado por ejemplo bokeh_data.py con el siguiente código:
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from bokeh.plotting import figure, output_file, save
from bokeh.io.export import get_screenshot_as_png
from bokeh.io import export_png
from odoo.modules.module import get_module_resource
from odoo import tools
import base64
class BokehData(models.TransientModel):
_name = 'bokeh.data'
_description = 'Bokeh Data'
image = fields.Binary(string='Image',default=lambda s: s._default_product_image(), help='My Image')
@api.model
def _default_product_image(self):
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]
p = figure(title="simple line example", x_axis_label='x', y_axis_label='y')
# add a line renderer with legend and line thickness
p.line(x, y, legend_label="Temp.", line_width=2)
export_png(p, filename="/opt/odoo12/odoo/addons/bokeh_data/test/plot.png")
image_path = get_module_resource(
'bokeh_data', 'test', 'plot.png'
)
with open(image_path, 'rb') as handler:
image_data = handler.read()
return tools.image_resize_image_big(
base64.b64encode(image_data)
)
Ves que hay una ruta fija... que tendrias que adaptar a tu instalación. El módulo en este caso se ha llamado bokeh_data y se ha creado una carpeta llamada test para dejar las fotos.
En la misma carpeta wizard creamos un fichero XML con el nombre bokeh_data_view.xml y el contenido:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_clean_data_form" model="ir.ui.view">
<field name="name">bokeh.data.wiz.form</field>
<field name="model">bokeh.data</field>
<field name="arch" type="xml">
<form string="Bokeh Data">
<group>
<group>
<field name="image" widget="image"/>
</group>
</group>
</form>
</field>
</record>
<record id="action_clean_data_wizard" model="ir.actions.act_window">
<field name="name">Bokeh Data</field>
<field name="res_model">bokeh.data</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<menuitem id="clean_data_menu"
name="Bokeh Data"
string="Bokeh Data"
parent="base.menu_administration"
sequence="0"/>
<menuitem id="clean_data_sub_menu"
parent="clean_data_menu"
action="action_clean_data_wizard"
name="Clean Data"
string="Clean Data"
sequence="0"/>
</odoo>
Cuando lo instales, verás que en ajustes sale una nueva opción de menú que te muestra el gráfico.