OpenERP и related поля

В официальной документации очень мало написано про то, как использовать поля типа related.
Прототип в официальной документации и его описание:

Sometimes you need to refer to the relation of a relation. For example, supposing you have objects: City -> State -> Country, and you need to refer to the Country from a City, you can define a field as below in the City object:
'country_id': fields.related(
    'state_id',
    'country_id',
    type="many2one",
    relation="res.country",
    string="Country",
    store=False)

Where:
— The first set of parameters are the chain of reference fields to follow, with the desired field at the end.
— type is the type of that desired field.
— Use relation if the desired field is still some kind of reference. relation is the table to look up that reference in.

Но как показывает практика этого описания недостаточно.
Есть, например, два класса invoce и contract.

class invoice(osv.osv):
    _name = "invoice"
    _columns = {
        'name_invoice': fields.char('Name'),
        'date_invoice': fields.datetime('Date')
        #'invoice_line': fields.one2many(....)
        #..... Список других полей .....
    }

class contract(osv.osv):
    _name = "contract"
    _columns = {
        'name_contract': fields.char('Name'),
        'date_contract': fields.datetime('Date')
        #..... Список других полей .....
    }

Нам необходимо, что бы пи создании новой записи в invoice происходила запись полей date_invoice и name_invoice в поля date_contract и name_contract объекта contract.

Для этого описываем дополнительные поля в классе invoice:
'name_lnk': fields.related('name_invoice', 'name_contract', type="char", relation="contract", string="Name")
'date_lnk': fields.related('date_invoice', 'date_contract', type="datetime", relation="contract", string="Date")

Теперь автоматически при создании invoice будет делаться запись в contract.

Вообще, лучше описать прототип так:
'country_id': fields.related(
    <поле_источника>,
    <поле_приёмника>,
    type=<тип_поля>,
    relation=<модель_приёмника>,
    string=<строковое_описание>,
    store=False)


Аргумент store служит для сохранения значений в базе:
Если True — данные сохраняются в базе данных
Если False — то это просто поле-функция, без сохранения данных в БД

Решение проблемы с иерархическим списком (деревом)

Нам нужно было сделать иерархический список по спецификациям, при разработке столкнулись с такой проблемой:
если в списке есть элемент, относящийся к разным спецификациям, и у него есть дочерние элементы, то при клике на него открываются дочерние элементы только первого элемента с подобным названием, который в списке. Причина — строки для скрытия/открытия в структуре DOM имеют одинаковые id и действие срабатывает для первых найденных.
Решение было найдено путём изменения функции hook_row_click, которая находится в файле addons/web/static/src/js/view_tree.js

Код для переопределения функции:
openerp.open_products_mrp = function(instance) {
    var module = instance.web;
    var QWeb = instance.web.qweb;


    module.TreeView = module.TreeView.extend({
    hook_row_click: function () {
        var self = this;
        this.$el.delegate('.treeview-td span, .treeview-tr span', 'click', function (e) {
            e.stopImmediatePropagation();
            self.activate($(this).closest('tr').data('id'));
        });

        this.$el.delegate('.treeview-tr', 'click', function () {
            var is_loaded = 0,
                $this = $(this),
                record_id = $this.data('id'),
                record = self.records[record_id],
                children_ids = record[self.children_field];

                if (!$this.parent().hasClass('oe_open')) {
                    self.getdata(record_id, children_ids, $this.parent());
                }
                else{
                    var datalevel = parseInt($this.parent().attr('data-level'));
                    $($this.parent().nextAll('tr')).each(function() {
                        datalevel_this = parseInt($(this).attr('data-level'));
                        if(datalevel_this>datalevel){
                            $(this).remove();
                        }
                        else return false;
                    });
                    $this.parent().removeClass();
                }
        });
    },
    getdata: function (id, children_ids, curr_node) {
        var self = this;

        self.dataset.read_ids(children_ids, this.fields_list()).done(function(records) {
            _(records).each(function (record) {
                self.records[record.id] = record;
            });

            if (curr_node) {
                var $curr_node = $(curr_node);
            } else {
                var $curr_node = self.$el.find('#treerow_' + id);
            }

            var children_rows = QWeb.render('TreeView.rows', {
                'records': records,
                'children_field': self.children_field,
                'fields_view': self.fields_view.arch.children,
                'fields': self.fields,
                'level': $curr_node.data('level') || 0,
                'render': instance.web.format_value,
                'color_for': self.color_for
            });

            if ($curr_node.length) {
                $curr_node.addClass('oe_open');
                $curr_node.after(children_rows);
            } else {
                self.$el.find('tbody').html(children_rows);
            }
        });
    }
    });

};


