| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Project (project) • Discuss (mail) |
| Lines of code | 4241 |
| Technical Name |
eh_project_gantt |
| License | OPL-1 |
| Website | https://www.erpheritage.com.au/ |
| Versions | 16.0 17.0 18.0 19.0 |
Project Gantt
An original drag and drop Gantt planner for Odoo project tasks with the broad toolkit you expect, import from Excel or JSON, export to JSON, an iCalendar feed and a PNG image, full screen, zoom to fit and quick info, and the deterministic scheduling engine most lighter modules leave out, so the plan stays correct whether it is edited from the chart, a list, an import or the API.
The complete planner
Everything you expect from a Gantt, plus the scheduling engine most leave out.
Lighter modules give you a chart and a few gestures. This one gives you the whole toolkit, import, many exports, full screen, quick info and a calendar feed, on top of a rigorous server side engine with real critical path, slack, conflict detection and earned value in the Pro layer. The breadth and the depth, in one module.
- +Import a schedule from Excel or JSON through a guided wizard
- +Export to JSON and an iCalendar feed, plus a one click PNG image of the board
- +Full screen mode, zoom to fit and jump to today
- +Quick info popup with inline edit and unschedule, richer tooltips, in bar progress
- +Sort by name, start or duration, stage colour tinting and clearer day off shading
- +Deterministic server side scheduling, correct however a task was edited
- +All eight constraints including real as late as possible backward placement
- +Over constraint conflict detection that flags impossible plans
- +Effort driven scheduling, multi step undo and redo, row virtualization
- +Real critical path, total slack and earned value SPI in the Pro layer
Why this module
A real planner, not a chart wrapper.
The schedule is computed on the server, not in the browser
A pure Python engine propagates finish to start, start to start, finish to finish and start to finish dependencies with lag, enforces scheduling constraints, and projects dates across working time. Edit a task from the Gantt, a list, an import or the API and the next reschedule still produces a correct plan. The engine is unit tested in isolation.
Hand built OWL and SVG, no third party Gantt library
The renderer is original SVG with a multi tier date axis, drawn dependency links, milestone diamonds and non working shading. There is no external charting dependency, no licence entanglement and no minified bundle you cannot inspect.
Audited ORM service, record rules and isolation honoured
The client talks to the server through audited ORM methods, so access rights, record rules and multi company isolation apply automatically. Edits are staged and written in one batched call through a field whitelist. No HTTP eval, no client side configuration injection.
Planner grade scheduling
The depth you expect from a desktop planner, inside Odoo.
All eight scheduling constraints, with genuine backward placement
As soon as possible, as late as possible, must start on, must finish on, and start or finish no earlier or later than are all enforced. As late as possible runs a real backward pass that pushes a task to sit against whatever depends on it, not a relabelled forward schedule.
Impossible plans are flagged, not silently mangled
When a hard constraint cannot be met without breaking a predecessor, the task is marked as an over constraint conflict and shown with a warning on the grid and the bar, the way a desktop planner surfaces a clash instead of producing dates that quietly lie.
Add capacity and the duration compresses
Fixed effort and fixed units tasks hold the work estimate and shrink their elapsed duration as assigned capacity rises, so two people at full allocation finish a fixed effort task in roughly half the elapsed time. Normal and fixed duration tasks stay duration driven.
Full multi step undo and redo
Every move, resize, progress drag, field edit and link change records an inverse command, so you can step backward and forward through the whole editing session before you commit, with nothing cleared on save.
Row virtualization keeps big plans smooth
The grid and the SVG timeline render only the rows in the viewport and recycle them as you scroll, so a project with hundreds of tasks stays responsive rather than painting every row at once.
Keyboard and screen reader friendly
Rows, bars and toolbar controls carry ARIA roles and labels, selection is tabbable and tasks can be nudged with the keyboard, so the planner is usable without a mouse and announces itself to assistive technology.
Data interchange and workspace
Get a plan in, take it anywhere, and work the way you expect.
Bring a schedule in from Excel or JSON
A guided import wizard reads a plan from an Excel sheet or a JSON file and maps the common fields, name, dates, duration and progress, so a schedule someone built elsewhere lands in the planner without retyping, then round trips back out.
JSON, an iCalendar feed and a PNG of the board
Export the plan to JSON for another system, to an iCalendar feed that drops straight into any calendar app so the team sees milestones where they already look, or to a one click PNG image of the board for a deck or a status note.
Full screen, zoom to fit, quick info and sort
Go full screen, zoom to fit the whole plan or jump to today, open a quick info popup on a task to edit or unschedule it in place, read richer tooltips and in bar progress, and sort by name, start or duration with stage colour tinting and clear day off shading.
Day in the life
From an empty project to a scheduled plan, in a few gestures
A planner opens the Gantt, adds tasks, drags a few bars into place and connects them by dragging from one bar onto the next. They set a one day lag on a hand off, pin a fixed milestone, then press Auto Schedule. The engine orders the tasks, applies the dependencies and constraints, projects every duration across the working calendar so weekends and public holidays are skipped, and lays the plan out. The planner reviews it, nudges a pinned task with the keyboard, and presses Save, which writes every change in one audited batch and reschedules the dependents. Nothing was computed in the browser; the plan is correct on the server.
Edge cases
The cases most modules quietly ignore.
In the shipped code today, each one a place where a cheaper module silently does the wrong thing.
A dependency that would close a loop is rejected at write time with a clear message naming the two tasks, and the scheduler detects cycles before they can corrupt a plan, rather than silently producing nonsense dates.
Durations and end dates are projected across the resource calendar: a two day task that starts on a Friday lands on the following Tuesday, and a public holiday or resource leave inside a task pushes its finish out. Dates are stored in UTC and computed in the calendar local time.
A task pinned as manually scheduled keeps its exact dates while everything schedules around it, and a task with only one of its dates set has the other derived from its duration rather than being dropped.
Odoo allows a single level of subtask under a task; the planner renders the tree honestly and blocks an outdent that would turn a task into a project, instead of producing an invalid hierarchy.
What is inside
Built to do the job, end to end.
- Pure scheduling engine (engine/). An ORM free WorkingCalendar (attendance, hours per day, leaves, duration to hours) and a dependency scheduler with a forward pass, a dedicated as late as possible backward placement pass, lag maths, folding of all eight constraints, effort driven duration, over constraint conflict flagging and cycle detection. No Odoo dependency, so it is unit tested in milliseconds and reused by the Pro critical path pass.
- Audited data service (eh.gantt). An AbstractModel exposing get_gantt_data, commit_changes and auto_schedule. Reads return a JSON safe payload; writes apply a batched diff through a field whitelist, then reschedule. The OWL client never hits a raw route or evaluates a config blob.
- OWL client action (static/src/planner). A TimeScale that maps datetimes to pixels and builds the header tiers, a client model that loads, diffs and commits, and a root component that renders the tree grid and SVG timeline and handles drag, resize, link drawing, zoom and keyboard navigation.
- Model spine. project.task and project.project carry the scheduling fields and a computed, searchable WBS code; eh.project.task.link stores dependencies as readable selections with lag and a cycle guard; eh.project.task.assignment allocates users or resources by percentage.
Honest about the edges
What this does not do, so nothing surprises you.
- Critical path with slack, named baselines with variance, split task segments, the resource histogram, earned value analytics, completion notifications and the server side PDF, Excel, Microsoft Project, Primavera P6 and printable HTML exports are part of the paid Project Gantt Pro add on. This module exports to JSON, an iCalendar feed and a PNG image of the board.
- The import wizard reads Excel and JSON and maps the common fields, name, dates, duration and progress; it is not a full round trip of every column from another tool, and dependency links from an external file are best added in the planner.
- A reschedule uses one working calendar per pass (the project or global default). A per task calendar field is stored for the Pro layer; mixed calendars within a single pass are not yet resolved.
- Conflict detection flags an over constrained task that cannot satisfy a hard constraint without breaking a predecessor; it surfaces the impossible plan with a warning rather than auto resolving it, so the planner decides how to relax it.
- The planner shows project tasks. It does not replace the Odoo task form; double clicking a bar opens the standard form for fields beyond the schedule.
Odoo 19 gantt chart, project gantt view community, task dependency scheduling, as late as possible scheduling, schedule conflict detection, effort driven scheduling, undo redo gantt, drag and drop project timeline, resource calendar working time, milestone planning Odoo, work breakdown structure WBS, auto schedule project tasks, Odoo gantt planner, critical path project management, project timeline Odoo Community, finish to start dependency, gantt OWL SVG, multi project gantt, row virtualization large plans, original SVG no vendor lock in, deterministic scheduling, project scheduling engine, gantt excel import, gantt json import, import gantt from spreadsheet, gantt png export, gantt image export, gantt ical calendar export, gantt icalendar feed, gantt json export, full screen gantt, zoom to fit gantt, jump to today gantt, gantt quick info popup, sort gantt tasks
A closer look at the planner.
Plan on a real scheduleA multi project portfolio with the work breakdown tree, dependency links, milestones, a flagged over constrained task, and the full toolbar.
Import from Excel or JSONBring an existing plan in through the guided import wizard, then let the engine reschedule it on working time.
Zoom to fit the whole planOne click frames the entire schedule, with weekend shading, a today marker and dependency arrows.
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Employees (hr)
• Project (project) • Discuss (mail) |
| Lines of code | 4241 |
| Technical Name |
eh_project_gantt |
| License | OPL-1 |
| Website | https://www.erpheritage.com.au/ |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module