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