# Gantt View for Projects

> A real Gantt chart for Odoo Community: auto-schedule with MS Project constraints, drag to reschedule, links by drag, critical path and float, subtasks, portfolio, workload in hours, baseline, MS Project / Excel / PDF in and out.

- **What it is:** A real Gantt chart for Odoo Community: auto-schedule with MS Project constraints, drag to reschedule, links by drag, critical path and float, subtasks, portfolio, workload in hours, baseline, MS Project / Excel / PDF in and out.
- **For:** Project
- **Odoo versions:** 16.0, 17.0, 18.0, 19.0, 20.0 - Community and Enterprise
- **Runs on:** Odoo.sh or Odoo you host yourself - not Odoo Online, which accepts no third-party apps
- **Price:** 249 EUR, one-time, on the Odoo Apps Store
- **Technical name:** bambooforge_gantt
- **Not for:** Bars snap to whole days; this is a planning chart, not a time clock.; The scheduler is a forward pass: it packs early and never levels resources. Two people over capacity are shown in red, not fixed.; The critical path and float weigh each bar by its length in days and do not model resource contention.; Progress is a manual percentage - honest and simple; it does not try to guess from timesheets.; Grouping by assignee shows each task under its first assignee.; A parent task's dates are its own; nothing is rolled up.
- **Manual:** https://docs.bambooforge.dev/bambooforge_gantt/
- **Live demo:** https://demo20.bambooforge.dev/odoo/action-bambooforge_gantt.action_bf_gantt
- **Store page:** https://apps.odoo.com/apps/modules/20.0/bambooforge_gantt
- **Manual last updated:** 2026-10-15

---
# Gantt View for Projects

Community Odoo plans projects in lists and kanbans; the schedule lives in
somebody's head. This app draws it — and lets you drag it.

## What you get

- A **Gantt timeline** over your existing tasks: one bar per task, grouped
  by project or by assignee, zoomed by day, week, month or quarter - or
  **Fit**, which sizes the whole plan to the window - with weekend shading
  and a dashed *today* line. The chart opens scrolled to today.
- **Drag to reschedule** - grab a bar and move it whole days; grab either
  edge to stretch or shrink it. A plain click opens the task. **Undo**
  puts the last move back, successors included.
- **Automatic successor shifting**: when a moved task would now overlap a
  task that depends on it, the dependent is pushed to start where its
  predecessor ends - keeping its duration - and so on down the chain.
- **Auto-schedule**: one button packs every open task as early as its
  dependencies, its constraints and the working calendar allow, the way
  MS Project's automatic mode does.
- **Schedule constraints** on a task - *Start No Earlier Than*, *Must
  Finish On* and the rest of the MS Project set - drawn as a pin under
  the bar, red when the bar breaks them.
- **Dependency arrows** drawn from Odoo's own task dependencies, typed
  (FS, SS, FF, SF) with a lag; **draw a new one by dragging** the handle
  at the end of a bar onto another bar, **click an arrow to remove it**.
- **Critical path** and **float**: the chain that decides the end date
  turns red; every other task's tooltip says how many days it can slip.
- **Subtasks** nested under their parent at any depth, folded with a
  caret; **summary bars** on every project row; a **Portfolio** view
  with one bar per project.
- **Baseline**: freeze the plan, draw it under the live bars, read the
  slip in days. **Progress line**: a zig-zag against today that shows
  what is behind and what is ahead at a glance.
- **Deadlines** as a flag on the bar, red once missed, with a count in
  the toolbar; **colour by** project, stage, assignee or deadline.
- **Workload in hours**: one row per person, one cell per day, the hours
  laid on them against the hours the calendar gives them - red when over.
- **Files in and out**: export PNG, a printed PDF schedule, Excel, CSV or
  **MS Project XML**; import MS Project XML, Excel or CSV into a project.
- **Milestones** as diamonds on the project row (green once reached);
  company closing days shaded like weekends; double-bookings flagged.
- Built from scratch in OWL and SVG. No bundled Bryntum/dhtmlx builds, no
  extra JavaScript licence, nothing phoning home.

## Install

1. Install **BambooForge Project Gantt** (depends on Project only).
2. A **Gantt** menu appears in the Project app, and every project form gets
   a **Gantt** smart button scoped to that project.
3. To see dependency arrows, enable **Task Dependencies** on the project.
4. Set the project's **start date** if you want *Auto-schedule* to pack the
   plan from it; without one it packs from the earliest bar.

## Where the dates come from

The chart draws its own pair of fields — *Gantt Start* and *Gantt End* on
the task (visible under *Extra Info → Gantt Schedule*). They are deliberately
separate from the deadline: re-planning the schedule does not silently move
the commitment you gave the customer.

