+0.20
Рейтинг

Разовые и многоразовые заказы для разработчиков Odoo

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

От нас: адекватная и своевременная оплата за труд, помощь, обучение. Не страшно, если что-то вдруг не получается. Мы поможем)
От тебя: адекватное и честное понимание своих возможностей, самодисциплина и ответственность, желание учиться новому и развиваться.

От нас и от тебя: взаимное исполнение взятых на себя обязательств.

Территориальных, возрастных и иных ограничений нет. Знание иностранных языков не обязательно, но будет рассматриваться как преимущество.

Связаться с нами можно через личные сообщения на этом сайте, либо через telegram @cetmix

Управления правилами автоматического пополнения запасов

По умолчанию в Odoo есть несколько вариантов автоматического поддержания запасов:
1. При помощи маршрутов (Routes). Хороший вариант, когда правила пополнения просты, вроде «Делай всё на заказ / Бери со склада и дозаказывай чего нет» (MTO, MTO/MTS).
2. При помощи правил пополнения минимальных запасов (Reordering Rules или Stock Orderpoint). Это особенно удобно в том случае, если нужно поддерживать определённые не снижаемые остатки товара. Например, когда есть большой ассортимент товара, и некоторый товар особенно ходовой, а другой выгоднее заказывать партиями заранее.

В то же время при большом ассортименте товаров создание таких правил может быть довольно утомительной задачей, поскольку правило нужно создать вручную для каждого шаблона товара. Если же правила отличаются для вариантов товара (например есть ходовая расцветка или размер, которых должно быть больше), то процесс управления правилами может занять на порядок больше времени.
А когда нужно поменять правила, например на сезонный товар (летом запас ушанок может быть и по-меньше :) ), то задача изменить каждое правило вручную сулит настоящую головную боль.

Мы с этим столкнулись лично и сразу же стали искать готовые решения. Они есть, в частности модуль от OCA: apps.odoo.com/apps/modules/11.0/stock_orderpoint_generator/
Однако, логика данных модулей видимо создавалась программистами, а не пользователями, которые непосредственно работают со складскими запасами)
Потому было принято решение изобретать велосипед писать своё решение. Собственно вот оно: apps.odoo.com/apps/modules/11.0/cx_product_auto_reorder/

Основные отличия:
1. Весь функционал перенесён непосредственно в шаблоны (принцип «одного окна»).
2. Правила генерируются автоматически при создание шаблона либо продукта.
3. Возможность настраивать правила в зависимости от категории товара или его атрибутов (цвет, размер итп) (опцию с атрибутами мы вынесли в отдельное платное расширение для модуля).

Борьба с "мусорными" вложениями в Odoo

По умолчанию Odoo добавляет все файлы, которые приходят вместе с сообщением, в качестве вложения к записи.

В результате часто случается ситуация, когда в меню «Вложения» скапливается куча «мусора» (логотипы, иконки, баннеры итп), среди которой есть два-три действительно нужных файла.
Лично для меня это особенно актуально, т.к. многие корпоративные клиенты любят добавить свой логотип с набор иконок соцсетей до кучи, и потом приходится выискивать чертежи или сканы писем среди десятков «logo00102.jpg», «image1212.png» и иже с ними.

В конечном итоге данная ситуация изрядно достала и привела к написанию вот этого модуля:
apps.odoo.com/apps/modules/11.0/cx_attachment_blacklist/

Функционала бесплатной версии имно более чем достаточно, в качестве «пряника» для платной версии сделана фишка, когда вложения показываются в меню «Вложения» только один раз (привет любителям слать одни и те же файлы по 10 раз)))

Просмотр отчётов и вложений в формате pdf в браузере

По умолчанию Оду при печати отчёта или открытие вложения в формате pdf сохраняет его на диск.
Вместе с тем, современные браузеры позволяют просматривать pdf прямо в окне браузера.

Для того, чтобы смотреть вложения прямо в браузере, используйте специальные бесплатные модули Оду, например:
apps.odoo.com/apps/modules/10.0/web_pdf_preview/ (версии 8 и 10)
apps.odoo.com/apps/modules/11.0/prt_report_attachment_preview/ (версия 11)

UPD: портировали на 12 версию apps.odoo.com/apps/modules/11.0/prt_report_attachment_preview/

Наследование 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:

Установка домена для поля 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();