Skip to main content
Sale Order Line Images — A build-to-order Odoo module that renders each product's image directly on the sale order line and i — 1/1Illustrative preview

A build-to-order Odoo module that renders each product's image directly on the sale order line and inside the

printed sale quotation, so reps and customers recognize what is being sold at a glance.

ECOSIRE scopes, builds, installs, and supports it for your database.

What is Sale Order Line Images?

A build-to-order Odoo module that renders each product's image directly on the sale order line and inside the printed sale quotation, so reps and customers recognize what is being sold at a glance. ECOSIRE scopes, builds, installs, and supports it for your database. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Key Features

Stored `related='product_id.image_128'` (or `@api.depends('product_id')` compute) image field added to `sale.order.line`, strategy chosen for list-render performance
Binary `image` widget column added to the sale order-line `tree`/`list` view via XML `xpath`/`position` inheritance — no core patching
Inherited `sale.report_saleorder_document` QWeb template emits a per-line `<img>` on the quotation and confirmed order PDF
Renders the resized `image_128` variant rather than the full `image_1920` to keep list scrolling and PDF generation fast
CSS-constrained image dimensions in the report so wkhtmltopdf/QWeb output stays lightweight and print layout is preserved
Optional/toggleable column so users can hide thumbnails on long, hundred-plus-line orders
Correct fallback rendering when a product has no image set (placeholder or blank cell, per your preference)
Respects existing `ir.model.access.csv` and `sale.order` record rules — no image exposed on orders a user cannot already open
Optional extension to the customer portal quotation view and backend order-form line view
Optional propagation of the line image to delivery slip (`stock.picking`) and customer invoice (`account.move`) reports
Compatible with product variants — the image resolves from `product.product` so variant-specific art shows where configured
Clean uninstall path that removes the added field and view/report extensions without leaving orphaned columns
Delivered against your target Odoo series (17.0 / 18.0 / 19.0) with a proper `__manifest__.py`, dependency declaration, and version pin
Data-independent: reads live product images through the ORM, so no batch import or image duplication is introduced

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 3

    Go live + support

    You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.

Technical Specifications

Odoo Compatibility
Odoo 17, Odoo 18, Odoo 19
Editions
Enterprise & Community
License
Licence confirmation required
Python Requirement
Python 3.10+
Database
PostgreSQL 12+

About this Product

Sales reps and customers read quotations by product name and internal reference, but text alone is a weak signal. On configurable products, variant-heavy catalogs, or long multi-line orders, a wrong line is easy to miss until goods are picked or the customer disputes the PDF. Odoo core already stores a product image (image_1920 plus its resized image_128/image_256 companions on product.product and product.template), yet the standard sale.order.line editable list view shows none of it, and the out-of-the-box QWeb sale report (sale.report_saleorder_document) prints a text-only table. Teams end up cross-referencing a separate catalog or spreadsheet just to confirm a line is right — exactly the manual step Odoo is supposed to remove.

We build a focused module that surfaces the product thumbnail where the work happens. On the model side we add an image field to sale.order.line — either a stored related='product_id.image_128' or a compute method with @api.depends('product_id'), chosen during scoping for the best list-render performance on your order sizes — and expose it as an image/binary widget column in the order-line tree/list view. On the document side we inherit sale.report_saleorder_document via QWeb and emit a correctly sized <img> per line so the same picture appears on the quotation and confirmed order PDF. All view and report changes ship as XML inheritance (xpath with position) layered over core rather than patched into it, so the module installs cleanly on Community or Enterprise and survives upgrades.

Because images are heavier than text, we engineer for scale rather than just correctness. We render the small resized variant (image_128) not the full image_1920, keep the column optional/toggleable so power users can hide it on hundred-line orders, and make sure the report image is constrained by CSS so wkhtmltopdf/QWeb-to-PDF rendering stays fast and the file size stays sane. Access is respected end to end: the line inherits its record rules and ir.model.access.csv from sale.order, so nobody sees an image on an order they could not already open, and the field is read-only where the line is read-only. Where you want the image to also flow to the portal quotation view or the backend order form header, we scope that as an explicit view extension too.

Delivery is build-to-order. After a short scoping call we confirm exactly which surfaces need the image (order-line list, order form, PDF quotation, portal, optionally delivery or invoice reports), agree the field strategy and Odoo series (17.0, 18.0, or 19.0), and give you a fixed quote. We build on a staging copy of your database, run UAT with your own products and templates, then install on production with a documented rollback. Typical delivery is one working week from confirmed scope. Pricing starts from $999 (indicative, single-company base scope); extending the image to additional reports (delivery slip, invoice, portal), multi-company report layouts, or bespoke image sizing/branding requirements increases the quoted scope.

