For about a year Iโ€™m working on a prototype of a matrix widget for OpenERP. This component was sponsored by my employer Smile and is currently used in production by two customers. The code is available on GitHub under an OpenSource license.

The matrix widget looks like what you can expect from a component of that name:

Read-only matrix of activity report lines, one row per task against days 01 to 31, with a totals row where cells over the daily limit are flagged red

The screenshot above was captured in read-only. Here is its version in editable mode:

The same matrix in editable mode, every cell now a clickable button that increments on click, with a resource picker above and a remove button on each row

The drop-down menu on top of the matrix allows you to dynamically add a new line. A new button appeared on the left to remove each line. Sums are automatically updated when a cell value is updated.

The value of each cell here is set by clicking a button which is cycling through a list of predefined values. But you are free to replace cellโ€™s widget by simple input fields for floats and integer, as well as selection fields.

Another big feature is the ability to render higher dimensions. I simply render them as a hierarchical tree on the left:

Two-level read-only matrix grouping people under a project-manager heading, with monthly columns and totals for productivity and performance

As you can see, Iโ€™ve also added additional information in columns and lines, after the total column and total line.

Again, intermediate sums are updated dynamically, and lines can be added at any level in editable mode:

The two-level matrix in editable mode, each grouped row carrying its own resource selector and per-cell buttons

Finally, as you may have probably guessed by the previous screenshots, each cell can be independently set as read-only or be made invisible. I used this feature to generate ASCII art:

The widget's grid of cells filled in so the ones spell out lettering across the calendar, ASCII art drawn out of timesheet entries

The matrix widget started its life as a proof-of concept. The code base grew organically until it reached its current prototype status. This explain why it targets OpenERP 6.0, and why it still requires huge refactoring.