2025-11-12 19:46:06 +03:00
|
|
|
|
# 📋 Настройка шаблонов документов в Nextcloud
|
|
|
|
|
|
|
|
|
|
|
|
**Дата:** 2025-01-XX
|
|
|
|
|
|
**Статус:** ✅ Готово к использованию
|
|
|
|
|
|
|
|
|
|
|
|
## 🎯 Обзор
|
|
|
|
|
|
|
|
|
|
|
|
Для генерации документов из шаблонов используется гибридный подход:
|
|
|
|
|
|
1. **Шаблоны хранятся в Nextcloud** в папке `/crm/Templates/`
|
|
|
|
|
|
2. **Заполнение переменных** происходит через PHPWord
|
|
|
|
|
|
3. **Готовый документ** сохраняется в папку проекта и открывается в OnlyOffice
|
|
|
|
|
|
|
|
|
|
|
|
## 📁 Структура шаблонов
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Создание папки для шаблонов
|
|
|
|
|
|
|
|
|
|
|
|
В Nextcloud создайте папку:
|
|
|
|
|
|
```
|
|
|
|
|
|
/crm/Templates/
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Как создать:**
|
|
|
|
|
|
1. Зайдите в Nextcloud: `https://office.clientright.ru:8443`
|
|
|
|
|
|
2. Перейдите в папку `/crm/`
|
|
|
|
|
|
3. Создайте папку `Templates`
|
|
|
|
|
|
4. Загрузите туда типовые документы
|
|
|
|
|
|
|
|
|
|
|
|
### 2. Формат шаблонов
|
|
|
|
|
|
|
|
|
|
|
|
#### Формат переменных в шаблонах:
|
|
|
|
|
|
|
|
|
|
|
|
**Вариант 1: Простые переменные**
|
|
|
|
|
|
```
|
|
|
|
|
|
{CLIENT_NAME}
|
|
|
|
|
|
{DATE}
|
|
|
|
|
|
{AMOUNT}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Вариант 2: Двойные фигурные скобки**
|
|
|
|
|
|
```
|
|
|
|
|
|
{{CLIENT_NAME}}
|
|
|
|
|
|
{{DATE}}
|
|
|
|
|
|
{{AMOUNT}}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### Пример шаблона претензии:
|
|
|
|
|
|
|
|
|
|
|
|
```docx
|
|
|
|
|
|
ПРЕТЕНЗИЯ
|
|
|
|
|
|
|
|
|
|
|
|
Кому: {RESPONDENT_NAME}
|
|
|
|
|
|
От: {CLIENT_NAME}
|
|
|
|
|
|
|
|
|
|
|
|
Дата: {DATE}
|
|
|
|
|
|
|
|
|
|
|
|
Текст претензии:
|
|
|
|
|
|
{CLAIM_TEXT}
|
|
|
|
|
|
|
|
|
|
|
|
Требования:
|
|
|
|
|
|
1. Возместить ущерб в размере {AMOUNT} рублей
|
|
|
|
|
|
2. {OTHER_REQUIREMENTS}
|
|
|
|
|
|
|
|
|
|
|
|
С уважением,
|
|
|
|
|
|
{CLIENT_NAME}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔧 Использование API
|
|
|
|
|
|
|
|
|
|
|
|
### Endpoint: `/crm_extensions/file_storage/api/create_from_template.php`
|
|
|
|
|
|
|
|
|
|
|
|
**Параметры:**
|
|
|
|
|
|
- `module` - модуль CRM (Project, Contacts, etc.)
|
|
|
|
|
|
- `recordId` - ID записи
|
|
|
|
|
|
- `recordName` - название записи
|
|
|
|
|
|
- `fileName` - имя создаваемого файла
|
|
|
|
|
|
- `templateName` - имя шаблона из Nextcloud (например, `pretenziya.docx`)
|
|
|
|
|
|
- `variables` - JSON объект с переменными для заполнения
|
|
|
|
|
|
|
|
|
|
|
|
**Пример запроса:**
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
const url = `/crm_extensions/file_storage/api/create_from_template.php?` +
|
|
|
|
|
|
`module=Project&` +
|
|
|
|
|
|
`recordId=123456&` +
|
|
|
|
|
|
`recordName=Проект_1&` +
|
|
|
|
|
|
`fileName=Претензия_УК&` +
|
|
|
|
|
|
`templateName=pretenziya.docx&` +
|
|
|
|
|
|
`variables=${encodeURIComponent(JSON.stringify({
|
|
|
|
|
|
CLIENT_NAME: 'Иванов Иван Иванович',
|
|
|
|
|
|
DATE: '15.01.2025',
|
|
|
|
|
|
AMOUNT: '400000',
|
|
|
|
|
|
RESPONDENT_NAME: 'УК "Жилищник"',
|
|
|
|
|
|
CLAIM_TEXT: 'УК отказывается возмещать ущерб от залива квартиры...',
|
|
|
|
|
|
OTHER_REQUIREMENTS: 'Провести экспертизу'
|
|
|
|
|
|
}))}`;
|
|
|
|
|
|
|
|
|
|
|
|
window.location.href = url;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 Интеграция с AI Drawer
|
|
|
|
|
|
|
|
|
|
|
|
### Пример использования в n8n:
|
|
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
// После генерации текста AI
|
|
|
|
|
|
const aiResponse = {
|
|
|
|
|
|
document_type: 'pretenziya',
|
|
|
|
|
|
client_name: 'Иванов Иван Иванович',
|
|
|
|
|
|
amount: '400000',
|
|
|
|
|
|
claim_text: '...',
|
|
|
|
|
|
// ... другие данные
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// Определяем шаблон по типу документа
|
|
|
|
|
|
const templateMap = {
|
|
|
|
|
|
'pretenziya': 'pretenziya.docx',
|
|
|
|
|
|
'isk': 'iskovoe_zayavlenie.docx',
|
|
|
|
|
|
'zhaloba': 'zhaloba.docx',
|
|
|
|
|
|
'hodataystvo': 'hodataystvo.docx'
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const templateName = templateMap[aiResponse.document_type] || 'pretenziya.docx';
|
|
|
|
|
|
|
|
|
|
|
|
// Формируем переменные
|
|
|
|
|
|
const variables = {
|
|
|
|
|
|
CLIENT_NAME: aiResponse.client_name,
|
|
|
|
|
|
DATE: new Date().toLocaleDateString('ru-RU'),
|
|
|
|
|
|
AMOUNT: aiResponse.amount,
|
|
|
|
|
|
CLAIM_TEXT: aiResponse.claim_text,
|
|
|
|
|
|
// ... другие переменные
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// Вызываем API создания документа
|
|
|
|
|
|
const createUrl = `https://crm.clientright.ru/crm_extensions/file_storage/api/create_from_template.php?` +
|
|
|
|
|
|
`module=Project&` +
|
|
|
|
|
|
`recordId=${projectId}&` +
|
|
|
|
|
|
`recordName=${projectName}&` +
|
|
|
|
|
|
`fileName=${fileName}&` +
|
|
|
|
|
|
`templateName=${templateName}&` +
|
|
|
|
|
|
`variables=${encodeURIComponent(JSON.stringify(variables))}`;
|
|
|
|
|
|
|
|
|
|
|
|
// Открываем документ
|
|
|
|
|
|
return { url: createUrl };
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📝 Создание шаблонов
|
|
|
|
|
|
|
|
|
|
|
|
### Рекомендации по созданию шаблонов:
|
|
|
|
|
|
|
|
|
|
|
|
1. **Используйте стандартные названия:**
|
|
|
|
|
|
- `pretenziya.docx` - Претензия
|
|
|
|
|
|
- `iskovoe_zayavlenie.docx` - Исковое заявление
|
|
|
|
|
|
- `zhaloba.docx` - Жалоба
|
|
|
|
|
|
- `hodataystvo.docx` - Ходатайство
|
|
|
|
|
|
|
|
|
|
|
|
2. **Структура документа:**
|
|
|
|
|
|
- Шапка (кому, от кого, дата)
|
|
|
|
|
|
- Фабула (описание ситуации)
|
|
|
|
|
|
- Требования
|
|
|
|
|
|
- Ссылки на право
|
|
|
|
|
|
- Приложения
|
|
|
|
|
|
|
|
|
|
|
|
3. **Переменные:**
|
|
|
|
|
|
- Используйте понятные названия: `CLIENT_NAME`, `AMOUNT`, `DATE`
|
|
|
|
|
|
- Все переменные в верхнем регистре
|
|
|
|
|
|
- Обрамляйте фигурными скобками: `{VAR}` или `{{VAR}}`
|
|
|
|
|
|
|
|
|
|
|
|
## 🔍 Отладка
|
|
|
|
|
|
|
|
|
|
|
|
### Логи:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
tail -f /var/log/apache2/error.log | grep "CREATE FROM TEMPLATE"
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Проверка шаблона:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Проверить наличие шаблона в Nextcloud
|
|
|
|
|
|
curl -u admin:office "https://office.clientright.ru:8443/remote.php/dav/files/admin/crm/Templates/pretenziya.docx" -k -I
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## ⚠️ Ограничения
|
|
|
|
|
|
|
|
|
|
|
|
1. **PHPWord** работает только с DOCX файлами
|
|
|
|
|
|
2. Для XLSX и PPTX используется простая замена текста
|
|
|
|
|
|
3. Сложное форматирование (таблицы, изображения) может не сохраниться при простой замене
|
|
|
|
|
|
|
|
|
|
|
|
## 🎯 Альтернативные подходы
|
|
|
|
|
|
|
|
|
|
|
|
### Вариант A: Использование DOCX шаблонов с закладками
|
|
|
|
|
|
|
|
|
|
|
|
Вместо переменных `{VAR}` можно использовать закладки Word:
|
|
|
|
|
|
1. В Word: Вставка → Закладка
|
|
|
|
|
|
2. Создать закладку с именем переменной
|
|
|
|
|
|
3. PHPWord может заполнять закладки
|
|
|
|
|
|
|
|
|
|
|
|
### Вариант B: Использование только локальных шаблонов
|
|
|
|
|
|
|
|
|
|
|
|
Если не нужна синхронизация через Nextcloud:
|
|
|
|
|
|
1. Хранить шаблоны в `/crm_extensions/file_storage/templates/`
|
|
|
|
|
|
2. Использовать напрямую без WebDAV
|
|
|
|
|
|
|
|
|
|
|
|
### Вариант C: Генерация через PDFMaker
|
|
|
|
|
|
|
|
|
|
|
|
Если документ должен быть в PDF:
|
|
|
|
|
|
1. Создать DOCX из шаблона
|
|
|
|
|
|
2. Конвертировать через PDFMaker
|
|
|
|
|
|
3. Сохранить PDF в проект
|
|
|
|
|
|
|
|
|
|
|
|
## 📚 Полезные ссылки
|
|
|
|
|
|
|
|
|
|
|
|
- [PHPWord Documentation](https://phpword.readthedocs.io/)
|
|
|
|
|
|
- [Nextcloud WebDAV API](https://docs.nextcloud.com/server/latest/user_manual/files/webdav.html)
|
|
|
|
|
|
- [OnlyOffice Integration](https://api.onlyoffice.com/)
|
|
|
|
|
|
|
2025-11-22 09:38:38 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|