Files
crm.clientright.ru/crm_extensions/file_storage/docs/NEXTCLOUD_TEMPLATES.md

220 lines
7.1 KiB
Markdown
Raw Normal View History

# 📋 Настройка шаблонов документов в 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/)