1.3.2.1. Конфигурация
Основной файл конфигурации представляет из себя
XML-документ и находится в корневой директории проекта:
..bps/projects/<ИМЯ_ПРОЕКТА>/config.xml
Приводим для примера сокращенный файл одного их проектов
<xml>
<title>Заявка</title> <!-- Название проекта -->
<group_title>Страховые события</group_title> <!-- В какую группу входит проект (Опционально) -->
<rows_on_page>25</rows_on_page> <!-- Сколько документов выводить на страницу журнала -->
<!-- Роли пользователей, которые имеют доступ к проекту
и кто может создавать карточки в этих проектах -->
<roles>admin, clerk, auditor, expert, customer</roles>
<roles_creator>admin, clerk</roles_creator>
<!--
Пути к отдельным шаблонам карточки и списка документов для кастомизации
внешнего вида. <не обязателен>
-->
<templates>
<document_list>request/document_list.html</document_list>
<document_form>request/document_form.html</document_form>
<gallery_page>sphere_conf/gallery.html</gallery_page>
</templates>
<!-- Список полей журнала -->
<document_fields_table>
d_get_request,
d_create,
status_display,
status_services_display,
customer,
inscompany,
responsible,
n_loss,
d_service_send,
services_lnk
</document_fields_table>
<!--
Структура файлового архива.
Типы файлы находятся в группах.
mixin_path: Класс примеси к модели файла, добавляющий объекту файла дополнительные параметры,
или перекрывающий стандартные параметры
-->
<files mixin_path="sphere_conf.bps.projects.service.model_mixins.FileMixin">
<main title="Документы">
<full_set_docs title="Полный комплект документов"/>
<state_mop title="Заявление о СС"/>
<notice_accident title="Извещение о ДТП"/>
</main>
<project title="Проекты">
<act_executed_works_project title="Акт выполненных работ (проект)"/>
<register_services_draft title="Реестр оказанных услуг (проект)"/>
</project>
<harmonization title="Согласование">
<harmonization_avr title="Согласование АВР"/>
<disagreements_on_avr title="Разногласия по АВР"/>
</harmonization>
<avr title="АВР">
<certificate_completion title="Акт выполненных работ"/>
<register_services_provided title="Реестр оказанных услуг"/>
</avr>
</files>
<!--
Параметры документа (поля) в группах.
Более подробное описание полей смотри чуть ниже.
-->
<document_fields>
<request title="Заявка">
<customer title="Заказчик" data_type="choices" source="Customer"/>
<customer_request_email_sender title="Автор заявки у Заказчика" data_type="string"/>
<customer_request_sender_email title="Email Автора заявки" data_type="string" tags="system"/>
<customer_request_email title="Email заявки" data_type="string"/> <!-- Откуда пришла в реале -->
<ecuu title="Наименование ЕЦУУ" data_type="property"/>
<contacts data_type="table" title="Контакты" model_name="ContractorContact" mixin_path="sphere_conf.bps.projects.contractor.subdocument_mixins.ContactMixin">
<contact_type data_type="choices" source="ContractorContactType" title="Тип контакта"/>
<phone data_type="string" title="Телефон" tags="index"/>
<email data_type="email" title="Адрес e-mail" tags="index"/>
<main data_type="bool" title="Осн."/>
</contacts>
</request>
<auto title="Транспортное средство">
<car_model data_type="choices" title="Марка/Модель" source="CarModelAutoComplete"/>
<auto_type title="Тип ТС" data_type="choices" source="AutoType"/>
<auto_create_year title="Год выпуска" data_type="choices" source="Dummy"/>
<auto_vin title="VIN" data_type="string"/>
<plate_number data_type="string" title="Гос. номер" />
<auto_d_use title="Дата начала эксплуатации" data_type="date"/>
</auto>
<damagers title="Виновник">
<damagers data_type="table" title="Виновник" model_name="RequestDamager">
<n_police_osago title="Полис ОСАГО" data_type="string"/>
<car_model data_type="choices" title="Марка / Модель" source="CarModelAutoComplete"/>
</damagers>
</damagers>
<auto_owner title="Сведения о собственнике ТС">
<auto_owner_type title="Тип контрагента" data_type="choices" source="ContractorType" />
<auto_owner_inscompany title="Страховая компания" data_type="choices" source="Inscompany"/>
<auto_owner_police_start title="Дата начала действия полиса" data_type="date"/>
<auto_owner_contacts data_type="table" title="Контакты" model_name="RequestAutoOwnerContact">
<contact_type data_type="choices" source="ContractorContactType" title="Тип контакта"/>
<phone data_type="string" title="Телефон" tags="index"/>
<email data_type="email" title="Адрес e-mail" tags="index"/>
<main data_type="bool" title="Осн."/>
</auto_owner_contacts>
<passport_exists title="Паспорт предоставлен?" data_type="nullboolean"/>
</auto_owner>
<recension title="Рецензия">
<s_all_whithout_wear title="Итого (без учета износа) исходные" data_type="property"/>
<s_all_whith_wear title="Итого (с учетом износа) исходные" data_type="property"/>
<s_spare_parts_whithout_wear title="Детали исх (без учета износа) исходные" data_type="decimal"/>
<wear_ratio title="Износ %% исходный" data_type="float"/>
</recension>
<inspection_visit title="Осмотр / Прием документов">
<income_channel title="Канал поступления" data_type="choices" source="IncomeChannel"/>
<income_place_set title="Место визита определено СК?" data_type="nullboolean"/>
<income_type title="Тип визита" data_type="choices" source="IncomeType"/>
<income_place_not_kladr title="Адрес не найден в КЛАДР" data_type="bool"/>
<income_place title="Адрес визита СК" data_type="textarea"/>
<income_place_kladr title="Адрес визита СК" data_type="choices" source="Kladr" modal_widget="sphere_conf.kladr_modal_widget"/>
</inspection_visit>
<process title="Сдача результатов работ">
<user_transfer_to_inscompany title="Передал результаты работ в СК" data_type="choices" source="User"/>
<d_service_send title="Дата направления результатов Заказчику (факт)" data_type="date"/>
</process>
<it_service title="ИТ Услуги">
<price_sphere title="Стоимость Сфера" data_type="property"/>
<d_accrua_sphere title="Дата начисления Сфера" data_type="property"/>
<n_avr_sphere title="Номер АВР (Сфера)" data_type="property"/>
</it_service>
<system title="Системные">
<d_create title="Дата создания заявки" data_type="property"/>
<status_display title="Статус заявки" data_type="property" tags="system"/>
<status_services_display title="Статус услуг" data_type="property" tags="system, content_popup"/>
<responsible data_type="property" title="Ответственный"/>
<avr_sphere title="АВР Cфера" data_type="choices" source="Avr" tags="system"/>
</system>
</document_fields>
<!-- Описание формы поиска. Поля описываются таким же образом, что и поля системы -->
<filter_fields>
<request title="Основное">
<status title="Статус" data_type="choices" source="Dummy"/>
<id title="Код заявки" data_type="integer"/>
<author title="Автор" data_type="choices" source="User"/>
<executor title="Исполнитель" data_type="choices" source="User"/>
<customer title="Заказчик" data_type="choices" source="Customer"/>
<inscompany title="Страховая компания" data_type="choices" source="Inscompany"/>
<n_loss title="Номер убытка" data_type="string"/>
<service_type title="Услуга" data_type="choices" source="ServiceType"/>
<auto_owner_osago title="Полис ОСАГО" data_type="string"/>
<plate_number data_type="string" title="Гос. номер" />
<customer_request_email_sender title="Автор заявки у Заказчика" data_type="string"/>
</request>
<dates title="Контрольные даты">
<d_create title="Дата создания заявки" data_type="date_range"/>
<d_service_plan title="Дата оказания услуги (план)" data_type="date_range"/>
<d_pay_customer_fact title="Дата оплаты (факт)" data_type="date_range"/>
<d_service_fact title="Дата оказания услуги (факт)" data_type="date_range"/>
<d_service_send title="Дата направления результатов Заказчику (факт)" data_type="date_range"/>
<d_pay_executor_fact title="Дата оплаты Исполнителю (факт)" data_type="date_range"/>
</dates>
</filter_fields>
<!-- Преднастроенные условия отбора карточкек -->
<fiter_presets>
<draft>Регистрация</draft>
<auto_owner_accept>Согласования заявки с владельцем ТС</auto_owner_accept>
<process>Ожидает оказания услуг(и)</process>
<wait_add_documents>Ожидание от Заказчика документов / реквизитов</wait_add_documents>
<expired>Просрочена</expired>
<transfer_to_inscompany>Передача результатов работ в СК</transfer_to_inscompany>
<fix_warnings>Устранение замечаний от Заказчика</fix_warnings>
<wait_pay_customer>Ожидает оплаты от Заказчика</wait_pay_customer>
<wait_pay_executor>Ожидает оплаты Исполнителю</wait_pay_executor>
<wait_pay_rpo>Ожидает оплаты РПО</wait_pay_rpo>
<wait_pay_sfera>Ожидает оплаты Сфера</wait_pay_sfera>
<archive_reject>Архив (отказ)</archive_reject>
<archive_success>Архив (выполнена)</archive_success>
</fiter_presets>
<!-- Этапы процесса, на которых может находится карточка -->
<states>
<draft title="Регистрация заявки"/>
<process title="Ожидание оказания услуг(и)"/>
<auto_owner_accept title="Согласования заявки с владельцем ТС"/>
<transfer_to_inscompany title="Передача результатов работ в СК"/>
<request_documents title="Ожидание документов / реквизитов"/>
<settlements title="Взаиморасчеты по заявке"/>
<fix_warnings title="Устранение замечаний по Услугам"/>
<archive title="Архив"/>
</states>
</xml>
1.3.2.1.1. Поле документа
Описывает аттрибуты карточки документа и аттрибуты фильтра поиска
- Название XML-тэга
Является системным значением параметра. Значение в таблице базы данных хранится в одноименной колонке
- data_type: Тип данных
string: Строка текста
textarea: Несколько строк текста
email: Email-Адрес
integer: Целое число
float: Дробное число
decimal: Дробное число повышенной точности
date: Дата без времени
datetime: Дата с временем и учетом часового пояса
bool: Логический тип да/нет
nullboolean: Логический тип тернарной логики да/нет/не_известно
choices: Выбор из фиксированного списка одного значения
multi_choices: Выбор из фиксированного списка нескольких значений
integer_range: Диапазон чисел «от и до» для поиска
float_range: Диапазон дробных чисел «от и до» для поиска
date_range: Диапазон дат «от и до» для поиска
- title
Название поля
- tags: Различные признаки
content_popup: В таблице длинный текст выводить в виде всплывающего окна
system: Системное поле. В форму не выводится
unique: В БД на колонку добавляет уникальный индекс
hidden: В форму выводится в скрытом виде и заполняется только через js
index: К полю создается индекс базы данных. Используется для поиска
custom_choices: Используются кастомные опции, запрос на получение опций по умолчанию не делается. Опции получаются через метод «filter_choices_НАЗВАНИЕ_ПОЛЯ»
- source
Название источника данных для полей choices, multi_choices
- modal_widget
Специфичный виджет для выбора значения в отдельном окне, если происходит выбор из большого кол-ва значений с встроенным поиском, возможно создание значений перед выбором «на лету», использование КЛАДР и системы поиска по нему и так далее
- layout
Тип отображения поля. formset для табличного поля, column_wide для других полей
1.3.2.1.1.1. Поле документа с выбором из списка
Для полей с типами «choices», «multi_choices» возможные значения получаются
из источников данных, информация о которых размещена в файле
sphere_conf/bps/data_sources.xml
.
<xml>
<!--
data_type = "reference"
Значения берутся из модели данных (в данном случае, "User"),
которые хранятся в таблице (в данном случае "auth_user").
Источники типа reference кэшируются на 5 минут с размыванием на +- 20 секунд
для сглаживания пика инвалидации и обновления, но это время можно задать через параметр cache_time
-->
<User data_type="reference" table_name='auth_user' cache_time="100"/>
<!--
data_type = "autocomplete"
Похожий на reference, но опции из такого источника в формах
выбираются по мере набора текста с поиском подходящих вариантов.
Используется, если данных в таблице много и форма, сформированная
со всеми опциями занимает много ресурсов (10 млн опций
для выбора клиента, например)
-->
<Bank data_type="autocomplete" table_name="base_bank" model_name="Bank" function_path="sphere_conf.bps.autocomplete.auto_bank_ds"/>
<!--
data_type = "xml"
Значения берутся из файлов XML, размещенных в директории sphere_conf/bps/choices
Их название соответствует xml-тэгу с расширением "xml", то есть
в данном случае, sphere_conf/bps/choices/AutoType.xml
-->
<AutoType data_type="xml"/>
</xml>
Пример источника данных XML
<xml>
<residential_adr>Адрес проживания</residential_adr>
<registration_adr>Адрес регистрации</registration_adr>
<post_adr>Почтовый адрес</post_adr>
<actual_adr>Фактический адрес</actual_adr>
<legal_adr>Юридический адрес</legal_adr>
</xml>
1.3.2.1.1.2. Вычисляемый параметр
Этот тип полей не вводится пользователями вручную и в форме всегда выводится в режиме «просмотр». Логика расчета параметров задается в коде, в свойствах примеси к модели документа. В ядре описаны в виде свойств параметры:
d_create: Дата создания документа
active: Статус активности документа (Удален или Активный). True/False
state: Этап, на котором находится документ
state_display: Человеко-читаемое название текущего этапа
d_change: Дата последнего изменения документа
author_id: Id автора документа
author: Автор документ
responsible_id: ID Ответственного за документ в данный момент
responsible: Ответственный за документ в данный момент
events: Список этапов, на которых может находиться докумен
last_event: Последнее событие по документу (определяет текущее состояние)
get_last_event: Последнее событие по переходу с этапа / на этап
get_first_event: Первое событие по переходу с этапа / на этап
user: Текущий оператор
roles: Список ролей у текущего оператора
url: Ссылка на карточку этого документа
is_draft: Документ пока еще не сохранен в БД и является черновиком
is_responsible: Проверяет, что текущий оператор отвечает за текущий документ
1.3.2.1.1.3. Табличное поле
Поля с типами данных «table» представляют собой строки из полей стандартного типа. В табличном поле допускается использование табличных полей и так далее на любую глубину вложенности, но в этом случае требуется задать способ отрисовки таких форм вручную. Стандартными средствами (layout=formset) поддерживается 2 уровня вложенности таблицы. Смотрите пример поля «contacts» выше. Можно указать примесь к модели такой таблицы, описывающую дополнительные параметры и строк такой таблицы и вычисляемые параметры
<contacts data_type="table" title="Контакты" model_name="ContractorContact" mixin_path="sphere_conf.bps.projects.contractor.subdocument_mixins.ContactMixin">
<contact_type data_type="choices" source="ContractorContactType" title="Тип контакта"/>
<phone data_type="string" title="Телефон" tags="index"/>
<email data_type="email" title="Адрес e-mail" tags="index"/>
<main data_type="bool" title="Осн."/>
</contacts>