Фреймворк для создания crm

Обновлено: 04.07.2024

При создании одностраничного приложения мы должны использовать какой-то фреймворк для выполнения некоторых задач для нас, чтобы мы могли сосредоточиться на фактической функциональности. AngularJS отлично здесь подходит, потому что такие функции, как динамическая инъекция зависимостей и привязка двунаправленных данных, просто великолепны. Иногда нам также нужен какой-то сервер. Если вы выбрали PHP, то Laravel может быть вашим лучшим вариантом, так как с ним легко и довольно эффективно работать.

Введение

В этом учебном пособии вы создадите простую систему управления клиентами и транзакциями с возможностью добавления и удаления транзакций и клиентов. Это, вероятно, не та вещь, которую вы делаете очень часто, но она продемонстрирует вам, как использовать функции обеих фреймворков.

Прежде чем начать, вы должны настроить базу данных MySQL, которую мы будем использовать (Laravel поддерживает многие из них, но это все еще самая популярная). Вам не нужен какой-либо веб-сервер, так как мы будем использовать встроенный PHP-модуль (но имейте в виду, что это решение предназначено только для разработки и никогда не должно использоваться на продакшене - в нем не хватает многих функций, необходимых для вашего публичного приложения). Для этого нам понадобится PHP версии не ниже 5.4.0.

Подготовка

Первое, что нам нужно сделать, это установить Laravel. Полный процесс подробно описан на веб-сайте Laravel. После этого вы должны создать каталог проекта со всеми файлами Laravel. Перейдите в этот каталог в командной строке и выполните там следующую команду:

Если все идет хорошо, вы должны увидеть, что локальный сервер разработки был запущен на locahost:8000 . Откройте ваш браузер и перейдите туда, вы должны увидеть страницу приветствия Laravel:

first_run
first_run
first_run

Теперь мы можем перейти к фактическому приложению.

Миграции и модели

Модели в Laravel такие же, как и в любом другом фреймворке MVC. Он использует Eloquent ORM для облегчения работы для вас - вам, вероятно, никогда не понадобится снова писать SQL запрос (по крайней мере до тех пор пока вам не понадобится что-то такое, что Eloquent не поддерживает). Используя миграции, вы можете изменить структуру базы данных с возможностью отката изменений, если что-то пойдет не так. Вы можете больше узнать о миграциях в документации.

В нашем приложении мы будем использовать две модели:

  • Customer - будет хранить данные клиента
  • Transaction - будет содержать информацию о транзакции

Начнем с создания миграций для них. Если вы еще этого не сделали, выключите сервер, который мы запустили ранее (Ctrl + C).

Клиенты

Сначала вызовите эту команду:

Это создаст файл миграции с базовой структурой для вас. Теперь перейдите в app/database/migrations . Должен быть файл с его именем, начинающийся с метки времени и заканчивающейся «create_customers_table». Laravel автоматически создал эту базовую структуру для вас. Метод up() вызывается, когда применяется миграция, и down() при его откате.

Сначала вызовите метод Schema::create() . Он принимает два аргумента - имя схемы и функцию обратного вызова:

Обратный вызов выполняется при создании таблицы. Объект таблицы передается как переменная $table , и мы может менять ее структуру. Давайте добавим автоматически увеличивающееся поле id :

Далее для имени, фамилии и электронной почты клиента будут три строковых поля:

Мы делаем поле email уникальным, вызывая метод unique() .

Последний метод предназначен для временных меток:

Это создаст два поля даты в схеме: created_at и updated_at . Они будут использоваться Eloquent для хранения времени, когда элемент был создан и обновлен.

Наконец, код должен выглядеть так:

Метод down() будет намного проще - он просто удаляет схему:

Транзакции

Код здесь будет похож на клиентский. Сначала вызовите эту команду:

Теперь найдите соответствующий файл в app/database/migrations и откройте его. Как и раньше, начните с создания схемы:

