Внутренняя CRM/ERP-платформа для мебельного производства и учёта ТМЦ
Краткое описание
Разрабатывал внутреннюю систему на Yii2 для управления справочниками компании, сотрудниками, контрагентами и движением ТМЦ. Это была доменная модель внутренней CRM/ERP-платформы для мебельного производства и связанных процессов: кадровый блок, юридические лица, контрагенты, права доступа, инвентарь, приходы, передачи, возвраты и списания.
Проект представлял собой внутреннюю рабочую систему с несколькими доменными модулями и собственной архитектурой интерфейса на базе моих Yii2-плагинов.
Что решал проект
Проект был нужен, чтобы уйти от разрозненного учёта сотрудников, компаний, оборудования и документов движения ТМЦ. Система должна была дать единое рабочее пространство, где можно:
- вести сотрудников, роли и доступы;
- хранить данные по компаниям, контрагентам, подразделениям и реквизитам;
- учитывать инвентарь и оборудование;
- фиксировать приход, передачу, возврат и списание ТМЦ;
- видеть, у кого, где и в каком состоянии находится инструмент или другое имущество;
- разделять доступ и данные по ролям, компаниям и ответственным лицам.
Основные модули системы
security- пользователи, роли, права доступа и RBAC-структура.staff- сотрудники, профили, должности, подразделения, контактные данные.counterparty- компании, контрагенты, отделы, функции, банковские данные и счета.gds- основной контур учёта ТМЦ: каталог, карточки ТМЦ, производители, локации, документы движения.data- служебные справочники и общие данные, например телефоны и файловые сущности.company- подготовленные CRM-сущности для лидов, клиентов, подрядчиков, партнёров и поставщиков.
Что было реализовано
- Внутреннее Yii2-приложение с модульной структурой и разделением доменных зон по бизнес-функциям.
- Система пользователей с привязкой к профилям сотрудников, ролям и правам доступа.
- RBAC-модель с ролями уровня администратора, руководителей и прикладных пользователей.
- Учёт сотрудников с привязкой к компании, контрагенту, подразделению и функции.
- Хранение дополнительных кадровых данных, включая паспортные данные сотрудников и контактные телефоны.
- Справочники юридических лиц, контрагентов, подразделений, банковских данных и счетов.
- Контур учёта ТМЦ с карточками инвентаря, серийными номерами, производителями, стоимостью, гарантией, состоянием и доступностью.
- Иерархический каталог ТМЦ и справочники локаций.
- Документный контур движения ТМЦ с приходами новых ТМЦ, передачами, возвратами и списаниями.
- Фиксация получателя или места передачи ТМЦ: сотрудник, участок, объект, компания или сервис.
- Отображение текущего держателя и текущей локации ТМЦ на основе последнего документа движения.
- Фильтрация и ограничение данных по компании пользователя и по ролям доступа.
- Системные статусы сущностей: актуальные, заблокированные, удалённые, неактуальные, проведённые и непроведённые.
- Аудит изменений через
created_by,updated_by,checked_by, временные метки и статусы документов. - Подготовленная пользовательская история и пользовательские настройки, что показывает направление в сторону более зрелой внутренней платформы.
Технически со стороны web
- Построил приложение как модульную Yii2-систему, где каждая предметная область вынесена в свой модуль с собственными моделями, контроллерами, представлениями и поисковыми моделями.
- Настроил единый интерфейс приложения на базе AdminLTE и своих собственных Yii2-плагинов для навигации, таблиц, динамических гридов, modal-форм и дерева каталогов.
- Реализовал внутреннюю навигацию уровня ERP: сотрудники, юрлица, контрагенты, банковские данные, кадровый учёт, каталог ТМЦ и документы движения.
- Использовал расширенные таблицы и динамические гриды для рабочих списков с фильтрацией, настройкой колонок, экспортом и более удобной работой внутренних пользователей.
- Встроил иерархические структуры для каталогов и справочников через tree/jstree-подход.
- Реализовал формы создания и изменения сущностей с разными сценариями использования моделей.
- Настроил мультиязычность
ru/en, pretty URL, пользовательский форматтер дат и чисел, а также тематизацию интерфейса. - Связал пользовательские действия с системой прав доступа, чтобы разные роли видели только разрешённые разделы и данные своей компании.
- Построил навигацию и сценарии работы под реальные внутренние роли: IT, АХО, снабжение, бухгалтерия, конструкторский блок и руководители.
Технически со стороны бизнес-логики
- Реализовал ActiveRecord-модели с большим количеством доменных связей между сотрудниками, компаниями, контрагентами, ТМЦ и документами движения.
- Использовал
TimestampBehaviorиBlameableBehaviorдля автоматического аудита изменений. - Построил сценарии работы моделей для создания, редактирования, поиска и отдельных действий над сущностями.
- Реализовал вычисляемые состояния и представления для ТМЦ: статус, состояние, наличие, держатель, локация, гарантия и системный статус.
- В документах движения предусмотрел разные типы назначения: передача сотруднику, на участок, на объект, в компанию или в ремонт/сервис.
- Ограничил доступ к данным на уровне запросов в зависимости от роли пользователя и принадлежности к компании.
- Подготовил CRM-сущности верхнего уровня для лидов, клиентов, подрядчиков, партнёров и поставщиков, что показывает направление развития системы за пределы одного только складского/инвентарного контура.
- Движение ТМЦ было спроектировано не как один общий статус, а как полноценный документный контур с детализацией по операциям и отдельными сущностями для документов и строк документов.
Использование собственных библиотек
Отдельно важно, что в проекте использовались мои собственные Yii2-пакеты:
igor162/yii2-adminlteigor162/yii2-navigor162/yii2-gridigor162/yii2-dynagridigor162/yii2-modaligor162/yii2-multiselectigor162/yii2-removebutton-widgetigor162/yii2-jstree-inputigor162/yii2-jstree-widgetigor162/yii2-tag-dependency-helper
Проект был не только прикладной системой, но и средой, в которой мои собственные reusable-компоненты использовались в реальном внутреннем продукте.
Моя роль
Моя роль была полной: от проектирования архитектуры внутренних модулей и пользовательского интерфейса до реализации моделей, контроллеров, справочников, учёта ТМЦ, документов движения и интеграции собственных Yii2-плагинов в рабочую систему.
Практическая ценность проекта
Этот кейс показывает опыт:
- разработки внутренней CRM/ERP-системы, а не только отдельных страниц или CRUD;
- проектирования модульной архитектуры на Yii2;
- построения ролей и разграничения доступа;
- автоматизации учёта инвентаря и движения ТМЦ;
- разработки интерфейсов для внутренних пользователей;
- использования и развития собственных reusable-компонентов в реальном проекте.