| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Project (project) • Discuss (mail) • Sales (sale_management) • Employees (hr) |
| Lines of code | 2227 |
| Technical Name |
service_profit_analytics |
| License | LGPL-3 |
| Website | https://github.com/chalermchaic/odoo-profit |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Project (project) • Discuss (mail) • Sales (sale_management) • Employees (hr) |
| Lines of code | 2227 |
| Technical Name |
service_profit_analytics |
| License | LGPL-3 |
| Website | https://github.com/chalermchaic/odoo-profit |
Service Profit Analytics
Project & client profitability intelligence for IT companies, agencies, and consulting firms — built on Odoo 17 Community.
All data comes from your existing Odoo Projects, Timesheets, and Invoices. Install, configure in 2 minutes, and your numbers appear immediately.
Screenshots
Dashboard — YTD KPIs, top projects, at-risk list, trend chart
Project Profitability — colour-coded list view
Project Profitability — pivot table
Client Profitability — aggregated across all projects
Billable Utilization — per employee per month
Setup Wizard — one-click presets for IT / Agency / Consulting
Key Reports
Project Profitability
Lifetime Revenue vs Cost vs Margin per project. Colour-coded list (red / orange / green), pivot, bar chart. Smart buttons drill into invoices & timesheets.
Project P&L by Period
Monthly breakdown of every project. Quick-filter by this month / last month / quarter / year. Pivot: projects × months.
Client Profitability
Aggregated revenue, cost, margin, and unbilled cost per client across all their projects. Bar chart view included.
Billable Utilization
Employee × project × month breakdown. Shows billable hours, non-billable hours, and utilization %. Pivot: people × months.
Dashboard
A single-page OWL dashboard shows YTD revenue, cost, margin, and utilization KPIs; top projects by revenue; projects at risk (negative margin or unbilled cost exposure); and a 6-month Revenue vs Cost trend chart. Built with Odoo 17 OWL 2 — no extra dependencies.
Technical Highlights
- Date-effective cost rates: PostgreSQL
LATERALjoin onspa.employee.cost.rate— one record per employee per rate period. Historical reports stay accurate even after rate changes. - Odoo 17 JSONB analytic distribution: Reads the
analytic_distributionJSONB column directly, so revenue is correctly prorated when one invoice line covers multiple analytic accounts. - Unbilled cost indicator: Surfaces projects where work has been done but not yet invoiced — the silent profitability killer.
- Non-invasive: Zero changes to standard Odoo models. Pure read-only SQL views on top of existing data.
- Multi-company ready: All SQL views and record rules
partition by
company_id. - 3-tier security: SPA User / Team Lead (own projects only) / Manager (full access + configuration).
- PDF report: QWeb-based Project Profitability PDF — printable summary with logo and financial totals.
Setup (2 minutes)
- Install the module — no database changes to existing tables.
- Open Configuration → Setup Wizard and pick your business type (IT / Agency / Consulting) to auto-fill margin thresholds.
- Add employee hourly cost rates under Configuration → Employee Cost Rates.
- Confirm your projects have Analytic Accounts and invoices are posted against them.
- Open the Dashboard — data appears immediately.
Dependencies
project hr_timesheet sale_timesheet account analytic base_setup
Compatibility
Tested on Odoo 17.0 Community (PostgreSQL 14+). Requires Python 3.10+.
Email: odoo@momosoft.com | GitHub: github.com/chalermchaic/odoo-profit
Bug reports and feature requests are welcome via GitHub Issues.
Please log in to comment on this module