Odoo Integration, Construction Operations[Launched]

Будівельна операційка в Odoo

Будівельна операційка в Odoo preview

Архітектура системи //

Odoo 19Odoo OnlinePythonXML-RPCAsana APIGoogle DriveCallRail APIRingCentral APIGmail OAuthContact Form 7

1. Огляд проєкту

Клієнт — будівельна компанія в Канаді, яка продає та веде довгі construction-проєкти: від першого ліда і estimate до permits, demolition, construction, invoices, final meeting і warranty documents

До старту Odoo вже була обрана як цільова система, але реальна операційка жила в Asana, Google Drive, Google Sheets, Gmail, телефонії, формах сайту й ручних таблицях. Завдання було зібрати це в одну керовану систему без важкого кастому і без переїзду на окремий сервер

Моя роль була integration architect та hands-on implementer: розібрати поточні процеси, спроєктувати Odoo 19 Enterprise architecture, мігрувати історію, зберегти контекст роботи команди й запустити базову операційну модель у короткий термін

2. З чим прийшов клієнт

CRM була розірвана між каналами: ліди приходили з реклами, форм сайту, телефонії, email і Asana, але не збирались в одну чисту pipeline-логіку
Asana була фактично операційною системою: продажі, активні будівельні проєкти, задачі, коментарі, дедлайни, вкладення й стадії жили поза Odoo
Google Drive тримав важливий контекст: drawings, work orders, invoices, dashboards, spreadsheets і client folders були потрібні команді щодня, але не були нативно пов'язані з Odoo records
Будівельні проєкти мали довгі цикли: кожен проєкт проходив 10-15 етапів, і менеджерам потрібні були зрозумілі stage-и, deadlines, dependencies та Gantt
Оцінки й пропозиції жили в Excel/Sheets: ціни, packages, concrete pads, insulation, drywall, optional items і GST треба було перенести в sales process
Платформні обмеження були частиною задачі: клієнт вирішив лишатися на Odoo Online, тому інтеграції треба було робити обережно, без Odoo.sh, без серверного bridge там, де це не було погоджено

3. Поставлені завдання

Налаштувати Odoo 19 Enterprise як центральну систему для CRM, Sales, Projects, Documents і Gantt
Перенести sales pipeline з Asana в Odoo CRM без втрати стадій, історії та прив'язки до джерел
Синхронізувати active construction projects, задачі, deadlines і stage architecture з Asana в Odoo Projects
Перенести comments, authorship, attachments і історичний контекст з Asana в Odoo chatter
Відтворити Google Drive document structure в Odoo Documents і прив'язати ключові файли до проєктів та задач
Перевести частину spreadsheet-процесів у Odoo Documents / live spreadsheets, де це було технічно виправдано
Налаштувати базовий шлях lead intake: site forms, CallRail, RingCentral, Gmail і Odoo CRM
Запустити sales-to-project flow: коли угода доходить до signed stage, Odoo створює project і переносить операційку в execution layer

4. Рішення та хід роботи

System Setup & CRM Architecture

Проведено аудит Odoo 19 Enterprise setup, Asana workspace, Google Drive structure, active pipelines і ручних таблиць
Побудовано XML-RPC integration bridge для контрольованої міграції та повторюваних імпортів
Створено custom fields для dedupe: `x_asana_gid` на `crm.lead` і `project.task`, окремі ID-поля для imported comments, attachments, CallRail і RingCentral events
CRM stages очищено та синхронізовано з реальною sales pipeline, а rogue stages перенесено або прибрано
Імпорт зроблено інкрементальним: скрипти могли запускатися повторно, не створюючи дублікати й не перезаписуючи живі дані

Asana to Odoo Project Migration