What you get

  • Installable module source code for your Odoo series, packaged with a correct `__manifest__.py` and dependency declarations
  • Installation and configuration on your staging environment, then production, by an ECOSIRE Odoo engineer
  • Technical documentation covering the model field, view inheritance, and QWeb report extension
  • End-user guide plus a live training session for your sales team on the new order-line and PDF behavior
  • Post-go-live support window for defect fixes and questions
  • UAT sign-off on a staging copy of your database with a documented rollback plan
  • Handover of the full git repository with commit history and a tagged release
  • Odoo series upgrade notes so the module can be re-validated when you move between 17.0 / 18.0 / 19.0

Who this is for

Sales Operations Manager

Owns quotation accuracy and wants reps and customers to visually confirm each line before an order is confirmed, cutting wrong-item disputes on long or variant-heavy orders.

B2B Wholesale / Distribution Team

Sells catalogs of visually similar SKUs where product images on the line and the PDF prevent the picking and billing errors that plain text references miss.

Odoo Administrator / Internal IT

Needs the capability delivered as clean XML/QWeb inheritance that installs on Community or Enterprise, respects existing access rules, and survives version upgrades — not a core hack.

Customer-Facing Account Executive

Wants the sales quotation PDF to look richer and clearer, so customers recognize exactly what they are buying and approve faster.

How Sale Order Line Images Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
Delivery modelBuild-to-order, scoped and installed for youYou build and maintain it in-houseInstant download, generic behaviorNot available in core
Order-line thumbnailOptional image widget column tuned for performanceDepends on your team's implementationUsually a fixed column, limited togglingText-only order line, no image
Sale report (PDF) imageInherited QWeb template, CSS-constrained per lineRequires your own QWeb workOften list-only; PDF support variesText-only `report_saleorder_document`
Community vs Enterprise fitXML/QWeb inheritance, works on both, upgrade-safeWhatever you engineer and testVaries; may assume one editionN/A
Access rules respectedInherits `sale.order` record rules and ACLsYour responsibility to wire correctlyGenerally inherited but rarely documentedN/A
Performance engineeringUses `image_128`, optional column, sized report imagesDepends on your care with `image_1920`Not always optimized for long ordersN/A
Support and handoverSupport window, docs, training, git repo handoverYou own all supportVendor forum/ticket, no source insightCommunity forums only
Fit to your surfacesScoped to your list/form/PDF/portal/reportsFully bespoke but slower to deliverFixed feature set, take it as-isNone

Frequently Asked Questions about Sale Order Line Images

Is this an existing app I can download and install today?

No. This is a build-to-order module. ECOSIRE builds it to your confirmed scope and target Odoo series, then installs and supports it on your database. There is no instant download — you receive tested source code and a proper installation.

How long does delivery take?

Typical delivery is one working week from confirmed scope. After the scoping call we agree exactly which surfaces need the image and which Odoo series you run, build on staging, run UAT, then deploy to production with a rollback plan.

How does pricing and scoping work?

Pricing starts from $999 as an indicative single-company base scope. We give you a fixed quote after a short scoping call. Extending the image to extra reports, multi-company layouts, portal views, or bespoke sizing increases the quoted scope and price.

Which Odoo versions and editions are supported?

We build for Odoo 17.0, 18.0, or 19.0, on Community or Enterprise. Because the changes are delivered as XML view and QWeb report inheritance rather than core patches, they layer cleanly on either edition.

Will this slow down large sale orders or the PDF?

We render the resized `image_128` variant instead of the full-resolution image, keep the list column optional, and constrain the report image with CSS. This keeps order-line scrolling and PDF generation fast even on long orders.

Do you offer support and updates after go-live?

Yes. Every build includes a post-go-live support window for defect fixes and questions, plus the full git repository so your team can maintain it. We can also re-validate the module when you upgrade between Odoo series under a separate scope.

Does it respect our access rights and record rules?

Yes. The image field lives on `sale.order.line`, which inherits the `ir.model.access.csv` permissions and record rules of `sale.order`. Nobody sees an image on an order they could not already open, and the field is read-only wherever the line is.

Request a quote

Sale Order Line Images

A build-to-order Odoo module that renders each product's image directly on the sale order line and inside the printed sale quotation, so reps and customers recognize what is being sold at a glance. ECOSIRE scopes, builds, installs, and supports it for your database.

  • Stored `related='product_id.image_128'` (or `@api.depends('product_id')` compute) image field added to `sale.order.line`, strategy chosen for list-render performance
  • Binary `image` widget column added to the sale order-line `tree`/`list` view via XML `xpath`/`position` inheritance — no core patching
  • Inherited `sale.report_saleorder_document` QWeb template emits a per-line `<img>` on the quotation and confirmed order PDF
  • Renders the resized `image_128` variant rather than the full `image_1920` to keep list scrolling and PDF generation fast

Request a Quotation

Tell us about your Sale Order Line Images requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.