diff --git a/upload_documents_to_crm.php b/upload_documents_to_crm.php index 52303449..43c07fb6 100644 --- a/upload_documents_to_crm.php +++ b/upload_documents_to_crm.php @@ -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,31 +447,75 @@ function createDocumentsInCRM($filesArray, $userName = 'api') { // ВАЖНО: Обновляем S3 метаданные напрямую в базе данных $s3UpdateSuccess = updateDocumentS3Metadata($docNumericId, $s3Info, $fileSize, $f['file_name']); - // Привязываем к проекту - curl_setopt($ch, CURLOPT_POSTFIELDS, [ - 'operation' => 'AddRelated', - 'sessionName' => $sessionId, - 'sourceRecordId' => $projectWsId, - 'relatedRecordId' => $documentWsId, - ]); - $resp = curl_exec($ch); + // Определяем к чему привязываем: к HelpDesk (заявке) или к Project (проекту) + $ticketId = isset($f['ticket_id']) ? (int)$f['ticket_id'] : null; - // Проверяем успех 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 не сработал, используем прямую привязку"); - require_once 'data/CRMEntity.php'; - require_once 'modules/Vtiger/CRMEntity.php'; - list(, $docNumericId) = explode('x', $documentWsId, 2); - $focus = CRMEntity::getInstance('Project'); - relateEntities($focus, 'Project', (int)$f['projectid'], 'Documents', (int)$docNumericId); + 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, + 'sourceRecordId' => $projectWsId, + '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 не сработал, используем прямую привязку"); + require_once 'data/CRMEntity.php'; + require_once 'modules/Vtiger/CRMEntity.php'; + list(, $docNumericId) = explode('x', $documentWsId, 2); + $focus = CRMEntity::getInstance('Project'); + relateEntities($focus, 'Project', (int)$f['projectid'], 'Documents', (int)$docNumericId); + } + + writeLog("✅ Документ привязан к Project #{$f['projectid']}"); } // Возвращаем все входные данные + результат