A build-to-order Odoo module that turns print enquiries into costed estimates, routes approved jobs through press stages on a live job ticket, and closes the loop with material consumption, outwork tracking, delivery and billing. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $499.00 USD; request a quote for a scoped proposal.
Illustrative previewA build-to-order Odoo module that turns print enquiries into costed estimates,
routes approved jobs through press stages on a live job ticket, and closes the loop with material consumption, outwork tracking, delivery and billing.
No DIY setup — a working app, built, installed and supported by ECOSIRE.
Start with a one-time build price. We scope it with you at kickoff.
ECOSIRE builds, configures and installs it on your Odoo.
You go live in about 2–4 weeks, with a post-launch support window.
A commercial print shop does not quote a product, it quotes a calculation. Trim size, up-count on the parent sheet, grain direction, sheet wastage per make-ready, plate count per colour per side, ink coverage, folding and binding passes, and a finishing step that may leave the building entirely. Odoo's native sale.order line takes a product and a quantity, and mrp.bom assumes a fixed component list — neither can express "3,000 A5 flyers, 4/4 on 170gsm gloss, 4-up on SRA3, 12% make-ready waste". So estimators end up in a spreadsheet that lives on one person's laptop, the accepted price never reconciles with the paper actually issued from the store, and the press floor works from a printed docket that the ERP has never heard of.
We build a dedicated estimation and job-ticket layer on top of standard Odoo. A printing.estimate model holds the specification — trim size, parent stock, colours per side, print method, quantity and run-on quantities — and computed fields written with @api.depends derive the imposition (sheets up, parent sheets required, waste allowance by press and by make-ready), the plate count, the ink and consumable draw, and the cost roll-up across paper, plates, press time, finishing and outwork. A markup or target-margin rule turns cost into price, and confirming the estimate generates a native sale.order so quotations, invoicing and the customer portal stay Odoo-standard rather than a parallel universe. Repeat orders re-run the same calculation against current stock prices instead of copying last year's number.
On acceptance, the estimate produces a printing.job ticket with a stage-based workflow — prepress, plating, press, finishing, outwork, despatch — surfaced as a kanban board plus list and form views. Each stage records operator, machine, start and stop, actual sheets consumed and spoilage, so estimated versus actual is a report rather than an argument. Material movement is real Odoo inventory: paper and ink are products with their own units of measure and, where you want it, lot or reel tracking, and consumption posts stock moves against the job so valuation and reordering behave normally. Outwork (lamination, foiling, die-cutting, specialist binding) raises a purchase order against the subcontractor, holds the promised return date on the job ticket, and blocks despatch until the work is back. The job ticket itself is a QWeb report your press operators can print or open on a tablet, carrying the barcode or reference that links every subsequent scan back to the job.
Everything is built as a proper Odoo addon. A clean __manifest__.py with explicit dependencies, models under models/ inheriting models.Model and mail.thread for chatter and follower notifications, access control through ir.model.access.csv plus record rules so an estimator, a press operator and a manager each see the right slice, views in XML with OWL components only where an interaction genuinely needs one, server and automated actions for the routine nudges (overdue outwork, jobs sitting in prepress, estimates awaiting customer approval), and every model exposed over XML-RPC and JSON-RPC so your web-to-print storefront, MIS or shop-floor scanner can read and write jobs. It runs on Odoo Community — Enterprise adds the nicer planning and dashboard widgets and mobile barcode flows if you have them, and we ship a build that degrades cleanly if you do not. Supported on 17.0, 18.0 and 19.0.
This is a build-to-order product, not an instant download from the app store. You request a quotation, we run a scoping call to pin down your presses, stocks, imposition rules and finishing routes, and we send back a fixed scope with a price. Typical delivery is 2-4 weeks from confirmed scope, depending on how many press and finishing configurations your estimator needs and whether we are integrating a web-to-print front end or existing machine data. You get the source, installed and configured on your Odoo version, with documentation, training and a post-go-live support window — and because we wrote it, we can extend it later instead of you inheriting an abandoned third-party addon.
Quotes twenty enquiries a day from a spreadsheet nobody else can safely edit. Needs imposition, waste and plate maths inside Odoo so any estimator produces the same number, run-on bands come out in one pass, and the accepted price flows straight into a sale order instead of being retyped.
Schedules jobs across litho and digital presses and chases finishing that has left the building. Needs one live job ticket showing stage, machine, operator and outwork status, with actual sheets and spoilage captured so next quarter's waste allowances rest on evidence rather than habit.
Suspects the shop is losing money on certain job types but cannot prove it because estimates live outside the ERP. Wants estimated-versus-actual per job and per press, real paper valuation, and a system built on Odoo that finance, sales and production all share.
Already runs Sales, Inventory, Purchase and Accounting on Odoo and refuses to bolt on a separate print MIS. Wants a properly written addon — clean manifest, real access rules, RPC-accessible models — that they can read, extend and carry to the next major version.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Estimation maths (imposition, waste, plates) | Computed fields on a dedicated estimate model, configured to your presses and stocks during scoping | Achievable, but you specify and test every formula yourself before you know if it is right | Usually a fixed formula set that assumes the vendor's own shop; house rules need a fork | No concept of imposition or make-ready — a sale line is a product and a quantity |
| Job ticket and press-floor workflow | Stage-based `printing.job` with per-stage operator, machine, sheets and spoilage capture, plus a QWeb ticket | Built to your exact floor, at the cost of designing the whole stage model from scratch | Generic task or manufacturing-order stages rebadged as print stages | Manufacturing orders assume a fixed BoM and routing; a print run does not fit that shape |
| Material and ink consumption | Real stock moves against the job, with optional lot/reel tracking, so valuation and reordering stay native | Depends entirely on whether the developer wired it to `stock.move` or invented a side ledger | Often a text field or a private consumption table that never reaches inventory valuation | Inventory works, but nothing links a paper draw to a specific print job |
| Outwork and subcontracted finishing | Raises a purchase order, tracks promised return on the job, and gates despatch until it is back | Frequently deferred to phase two and never built | Typically out of scope; handled by email and a whiteboard | Subcontracting exists for manufacturing, but is not tied to a print job's finishing stage |
| Fit to your Odoo version | Built and tested for your exact 17.0, 18.0 or 19.0 database, Community or Enterprise | Matches your version by definition, but you carry the entire test burden | Listed versions vary in quality; the newest release is often the least exercised | Always current, because there is nothing print-specific to maintain |
| Source code and lock-in | Full source plus git repository handover, so you or another partner can maintain it | You own it outright, along with every future fix | Source is usually readable, but you have no influence over the roadmap or bug queue | Odoo core — maintained upstream, but it will not become a print MIS |
| Cost and time to a working system | Fixed scope and price after a 30-minute call; typically 2-4 weeks to delivery | Discovery, build and rework; usually the longest and least predictable route | Cheap and immediate, expensive the moment your rules differ from the vendor's | Free, but the estimating spreadsheet stays exactly where it is |
| Integration with storefront, scanners or an MIS | Every model exposed over XML-RPC and JSON-RPC; specific integrations scoped on request | As open as you build it — and as documented as you make it | Often no documented API surface beyond whatever Odoo exposes by accident | Odoo's RPC API is available, but there are no print-domain models behind it |
This is build-to-order, so nothing is downloaded on the day you buy. We start with a scoping call (about 30 minutes) covering your presses, parent stocks, imposition and waste rules, finishing and outwork routes, and how you want jobs to invoice. We then send a fixed written scope and price. Typical delivery is 2-4 weeks from confirmed scope; wider work — multiple plants, a web-to-print integration, or machine data capture — is quoted with its own timeline before we start.
We build for Odoo 17.0, 18.0 and 19.0, and the build targets your exact version rather than a lowest common denominator. It runs on Community: estimation, job tickets, stock consumption, outwork, QWeb reports and the RPC interface all use core framework features. Enterprise adds nicer planning and dashboard widgets and the mobile barcode flows if you already have it, and the build degrades cleanly when those are absent.
Every build includes a post-go-live support window for defect fixes and configuration adjustments, with the duration stated in your scope. After that you can take an ongoing support agreement or call us per change. Because you receive the git repository and full source, you are never locked in — your own developer can maintain it. When you move to a new Odoo major version we quote the migration as a fixed piece of work rather than leaving you on an abandoned addon.
No. Confirmed estimates generate standard `sale.order` records, job material consumption posts ordinary stock moves, outwork raises a normal `purchase.order`, and invoicing follows your existing Odoo configuration. We add models and views rather than replacing core behaviour, which is also what keeps upgrades tractable.
That is precisely what the scoping call captures. Sheets-up, grain direction, gripper and trim allowances, make-ready waste per press, running waste per thousand, plate count by colours and sections, and finishing passes are all configuration on the estimate model, not hard-coded constants. If you have a rule that does not fit the standard configuration — a house imposition table, a customer-specific waste agreement — we implement it as part of the agreed scope.
Yes. Every model is exposed over Odoo's XML-RPC and JSON-RPC API, so a storefront can create estimates or jobs, a scanner can advance a job stage or post spoilage, and an existing MIS can read status. If you want a specific integration built rather than just the endpoints, tell us on the scoping call and we scope it alongside the module.
We can walk you through a working build on a demo database during or after the scoping call, using a job specification close to your own so you can judge the estimation maths against a number you already know. There is no self-serve trial, because each build is configured to a specific shop's presses, stocks and rules rather than shipped as a generic download.

A made-to-order Odoo configuration package that turns Odoo into a practice-management platform for accounting firms — client onboarding, recurring engagements, deadline tracking, and time-to-invoice built to your workflow. ECOSIRE builds, installs, and supports it after you request a quotation.
A build-to-order Odoo module that turns print enquiries into costed estimates, routes approved jobs through press stages on a live job ticket, and closes the loop with material consumption, outwork tracking, delivery and billing.