Теперь добавьте поля для идентификатора, имени транзакции, ее стоимости и идентификатора клиента, которому она принадлежит:

И, конечно, отметки времени:

Окончательный код должен выглядеть следующим образом:

И теперь метод down() :

Настройка базы данных

Теперь, прежде чем применять миграции, вам нужно будет настроить соединение с вашей базой данных. Откройте файл app/config/database.php и перейдите к строке 55. Вот данные конфигурации для MySQL (там немного других, например, вы можете использовать SQLite или Postgres):

После того, как вы заполнили это, вы можете двигаться дальше. Убедитесь, что вы сохранили файл и вызываете эту команду из основного каталога приложения (с файлом artisan в нем):

Вот и все. Если ошибок не было, это означает, что таблицы были успешно созданы. Вы можете подключиться к своей db, используя, например, phpMyAdmin, чтобы проверить все вручную.

Модели

В Laravel создание модели после того, как вы настроили свою базу данных с помощью миграции, происходит очень быстро. Перейдите в app/models и удалите пример файла User.php , который там уже есть. Теперь создайте два файла с именем Customer.php и Transaction.php .

Начнем с Customer.php . Каждая модель в Laravel должна наследоваться от класса Eloquent :

Теперь мы определим отношения между клиентом и их транзакциями. Это делается путем определения публичного метода в модели с именем свойства, которое мы хотели бы иметь в нем (в данном случае transactions ):

Теперь в теле функции будет только одна строка:

Это сообщает Eloquent, что он должен предоставлять все транзакции с идентификатором клиента customer_id в рамках свойства, называемого transactions .

Теперь мы сделаем практически то же самое для транзакций, но мы изменим соотношение, чтобы сделать владельца транзакции доступным через свойство customer :

Это делается с использованием метода модели $this->belongsTo() .

Контроллеры

Теперь, чтобы использовать модели, мы должны создать для них контроллеры. Перейдя к каталогу app/controllers , удалите только HomeController.php - BaseController.php важен, так как наши контроллеры расширяют его. Теперь создайте два файла: CustomerController.php и TransactionController.php .

CustomerController

Этот контроллер будет обрабатывать все, что связано с клиентами, - добавление, удаление и отображение списка из них. Начните с определения класса:

Методы getIndex() , postIndex() , deleteIndex() и т.д. будут сопоставлены с маршрутом по умолчанию (в данном случае /customers ).

Теперь давайте определим наш первый маршрут - получив клиента по его id:

Ищите пользователя в базе данных, используя этот идентификатор:

Каждый метод контроллера должен возвращать значение, которое является строкой, или имеет метод __toString() . В этом случае возвращаемая модель Customer будет преобразована в JSON перед отправкой.

Теперь давайте вернем список всех пользователей (это будет доступно по маршруту /customers/all ):

Как вы можете видеть, мы можем получить всех клиентов используя метод all() у модели.

Теперь самая длинная часть, добавим нового клиента:

Сначала давайте проверим, была ли предоставлена вся необходимая информация. Мы можем сделать это, используя метод Input::has() :

Поместим все поля ввода в переменную $input , чтобы избежать вызова Input::get() снова и снова. Это можно сделать с помощью Input::all() :

Теперь мы, наконец, создаем новую модель Customer и наполняем ее с предоставленными данными:

После этого мы можем сохранить вновь созданную модель и ответить на запрос с ней:

Здесь мы обрабатываем случай, если не все данные были предоставлены:

Наконец, нам также нужна способность удалять клиентов. Это действительно короткий сценарий:

Мы начинаем с получения идентификатора клиента:

Затем мы ищем и удаляем клиента:

После этого мы отвечаем на запрос с предоставленным идентификатором:

Теперь, прежде чем маршруты будут доступны, мы должны их подключить. Откройте файл app/routes.ph p, удалите все, кроме комментария, и добавьте эту строку в конец файла:

Это позволит Laravel направлять все запросы к /customers нашему CustomerController . Теперь вы можете использовать CURL, чтобы поиграть с ним. Сначала запустите сервер с помощью php artisan serve , а затем вы можете, например, создать клиента:

