Постановка задачи:
Добавить новое поле в базу данных CRM, для учета новой тарифной опции.
Как сделали:
Добавили поле в базу данных с помощью SQL-миграции, добавили код в интерфейс клиента для выставления опции.
В чем была проблема:
- Не добавили вывод этого поля в CRM и не добавили возможность редактирования этого поля из CRM.
или
- Не сделали отдельного интерфейса для администратора или менеджера, чтобы изменять это поле.
или
- Не написана инструкция, как изменять это поле менеджеру другим способом.
В итоге менеджер не может изменить клиенту опцию и вынужден каждый раз звать программиста для изменения данных.
Также менеджер не может в CRM посмотреть все клиентские опции, не прибегая к спец.выгрузкам данных в csv.
Как нужно было сделать:
Добавить необходимое поле сначала в интерфейс CRM (средствами CRM), а уже потом это поле использовать из кода вебки клиента.
<wrap lo>Можно сформулировать правило, что все такие поля должны быть видимы менеджеру и изменяемы им самостоятельно.
О безопасности (вдруг менеджер там что-то наменяет) - думать не нужно, т.к. менеджеру потом это придется самостоятельно исправлять.
А аудит изменений - нужен. И вообще, be verbose.</wrap>
Доп. проблема:
Использование спец. форматов данных в полях. Нужно было добавить доп. тарифные поля.
Как сделали:
Добавили поле tariff_options типа json: ['ip', 'ipr']. Чтобы в будущем можно было легко добавлять нужные опции.
В чем проблема:
Проблема в том, что тип поля json не поддерживается веб-интерфейсом CRM. В итоге, менеджеру будет сложно вносить изменения.
Можно выводить json в виде поля-строки, но тут другая проблема: вероятность что менеджер (не являясь технарем) напишет json с ошибкой, что приведет к фантомным багам в коде - очень велика.
Как нужно было сделать:
Добавить отдельное поле для каждой опции.
~~OWNERAPPROVE~~ /*Не удаляйте эту строку и ниже!*/
{(rater>id=1|name=Прочитал_правила_разработки:как_не_надо_делать:2021-07-07_все_пользовательские_данные_в_учетных_системах_должны_быть_доступны_для_ручного_изменения_администратором|type=vote|trace=user|tracedetails=1)}