Public release from ruodoo-project: 19.0 - 2026-07-26 21:17:35 UTC

This commit is contained in:
CI Publish Bot
2026-07-26 21:17:45 +00:00
commit 4f7b594ec8
1335 changed files with 191620 additions and 0 deletions

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="ir_cron_generate_simulation_data" model="ir.cron">
<field name="name">Demo: Генерация данных для Симуляции (Mesa)</field>
<field name="model_id" ref="model_directive_directive"/>
<field name="state">code</field>
<field name="code">model._cron_generate_simulation_data()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="active" eval="False"/>
</record>
</data>
</odoo>

View File

@ -0,0 +1,7 @@
<odoo>
<record id="action_executor_dashboard_client" model="ir.actions.client">
<field name="name">Рабочий стол Исполнителя</field>
<field name="tag">directive_layer.executor_dashboard_action</field>
<field name="target">fullscreen</field>
</record>
</odoo>

View File

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_directive_policy_form" model="ir.ui.view">
<field name="name">directive.policy.form</field>
<field name="model">directive.policy</field>
<field name="arch" type="xml">
<form string="Политика генерации директив">
<sheet>
<widget name="web_ribbon" title="В архиве" bg_color="text-bg-danger" invisible="active"/>
<div class="oe_title">
<label for="name" string="Название политики"/>
<h1>
<field name="name" placeholder="Напр: Автозапуск при подтверждении"/>
</h1>
</div>
<group>
<group string="Основные настройки">
<field name="active" invisible="1"/>
<field name="origin_model" placeholder="Напр: project.task"/>
<field name="event"/>
<field name="mode"/>
</group>
<group string="Настройки триггера" invisible="event not in ['on_write', 'on_callback']">
<label for="trigger_field" string="Поле триггера" invisible="event != 'on_write'"/>
<label for="trigger_field" string="Название метода" invisible="event != 'on_callback'"/>
<field name="trigger_field"
nolabel="1"
required="event in ['on_write', 'on_callback']"
placeholder="Напр: stage_id или action_confirm"/>
<field name="trigger_value_int"
invisible="event != 'on_write'"
placeholder="Ожидаемое ID значения"/>
</group>
</group>
<group string="Шаблоны">
<field name="use_record_template_group"/>
<field name="template_group_id"
invisible="use_record_template_group"
required="not use_record_template_group"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_directive_policy_tree" model="ir.ui.view">
<field name="name">directive.policy.list</field>
<field name="model">directive.policy</field>
<field name="arch" type="xml">
<list string="Политики директив">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="origin_model"/>
<field name="event"/>
<field name="trigger_field" string="Триггер (Поле/Метод)"/>
<field name="mode" optional="show"/>
</list>
</field>
</record>
<record id="view_directive_template_group_form" model="ir.ui.view">
<field name="name">directive.template.group.form</field>
<field name="model">directive.template.group</field>
<field name="arch" type="xml">
<form>
<sheet>
<div class="oe_title">
<label for="name" string="Название группы шаблонов"/>
<h1><field name="name" placeholder="Напр: Стандартная разработка модуля"/></h1>
</div>
<group>
<group>
<field name="code"/>
<field name="applicable_model"/>
</group>
<group>
<field name="active" widget="boolean_toggle"/>
</group>
</group>
<notebook>
<page string="Состав группы (директивы)" name="lines">
<field name="template_line_ids">
<list editable="bottom">
<field name="sequence" widget="handle"/>
<field name="template_id" options="{'no_create': True, 'no_open': True}"/>
</list>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_directive_policy_search" model="ir.ui.view">
<field name="name">directive.policy.search</field>
<field name="model">directive.policy</field>
<field name="arch" type="xml">
<search string="Поиск политик">
<field name="name"/>
<field name="origin_model"/>
<filter string="Активные" name="active" domain="[('active', '=', True)]"/>
<filter string="Архивные" name="inactive" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="action_directive_policy" model="ir.actions.act_window">
<field name="name">Политики директив</field>
<field name="res_model">directive.policy</field>
<field name="view_mode">list,form</field>
<field name="search_view_id" ref="view_directive_policy_search"/>
</record>
<menuitem id="menu_directive_policy_action"
name="Политики"
parent="directive_layer.menu_directive_root"
action="action_directive_policy"
sequence="20"/>
</data>
</odoo>

View File

