Закладка с 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 в Odoo я сменил логотип и адрес сайта сообщества, изменился и адрес официального репозитория сообщества.

http://odoo-russia.ru — сайт русскоязычного сообщества Odoo
http://github.com/tterp/odoo-russia — репозиторий с исходными кодами разработок русскоязычного сообщества Odoo

Со старых адресов установлены автоматические редиректы на новые.

На форуме добавлен новый раздел Заказы на доработку, установку, настройку Odoo, все ваши потребности в разработчиках и выполнении ваших проектов пожалуйста пишите туда.

Также из нововведений — передвинул ссылку Форум в главном меню сайта на самое первое место и сделал ее жирной, т.к. многие жаловались что не знают о форуме, потому что в меню справа его не было хорошо заметно.

Если кого-то из разработчиков интересует связка Odoo с торговым оборудованием, сегодня компания Манускрипт Солюшнс из Тулы ms71.ru любезно предоставила мне свободные исходники веб-драйверов для ККМ Атол и Штрих-М, они находятся тут: github.com/tterp/odoo-russia/tree/7.0/pos_webdrivers и распространяются по лицензии GPL. Пожалуйста, присылайте свои Pull Request'ы с разработками на основе этих драйверов в тот же репозиторий, а также предлагайте Pull Request'ы со своими разработками по другим вопросам, связанным с Odoo!

Также пожалуйста, делитесь ссылками на свои доработки к Odoo в этом форуме: odoo-russia.ru/forum/openerp-develop-exchange/

У кого еще какие пожелания может есть? Что-то все затихли в последнее время…

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

OpenERP стихами Чуковского К.И.

Привет всем!
Представляю Вашему вниманию решение нашу разработку по интеграции OpenERP и Asterisk в довольно необычной форме.

Функционал представляет:
Всплывающие уведомления при входящих звонках.
Звонок из правочника парнеров.
Интеграция со справочником партнёров. (При входящем звонке Asterisk определяет номер и OpenERP просматривает текущий справочник партнеров по номеру абонента)
Журнал звонков с записью разговоров
Интеграция с продажами и CRM

Буду раз ответить на все ваши вопросы.

Установка домена для поля many2one

Есть объект «Телефонный звонок».
Есть два поля-списка: «Партнёры» и «Телефонные номера».
«Партнёры» относятся к «Телефонные номера» как one2many (у одного Партнёра может быть n-ное количество Телефонных номеров).
Задача: необходимо, чтобы при выборе Партнёра из списка «Партнёры», в списке «Телефонные номера» отображались только телефонные номера, принадлежащие данному Партнёру. Понимаю, что это возможно выкрутить, но как именно — так и не понял.
P.S. Пока удалось сделать только обратное: при выборе Телефонного номера в списке «Телефонные номера» устанавливается домен для списка «Партнёры», код ниже:

from openerp.osv import fields, osv

class crm_phonecall(osv.osv):

    _inherit = "crm.phonecall"

    _columns = {
        'phonenumber': fields.many2one('phonenumber.phonenumber', 'Phone number', required=True, ondelete='cascade'),

    } 

# Update partner's domain. Leave the only partner that owns selected phonenumber

    def onchange_phonenumber(self, cr, uid, ids, ph_selected):
	if ph_selected > 0:
	    record=self.pool.get('phonenumber.phonenumber').browse(cr, uid, ph_selected, context=None)
	    return {'value': {'partner_id': None},'domain': {'partner_id': [('id','=',record.partner_id.id)]}}  
        return {'value': {'partner_id': None},'domain': {'partner_id':''}} 
 
crm_phonecall();