Задача

После довольно продолжительной работы с 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. Для этого в папке создами новую папку следующей структуры:

Файл __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’е. Возможно есть и другие способы подружить эти две системы, но реализовать их не удалось, да и в Интернете по этой теме практически нет ничего полезного. Так что думаю для кого-нибудь данное творение будет полезным.