Files
crm.clientright.ru/CreateProjectAdvanced.php

169 lines
8.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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