A build-to-order Odoo module that quietly remembers each user's list-view column widths and restores them on every load, so nobody re-drags the same columns after every refresh. ECOSIRE builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $249.00 USD; request a quote for a scoped proposal.
Manifiesto de la app
Diseñado en torno a tu flujo de trabajo
A build-to-order Odoo module that quietly remembers each user's list-view column widths and restores them on every load, so nobody re-drags the same columns after every refresh. ECOSIRE builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0.
Sin configuración por tu cuenta: una app funcional creada, instalada y con soporte de ECOSIRE.
Empieza con un precio único de desarrollo. Definimos el alcance contigo en el arranque.
ECOSIRE la crea, la configura y la instala en tu Odoo.
Sales en vivo en unas 2–4 semanas, con un periodo de soporte posterior al lanzamiento.
Odoo's list views let users drag column borders to widen or narrow a field, but that resize lives only in the current browser view. The moment a record is opened and closed, a filter is applied, the page is refreshed, or the user logs in the next morning, every column snaps back to Odoo's computed default widths. For teams that live in wide list views all day — a warehouse team scanning stock.move lines, an accountant reconciling account.move.line, a sales manager working a long crm.lead pipeline — that means re-dragging the same three or four columns dozens of times a day. Native Odoo has no per-user persistence for column widths in either Community or Enterprise; the width calculation is derived from the field type and content, and there is no standard setting, ir.config_parameter, or user preference that captures a manual resize.
We build a focused UI enhancement that closes exactly that gap. On the client side we extend the list renderer (the OWL ListRenderer component and its column-resize handler) so that when a user finishes dragging a column border, the new width is captured against a stable key built from the model, the view (view_id / action context), and the field name. On the server side we add a small model — for example ui.list.column.width — with fields for user_id (defaulting to self.env.user), res_model, view_ref, field_name, and width, plus a compute/normalization layer so out-of-range or stale values are ignored gracefully. Widths are read back when the list mounts and applied before first paint, so columns render at the user's preferred size with no visible flicker or re-layout. Persistence is per-user by design, so one person widening a column never disturbs a colleague's layout.
The technical implementation stays firmly inside Odoo's supported extension surface rather than patching core. Security is enforced with ir.model.access.csv giving each internal user read/write only on their own rows, backed by a record rule scoping ui.list.column.width to user_id = uid so the store is genuinely private per user and multi-company safe. The client persists changes through the standard ORM (via RPC), so the same preferences hold whether a user is on the web client or any interface that renders the list view. We keep the write path debounced and lightweight so a burst of resizes results in a single clean save, and we add an optional per-user "reset column widths" action for when someone wants to return a view to Odoo defaults. Everything is packaged as a clean addon with its own __manifest__.py, assets bundle registration, and version-pinned builds for Odoo 17.0, 18.0, and 19.0 (the OWL and asset-bundle differences between those releases are handled in the version we ship you).
Because this is build-to-order, you are not downloading a pre-existing marketplace app. After a short scoping call we confirm which models and views should remember widths, your target Odoo version and edition, and whether you want extras such as admin-set default layouts or export/import of preferences between databases. We then build, test on a staging copy of your environment, and hand over installable source. Typical delivery is 2–4 weeks from confirmed scope. Pricing starts from $249 (indicative, single-company base scope); broader coverage — many models and views, multi-company record-rule tuning, admin-managed default layouts, or migration of saved preferences across databases — increases the quoted scope, and you receive a fixed quote after the scoping call before any work begins.
Teams who spend the day in wide `stock.move` / `stock.picking` list views and lose their tuned column layout on every refresh. They need each operator's preferred widths to stick so scanning long lists stays fast.
Accountants reconciling `account.move.line` and journal lists want reference, partner, and amount columns sized their way permanently, without re-dragging after every filter or record open.
Managers working long `crm.lead` and `sale.order` pipelines who arrange columns for their reporting flow and want that layout restored automatically at next login.
Admins who need a per-user, permission-scoped preference store that is multi-company safe, does not patch core, and can be maintained and version-migrated cleanly across 17.0/18.0/19.0.
| Criterio | ECOSIRE | Construcción personalizada | Competidor | Odoo Nativo |
|---|---|---|---|---|
| Column width persistence across sessions | Built-in and automatic, per user, restored before first paint | Possible but you design and maintain the whole store yourself | May persist widths but on its own fixed key scheme | |
| Per-user isolation | Record rule scopes rows to `user_id = uid`, fully private | Depends entirely on how your team writes the rules | Often global or user-level with limited control | |
| Scope tailored to your models/views | Chosen with you at scoping, extendable later | Fully bespoke but built from scratch | Fixed to the vendor's assumptions, hard to narrow | |
| Core-safe implementation | Clean addon, extends OWL `ListRenderer`, no core patch | Quality varies with your developer's discipline | Unknown until you audit the source | |
| Odoo 17/18/19 + Community/Enterprise | Version-pinned build for your exact target | You handle every version's OWL/asset differences | Version coverage depends on the listing | |
| Support & handover | Post-go-live window, docs, training, git repo handover | Only what you resource internally | Vendor ticket queue, no source ownership | |
| Total cost & predictability | Indicative from $249, fixed quote after scoping | Open-ended developer time and maintenance | Low list price, but rigid and no tailoring | |
| Multi-company behaviour | Respects active company context, multi-company safe | Must be engineered and tested deliberately | Rarely designed for multi-company nuance |
This is build-to-order, so it is not an instant download. After we agree the scope on a short call, typical delivery is 2–4 weeks. Simpler single-model, single-company scopes land toward the shorter end; broad multi-model or multi-company work with admin default layouts takes longer. We confirm the timeline in writing with your fixed quote.
Pricing starts from $249 as an indicative from-price for a single-company base scope. The final number depends on how many models and views must remember widths, your edition, and extras like admin-managed defaults or cross-database preference migration. After a 15–45 minute scoping call we send a fixed quote, and no build work starts until you approve it.
Every engagement includes a post-go-live support window for defect fixes and configuration tweaks. Because we hand over the git repository and full source, your own team can maintain it too. When you upgrade Odoo — for example 18.0 to 19.0 — we can quote a version-migration pass separately, since OWL and asset-bundle internals change between major releases.
It is a clean, self-contained addon with its own `__manifest__.py`. It extends the OWL `ListRenderer` and its resize handler through Odoo's supported client extension points and adds a dedicated model for the saved widths — it does not monkey-patch unrelated views or overwrite core files, which keeps upgrades and audits straightforward.
Yes. Each user's widths are stored against their own `user_id` and protected by `ir.model.access.csv` rules plus a record rule scoping rows to `user_id = uid`. One person resizing a column never changes anyone else's layout, and the store respects the active company context so it is multi-company safe.
We build and version-pin for Odoo 17.0, 18.0, and 19.0, on both Community and Enterprise. You tell us your exact target during scoping and we deliver a build tested against that version so the OWL and asset-bundle differences are handled correctly.
Yes. During scoping you nominate the models and views that matter most — for instance inventory moves, accounting lines, or your CRM pipeline. We can start with a focused set and, if you want, include an admin-defined default layout that seeds sensible starting widths while still allowing each user to override them.

A build-to-order Odoo localization that loads Algeria's full wilaya and commune hierarchy with bilingual French and Arabic names, wired into partner addresses and reporting. ECOSIRE builds, installs, and supports it after your quotation.
A build-to-order Odoo module that quietly remembers each user's list-view column widths and restores them on every load, so nobody re-drags the same columns after every refresh. ECOSIRE builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0.