Добавлена система уведомлений о приходе судебных писем
- Реализована функция createMailNotification() в simple_project_updater_v2.php - Автоматическое создание уведомлений VDNotifierPro при поступлении документов - Уведомления отправляются ответственному по проекту - Исправлен формат ссылок (без index.php? для корректной работы в VDNotifierPro) - Защита от дубликатов - обновление существующих непрочитанных уведомлений - Добавлена документация MAIL_NOTIFICATION_SYSTEM.md - Протестировано и работает корректно
This commit is contained in:
@@ -93,6 +93,66 @@ function createDocumentViaAPI($documentData) {
|
||||
];
|
||||
}
|
||||
|
||||
// Функция для создания уведомления о приходе письма
|
||||
function createMailNotification($projectId, $documentId, $documentTitle, $plaintiffFio) {
|
||||
global $mysqli;
|
||||
|
||||
log_message('INFO', "Создаем уведомление для проекта $projectId о документе $documentId");
|
||||
|
||||
// Получаем ответственного по проекту
|
||||
$query = "SELECT e.smownerid FROM vtiger_crmentity e WHERE e.crmid = ? AND e.deleted = 0";
|
||||
$stmt = $mysqli->prepare($query);
|
||||
$stmt->bind_param('i', $projectId);
|
||||
$stmt->execute();
|
||||
$result = $stmt->get_result();
|
||||
|
||||
if ($result->num_rows === 0) {
|
||||
log_message('WARNING', "Проект $projectId не найден или удален");
|
||||
return false;
|
||||
}
|
||||
|
||||
$row = $result->fetch_assoc();
|
||||
$userId = $row['smownerid'];
|
||||
|
||||
log_message('DEBUG', "Ответственный по проекту: пользователь $userId");
|
||||
|
||||
// Формируем текст уведомления
|
||||
$notificationTitle = "Письмо от $plaintiffFio - $documentTitle";
|
||||
|
||||
// Формируем ссылку на документ (VDNotifierPro убирает index.php? из ссылки)
|
||||
$documentLink = "module=Documents&view=Detail&record=$documentId";
|
||||
|
||||
// Проверяем, нет ли уже непрочитанного уведомления для этого документа
|
||||
$checkQuery = "SELECT id FROM vtiger_vdnotifierpro WHERE userid = ? AND crmid = ? AND status = 5";
|
||||
$checkStmt = $mysqli->prepare($checkQuery);
|
||||
$checkStmt->bind_param('ii', $userId, $documentId);
|
||||
$checkStmt->execute();
|
||||
$checkResult = $checkStmt->get_result();
|
||||
|
||||
if ($checkResult->num_rows > 0) {
|
||||
// Обновляем время существующего уведомления
|
||||
$existingId = $checkResult->fetch_assoc()['id'];
|
||||
$updateQuery = "UPDATE vtiger_vdnotifierpro SET modifiedtime = NOW() WHERE id = ?";
|
||||
$updateStmt = $mysqli->prepare($updateQuery);
|
||||
$updateStmt->bind_param('i', $existingId);
|
||||
$updateStmt->execute();
|
||||
|
||||
log_message('INFO', "Обновлено существующее уведомление ID: $existingId");
|
||||
return $existingId;
|
||||
} else {
|
||||
// Создаем новое уведомление
|
||||
$insertQuery = "INSERT INTO vtiger_vdnotifierpro (userid, modulename, crmid, modiuserid, link, title, action, modifiedtime, status) VALUES (?, 'Documents', ?, 0, ?, ?, '', NOW(), 5)";
|
||||
$insertStmt = $mysqli->prepare($insertQuery);
|
||||
$insertStmt->bind_param('iiss', $userId, $documentId, $documentLink, $notificationTitle);
|
||||
$insertStmt->execute();
|
||||
|
||||
$notificationId = $mysqli->insert_id;
|
||||
log_message('SUCCESS', "Создано новое уведомление ID: $notificationId для пользователя $userId");
|
||||
|
||||
return $notificationId;
|
||||
}
|
||||
}
|
||||
|
||||
// Функция для привязки документа к проекту через прямые SQL запросы
|
||||
function linkDocumentToProject($projectId, $documentId) {
|
||||
global $mysqli;
|
||||
@@ -419,6 +479,14 @@ try {
|
||||
|
||||
if ($linkSuccess) {
|
||||
log_message('SUCCESS', "Документ успешно привязан к проекту");
|
||||
|
||||
// Создаем уведомление о приходе письма
|
||||
$notificationId = createMailNotification($project_id, (int)$documentNumericId, $document_title, $plaintiff_fio);
|
||||
if ($notificationId) {
|
||||
log_message('SUCCESS', "Уведомление создано с ID: $notificationId");
|
||||
} else {
|
||||
log_message('WARNING', "Не удалось создать уведомление");
|
||||
}
|
||||
} else {
|
||||
log_message('ERROR', "Ошибка привязки документа к проекту");
|
||||
}
|
||||
@@ -435,7 +503,8 @@ try {
|
||||
'document_id' => $documentNumericId,
|
||||
'document_ws_id' => $documentWsId,
|
||||
's3_url' => $s3_url,
|
||||
'message' => 'Документ успешно создан через CRM API и добавлен к проекту'
|
||||
'notification_id' => $notificationId ?? null,
|
||||
'message' => 'Документ успешно создан через CRM API и добавлен к проекту' . ($notificationId ? ' с уведомлением' : '')
|
||||
];
|
||||
|
||||
log_message('SUCCESS', "Обработка завершена успешно: " . json_encode($result, JSON_UNESCAPED_UNICODE));
|
||||
|
||||
Reference in New Issue
Block a user