UPD: готовый модуль для версии 7.0 доступен по адресу openerp-russia.ru/download/tt_mrp_bom_tree_view.tar.gz

Форум дал дуба

Форум OpenERP перешёл в новый формат. Плоский и англоязычный — подобный блогам. Довольно скоро число вопросов превысит разумные нормы, вопросы будут дублироваться (но несколько различаться по форме), поиск быстро станет кошмаром.
Формат форума предполагает древовидную структуру — формат блога — плоскую.
Эта новация лично мне не по душе.

OpenERP 7.0 Примечания к релизу, часть 2: Продуктивность пользователя, громадный прыжок вперед

Мы разрабатываем программное обеспечение для пользователей. Мы думаем что ПО для корпоративного управления должно не только поддерживать процессы предприятия, но также делать каждого сотрудника более продуктивным в его ежедневной работе. Привнесение продуктивности для каждого сотрудника это одно из главных улучшений в OpenERP 7.0.

Мы провели сотни тестирований работы пользователей чтобы измерить и подтвердить эти улучшения. Это значительное достижение OpenERP 7.0 в этой области.

В среднем все процесы (например закупка → получение, создание и продление контрактов, настройка продуктов, и т.д.) совершается на 38% быстрее в OpenERP 7.0 чем в OpenERP 6.1;

Мы протестировали полную цепочку продаж с обычными пользователями, кто никогда не использовал OpenERP. Они начали с пустой базы, без информации или установленных модулей. Мы попросили их создать предложение, отправить его клиенту, конвертировать его в заказ продаж, доставить до клиента, выставить счет и зарегистрировать платеж. В среднем, этим новым пользователям понадобилось 6 минут для выполнения полной цепочки продаж;
Полное настройка системы под себя занимает в среднем 21 минуту для новых пользователей которые никогда не использовали OpenERP. Только продвинутые пользователи успешно выполнили эту же задачу в OpenERP 6.1.

Читать дальше →

OpenERP 7.0 Примечания к релизу, часть 1: Вступление

Первый прорыв OpenERP, достигнутый в версии 7.0, это избавление от сложности, присущей каждой полноценной ERP. Это позволяет снизить время внедрения и сократить издержки, снизить порог вхождения для новых пользователей, и сделать ERP доступной для каждой компании. Это факт, что пользователь, который никогда не использовал OpenERP, может без всяких тренировок, выполнить простой набор операций таких как создание заказа на продажу, доставка и выставление счета клиенту, и регистрация платежа, менее чем за 7 минут. Это несомненное достижение, которым мы гордимся больше всего.

С версией 7.0, OpenERP переключается с ERP на набор интегрированных бизнес-приложений. До сих пор, мир был разделен на ERP (все-в-одном) и лучшие в своем классе приложения. С версией 7.0, OpenERP комбинирует ключевые преимущества обособленных приложений (легких в использовании, быстрых в развертывании, отлично настраевымых, ...) с интеграцией и возможностью использования только той части ERP которая вам нужна. Это позволяет компаниям быстро развернуть один или два модуля с очень низкой стоимостью и постепенно увеличивать масштабы.

OpenERP 7.0 это не просто лучшая и легчайшая в использовании система. Она также вносит много улучшений в существующие возможности и добавляет несколько новых возможностей которые могут расширить масштаб тех сфер бизнеса, которые могут быть покрыты OpenERP. Интеграция с социальными сетями, адреса эл. почты для каждого объекта, интеграция с Google документами и LinkedIn, новое управление контрактами, новое управление событиями, новый интерфейс для розничных продаж (для кассира), новая адресная книга, новое управление транспортом,… это только несколько из множества внесенных улучшений в OpenERP 7.0.