The first time a task appears on the chart with no schedule, it gets a
sensible one:

- **Start**: the assignment date, else the creation date — at 08:00.
- **Length**: the allocated hours at 8 h/day; else up to the deadline;
  else three days.

After that the fields belong to you — the chart, the task form and any
automation all write the same two fields.

## Moving tasks

- **Drag the bar** to move it, whole days at a time (the time of day is
  kept, so a task that starts at 08:00 keeps starting at 08:00).
- **Drag an edge** to change the duration.
- If tasks depend on the one you moved and would now overlap it, they are
  pushed right, keeping their durations, cascading down the dependency
  chain. Tasks that already start after their predecessor ends are left
  alone - a planned gap is your business, not the chart's. A pushed task
  never lands before its own *Start No Earlier Than*.
- **Undo** (the arrow next to *Auto-schedule*) restores the bars of the
  task you moved and of everything the move pushed. Thirty steps deep.
- Dependency cycles (possible via imports) are detected: the shift stops
  instead of looping forever, and the critical path is simply not shown.

## Constraints and the automatic scheduler

A task carries a **schedule constraint** (*Extra Info → Gantt Schedule*):

- *As Soon As Possible* - the default; the scheduler may put it anywhere
  its predecessors allow.
- *Start No Earlier Than* / *Finish No Earlier Than* - a fence: the
  scheduler will not pull it before the date.
- *Start No Later Than* / *Finish No Later Than* - a deadline for the
  scheduler: it cannot force it, but it reports the breach.
- *Must Start On* / *Must Finish On* - pinned. The bar goes on the date
  even if a predecessor ends after it, and the chart shows the clash.

A constraint is drawn as a small pin under the bar (blue; red when the
bar breaks it), the row label turns red, the toolbar counts the breaches,
and the tooltip states the rule.

**Auto-schedule** runs a forward pass in dependency order over the open
tasks on the chart: a task with no predecessor starts at the project's
start date (else at the earliest bar of the plan); every other task
starts at the latest of its predecessors' targets - finish-to-start,
start-to-start, lag and lead all honoured - and its own fence; the start
snaps to a working day; the duration is kept. Closed tasks are not
moved: they are history, and they still anchor what depended on them. A
banner lists any constraint that could not be honoured. The button is
one Undo step.

## Links drawn on the chart

Hover a bar: a small circle appears at its end. **Drag it onto another
bar** and that task now depends on this one (finish-to-start; open the
task to change the type or add a lag). A link that would make a loop is
refused with both task names in the message. **Click an arrow** and
confirm to remove the dependency - the typed row and Odoo's own link go
together.

## Subtasks and the portfolio

Sub-tasks sit under their parent, indented, at any depth; the caret in
the row label folds them. A parent's bar keeps a darker outline; its own
dates stay its own - the chart does not roll children up into the parent,
because a parent whose dates are computed cannot be planned.

Every project row carries a **summary bar**: earliest start to latest end
of its tasks, the done part filled, progress weighted by duration. Switch
the grouping to **Portfolio** and only those rows remain - every project
on one timeline, a percentage next to each - and a click on a summary
opens that project's own chart.

## Critical path and float

Tick **Critical path** and the chain of dependent tasks with the largest
total duration turns red - bars and arrows. That chain decides the project
end date: shorten anything on it and the project ends earlier; shorten
anything off it and nothing happens. The computation runs server-side on
the tasks currently displayed.

Every linked task's tooltip also states its **float**: the days it can
slip before the end date moves, from the classic forward and backward
pass over durations and lags. Zero float is the critical path.

## Progress line and deadlines

Tick **Progress line** and a line runs down from today, bending left to
every bar whose progress strip has not reached today (behind) and right
to every bar that is ahead. It is the one picture a steering meeting
needs.

A task's **deadline** is a flag on its bar; it turns red once the bar
ends after the deadline or the deadline has passed with the task open,
the row label gets a warning mark and the toolbar counts them. Colour
the bars **by deadline** to see green (time left), amber (three days or
fewer) and red (missed) across the whole plan.

## Workload in hours

Tick **Workload** and one row per person appears under the chart, one
cell per day. A task's hours (its allocated hours, else eight for every
working day it covers) are spread evenly over the working days it spans
and over its assignees; the cell compares that with the hours the
company calendar gives that day. Light green is half a day or less,
amber a full day, red more than the day has - and the row label counts
the days a person is over.

## Files in and out

**Export** offers five shapes of the tasks on the chart:

