# 🔧 ИСПРАВЛЕНИЕ: Кнопки "Папка в Nextcloud" не работали ## ❌ ПРОБЛЕМА: В модулях CRM кнопка **"Папка в Nextcloud"** была неактивна и не реагировала на клики. ## 🔍 ПРИЧИНА: В JavaScript файле `crm_extensions/nextcloud_editor/js/nextcloud-editor.js` **отсутствовали функции**, которые вызывались из шаблонов: **Было в JS:** - ✅ `openProjectFolder()` — ТОЛЬКО ДЛЯ Project **Вызывалось из шаблонов, но НЕ СУЩЕСТВОВАЛО:** - ❌ `openRecordFolder()` — для HelpDesk, Invoice, SalesOrder, PurchaseOrder, Leads, Quotes, Potentials - ❌ `openAccountFolder()` — для Accounts - ❌ `openContactFolder()` — для Contacts ## ✅ РЕШЕНИЕ: ### 1. Добавлена универсальная функция `openRecordFolder()` ```javascript function openRecordFolder(moduleName, recordId, recordName) { // Нормализация имени (убираем кавычки, заменяем пробелы) if (recordName) { recordName = recordName.replace(/"/g, '_').replace(/\s+/g, '_'); } // Формируем путь к папке const folderName = recordName ? `${recordName}_${recordId}` : `${moduleName.toLowerCase()}_${recordId}`; const encodedFolderName = encodeURIComponent(folderName); const nextcloudUrl = 'https://office.clientright.ru:8443'; const folderUrl = `${nextcloudUrl}/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/${moduleName}/${encodedFolderName}`; // Открываем в новом окне window.open(folderUrl, 'nextcloud_folder', 'width=1200,height=800,scrollbars=yes,resizable=yes'); } ``` **Используется в модулях:** - HelpDesk (тикеты) - Invoice (счета) - SalesOrder (заказы) - PurchaseOrder (закупки) - Leads (лиды) - Quotes (предложения) - Potentials (сделки) ### 2. Добавлена специализированная функция `openAccountFolder()` ```javascript function openAccountFolder(accountId, accountName) { // Нормализация имени контрагента if (accountName) { accountName = accountName.replace(/"/g, '_').replace(/\s+/g, '_'); } const folderName = accountName ? `${accountName}_${accountId}` : `account_${accountId}`; const encodedFolderName = encodeURIComponent(folderName); const folderUrl = `https://office.clientright.ru:8443/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/Accounts/${encodedFolderName}`; window.open(folderUrl, 'nextcloud_folder', 'width=1200,height=800,scrollbars=yes,resizable=yes'); } ``` **Используется в модуле:** - Accounts (контрагенты) ### 3. Добавлена специализированная функция `openContactFolder()` ```javascript function openContactFolder(contactId, firstName, lastName) { // Составление имени из firstName и lastName let contactName = ''; if (firstName || lastName) { contactName = `${firstName || ''}_${lastName || ''}`.replace(/^_+|_+$/g, ''); contactName = contactName.replace(/"/g, '_').replace(/\s+/g, '_'); } const folderName = contactName ? `${contactName}_${contactId}` : `contact_${contactId}`; const encodedFolderName = encodeURIComponent(folderName); const folderUrl = `https://office.clientright.ru:8443/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/Contacts/${encodedFolderName}`; window.open(folderUrl, 'nextcloud_folder', 'width=1200,height=800,scrollbars=yes,resizable=yes'); } ``` **Используется в модуле:** - Contacts (контакты) ### 4. Очищен кеш Smarty ```bash rm -rf test/templates_c/v7/*.php ``` ## 📋 ПРОВЕРКА: ### Функции в JS: ```bash grep -n "^function open.*Folder" crm_extensions/nextcloud_editor/js/nextcloud-editor.js ``` **Результат:** ``` 9:function openRecordFolder(moduleName, recordId, recordName) { 37:function openProjectFolder(projectId, projectName) { 65:function openAccountFolder(accountId, accountName) { 87:function openContactFolder(contactId, firstName, lastName) { ``` ✅ **ВСЕ 4 ФУНКЦИИ НА МЕСТЕ!** ### Где используются: | Модуль | Функция | Параметры | |--------|---------|-----------| | HelpDesk | `openRecordFolder()` | 'HelpDesk', recordId, ticket_no | | Invoice | `openRecordFolder()` | 'Invoice', recordId, invoice_no | | SalesOrder | `openRecordFolder()` | 'SalesOrder', recordId, salesorder_no | | PurchaseOrder | `openRecordFolder()` | 'PurchaseOrder', recordId, purchaseorder_no | | Leads | `openRecordFolder()` | 'Leads', recordId, firstname_lastname | | Quotes | `openRecordFolder()` | 'Quotes', recordId, quote_no | | Potentials | `openRecordFolder()` | 'Potentials', recordId, potentialname | | Accounts | `openAccountFolder()` | accountId, accountname | | Contacts | `openContactFolder()` | contactId, firstname, lastname | | Project | `openProjectFolder()` | projectId, projectname | ## 🎯 РЕЗУЛЬТАТ: ✅ **КНОПКИ "Папка в Nextcloud" ТЕПЕРЬ РАБОТАЮТ ВО ВСЕХ МОДУЛЯХ!** При клике на кнопку открывается **новое окно** с Nextcloud, где отображается папка соответствующей записи CRM. ## 📁 ИЗМЕНЕННЫЕ ФАЙЛЫ: - `crm_extensions/nextcloud_editor/js/nextcloud-editor.js` — добавлены 3 недостающие функции - `test/templates_c/v7/*.php` — очищен кеш (автоматически пересоздастся) ## 📅 ДАТА ИСПРАВЛЕНИЯ: 02.11.2025