Новости

Тендерная площадка для девелоперов: кейс разработки на Python

Backend
Заказчик: разработчик ПО и консалтинговая компания для девелоперов (NDA).
Проект: веб-площадка для проведения тендеров: девелоперы ищут подрядчиков.
Стек разработки: Python, PostgreSQL, Pyramid, SQLAlchemy, Docker.
Команда разработки: 7 бэкенд- и 2 фронтенд-разработчика

Старт проекта

Как работает программный продукт. Заказчики публикуют описание своего объекта и требования к выполнению работ — смету. Подрядчики заполняют её своими данными и выставляют на тендер. Система автоматически оценивает соответствие условий подрядчиков требованиям заказчиков и выбирает наиболее оптимальный по стоимости вариант.
Исходная ситуация:
  • Пользователи взаимодействовали вручную. Заказчик составлял в Excel табличный документ Ведомость и загружал его в систему. Ведомость — это строительная смета, где подробно описаны этапы и виды работ, используемые материалы, объёмы, цены, а также есть множество изменяемых параметров, которые влияют на итоговую стоимость. Подрядчики скачивали документ, заполняли и вновь загружали на платформу.
  • Легаси-код. До выхода нашего разработчика проект был заморожен, команда полностью обновлена, поэтому необходимо было самостоятельно изучить существующий код и на ходу разбираться в процессах.
Запрос: быстро перезапустить проект, автоматизировать взаимодействие заказчиков и подрядчиков, упростить работу пользователей с документами.

Задачи, ключевые и наиболее трудоёмкие:

Задачи нашего разработчика в основном касаются оптимизации работы с ведомостью. Что уже выполнено:
Задачи нашего разработчика в основном касаются оптимизации работы с ведомостью. Что уже выполнено:

1. Реализовано редактирование ведомости через веб-интерфейс.

  • Раньше изменение ведомости было возможно только через экспорт/ импорт. Теперь пользователи-заказчики могут вносить некоторые изменения в смету прямо в браузере. При этом если добавляются новые строки, то вложенная нумерация проставляется автоматически и всегда корректно — а в таблице Excel с этим были трудности.

2. Переработан механизм экспорта/импорта ведомости объёмов работ из Excel.

  • Раньше в документе было фиксированное количество атрибутов к строке, а сейчас можно добавить неограниченное их число. Настроено управление доступом к этим атрибутам: можно давать права на чтение или на изменение.

3. Добавлен расчёт промежуточных итогов.

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

4. Изменён механизм сопоставления строк в версиях ведомости.

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

5. Обновлён механизм округления объёмов и цен.

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

6. Доработаны стандартные и индивидуальные отчёты, которые пользователь может сформировать в системе.

7. Проведён code-review всей команды.

Результат

  • проект успешно перезапущен;
  • оперативно доработан и обновлён функционал — например, ключевая задача по переработке механизма экспорта/импорта заняла 6 недель;
  • качественно и быстро исправляются баги;
  • оптимальное распределение нагрузки в команде.
У вас есть задачи для Python-программистов? Узнайте, чем мы сможем помочь