Files
crm.clientright.ru/CreateProjectAdvanced.php

169 lines
8.8 KiB
PHP
Raw Permalink Normal View History

<?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()]);
}
?>