feat: Добавлена поддержка привязки документов к HelpDesk

Изменения в upload_documents_to_crm.php:
 Добавлена логика привязки к HelpDesk (заявке) если указан ticket_id
 Если ticket_id не указан - привязываем к Project (старая логика)
 Обновлена функция normalizeInputData для передачи ticket_id
 Добавлено логирование привязки к HelpDesk/Project

Использование:
- Передать ticket_id в payload → документ привязывается к HelpDesk
- Не передавать ticket_id → документ привязывается к Project
This commit is contained in:
Fedor
2025-11-02 19:05:46 +03:00
parent c60d00f563
commit 5f4f99245d

View File

@@ -233,6 +233,7 @@ function normalizeInputData($data) {
'file_name' => $doc['file_name'] ?? $doc['original_file_name'] ?? '',
'description' => $doc['upload_description'] ?? $doc['description'] ?? '',
'projectid' => $projectid,
'ticket_id' => $data['ticket_id'] ?? $doc['ticket_id'] ?? null, // ✅ Поддержка привязки к заявке
'user_id' => $data['user_id'] ?? $doc['user_id'] ?? 1,
'contactid' => $doc['contactid'] ?? $data['contactid'] ?? 0,
'pages' => $doc['pages'] ?? 0,
@@ -446,7 +447,48 @@ function createDocumentsInCRM($filesArray, $userName = 'api') {
// ВАЖНО: Обновляем S3 метаданные напрямую в базе данных
$s3UpdateSuccess = updateDocumentS3Metadata($docNumericId, $s3Info, $fileSize, $f['file_name']);
// Привязываем к проекту
// Определяем к чему привязываем: к HelpDesk (заявке) или к Project (проекту)
$ticketId = isset($f['ticket_id']) ? (int)$f['ticket_id'] : null;
if ($ticketId) {
// Привязываем к HelpDesk (заявке)
writeLog("📎 Привязываем к HelpDesk ticket_id: $ticketId");
// Получаем WS ID для HelpDesk
$rs = $adb->pquery("SELECT id FROM vtiger_ws_entity WHERE name=?", ['HelpDesk']);
$helpdeskPrefix = ($rs && $adb->num_rows($rs) > 0) ? $adb->query_result($rs, 0, 'id') : 17;
$ticketWsId = $helpdeskPrefix . 'x' . $ticketId;
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'operation' => 'AddRelated',
'sessionName' => $sessionId,
'sourceRecordId' => $ticketWsId,
'relatedRecordId' => $documentWsId,
]);
$resp = curl_exec($ch);
// Проверяем успех AddRelated
$ok = false;
if ($resp !== false) {
$resp = ltrim($resp, "\xEF\xBB\xBF\x00\x09\x0A\x0D\x20");
$rel = json_decode($resp, true);
$ok = isset($rel['result']['message']) && $rel['result']['message'] === 'successfull';
}
// Если webservice не сработал - используем прямую привязку
if (!$ok) {
writeLog("⚠️ AddRelated к HelpDesk не сработал, используем прямую привязку");
require_once 'data/CRMEntity.php';
require_once 'modules/Vtiger/CRMEntity.php';
$focus = CRMEntity::getInstance('HelpDesk');
relateEntities($focus, 'HelpDesk', $ticketId, 'Documents', (int)$docNumericId);
}
writeLog("✅ Документ привязан к HelpDesk #$ticketId");
} else {
// Привязываем к проекту (старая логика)
writeLog("📎 Привязываем к Project project_id: {$f['projectid']}");
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'operation' => 'AddRelated',
'sessionName' => $sessionId,
@@ -473,6 +515,9 @@ function createDocumentsInCRM($filesArray, $userName = 'api') {
relateEntities($focus, 'Project', (int)$f['projectid'], 'Documents', (int)$docNumericId);
}
writeLog("✅ Документ привязан к Project #{$f['projectid']}");
}
// Возвращаем все входные данные + результат
$result = array_merge($f, [
'status' => 'success',