Files
crm.clientright.ru/NEXTCLOUD_TEMPLATES_GUIDE.md
Fedor 01c4fe80b5 chore: snapshot current working tree changes
Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
2026-03-26 14:19:01 +03:00

10 KiB
Raw Blame History

📋 Руководство по работе с шаблонами в Nextcloud

🎯 Что это такое?

Шаблоны — это готовые документы (DOCX, XLSX, PPTX) с переменными, которые можно автоматически заполнять данными из CRM.

Пример: Шаблон претензии с переменными {CLIENT_NAME}, {DATE}, {AMOUNT} → автоматически заполняется → готовый документ сохраняется в папку проекта.


📁 Где хранятся шаблоны?

1. Папка /Templates/ в Nextcloud

Путь: /admin/Templates/ (в корне пользователя admin)

WebDAV URL:

https://office.clientright.ru:8443/remote.php/dav/files/admin/Templates/

Что там есть:

  • Стандартные шаблоны Nextcloud (ODT, ODS, ODP)
  • Ваши кастомные шаблоны (DOCX, XLSX, PPTX)

2. Папка OnlyOffice (для общих шаблонов)

Путь: /var/www/html/data/appdata_*/onlyoffice/template/

Что там:

  • Общие шаблоны OnlyOffice (например, "Соглашение_№_71...")

🔧 Как работать с шаблонами?

1. Получить список шаблонов

API Endpoint:

GET /crm_extensions/file_storage/api/list_templates.php

Пример запроса:

curl "https://crm.clientright.ru/crm_extensions/file_storage/api/list_templates.php"

Ответ:

{
  "success": true,
  "templates": [
    {
      "name": "pretenziya.docx",
      "fileName": "pretenziya.docx",
      "path": "/remote.php/dav/files/admin/Templates/pretenziya.docx",
      "type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      "size": 22931,
      "modified": "Tue, 21 Oct 2025 08:53:54 GMT"
    }
  ],
  "count": 1
}

2. Создать документ из шаблона

API Endpoint:

GET /crm_extensions/file_storage/api/create_from_template.php

Параметры:

  • module - модуль CRM (Project, Contacts, HelpDesk, etc.)
  • recordId - ID записи (например, ID проекта)
  • recordName - название записи (например, "Проект_1")
  • fileName - имя создаваемого файла (без расширения)
  • templateName - имя шаблона из Nextcloud (например, pretenziya.docx)
  • variables - JSON объект с переменными для заполнения

Пример запроса:

