# Работа с лидами и управление статусами

## 1. Введение

### 1.1 Цель главы

В этой главе мы вместе научимся реализовывать в NocoBase конвертацию сделок CRM. Через работу с лидами и управление их статусами Вы сможете повысить эффективность бизнеса и тоньше контролировать процесс продаж.

### 1.2 Превью результата

В предыдущей главе мы рассмотрели, как связывать данные лидов с компаниями, контактами и сделками. Теперь сосредоточимся на модуле лидов и обсудим, как вести работу с ними и управлять статусами. Сначала посмотрите на демонстрацию:
![](https://static-docs.nocobase.com/202502250226-transfer3.gif)

## 2. Структура Collection лидов

### 2.1 О Collection лидов

В работе с лидами поле «status» играет ключевую роль: оно отражает текущее состояние лида (не квалифицирован, новый, в работе, в подогреве, в сделке, завершено) и при этом управляет отображением и логикой формы. Ниже в табличном блоке представлена структура полей Collection лидов с подробным описанием:


| Field name     | Отображаемое название | Field interface  | Description                                                              |
| -------------- | --------------------- | ---------------- | ------------------------------------------------------------------------ |
| id             | **Id**                | Integer          | Первичный ключ                                                            |
| account_id     | **account_id**        | Integer          | Внешний ключ ACCOUNT                                                      |
| contact_id     | **contact_id**        | Integer          | Внешний ключ CONTACT                                                      |
| opportunity_id | **opportunity_id**    | Integer          | Внешний ключ OPPORTUNITY                                                  |
| name           | **Имя лида**          | Single line text | Имя потенциального клиента                                                |
| company        | **Компания**          | Single line text | Название компании потенциального клиента                                  |
| email          | **Email**             | Email            | Email-адрес потенциального клиента                                        |
| phone          | **Телефон**           | Phone            | Контактный телефон                                                        |
| status         | **Статус**            | Single select    | Текущий статус (не квалифицирован, новый, в работе, в подогреве, в сделке, завершено) |
| Account        | **Компания**          | Many to one      | Связь с Collection компаний                                               |
| Contact        | **Контакт**           | Many to one      | Связь с Collection контактов                                              |
| Opportunity    | **Сделка**            | Many to one      | Связь с Collection сделок                                                 |

## 3. Создание блока таблицы Leads и блока деталей

### 3.1 Описание

Сначала создадим блок таблицы «Leads» для отображения нужных полей. В правой части страницы настроим блок деталей: при клике на запись справа автоматически появится подробная информация. Пример настройки:
![](https://static-docs.nocobase.com/20250226090009.png)

## 4. Настройка кнопок действий

### 4.1 Общее описание кнопок

Чтобы покрыть все нужды, создадим всего 11 кнопок. Каждая отображается по-разному (скрыта, активна, заблокирована) в зависимости от статуса записи (status), направляя пользователя по правильному бизнес-процессу.
![20250226173632](https://static-docs.nocobase.com/20250226173632.png)

### 4.2 Подробная настройка функциональных кнопок

#### 4.2.1 Кнопка редактирования

- Правило связности: когда status записи равен «Completed» (Завершено), кнопка автоматически блокируется, чтобы предотвратить лишние правки.

#### 4.2.2 Кнопка «Не квалифицирован» 1 (неактивная)

- Стиль: заголовок «Unqualified >».
- Действие: при клике выполняется update, status записи становится «Unqualified», после успешного обновления — возврат на предыдущий уровень и вывод сообщения «Unqualified».
- Правило связности: показывается только когда status пустой; как только у status появляется значение, кнопка автоматически скрывается.

#### 4.2.3 Кнопка «Не квалифицирован» 2 (активная)

- Стиль: тоже «Unqualified >».
- Действие: обновляет status записи на «Unqualified».
- Правило связности: при пустом status кнопка скрыта; при «Completed» — заблокирована.

#### 4.2.4 Кнопка «Новый лид» 1 (неактивная)

- Стиль: заголовок «New >».
- Действие: при клике обновляет запись, выставляя status в «New», после чего показывается сообщение «New».
- Правило связности: если status уже находится в одном из состояний «New», «Working», «Nurturing» или «Completed», кнопка скрывается.

#### 4.2.5 Кнопка «Новый лид» 2 (активная)

- Стиль: заголовок «New >».
- Действие: тоже обновляет status на «New».
- Правило связности: при status «Unqualified» или пустом — скрыта; при «Completed» — заблокирована.

#### 4.2.6 Кнопка «В работе» (неактивная)

- Стиль: заголовок «Working >».
- Действие: при клике status обновляется на «Working», выводится сообщение «Working».
- Правило связности: если status уже «Working», «Nurturing» или «Completed», кнопка скрыта.

#### 4.2.7 Кнопка «В работе» (активная)

- Стиль: заголовок «Working >».
- Действие: обновляет status на «Working».
- Правило связности: при status «Unqualified», «New» или пустом — скрыта; при «Completed» — заблокирована.

#### 4.2.8 Кнопка «В подогреве» (неактивная)

- Стиль: заголовок «Nurturing >».
- Действие: при клике status обновляется на «Nurturing», выводится сообщение «Nurturing».
- Правило связности: если status уже «Nurturing» или «Completed», кнопка скрыта.

#### 4.2.9 Кнопка «В подогреве» (активная)

- Стиль: заголовок «Nurturing >».
- Действие: обновляет status на «Nurturing».
- Правило связности: при status «Unqualified», «New», «Working» или пустом — скрыта; при «Completed» — заблокирована.

#### 4.2.10 Кнопка «Конвертировать»

- Стиль: заголовок «transfer», открывает модальное окно.
- Действие: основная функция — выполнить операцию переноса записи. После обновления появляется интерфейс с шторкой, табами и формой для удобной работы.
- Правило связности: когда status записи равен «Completed», кнопка скрыта во избежание повторного переноса.
  ![](https://static-docs.nocobase.com/20250226094223.png)

#### 4.2.11 Кнопка «Конвертация выполнена» (активная)

- Стиль: заголовок «transfered», тоже открывает модальное окно.
- Действие: только для просмотра информации после конвертации, без возможности редактировать.
- Правило связности: показывается только при status «Completed»; при других статусах («Unqualified», «New», «Working», «Nurturing» или пустом) — скрыта.
  ![](https://static-docs.nocobase.com/20250226094203.png)

### 4.3 Итог по настройке кнопок

- Для каждой функции есть отдельные стили кнопок в неактивном и активном состоянии.
- Через правила связности динамически управляем видимостью (скрытие/блокировка) кнопок по status записи, направляя продавца по правильному рабочему процессу.

## 5. Правила связности формы

### 5.1 Правило 1: показывать только имя

- Когда запись не подтверждена или status пустой, показывается только имя.
  ![](https://static-docs.nocobase.com/20250226092629.png)
  ![](https://static-docs.nocobase.com/20250226092555.png)

### 5.2 Правило 2: оптимизация отображения для статуса «Новый лид»

- При status «Новый лид» страница скрывает название компании и показывает контактные данные.
  ![](https://static-docs.nocobase.com/20250226092726.png)

## 6. Правила Markdown и синтаксис Handlebars

### 6.1 Динамические тексты

На странице с помощью синтаксиса Handlebars выводим разные подсказки в зависимости от статуса. Примеры кода:

Когда статус «Не квалифицирован»:

```markdown
{{#if (eq $nRecord.status "Не квалифицирован")}}
**Отслеживайте информацию по неквалифицированным лидам.**  
Если лид не интересуется продуктом или ушёл из своей компании, он может быть неквалифицированным.  
- Фиксируйте уроки на будущее  
- Сохраняйте детали взаимодействия и контакты  
{{/if}}
```

Когда статус «Новый лид»:

```markdown
{{#if (eq $nRecord.status "Новый лид")}}
**Определите, какие продукты или услуги нужны для этой возможности.**  
- Соберите кейсы, рекомендации или конкурентный анализ  
- Подтвердите ключевых стейкхолдеров  
- Определите доступные ресурсы  
{{/if}}
```

Когда статус «В работе»:

```markdown
{{#if (eq $nRecord.status "В работе")}}
**Передайте решение стейкхолдерам.**  
- Донесите ценность решения  
- Согласуйте сроки и бюджет  
- Совместно с клиентом спланируйте, когда и как заключить сделку  
{{/if}}
```

Когда статус «В подогреве»:

```markdown
{{#if (eq $nRecord.status "В подогреве")}}
**Согласуйте план внедрения проекта.**  
- При необходимости заключите договорённости  
- Соблюдайте внутренние правила скидок  
- Получите подписанный контракт  
{{/if}}
```

Когда статус «Конвертация выполнена»:

```markdown
{{#if (eq $nRecord.status "Конвертация выполнена")}}
**Подтвердите план реализации проекта и финальные шаги.**  
- Убедитесь, что все оставшиеся договорённости и подписи на месте  
- Соблюдайте внутреннюю политику скидок  
- Убедитесь, что контракт подписан и реализация идёт по плану  
{{/if}}
```

## 7. Отображение связанных объектов после конвертации и переходов по ссылкам

### 7.1 О связанных объектах

После конвертации мы хотим отображать связанные объекты (компанию, контакт, сделку) и ссылки для перехода к их детальным страницам. Внимание: в других всплывающих окнах или страницах последняя часть формата ссылки (число после `filterbytk`) — это ID текущего объекта. Например:

```text
http://localhost:13000/apps/tsting/admin/w3yyu23uro0/popups/ki0wcnfruj6/filterbytk/1
```

### 7.2 Генерация ссылок через Handlebars

Для компании:

```markdown
{{#if (eq $nRecord.status "Завершено")}}
**Account:**
[{{$nRecord.account.name}}](http://localhost:13000/apps/tsting/admin/w3yyu23uro0/popups/ki0wcnfruj6/filterbytk/{{$nRecord.account_id}})
{{/if}}
```

Для контакта:

```markdown
{{#if (eq $nRecord.status "Завершено")}}
**Contact:**
[{{$nRecord.contact.name}}](http://localhost:13000/apps/tsting/admin/1oqybfwrocb/popups/8bbsqy5bbpl/filterbytk/{{$nRecord.contact_id}})
{{/if}}
```

Для сделки:

```markdown
{{#if (eq $nRecord.status "Завершено")}}
**Opportunity:**
[{{$nRecord.opportunity.name}}](http://localhost:13000/apps/tsting/admin/si0io9rt6q6/popups/yyx8uflsowr/filterbytk/{{$nRecord.opportunity_id}})
{{/if}}
```

![](https://static-docs.nocobase.com/20250226093501.png)

## 8. Скрытие связанных объектов с сохранением значений

Чтобы после конвертации связанные данные корректно отображались, у полей «Компания», «Контакт» и «Сделка» нужно установить состояние «Скрыть (сохранить значение)». Тогда поля не будут отображаться в форме, но их значения будут записаны и переданы.
![](https://static-docs.nocobase.com/20250226093906.png)

## 9. Защита от изменения статуса после конвертации

Чтобы случайно не поменять статус после конвертации, ко всем кнопкам добавляем условие: при статусе «Завершено» все кнопки блокируются.
![](https://static-docs.nocobase.com/20250226094302.png)

## 10. Заключение

После выполнения всех шагов функциональность работы с лидами и их конвертации готова! Через эту главу мы постарались наглядно показать, как в NocoBase реализуется связное изменение состояний и формы. Удачной работы!