Управляйте вашим парком транспорта с помощью OpenERP 7.0

Новое приложение было добавлено в OpenERP, позволяющее вам собирать информацию о транспорте в вашей компании и отслеживать изменения в нем, контракты, услуги и историю заправок. Так, с помощью этого инструмента вы можете хранить записи о ваших автомобилях, прикреплять их к конкретной компании, обновлять значения одометров и т.д.




Читать дальше →

Извините SAP — мы сделаем вас.

Вольный перевод. http://v6.openerp.com/node/1291
Мне хочется изменить мир. Я хотел бы… Вы знаете, как это бывает, когда ты молод, большие мечты, много энергии и наивной глупости. Моей мечтой было создать программу с открытом исходным кодом для управления предприятием. (Также мне хотелось компанию из 100 сотрудников до 30 лет и самостоятельную компанию в плане финансов, но мне не удалось этого за несколько месяцев).

Чтобы питать мою мотивацию, я должен был выбрать с кем бороться. В бизнесе, как на детской площадке. Когда вы переходите в новую школу, и если быстро хотите стать лидером, вы должны выбрать хулигана, старше вас, который терроризирует малолеток, и ударить его на виду у всех. Это была моя стратегия, выбор пал на SAP — предприятия гигант программного обеспечения.

Итак, в 2005 году я приступил к разработке продукта TinyERP, программное обеспечение, которое (по крайней мере в моём сознание) должно было изменить мир предприятий. Во время подготовки ко «дню борьбы» в 2006 году, я купил домен SorrySAP.com. Я запарковал его, и ждал 6 лет, ожидая подходящего момента, чтобы использовать его. Я думал, это займёт 3 года, но противостоять компании с 77 млрд. долларов только потому, что открытый кодом это так круто. Иногда лучше для само-мотивации не смотреть в лицо реальности …
Но все может произойти, я упорно трудился, очень очень. Я работал 13 часов в день, 7 дней в неделю, без отпуска в течение 7 лет. Я потерял друзей и расстался с моей девушкой (но к счастью, я обрёл теперешнюю мою жену на 1 миллион евро (Я объясню позже, почему она стоит 1 миллион евро :).
Читать дальше →

Модуль локализации OpenERP для России адаптирован для версии 7.0

Самая последняя версия модуля локализации доступна по адресу https://github.com/tterp/openerp/tree/7.0/modules/l10n_ru, то что написано ниже про Launchpad — устарело.

Модуль локализации адаптирован и протестирован мной под версию 7.0:

— для версии 7.0 модуль находится по прежнему адресу https://code.launchpad.net/~openerp-l10n-ru/openobject-addons/l10n_ru
— для версии 6.1 была создана отдельная ветка https://code.launchpad.net/~openerp-l10n-ru/openobject-addons/l10n_ru_6.1

Скачать архив с модулем для версии 7.0 можно по этой ссылке: openerp-russia.ru/l10n_ru/l10n_ru_rev14.zip

На данный момент в этот модуль входит:
— дополнительные реквизиты в карточке партнера: ИНН, КПП, ОКПО, официальное наименование (в дополнение к основному, для вывода в печ.формах), номер договора, дата договора (для ТОРГ-12);
— дополнительные реквизиты в карточке банка: корр. счет;
— мастер загрузки и последующего обновления классификатора российских банков от ЦБ РФ;
— российский план счетов (импортировал его не я, поэтому не уверен что он полноценно работает).

Мастер загрузки и обновления российских банков находится в меню Учет/Настройки/Счета/Обновить банки. Чтобы это меню отобразилось у вас, нужно в настройках вашего пользователя (Настройки/Пользователи/Ваш пользователь/Права доступа/Бухгалтерия и Финансы) установить роль Financial Manager (Финансовый менеджер), после чего сохранить настройки пользователя и нажать на логотип OpenERP для перезагрузки интерфейса.

Дополнительные реквизиты для партнеров находятся в карточке партнера на вкладке Учет.

В доработке модуля локализации под Россию можете помочь и вы! Как это сделать читайте тут: openerp-russia.ru/blog/openerpdev/50.html