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:
@@ -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']}");
|
||||
}
|
||||
|
||||
// Возвращаем все входные данные + результат
|
||||
|
||||
Reference in New Issue
Block a user