From af802149908c347abd15d644bce9cd6c524fd471 Mon Sep 17 00:00:00 2001 From: Fedor Date: Sat, 1 Nov 2025 12:51:54 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20CreateWebProject=20=D0=B4=D0=BB=D1=8F=20vTiger=20webse?= =?UTF-8?q?rvice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Упрощённая операция создания проекта: обязательно policy_number + contact_id - Логика: если проект с таким полисом существует - возвращает ID БЕЗ обновления - Если не существует - создаёт новый проект - Поля: * projectname: 'ERV {полис} цифровой адвокат' * projectstatus: 'модерация' * projecttype: 'ерв урегулирование' * linktoaccountscontacts: привязка к контакту * cf_1994: Заявитель (контрагент 67458) * cf_1885: номер полиса * cf_1887, cf_1889: периоды страхования (опционально) - Возвращает JSON: {"project_id": "123", "is_new": true/false} - Зарегистрировано в БД: * vtiger_ws_operation (id: 51) * vtiger_ws_operation_parameters (policy_number, contact_id, period_start, period_end) - Логи: logs/CreateWebProject.log - Протестировано: проект 396865 создан и повторно найден без дублирования --- include/Webservices/CreateWebProject.php | 122 +++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 include/Webservices/CreateWebProject.php diff --git a/include/Webservices/CreateWebProject.php b/include/Webservices/CreateWebProject.php new file mode 100644 index 00000000..44080578 --- /dev/null +++ b/include/Webservices/CreateWebProject.php @@ -0,0 +1,122 @@ +pquery($query, array($policy_number)); + + if ($adb->num_rows($result) > 0) { + // Проект существует - ПРОСТО ВОЗВРАЩАЕМ ID (НЕ обновляем!) + $output = $adb->query_result($result, 0, 'projectid'); + $isNew = false; + $logstring = date('Y-m-d H:i:s').' ✅ Проект найден с id '.$output.' (БЕЗ обновления)'.PHP_EOL; + file_put_contents('logs/CreateWebProject.log', $logstring, FILE_APPEND); + } else { + // Проект НЕ существует - создаём новый + + // Формируем название проекта + $projectname = 'ERV ' . $policy_number . ' цифровой адвокат'; + + $params = array ( + 'projectname' => $projectname, + 'projectstatus' => 'модерация', + 'projecttype' => 'ерв урегулирование', + 'linktoaccountscontacts' => '12x'.$contact_id, // Привязка к контакту + 'cf_1994' => '11x67458', // Заявитель (контрагент record=67458) + 'cf_1885' => $policy_number, // Номер полиса + 'assigned_user_id' => vtws_getWebserviceEntityId('Users', $current_user->id) + ); + + // Дополнительные необязательные поля + if (!empty($period_start)) { + $params['cf_1887'] = $period_start; // Период страхования начало + } + if (!empty($period_end)) { + $params['cf_1889'] = $period_end; // Период страхования конец + } + + $logstring = date('Y-m-d H:i:s').' Массив для создания Web Проекта: '.json_encode($params).PHP_EOL; + file_put_contents('logs/CreateWebProject.log', $logstring, FILE_APPEND); + + try { + $project = vtws_create('Project', $params, $current_user); + $output = substr($project['id'], 3); + $isNew = true; // Проект только что создан! + $logstring = date('Y-m-d H:i:s').' ✅ Создан новый Web Проект с id '.$output.PHP_EOL; + file_put_contents('logs/CreateWebProject.log', $logstring, FILE_APPEND); + } catch (WebServiceException $ex) { + $logstring = date('Y-m-d H:i:s').' ❌ Ошибка создания: '.$ex->getMessage().PHP_EOL; + file_put_contents('logs/CreateWebProject.log', $logstring, FILE_APPEND); + throw $ex; + } + } + + // Возвращаем JSON с флагом is_new + $result = array( + 'project_id' => $output, + 'is_new' => $isNew + ); + + $logstring = date('Y-m-d H:i:s').' Return: '.json_encode($result).PHP_EOL; + file_put_contents('logs/CreateWebProject.log', $logstring, FILE_APPEND); + + return json_encode($result); +} +?> +