Затем вы можете получить список всех клиентов:

TransactionController

Это, подобно модели, очень похоже на CustomerController . Сначала создайте класс:

Затем давайте определим метод для получения всех транзакций для пользователя:

Как вы можете видеть, мы используем отношения, определенные ранее для получения транзакций (теперь вспомните запрос, который вы должны были написать, чтобы достичь того же, используя простые PHP и SQL).

Следующим шагом будет создание транзакций:

Как и раньше, мы проверяем, предоставлена ли вся необходимая информация:

Если это так, назначьте ее переменной $input :

Проверьте, не пусто ли какое-либо из значений, и если да, возвращаем ошибку:

Теперь создайте транзакцию и наполните ее всей предоставленной информацией:

Теперь нам нужно добавить ее к соответствующему клиенту. Давайте найдем его по предоставленному id и добавим $transaction в список его транзакций:

Это делается с помощью метода transactions->save() , предоставленного Laravel. Теперь мы можем ответить с созданной транзакцией:

И обработать случай, когда ни один или не все данные были предоставлены:

После этого существует также способ удалить транзакцию так же, как мы удалили клиента:

Теперь просто добавьте маршрут, и вы можете протестировать контроллер с помощью CURL:

Вывод

Хорошо, это конец первой части - во второй части этого урока мы создадим front-end, используя AngularJS. Не стесняйтесь добавлять дополнительные функции в свое приложение (например, редактирование клиентов или сортировку), если вы не нашли нужную информацию, поищите в документации Laravel.

создать кастомную CRM

Как эффективно управлять крупной компанией не используя CRM систему — представить, мягко говоря, очень сложно. Современный рынок предлагает множество CRM-решений, адаптированных под разные индустрии и размеры бизнеса. Почему все же стоит выбрать CRM, разработанную индивидуально для вашей компании?

В мире существует множество готовых CRM-систем для автоматизации процессов в компаниях разного размера. Одна из самых популярных систем 2016 года — SalesForce, доступна в более чем 20 конфигурациях — это готовые решения для банков, больниц, автоматизации продаж и т.д. Несмотря на богатый функционал CRM, крупные клиенты SalesForce используют несколько решений, чтобы удовлетворить нужды своей компании. Aston Martin, например, использует четыре продукта: Sales Cloud, Marketing Cloud, Salesforce1 Mobile App и Chatter. При чем, только эксплуатация Sales Cloud для энтерпрайз клиента обходится в $160-$320 за пользователя в месяц.

Почему стоит заказать кастомную CRM

Преимущества кастомной CRM

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

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

Особенности разработки CRM

Типографика CRM системы для строительной компании

Что учесть при разработке CRM системы

CRM: пользовательское решение

1. Удобство

Время — деньги. Сотрудники не должны тратить время на поиск нужного раздела или информации, важные документы должны быть под рукой. Также пользователям CRM должно быть удобно создавать отчеты, коммуницировать друг с другом и с клиентами непосредственно в системе.

«CRM должна иметь дружественный интерфейс, быть доступной с любого девайса и предоставлять возможности для подготовки отчетности.» - Сьюзан Коннор, президент и управляющий CRM-стратегиями, SquareBlue Consulting.

2. Сложность

В зависимости от размера и специфики бизнеса, будут разниться функции CRM системы и набор технологий, при помощи которых она будет реализована. Создавая CRM для строительной компании мы выбрали современный надежный фреймворк Symfony2. Также использовали RESTful API для легкой масштабируемости и Ember.js — приложения на данном фреймворке легко расширять и поддерживать. Проект CRM создавался по принципу Single Page Application — это позволило создать богатый пользовательский интерфейс и в разы сократить время ожидания отклика — приложения SPA не требуют перезагрузки страницы при обновлении данных, плюс они могут работать в режиме offline с элементами realtime.

3. Гибкость