const url = `/crm_extensions/file_storage/api/create_from_template.php?` +
    `module=Project&` +
    `recordId=400264&` +
    `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;

Что происходит:

  1. Скачивается шаблон из Nextcloud через WebDAV
  2. Заполняются переменные через PHPWord (для DOCX) или простая замена (для других)
  3. Готовый документ сохраняется в S3 в папку проекта
  4. Документ открывается в OnlyOffice для редактирования

📝 Формат переменных в шаблонах

Вариант 1: Простые переменные

{CLIENT_NAME}
{DATE}
{AMOUNT}

Вариант 2: Двойные фигурные скобки

{{CLIENT_NAME}}
{{DATE}}
{{AMOUNT}}

Пример шаблона претензии:

ПРЕТЕНЗИЯ

Кому: {RESPONDENT_NAME}
От: {CLIENT_NAME}

Дата: {DATE}

Текст претензии:
{CLAIM_TEXT}

Требования:
1. Возместить ущерб в размере {AMOUNT} рублей
2. {OTHER_REQUIREMENTS}

С уважением,
{CLIENT_NAME}

🚀 Как добавить новый шаблон?

Способ 1: Через веб-интерфейс Nextcloud

  1. Зайди в Nextcloud: https://office.clientright.ru:8443
  2. Перейди в папку /Templates/ (или создай её, если нет)
  3. Загрузи DOCX файл с переменными
  4. Готово! Шаблон доступен через API

Способ 2: Через WebDAV

# Загрузить шаблон через WebDAV
curl -u admin:office \
  -T "pretenziya.docx" \
  "https://office.clientright.ru:8443/remote.php/dav/files/admin/Templates/pretenziya.docx" \
  -k

Способ 3: Через OnlyOffice (для общих шаблонов)

  1. Зайди в настройки OnlyOffice в Nextcloud
  2. Раздел "Общие шаблоны"
  3. Загрузи шаблон
  4. Он сохранится в /var/www/html/data/appdata_*/onlyoffice/template/

🎨 Рекомендации по созданию шаблонов

1. Названия шаблонов:

  • pretenziya.docx - Претензия
  • iskovoe_zayavlenie.docx - Исковое заявление
  • zhaloba.docx - Жалоба
  • hodataystvo.docx - Ходатайство
  • soglashenie.docx - Соглашение

2. Структура документа:

  • Шапка (кому, от кого, дата)
  • Фабула (описание ситуации)
  • Требования
  • Ссылки на право
  • Приложения

3. Переменные:

  • Используй понятные названия: CLIENT_NAME, AMOUNT, DATE
  • Все переменные в верхнем регистре
  • Обрамляй фигурными скобками: {VAR} или {{VAR}}
  • Избегай пробелов: {CLIENT_NAME} , {CLIENT NAME}

🔍 Отладка

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

curl -u admin:office \
  "https://office.clientright.ru:8443/remote.php/dav/files/admin/Templates/pretenziya.docx" \
  -k -I

Ожидаемый ответ: HTTP/1.1 200 OK

Посмотреть логи:

tail -f /var/log/apache2/error.log | grep "CREATE FROM TEMPLATE"

Проверить список шаблонов:

curl "https://crm.clientright.ru/crm_extensions/file_storage/api/list_templates.php" | jq

⚠️ Ограничения

  1. PHPWord работает только с DOCX файлами

    • Для XLSX и PPTX используется простая замена текста
    • Сложное форматирование (таблицы, изображения) может не сохраниться
  2. Переменные должны быть в тексте

    • Не работают переменные в заголовках/колонтитулах (ограничение PHPWord)
    • Не работают переменные в таблицах (частично)
  3. Размер шаблона

    • Большие шаблоны (>10MB) могут загружаться медленно

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

Пример 1: Создать претензию из шаблона

// В JavaScript (например, в CRM)
function createClaimFromTemplate(projectId, projectName, claimData) {
    const url = `/crm_extensions/file_storage/api/create_from_template.php?` +
        `module=Project&` +
        `recordId=${projectId}&` +
        `recordName=${encodeURIComponent(projectName)}&` +
        `fileName=Претензия_${new Date().getTime()}&` +
        `templateName=pretenziya.docx&` +
        `variables=${encodeURIComponent(JSON.stringify({
            CLIENT_NAME: claimData.clientName,
            DATE: new Date().toLocaleDateString('ru-RU'),
            AMOUNT: claimData.amount,
            RESPONDENT_NAME: claimData.respondentName,
            CLAIM_TEXT: claimData.text,
            OTHER_REQUIREMENTS: claimData.requirements || ''
        }))}`;
    
    window.open(url, '_blank');
}

Пример 2: Получить список шаблонов и показать в UI

async function loadTemplates() {
    const response = await fetch('/crm_extensions/file_storage/api/list_templates.php');
    const data = await response.json();
    
    if (data.success) {
        const templateSelect = document.getElementById('templateSelect');
        data.templates.forEach(template => {
            const option = document.createElement('option');
            option.value = template.fileName;
            option.textContent = template.name;
            templateSelect.appendChild(option);
        });
    }
}

📚 Полезные ссылки


FAQ

Q: Можно ли использовать шаблоны из папки /crm/Templates/?
A: Да, но нужно изменить путь в list_templates.php и create_from_template.php с /Templates/ на /crm/Templates/.

Q: Как обновить шаблон?
A: Просто загрузи новый файл с тем же именем в Nextcloud через веб-интерфейс или WebDAV.

Q: Можно ли использовать шаблоны OnlyOffice напрямую?
A: Да, но они хранятся в специальной папке. Лучше скопировать их в /Templates/ для единообразия.

Q: Работают ли переменные в таблицах?
A: Частично. PHPWord может заменить переменные в ячейках таблиц, но сложное форматирование может потеряться.


Готово! Теперь ты знаешь, как работать с шаблонами в Nextcloud! 🎉