- **PNG** - the chart as drawn, row labels included.
- **PDF** - a printed schedule table: WBS, task, dates, working days,
  progress, people, predecessors by WBS, slip against the baseline; the
  critical path marked.
- **Excel** and **CSV** - one row per task with every column the chart
  knows, predecessors written the MS Project way (`12FS+2`).
- **MS Project XML** - the mspdi schema that Project, Primavera P6,
  ProjectLibre and GanttProject open: outline levels, links with type and
  lag, constraints, deadlines, baselines, resources and assignments.

**Import** reads the same three files into a project: rows become tasks
with their bars, progress, people (matched by name), predecessors and
constraints; outline levels, indented names or a WBS column become
sub-tasks. A row whose name matches an open task updates it instead of
creating a second one, so a plan can go out to Excel and come back.

## Limits, stated plainly

- Bars snap to whole days; this is a planning chart, not a time clock.
- The scheduler is a forward pass: it packs early and never levels
  resources. Two people over capacity are shown in red, not fixed.
- The critical path and float weigh each bar by its length in days and
  do not model resource contention.
- Progress is a manual percentage - honest and simple; it does not try to
  guess from timesheets.
- Grouping by assignee shows each task under its first assignee.
- A parent task's dates are its own; nothing is rolled up.

## What changed in 2.0

- **Auto-schedule** and **schedule constraints** - the seven-type MS
  Project set - with breaches drawn, counted and listed.
- **Links by drag**, removal by click, loops refused by name.
- **Float** in every tooltip; **subtasks** at any depth with folding;
  **summary bars** and a **Portfolio** grouping.
- **Progress line**, **deadline flags** with an overdue count, **colour
  by** stage, assignee or deadline; **Quarter** zoom and **Fit**;
  full-screen; a search box; grid lines that switch off.
- **Workload in hours** against the calendar's capacity, replacing the
  task count.
- **Export** to PDF, Excel, CSV and MS Project XML; **import** from all
  three. **Undo**, thirty steps. **Clear baseline**.

## What changed in 1.1

- **People on the chart.** The project manager sits on the project row
  (avatar and name); every bar carries its assignee's avatar.
- **Double-bookings surface themselves.** One person, two open tasks,
  overlapping days: the bars get a warning stroke, the overlap window is
  shaded on the assignee lane, the toolbar counts the conflicts and can
  filter to them - and the tooltip names the colliding task.
- **Working calendars.** Durations count working days on the company
  calendar: bars start on a workday, hour-based lengths skip weekends and
  closing days, moved or pushed tasks never restart on a holiday, and
  company closing days are shaded like weekends.

## What changed in 1.2

- **Baseline.** One button freezes today's schedule; a toggle draws the
  frozen bars under the live ones and the tooltip states the slip in
  days. Re-planning stops erasing the promise it is measured against.
- **Workload heatmap.** A toggle adds one row per person under the chart,
  one cell per day: green one task, amber two, red three or more - who
  can take more work is a glance.

## What changed in 1.3

- **Typed dependencies.** A dependency can now say *how* two tasks are
  tied - finish to start (the default), start to start, finish to finish
  or start to finish - and carry a lag in working days, negative for a
  lead. Rescheduling honours the relationship, the arrows leave and land
  at the right ends, and anything other than a plain finish-to-start is
  labelled on the link (`SS+2`, `FF`, `FS-3`).
- **Export to PNG.** One button rasterises the chart, row labels
  included, for the status report or the site notice board.

## How we make sure it works

Before every release, **78 automated checks** run against this app on Odoo 16, 17, 18, 19 and 20.
Among them:

- Dependency cannot be self.
- The schedule is not behind developer mode.
- Import msproject from another tool.
- Auto schedule must start on wins and is flagged.
- Workload without hours assumes a day of eight.

The complete list is in the source you receive.

## Questions people ask

****Which Odoo versions does it run on?****

Odoo 16.0, 17.0, 18.0, 19.0, 20.0, on the series you buy it for; each series is its own listing.

****Community or Enterprise?****

Both. It needs no Enterprise app.

****What does it need?****

The standard Project app. No extra Python package.

****Where does it show up?****

Under the **Gantt** menu.

****Does anything leave my server?****

No. It makes no call outside your Odoo server: no telemetry, no licence check, no third-party service.

****What happens if I uninstall it?****

Odoo drops the app's own tables and fields; the standard records it worked on (contacts, orders, products) stay as they are.

## Support

[support@bambooforge.dev](mailto:support@bambooforge.dev) — answered within two business days.
This module is licensed OPL-1; one purchase covers one production database
plus its staging copies.