Ваша будущая CRM система должна быть достаточно гибкой, чтобы обеспечить возможность изменения настроек под определенный процесс. Также стоит заранее подумать о масштабируемости системы, чтобы она могла расти вместе с вашей компанией, и не возникало необходимости в новом решении.

«Идеальная CRM — интуитивно-понятная, в тоже время достаточно гибкая, чтобы обеспечить возможность легкого управления лидами и автоматизирования работы с каждым клиентом.» — Кенни Клейн, управляющий партнер JAKK Solutions.

4. Совместимость

Помимо аналитических инструментов, заложенных в вашу будущую CRM систему, стоит также продумать подключение сторонних ресурсов. Например, интеграцию с телефонией, мессенджерами, бухгалтерскими программами, почтой и т.д.

5. Надежность

В CRM будут храниться важные данные: базы клиентов, информация по сделкам, отчеты, продуктивность сотрудников и т.д. CRM система должна быть разработана таким образом, чтобы данные были защищены от стороннего вмешательства. Стоит позаботиться и об уровнях доступа для разных групп сотрудников.

Определяем цели и задачи CRM системы

Цели и задачи системы работы с клиентами

Пожалуй, основная цель внедрения CRM — привлечение новых клиентов и оптимизация рабочих процессов внутри компании. Задачи могут варьироваться, в зависимости от специфики отрасли. Мы приводим список наиболее общих задач:

  • трекинг лидов и их активности;
  • ведение базы клиентов;
  • оптимизация работы с клиентами;
  • организация бизнес операций;
  • управление взаимоотношениями внутри команд;
  • оптимизация совместной работы разных отделов;
  • повышение продуктивности труда.

Тщательный анализ целей и задач, а также расставление приоритетов поможет спроектировать CRM систему с оптимальным набором функций.

Почему стоит разработать мобильное приложение для CRM

мобильное приложение для CRM

Если для взаимодействия внутри команды, веб-версии сервиса еще может быть достаточно, то при работе с клиентами мобильное приложение для CRM необходимо как воздух. В командировке, в дороге, даже на переговорах — доступ к системе обеспечит возможность постоянно быть на связи, иметь под рукой необходимую информацию и оперативно вносить изменения.

Крайне важно, чтобы приложение корректно работало и не дало сбоя в важный момент, поэтому мы не рекомендуем использовать кроссплатформенную разработку. Нативное приложение под Android или iOS, хоть и будет стоить дороже, станет надежным дополнением к веб-версии CRM и поможет еще более повысить эффективность от автоматизации работы.

Определяем MVP для CRM

MVP для CRM

Область применения CRM системы можно условно разделить на два направления:

1. Взаимодействие с клиентами

В основном, включает в себя телефонные звонки, Email-переписку, информационные рассылки и встречи. Первые три задачи нужно автоматизировать, чтобы сформировать историю взаимоотношений с клиентами. Минимальный набор функций для направления:

  • интеграция с телефонией, e-mail и sms сервисами
  • база клиентов, адресов, телефонов с удобным фильтром
  • возможность трекинга взаимоотношений с клиентами
  • возможность генерации отчетов по работе с клиентами
  • календарь со встроенными нотификациями, для внесения информации по будущим встречам

Взаимодействие между сотрудниками

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

  • уровни доступов для разных категорий сотрудников
  • календарь со встроенными нотификациями, чтобы руководитель мог уведомлять о новостях подчиненных
  • возможность постановки и контроля задач
  • возможность прикрепления файлов в задачу
  • коммуникация внутри задачи
  • метки готовности задачи и ее приоритета
  • генерация отчетов по загрузке

В зависимости от специфики и размеров бизнеса, вам могут потребоваться еще много других возможностей. Создание CRM системы, которая поможет автоматизировать работу компании и вывести бизнес на новый уровень потребует значительных финансовых и временных затрат. Однако результат окупиться в довольно краткие сроки — статистика сообщает, что внедрение CRM повышает эффективность продаж до 29%.

Читайте также: