Задача
После довольно продолжительной работы с OpenERP, я понял, что это довольно гибкая система для очень широкого круга задач. Но у нее есть один, на мой взгляд, недостаток - в ней нет встроенное хорошей аналитики. Да есть возможность стоить графики и отчеты, но это не совсем такая аналитика, как мне понадобилась.
Поэтому, после некоторых размышлений, я решил связать OpenERP c Cubes Framework (это фрейворк для создания OLAP кубов на Python). Тем более что для него существует готовый простомотрщик CubesViewer, который реализован на html+js. Для свзяки CubesViewer и OpenERP я придумал создать контроллер, который приобращении к OpenERP по адресу /olap_analytics выдавал бы страницу с работающим CubesViewer’ом.
Подготовка
Для начала скачаем репозиторий с CubesViewer’ом:
git clone https://github.com/jjmontesl/cubesviewer.git
Теперь создадим заготовку пустого модуля OpenERP. Для этого в папке создами новую папку следующей структуры:
- static/
- css
- js
- img
- controllers/
__init__.py
olap_controller.py
(тут будет находится код нашего контроллера)
__init__.py
__openerp__.py
Файл __openerp__.py
следующего содержания:
{
'name': 'Cubes integration',
'category': 'Hidden',
'version': '7.0.1.0',
'description': "",
'depends': ['web'],
'data': [],
'installable': True,
'auto_install': False,
}
Файл /controllers/__openerp__.py/
следующего содержания:
# -*- coding: utf-8 -*-
import olap_controller
Файл init.py следующего содержания:
# -*- coding: utf-8 -*-
import controllers
После создания заготовки модуля необходимо статические файлы cubesviewer’а перенести в соответствующие поддиректории папки static/ нашего модуля. Затем нужно скопировать из репозитория cubesviewer/src/htmlviews/gui.html в папку controllers/ созданного модуля OpenERP. И в заключении в скопированном файле controllers/gui.html поменять начало путей статических файлов с href="../web/static… на href="/<имя_модуля>/static…
Создание контроллера
Итак, когда приготовления готовы, можно приступить к созданию контроллера. Для этого в папке controllers у нашего модуля разместим создадим файл olap_controller.py
со следующим содержимым:
# -*- coding: utf-8 -*-
import openerp.addons.web.http as http
class OlapController(http.Controller):
_cp_path = '/olap_analytics'
@http.httprequest
def index(self, req, s_action=None, **kw):
html_tempale = open('gui.html')
render_html = html_tempale.read()
return render_html
Здесь мы создаем класс контроллера OpenERP, и в переменной _cp_path
указываем абсолютный адрес, который будет обрабатывать наш контроллер.
Декоратор @http.httprequest отвечет за рендеринг страницы ответа на стороне сервера (в нашем случает это html-страница, но также это может быть и json-объект).
В функции index бы считываем шаболон страницы с отображение аналитики и отдаем результат чтения на рендеринг для ответа.
Заключение
Выше был описан пример создания рабочего контролера для OpenERP. Готовый модуль итеграции с Cubes - cubes_integration - нахаодится в моем GitHub’е. Возможно есть и другие способы подружить эти две системы, но реализовать их не удалось, да и в Интернете по этой теме практически нет ничего полезного. Так что думаю для кого-нибудь данное творение будет полезным.
comments powered by Disqus