0.00
21 читатель, 45 топиков

Динамический домен для поля Many2one

Коллеги, подскажите, как навесить вычисляемый домен в таком случае:

В Odoo 8 есть сущность «Договор», в которой
1. Указан «Поставщик» — ссылка на сущность «Партнер»
2. Есть поле «Ответственный со стороны поставщика» — ссылка на сущность «Контакт»

«Партнер» и «Контакт» связаны Many2Many

Нужно, чтобы в поле «Ответственный со стороны поставщика», в лукапе показывались только те контакты, которые связаны с указанным поставщиком.

Пробовал писать в модели сущности «Договор»:

	@api.onchange('vendor_id')
	def onchange_vendor(self):
		res = {}
		if self.vendor_id:
			vendor_contact_ids = self.vendor_id.contact_ids.mapped('id')
			res['domain'] = {'vendcontact_id': [('id', 'in', vendor_contact_ids)]}
		else:
			res['domain'] = {'vendcontact_id': [('id', 'in', [])]

		return res

Этот метод срабатывает только при создании нового договора или при изменении поля «Поставщик». Как быть в случае, когда форма уже существующего договора открывается на редактирование, но пользователь не трогает поле «Поставщик»?

Документация Odoo (OpenERP)

Документация по Odoo (OpenERP) всегда была недостаточно хороша. В основном это происходит по причине слишком быстрого развития проекта. TinyERP быстро эволюционировала в OpenERP и сейчас в Odoo. В данный момент команда Odoo решает, как правильно распределить ресурсы разработчиков: улучшить взаимодействие пользователей с Odoo, сделав его максимально интуитивным или работать над документацией, которая в этом случае должна быть практически полностью переписана с нуля каждый год, когда выходит новая версия.

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

  • Руководство разработчика
  • Руководство дизайнера
  • Справочник разработчика
  • Руководство по использованию нового API

Так сообщество Odoo и различные разработчики пришли/должны придти на помощь для достижения успеха.

Так какие ресурсы уже доступны в сети?

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

Русский перевод Odoo 8.0

Дорогое сообщество Odoo хочу вам предложить некоторые уже готовые наработки по переводу. Я сам в своей работе использую Odoo и за собственный счет сделал перевод почти всех модулей Odoo 8.0. Еще осталась бухгалтерия и склад. Доступ где ведется перевод здесь translate.starlight-biz.com Ресурс закрыл но перевод остался смотрите ниже.

Сейчас можно скачать текущий пакет перевода отсюда.

Но есть одна проблема. В одном из модулей (диапазон модулей где возможно произошла ошибка есть) где то не правильный формат перевода. И по этому у меня выпадает ошибка при нажатии в русской версии на пункте меню Настройки- Общие настройки такая ошибка
Uncaught Error: Invalid XML: <form string="Общие настройки" class="oe_form_configuration"><header><button string="Применить" type="object" name="execute" class="oe_highlight"/>.......


Не все сюда вывел но смысл понятен, где то нарушена разметка страницы.

Я готов закончить перевод полностью и откорректировать термины, но вот эти оплошности перевода нужно постараться найти и исправить. Прошу вас присоеденится к этому. Все кто заинтересован, можете скачать перевод, использовать его и дать обратную связь, где и что исправить и может найдете ошибку. Буду очень признателен, и спасибо тем кто присоеденится!

После обновления языков этих модулей у меня вылезла ошибка, что описал выше.
hr_gamification
marketing_campaign
marketing_crm
mass_mailing
product
product_email_template
product_expiry
product_extended
product_margin
report
report_webkit
edi
event_sale
fetchmail
fleet
gamification
gamification_sale_crm
google_calendar
google_drive
l10n_multilang
note

Наследование sale.order в Odoo 8

Имеется Odoo (OpenERP) 8.
Нужно добавить поле в sale.order

Вот так:
from openerp import models, fields

class SomeClass(models.Model):
    _inherit = 'sale.order'

    description = fields.Char(default="Some text")


На что odoo ругается следующим образом:


<ERROR sandbox werkzeug: Error on request:

Закладка с PriceList в Продуктах

Price List — формирования цены / odoo 8.0

В модуле Pricelist можно формировать цены. Нас интересует зависиместь цены от количества.

Для примера добим три продукта.
(Warehouse -> Product)

Maketesana A4 — Ед.изм. = unit — Цена ставиться в Product-Product за единицу.
Izciršana 2 — Ед.изм. = blank — Цена ставиться в PriceListe зависит от заготовок.
Salimešana — Ед.изм. = circulation Цена ставиться в PriceListe зависит от тиража.

Количество от большего к меньшему, регулируется последовательностью(sequances), тогда система проверяет количества в PriceListe при продажи и ставит соответствующую цену.

Salimešana — Ед.изм. = circulation — Цена ставиться в PriceListe зависит от тиража.
1500 — 0.0441
1250 — 0.0464
1500 — 0.0488

897 3-cir-1500 [3] Salimešana 1 shov 1500 Public Price
898 3-cir-1250 [3] Salimešana 1 shov 1250 Public Price
899 3-cir-1000 [3] Salimešana 1 shov 1000 Public Price

Но если все это добавлять в PriceList Versions – получается не удобно.

Module Pricelist_tab – закладка Prices продуктах

В закладке мы можем видеть в каких Праислистах участвует продукт.
Праислист может быть назначен продукту и категории.

Прямо из Продуктов можно добавлять цены.

Wizard Add Price for circulation and blanks

[[Circulation-Blank]] — Тираж и Заготовки

Circulation

seq rule name price_version min_quan

80 от 1500 — до 1750 cir. Manufacture ver.1.0 1500
90 от 1250 — до 1500 cir. Manufacture ver.1.0 1250
100 от 1000 — до 1250 cir. Manufacture ver.1.0 1000

Кнопка / wizard. Которая позволит добавлять количества из шаблона. для тиража либо для заготовок.

На закладке (Prices) кнопка «Add Price». По нажатию кнопки открывается wizard окно. Выбираем версию Pricelist и тип(тираж или заготовки)
Жмём ок и добавляются записи от… до….
Остаётся только добавить цены к этим позициям.

Сами данные для шаблона лежат в Sale->Pricelists Tab->Res.ext Config

Модуль - Mail_organizer

Модуль — Mail_organizer

/openerp/addons/mail/mail_message.py

def check_access_rule

Эта штука не позволяет привязывать письмо с вложением, если ты не Супер Пользователь.

Комментируем код.


        # Calculate remaining ids: if not void, raise an error
        #other_ids = other_ids.difference(set(document_related_ids))
        #if not other_ids:
        #    return
        #raise orm.except_orm(_('Access Denied'),
        #                    _('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: %s, Operation: %s)') % \
        #                    (self._description, operation))


Еще если, очень хочется стирать сообщения, можно добавить в
openerp/addon-other/mail_organizer/static/src/xml/mail.xml


<template>
…
...
    <t t-extend="mail.thread.message">
        <t t-jquery=".oe_msg_icons span:first-child()" t-operation="after">
            <span class="oe_msg_delete"><a title="Delete" class="oe_e">X</a></span>
        </t>
    </t>
</template>


Openobject-fts — полно-текстный поиск.

Openobject-fts — полнотекстовый поиск. Для поиска по почте и по задачам нужно поставить fts_mail и fts_project.

Каждые 10 минут обновляется индекс. Поиск работает, но при нажатии на результат:
например письмо, должно открыться, но в место этого, окно с ошибкой.

Это на 7 версии.

Client Traceback (most recent call last):
  File "/usr/share/pyshared/openerp/addons/web/http.py", line 204, in dispatch
    response["result"] = method(self, **self.params)
TypeError: call_kw() takes exactly 6 arguments (5 given)

На 8.0 там другая, ругается на Dict

На github'е поправил для 7 и 8 версии всё работает.
github.com/straga/odoo-addon_fts

Etherpad - принудительное декодирование для текста.

Openerp7/Odoo

Если установить Etherpad и подключить к OpenERP, те записи, что есть в Note конвертируются в виде вопросов. Хотя новые будут создаваться нормально.

addons/pad/py_etherpad/__init__.py

В файле __init__.py функция Call

выглядит вот так.


        params = arguments or {}
        params.update({'apikey': self.apiKey})
        data = urllib.urlencode(params, True)


Добавил принудительное декодирование для параметр текста, если он передаётся. При передачи параметра Etherpad-api xthtp url — теряется кодировка в urlencode.


        params = arguments or {}
        params.update({'apikey': self.apiKey})

        try:
             text_u = params.get('text')
             params.update({'text': text_u.encode('utf-8')})

        except:
             text_u = None

        data = urllib.urlencode(params, True)


После таких манипуляций работает все как надо.

Виджет КЛАДР (ФИАС)

Привет, сообщество Odoo!

Последнее время внимательно присматриваемся к форуму. Видим, что не все готовы делиться своими разработками. Что ж. Наша компания верит в свободные технологии. Посему начинаем цикл небольших статей о том, что удалось.

Сразу предупреждаем, большинство публикуемых модулей писались под конкретные проекты и применялись в альфа 8ой версии. Поэтому сильно на код не ругайтесь, а лучше давайте вместе работать над OpenERP… в смысле Odoo!

Первый пост — о модуле КЛАДР, одной из самых обсуждаемых плюшек среди тайных поклонников 1С будущих пользователей корпоративной системы. Наши заказчики, по крайней мере, требуют её в обязательном порядке. Может, и вам пригодится.

Что такое модуль КЛАДР и с чем его едят
Ключевая цель модуля — облегчить ввод и снизить количество ошибок при заполнении адресов за счёт автоматизации. Автоматические подсказки и автоматическая подстановка, однако, невозможны без надёжного классификатора. Требования же по актуальности делают прямой импорт в Odoo неразумным. Выход из ситуации — внешний API. Тем более, что добрые люди предлагают такой сервис абсолютно бесплатно. Он и был взят за основу.

Для использования API созданы виджеты (папка web_kladr_widget):
  • Регион
    kladr_region
  • Город
    kladr_city
  • Район
    kladr_district
  • Улица
    kladr_street
  • Дом
    kladr_house
  • Индекс
    kladr_zip

Для правильной работы виджетов, были переделаны классы, в которых встречаются адреса (res_partner — папка partner_kladr_address; crm_lead — папка kladr_crm):
  • Добавлены поля:
    Район
    district
    Дом
    house
    Квартира/офис
    office
  • Добавлено поле регион типа char
    state_id_kladr
    Здесь нужно быть внимательным, т. к. на стандарном поле state типа many2one виджет работать не будет
  • Дополнительно добавлены юридический и почтовые адреса (по аналогии с основным адресом)
  • Все адреса генерятся функциями в строку

Отображения также были изменены:
  • Спрятана вторая улица и стандартный регион. Так что, для применения к действующей базе, данные придётся переносить отдельно
  • Поля расположены в порядке, удобном для заполнения с автоматическими подсказками
  • Адрес заключен в контейнер класса
    kladr_address
    для тех случаев, когда на форме несколько однотипных виджетов
В итоге получаем такой вид:
Отображение адреса в КЛАДР

Как видно, первым заполняется город, который подставляет район/область (кроме городов федерального значения). По улицам и домам добавляются подсказки, а при их использовании автоматически появляется индекс.
Пример формирования подсказки

Модули доступны на GitHub

P.S. По последнему скриншоту (2 строка подсказки) можно судить об актуальности базы=)

OpenERP + skype

Написал небольшой модуль, который добавляет поле skype в карточку контакта. При нажатии сразу открывает чат в скайпе.

Посмотреть код:
http://bazaar.launchpad.net/~yelizariev/+junk/openerp-addons-yelizariev/files/head:/res_partner_skype/

Получить из репозитория:
bzr branch lp:~yelizariev/+junk/openerp-addons-yelizariev