Разработка модулей¶
Введение¶
Здесь вы найдёте информацию об организации сообщества в проекте OpenERP. Она включает описание различных используемых инструментов, роли различных участников, и управлении различными процессами улучшения.
Вся организация управляется через проекты на launchpad: http://launchpad.net Наши проекты на launchpad в настоящий момент организованы примерно так:
| Имя проекта | Ссылка | Описание |
|---|---|---|
| openobject | https://launchpad.net/openobject | основной супер-проект (группа) где все ошибки, функции и ЧаВо управляются |
| openobject-bi | https://launchpad.net/openobject-bin | проект business intelligence |
| openobject-server | https://launchpad.net/openobject-server | сервер openobject |
| openobject-client | https://launchpad.net/openobject-client | приложение-клиент openobject (gtk) |
| openobject-client-web | https://launchpad.net/openobject-client-web | веб-клиент openobject web (раньше назывался eTiny) |
| openobject-addons | https://launchpad.net/openobject-addons | проект для всех модулей, связанных с openobject |
| openerp | https://launchpad.net/openerp | упаковка всего связанного с openobject (подборка модулей, составляющих приложение) |
Получение исходного кода¶
Пожалуйста, обратитесь к Как получить последний исходный код главной ветви в разделе Bazaar.
Если вы не знакомы с системой контроля версий Bazaar, прочтите документацию по Bazaar
Рекомендации по программированию¶
Рекомендации по разработке¶
Модули¶
Файловая структура модулей¶
Структура модуля выглядит примерно так:
/module_name/
/module_name/__init__.py
/module_name/__terp__.py
/module_name/module.py
/module_name/module_view.xml
/module_name/module_wizard.xml
/module_name/module_report.xml
/module_name/module_data.xml
/module_name/module_demo.xml
/module_name/module_security.xml
/module_name/wizard/
/module_name/wizard/__init__.py
/module_name/wizard/wizard_name.py
/module_name/wizard/wizard_name_view.xml
/module_name/wizard/wizard_name_workflow.xml
/module_name/report/
/module_name/report/__init__.py
/module_name/report/report_name.sxw
/module_name/report/report_name.rml
/module_name/report/report_name.py
Именование объектов и полей¶
Безопасность¶
Каждый определённый в вашем модулей объект должен иметь как минимум одно объявленное правило безопасности, чтобы он был доступен.
Разработка¶
Рекомендации по программированию¶
Следуйте правилу Python PEP 8: http://www.python.org/dev/peps/pep-0008/
Отчёты¶
Общий стиль¶
- Используйте везде шрифт Helvetica
- Отступы (в миллиметрах):
- сверху: 14
- снизу: 16
- слева: от 12 до 13, чтобы можно было сделать перфорацию не повреждая текст
- справа: от 12 до 13
Note
линия-разделитель между заголовком и телом может слегка перекрывать левую и правую границы: до 9 миллиметров влево и до 12 миллиметров вправо.
- для заголовков используйте шрифт Helvetica-Bold размером 14.5
- в каждый отчёт включайте контекст: например, для отчёта account_balance контекстом будут учётный год и периоды
- для обозначения ячеек: используйте Заглавные Буквы если название содержит больше одного слова (пр.: Date Ordered)
- содержимое и название ячейки должны иметь одинаковый отступ
- для отчётов можно определить два типа массивов:
- массив с общей информацией, например основания, дата..., используйте:
- шрифт Helvetica-Bold, размер 8 для названия ячейки
- шрифт Helvetica, размер 8 для содержимого
- массив с подробной информацией, используйте:
- шрифт Helvetica-Bold, размер 9 для названия ячейки
- шрифт Helvetica, размер 8 для содержимого
- Верхние и нижние колонтитулы для внутренних отчётов:
- Внутренний отчёт = любой бухгалтерский и любой другой отчёт, который предназначен для внутреннего использования (не отправляется заказчику).
- Размер заголовка должен быть меньше
- Измените корпоративные верхний и нижний колонтитул для внутренних отчётов. Используйте упрощённые колонтитулы для внутренних отчётов: Название организации, заголовок отчёта, дата печати и номер страницы.
- Верхний колонтитул:
- название организации: в середине каждой страницы
- название отчёта: печатается в центре, после верхнего колонтитула
- дата печати: не в середине отчёта, но слева в верхнем колонтитуле
- номер страницы: справа, на каждой странице. Должен состоять из номера текущей страницы и общего числа страниц. Напр. страница 3/15
- Нижний колонтитул:
- чтобы избежать напрасной траты бумаги, мы отказались от нижнего колонтитула
- разделитель строк в таблицах:
- лучше, когда каждая строка таблицы имеет светло-серую строку в качестве разделителя
- используйте серый разделитель столбцов только для массива, содержащего общую информацию
- разбивка таблиц
- следом за заголовком таблицы должны находиться минимум две строки с данными (избегайте заголовков таблиц внизу страницы)
- когда разбивается большая таблица, заголовок должен повторяться на каждой странице
- как различить родительские и дочерние объекты?
- При использовании более одного уровня, используйте эти стили:
- для уровней 1 и 2: кегль 8.0 шрифт “Helvetica-Bold”
- начиная с третьего уровня, используйте шрифт “Helvetica” с кеглем 8.0 и увеличивайте отступ на 13 точек с каждым уровнем
- подчёркивайте суммы, когда элемент является родительским
Модули¶
Соглашение об именовании¶
Название модуля пишется в нижнем регистре, каждое слово отделяется знаком подчёркивания. Начинается всегда с наиболее релевантного слова, предпочтительно с имён других модулей, от которых он зависит.
Пример:
- account_invoice_layout
Описание модулей¶
Зависимости¶
Каждый модуль должен содержать:
- Список зависимостей от других модулей: [‘account’,’sale’]
- Указывайте только модуль верхнего уровня. Нет необходимости указывать так: [‘account’,’base’,’product’,’sale’]
- Строка требования версии, где base — версия OpenERP в виде выражения на Python
- account>=1.0 && base=4.4
Содержимое модуля¶
Каждый модуль должен содержать демонстрационные данные для каждого объекта, объявленного в модуле.
Если вы реализовывали рабочие процессы в модуле, создайте демонстрационные данные, которые отражают большую часть созданного рабочего процесса. Вы можете использовать модуль recorder и с его помощью создать эти демонстрационные данные.
Руководство по пользовательским интерфейсам¶
Меню¶
Организация меню¶
Вот качественный пример:
- Счета (список)
- Счета заказчикам (список)
- Черновые счета заказчикам (список)
- Открытые счета заказчикам (список)
- Новый счёт заказчику (форма)
- Счета от поставщиков
- ...
Добавляйте пункт Новый ... только если он понадобится пользователю. Иначе открывайте все меню как списки. Пункт меню Новый ... открывает форму вместо списка. Например, не создавайте пункт Новый ... в меню в разделе конфигурации.
Если вы используете папки с действием по щелчку мыши, их потомки должны быть объектами того же типа. Мы полагаем что наследуемые являются теми же объектами.
Списки должны быть во множественном числе:
- Пункт Счет заказчику, должен называться Счета Заказчикам
Если вы хотите создать меню, фильтрующее по пользователю (Все и Мои), располагайте их на одном уровне:
- Задания
- Мои задания
А не:
- Задания
- Мои задания
По возможности избегайте использования сокращений в меню. Пример:
- Строки П.М. -> Строки Перечня материалов
Меню Отчётов¶
Меню Инфо-панели должно находиться под разделом отчетов каждого основного меню.
- Правильно: Управление продажами / Отчёты / Инфо-панели / Менеджер продаж
- Неправильно: Инфо-панель / Продажи / Менеджер продаж
Если вы хотите использовать пункты Этот месяц/Все месяцы, расположите их на самом нижнем уровне:
- Отчёты/Табель пользователя/Все месяцы
- Отчёты/Табель пользователя/Этот месяц
Значки в меню¶
- Значок меню должен быть установлен в соответствии с завершающим действием мастера, например
- мастер, печатающий отчёт, должен использовать значок отчёта, а не мастера
- мастер, открывающий список в результате работы, должен использовать значок списка, а не мастера
Порядок пунктов меню¶
Меню настройки должен быть в верхней части списка. Используйте параметр sequence=0
Меню Отчёты должно быть в самом низу списка. Используйте параметр sequence=50.
Типичные ошибки¶
- Правка категорий -> Категории
- Список категорий -> Категории
Виды¶
Объекты с состоянием¶
- Поле состояния, если присутствует, должно располагаться в левом нижнем углу вида
- Кнопки изменения состояния — справа от этого поля состояния
Критерии поиска¶
Критерии поиска: поиск доступен по всем столбцам при просмотре в виде списка
Названия действий¶
Мастера¶
Терминология¶
Язык по-умолчанию¶
Основной язык для каждой разработки — Американский английский
Для меню и полей, первые буквы должны быть в верхнем регистре, исключая союзы:
- Chart of Accounts
Соглашение об именовании полей¶
- Избегайте общих слов в названиях полей и используйте, по возможности, точные термины. Например:
- Название -> Название заказа на продажу
- Родитель -> Родительский перечень материалов
- Курс -> Курс обмена валют
- Количество -> Итого продано
Вот несколько правил, которые надо соблюдать:
поля many2one (много-к-одному) должны подпадать под регулярное выражение: ‘.*_id’
поля one2many (один-ко-многим) должны подпадать под регулярное выражение: ‘.*_ids’
таблица отношений one2many (один-ко-многим) должна подпадать под регулярное выражение: ‘.*_rel’
поля many2many (многие-ко-многим) должны подпадать под регулярное выражение: ‘.*_ids’
для разделения слов используйте знак подчёркивания
избегайте использование верхнего регистра
если поле должно состоять из нескольких слов — начните с самых важных слов
- Хороший пример: sale_price, partner_address_id
- Плохой пример: is_sellable
Соглашение об именовании объектов¶
- Названия объектов должны начинаться с названия модуля, в котором они определены.
- Если название объекта состоит из нескольких слов — используйте точки для разделения слов.
Некоторые условия¶
- Все деревья ресурсов называются “Структура ХХХ”, если только иное не оговорено отдельно
- Правильно: Структура расположений, План счетов, Структура категорий
- Неправильно: Дерево категорий, Дерево перечней материалов
Модуль Recorder¶
Рецензия качества¶
- Вы можете проверить качество своего модуля, используя модуль “base_module_quality”, доступный среди стандартных дополнений.