Повністю витягнуто 21 Asana board і перенесено 1,253 tasks у `project.task`
Оригінальні Asana sections динамічно мігрували в `project.task.type`, щоб Odoo stage-и відповідали мові команди, а не абстрактній дефолтній схемі
Для 7 активних construction projects виставлено власний порядок стадій, бо різні проєкти мали різну операційну логіку
30 унікальних project stages синхронізовано 1:1 з Asana, зайві Odoo stages прибрано
Дати задач і дедлайни приведено до Gantt-ready формату, а там, де можливо, додано залежності між етапами

Comments, Attachments & Historical Context

Перенесено 497 Asana comments в Odoo chatter зі збереженням авторства, дати створення та читабельного HTML-body
Завантажено 437 physical attachments і прив'язано їх до відповідних task threads через `ir.attachment`
Для видалених або недоступних Asana users додано fallback logic, щоб історія не ламалась і не перетворювалась на безіменні system messages
Реалізовано HTTP 429 exponential backoff, щоб обійти rate limits Odoo/Asana без втрати даних і ручного перезапуску процесу

Documents, Drive & Construction Files

Відтворено Google Drive hierarchy всередині Odoo Documents: project folders, work orders, drawings, invoices, dashboards і coordination materials
Імпортовані файли не просто лежали в системі, а були пов'язані з конкретними projects/tasks, щоб команда могла працювати з ними в операційному контексті
Частину Excel/Sheets-документів протестовано на conversion flow у live spreadsheets, щоб залишити знайомий табличний формат там, де він справді корисний
Для drawings, estimates і фінансових документів налаштовано логіку пошуку та прив'язки до потрібних будівельних карток

Lead Intake, Calls & Website Forms

CallRail API перевірено і підключено до Odoo: дзвінки створюють нові CRM leads або доповнюють існуючі записи за телефоном
RingCentral call log інтегровано як базовий CRM intake layer з dedupe через call ID
Website forms на Contact Form 7 підключено до Odoo CRM через email alias, щоб заявки з сайту одразу створювали lead
Gmail OAuth налаштовано та протестовано для ключових поштових акаунтів, outbound email працював через корпоративну адресу
Історичний email backfill і глибокий phone-event timeline свідомо винесено в майбутній upgrade scope через обмеження Odoo Online і рішення клієнта

Sales, Estimates & Project Automation

Підготовлено products/services для estimate flow: garage package, concrete pad, insulation, drywall, permits та optional items
Податкову логіку налаштовано під Alberta GST 5%, без PST
Спроєктовано quotation flow, де менеджер може збирати комерційну пропозицію з операційних позицій, а не копіювати дані між таблицями
Додано automated action: коли угода переходить у signed/confirmed стан, Odoo створює project і переводить продаж у execution layer

5. Що отримав клієнт

Єдина Odoo-система для CRM, Sales, Projects, Documents, Gantt і базового communication intake
21 Asana board, 1,253 tasks, 497 comments і 437 attachments перенесені в Odoo без руйнування історичного контексту
Sales pipeline, active projects і construction stages більше не живуть окремо в Asana
Команда отримала project workflow з реальними будівельними етапами, deadlines, dependencies і Gantt-візуалізацією
Документи з Google Drive стали доступні всередині Odoo там, де відбувається робота: на задачах, проєктах і операційних картках
Дзвінки, site forms і email intake отримали базовий шлях у CRM без ручного перенесення даних
Архітектура залишилась сумісною з Odoo Online, без зайвого кастому і без примусового апгрейду платформи

6. Технічний результат

Цей кейс був про дисципліновану інтеграцію, а не про написання великого кастомного модуля. Найважливішим було не просто імпортувати дані, а зберегти структуру, авторство, історію, залежності й щоденну логіку роботи будівельної команди

В результаті Odoo стала не ще одним інструментом поруч з Asana і Drive, а центральним операційним місцем, де продаж переходить у проєкт, проєкт тримає документи й задачі, а нові звернення з сайту та телефонії одразу потрапляють у CRM

Маєте схожий вузол, який пора розв'язати?

Надійні системи не народжуються з балачок. Давайте розберемо, як точна інженерія може повернути темп вашому продукту