126 lines
4.6 KiB
Markdown
126 lines
4.6 KiB
Markdown
|
|
# Решение проблемы с отображением событий в проектах
|
|||
|
|
|
|||
|
|
## Проблема
|
|||
|
|
События создавались в календаре CRM, привязывались к проектам в таблице `vtiger_seactivityrel`, но не отображались в интерфейсе проекта.
|
|||
|
|
|
|||
|
|
## Причина
|
|||
|
|
События создавались с неправильными параметрами, отличающимися от тех, что использует стандартный workflow CRM (workflow 3 "ACS Создание события на СЗ").
|
|||
|
|
|
|||
|
|
## Решение
|
|||
|
|
|
|||
|
|
### 1. Анализ workflow 3 (блок 18 "Создаем Событие")
|
|||
|
|
Изучили настройки workflow 3 из таблицы `vtiger_wfp_blocks`:
|
|||
|
|
```sql
|
|||
|
|
SELECT id, text, type, settings
|
|||
|
|
FROM vtiger_wfp_blocks
|
|||
|
|
WHERE workflow_id = 3
|
|||
|
|
ORDER BY id;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Ключевые параметры workflow (блок 18):
|
|||
|
|
- **activitytype**: `судебное заседание` (кастомный тип)
|
|||
|
|
- **eventstatus**: `Planned` (Запланировано)
|
|||
|
|
- **visibility**: `Public`
|
|||
|
|
- **contact_id**: Связь с контактом через `$(linktoaccountscontacts: (Contacts) id)`
|
|||
|
|
- **assigned_user_id**: Владелец проекта
|
|||
|
|
- **subject**: `СЗ по проекту $projectname`
|
|||
|
|
|
|||
|
|
### 2. Исправления в CreateCourtEvent_v2.php
|
|||
|
|
|
|||
|
|
#### 2.1. Статус события
|
|||
|
|
**Было:**
|
|||
|
|
```php
|
|||
|
|
$activityType = 'судебное заседание';
|
|||
|
|
$eventstatus = 'Held'; // Проведено
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Стало:**
|
|||
|
|
```php
|
|||
|
|
$activityType = 'судебное заседание';
|
|||
|
|
$eventstatus = 'Planned'; // Запланировано (как в workflow)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2.2. Получение контакта из проекта
|
|||
|
|
**Было:**
|
|||
|
|
```php
|
|||
|
|
$query = "SELECT e.smownerid, p.projectname FROM vtiger_crmentity e
|
|||
|
|
JOIN vtiger_project p ON p.projectid = e.crmid
|
|||
|
|
WHERE e.crmid = ? AND e.deleted = 0";
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Стало:**
|
|||
|
|
```php
|
|||
|
|
$query = "SELECT e.smownerid, p.projectname, p.linktoaccountscontacts FROM vtiger_crmentity e
|
|||
|
|
JOIN vtiger_project p ON p.projectid = e.crmid
|
|||
|
|
WHERE e.crmid = ? AND e.deleted = 0";
|
|||
|
|
|
|||
|
|
$contactId = $row['linktoaccountscontacts'] ?? null;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2.3. Связь события с контактом
|
|||
|
|
Добавлена запись в `vtiger_cntactivityrel`:
|
|||
|
|
```php
|
|||
|
|
// Связываем событие с контактом (если контакт указан в проекте)
|
|||
|
|
if (!empty($contactId) && $contactId > 0) {
|
|||
|
|
$sql = "INSERT INTO vtiger_cntactivityrel (contactid, activityid) VALUES (?, ?)";
|
|||
|
|
$stmt = $mysqli->prepare($sql);
|
|||
|
|
$stmt->bind_param('ii', $contactId, $eventId);
|
|||
|
|
$stmt->execute();
|
|||
|
|
log_event('SUCCESS', "Событие привязано к контакту: $contactId");
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2.4. Исправление неопределённой переменной
|
|||
|
|
**Было:**
|
|||
|
|
```php
|
|||
|
|
log_event('DEBUG', "Тип события: $activityType, Статус: $status, Тема: $eventSubject");
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Стало:**
|
|||
|
|
```php
|
|||
|
|
log_event('DEBUG', "Тип события: $activityType, Статус: $eventstatus, Тема: $eventSubject");
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Результат
|
|||
|
|
|
|||
|
|
### Структура созданного события (ID 395462)
|
|||
|
|
```
|
|||
|
|
activityid: 395462
|
|||
|
|
subject: [Бостанова ООО ЭДЭКС] Решение
|
|||
|
|
activitytype: судебное заседание
|
|||
|
|
eventstatus: Planned
|
|||
|
|
date_start: 2025-10-02
|
|||
|
|
time_start: 10:00:00
|
|||
|
|
project_id: 364118 (привязка к проекту)
|
|||
|
|
contactid: 364117 (привязка к контакту)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Связи в базе данных
|
|||
|
|
1. **vtiger_crmentity**: Основная запись события (crmid=395462)
|
|||
|
|
2. **vtiger_activity**: Данные события (дата, время, тип, статус)
|
|||
|
|
3. **vtiger_seactivityrel**: Связь события с проектом (crmid=364118, activityid=395462)
|
|||
|
|
4. **vtiger_cntactivityrel**: Связь события с контактом (contactid=364117, activityid=395462)
|
|||
|
|
|
|||
|
|
## Тестирование
|
|||
|
|
```bash
|
|||
|
|
# Проверка события в базе данных
|
|||
|
|
mysql -u ci20465_72new -pEcY979Rn ci20465_72new -e "
|
|||
|
|
SELECT a.activityid, a.subject, a.activitytype, a.eventstatus,
|
|||
|
|
a.date_start, a.time_start, s.crmid as project_id, c.contactid
|
|||
|
|
FROM vtiger_activity a
|
|||
|
|
LEFT JOIN vtiger_seactivityrel s ON a.activityid = s.activityid
|
|||
|
|
LEFT JOIN vtiger_cntactivityrel c ON a.activityid = c.activityid
|
|||
|
|
WHERE a.activityid = 395462;"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Файлы изменены
|
|||
|
|
- `/var/www/fastuser/data/www/crm.clientright.ru/CreateCourtEvent_v2.php`
|
|||
|
|
|
|||
|
|
## Дата изменений
|
|||
|
|
2025-10-17 18:45
|
|||
|
|
|
|||
|
|
## Автор
|
|||
|
|
AI Assistant (Cursor)
|
|||
|
|
|
|||
|
|
|