Files
crm.clientright.ru/CREATE_WEB_PROJECT_DOCS.md
Fedor cd90b0d58a feat: Добавлен инструмент генерации документов для AI Ассистента
- Создан API create_document_with_text.php для создания DOCX/XLSX/PPTX с текстом от AI
- Поддержка Markdown форматирования (заголовки, жирный, курсив, списки, код)
- Установлен PHPWord для красивого форматирования документов
- Исправлены пути сохранения (crm2/CRM_Active_Files/... без /crm/ в начале)
- Замена пробелов на подчеркивания в именах папок
- Создана документация для AI и разработчиков
- Добавлены API для работы с шаблонами Nextcloud
2025-11-12 19:46:06 +03:00

239 lines
6.8 KiB
Markdown
Raw Permalink 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.

# CreateWebProject - Документация
**Дата создания:** 01.11.2025
**Автор:** Фёдор
**Статус:** ✅ Работает и протестировано
---
## 📋 Назначение
Операция vTiger webservice для создания проекта из web-формы ERV.
**Логика работы:**
- Если проект с таким номером полиса **существует** → возвращает ID **БЕЗ обновления**
- Если проект **не существует** → создаёт новый
По аналогии с `CreateWebContact`.
---
## 🔧 Параметры
### Обязательные:
1. **policy_number** (String) - Номер полиса ERV (cf_1885)
- Пример: `E1000-123456789`
2. **contact_id** (String) - ID контакта для привязки
- Пример: `396625`
- Получается из `CreateWebContact` на шаге 1
### Опциональные:
3. **period_start** (String) - Дата начала страхования (cf_1887)
- Формат: `DD-MM-YYYY`
- Пример: `01-01-2025`
4. **period_end** (String) - Дата окончания страхования (cf_1889)
- Формат: `DD-MM-YYYY`
- Пример: `31-12-2025`
---
## 📥 Пример запроса
```bash
curl -X POST "https://crm.clientright.ru/webservice.php" \
-d "operation=CreateWebProject" \
-d "sessionName={token от login}" \
-d "policy_number=E1000-123456789" \
-d "contact_id=396625" \
-d "period_start=01-01-2025" \
-d "period_end=31-12-2025"
```
---
## 📤 Пример ответа
### Новый проект (создан):
```json
{
"success": true,
"result": "{\"project_id\":\"396865\",\"is_new\":true}"
}
```
### Существующий проект (найден):
```json
{
"success": true,
"result": "{\"project_id\":\"396865\",\"is_new\":false}"
}
```
**Важно:** `result` - это JSON-строка, требует `JSON.parse()`!
---
## 🏗️ Создаваемые поля проекта
При создании нового проекта заполняются:
| Поле | Значение | Примечание |
|------|----------|------------|
| `projectname` | `ERV {полис} цифровой адвокат` | Например: "ERV E1000-123456789 цифровой адвокат" |
| `projectstatus` | `модерация` | Статус |
| `projecttype` | `ерв урегулирование` | Тип проекта |
| `linktoaccountscontacts` | `12x{contact_id}` | Привязка к контакту |
| `cf_1994` | `11x67458` | Заявитель (контрагент) |
| `cf_1885` | `{policy_number}` | Номер полиса ⭐ |
| `cf_1887` | `{period_start}` | Период начала (опционально) |
| `cf_1889` | `{period_end}` | Период конца (опционально) |
| `assigned_user_id` | Текущий API user | Ответственный |
---
## 🔍 Логика поиска
Проект ищется в БД по запросу:
```sql
SELECT p.projectid
FROM vtiger_project p
INNER JOIN vtiger_projectcf pcf ON p.projectid = pcf.projectid
LEFT JOIN vtiger_crmentity e ON e.crmid = p.projectid
WHERE e.deleted = 0 AND pcf.cf_1885 = '{policy_number}'
LIMIT 1
```
**Поиск по:** `cf_1885` (номер полиса)
---
## 📁 Файлы
- **Handler:** `include/Webservices/CreateWebProject.php`
- **Handler Method:** `vtws_createwebproject`
- **Логи:** `logs/CreateWebProject.log`
---
## 🗄️ Регистрация в БД
### vtiger_ws_operation:
```
operationid: 51
name: CreateWebProject
handler_path: include/Webservices/CreateWebProject.php
handler_method: vtws_createwebproject
type: POST
prelogin: 0
```
### vtiger_ws_operation_parameters:
```
1. policy_number (String)
2. contact_id (String)
3. period_start (String)
4. period_end (String)
```
---
## ✅ Тестирование
### Тест 1: Создание нового проекта
```
Полис: E1000-TEST-1761990646
Contact: 396625
Результат: {"project_id":"396865","is_new":true}
Статус: ✅ Создан
```
### Тест 2: Повторный вызов с тем же полисом
```
Полис: E1000-TEST-1761990646
Contact: 396625
Результат: {"project_id":"396865","is_new":false}
Статус: ✅ Найден существующий (НЕ создан дубликат!)
```
---
## 🔗 Интеграция с n8n
### Workflow флоу (планируется):
```
1. Step1Phone → CreateWebContact
↓ contact_id
2. Step2Policy → Проверка полиса
↓ policy_number, period_start, period_end
3. n8n → CreateWebProject
POST https://crm.clientright.ru/webservice.php
{
operation: CreateWebProject,
sessionName: {token},
policy_number: "E1000-123456789",
contact_id: "396625",
period_start: "01-01-2025",
period_end: "31-12-2025"
}
4. Response → {"project_id": "396865", "is_new": false}
5. Redis session update:
claim:{claim_id} += {
project_id: "396865",
is_new_project: false
}
```
---
## 📊 Связь с CreateWebContact
| Операция | Ищет по | Создаёт если | Возвращает |
|----------|---------|--------------|------------|
| `CreateWebContact` | `mobile` (телефон) | Не найден контакт | `{contact_id, is_new}` |
| `CreateWebProject` | `cf_1885` (полис) | Не найден проект | `{project_id, is_new}` |
**Флоу:** Телефон → Контакт → Полис → Проект → Тип события → Документы → Тикет
---
## 🐛 Troubleshooting
### Ошибка: "Unknown operation requested"
**Причина:** Операция не зарегистрирована в БД.
**Решение:** Запустить `register_CreateWebProject_fixed.php` (уже выполнено).
### Ошибка: BOM символ в ответе
**Причина:** Файл CreateWebProject.php сохранён с UTF-8 BOM.
**Решение:** `sed -i '1s/^\xEF\xBB\xBF//' include/Webservices/CreateWebProject.php` (уже выполнено).
### Проект создаётся дубликатом
**Причина:** Номер полиса отличается (пробелы, регистр).
**Решение:** В коде есть `trim()`, но нет приведения к верхнему регистру. Если нужно - добавить.
---
## 📝 История изменений
**01.11.2025:**
- ✅ Создан файл CreateWebProject.php
- ✅ Зарегистрирован в БД (operationid: 51)
- ✅ Протестирован (создание + поиск)
- ✅ Закоммичен в master (af802149)
---
**Готово к использованию!** 🎉