@ -0,0 +1,247 @@
<odoo>
<record id="view_directive_kanban" model="ir.ui.view">
<field name="name">directive.kanban</field>
<field name="model">directive.directive</field>
<field name="arch" type="xml">
<kanban default_group_by="stage_id" class="o_kanban_small_column o_kanban_large_cards">
<field name="name"/>
<field name="deadline_display"/>
<field name="time_left_display"/>
<field name="planned_hours"/>
<field name="priority"/>
<field name="is_overdue"/>
<templates>
<t t-name="card">
<div class="directive_card w-100"
t-att-style="record.is_overdue.raw_value ? 'background-color: #f4e1e1;' : 'background-color: #d9efff;'">
<div class="directive_row title_row d-flex justify-content-between align-items-center">
<div class="directive_title fw-bold">
<field name="name"/>
</div>
<div class="directive_priority">
<field name="priority" widget="priority"/>
</div>
</div>
<div class="directive_row deadline_row mt-2">
<div class="directive_deadline_label text-muted">
<i class="fa fa-calendar-o me-2"/> Дедлайн:
</div>
<div class="directive_deadline_value">
<t t-esc="record.deadline_display.value"/>
</div>
</div>
<div class="directive_meta mt-3 border-top pt-2">
<div class="directive_row d-flex justify-content-between">
<div class="meta_label text-muted">Осталось:</div>
<div class="meta_value fw-bold">
<t t-esc="record.time_left_display.value"/>
</div>
</div>
<div class="directive_row d-flex justify-content-between">
<div class="meta_label text-muted">Трудоёмкость:</div>
<div class="meta_value">
<field name="planned_hours"/> ч
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_directive_list" model="ir.ui.view">
<field name="name">directive.list</field>
<field name="model">directive.directive</field>
<field name="arch" type="xml">
<list>
<field name="name"/>
<field name="deadline_at"/>
<field name="planned_hours"/>
<field name="load_percent"/>
<field name="priority"/>
<field name="work_type_id"/>
<field name="executor_user_id"/>
<field name="stage_id" groups="directive_layer.role_directive_dispatcher_res_groups"/>
<field name="executor_stage_id" groups="directive_layer.role_directive_executor_res_groups,directive_layer.role_directive_dispatcher_res_groups"/>
<field name="requester_stage_id" groups="directive_layer.role_directive_requester_res_groups,directive_layer.role_directive_dispatcher_res_groups"/>
</list>
</field>
</record>
<record id="view_directive_form" model="ir.ui.view">
<field name="name">directive.form</field>
<field name="model">directive.directive</field>
<field name="arch" type="xml">
<form>
<header>
<button
string="Отменить"
type="object"
name="action_cancel"
class="btn-secondary"
/>
<button
string="Удалить"
type="object"
name="action_open_delete_wizard"
class="btn-danger"
/>
</header>
<sheet>
<group>
<field name="name"/>
<field name="active"/>
</group>
<group>
<field name="deadline_at"/>
<field name="planned_hours"/>
<field name="load_percent"/>
<field name="priority"/>
<field name="work_type_id"/>
</group>
<group>
<field name="executor_type"/>
<field name="success_probability"/>
<field name="resource_cost"/>
<field name="retry_policy"/>
</group>
<group>
<field name="executor_user_id"/>
<field name="executor_role_id"/>
<field name="requester_role_id"/>
</group>
<group>
<field name="planned_start_at"/>
<field name="planned_end_at"/>
</group>
<group string="Статусы">
<field name="stage_id"/>
<field name="executor_stage_id"/>
<field name="requester_stage_id"/>
</group>
<group string="Светофоры">
<field name="executor_traffic_light"/>
<field name="resource_traffic_light"/>
</group>
<group string="Источник">
<field name="origin_id"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_directive_my_work" model="ir.actions.act_window">
<field name="name">Моя работа</field>
<field name="res_model">directive.directive</field>
<field name="view_mode">kanban,list,form</field>
<field name="domain">[]</field>
</record>
<record id="action_directive_all" model="ir.actions.act_window">
<field name="name">Все директивы</field>
<field name="res_model">directive.directive</field>
<field name="view_mode">kanban,list,form</field>
<field name="domain">[]</field>
</record>
<menuitem id="menu_directive_root"
name="Директивы"
sequence="10"/>
<menuitem id="menu_directive_all"
name="Все директивы"
parent="menu_directive_root"
action="action_directive_all"
sequence="20"/>
<record id="action_directive_origin" model="ir.actions.act_window">
<field name="name">Источники директив</field>
<field name="res_model">directive.origin</field>
<field name="view_mode">list,form</field>
</record>
<record id="action_directive_stage" model="ir.actions.act_window">
<field name="name">Статусы директив</field>
<field name="res_model">directive.stage</field>
<field name="view_mode">list,form</field>
</record>
<record id="action_directive_work_type" model="ir.actions.act_window">
<field name="name">Виды работ</field>
<field name="res_model">directive.work.type</field>
<field name="view_mode">list,form</field>
</record>
<record id="action_directive_template" model="ir.actions.act_window">
<field name="name">Шаблоны директив</field>
<field name="res_model">directive.template</field>
<field name="view_mode">list,form</field>
</record>
<record id="action_directive_template_group" model="ir.actions.act_window">
<field name="name">Группы шаблонов директив</field>
<field name="res_model">directive.template.group</field>
<field name="view_mode">list,form</field>
</record>
<menuitem
id="menu_directive_settings_root"
name="Настройки"
parent="directive_layer.menu_directive_root"
sequence="90"
/>
<menuitem
id="menu_directive_origin"
name="Источники директив"
parent="directive_layer.menu_directive_settings_root"
action="directive_layer.action_directive_origin"
sequence="10"
/>
<menuitem
id="menu_directive_stage"
name="Статусы директив"
parent="directive_layer.menu_directive_settings_root"
action="directive_layer.action_directive_stage"
sequence="20"
/>
<menuitem
id="menu_directive_work_type"
name="Виды работ"
parent="directive_layer.menu_directive_settings_root"
action="directive_layer.action_directive_work_type"
sequence="30"
/>
<menuitem
id="menu_directive_template"
name="Шаблоны директив"
parent="directive_layer.menu_directive_settings_root"
action="directive_layer.action_directive_template"
sequence="40"
/>
<menuitem
id="menu_directive_template_group"
name="Группы шаблонов директив"
parent="directive_layer.menu_directive_settings_root"
action="directive_layer.action_directive_template_group"
sequence="50"
/>
</odoo>