# DOCX-шаблоны
name: docx_report
version: 19.0.1.0.0
author: Mk.Lab

### 1. Общее описание

Модуль добавляет в Odoo систему DOCX-шаблонов для печати документов. Вместо стандартных HTML-отчётов пользователь загружает файл `.docx` с разметкой переменных — и система формирует готовый документ Word, подставляя данные из карточки записи.

Модуль расширяет возможности базового `docx_report_generation`: добавляет интерфейс управления шаблонами, валидацию, кастомные переменные и привязку шаблонов к моделям.

### 2. Установка

1. Убедитесь что установлены модули `docx_report_generation`, `account`, `sale`, `l10n_ru_contract`

2. Установите Python-пакеты: `pip install docxtpl docxcompose beautifulsoup4`

3. Скопируйте папку `docx_report` в директорию `addons`

4. Перезапустите сервер Odoo

5. Обновите список приложений: **Настройки → Приложения → Обновить список**

6. Найдите модуль **«DOCX Templates»** и установите

### 3. Функциональность

3.1 Основные возможности:

- Загрузка `.docx`-файла как шаблона отчёта для любой модели Odoo
- Подстановка данных из записи через переменные `{{ object.field }}`
- Условные конструкции `{% if %}` и циклы `{% for %}` в шаблоне
- Кастомные переменные с произвольными Python-выражениями
- Валидация шаблона: проверка синтаксиса и существования полей модели
- Подсказки доступных полей выбранной модели прямо в форме шаблона
- Привязка шаблона к форме записи через меню печати

3.2 Синтаксис шаблона:

| Конструкция | Пример | Описание |
|---|---|---|
| Переменная | `{{ object.name }}` | Значение поля записи |
| Связанное поле | `{{ object.partner_id.name }}` | Поле через Many2one |
| Условие | `{% if object.amount > 0 %}...{% endif %}` | Условный вывод |
| Цикл | `{% for line in object.line_ids %}...{% endfor %}` | Перебор строк |
| Кастомная переменная | `{{ my_var }}` | Переменная из вкладки «Кастомные переменные» |
| Дата | `{{ time.strftime('%d.%m.%Y') }}` | Текущая дата |

3.3 Меню:

В главном меню появляется пункт **«Шаблоны для отчетов»** — список всех DOCX-шаблонов.

![img_1.png](img_1.png)

## Как это выглядит в интерфейсе

Форма шаблона содержит основные поля, кнопку **«Валидация»** и две вкладки: **«Кастомные переменные»** и **«Доступные переменные»**.

![img_2.png](img_2.png)

После привязки шаблона к модели в меню **⚙️ Печать** записи появляется дополнительный пункт с именем шаблона.

![img_3.png](img_3.png)

### Пример использования

### Создать шаблон

Перейдите в меню **«Шаблоны для отчетов»**, нажмите **Создать**. Укажите название, загрузите `.docx`-файл, выберите модель документа.

![img_4.png](img_4.png)

### Проверить доступные поля

На вкладке **«Доступные переменные»** выберите модель для подсказки — отобразится список всех полей с техническими именами и типами. Используйте их при создании шаблона.

![img_5.png](img_5.png)

### Добавить кастомную переменную (если нужно)

На вкладке **«Кастомные переменные»** добавьте переменную: укажите техническое имя и Python-выражение для вычисления значения.

![img_6.png](img_6.png)

### Проверить шаблон

Нажмите кнопку **«Валидация»** в шапке формы. Система проверит синтаксис и существование всех полей в шаблоне, отобразит результат.

![img_7.png](img_7.png)

### Привязать шаблон к модели

Нажмите кнопку **«Добавить печать в действия»** — шаблон появится в меню ⚙️ Печать для записей выбранной модели.

![img_8.png](img_8.png)

### Распечатать документ

Откройте нужную запись (договор, заказ и т.д.) → меню **⚙️ Печать** → выберите название шаблона. Файл `.docx` скачается автоматически.

![img_9.png](img_9.png)
