Добавлена система уведомлений о приходе судебных писем

- Реализована функция createMailNotification() в simple_project_updater_v2.php
- Автоматическое создание уведомлений VDNotifierPro при поступлении документов
- Уведомления отправляются ответственному по проекту
- Исправлен формат ссылок (без index.php? для корректной работы в VDNotifierPro)
- Защита от дубликатов - обновление существующих непрочитанных уведомлений
- Добавлена документация MAIL_NOTIFICATION_SYSTEM.md
- Протестировано и работает корректно
This commit is contained in:
Fedor
2025-10-16 16:02:08 +03:00
parent ac7467f0b4
commit 0f7e8ba247
2 changed files with 211 additions and 1 deletions

View File

@@ -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));