F
Fand_igor

Внутренняя 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-adminlte
  • igor162/yii2-nav
  • igor162/yii2-grid
  • igor162/yii2-dynagrid
  • igor162/yii2-modal
  • igor162/yii2-multiselect
  • igor162/yii2-removebutton-widget
  • igor162/yii2-jstree-input
  • igor162/yii2-jstree-widget
  • igor162/yii2-tag-dependency-helper

Проект был не только прикладной системой, но и средой, в которой мои собственные reusable-компоненты использовались в реальном внутреннем продукте.

Моя роль

Моя роль была полной: от проектирования архитектуры внутренних модулей и пользовательского интерфейса до реализации моделей, контроллеров, справочников, учёта ТМЦ, документов движения и интеграции собственных Yii2-плагинов в рабочую систему.

Практическая ценность проекта

Этот кейс показывает опыт:

  • разработки внутренней CRM/ERP-системы, а не только отдельных страниц или CRUD;
  • проектирования модульной архитектуры на Yii2;
  • построения ролей и разграничения доступа;
  • автоматизации учёта инвентаря и движения ТМЦ;
  • разработки интерфейсов для внутренних пользователей;
  • использования и развития собственных reusable-компонентов в реальном проекте.