{"id":14277,"url":"\/distributions\/14277\/click?bit=1&hash=17ce698c744183890278e5e72fb5473eaa8dd0a28fac1d357bd91d8537b18c22","title":"\u041e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0442\u0440\u044b \u0431\u0435\u043d\u0437\u0438\u043d\u0430 \u0438\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u044f","buttonText":"\u041a\u0430\u043a?","imageUuid":"771ad34a-9f50-5b0b-bc84-204d36a20025"}

Что нам стоит мост построить: веб-приложение для строительных компаний, которые возводят мосты

Мостовой переход через реку Кама

С чего все начиналось

Всем привет. Меня зовут Евгений Шараев, в этой статье я хочу рассказать о веб-приложении для строительной организации.

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


10 лет назад я окончил магистратуру РУДН, а затем долгое время работал в строительной отрасли - управлял строительными проектами (строил мосты, если проще). Сделав неплохую карьеру, пожил в США, выучил английский (попробуй не выучи, если живешь среди носителей) и недавно получил возможность заняться новым для себя делом. Речь идет о программировании - я давно уже хотел опробовать себя в этой сфере.

Раньше выучиться на кодера не получалось, поскольку постоянно ездил по всей стране по работе, заседал на скучных совещаниях и вот это все.

Поэтому в итоге ушел из отрасли, найдя себе преемника, и, наконец, погрузился в изучение программирования - выбрал я Python. Выбор сделал, поскольку он применяется почти везде, а учился на курсах GeekBrains, плюс готовился самостоятельно.

В общем, на курсе командной разработки Agile/scrum, мне удалось убедить своих коллег - однокурсников объединиться в команду для написания веб-приложения для мостостроителей. Проект этот кстати постоянно дорабатывается, он все еще вовсе не концепт, но уже работает.

​Вывод всех проектов (опубликованных) в виде галереи

Коротко о главном

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

​Частично заполненная карточка проекта

Редактировать карточку могут только пользователи из раздела "Менеджеры проекта", им по сигналу выдаются права на редактирование полей таблицы этого объекта объекта, а также связанных моделей: менеджеры, контрагенты, технологии строительства. Добавлять/удалять менеджеров для проектов может только суперюзер

Целевая аудитория проекта

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

​Вход на сайт, сброс пароля по ссылке на почту, регистрация, вход через ВК, Facebook. В проекте еще вход через Instagram

Немного технических нюансов

Одно из самых трудоемких в реализации было как раз приложение по работе над проектами (projectsapp). Сложным оно получилось потому, что эта модель связана с большим количеством других моделей. По каждой из зависимых моделей нужно было реализовать механизм CRUD (create, read, update, delete), так, чтобы экземпляр главной модели, данные о пользователе и многая другая информация передавалась в виде instance.

Изначально все это казалось очень сложным, но реализовать удалось за неделю.

Вторая проблема - это ограничение доступа к инструментам CRUD на уровне объекта (экземпляра класса). Как оказалось, Джанго из коробки не предоставляет разграничение прав доступа на уровне объекта, а делает это только на уровне модели, то есть открывает и закрывает доступ сразу ко всем объектам. Создание групповых прав и объединение юзеров в группы оказалось неудобным в применении, поскольку для этого обычному юзеру пришлось бы лезть в штатную админку. Проблема была решена с помощью приложения django-guardian.

Оно позволило раздавать конкретным юзерам права на конкретный объект, а использование сигналов post_save при сохранении связанной модели менеджера помогло автоматизировать процесс выдачи прав, не заходя в админку. Интересной фичей также была работа над картой всех проектов с помощью JavaScript API. Теперь, если при сохранении экземпляра класса проекта юзер добавляет его координаты (или вносит их при редактировании), то проект динамически появляется на карте. Ярлычок на карте также позволяет перейти обратно в карточку проекта.

Кроме этого было применено много других приложений и библиотек для удобной работы сайта: использовалось API Facebook и ВК для регистрации на сайте, django-imagekit для получения миниатюр фото (а также подрезки их под шаблон css для их правильного хранения), slugify при генерации слагов для хлебных крошек.

Как это выглядит и работает?

Сайт состоит из четырех основных разделов: технологии, услуги, проекты и наука. Есть и функционал в кабинете

Главный раздел сайта - работа с проектами, это отдельный projectsAP. Вывод списка объектов реализован в виде галереи или карт.

Количество объектов и объем характеристик зависит от статуса пользователя. У суперюзера есть возможность изменять характеристики объекта и - главное - он может формировать команду проекта, назначая роли участникам.

Обычный пользователь может редактировать объект, но в меньшем объеме, чем суперюзер. И только те объекты, членом команды которых он является.

Права пользователей можно изменять. Так им можно позволять или запрещать добавление или удаление проектов, редактирование проектов и их удаление.

В карточке каждого проекта указываются:
⦁ Статус - разработка, экспертиза, аукцион, строительство, сдача, выплата, завершен.
⦁ Координаты.
⦁ Контрагенты.
⦁ Члены команды.

Также можно добавлять список работ для объекта, фотографии материалов и работ, плюс снимки технических решений.

Конечно, можно добавлять и документы: описание исследований, техническую документацию и прочее.

У каждого из пользователей системы есть личный кабинет и карточка профиля.

Проблемы и решения

Как и в любом проекте, наши проблемы делятся на два типа: технические и организационные.

Что касается технических, их немного, и они были относительно незначительными. Так, поначалу у нас был лишь небольшой опыт работы с гитом и GitHub, поэтому пришлось наверстывать, изучая важные нюансы.

Организационные - это руководство проектом. К слову, управление строительным проектом и разработкой веб-приложения - вещи, близкие по своей сути. Для того, чтобы довести статус нашего веб-приложения до MVP за 1 месяц мне понадобился весь опыт работы проект-менеджера и практически все мое время.

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

Планы на будущее

В будущем мы планируем разработать профессиональную соцсеть для инженеров строительной отрасли. Очень многие инженеры и просто любители интересуются мостами. В Facebook есть тематические сообщества только лишь по мостам. А если объединить эту тему с другими объектами, включая небоскребы, дамбы, порты и т.п., то получится весьма интересный ресурс.

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

Если есть желание связаться с нами, это можно сделать вот здесь: @U_geen (telegramm)

0
5 комментариев
Владимир Карулин

Ресурс, который объединяет дорожников и мостовиков, профессионалов и интересующихся, в виде олд-скульного форума существует 20 лет.
С интересом посмотрим на ваш публичный проект. Интересная задумка.

Ответить
Развернуть ветку
Фабрика деда Мороза

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

Ответить
Развернуть ветку
Eugene Sharaev
Автор

Спасибо за интерес, Владимир. Надеюсь у нас хватит сил и времени довести все до конца

Ответить
Развернуть ветку
Eugene Sharaev
Автор

Спасибо большое за пожелания. Есть мысли сделать что-то между презентацией и научно-техническим справочником с историческими очерками. Что-то наподобие wiki-мост. Собрать сообщество действительно не проблема, есть несколько профессиональных объединений которым это могло бы быть интересно 

Ответить
Развернуть ветку
Фабрика деда Мороза

Если за это будут платить большие компании, то имеет право на жизнь. В противном случае - нет. Научный контент сложный без спонсоров в окупаемости. Проанализируйте периодику и книги по мостостроению.

Ответить
Развернуть ветку
2 комментария
Раскрывать всегда