Skip to main content
EN ID
// CASE STUDY // MANUFACTURING

Odoo 18 Sales, Staged Billing & Collections for a Fiberglass Manufacturer

A custom Odoo 18 module covering the manufacturer's order-to-cash flow: order requests, staged billing, company-specific invoices, e-Faktur handling, payment proof, income reporting and a pre-sales follow-up pipeline.

Industry Manufacturing
Engagement Client project
Tech Stack Odoo 18, Python, PostgreSQL, OCA queue_job, QWeb PDF, Docker

// Outcomes

  • Staged (termin) billing per sales order, invoiced directly from Odoo
  • Tax invoice numbers read automatically from uploaded e-Faktur PDFs
  • Pre-sales follow-ups, including WhatsApp conversations, kept on the customer record

The Challenge

The company’s way of selling and billing did not fit standard Odoo. Orders are invoiced in stages rather than in one invoice, several companies in the group issue invoices (with and without VAT), every invoice follows a company-specific number format and print layout, and pre-sales follow-ups lived mostly in WhatsApp.

Our Solution

We built a custom Odoo 18 module on top of Sales, Invoicing and the Indonesian e-Faktur localization:

  1. Staged billing schedules per sales order. Each stage creates its invoice directly, the amount is frozen once invoiced, and a revision wizard handles re-issuing. Stages can be invoiced from another company in the group, with VAT or non-VAT treatment.
  2. Invoicing rules: per-company invoice numbering, three selectable PDF invoice templates, and e-Faktur PDF upload that extracts the tax invoice number automatically. Invoice PDFs are exported to a shared file hub in the background with queue_job.
  3. Payments require an attached proof of payment, and a paid invoice automatically marks its billing stage as paid.
  4. Income report built from fully paid orders, grouped by VAT and non-VAT companies, exported to PDF and Excel. Manual corrections survive when the report is regenerated.
  5. Pre-sales follow-up pipeline with categories and follow-up intervals, daily reminders, reschedule and mark-as-lost (with reasons), and import of exported WhatsApp chats into the customer’s history.

Architecture & Stack

  • Odoo 18 with a custom module plus OCA modules (queue_job, report_xlsx, financial reports).
  • PostgreSQL 16, running with Odoo in Docker Compose.
  • QWeb for PDF documents, openpyxl for Excel exports.
  • An automated test suite run through Odoo’s test runner.

// System Screenshots

Odoo 18 Sales, Staged Billing & Collections for a Fiberglass Manufacturer — system overview

Have a similar project in mind?

Discuss your architecture and delivery timeline directly with our engineers.

Discuss your project →