feat: Добавлен инструмент генерации документов для AI Ассистента
- Создан API create_document_with_text.php для создания DOCX/XLSX/PPTX с текстом от AI - Поддержка Markdown форматирования (заголовки, жирный, курсив, списки, код) - Установлен PHPWord для красивого форматирования документов - Исправлены пути сохранения (crm2/CRM_Active_Files/... без /crm/ в начале) - Замена пробелов на подчеркивания в именах папок - Создана документация для AI и разработчиков - Добавлены API для работы с шаблонами Nextcloud
This commit is contained in:
@@ -150,3 +150,7 @@ function vtws_createwebclaim($title, $contact_id, $project_id, $event_type, $des
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
/*********************************************************************************
|
||||
* API-интерфейс для создания Проекта из Web-формы (упрощённый)
|
||||
* Обязательное поле: cf_1885 (номер полиса)
|
||||
* Логика: если проект с таким полисом существует - возвращаем ID БЕЗ обновления
|
||||
* Автор: Фёдор, 2025-11-01
|
||||
* Обязательные поля: cf_1885 (номер полиса), contact_id (контакт)
|
||||
* Логика: если проект с таким полисом И привязкой к контакту существует - возвращаем ID БЕЗ обновления
|
||||
* (по одному полису может быть несколько застрахованных лиц!)
|
||||
* Автор: Фёдор, 2025-11-02
|
||||
********************************************************************************/
|
||||
|
||||
include_once 'include/Webservices/Query.php';
|
||||
@@ -17,7 +18,8 @@ vimport ('includes.runtime.LanguageHandler');
|
||||
|
||||
/**
|
||||
* Создание проекта из web-формы
|
||||
* Если проект с таким номером полиса уже существует - просто возвращаем его ID
|
||||
* Если проект с таким номером полиса И привязкой к контакту уже существует - просто возвращаем его ID
|
||||
* (один полис может быть у нескольких застрахованных лиц!)
|
||||
* @param string $policy_number - номер полиса (обязательное поле) - cf_1885
|
||||
* @param string $contact_id - ID контакта для привязки (обязательное поле)
|
||||
* @param string $period_start - дата начала страхования (опционально) - cf_1887
|
||||
@@ -50,21 +52,27 @@ function vtws_createwebproject($policy_number, $contact_id, $period_start = '',
|
||||
// Валидация: убираем пробелы из номера полиса
|
||||
$policy_number = trim($policy_number);
|
||||
|
||||
$logstring = date('Y-m-d H:i:s').' Ищем проект по policy_number='.$policy_number.PHP_EOL;
|
||||
$logstring = date('Y-m-d H:i:s').' Ищем проект по policy_number='.$policy_number.' И contact_id='.$contact_id.PHP_EOL;
|
||||
file_put_contents('logs/CreateWebProject.log', $logstring, FILE_APPEND);
|
||||
|
||||
global $adb, $current_user;
|
||||
|
||||
$isNew = false; // Флаг: создан ли проект сейчас
|
||||
|
||||
// Проверяем существование проекта по номеру полиса
|
||||
// Проверяем существование проекта по номеру полиса И привязке к контакту
|
||||
// (т.к. по одному полису может быть несколько застрахованных лиц)
|
||||
$query = "SELECT p.projectid
|
||||
FROM vtiger_project p
|
||||
INNER JOIN vtiger_projectcf pcf ON p.projectid = pcf.projectid
|
||||
LEFT JOIN vtiger_crmentity e ON e.crmid = p.projectid
|
||||
WHERE e.deleted = 0 AND pcf.cf_1885 = ?
|
||||
LEFT JOIN vtiger_crmentity e ON e.crmid = p.projectid
|
||||
LEFT JOIN vtiger_crmentityrel rel ON
|
||||
(rel.crmid = p.projectid AND rel.relcrmid = ?)
|
||||
OR (rel.relcrmid = p.projectid AND rel.crmid = ?)
|
||||
WHERE e.deleted = 0
|
||||
AND pcf.cf_1885 = ?
|
||||
AND rel.crmid IS NOT NULL
|
||||
LIMIT 1";
|
||||
$result = $adb->pquery($query, array($policy_number));
|
||||
$result = $adb->pquery($query, array($contact_id, $contact_id, $policy_number));
|
||||
|
||||
if ($adb->num_rows($result) > 0) {
|
||||
// Проект существует - ПРОСТО ВОЗВРАЩАЕМ ID (НЕ обновляем!)
|
||||
@@ -126,4 +134,5 @@ function vtws_createwebproject($policy_number, $contact_id, $period_start = '',
|
||||
ob_end_clean();
|
||||
|
||||
return $result; // ← Массив, НЕ json_encode!
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user