169 lines
8.8 KiB
PHP
169 lines
8.8 KiB
PHP
<?php
|
||
/*********************************************************************************
|
||
* API-интерфейс для создания Проекта с расширенными данными
|
||
* All Rights Reserved.
|
||
* Contributor(s): AI Assistant
|
||
********************************************************************************/
|
||
|
||
require_once("config.php");
|
||
require_once("include/Webservices/Utils.php");
|
||
require_once("include/Webservices/Create.php");
|
||
require_once("includes/Loader.php");
|
||
vimport ('includes.runtime.Globals');
|
||
vimport ('includes.runtime.BaseModel');
|
||
vimport ('includes.runtime.LanguageHandler');
|
||
|
||
// Устанавливаем заголовки для JSON
|
||
header('Content-Type: application/json');
|
||
|
||
// Получаем данные из POST (поддерживаем и JSON и form-data)
|
||
$rawInput = file_get_contents('php://input');
|
||
$input = null;
|
||
|
||
// Проверяем Content-Type
|
||
$contentType = $_SERVER['CONTENT_TYPE'] ?? '';
|
||
|
||
// Детальное логирование входящих данных
|
||
$logstring = date("Y-m-d H:i:s").' ===== CreateProjectAdvanced REQUEST START ====='.PHP_EOL;
|
||
$logstring .= date("Y-m-d H:i:s").' Content-Type: '.$contentType.PHP_EOL;
|
||
$logstring .= date("Y-m-d H:i:s").' Raw POST data: '.$rawInput.PHP_EOL;
|
||
$logstring .= date("Y-m-d H:i:s").' $_POST data: '.json_encode($_POST, JSON_UNESCAPED_UNICODE).PHP_EOL;
|
||
|
||
if (strpos($contentType, 'application/json') !== false) {
|
||
// JSON данные
|
||
$input = json_decode($rawInput, true);
|
||
$logstring .= date("Y-m-d H:i:s").' Parsed JSON: '.json_encode($input, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT).PHP_EOL;
|
||
$logstring .= date("Y-m-d H:i:s").' JSON decode error: '.(json_last_error_msg()).PHP_EOL;
|
||
} else {
|
||
// Form данные
|
||
$input = $_POST;
|
||
$logstring .= date("Y-m-d H:i:s").' Parsed FORM: '.json_encode($input, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT).PHP_EOL;
|
||
}
|
||
|
||
$logstring .= date("Y-m-d H:i:s").' ===== CreateProjectAdvanced REQUEST END ====='.PHP_EOL;
|
||
file_put_contents('logs/CreateProjectAdvanced.log', $logstring, FILE_APPEND);
|
||
|
||
// Валидация обязательных полей
|
||
if (empty($input['contactid']) || empty($input['offenderid'])) {
|
||
$logstring = date("Y-m-d H:i:s").' Missing required fields: contactid or offenderid'.PHP_EOL;
|
||
file_put_contents('logs/CreateProjectAdvanced.log', $logstring, FILE_APPEND);
|
||
|
||
http_response_code(400);
|
||
echo json_encode(['success' => false, 'error' => 'Missing required fields: contactid or offenderid']);
|
||
exit;
|
||
}
|
||
|
||
try {
|
||
global $adb;
|
||
|
||
// Инициализируем пользователя (захардкодим как в оригинале)
|
||
$seed_user = new Users();
|
||
$current_user = $seed_user->retrieveCurrentUserInfoFromFile(1); // Пользователь с ID 1
|
||
|
||
$contactid = $input['contactid'];
|
||
$offenderid = $input['offenderid'];
|
||
$applicantid = $input['applicantid'] ?? $contactid; // Заявитель, по умолчанию = контакт
|
||
$projectData = $input['projectdata'] ?? [];
|
||
|
||
// Получаем название контакта для названия проекта
|
||
$query = "select c.lastname
|
||
from vtiger_contactdetails c
|
||
left join vtiger_crmentity e on e.crmid = c.contactid
|
||
where e.deleted = 0 and c.contactid = ?
|
||
limit 1";
|
||
$result = $adb->pquery($query, array($contactid));
|
||
$contactName = $adb->query_result($result, 0, 'lastname');
|
||
|
||
// Получаем название контрагента для названия проекта
|
||
$query = "select a.accountname
|
||
from vtiger_account a
|
||
left join vtiger_crmentity e on e.crmid = a.accountid
|
||
where e.deleted = 0 and a.accountid = ?
|
||
limit 1";
|
||
$result = $adb->pquery($query, array($offenderid));
|
||
$accountName = $adb->query_result($result, 0, 'accountname');
|
||
|
||
// Формируем название проекта
|
||
$projectName = $contactName . ' ' . $accountName;
|
||
|
||
// Основные поля модуля Проекты
|
||
$params = array (
|
||
'projectname' => $projectName,
|
||
'linktoaccountscontacts' => '12x'.$contactid,
|
||
'cf_2274' => '11x'.$offenderid,
|
||
'projectstatus' => 'модерация',
|
||
'projecttype' => 'Претензионно - исковая работа',
|
||
'assigned_user_id' => vtws_getWebserviceEntityId('Users', $current_user->id)
|
||
);
|
||
|
||
// Заявитель по умолчанию (если не придет из projectdata или как отдельное поле)
|
||
if (!isset($projectData['cf_1994']) && !isset($input['cf_1994'])) {
|
||
$params['cf_1994'] = vtws_getWebserviceEntityId('Accounts', 62345); // МОО КЛИЕНТПРАВ
|
||
}
|
||
|
||
// Логируем assigned_user_id для отладки
|
||
$logstring = date('Y-m-d H:i:s').' assigned_user_id: '.vtws_getWebserviceEntityId('Users', $current_user->id).' (current_user->id: '.$current_user->id.')'.PHP_EOL;
|
||
$logstring .= date('Y-m-d H:i:s').' applicantid: '.$applicantid.' (cf_1994: 12x'.$applicantid.')'.PHP_EOL;
|
||
file_put_contents('logs/CreateProjectAdvanced.log', $logstring, FILE_APPEND);
|
||
|
||
// Обрабатываем cf_1994 как отдельное поле (если пришло)
|
||
if (isset($input['cf_1994'])) {
|
||
$params['cf_1994'] = vtws_getWebserviceEntityId('Accounts', $input['cf_1994']); // Поле cf_1994 ссылается на Accounts
|
||
}
|
||
|
||
// Заполняем поля из projectdata
|
||
if (!empty($projectData)) {
|
||
// Основные поля
|
||
if (isset($projectData['cf_2206'])) $params['cf_2206'] = $projectData['cf_2206'];
|
||
if (isset($projectData['cf_1994'])) {
|
||
// Заявитель из projectdata - поле cf_1994 ссылается на Accounts
|
||
$params['cf_1994'] = vtws_getWebserviceEntityId('Accounts', $projectData['cf_1994']);
|
||
}
|
||
if (isset($projectData['cf_2210'])) $params['cf_2210'] = $projectData['cf_2210'];
|
||
if (isset($projectData['cf_2212'])) $params['cf_2212'] = $projectData['cf_2212'];
|
||
if (isset($projectData['cf_2214'])) $params['cf_2214'] = $projectData['cf_2214'];
|
||
if (isset($projectData['cf_1830'])) $params['cf_1830'] = $projectData['cf_1830'];
|
||
if (isset($projectData['cf_1469'])) $params['cf_1469'] = $projectData['cf_1469'];
|
||
|
||
// Условия договора
|
||
if (isset($projectData['cf_1191'])) $params['cf_1191'] = $projectData['cf_1191'];
|
||
if (isset($projectData['cf_1189'])) $params['cf_1189'] = $projectData['cf_1189'];
|
||
if (isset($projectData['cf_1203'])) $params['cf_1203'] = $projectData['cf_1203'];
|
||
if (isset($projectData['cf_1839'])) $params['cf_1839'] = $projectData['cf_1839'];
|
||
if (isset($projectData['cf_1841'])) $params['cf_1841'] = $projectData['cf_1841'];
|
||
if (isset($projectData['cf_1207'])) $params['cf_1207'] = $projectData['cf_1207'];
|
||
if (isset($projectData['cf_1479'])) $params['cf_1479'] = $projectData['cf_1479'];
|
||
if (isset($projectData['cf_1231'])) $params['cf_1231'] = $projectData['cf_1231'];
|
||
if (isset($projectData['cf_1239'])) $params['cf_1239'] = $projectData['cf_1239'];
|
||
if (isset($projectData['cf_1566'])) $params['cf_1566'] = $projectData['cf_1566'];
|
||
if (isset($projectData['cf_1564'])) $params['cf_1564'] = $projectData['cf_1564'];
|
||
if (isset($projectData['cf_1249'])) $params['cf_1249'] = $projectData['cf_1249'];
|
||
if (isset($projectData['description'])) $params['description'] = $projectData['description'];
|
||
|
||
// Претензионный порядок
|
||
if (isset($projectData['cf_1471'])) $params['cf_1471'] = $projectData['cf_1471'];
|
||
if (isset($projectData['cf_1473'])) $params['cf_1473'] = $projectData['cf_1473'];
|
||
if (isset($projectData['cf_1475'])) $params['cf_1475'] = $projectData['cf_1475'];
|
||
}
|
||
|
||
$logstring = date('Y-m-d H:i:s').' CreateProjectAdvanced params: '.json_encode($params).PHP_EOL;
|
||
file_put_contents('logs/CreateProjectAdvanced.log', $logstring, FILE_APPEND);
|
||
|
||
// Создаем проект
|
||
$project = vtws_create('Project', $params, $current_user);
|
||
$projectId = substr($project['id'], 3);
|
||
|
||
$logstring = date('Y-m-d H:i:s').' CreateProjectAdvanced success: project created with id '.$projectId.PHP_EOL;
|
||
file_put_contents('logs/CreateProjectAdvanced.log', $logstring, FILE_APPEND);
|
||
|
||
echo json_encode(['success' => true, 'projectid' => $projectId]);
|
||
|
||
} catch (Exception $e) {
|
||
$logstring = date('Y-m-d H:i:s').' CreateProjectAdvanced error: '.$e->getMessage().PHP_EOL;
|
||
file_put_contents('logs/CreateProjectAdvanced.log', $logstring, FILE_APPEND);
|
||
|
||
http_response_code(500);
|
||
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
|
||
}
|
||
?>
|