Skip to content
← All work

Odoo 18 manufacturing & distribution ERP for a furniture maker

Darukala ERP

An Odoo 18 ERP for a solid-wood furniture manufacturer and B2B distributor: shop-floor tablets with quality gates, a live capacity board, GST e-invoicing, credit approvals and a dealer portal.

My role: Lead ERP architect and full-stack Odoo engineer

Discuss a similar project
  • Odoo 18
  • Python
  • OWL 2.0
  • PostgreSQL 16
  • GST e-invoicing
Screenshot of Darukala ERP, odoo 18 manufacturing & distribution erp for a furniture maker, built by Anshuman Verma

Overview

Darukala ERP is an end-to-end Odoo 18.0 Community implementation for a solid-wood furniture manufacturer and multi-tier B2B dealer network in Jodhpur, Rajasthan. Thirteen custom addons cover touchscreen shop-floor execution, reactive production planning, Indian GST e-invoicing and e-Way bills, multi-tier sales and purchase approvals, a dealer self-service portal with Razorpay payments, and a migration suite for legacy data.

The challenge

A solid-wood furniture manufacturer selling through a dealer network typically runs on hand-written job cards, whiteboard scheduling, a separate accounting package for GST, and orders taken over phone and WhatsApp. Timber moisture goes unchecked until pieces warp after finishing, machine overloads surface only when deliveries are missed, dealers order beyond their credit, and e-Way bills are produced by hand.

The ERP had to bring all of this into one system that factory operators, planners, finance and dealers would each actually use, while staying compliant with Indian GST e-invoicing rules.

How it works

  1. 1Dealer order (portal)
  2. 2Credit approval
  3. 3Manufacturing order
  4. 4Shop-floor QC gates
  5. 5GST e-invoice + e-Way bill
  6. 6Razorpay payment

Architecture

The system is built on Odoo 18.0 Community with PostgreSQL 16, packaged with Docker Compose, as 13 custom addons. darukala_shopfloor provides a simplified touchscreen terminal for operators that enforces moisture and joinery inspections before completion and automatically creates high-priority rework orders when an inspection fails. darukala_production_board is an OWL 2.0 component that computes weekly capacity against scheduled work-order load for each work centre and shows live load status.

darukala_gst_einvoice implements the Indian e-invoice schema, generating the 64-character SHA-256 IRN, Base64 signed QR payloads and 12-digit e-Way bills for consignments above ₹50,000. darukala_sale_approval and darukala_purchase_approval enforce a multi-tier approval hierarchy with credit-limit checks against open ledger entries and a cron that escalates pending requisitions every 48 hours.

darukala_dealer_portal adds a /my/dealer route with ledger status, live credit limits and tier pricing, and darukala_razorpay generates payment links on invoices and reconciles them through webhooks. A Python ETL migration pipeline validates and loads legacy CSV data, and darukala_demo seeds 90 days of linked orders, manufacturing orders, pickings, invoices and payments. The project ships with business requirement documents, as-is and to-be process maps, a fit-gap matrix and architecture decision records.

What I built

Touchscreen shop-floor terminal

A high-contrast tablet interface for operators that enforces timber moisture (under 12%) and joinery tolerance checks before a work order can be completed, logging scrap and auto-scheduling priority rework when a check fails.

OWL capacity planning board

An OWL 2.0 component comparing weekly capacity (48-hour baseline) with scheduled work-order load across the factory's work centres, with green, amber and red load indicators.

Indian GST e-invoicing

Standard e-invoice schema with SHA-256 IRN generation, Base64 signed B2B QR payloads and automatic 12-digit e-Way bills for consignments over ₹50,000.

Credit and purchase approvals

A multi-tier approval hierarchy that checks credit limits against open ledger entries, puts overdue or over-limit orders on hold, and escalates pending purchase requisitions every 48 hours.

Dealer portal with Razorpay

A /my/dealer portal with live ledger status, credit limits and tier pricing (Silver 15%, Gold 22%, Platinum 30%), plus Razorpay payment links reconciled automatically by webhook.

Data migration and demo seeding

A Python ETL pipeline that reconciles legacy CSVs with validation, and a 90-day seeder that generates complete order → manufacturing → picking → invoice → payment histories.

Engineering decisions

  • Block work-order completion until quality checks pass, so defects are caught before finishing rather than after.
  • Compute capacity against load live in the browser with OWL, so planners see overloads before deadlines slip.
  • Enforce credit limits inside the sales flow with automatic holds, rather than relying on manual review.
  • Build each capability as its own addon so the system can be upgraded and extended module by module.

Results

  • 13 custom Odoo addons across manufacturing, sales, accounting and logistics.
  • Quality gates that stop defective work orders and create rework automatically.
  • GST e-invoices, signed QR codes and e-Way bills generated inside the ERP.
  • 28/28 automated test suites passing with zero lint violations.

Stack

Platform
Odoo 18.0 Community, Python 3.10+, PostgreSQL 16
Frontend
OWL 2.0 (Odoo Web Library), JavaScript ES6+, XML / QWeb
Compliance
Indian GST e-invoice (IRN, signed QR), e-Way bill generation
Integrations
Razorpay payment links and webhooks, REST / webhooks, courier integrations
Delivery
Docker, Docker Compose; 13 custom addons, 122 source files
Quality
28/28 automated test suites passing, Ruff with zero lint violations

Related services

Need something like this?

I can build a version of this for your product, your data and your stack.

Start a project